public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
From: Daniel Herzig <d.herzig@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH manager 12/12] ui: qemu: hardware: add eject button for cdroms
Date: Fri, 25 Oct 2024 17:02:43 +0200	[thread overview]
Message-ID: <20241025150243.134466-13-d.herzig@proxmox.com> (raw)
In-Reply-To: <20241025150243.134466-1-d.herzig@proxmox.com>

Eject by setting file to none.

Signed-off-by: Daniel Herzig <d.herzig@proxmox.com>
---
 www/manager6/qemu/HardwareView.js | 43 +++++++++++++++++++++++++++++++
 1 file changed, 43 insertions(+)

diff --git a/www/manager6/qemu/HardwareView.js b/www/manager6/qemu/HardwareView.js
index 59e670db..5d1c18a5 100644
--- a/www/manager6/qemu/HardwareView.js
+++ b/www/manager6/qemu/HardwareView.js
@@ -538,6 +538,45 @@ Ext.define('PVE.qemu.HardwareView', {
 	    apiurl: '/api2/extjs/' + baseurl,
 	});
 
+	let eject_btn = new Proxmox.button.Button({
+	    text: gettext('Eject'),
+	    disabled: true,
+	    selModel: sm,
+	    RESTMethod: 'POST',
+	    confirmMsg: function(rec) {
+		let warn = gettext("Are you sure you want to eject '{0}' ?");
+		let isofile = rec.data.value.split(",")[0];
+		let msg = Ext.String.format(warn, isofile);
+		return msg;
+	    },
+	    handler: function(btn, e, rec) {
+		let params = {};
+		params[rec.data.key] = 'none,media=cdrom';
+		if (btn.RESTMethod === 'POST') {
+		    params.background_delay = 5;
+		}
+		Proxmox.Utils.API2Request({
+		    url: '/api2/extjs/' + baseurl,
+		    waitMsgTarget: me,
+		    method: btn.RESTMethod,
+		    params: params,
+		    callback: () => me.reload(),
+		    failure: response => Ext.Msg.alert('Error', response.htmlStatus),
+		    success: function(response, options) {
+			if (btn.RESTMethod === 'POST' && response.result.data !== null) {
+			    Ext.create('Proxmox.window.TaskProgress', {
+				autoShow: true,
+				upid: response.result.data,
+				listeners: {
+				    destroy: () => me.reload(),
+				},
+			    });
+			}
+		    },
+		});
+	    },
+	});
+
 	let efidisk_menuitem = Ext.create('Ext.menu.Item', {
 	    text: gettext('EFI Disk'),
 	    iconCls: 'fa fa-fw fa-hdd-o black',
@@ -608,6 +647,7 @@ Ext.define('PVE.qemu.HardwareView', {
 		edit_btn.disable();
 		diskaction_btn.disable();
 		revert_btn.disable();
+		eject_btn.disable();
 		return;
 	    }
 	    const { key, value } = rec.data;
@@ -619,6 +659,7 @@ Ext.define('PVE.qemu.HardwareView', {
 
 	    const isCloudInit = isCloudInitKey(value);
 	    const isCDRom = value && !!value.toString().match(/media=cdrom/);
+	    const isISO = value && !!value.toString().match(/.iso/);
 
 	    const isUnusedDisk = key.match(/^unused\d+/);
 	    const isUsedDisk = !isUnusedDisk && row.isOnStorageBus && !isCDRom;
@@ -648,6 +689,7 @@ Ext.define('PVE.qemu.HardwareView', {
 	    resize_menuitem.setDisabled(pending || !isUsedDisk);
 
 	    revert_btn.setDisabled(!pending);
+	    eject_btn.setDisabled((isCDRom && !cdromCap) || !isISO);
 	};
 
 	let editorFactory = (classPath, extraOptions) => {
@@ -751,6 +793,7 @@ Ext.define('PVE.qemu.HardwareView', {
 		remove_btn,
 		edit_btn,
 		diskaction_btn,
+		eject_btn,
 		revert_btn,
 	    ],
 	    rows: rows,
-- 
2.39.5



_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel


      parent reply	other threads:[~2024-10-25 15:04 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-10-25 15:02 [pve-devel] [PATCH qemu-server, manager 0/12] bugzilla #4225 -- improve handling of unavailable ISOs Daniel Herzig
2024-10-25 15:02 ` [pve-devel] [PATCH qemu-server 1/12] fix #4225: qemuserver: drive: add optional required parameter Daniel Herzig
2024-10-25 15:02 ` [pve-devel] [PATCH qemu-server 2/12] qemuserver: add helper function for mocking files Daniel Herzig
2024-10-25 15:02 ` [pve-devel] [PATCH qemu-server 3/12] fix #4225: qemuserver: add function to eject isofiles Daniel Herzig
2024-10-25 15:02 ` [pve-devel] [PATCH qemu-server 4/12] test: chomp all trailing newlines from errors and warnings Daniel Herzig
2024-10-25 15:02 ` [pve-devel] [PATCH qemu-server 5/12] test: mock cifs-store Daniel Herzig
2024-10-25 15:02 ` [pve-devel] [PATCH qemu-server 6/12] test: add nfs-offline storage Daniel Herzig
2024-10-25 15:02 ` [pve-devel] [PATCH qemu-server 7/12] test: mock existing files Daniel Herzig
2024-10-25 15:02 ` [pve-devel] [PATCH qemu-server 8/12] test: mock log_warn warnings Daniel Herzig
2024-10-25 15:02 ` [pve-devel] [PATCH qemu-server 9/12] test: cfg2cmd: add tests for testing the iso required parameter Daniel Herzig
2024-10-25 15:02 ` [pve-devel] [PATCH manager 10/12] fix #4225: ui: form: isoselector: add optional required checkbox Daniel Herzig
2024-10-25 15:02 ` [pve-devel] [PATCH manager 11/12] fix #4225: ui: qemu: cdedit: enable required checkbox for isos Daniel Herzig
2024-10-25 15:02 ` Daniel Herzig [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=20241025150243.134466-13-d.herzig@proxmox.com \
    --to=d.herzig@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