Files
Recordly/electron/updaterDialogs.ts
webadderall 5d040fbf2c refactor: split large files into focused modules
Split all source files exceeding 500 lines into smaller, focused modules:

- electron/main.ts → mainBootstrapHelpers, mainRuntimeState, mainUpdateIntegration, mainWindowControls
- electron/windows.ts → editorWindows, hudWindows, windowShared
- electron/updater.ts → updaterDialogs, updaterEventHandlers, updaterShared
- electron/preload.ts → preloadExtensionsBridge, preloadUpdateBridge
- electron/ipc/register/recording.ts → recording/ directory with focused handlers
- src/components/video-editor/VideoEditor.tsx → EditorContent, EditorHeader, EditorSidebar, EditorToolbar, hooks/
- src/components/video-editor/SettingsPanel.tsx → settings/ directory with per-section components
- src/components/video-editor/AnnotationSettingsPanel.tsx → tab components
- src/components/video-editor/ExtensionManager.tsx → extension-manager/ directory
- src/components/video-editor/VideoPlayback.tsx → videoPlaybackComponent/ directory
- src/components/video-editor/projectPersistence.ts → projectPersistence{Normalization,Paths,Regions,Shared}.ts
- src/components/video-editor/timeline/TimelineEditor.tsx → TimelineEditor/ directory
- src/components/video-editor/types.ts → focused type modules
- src/components/launch/LaunchWindow.tsx → LaunchWindow/ directory
- src/hooks/useScreenRecorder.ts → useScreenRecorder/ directory
- src/lib/exporter/audioEncoder.ts → audioEncoder/ directory
- src/lib/exporter/frameRenderer.ts → frameRenderer modules
- src/lib/exporter/modernFrameRenderer.ts → filters and lifecycle modules
- src/lib/exporter/modernVideoExporter.ts → modernVideoExporter/ directory
- src/lib/exporter/videoExporter.ts → video-exporter/ directory
- src/lib/exporter/streamingDecoder.ts → streamingDecoderHelpers.ts
- src/lib/extensions/extensionHost.ts → extensionHost{ApiFactory,QueryApi,RegistrationApi,Shared,State}.ts
- src/lib/extensions/types.ts → focused type modules
- electron/native/ScreenCaptureKitRecorder.swift → ScreenCaptureKitRecorder/ directory
- scripts/benchmark-export-queues.mjs → benchmark-export-queues/ directory
- .github/workflows/release.yml → extracted merge-macos-metadata composite action
- scripts/build-native-helpers.mjs → updated for multi-file Swift compilation

Also incorporates upstream default export quality change (good → source).
2026-04-20 20:41:42 +10:00

116 lines
3.1 KiB
TypeScript

import {
showMessageBox,
type GetMainWindow,
type UpdateToastSender,
UPDATE_REMINDER_DELAY_MS,
} from "./updaterShared";
interface UpdaterDialogActions {
downloadAvailableUpdate: (sendToRenderer?: UpdateToastSender) => Promise<unknown>;
deferUpdateReminder: (
getMainWindow: GetMainWindow,
sendToRenderer?: UpdateToastSender,
delayMs?: number,
) => unknown;
skipAvailableUpdateVersion: (sendToRenderer?: UpdateToastSender) => unknown;
installDownloadedUpdateNow: (sendToRenderer?: UpdateToastSender) => void;
}
export async function showNoUpdatesDialog(getMainWindow: GetMainWindow) {
await showMessageBox(getMainWindow, {
type: "info",
title: "No Updates Available",
message: "Recordly is up to date.",
detail: "You are already running the latest version.",
});
}
export async function showUpdateErrorDialog(getMainWindow: GetMainWindow, error: unknown) {
await showMessageBox(getMainWindow, {
type: "error",
title: "Update Check Failed",
message: "Recordly could not check for updates.",
detail: String(error),
});
}
export async function showAvailableUpdateDialog(
getMainWindow: GetMainWindow,
version: string,
sendToRenderer: UpdateToastSender | undefined,
actions: UpdaterDialogActions,
) {
const result = await showMessageBox(getMainWindow, {
type: "info",
title: "Update Available",
message: `Recordly ${version} is available.`,
detail: "Download now, remind me in 3 hours, or skip this version.",
buttons: ["Download Update", "Remind Me in 3 Hours", "Skip This Version"],
defaultId: 0,
cancelId: 1,
noLink: true,
});
if (result.response === 0) {
await actions.downloadAvailableUpdate(sendToRenderer);
return;
}
if (result.response === 1) {
actions.deferUpdateReminder(getMainWindow, sendToRenderer, UPDATE_REMINDER_DELAY_MS);
return;
}
actions.skipAvailableUpdateVersion(sendToRenderer);
}
export async function showDownloadedUpdateDialog(
getMainWindow: GetMainWindow,
version: string,
actions: UpdaterDialogActions,
options?: { isPreview?: boolean },
) {
const isPreview = Boolean(options?.isPreview);
const result = await showMessageBox(getMainWindow, {
type: "info",
title: "Update Ready",
message: isPreview
? `Recordly ${version} is ready to install.`
: `Recordly ${version} has been downloaded.`,
detail: isPreview
? "Development preview of the native update prompt. No real update will be installed."
: "Install now, remind me in 3 hours, or skip this version.",
buttons: ["Install Update", "Remind Me in 3 Hours", "Skip This Version"],
defaultId: 0,
cancelId: 1,
noLink: true,
});
if (result.response === 0) {
if (isPreview) {
await showMessageBox(getMainWindow, {
type: "info",
title: "Preview Only",
message: "No real update was installed.",
detail: "This was only a manual development preview of the update prompt.",
});
return;
}
setImmediate(() => {
actions.installDownloadedUpdateNow();
});
return;
}
if (result.response === 1) {
if (!isPreview) {
actions.deferUpdateReminder(getMainWindow, undefined, UPDATE_REMINDER_DELAY_MS);
}
return;
}
if (!isPreview) {
actions.skipAvailableUpdateVersion();
}
}