]> git.proxmox.com Git - pve-manager.git/blobdiff - www/manager6/window/DownloadUrlToStorage.js
ui: guest import: fix isWindows check
[pve-manager.git] / www / manager6 / window / DownloadUrlToStorage.js
index cd747c004f953c5b13be59b786d04870dfa39182..5523a1523b6b2df4820c1436550626c01aac4263 100644 (file)
@@ -25,20 +25,29 @@ Ext.define('PVE.window.DownloadUrlToStorage', {
        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) {
@@ -47,8 +56,8 @@ Ext.define('PVE.window.DownloadUrlToStorage', {
 
            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({
@@ -63,14 +72,28 @@ Ext.define('PVE.window.DownloadUrlToStorage', {
                    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"),
                    });
@@ -95,6 +118,12 @@ Ext.define('PVE.window.DownloadUrlToStorage', {
        {
            xtype: 'inputpanel',
            border: false,
+           onGetValues: function(values) {
+               if (typeof values.checksum === 'string') {
+                   values.checksum = values.checksum.trim();
+               }
+               return values;
+           },
            columnT: [
                {
                    xtype: 'fieldcontainer',
@@ -116,6 +145,9 @@ Ext.define('PVE.window.DownloadUrlToStorage', {
                            name: 'check',
                            text: gettext('Query URL'),
                            margin: '0 0 0 5',
+                           bind: {
+                               disabled: '{!enableQuery}',
+                           },
                            listeners: {
                                click: 'urlCheck',
                            },
@@ -135,7 +167,9 @@ Ext.define('PVE.window.DownloadUrlToStorage', {
                    xtype: 'displayfield',
                    name: 'size',
                    fieldLabel: gettext('File size'),
-                   value: '-',
+                   bind: {
+                       value: '{size}',
+                   },
                },
            ],
            column2: [
@@ -143,7 +177,9 @@ Ext.define('PVE.window.DownloadUrlToStorage', {
                    xtype: 'displayfield',
                    name: 'mimetype',
                    fieldLabel: gettext('MIME type'),
-                   value: '-',
+                   bind: {
+                       value: '{mimetype}',
+                   },
                },
            ],
            advancedColumn1: [
@@ -176,7 +212,25 @@ Ext.define('PVE.window.DownloadUrlToStorage', {
                    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',
                    },
                },
            ],
@@ -191,7 +245,7 @@ Ext.define('PVE.window.DownloadUrlToStorage', {
     ],
 
     initComponent: function() {
-        var me = this;
+       var me = this;
 
        if (!me.nodename) {
            throw "no node name specified";
@@ -199,8 +253,7 @@ Ext.define('PVE.window.DownloadUrlToStorage', {
        if (!me.storage) {
            throw "no storage ID specified";
        }
-
-        me.callParent();
+       me.callParent();
     },
 });