url: '/nodes/{nodename}/storage/{storage}/download-url',
},
- resetValues: function() {
- this.setValues({
+
+ viewModel: {
+ data: {
size: '-',
mimetype: '-',
- });
+ enableQuery: true,
+ },
},
controller: {
xclass: 'Ext.app.ViewController',
urlChange: function(field) {
- let view = this.getView();
- view.down('[name=check]').setDisabled(false);
- view.resetValues();
+ 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) {
const queryParam = view.getValues();
- view.down('[name=check]').setDisabled(true);
- view.resetValues();
+ me.getViewModel().set('enableQuery', false);
+ me.resetMetaInfo();
let urlField = view.down('[name=url]');
Proxmox.Utils.API2Request({
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) {
urlField.setValidation();
urlField.validate();
let data = res.result.data;
+
+ let filename = data.filename || "";
+ let compression = '__default__';
+ if (view.content === 'iso') {
+ const matches = filename.match(/^(.+)\.(gz|lzo|zst)$/i);
+ if (matches) {
+ filename = matches[1];
+ compression = matches[2].toLowerCase();
+ }
+ }
+
view.setValues({
- filename: data.filename || "",
+ filename,
+ compression,
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',
name: 'check',
text: gettext('Query URL'),
margin: '0 0 0 5',
+ bind: {
+ disabled: '{!enableQuery}',
+ },
listeners: {
click: 'urlCheck',
},
xtype: 'displayfield',
name: 'size',
fieldLabel: gettext('File size'),
- value: '-',
+ bind: {
+ value: '{size}',
+ },
},
],
column2: [
xtype: 'displayfield',
name: 'mimetype',
fieldLabel: gettext('MIME type'),
- value: '-',
+ bind: {
+ value: '{mimetype}',
+ },
},
],
advancedColumn1: [
uncheckedValue: 0,
checked: true,
listeners: {
- change: 'urlChange',
+ change: 'setQueryEnabled',
+ },
+ },
+ {
+ xtype: 'proxmoxKVComboBox',
+ name: 'compression',
+ fieldLabel: gettext('Decompression algorithm'),
+ allowBlank: true,
+ hasNoneOption: true,
+ deleteEmpty: false,
+ value: '__default__',
+ comboItems: [
+ ['__default__', Proxmox.Utils.NoneText],
+ ['lzo', 'LZO'],
+ ['gz', 'GZIP'],
+ ['zst', 'ZSTD'],
+ ],
+ cbind: {
+ hidden: get => get('content') !== 'iso',
},
},
],
],
initComponent: function() {
- var me = this;
+ var me = this;
if (!me.nodename) {
throw "no node name specified";
if (!me.storage) {
throw "no storage ID specified";
}
-
- me.callParent();
+ me.callParent();
},
});