url: '/nodes/{nodename}/storage/{storage}/download-url',
},
+
+ viewModel: {
+ data: {
+ size: '-',
+ mimetype: '-',
+ enableQuery: true,
+ },
+ },
+
controller: {
xclass: 'Ext.app.ViewController',
urlChange: function(field) {
- let me = this;
- let view = me.getView();
- field = view.down('[name=url]');
- field.setValidation(gettext("Please check URL"));
- field.validate();
- view.setValues({
- size: gettext("unknown"),
- mimetype: gettext("unknown"),
- });
+ this.resetMetaInfo();
+ this.setQueryEnabled();
+ },
+ setQueryEnabled: function() {
+ this.getViewModel().set('enableQuery', true);
+ },
+ resetMetaInfo: function() {
+ let vm = this.getViewModel();
+ vm.set('size', '-');
+ vm.set('mimetype', '-');
},
urlCheck: function(field) {
let me = this;
let view = me.getView();
- field = view.down('[name=url]');
- view.setValues({
- size: gettext("unknown"),
- mimetype: gettext("unknown"),
- });
+
+ const queryParam = view.getValues();
+
+ me.getViewModel().set('enableQuery', false);
+ me.resetMetaInfo();
+ let urlField = view.down('[name=url]');
+
Proxmox.Utils.API2Request({
url: `/nodes/${view.nodename}/query-url-metadata`,
method: 'GET',
params: {
- url: field.getValue(),
- 'verify-certificates': view.getValues()['verify-certificates'],
+ url: queryParam.url,
+ 'verify-certificates': queryParam['verify-certificates'],
},
waitMsgTarget: view,
- failure: function(res, opt) {
- field.setValidation(res.result.message);
- field.validate();
+ failure: res => {
+ urlField.setValidation(res.result.message);
+ urlField.validate();
+ Ext.MessageBox.alert(gettext('Error'), res.htmlStatus);
+ // re-enable so one can directly requery, e.g., if it was just a network hiccup
+ me.setQueryEnabled();
},
success: function(res, opt) {
- field.setValidation();
- field.validate();
+ urlField.setValidation();
+ urlField.validate();
let data = res.result.data;
view.setValues({
filename: data.filename || "",
- size: (data.size && Proxmox.Utils.format_size(data.size)) || gettext("unknown"),
- mimetype: data.mimetype || gettext("unknown"),
+ size: (data.size && Proxmox.Utils.format_size(data.size)) || gettext("Unknown"),
+ mimetype: data.mimetype || gettext("Unknown"),
});
},
});
{
xtype: 'inputpanel',
border: false,
+ onGetValues: function(values) {
+ if (typeof values.checksum === 'string') {
+ values.checksum = values.checksum.trim();
+ }
+ return values;
+ },
columnT: [
{
xtype: 'fieldcontainer',
{
xtype: 'textfield',
name: 'url',
+ emptyText: gettext("Enter URL to download"),
allowBlank: false,
flex: 1,
listeners: {
{
xtype: 'button',
name: 'check',
- text: gettext('Check'),
+ text: gettext('Query URL'),
margin: '0 0 0 5',
+ bind: {
+ disabled: '{!enableQuery}',
+ },
listeners: {
click: 'urlCheck',
},
name: 'filename',
allowBlank: false,
fieldLabel: gettext('File name'),
+ emptyText: gettext("Please (re-)query URL to get meta information"),
},
],
column1: [
xtype: 'displayfield',
name: 'size',
fieldLabel: gettext('File size'),
- value: gettext('unknown'),
+ bind: {
+ value: '{size}',
+ },
},
],
column2: [
xtype: 'displayfield',
name: 'mimetype',
fieldLabel: gettext('MIME type'),
- value: gettext('unknown'),
+ bind: {
+ value: '{mimetype}',
+ },
},
],
advancedColumn1: [
uncheckedValue: 0,
checked: true,
listeners: {
- change: 'urlChange',
+ change: 'setQueryEnabled',
},
},
],