refactor: remove downgrade attributes from ota state and jsonrpc

This commit is contained in:
Siyuan 2025-11-07 17:13:04 +00:00
parent 8bd3d4cfcf
commit 9832be29ef
9 changed files with 40 additions and 39 deletions

View File

@ -152,12 +152,12 @@ func (s *State) doUpdate(ctx context.Context, params UpdateParams) error {
return nil
}
if shouldUpdateApp && (appUpdate.available || appUpdate.downgradeAvailable) {
if shouldUpdateApp && appUpdate.available {
appUpdate.pending = true
s.triggerComponentUpdateState("app", appUpdate)
}
if shouldUpdateSystem && (systemUpdate.available || systemUpdate.downgradeAvailable) {
if shouldUpdateSystem && systemUpdate.available {
systemUpdate.pending = true
s.triggerComponentUpdateState("system", systemUpdate)
}
@ -292,7 +292,6 @@ func (s *State) checkUpdateStatus(
return err
}
systemUpdateStatus.available = systemVersionRemote.GreaterThan(systemVersionLocal)
systemUpdateStatus.downgradeAvailable = systemVersionRemote.LessThan(systemVersionLocal)
appVersionRemote, err := semver.NewVersion(remoteMetadata.AppVersion)
if err != nil {
@ -300,7 +299,6 @@ func (s *State) checkUpdateStatus(
return err
}
appUpdateStatus.available = appVersionRemote.GreaterThan(appVersionLocal)
appUpdateStatus.downgradeAvailable = appVersionRemote.LessThan(appVersionLocal)
// Handle pre-release updates
isRemoteSystemPreRelease := systemVersionRemote.Prerelease() != ""
@ -313,6 +311,15 @@ func (s *State) checkUpdateStatus(
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
}

View File

@ -28,12 +28,10 @@ type LocalMetadata struct {
// UpdateStatus represents the current update status
type UpdateStatus struct {
Local *LocalMetadata `json:"local"`
Remote *UpdateMetadata `json:"remote"`
SystemUpdateAvailable bool `json:"systemUpdateAvailable"`
SystemDowngradeAvailable bool `json:"systemDowngradeAvailable"`
AppUpdateAvailable bool `json:"appUpdateAvailable"`
AppDowngradeAvailable bool `json:"appDowngradeAvailable"`
Local *LocalMetadata `json:"local"`
Remote *UpdateMetadata `json:"remote"`
SystemUpdateAvailable bool `json:"systemUpdateAvailable"`
AppUpdateAvailable bool `json:"appUpdateAvailable"`
// for backwards compatibility
Error string `json:"error,omitempty"`
@ -50,7 +48,6 @@ type PostRebootAction struct {
type componentUpdateStatus struct {
pending bool
available bool
downgradeAvailable bool
version string
localVersion string
targetVersion string
@ -170,11 +167,9 @@ func toUpdateStatus(appUpdate *componentUpdateStatus, systemUpdate *componentUpd
SystemURL: systemUpdate.url,
SystemHash: systemUpdate.hash,
},
SystemUpdateAvailable: systemUpdate.available,
SystemDowngradeAvailable: systemUpdate.downgradeAvailable,
AppUpdateAvailable: appUpdate.available,
AppDowngradeAvailable: appUpdate.downgradeAvailable,
Error: error,
SystemUpdateAvailable: systemUpdate.available,
AppUpdateAvailable: appUpdate.available,
Error: error,
}
}

View File

@ -1155,7 +1155,6 @@ var rpcHandlers = map[string]RPCHandler{
"getUpdateStatusChannel": {Func: rpcGetUpdateStatusChannel},
"tryUpdate": {Func: rpcTryUpdate},
"tryUpdateComponents": {Func: rpcTryUpdateComponents, Params: []string{"params", "includePreRelease", "resetConfig"}},
"cancelDowngrade": {Func: rpcCancelDowngrade},
"getDevModeState": {Func: rpcGetDevModeState},
"setDevModeState": {Func: rpcSetDevModeState, Params: []string{"enabled"}},
"getSSHKeyState": {Func: rpcGetSSHKeyState},

10
ota.go
View File

@ -194,13 +194,3 @@ func rpcTryUpdateComponents(params updateParams, includePreRelease bool, resetCo
}()
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
}

View File

@ -554,7 +554,6 @@ export type UpdateModalViews =
| "updating"
| "upToDate"
| "updateAvailable"
| "updateDowngradeAvailable"
| "updateCompleted"
| "error";

View File

@ -15,9 +15,7 @@ export interface SystemVersionInfo {
local: VersionInfo;
remote?: VersionInfo;
systemUpdateAvailable: boolean;
systemDowngradeAvailable: boolean;
appUpdateAvailable: boolean;
appDowngradeAvailable: boolean;
error?: string;
}

View File

@ -185,10 +185,10 @@ export default function SettingsAdvancedRoute() {
setShowLoopbackWarning(false);
}, [applyLoopbackOnlyMode, setShowLoopbackWarning]);
const handleVersionUpdateError = useCallback((error?: JsonRpcError) => {
const handleVersionUpdateError = useCallback((error?: JsonRpcError | string) => {
notifications.error(
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
);
@ -214,15 +214,31 @@ export default function SettingsAdvancedRoute() {
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();
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);
}
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("reset_config", resetConfig.toString());
if (!hasUpdate) {
handleVersionUpdateError("No update available");
return;
}
// Navigate to update page
navigateTo(`/settings/general/update?${pageParams.toString()}`);
}, [

View File

@ -443,7 +443,6 @@ function SystemUpToDateState({
function UpdateAvailableState({
versionInfo,
forceCustomUpdate,
onConfirm,
onClose,
}: {
@ -462,13 +461,13 @@ function UpdateAvailableState({
{m.general_update_available_description()}
</p>
<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}
<br />
</>
) : 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}
</>

View File

@ -220,9 +220,7 @@ export interface SystemVersionInfo {
local: VersionInfo;
remote?: VersionInfo;
systemUpdateAvailable: boolean;
systemDowngradeAvailable: boolean;
appUpdateAvailable: boolean;
appDowngradeAvailable: boolean;
error?: string;
}