diff --git a/apps/client/src/components/app_context.ts b/apps/client/src/components/app_context.ts index 51eb812594..7b2c12c4fd 100644 --- a/apps/client/src/components/app_context.ts +++ b/apps/client/src/components/app_context.ts @@ -13,7 +13,7 @@ import type LoadResults from "../services/load_results.js"; import type { CreateNoteOpts } from "../services/note_create.js"; import options from "../services/options.js"; import toast from "../services/toast.js"; -import utils, { hasTouchBar } from "../services/utils.js"; +import utils, { dynamicRequire, hasTouchBar } from "../services/utils.js"; import { ReactWrappedWidget } from "../widgets/basic_widget.js"; import type RootContainer from "../widgets/containers/root_container.js"; import { AddLinkOpts } from "../widgets/dialogs/add_link.jsx"; @@ -641,6 +641,10 @@ export class AppContext extends Component { this.child(rootWidget as Component); this.triggerEvent("initialRenderComplete", {}); + if (utils.isElectron()) { + const { ipcRenderer } = dynamicRequire('electron'); + ipcRenderer.send("initial-render-complete"); + } } triggerEvent(name: K, data: EventData) { diff --git a/apps/client/src/widgets/dialogs/import_preview.tsx b/apps/client/src/widgets/dialogs/import_preview.tsx index e10bec288a..7a16ff1716 100644 --- a/apps/client/src/widgets/dialogs/import_preview.tsx +++ b/apps/client/src/widgets/dialogs/import_preview.tsx @@ -5,7 +5,7 @@ import { useEffect, useRef, useState } from "preact/hooks"; import { t } from "../../services/i18n"; import { cancelUploadWithPreview, executeUploadWithPreview } from "../../services/import"; -import { boolToString } from "../../services/utils"; +import { boolToString, dynamicRequire, isElectron } from "../../services/utils"; import { Badge } from "../react/Badge"; import Button from "../react/Button"; import { Card } from "../react/Card"; @@ -16,7 +16,7 @@ import Modal from "../react/Modal"; import NoteAutocomplete from "../react/NoteAutocomplete"; export interface ImportPreviewData { - parentNoteId: string; + parentNoteId?: string; previews: ImportPreviewResponse[]; } @@ -105,6 +105,21 @@ export default function ImportPreviewDialog() { hasSubmittedRef.current = false; }); + useEffect(() => { + if (!isElectron()) return; + const { ipcRenderer } = dynamicRequire("electron"); + const onShow = (_event: any, data: ImportPreviewData) => { + setData(data); + setShown(true); + setImportButtonTimeout(IMPORT_BUTTON_TIMEOUT); + hasSubmittedRef.current = false; + }; + ipcRenderer.on("show-import-preview-dialog", onShow); + return () => { + ipcRenderer.removeListener("show-import-preview-dialog", onShow); + } + }, []); + return ( { @@ -133,6 +136,20 @@ async function onReady() { await windowService.registerGlobalShortcuts(); } +async function handleImportArguments(args: string[], window: BrowserWindow) { + const filesToImport = args.filter(arg => !arg.startsWith("-") && arg.endsWith(".trilium")); + if (filesToImport.length === 0) return; + + const previews = await Promise.all(filesToImport.map(file => previewZipForImport(file))); + console.log("Sendimg import preview data to window", window); + ipcMain.on("initial-render-complete", () => { + console.log("READYYY!!!"); + window.webContents.send("show-import-preview-dialog", { + previews + }); + }); +} + function getElectronLocale() { const uiLocale = options.getOptionOrNull("locale"); const formattingLocale = options.getOptionOrNull("formattingLocale"); diff --git a/apps/server/src/services/window.ts b/apps/server/src/services/window.ts index 8be3f56a5a..7d90f66e90 100644 --- a/apps/server/src/services/window.ts +++ b/apps/server/src/services/window.ts @@ -221,6 +221,7 @@ async function createMainWindow(app: App) { configureWebContents(mainWindow.webContents, spellcheckEnabled); trackWindowFocus(mainWindow); + return mainWindow; } function getWindowExtraOpts() {