]> git.proxmox.com Git - pmg-gui.git/blame - js/PBSSnapshotView.js
spamdetector: add extract_text option
[pmg-gui.git] / js / PBSSnapshotView.js
CommitLineData
8b349e01
TL
1Ext.define('PMG.PBSConfig', {
2 extend: 'Ext.panel.Panel',
3 xtype: 'pmgPBSConfig',
4
5 controller: {
6 xclass: 'Ext.app.ViewController',
7
8 callRestore: function(grid, record) {
9 let remote = this.getViewModel().get('remote');
10 Ext.create('PMG.RestoreWindow', {
11 remote: remote,
12 backup_id: record.data['backup-id'],
13 backup_time: record.data['backup-time'],
14 }).show();
15 },
16
17 restoreSnapshot: function(button) {
18 let me = this;
d2b8eac4 19 let view = me.lookup('snapshotsGrid');
8b349e01
TL
20 let record = view.getSelection()[0];
21 me.callRestore(view, record);
22 },
23
24 runBackup: function(button) {
25 let me = this;
d2b8eac4 26 let view = me.lookup('snapshotsGrid');
8b349e01 27 let remote = me.getViewModel().get('remote');
4afe714b 28 Ext.create('PMG.BackupWindow', {
8b349e01 29 url: `/nodes/${Proxmox.NodeName}/pbs/${remote}/snapshot`,
4afe714b
SI
30 taskDone: () => view.getStore().load(),
31 }).show();
8b349e01
TL
32 },
33
34 reload: function(grid) {
35 let me = this;
36 let selection = grid.getSelection();
37 me.showInfo(grid, selection);
38 },
39
40 showInfo: function(grid, selected) {
41 let me = this;
42 let viewModel = me.getViewModel();
43 if (selected[0]) {
44 let remote = selected[0].data.remote;
45 viewModel.set('selected', true);
46 viewModel.set('remote', remote);
47
48 // set grid stores and load them
d2b8eac4 49 let remstore = me.lookup('snapshotsGrid').getStore();
6ff66068
TL
50 remstore
51 .getProxy()
52 .setUrl(`/api2/json/nodes/${Proxmox.NodeName}/pbs/${remote}/snapshot`);
8b349e01 53 remstore.load();
d2b8eac4
TL
54
55 let scheduleStore = me.lookup('schedulegrid').rstore;
56 scheduleStore
57 .getProxy()
58 .setUrl(`/api2/json/nodes/${Proxmox.NodeName}/pbs/${remote}/timer`);
59 scheduleStore.load();
8b349e01
TL
60 } else {
61 viewModel.set('selected', false);
62 }
63 },
64 reloadSnapshots: function() {
65 let me = this;
66 let grid = me.lookup('grid');
67 let selection = grid.getSelection();
68 me.showInfo(grid, selection);
69 },
70 init: function(view) {
71 let me = this;
72 me.lookup('grid').relayEvents(view, ['activate']);
8b349e01 73
d2b8eac4
TL
74 let remoteGrid = me.lookup('grid');
75 view.mon(remoteGrid.store, 'load', function(store, r, success, o) {
76 if (success) {
77 remoteGrid.getSelectionModel().select(0);
78 }
79 });
80
81 let snapshotGrid = me.lookup('snapshotsGrid');
82 let schedulegrid = me.lookup('schedulegrid');
83
84 Proxmox.Utils.monStoreErrors(snapshotGrid, snapshotGrid.getStore(), true);
85 Proxmox.Utils.monStoreErrors(schedulegrid, schedulegrid.getStore(), true);
8b349e01
TL
86 },
87
88 control: {
89 'grid[reference=grid]': {
90 selectionchange: 'showInfo',
91 load: 'reload',
92 },
d2b8eac4 93 'grid[reference=snapshotsGrid]': {
8b349e01
TL
94 itemdblclick: 'restoreSnapshot',
95 },
96 },
97 },
98
99 viewModel: {
100 data: {
101 remote: '',
102 selected: false,
103 },
104 },
105
106 layout: 'border',
107
108 items: [
109 {
8b349e01 110 xtype: 'pmgPBSConfigGrid',
d2b8eac4
TL
111 reference: 'grid',
112 title: gettext('Remote'),
113 hidden: false,
114 region: 'center',
115 minHeight: 130,
8b349e01
TL
116 border: false,
117 },
118 {
d2b8eac4 119 xtype: 'proxmoxObjectGrid',
8b349e01 120 region: 'south',
d2b8eac4
TL
121 reference: 'schedulegrid',
122 title: gettext('Schedule'),
123 height: 155,
124 border: false,
8b349e01 125 hidden: true,
d2b8eac4
TL
126 emptyText: gettext('No schedule setup.'),
127 tbar: [
128 {
129 text: gettext('Set Schedule'),
130 handler: function() {
131 let me = this;
132 let remote = me.lookupViewModel().get('remote');
133 let win = Ext.createWidget('pmgPBSScheduleEdit', {
134 remote: remote,
135 autoShow: true,
136 });
137 win.on('destroy', () => me.up('grid').rstore.load());
138 },
139 },
140 {
141 xtype: 'proxmoxStdRemoveButton',
142 baseurl: `/nodes/${Proxmox.NodeName}/pbs/`,
143 callback: function() {
144 this.up('grid').rstore.load();
145 },
146 text: gettext('Remove Schedule'),
147 selModel: false,
148 confirmMsg: function(_rec) {
149 let me = this;
150 let remote = me.lookupViewModel().get('remote');
151 return Ext.String.format(
152 gettext('Are you sure you want to remove the schedule for {0}'),
153 `'${remote}'`,
154 );
155 },
156 getUrl: function(_rec) {
157 let remote = this.lookupViewModel().get('remote');
158 return `${this.baseurl}/${remote}/timer`;
159 },
160 },
161 '->',
162 {
163 text: gettext('Reload'),
164 iconCls: 'fa fa-refresh',
165 handler: function() {
166 this.up('grid').rstore.load();
167 },
168 },
169 ],
170 bind: {
171 title: Ext.String.format(gettext("Schedule on '{0}'"), '{remote}'),
172 hidden: '{!selected}',
173 },
174 url: '/', // hack, obj. grid is a bit dumb..
175 rows: {
176 schedule: {
177 text: gettext('Schedule'),
178 required: true,
179 defaultValue: gettext('None'),
180 },
181 delay: {
182 text: gettext('Delay'),
183 },
184 'next-run': {
185 text: gettext('Next Run'),
186 },
187 },
188 },
189 {
190 xtype: 'grid',
191 region: 'south',
192 reference: 'snapshotsGrid',
193 height: '50%',
8b349e01
TL
194 border: false,
195 split: true,
d2b8eac4 196 hidden: true,
8b349e01
TL
197 emptyText: gettext('No backups on remote'),
198 tbar: [
199 {
22988ae4 200 text: gettext('Backup Now'),
8b349e01 201 handler: 'runBackup',
8b349e01 202 },
22988ae4 203 '-',
8b349e01
TL
204 {
205 xtype: 'proxmoxButton',
206 text: gettext('Restore'),
207 handler: 'restoreSnapshot',
208 disabled: true,
209 },
210 {
211 xtype: 'proxmoxStdRemoveButton',
212 text: gettext('Forget Snapshot'),
213 disabled: true,
214 getUrl: function(rec) {
215 let me = this;
216 let remote = me.lookupViewModel().get('remote');
217 let snapshot = `${rec.data['backup-id']}/${rec.data['backup-time']}`;
218 return `/nodes/${Proxmox.NodeName}/pbs/${remote}/snapshot/${snapshot}`;
219 },
220 confirmMsg: function(rec) {
221 let me = this;
222 let snapshot = `${rec.data['backup-id']}/${rec.data['backup-time']}`;
223 return Ext.String.format(
224 gettext('Are you sure you want to forget snapshot {0}'),
225 `'${snapshot}'`,
226 );
227 },
228 callback: 'reloadSnapshots',
229 },
d2b8eac4
TL
230 '->',
231 {
232 text: gettext('Reload'),
233 iconCls: 'fa fa-refresh',
234 handler: function() {
235 this.up('grid').store.load();
236 },
237 },
8b349e01
TL
238 ],
239 store: {
6ff66068 240 fields: ['backup-id', 'backup-time', 'size', 'ctime', 'encrypted'],
8b349e01
TL
241 proxy: { type: 'proxmox' },
242 sorters: [
243 {
6ff66068 244 property: 'backup-time',
8b349e01
TL
245 direction: 'DESC',
246 },
247 ],
248 },
249 bind: {
6ff66068
TL
250 title: Ext.String.format(
251 gettext("Backup snapshots on '{0}'"),
252 '{remote}',
253 ),
d2b8eac4 254 hidden: '{!selected}',
8b349e01
TL
255 },
256 columns: [
257 {
258 text: 'Group ID',
259 dataIndex: 'backup-id',
260 flex: 1,
261 },
262 {
263 text: 'Time',
264 dataIndex: 'backup-time',
265 width: 180,
266 },
267 {
268 text: 'Size',
269 dataIndex: 'size',
ff23b1b3 270 renderer: Proxmox.Utils.render_size,
8b349e01
TL
271 flex: 1,
272 },
273 {
274 text: 'Encrypted',
275 dataIndex: 'encrypted',
276 hidden: true, // FIXME: actually return from API
277 renderer: Proxmox.Utils.format_boolean,
278 flex: 1,
279 },
280 ],
281 },
282 ],
283
284});