mirror of
https://github.com/webadderallorg/Recordly.git
synced 2026-09-26 15:55:35 +00:00
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).
116 lines
3.1 KiB
TypeScript
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();
|
|
}
|
|
} |