]> git.proxmox.com Git - proxmox-backup.git/blame - www/window/BackupFileDownloader.js
allow to abort verify jobs
[proxmox-backup.git] / www / window / BackupFileDownloader.js
CommitLineData
98425309
DC
1Ext.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.encrypted;
50 me.lookup('encryptedHint').setVisible(!canDownload);
51 me.lookup('downloadBtn').setDisabled(!canDownload);
52 },
53
54 init: function(view) {
55 let me = this;
56 if (!view.baseurl) {
57 throw "no baseurl given";
58 }
59
60 if (!view.params) {
61 throw "no params given";
62 }
63
64 if (!view.files) {
65 throw "no files given";
66 }
67
68 me.lookup('file').getStore().loadData(view.files, false);
69 },
70
71 control: {
72 'proxmoxComboGrid': {
73 change: 'changeFile'
74 },
75 'button': {
76 click: 'downloadFile',
77 }
78 },
79 },
80
81 items: [
82 {
83 xtype: 'proxmoxComboGrid',
84 valueField: 'filename',
85 allowBlank: false,
86 displayField: 'filename',
87 reference: 'file',
88 emptyText: gettext('No file selected'),
89 fieldLabel: gettext('File'),
90 store: {
91 fields: ['filename', 'size', 'encrypted',],
92 idProperty: ['filename'],
93 },
94 listConfig: {
95 emptyText: gettext('No Data'),
96 columns: [
97 {
98 text: gettext('Filename'),
99 dataIndex: 'filename',
100 renderer: Ext.String.htmlEncode,
101 flex: 1,
102 },
103 {
104 text: gettext('Size'),
105 dataIndex: 'size',
106 renderer: val => val === undefined ? '' : Proxmox.Utils.format_size(val),
107 },
108 {
109 text: gettext('Encrypted'),
110 dataIndex: 'encrypted',
111 renderer: Proxmox.Utils.format_boolean,
112 },
113 ],
114 },
115 },
116 {
117 xtype: 'displayfield',
118 userCls: 'pmx-hint',
119 reference: 'encryptedHint',
120 hidden: true,
121 value: gettext('Encrypted Files cannot be decoded on the server directly. Please use the client where the decryption key is located.'),
122 }
123 ],
124
125 buttons: [
126 {
127 text: gettext('Download'),
128 reference: 'downloadBtn',
129 disabled: true,
130 },
131 ],
132});