]>
Commit | Line | Data |
---|---|---|
1665b840 FE |
1 | Ext.define('PVE.storage.BackupView', { |
2 | extend: 'PVE.storage.ContentView', | |
3 | ||
4 | alias: 'widget.pveStorageBackupView', | |
5 | ||
1665b840 FE |
6 | initComponent: function() { |
7 | var me = this; | |
8 | ||
9 | var nodename = me.nodename = me.pveSelNode.data.node; | |
10 | if (!nodename) { | |
11 | throw "no node name specified"; | |
12 | } | |
13 | ||
14 | var storage = me.storage = me.pveSelNode.data.storage; | |
15 | if (!storage) { | |
16 | throw "no storage ID specified"; | |
17 | } | |
18 | ||
19 | me.content = 'backup'; | |
20 | ||
21 | var sm = me.sm = Ext.create('Ext.selection.RowModel', {}); | |
22 | ||
23 | var reload = function() { | |
24 | me.store.load(); | |
25 | }; | |
26 | ||
e969d187 FE |
27 | let pruneButton = Ext.create('Proxmox.button.Button', { |
28 | text: gettext('Prune group'), | |
29 | disabled: true, | |
30 | selModel: sm, | |
31 | setBackupGroup: function(backup) { | |
32 | if (backup) { | |
33 | let name = backup.text; | |
34 | let vmid = backup.vmid; | |
35 | let format = backup.format; | |
36 | ||
37 | let vmtype; | |
38 | if (name.startsWith('vzdump-lxc-') || format === "pbs-ct") { | |
39 | vmtype = 'lxc'; | |
40 | } else if (name.startsWith('vzdump-qemu-') || format === "pbs-vm") { | |
41 | vmtype = 'qemu'; | |
42 | } | |
43 | ||
44 | if (vmid && vmtype) { | |
45 | this.setText(gettext('Prune group') + ` ${vmtype}/${vmid}`); | |
46 | this.vmid = vmid; | |
47 | this.vmtype = vmtype; | |
48 | this.setDisabled(false); | |
49 | return; | |
50 | } | |
51 | } | |
52 | this.setText(gettext('Prune group')); | |
53 | this.vmid = null; | |
54 | this.vmtype = null; | |
55 | this.setDisabled(true); | |
56 | }, | |
57 | handler: function(b, e, rec) { | |
58 | let win = Ext.create('PVE.window.Prune', { | |
59 | nodename: nodename, | |
60 | storage: storage, | |
61 | backup_id: this.vmid, | |
62 | backup_type: this.vmtype, | |
63 | }); | |
64 | win.show(); | |
65 | win.on('destroy', reload); | |
66 | }, | |
67 | }); | |
68 | ||
69 | me.on('selectionchange', function(model, srecords, eOpts) { | |
70 | if (srecords.length === 1) { | |
71 | pruneButton.setBackupGroup(srecords[0].data); | |
72 | } else { | |
73 | pruneButton.setBackupGroup(null); | |
74 | } | |
75 | }); | |
76 | ||
878bbf0b SR |
77 | let isPBS = me.pluginType === 'pbs'; |
78 | ||
1665b840 FE |
79 | me.tbar = [ |
80 | { | |
81 | xtype: 'proxmoxButton', | |
82 | text: gettext('Restore'), | |
83 | selModel: sm, | |
84 | disabled: true, | |
1665b840 FE |
85 | handler: function(b, e, rec) { |
86 | var vmtype; | |
87 | if (PVE.Utils.volume_is_qemu_backup(rec.data.volid, rec.data.format)) { | |
88 | vmtype = 'qemu'; | |
89 | } else if (PVE.Utils.volume_is_lxc_backup(rec.data.volid, rec.data.format)) { | |
90 | vmtype = 'lxc'; | |
91 | } else { | |
92 | return; | |
93 | } | |
94 | ||
95 | var win = Ext.create('PVE.window.Restore', { | |
96 | nodename: nodename, | |
97 | volid: rec.data.volid, | |
98 | volidText: PVE.Utils.render_storage_content(rec.data.volid, {}, rec), | |
f6710aac | 99 | vmtype: vmtype, |
878bbf0b | 100 | isPBS: isPBS, |
1665b840 FE |
101 | }); |
102 | win.show(); | |
103 | win.on('destroy', reload); | |
f6710aac | 104 | }, |
1665b840 FE |
105 | }, |
106 | { | |
107 | xtype: 'proxmoxButton', | |
108 | text: gettext('Show Configuration'), | |
109 | disabled: true, | |
110 | selModel: sm, | |
f6710aac | 111 | handler: function(b, e, rec) { |
1665b840 FE |
112 | var win = Ext.create('PVE.window.BackupConfig', { |
113 | volume: rec.data.volid, | |
f6710aac | 114 | pveSelNode: me.pveSelNode, |
1665b840 FE |
115 | }); |
116 | ||
117 | win.show(); | |
f6710aac | 118 | }, |
1665b840 | 119 | }, |
e969d187 | 120 | pruneButton, |
1665b840 FE |
121 | ]; |
122 | ||
878bbf0b | 123 | if (isPBS) { |
a4b87129 TL |
124 | me.extraColumns = { |
125 | encrypted: { | |
126 | header: gettext('Encrypted'), | |
127 | dataIndex: 'encrypted', | |
128 | renderer: PVE.Utils.render_backup_encryption, | |
129 | }, | |
130 | verification: { | |
131 | header: gettext('Verify State'), | |
132 | dataIndex: 'verification', | |
133 | renderer: PVE.Utils.render_backup_verification, | |
f6710aac | 134 | }, |
a4b87129 | 135 | }; |
84ae9c8a SR |
136 | |
137 | me.tbar.push({ | |
138 | xtype: 'proxmoxButton', | |
139 | text: gettext('File Restore'), | |
140 | disabled: true, | |
141 | selModel: sm, | |
142 | handler: function(b, e, rec) { | |
143 | Ext.create('Proxmox.window.FileBrowser', { | |
144 | title: gettext('File Restore') + " - " + rec.data.text, | |
145 | listURL: `/api2/json/nodes/localhost/storage/${me.storage}/file-restore/list`, | |
146 | downloadURL: `/api2/json/nodes/localhost/storage/${me.storage}/file-restore/download`, | |
147 | extraParams: { | |
4c02fcfd | 148 | volume: rec.data.volid, |
84ae9c8a SR |
149 | }, |
150 | archive: PVE.Utils.volume_is_qemu_backup(rec.data.volid, rec.data.format) ? | |
151 | 'all' : undefined, | |
152 | }).show(); | |
153 | }, | |
154 | }); | |
a4b87129 TL |
155 | } |
156 | ||
1665b840 FE |
157 | me.callParent(); |
158 | }, | |
159 | }); |