]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/window/DownloadUrlToStorage.js
ui: backup restore: add hint to window title on overwrite restore
[pve-manager.git] / www / manager6 / window / DownloadUrlToStorage.js
CommitLineData
01366f9e
TL
1Ext.define('PVE.window.DownloadUrlToStorage', {
2 extend: 'Proxmox.window.Edit',
3 alias: 'widget.pveStorageDownloadUrl',
4 mixins: ['Proxmox.Mixin.CBind'],
5
6 isCreate: true,
7
8 method: 'POST',
9
10 showTaskViewer: true,
11
12 title: gettext('Download from URL'),
13 submitText: gettext('Download'),
14
15 cbindData: function(initialConfig) {
16 var me = this;
17 return {
18 nodename: me.nodename,
19 storage: me.storage,
20 content: me.content,
21 };
22 },
23
24 cbind: {
25 url: '/nodes/{nodename}/storage/{storage}/download-url',
26 },
27
9ebd97fe
TL
28
29 viewModel: {
30 data: {
a2692d6b
TL
31 size: '-',
32 mimetype: '-',
9ebd97fe
TL
33 enableQuery: true,
34 },
a2692d6b
TL
35 },
36
01366f9e
TL
37 controller: {
38 xclass: 'Ext.app.ViewController',
39
40 urlChange: function(field) {
9ebd97fe
TL
41 this.resetMetaInfo();
42 this.setQueryEnabled();
43 },
44 setQueryEnabled: function() {
45 this.getViewModel().set('enableQuery', true);
46 },
47 resetMetaInfo: function() {
48 let vm = this.getViewModel();
49 vm.set('size', '-');
50 vm.set('mimetype', '-');
01366f9e
TL
51 },
52
53 urlCheck: function(field) {
54 let me = this;
55 let view = me.getView();
a2692d6b
TL
56
57 const queryParam = view.getValues();
58
9ebd97fe
TL
59 me.getViewModel().set('enableQuery', false);
60 me.resetMetaInfo();
a2692d6b
TL
61 let urlField = view.down('[name=url]');
62
01366f9e
TL
63 Proxmox.Utils.API2Request({
64 url: `/nodes/${view.nodename}/query-url-metadata`,
65 method: 'GET',
66 params: {
a2692d6b
TL
67 url: queryParam.url,
68 'verify-certificates': queryParam['verify-certificates'],
01366f9e
TL
69 },
70 waitMsgTarget: view,
a2692d6b
TL
71 failure: res => {
72 urlField.setValidation(res.result.message);
73 urlField.validate();
74 Ext.MessageBox.alert(gettext('Error'), res.htmlStatus);
9ebd97fe
TL
75 // re-enable so one can directly requery, e.g., if it was just a network hiccup
76 me.setQueryEnabled();
01366f9e
TL
77 },
78 success: function(res, opt) {
a2692d6b
TL
79 urlField.setValidation();
80 urlField.validate();
01366f9e
TL
81
82 let data = res.result.data;
83 view.setValues({
84 filename: data.filename || "",
a2692d6b
TL
85 size: (data.size && Proxmox.Utils.format_size(data.size)) || gettext("Unknown"),
86 mimetype: data.mimetype || gettext("Unknown"),
01366f9e
TL
87 });
88 },
89 });
90 },
91
92 hashChange: function(field) {
93 let checksum = Ext.getCmp('downloadUrlChecksum');
94 if (field.getValue() === '__default__') {
95 checksum.setDisabled(true);
96 checksum.setValue("");
97 checksum.allowBlank = true;
98 } else {
99 checksum.setDisabled(false);
100 checksum.allowBlank = false;
101 }
102 },
103 },
104
105 items: [
106 {
107 xtype: 'inputpanel',
108 border: false,
1ec18d40
TL
109 onGetValues: function(values) {
110 if (typeof values.checksum === 'string') {
111 values.checksum = values.checksum.trim();
112 }
113 return values;
114 },
01366f9e
TL
115 columnT: [
116 {
117 xtype: 'fieldcontainer',
118 layout: 'hbox',
119 fieldLabel: gettext('URL'),
120 items: [
121 {
122 xtype: 'textfield',
123 name: 'url',
a2692d6b 124 emptyText: gettext("Enter URL to download"),
01366f9e
TL
125 allowBlank: false,
126 flex: 1,
127 listeners: {
128 change: 'urlChange',
129 },
130 },
131 {
132 xtype: 'button',
133 name: 'check',
a2692d6b 134 text: gettext('Query URL'),
01366f9e 135 margin: '0 0 0 5',
9ebd97fe
TL
136 bind: {
137 disabled: '{!enableQuery}',
138 },
01366f9e
TL
139 listeners: {
140 click: 'urlCheck',
141 },
142 },
143 ],
144 },
145 {
146 xtype: 'textfield',
147 name: 'filename',
148 allowBlank: false,
149 fieldLabel: gettext('File name'),
a2692d6b 150 emptyText: gettext("Please (re-)query URL to get meta information"),
01366f9e
TL
151 },
152 ],
153 column1: [
154 {
155 xtype: 'displayfield',
156 name: 'size',
157 fieldLabel: gettext('File size'),
9ebd97fe
TL
158 bind: {
159 value: '{size}',
160 },
01366f9e
TL
161 },
162 ],
163 column2: [
164 {
165 xtype: 'displayfield',
166 name: 'mimetype',
167 fieldLabel: gettext('MIME type'),
9ebd97fe
TL
168 bind: {
169 value: '{mimetype}',
170 },
01366f9e
TL
171 },
172 ],
173 advancedColumn1: [
174 {
175 xtype: 'pveHashAlgorithmSelector',
176 name: 'checksum-algorithm',
177 fieldLabel: gettext('Hash algorithm'),
178 allowBlank: true,
179 hasNoneOption: true,
180 value: '__default__',
181 listeners: {
182 change: 'hashChange',
183 },
184 },
185 {
186 xtype: 'textfield',
187 name: 'checksum',
188 fieldLabel: gettext('Checksum'),
189 allowBlank: true,
190 disabled: true,
191 emptyText: gettext('none'),
192 id: 'downloadUrlChecksum',
193 },
194 ],
195 advancedColumn2: [
196 {
197 xtype: 'proxmoxcheckbox',
198 name: 'verify-certificates',
199 fieldLabel: gettext('Verify certificates'),
200 uncheckedValue: 0,
201 checked: true,
202 listeners: {
5a963750 203 change: 'setQueryEnabled',
01366f9e
TL
204 },
205 },
206 ],
207 },
208 {
209 xtype: 'hiddenfield',
210 name: 'content',
211 cbind: {
212 value: '{content}',
213 },
214 },
215 ],
216
217 initComponent: function() {
218 var me = this;
219
220 if (!me.nodename) {
221 throw "no node name specified";
222 }
223 if (!me.storage) {
224 throw "no storage ID specified";
225 }
226
227 me.callParent();
228 },
229});
230