import type { DesktopUpdateState } from "@t3tools/contracts"; export function shouldBroadcastDownloadProgress( currentState: DesktopUpdateState, nextPercent: number,): boolean { if (currentState.status !== "downloading") { return true; } const currentPercent = currentState.downloadPercent; if (currentPercent === null) { return true; } const previousStep = Math.floor(currentPercent / 10); const nextStep = Math.floor(nextPercent / 10); return nextStep !== previousStep || nextPercent === 100;} export function nextStatusAfterDownloadFailure( currentState: DesktopUpdateState,): DesktopUpdateState["status"] { return currentState.availableVersion ? "available" : "error";} export function getCanRetryAfterDownloadFailure(currentState: DesktopUpdateState): boolean { return currentState.availableVersion !== null;} export function getAutoUpdateDisabledReason(args: { isDevelopment: boolean; isPackaged: boolean; platform: NodeJS.Platform; appImage?: string | undefined; disabledByEnv: boolean; hasUpdateFeedConfig: boolean;}): string | null { if (!args.hasUpdateFeedConfig) { return "Automatic updates are not available because no update feed is configured."; } if (args.isDevelopment || !args.isPackaged) { return "Automatic updates are only available in packaged production builds."; } if (args.disabledByEnv) { return "Automatic updates are disabled by the T3CODE_DISABLE_AUTO_UPDATE setting."; } if (args.platform === "linux" && !args.appImage) { return "Automatic updates on Linux require running the AppImage build."; } return null;}
import type { DesktopUpdateState } from "@t3tools/contracts";
export function shouldBroadcastDownloadProgress(
currentState: DesktopUpdateState,
nextPercent: number,
): boolean {
if (currentState.status !== "downloading") {
return true;
}
const currentPercent = currentState.downloadPercent;
if (currentPercent === null) {
return true;
}
const previousStep = Math.floor(currentPercent / 10);
const nextStep = Math.floor(nextPercent / 10);
return nextStep !== previousStep || nextPercent === 100;
}
export function nextStatusAfterDownloadFailure(
currentState: DesktopUpdateState,
): DesktopUpdateState["status"] {
return currentState.availableVersion ? "available" : "error";
}
export function getCanRetryAfterDownloadFailure(currentState: DesktopUpdateState): boolean {
return currentState.availableVersion !== null;
}
export function getAutoUpdateDisabledReason(args: {
isDevelopment: boolean;
isPackaged: boolean;
platform: NodeJS.Platform;
appImage?: string | undefined;
disabledByEnv: boolean;
hasUpdateFeedConfig: boolean;
}): string | null {
if (!args.hasUpdateFeedConfig) {
return "Automatic updates are not available because no update feed is configured.";
}
if (args.isDevelopment || !args.isPackaged) {
return "Automatic updates are only available in packaged production builds.";
}
if (args.disabledByEnv) {
return "Automatic updates are disabled by the T3CODE_DISABLE_AUTO_UPDATE setting.";
}
if (args.platform === "linux" && !args.appImage) {
return "Automatic updates on Linux require running the AppImage build.";
}
return null;
}