mirror of https://github.com/jetkvm/kvm.git
refactor: remove downgrade attributes from ota state and jsonrpc
This commit is contained in:
parent
8bd3d4cfcf
commit
9832be29ef
|
|
@ -152,12 +152,12 @@ func (s *State) doUpdate(ctx context.Context, params UpdateParams) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if shouldUpdateApp && (appUpdate.available || appUpdate.downgradeAvailable) {
|
if shouldUpdateApp && appUpdate.available {
|
||||||
appUpdate.pending = true
|
appUpdate.pending = true
|
||||||
s.triggerComponentUpdateState("app", appUpdate)
|
s.triggerComponentUpdateState("app", appUpdate)
|
||||||
}
|
}
|
||||||
|
|
||||||
if shouldUpdateSystem && (systemUpdate.available || systemUpdate.downgradeAvailable) {
|
if shouldUpdateSystem && systemUpdate.available {
|
||||||
systemUpdate.pending = true
|
systemUpdate.pending = true
|
||||||
s.triggerComponentUpdateState("system", systemUpdate)
|
s.triggerComponentUpdateState("system", systemUpdate)
|
||||||
}
|
}
|
||||||
|
|
@ -292,7 +292,6 @@ func (s *State) checkUpdateStatus(
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
systemUpdateStatus.available = systemVersionRemote.GreaterThan(systemVersionLocal)
|
systemUpdateStatus.available = systemVersionRemote.GreaterThan(systemVersionLocal)
|
||||||
systemUpdateStatus.downgradeAvailable = systemVersionRemote.LessThan(systemVersionLocal)
|
|
||||||
|
|
||||||
appVersionRemote, err := semver.NewVersion(remoteMetadata.AppVersion)
|
appVersionRemote, err := semver.NewVersion(remoteMetadata.AppVersion)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -300,7 +299,6 @@ func (s *State) checkUpdateStatus(
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
appUpdateStatus.available = appVersionRemote.GreaterThan(appVersionLocal)
|
appUpdateStatus.available = appVersionRemote.GreaterThan(appVersionLocal)
|
||||||
appUpdateStatus.downgradeAvailable = appVersionRemote.LessThan(appVersionLocal)
|
|
||||||
|
|
||||||
// Handle pre-release updates
|
// Handle pre-release updates
|
||||||
isRemoteSystemPreRelease := systemVersionRemote.Prerelease() != ""
|
isRemoteSystemPreRelease := systemVersionRemote.Prerelease() != ""
|
||||||
|
|
@ -313,6 +311,15 @@ func (s *State) checkUpdateStatus(
|
||||||
appUpdateStatus.available = false
|
appUpdateStatus.available = false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Handle custom target versions
|
||||||
|
if slices.Contains(params.Components, "app") && params.AppTargetVersion != "" {
|
||||||
|
appUpdateStatus.available = appVersionRemote.String() != appUpdateStatus.localVersion
|
||||||
|
}
|
||||||
|
|
||||||
|
if slices.Contains(params.Components, "system") && params.SystemTargetVersion != "" {
|
||||||
|
systemUpdateStatus.available = systemVersionRemote.String() != systemUpdateStatus.localVersion
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -28,12 +28,10 @@ type LocalMetadata struct {
|
||||||
|
|
||||||
// UpdateStatus represents the current update status
|
// UpdateStatus represents the current update status
|
||||||
type UpdateStatus struct {
|
type UpdateStatus struct {
|
||||||
Local *LocalMetadata `json:"local"`
|
Local *LocalMetadata `json:"local"`
|
||||||
Remote *UpdateMetadata `json:"remote"`
|
Remote *UpdateMetadata `json:"remote"`
|
||||||
SystemUpdateAvailable bool `json:"systemUpdateAvailable"`
|
SystemUpdateAvailable bool `json:"systemUpdateAvailable"`
|
||||||
SystemDowngradeAvailable bool `json:"systemDowngradeAvailable"`
|
AppUpdateAvailable bool `json:"appUpdateAvailable"`
|
||||||
AppUpdateAvailable bool `json:"appUpdateAvailable"`
|
|
||||||
AppDowngradeAvailable bool `json:"appDowngradeAvailable"`
|
|
||||||
|
|
||||||
// for backwards compatibility
|
// for backwards compatibility
|
||||||
Error string `json:"error,omitempty"`
|
Error string `json:"error,omitempty"`
|
||||||
|
|
@ -50,7 +48,6 @@ type PostRebootAction struct {
|
||||||
type componentUpdateStatus struct {
|
type componentUpdateStatus struct {
|
||||||
pending bool
|
pending bool
|
||||||
available bool
|
available bool
|
||||||
downgradeAvailable bool
|
|
||||||
version string
|
version string
|
||||||
localVersion string
|
localVersion string
|
||||||
targetVersion string
|
targetVersion string
|
||||||
|
|
@ -170,11 +167,9 @@ func toUpdateStatus(appUpdate *componentUpdateStatus, systemUpdate *componentUpd
|
||||||
SystemURL: systemUpdate.url,
|
SystemURL: systemUpdate.url,
|
||||||
SystemHash: systemUpdate.hash,
|
SystemHash: systemUpdate.hash,
|
||||||
},
|
},
|
||||||
SystemUpdateAvailable: systemUpdate.available,
|
SystemUpdateAvailable: systemUpdate.available,
|
||||||
SystemDowngradeAvailable: systemUpdate.downgradeAvailable,
|
AppUpdateAvailable: appUpdate.available,
|
||||||
AppUpdateAvailable: appUpdate.available,
|
Error: error,
|
||||||
AppDowngradeAvailable: appUpdate.downgradeAvailable,
|
|
||||||
Error: error,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1155,7 +1155,6 @@ var rpcHandlers = map[string]RPCHandler{
|
||||||
"getUpdateStatusChannel": {Func: rpcGetUpdateStatusChannel},
|
"getUpdateStatusChannel": {Func: rpcGetUpdateStatusChannel},
|
||||||
"tryUpdate": {Func: rpcTryUpdate},
|
"tryUpdate": {Func: rpcTryUpdate},
|
||||||
"tryUpdateComponents": {Func: rpcTryUpdateComponents, Params: []string{"params", "includePreRelease", "resetConfig"}},
|
"tryUpdateComponents": {Func: rpcTryUpdateComponents, Params: []string{"params", "includePreRelease", "resetConfig"}},
|
||||||
"cancelDowngrade": {Func: rpcCancelDowngrade},
|
|
||||||
"getDevModeState": {Func: rpcGetDevModeState},
|
"getDevModeState": {Func: rpcGetDevModeState},
|
||||||
"setDevModeState": {Func: rpcSetDevModeState, Params: []string{"enabled"}},
|
"setDevModeState": {Func: rpcSetDevModeState, Params: []string{"enabled"}},
|
||||||
"getSSHKeyState": {Func: rpcGetSSHKeyState},
|
"getSSHKeyState": {Func: rpcGetSSHKeyState},
|
||||||
|
|
|
||||||
10
ota.go
10
ota.go
|
|
@ -194,13 +194,3 @@ func rpcTryUpdateComponents(params updateParams, includePreRelease bool, resetCo
|
||||||
}()
|
}()
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func rpcCancelDowngrade() error {
|
|
||||||
if err := otaState.SetTargetVersion("app", ""); err != nil {
|
|
||||||
return fmt.Errorf("failed to set app target version: %w", err)
|
|
||||||
}
|
|
||||||
if err := otaState.SetTargetVersion("system", ""); err != nil {
|
|
||||||
return fmt.Errorf("failed to set system target version: %w", err)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -554,7 +554,6 @@ export type UpdateModalViews =
|
||||||
| "updating"
|
| "updating"
|
||||||
| "upToDate"
|
| "upToDate"
|
||||||
| "updateAvailable"
|
| "updateAvailable"
|
||||||
| "updateDowngradeAvailable"
|
|
||||||
| "updateCompleted"
|
| "updateCompleted"
|
||||||
| "error";
|
| "error";
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,9 +15,7 @@ export interface SystemVersionInfo {
|
||||||
local: VersionInfo;
|
local: VersionInfo;
|
||||||
remote?: VersionInfo;
|
remote?: VersionInfo;
|
||||||
systemUpdateAvailable: boolean;
|
systemUpdateAvailable: boolean;
|
||||||
systemDowngradeAvailable: boolean;
|
|
||||||
appUpdateAvailable: boolean;
|
appUpdateAvailable: boolean;
|
||||||
appDowngradeAvailable: boolean;
|
|
||||||
error?: string;
|
error?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -185,10 +185,10 @@ export default function SettingsAdvancedRoute() {
|
||||||
setShowLoopbackWarning(false);
|
setShowLoopbackWarning(false);
|
||||||
}, [applyLoopbackOnlyMode, setShowLoopbackWarning]);
|
}, [applyLoopbackOnlyMode, setShowLoopbackWarning]);
|
||||||
|
|
||||||
const handleVersionUpdateError = useCallback((error?: JsonRpcError) => {
|
const handleVersionUpdateError = useCallback((error?: JsonRpcError | string) => {
|
||||||
notifications.error(
|
notifications.error(
|
||||||
m.advanced_error_version_update({
|
m.advanced_error_version_update({
|
||||||
error: error?.data ?? error?.message ?? m.unknown_error()
|
error: typeof error === "string" ? error : (error?.data ?? error?.message ?? m.unknown_error())
|
||||||
}),
|
}),
|
||||||
{ duration: 1000 * 15 } // 15 seconds
|
{ duration: 1000 * 15 } // 15 seconds
|
||||||
);
|
);
|
||||||
|
|
@ -214,15 +214,31 @@ export default function SettingsAdvancedRoute() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
console.debug("versionInfo", versionInfo, components.includes("app") && versionInfo.remote?.appVersion && versionInfo?.appUpdateAvailable, components.includes("system") && versionInfo.remote?.systemVersion && versionInfo?.systemUpdateAvailable);
|
||||||
|
console.debug("components", components);
|
||||||
|
console.debug("versionInfo.remote?.appVersion", versionInfo.remote?.appVersion);
|
||||||
|
console.debug("versionInfo.appUpdateAvailable", versionInfo?.appUpdateAvailable);
|
||||||
|
console.debug("versionInfo.remote?.systemVersion", versionInfo.remote?.systemVersion);
|
||||||
|
console.debug("versionInfo.systemUpdateAvailable", versionInfo?.systemUpdateAvailable);
|
||||||
|
|
||||||
|
let hasUpdate = false;
|
||||||
|
|
||||||
const pageParams = new URLSearchParams();
|
const pageParams = new URLSearchParams();
|
||||||
if (components.includes("app") && versionInfo.remote?.appVersion && versionInfo.appDowngradeAvailable) {
|
if (components.includes("app") && versionInfo.remote?.appVersion && versionInfo.appUpdateAvailable) {
|
||||||
|
hasUpdate = true;
|
||||||
pageParams.set("custom_app_version", versionInfo.remote?.appVersion);
|
pageParams.set("custom_app_version", versionInfo.remote?.appVersion);
|
||||||
}
|
}
|
||||||
if (components.includes("system") && versionInfo.remote?.systemVersion && versionInfo.systemDowngradeAvailable) {
|
if (components.includes("system") && versionInfo.remote?.systemVersion && versionInfo.systemUpdateAvailable) {
|
||||||
|
hasUpdate = true;
|
||||||
pageParams.set("custom_system_version", versionInfo.remote?.systemVersion);
|
pageParams.set("custom_system_version", versionInfo.remote?.systemVersion);
|
||||||
}
|
}
|
||||||
pageParams.set("reset_config", resetConfig.toString());
|
pageParams.set("reset_config", resetConfig.toString());
|
||||||
|
|
||||||
|
if (!hasUpdate) {
|
||||||
|
handleVersionUpdateError("No update available");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Navigate to update page
|
// Navigate to update page
|
||||||
navigateTo(`/settings/general/update?${pageParams.toString()}`);
|
navigateTo(`/settings/general/update?${pageParams.toString()}`);
|
||||||
}, [
|
}, [
|
||||||
|
|
|
||||||
|
|
@ -443,7 +443,6 @@ function SystemUpToDateState({
|
||||||
|
|
||||||
function UpdateAvailableState({
|
function UpdateAvailableState({
|
||||||
versionInfo,
|
versionInfo,
|
||||||
forceCustomUpdate,
|
|
||||||
onConfirm,
|
onConfirm,
|
||||||
onClose,
|
onClose,
|
||||||
}: {
|
}: {
|
||||||
|
|
@ -462,13 +461,13 @@ function UpdateAvailableState({
|
||||||
{m.general_update_available_description()}
|
{m.general_update_available_description()}
|
||||||
</p>
|
</p>
|
||||||
<p className="mb-4 text-sm text-slate-600 dark:text-slate-300">
|
<p className="mb-4 text-sm text-slate-600 dark:text-slate-300">
|
||||||
{(forceCustomUpdate ? versionInfo?.systemDowngradeAvailable : versionInfo?.systemUpdateAvailable) ? (
|
{versionInfo?.systemUpdateAvailable ? (
|
||||||
<>
|
<>
|
||||||
<span className="font-semibold">{m.general_update_system_type()}</span>: {versionInfo?.local?.systemVersion} <span className="text-slate-600 dark:text-slate-300">→</span> {versionInfo?.remote?.systemVersion}
|
<span className="font-semibold">{m.general_update_system_type()}</span>: {versionInfo?.local?.systemVersion} <span className="text-slate-600 dark:text-slate-300">→</span> {versionInfo?.remote?.systemVersion}
|
||||||
<br />
|
<br />
|
||||||
</>
|
</>
|
||||||
) : null}
|
) : null}
|
||||||
{(forceCustomUpdate ? versionInfo?.appDowngradeAvailable : versionInfo?.appUpdateAvailable) ? (
|
{versionInfo?.appUpdateAvailable ? (
|
||||||
<>
|
<>
|
||||||
<span className="font-semibold">{m.general_update_application_type()}</span>: {versionInfo?.local?.appVersion} <span className="text-slate-600 dark:text-slate-300">→</span> {versionInfo?.remote?.appVersion}
|
<span className="font-semibold">{m.general_update_application_type()}</span>: {versionInfo?.local?.appVersion} <span className="text-slate-600 dark:text-slate-300">→</span> {versionInfo?.remote?.appVersion}
|
||||||
</>
|
</>
|
||||||
|
|
|
||||||
|
|
@ -220,9 +220,7 @@ export interface SystemVersionInfo {
|
||||||
local: VersionInfo;
|
local: VersionInfo;
|
||||||
remote?: VersionInfo;
|
remote?: VersionInfo;
|
||||||
systemUpdateAvailable: boolean;
|
systemUpdateAvailable: boolean;
|
||||||
systemDowngradeAvailable: boolean;
|
|
||||||
appUpdateAvailable: boolean;
|
appUpdateAvailable: boolean;
|
||||||
appDowngradeAvailable: boolean;
|
|
||||||
error?: string;
|
error?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue