]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/grid/BackupView.js
reduce translation overhead
[pve-manager.git] / www / manager6 / grid / BackupView.js
CommitLineData
7bd89462
DM
1Ext.define('PVE.grid.BackupView', {
2 extend: 'Ext.grid.GridPanel',
3
4 alias: ['widget.pveBackupView'],
5
6
7 initComponent : function() {
8 var me = this;
9
10 var nodename = me.pveSelNode.data.node;
11 if (!nodename) {
12 throw "no node name specified";
13 }
14
15 var vmid = me.pveSelNode.data.vmid;
16 if (!vmid) {
17 throw "no VM ID specified";
18 }
19
20 var vmtype = me.pveSelNode.data.type;
21 if (!vmtype) {
22 throw "no VM type specified";
23 }
24
25 var filterFn;
26 if (vmtype === 'openvz') {
27 filterFn = function(item) {
28 return item.data.volid.match(':backup/vzdump-openvz-');
29 };
30 } else if (vmtype === 'lxc') {
31 filterFn = function(item) {
32 return item.data.volid.match(':backup/vzdump-lxc-');
33 };
34 } else if (vmtype === 'qemu') {
35 filterFn = function(item) {
36 return item.data.volid.match(':backup/vzdump-qemu-');
37 };
38 } else {
39 throw "unsupported VM type '" + vmtype + "'";
40 }
41
42 me.store = Ext.create('Ext.data.Store', {
43 model: 'pve-storage-content',
44 sorters: {
45 property: 'volid',
46 order: 'DESC'
47 },
48 filters: { filterFn: filterFn }
49 });
50
51 var reload = Ext.Function.createBuffered(function() {
69c635d7 52 if (me.store && me.store.proxy.url) {
7bd89462
DM
53 me.store.load();
54 }
55 }, 100);
56
57 var setStorage = function(storage) {
58 var url = '/api2/json/nodes/' + nodename + '/storage/' + storage + '/content';
59 url += '?content=backup';
60
61 me.store.setProxy({
62 type: 'pve',
63 url: url
64 });
65
66 reload();
67 };
68
69 var storagesel = Ext.create('PVE.form.StorageSelector', {
70 nodename: nodename,
71 fieldLabel: gettext('Storage'),
72 labelAlign: 'right',
73 storageContent: 'backup',
74 allowBlank: false,
75 listeners: {
76 change: function(f, value) {
77 setStorage(value);
78 }
79 }
80 });
81
82 var storagefilter = Ext.create('Ext.form.field.Text', {
83 fieldLabel: gettext('Search'),
84 labelWidth: 50,
85 labelAlign: 'right',
86 enableKeyEvents: true,
87 listeners: {
88 buffer: 500,
89 keyup: function(field) {
90 me.store.clearFilter(true);
91 me.store.filter([
5c416459 92 filterFn,
7bd89462
DM
93 {
94 property: 'volid',
95 value: field.getValue(),
96 anyMatch: true,
97 caseSensitive: false
98 }
99 ]);
100 }
101 }
102 });
103
104 var sm = Ext.create('Ext.selection.RowModel', {});
105
106 var backup_btn = Ext.create('Ext.button.Button', {
107 text: gettext('Backup now'),
108 handler: function() {
109 var win = Ext.create('PVE.window.Backup', {
110 nodename: nodename,
111 vmid: vmid,
112 vmtype: vmtype,
113 storage: storagesel.getValue()
114 });
115 win.show();
116 }
117 });
118
119 var restore_btn = Ext.create('PVE.button.Button', {
120 text: gettext('Restore'),
121 disabled: true,
122 selModel: sm,
123 enableFn: function(rec) {
124 return !!rec;
125 },
126 handler: function(b, e, rec) {
127 var volid = rec.data.volid;
128
129 var win = Ext.create('PVE.window.Restore', {
130 nodename: nodename,
131 vmid: vmid,
132 volid: rec.data.volid,
133 volidText: PVE.Utils.render_storage_content(rec.data.volid, {}, rec),
134 vmtype: vmtype
135 });
136 win.show();
137 win.on('destroy', reload);
138 }
139 });
140
141 var delete_btn = Ext.create('PVE.button.Button', {
142 text: gettext('Remove'),
143 disabled: true,
144 selModel: sm,
145 dangerous: true,
146 confirmMsg: function(rec) {
147 var msg = Ext.String.format(gettext('Are you sure you want to remove entry {0}'),
148 "'" + rec.data.volid + "'");
16152937 149 msg += " " + gettext('This will permanently erase all data.');
7bd89462
DM
150
151 return msg;
152 },
153 enableFn: function(rec) {
154 return !!rec;
155 },
156 handler: function(b, e, rec){
157 var storage = storagesel.getValue();
158 if (!storage) {
159 return;
160 }
161
162 var volid = rec.data.volid;
163 PVE.Utils.API2Request({
164 url: "/nodes/" + nodename + "/storage/" + storage + "/content/" + volid,
165 method: 'DELETE',
166 waitMsgTarget: me,
167 failure: function(response, opts) {
168 Ext.Msg.alert('Error', response.htmlStatus);
169 },
170 success: function(response, options) {
171 reload();
172 }
173 });
174 }
175 });
176
177 Ext.apply(me, {
178 stateful: false,
179 selModel: sm,
180 tbar: [ backup_btn, restore_btn, delete_btn, '->', storagesel, storagefilter ],
181 columns: [
182 {
183 header: gettext('Name'),
184 flex: 1,
185 sortable: true,
186 renderer: PVE.Utils.render_storage_content,
187 dataIndex: 'volid'
188 },
189 {
190 header: gettext('Format'),
191 width: 100,
192 dataIndex: 'format'
193 },
194 {
195 header: gettext('Size'),
196 width: 100,
197 renderer: PVE.Utils.format_size,
198 dataIndex: 'size'
199 }
200 ],
201 listeners: {
c0b3df6e 202 activate: reload
7bd89462
DM
203 }
204 });
205
206 me.callParent();
207 }
208});