@@ -5982,14 +6076,19 @@ const handleDownloadLogs = async (vmid: number, vmName: string) => {
{t("vmLxc.updates.osPackagesTitle")}
+ {selectedVM.status !== "running" && (
+
+ {t("vmLxc.updates.startBeforeCheck")}
+
+ )}
{t("vmLxc.updates.lastCheckedPrefix")}{" "}
{uc?.last_check ? new Date(uc.last_check).toLocaleString() : "—"}
@@ -5998,7 +6097,14 @@ const handleDownloadLogs = async (vmid: number, vmName: string) => {
)}
{osCheckError && {osCheckError}
}
- {osUpdateStale && !uc?.error ? (
+ {osCheckingVmid === selectedVM.vmid ? (
+
+
+ {t("vmLxc.updates.checkInProgress")}
+
+ ) : !uc?.last_check && !uc?.error ? (
+ {t("vmLxc.updates.notCheckedYet")}
+ ) : osUpdateStale && !uc?.error ? (
{t("vmLxc.updates.checkStaleHelp")}
) : !osUpdateStatusKnown ? (
{
{t("vmLxc.updates.noOsUpdatesPending")}
)}
-
+ {osUpdateStatusKnown && osCheckingVmid !== selectedVM.vmid &&
+ {hasOsUpdates ? (
-
+ ) : (
+
+ )}
+
}
{/* Docker has three independent lifecycles:
@@ -6200,11 +6311,7 @@ const handleDownloadLogs = async (vmid: number, vmName: string) => {
dockerRefresh: true,
},
)}
- className={`${dockerEngineHasUpdate
- ? pendingBtnCls
- : dockerEngineUpToDate
- ? upToDateBtnCls
- : neutralBtnCls} flex-shrink-0`}
+ className={`${getUpdateActionButtonClass(dockerEngineHasUpdate, dockerEngineUpToDate)} flex-shrink-0`}
>
{dockerEngineHasUpdate && }
{!dockerEngineHasUpdate && !dockerEngineUpToDate && }
@@ -6480,7 +6587,7 @@ const handleDownloadLogs = async (vmid: number, vmName: string) => {
) : helperTracksVersion ? (
- {t("vmLxc.updates.versionTrackingPending")}
+ {t("vmLxc.updates.versionStatusUnknown")}
) : helperExists ? (
@@ -6503,7 +6610,7 @@ const handleDownloadLogs = async (vmid: number, vmName: string) => {
// still force the helper's own
// update script.
const noState = !hasUpd && !upToD
- const cls = hasUpd ? pendingBtnCls : upToD ? upToDateBtnCls : neutralBtnCls
+ const cls = getUpdateActionButtonClass(hasUpd, upToD)
const label = hasUpd ? t("vmLxc.updates.applyUpdate") : upToD ? t("vmLxc.updates.upToDate") : t("vmLxc.updates.runUpdater")
return (
@@ -6639,7 +6746,7 @@ const handleDownloadLogs = async (vmid: number, vmName: string) => {
) : null
) : (
- {t("vmLxc.updates.versionTrackingPendingShort")}
+ {t("vmLxc.updates.versionStatusUnknown")}
)}
) : tracksVersion ? (
@@ -6651,7 +6758,9 @@ const handleDownloadLogs = async (vmid: number, vmName: string) => {
{t("vmLxc.updates.dockerImagesSubheading")}
>
- : t("vmLxc.updates.versionTrackingPendingShort")}
+ : aw.installed_via === "manual"
+ ? t("vmLxc.updates.installedVersionUnverified")
+ : t("vmLxc.updates.versionStatusUnknown")}
) : hasCmd ? (
@@ -6673,7 +6782,7 @@ const handleDownloadLogs = async (vmid: number, vmName: string) => {
targetLabels: [aw.name || t("vmLxc.updates.applicationDefaultName")],
},
)}
- className={hasUpdate ? pendingBtnCls : upToDate ? upToDateBtnCls : neutralBtnCls}
+ className={getUpdateActionButtonClass(hasUpdate, upToDate)}
>
{hasUpdate &&
}
{!hasUpdate && !upToDate &&
}
@@ -6681,7 +6790,9 @@ const handleDownloadLogs = async (vmid: number, vmName: string) => {
? t("vmLxc.updates.applyUpdate")
: upToDate
? t("vmLxc.updates.upToDate")
- : t("vmLxc.updates.runUpdater")}
+ : aw.update_method === "helper"
+ ? t("vmLxc.updates.runUpdater")
+ : t("vmLxc.updates.runCustomCommand")}
) : (
@@ -6719,6 +6830,11 @@ const handleDownloadLogs = async (vmid: number, vmName: string) => {
{t("vmLxc.bulkUpdate.description")}
+ {dockerRegistered && (
+
+ {t("vmLxc.bulkUpdate.osDockerScope")}
+
+ )}
{!bulkEditMode && (