diff --git a/internal/usbgadget/config.go b/internal/usbgadget/config.go index b73d392..87a9e21 100644 --- a/internal/usbgadget/config.go +++ b/internal/usbgadget/config.go @@ -137,6 +137,26 @@ func (u *UsbGadget) GetPath(itemKey string) (string, error) { return joinPath(u.kvmGadgetPath, item.path), nil } +func (u *UsbGadget) OverrideGadgetConfig(itemKey string, itemAttr string, value string) (error, bool) { + u.configLock.Lock() + defer u.configLock.Unlock() + + // get it as a pointer + _, ok := u.configMap[itemKey] + if !ok { + return fmt.Errorf("config item %s not found", itemKey), false + } + + if u.configMap[itemKey].attrs[itemAttr] == value { + return nil, false + } + + u.configMap[itemKey].attrs[itemAttr] = value + u.log.Info().Str("itemKey", itemKey).Str("itemAttr", itemAttr).Str("value", value).Msg("overriding gadget config") + + return nil, true +} + func mountConfigFS() error { _, err := os.Stat(gadgetPath) // TODO: check if it's mounted properly diff --git a/jsonrpc.go b/jsonrpc.go index d56b8ea..fcc0243 100644 --- a/jsonrpc.go +++ b/jsonrpc.go @@ -523,10 +523,12 @@ type RPCHandler struct { func rpcSetMassStorageMode(mode string) (string, error) { logger.Info().Str("mode", mode).Msg("Setting mass storage mode") var cdrom bool - if mode == "cdrom" { + switch mode { + case "cdrom": cdrom = true - } else if mode != "file" { - logger.Info().Str("mode", mode).Msg("Invalid mode provided") + case "disk": + cdrom = false + default: return "", fmt.Errorf("invalid mode: %s", mode) } @@ -544,12 +546,12 @@ func rpcSetMassStorageMode(mode string) (string, error) { } func rpcGetMassStorageMode() (string, error) { - cdrom, err := getMassStorageMode() + cdrom, err := getMassStorageCDROMEnabled() if err != nil { return "", fmt.Errorf("failed to get mass storage mode: %w", err) } - mode := "file" + mode := "disk" if cdrom { mode = "cdrom" } diff --git a/ui/src/routes/devices.$id.mount.tsx b/ui/src/routes/devices.$id.mount.tsx index 74fcae2..4d3369a 100644 --- a/ui/src/routes/devices.$id.mount.tsx +++ b/ui/src/routes/devices.$id.mount.tsx @@ -414,7 +414,7 @@ function BrowserFileView({ if (file?.name.endsWith(".iso")) { setUsbMode("CDROM"); } else if (file?.name.endsWith(".img")) { - setUsbMode("CDROM"); + setUsbMode("Disk"); } }; @@ -566,7 +566,7 @@ function UrlView({ if (url.endsWith(".iso")) { setUsbMode("CDROM"); } else if (url.endsWith(".img")) { - setUsbMode("CDROM"); + setUsbMode("Disk"); } } @@ -773,7 +773,7 @@ function DeviceFileView({ if (file.name.endsWith(".iso")) { setUsbMode("CDROM"); } else if (file.name.endsWith(".img")) { - setUsbMode("CDROM"); + setUsbMode("Disk"); } } @@ -1579,7 +1579,6 @@ function UsbModeSelector({ type="radio" id="disk" name="mountType" - disabled checked={usbMode === "Disk"} onChange={() => setUsbMode("Disk")} className="h-3 w-3 border-slate-800/30 bg-white text-blue-700 transition-opacity focus:ring-blue-500 disabled:opacity-30 dark:bg-slate-800" @@ -1588,9 +1587,6 @@ function UsbModeSelector({ Disk -