mirror of
https://github.com/webadderallorg/Recordly.git
synced 2026-09-25 15:25:44 +00:00
fix: address CodeRabbit review feedback
- AnnotationTextTab: use ?? instead of || so empty text can be cleared - ExtensionManager: add catch block for marketplace install failures - useEditorExport: wrap retry save in try/catch for unhandled rejections - editorExportWorkflow: move playback restore to finally block
This commit is contained in:
@@ -59,7 +59,7 @@ export function AnnotationTextTab({
|
||||
{t("annotations.textContent")}
|
||||
</label>
|
||||
<textarea
|
||||
value={annotation.textContent || annotation.content}
|
||||
value={annotation.textContent ?? annotation.content ?? ""}
|
||||
onChange={(event) => onContentChange(event.target.value)}
|
||||
placeholder={t("annotations.textPlaceholder")}
|
||||
rows={5}
|
||||
|
||||
@@ -143,6 +143,10 @@ export default function ExtensionManager() {
|
||||
description: result.error,
|
||||
});
|
||||
}
|
||||
} catch (error) {
|
||||
toast.error(t("toast.marketplaceInstallFailed", undefined, { name: extension.name }), {
|
||||
description: error instanceof Error ? error.message : undefined,
|
||||
});
|
||||
} finally {
|
||||
setInstallingIds((previous) => {
|
||||
const next = new Set(previous);
|
||||
|
||||
@@ -98,10 +98,12 @@ export async function runEditorExport({
|
||||
setExportProgress,
|
||||
);
|
||||
let keepExportDialogOpen = false;
|
||||
let wasPlaying = false;
|
||||
let restoreTime: number | null = null;
|
||||
|
||||
try {
|
||||
const wasPlaying = config.isPlaying;
|
||||
const restoreTime = video.currentTime;
|
||||
wasPlaying = config.isPlaying;
|
||||
restoreTime = video.currentTime;
|
||||
if (wasPlaying) {
|
||||
videoPlaybackRef.current?.pause();
|
||||
}
|
||||
@@ -442,11 +444,6 @@ export async function runEditorExport({
|
||||
}
|
||||
}
|
||||
|
||||
if (wasPlaying) {
|
||||
videoPlaybackRef.current?.play();
|
||||
} else {
|
||||
video.currentTime = restoreTime;
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("Export error:", error);
|
||||
const errorMessage = error instanceof Error ? error.message : "Unknown error";
|
||||
@@ -468,6 +465,13 @@ export async function runEditorExport({
|
||||
setExportError(errorMessage);
|
||||
toast.error(`Export failed: ${summarizeErrorMessage(errorMessage)}`);
|
||||
} finally {
|
||||
if (restoreTime !== null) {
|
||||
if (wasPlaying) {
|
||||
videoPlaybackRef.current?.play();
|
||||
} else {
|
||||
video.currentTime = restoreTime;
|
||||
}
|
||||
}
|
||||
extensionHost.emitEvent({ type: "export:complete" });
|
||||
setIsExporting(false);
|
||||
exporterRef.current = null;
|
||||
|
||||
@@ -210,26 +210,32 @@ export function useEditorExport({
|
||||
const handleRetrySaveExport = useCallback(async () => {
|
||||
const pendingSave = pendingExportSaveRef.current;
|
||||
if (!pendingSave) return;
|
||||
const saveResult = await window.electronAPI.saveExportedVideo(
|
||||
pendingSave.arrayBuffer,
|
||||
pendingSave.fileName,
|
||||
);
|
||||
if (saveResult.canceled) {
|
||||
setExportError("Save dialog canceled. Click Save Again to save without re-rendering.");
|
||||
toast.info("Save canceled. You can try again.");
|
||||
return;
|
||||
try {
|
||||
const saveResult = await window.electronAPI.saveExportedVideo(
|
||||
pendingSave.arrayBuffer,
|
||||
pendingSave.fileName,
|
||||
);
|
||||
if (saveResult.canceled) {
|
||||
setExportError("Save dialog canceled. Click Save Again to save without re-rendering.");
|
||||
toast.info("Save canceled. You can try again.");
|
||||
return;
|
||||
}
|
||||
if (saveResult.success && saveResult.path) {
|
||||
clearPendingExportSave();
|
||||
setExportError(null);
|
||||
setExportedFilePath(saveResult.path);
|
||||
showExportSuccessToast(saveResult.path);
|
||||
setShowExportDropdown(true);
|
||||
return;
|
||||
}
|
||||
const errorMessage = saveResult.message || "Failed to save video";
|
||||
setExportError(errorMessage);
|
||||
toast.error(errorMessage);
|
||||
} catch (error) {
|
||||
const errorMessage = error instanceof Error ? error.message : "Failed to save video";
|
||||
setExportError(errorMessage);
|
||||
toast.error(errorMessage);
|
||||
}
|
||||
if (saveResult.success && saveResult.path) {
|
||||
clearPendingExportSave();
|
||||
setExportError(null);
|
||||
setExportedFilePath(saveResult.path);
|
||||
showExportSuccessToast(saveResult.path);
|
||||
setShowExportDropdown(true);
|
||||
return;
|
||||
}
|
||||
const errorMessage = saveResult.message || "Failed to save video";
|
||||
setExportError(errorMessage);
|
||||
toast.error(errorMessage);
|
||||
}, [clearPendingExportSave, showExportSuccessToast]);
|
||||
|
||||
// Export status derived values
|
||||
|
||||
Reference in New Issue
Block a user