diff --git a/src/renderer/views/Config.vue b/src/renderer/views/Config.vue index 0fc8ba40..1c668d9f 100644 --- a/src/renderer/views/Config.vue +++ b/src/renderer/views/Config.vue @@ -54,7 +54,31 @@

Cores

- + + +
+
+ +

Disk Size

+
+

+ How much space is allocated for the virtual disk +

+
+
+ +

GB

+
+
(null); +const minDiskGB = ref(0); +const maxDiskGB = ref(0); const compose = ref(null); const numCores = ref(0); const origNumCores = ref(0); @@ -753,6 +782,23 @@ async function assignValues() { maxRamGB.value = specs.ramGB; maxNumCores.value = specs.cpuCores; + let storagePath; + + for (const volume of compose.value.services.windows.volumes) { + if (volume.endsWith('/storage')) { + storagePath = volume.split(':')[0].trim(); + break + } + } + + const diskSpace = await checkDiskSpace(storagePath!); + const freeGB = Math.floor(diskSpace.free / (1024 * 1024 * 1024)); + const virtualDiskSize = parseInt(compose.value.services.windows.environment.DISK_SIZE.split('G')[0]) + + minDiskGB.value = virtualDiskSize; + maxDiskGB.value = freeGB; + diskGB.value = virtualDiskSize; + refreshAvailableDevices(); } @@ -763,6 +809,7 @@ async function assignValues() { async function saveCompose() { compose.value!.services.windows.environment.RAM_SIZE = `${ramGB.value}G`; compose.value!.services.windows.environment.CPU_CORES = `${numCores.value}`; + compose.value!.services.windows.environment.DISK_SIZE = `${diskGB.value}`; const composeHasHomefolderShare = compose.value!.services.windows.volumes.includes(HOMEFOLDER_SHARE_STR); @@ -869,6 +916,15 @@ const errors = computedAsync(async () => { errCollection.push("You must choose an open port for your FreeRDP port!"); } + if (diskGB.value! < minDiskGB.value) { + errCollection.push(`You cannot allocate less than ${minDiskGB.value} GB`); + } + + if (diskGB.value! >= maxDiskGB.value) { + errCollection.push(`You cannot allocate more or equal to ${maxDiskGB.value} GB`); + } + + return errCollection; }); @@ -890,7 +946,8 @@ const saveButtonDisabled = computed(() => { origRamGB.value !== ramGB.value || shareHomeFolder.value !== origShareHomeFolder.value || (!isNaN(freerdpPort.value) && freerdpPort.value !== origFreerdpPort.value) || - autoStartContainer.value !== origAutoStartContainer.value; + autoStartContainer.value !== origAutoStartContainer.value || + minDiskGB.value !== diskGB.value; const shouldBeDisabled = errors.value?.length || !hasResourceChanges || isApplyingChanges.value;