public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
From: "Fabian Grünbichler" <f.gruenbichler@proxmox.com>
To: Proxmox VE development discussion <pve-devel@lists.proxmox.com>
Subject: Re: [pve-devel] [PATCH pve-manager 1/1] fix #4849: download to storage: automatically detect and configure compression
Date: Wed, 26 Jul 2023 14:31:28 +0200	[thread overview]
Message-ID: <1690370269.xmujv9chwd.astroid@yuna.none> (raw)
In-Reply-To: <20230725143720.620577-4-p.hufnagl@proxmox.com>

On July 25, 2023 4:37 pm, Philipp Hufnagl wrote:
> Signed-off-by: Philipp Hufnagl <p.hufnagl@proxmox.com>
> ---
>  PVE/API2/Nodes.pm                           | 21 ++++++++++++++++-
>  www/manager6/Makefile                       |  1 +
>  www/manager6/form/DecompressionSelector.js  | 14 +++++++++++
>  www/manager6/window/DownloadUrlToStorage.js | 26 +++++++++++++++++++--
>  4 files changed, 59 insertions(+), 3 deletions(-)
>  create mode 100644 www/manager6/form/DecompressionSelector.js
> 
> diff --git a/PVE/API2/Nodes.pm b/PVE/API2/Nodes.pm
> index 9269694d..de16d9a6 100644
> --- a/PVE/API2/Nodes.pm
> +++ b/PVE/API2/Nodes.pm
> @@ -1564,6 +1564,12 @@ __PACKAGE__->register_method({
>  		type => 'boolean',
>  		optional => 1,
>  		default => 1,
> +	    },
> +	    'find-compression' => {
> +		description => "If true an auto detuction of used compression will be attempted",

typo ;)

detect might be better naming than find

> +		type => 'boolean',
> +		optional => 1,
> +		default => 0,
>  	    }
>  	},
>      },
> @@ -1583,6 +1589,10 @@ __PACKAGE__->register_method({
>  		type => 'string',
>  		optional => 1,
>  	    },
> +	    compression => {
> +		type => 'string',

could get the same enum annotation that the parameter in pve-storage
should get - but if it is included here, it should probably be defined
once in pve-storage, so that updates there don't need to be duplicated
here as well..

> +		optional => 1,
> +	    },
>  	},
>      },
>      code => sub {
> @@ -1606,6 +1616,8 @@ __PACKAGE__->register_method({
>  	    );
>  	}
>  
> +        my $find_compression = $param->{'find-compression'};
> +
>  	my $req = HTTP::Request->new(HEAD => $url);
>  	my $res = $ua->request($req);
>  
> @@ -1614,7 +1626,7 @@ __PACKAGE__->register_method({
>  	my $size = $res->header("Content-Length");
>  	my $disposition = $res->header("Content-Disposition");
>  	my $type = $res->header("Content-Type");
> -
> +        my $compression = "__default__";

this is wrong, there cannot be a default compression that is detected
(and if there were, it shouldn't be the placeholder special value used
in the GUI!)

>  	my $filename;
>  
>  	if ($disposition && ($disposition =~ m/filename="([^"]*)"/ || $disposition =~ m/filename=([^;]*)/)) {
> @@ -1628,10 +1640,17 @@ __PACKAGE__->register_method({
>  	    $type = $1;
>  	}
>  
> +        if($find_compression && $filename && $filename =~ m!((^.+)(?:\.(${\PVE::Storage::Plugin::COMPRESSOR_RE})))$! && $3)

style! missing space after if, and way too long condition..

the non-capturing group and the outermost capturing one can be dropped AFAICT, just 

m!(^.+)\.(${\PVE::Storage::Plugin::COMPRESSOR_RE})$!

would be fine grouping wise. but the RE is still wrong, it should be
properly anchored (I am not sure whether the first group was an attempt
to anchor, or an attempt to exclude the '.' character?).

probably what you meant was something like

m!^(.+)\.(${\PVE::Storage::Plugin::COMPRESSOR_RE})$!

but, please double check :)

the last part of the condition can also be dropped, since if the RE
matched, $3 must be defined. the RE could be moved into a variable

> +        {

style!

> +            $filename = $2  ;
> +            $compression = "$3";

indentation, and whitespace sneaking in ;) also, why is one captured
group quoted and the other not?

> +        }
> +
>  	my $ret = {};
>  	$ret->{filename} = $filename if $filename;
>  	$ret->{size} = $size + 0 if $size;
>  	$ret->{mimetype} = $type if $type;
> +	$ret->{compression} = $compression if $compression;
>  
>  	return $ret;
>      }});
> diff --git a/www/manager6/Makefile b/www/manager6/Makefile
> index 7ec9d7a5..42a27548 100644
> --- a/www/manager6/Makefile
> +++ b/www/manager6/Makefile
> @@ -34,6 +34,7 @@ JSSRC= 							\
>  	form/ContentTypeSelector.js			\
>  	form/ControllerSelector.js			\
>  	form/DayOfWeekSelector.js			\
> +	form/DecompressionSelector.js       \
>  	form/DiskFormatSelector.js			\
>  	form/DiskStorageSelector.js			\
>  	form/EmailNotificationSelector.js		\
> diff --git a/www/manager6/form/DecompressionSelector.js b/www/manager6/form/DecompressionSelector.js
> new file mode 100644
> index 00000000..35d8d738
> --- /dev/null
> +++ b/www/manager6/form/DecompressionSelector.js
> @@ -0,0 +1,14 @@
> +
> +Ext.define('PVE.form.DecompressionSelector', {
> +    extend: 'Proxmox.form.KVComboBox',
> +    alias: ['widget.pveDecompressionSelector'],
> +    config: {
> +	deleteEmpty: false,
> +    },
> +    comboItems: [
> +                ['__default__', 'None'],

there is a Proxmox.Utils.noneText (which just wraps `gettext('None')`).

> +                ['lzo', 'LZO'],
> +                ['gz', 'GZIP'],
> +                ['zst', 'ZSTD'],
> +    ],
> +});
> \ No newline at end of file

? eslint is also unhappy:

[./form/DecompressionSelector.js]:
WARN: line 14 col 4: eol-last - Newline required at end of file but not found. (*)

> diff --git a/www/manager6/window/DownloadUrlToStorage.js b/www/manager6/window/DownloadUrlToStorage.js
> index 48543d28..b40b7ea6 100644
> --- a/www/manager6/window/DownloadUrlToStorage.js
> +++ b/www/manager6/window/DownloadUrlToStorage.js

[./window/DownloadUrlToStorage.js]:
WARN: line 72 col 61: comma-spacing - There should be no space before ','. (*)
WARN: line 231 col 2: keyword-spacing - Expected space(s) after "if". (*)
WARN: line 232 col 2: brace-style - Opening curly brace does not appear on the same line as controlling statement. (*)
WARN: line 245 col 6: padded-blocks - Block must not be padded by blank lines. (*)

please make these eslint warnings happy..

> @@ -49,6 +49,9 @@ Ext.define('PVE.window.DownloadUrlToStorage', {
>  	    vm.set('size', '-');
>  	    vm.set('mimetype', '-');
>  	},
> +	decompressonPossible: function() {

typo in function name

> +	    return this.view.content === 'iso';
> +	},
>  
>  	urlCheck: function(field) {
>  	    let me = this;
> @@ -66,6 +69,7 @@ Ext.define('PVE.window.DownloadUrlToStorage', {
>  		params: {
>  		    url: queryParam.url,
>  		    'verify-certificates': queryParam['verify-certificates'],
> +		    'find-compression': me.decompressonPossible() ? 1 : 0 ,
>  		},
>  		waitMsgTarget: view,
>  		failure: res => {
> @@ -84,6 +88,7 @@ Ext.define('PVE.window.DownloadUrlToStorage', {
>  			filename: data.filename || "",
>  			size: (data.size && Proxmox.Utils.format_size(data.size)) || gettext("Unknown"),
>  			mimetype: data.mimetype || gettext("Unknown"),
> +			compression: data.compression || '__default__',
>  		    });
>  		},
>  	    });
> @@ -215,7 +220,7 @@ Ext.define('PVE.window.DownloadUrlToStorage', {
>      ],
>  
>      initComponent: function() {
> -        var me = this;
> +	var me = this;
>  
>  	if (!me.nodename) {
>  	    throw "no node name specified";
> @@ -223,8 +228,25 @@ Ext.define('PVE.window.DownloadUrlToStorage', {
>  	if (!me.storage) {
>  	    throw "no storage ID specified";
>  	}
> +	if(me.content === 'iso')
> +	{
> +	    me.items[0].advancedColumn2.push(
> +
> +		{
> +		    xtype: 'pveDecompressionSelector',
> +		    name: 'compression',
> +		    fieldLabel: gettext('Decompression algorithm'),
> +		    allowBlank: true,
> +		    hasNoneOption: true,
> +		    value: '__default__',
> +		    listeners: {
> +			change: 'decryptorChange',

decryptorChange is not defined anywhere

> +		    },
> +		});
> +
> +	}
>  
> -        me.callParent();
> +	me.callParent();
>      },
>  });
>  
> -- 
> 2.39.2
> 
> 
> 
> _______________________________________________
> pve-devel mailing list
> pve-devel@lists.proxmox.com
> https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
> 
> 
> 




      reply	other threads:[~2023-07-26 12:31 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-07-25 14:37 [pve-devel] [PATCH pve-storage/pve-manager 0/3] allow download of compressed ISOs Philipp Hufnagl
2023-07-25 14:37 ` [pve-devel] [PATCH pve-storage 1/2] fix #4849: download-url: allow download and decompression " Philipp Hufnagl
2023-07-26 12:31   ` Fabian Grünbichler
2023-07-25 14:37 ` [pve-devel] [PATCH pve-storage 2/2] clean: fix whitspaces and minor code issues Philipp Hufnagl
2023-07-26 12:31   ` [pve-devel] applied: " Fabian Grünbichler
2023-07-25 14:37 ` [pve-devel] [PATCH pve-manager 1/1] fix #4849: download to storage: automatically detect and configure compression Philipp Hufnagl
2023-07-26 12:31   ` Fabian Grünbichler [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1690370269.xmujv9chwd.astroid@yuna.none \
    --to=f.gruenbichler@proxmox.com \
    --cc=pve-devel@lists.proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal