]> git.proxmox.com Git - proxmox-backup.git/blob - www/window/BackupFileDownloader.js
ui: some eslint auto-fixes
[proxmox-backup.git] / www / window / BackupFileDownloader.js
1 Ext.define('PBS.window.BackupFileDownloader', {
2 extend: 'Ext.window.Window',
3 alias: 'widget.pbsBackupFileDownloader',
4
5 title: gettext('Download Files'),
6 bodyPadding: 10,
7
8 width: 400,
9 modal: true,
10 resizable: false,
11
12 layout: {
13 type: 'vbox',
14 align: 'stretch',
15 },
16
17 controller: {
18 xclass: 'Ext.app.ViewController',
19
20 buildUrl: function(baseurl, params) {
21 let url = new URL(baseurl, window.location.origin);
22 for (const [key, value] of Object.entries(params)) {
23 url.searchParams.append(key, value);
24 }
25
26 return url.href;
27 },
28
29 downloadFile: function() {
30 let me = this;
31 let view = me.getView();
32 let combo = me.lookup('file');
33 let file = combo.getValue();
34
35 let idx = file.lastIndexOf('.');
36 let filename = file.slice(0, idx);
37 let atag = document.createElement('a');
38 let params = view.params;
39 params['file-name'] = file;
40 atag.download = filename;
41 atag.href = me.buildUrl(`${view.baseurl}/download-decoded`, params);
42 atag.click();
43 },
44
45 changeFile: function(comob, value) {
46 let me = this;
47 let combo = me.lookup('file');
48 let rec = combo.getStore().findRecord('filename', value, 0, false, true, true);
49 let canDownload = rec.data['crypt-mode'] !== 'encrypt';
50 me.lookup('encryptedHint').setVisible(!canDownload);
51 me.lookup('signedHint').setVisible(rec.data['crypt-mode'] === 'sign-only');
52 me.lookup('downloadBtn').setDisabled(!canDownload);
53 },
54
55 init: function(view) {
56 let me = this;
57 if (!view.baseurl) {
58 throw "no baseurl given";
59 }
60
61 if (!view.params) {
62 throw "no params given";
63 }
64
65 if (!view.files) {
66 throw "no files given";
67 }
68
69 me.lookup('file').getStore().loadData(view.files, false);
70 },
71
72 control: {
73 'proxmoxComboGrid': {
74 change: 'changeFile',
75 },
76 'button': {
77 click: 'downloadFile',
78 },
79 },
80 },
81
82 items: [
83 {
84 xtype: 'proxmoxComboGrid',
85 valueField: 'filename',
86 allowBlank: false,
87 displayField: 'filename',
88 reference: 'file',
89 emptyText: gettext('No file selected'),
90 fieldLabel: gettext('File'),
91 store: {
92 fields: ['filename', 'size', 'crypt-mode'],
93 idProperty: ['filename'],
94 },
95 listConfig: {
96 emptyText: gettext('No Data'),
97 columns: [
98 {
99 text: gettext('Filename'),
100 dataIndex: 'filename',
101 renderer: Ext.String.htmlEncode,
102 flex: 1,
103 },
104 {
105 text: gettext('Size'),
106 dataIndex: 'size',
107 renderer: val => val === undefined ? '' : Proxmox.Utils.format_size(val),
108 },
109 {
110 text: gettext('Encrypted'),
111 dataIndex: 'crypt-mode',
112 renderer: function(value) {
113 let mode = -1;
114 if (value !== undefined) {
115 mode = PBS.Utils.cryptmap.indexOf(value);
116 }
117 return PBS.Utils.cryptText[mode] || Proxmox.Utils.unknownText;
118 },
119 },
120 ],
121 },
122 },
123 {
124 xtype: 'displayfield',
125 userCls: 'pmx-hint',
126 reference: 'signedHint',
127 hidden: true,
128 value: gettext('Note: Signatures of signed files will not be verified on the server. Please use the client to do this.'),
129 },
130 {
131 xtype: 'displayfield',
132 userCls: 'pmx-hint',
133 reference: 'encryptedHint',
134 hidden: true,
135 value: gettext('Encrypted Files cannot be decoded on the server directly. Please use the client where the decryption key is located.'),
136 },
137 ],
138
139 buttons: [
140 {
141 text: gettext('Download'),
142 reference: 'downloadBtn',
143 disabled: true,
144 },
145 ],
146 });