@@ -27,7 +27,7 @@ import {registerWindowsPDF} from './windows-file-association.mjs';
2727import { windowChromeOptions , commandAccelerator , closeWindowAccelerator , shortcutAction , serializeApplicationMenu , menuPathItems } from './window-chrome.mjs' ;
2828import { appendPerformanceReport , loadPerformanceReports , memoryMetricToBytes , MAX_PERFORMANCE_REPORTS , sumMemoryMetrics , validatePerformanceReport , writePerformanceReports } from './performance-tracker.mjs' ;
2929import { importPDFAnnotations } from './annotation-import.mjs' ;
30- import { createAnnotationStore , stripManagedAnnotations , embedAnnotations } from './annotations.mjs' ;
30+ import { createAnnotationStore , stripManagedAnnotations } from './annotations.mjs' ;
3131
3232const recentContextMenuLabels = {
3333 en :{ open :'Open' , openWindow :'Open in New Window' , hide :'Remove from Recents' , copy :'Copy File Location' , reveal :'Reveal in Finder' , status :'View Translation Status' } ,
@@ -258,7 +258,7 @@ else {
258258 if ( source ?. path && source . reliable ) { ticket = randomBytes ( 16 ) . toString ( 'hex' ) ; state . tickets . set ( ticket , source . path ) ; }
259259 return { ...result , ticket} ;
260260 } ) ;
261- ipcMain . handle ( 'previewAnnotations:prepare' , async ( event , value ) => { const target = trustedWindow ( event ) ; if ( ! ( value instanceof Uint8Array ) || value . byteLength > 50 * 1024 * 1024 ) throw Error ( 'Invalid annotation PDF bytes.' ) ; const imported = await importPDFAnnotations ( value ) ; windows . get ( target ) . unkeyedAnnotationSource = { bytes :Buffer . from ( value ) , reliable :false , preserveWithoutPath :true } ; return { ... imported , bytes : new Uint8Array ( await embedAnnotations ( value , [ ] , imported . nativeRefs ) ) } ; } ) ;
261+ ipcMain . handle ( 'previewAnnotations:prepare' , async ( event , value ) => { const target = trustedWindow ( event ) ; if ( ! ( value instanceof Uint8Array ) || value . byteLength > 50 * 1024 * 1024 ) throw Error ( 'Invalid annotation PDF bytes.' ) ; const imported = await importPDFAnnotations ( value , { prepare : true } ) ; windows . get ( target ) . unkeyedAnnotationSource = { bytes :Buffer . from ( value ) , reliable :false , preserveWithoutPath :true } ; return imported ; } ) ;
262262 ipcMain . handle ( 'previewAnnotations:confirmDelete' , async ( event , kind ) => {
263263 const target = trustedWindow ( event ) ;
264264 if ( ! [ 'highlight' , 'comment' ] . includes ( kind ) ) throw Error ( 'Invalid annotation kind.' ) ;
@@ -436,7 +436,7 @@ else {
436436 ipcMain . handle ( 'window:new' , async event => { trustedWindow ( event ) ; await createWindow ( ) ; } ) ;
437437 if ( ! smoke && preferences . load ( ) . restoreDocuments ) { for ( const document of documentSession . restore ( ) ) { try { await validateSystemPDF ( document . path ) ; } catch { continue ; } if ( ! pendingFiles . includes ( document . path ) ) await createWindow ( document . path , document . view ) ; } }
438438 window = [ ...windows . keys ( ) ] [ 0 ] || await createWindow ( pendingFiles . shift ( ) ) ; backend = windows . get ( window ) . backend ; documentsReady = true ; await deliverPendingFiles ( ) ;
439- if ( smoke ) { const checks = await import ( './smoke.mjs' ) ; if ( smoke === 'information-emphasis' ) await ( await import ( './information-emphasis-smoke.mjs' ) ) . verifyInformationEmphasis ( window , recents ) ; else if ( smoke === 'topic-sentences' ) await ( await import ( './topic-sentences-smoke.mjs' ) ) . verifyTopicSentences ( window ) ; else if ( smoke === 'page-edits' ) await ( await import ( './page-edits-smoke.mjs' ) ) . verifyPageEdits ( window , recents ) ; else if ( smoke === 'cache-progress' ) await ( await import ( './cache-progress-smoke.mjs' ) ) . verifyCacheProgress ( window ) ; else if ( smoke === 'quick-links' ) await ( await import ( './quick-links-smoke.mjs' ) ) . verifyQuickLinks ( window ) ; else if ( smoke === 'translation-prefetch' ) await ( await import ( './translation-prefetch-smoke.mjs' ) ) . verifyTranslationPrefetch ( window , recents ) ; else if ( smoke === 'pdf-navigation' ) await ( await import ( './pdf-navigation-smoke.mjs' ) ) . verifyPDFNavigation ( window , recents ) ; else if ( [ 'sidebar' , 'sidebar-keys' ] . includes ( smoke ) ) await ( await import ( './sidebar-smoke.mjs' ) ) . verifySidebar ( window , recents ) ; else if ( smoke === 'advanced-cache' ) await ( await import ( './advanced-cache-smoke.mjs' ) ) . verifyAdvancedCache ( window ) ; else if ( smoke === 'file-menu' ) await ( await import ( './file-menu-smoke.mjs' ) ) . verifyFileMenu ( window , recents ) ; else if ( smoke === 'recent-menu' ) await ( await import ( './recent-menu-smoke.mjs' ) ) . verifyRecentMenu ( window , recents ) ; else if ( smoke === 'startup' ) await ( await import ( './startup-smoke.mjs' ) ) . verifyStartup ( window ) ; else if ( smoke === 'session' ) await ( await import ( './session-smoke.mjs' ) ) . verifySession ( window , windows , createWindow ) ; else if ( smoke === 'layout-settings' ) await ( await import ( './layout-settings-smoke.mjs' ) ) . verifyLayoutSettings ( window ) ; else if ( smoke === 'windows-settings' ) await ( await import ( './windows-settings-smoke.mjs' ) ) . verifyWindowsSettings ( window ) ; else if ( smoke === 'locales' ) await ( await import ( './locales-smoke.mjs' ) ) . verifyLocales ( window ) ; else if ( smoke === 'advanced' ) await ( await import ( './advanced-smoke.mjs' ) ) . verifyAdvanced ( window ) ; else if ( smoke === 'fluent' ) await ( await import ( './fluent-smoke.mjs' ) ) . verifyFluent ( window ) ; else if ( smoke === 'search' ) await ( await import ( './search-smoke.mjs' ) ) . verifySearch ( window ) ; else if ( smoke === 'multi-window' ) await ( await import ( './multi-window-smoke.mjs' ) ) . verifyMultiWindow ( window , windows , createWindow ) ; else if ( smoke === 'crop' ) await ( await import ( './crop-smoke.mjs' ) ) . verifyCrop ( window , recents ) ; else if ( smoke === 'fit-width' ) await ( await import ( './fit-width-smoke.mjs' ) ) . verifyFitWidth ( window , recents ) ; else if ( smoke === 'reading-view' ) await ( await import ( './reading-view-smoke.mjs' ) ) . verifyReadingView ( window , recents ) ; else if ( smoke === 'performance' ) await ( await import ( './performance-smoke.mjs' ) ) . verifyPerformance ( window ) ; else if ( smoke === 'benchmark' ) await ( await import ( './benchmark-smoke.mjs' ) ) . verifyBenchmark ( window ) ; else if ( smoke === 'coverage' ) await ( await import ( './coverage-smoke.mjs' ) ) . verifyCoverage ( window , backend , token ) ; else if ( smoke === 'resize' ) { await ( await import ( './recents-smoke.mjs' ) ) . verifyRecents ( window , recents ) ; await ( await import ( './resize-smoke.mjs' ) ) . verifyResize ( window ) ; } else if ( smoke === 'animation' ) await ( await import ( './animation-smoke.mjs' ) ) . verifyAnimation ( window ) ; else if ( smoke === 'ux' ) await ( await import ( './ux-smoke.mjs' ) ) . verifyUX ( window , recents ) ; else if ( smoke === 'layout-region' ) await ( await import ( './layout-region-smoke.mjs' ) ) . verifyLayoutRegion ( window ) ; else if ( smoke === 'kernel-choice' ) await ( await import ( './kernel-choice-smoke.mjs' ) ) . verifyKernelChoice ( window ) ; else if ( smoke === 'kernels' ) await ( await import ( './kernel-smoke.mjs' ) ) . verifyKernelUI ( window ) ; else if ( [ 'annotations' , 'annotation-shortcuts' ] . includes ( smoke ) ) await ( await import ( './annotations-smoke.mjs' ) ) . verifyAnnotations ( window , recents ) ; else if ( smoke === 'file-open' ) await checks . verifySystemOpen ( window ) ; else await checks . verify ( window , backend , token , smoke , credentials ) ; }
439+ if ( smoke ) { const checks = await import ( './smoke.mjs' ) ; if ( smoke === 'information-emphasis' ) await ( await import ( './information-emphasis-smoke.mjs' ) ) . verifyInformationEmphasis ( window , recents ) ; else if ( smoke === 'topic-sentences' ) await ( await import ( './topic-sentences-smoke.mjs' ) ) . verifyTopicSentences ( window ) ; else if ( smoke === 'page-edits' ) await ( await import ( './page-edits-smoke.mjs' ) ) . verifyPageEdits ( window , recents ) ; else if ( smoke === 'cache-progress' ) await ( await import ( './cache-progress-smoke.mjs' ) ) . verifyCacheProgress ( window ) ; else if ( smoke === 'quick-links' ) await ( await import ( './quick-links-smoke.mjs' ) ) . verifyQuickLinks ( window ) ; else if ( smoke === 'translation-prefetch' ) await ( await import ( './translation-prefetch-smoke.mjs' ) ) . verifyTranslationPrefetch ( window , recents ) ; else if ( smoke === 'pdf-navigation' ) await ( await import ( './pdf-navigation-smoke.mjs' ) ) . verifyPDFNavigation ( window , recents ) ; else if ( [ 'sidebar' , 'sidebar-keys' ] . includes ( smoke ) ) await ( await import ( './sidebar-smoke.mjs' ) ) . verifySidebar ( window , recents ) ; else if ( smoke === 'advanced-cache' ) await ( await import ( './advanced-cache-smoke.mjs' ) ) . verifyAdvancedCache ( window ) ; else if ( smoke === 'large-open' ) await ( await import ( './large-open-smoke.mjs' ) ) . verifyLargeOpen ( window , recents ) ; else if ( smoke === 'file-menu' ) await ( await import ( './file-menu-smoke.mjs' ) ) . verifyFileMenu ( window , recents ) ; else if ( smoke === 'recent-menu' ) await ( await import ( './recent-menu-smoke.mjs' ) ) . verifyRecentMenu ( window , recents ) ; else if ( smoke === 'startup' ) await ( await import ( './startup-smoke.mjs' ) ) . verifyStartup ( window ) ; else if ( smoke === 'session' ) await ( await import ( './session-smoke.mjs' ) ) . verifySession ( window , windows , createWindow ) ; else if ( smoke === 'layout-settings' ) await ( await import ( './layout-settings-smoke.mjs' ) ) . verifyLayoutSettings ( window ) ; else if ( smoke === 'windows-settings' ) await ( await import ( './windows-settings-smoke.mjs' ) ) . verifyWindowsSettings ( window ) ; else if ( smoke === 'locales' ) await ( await import ( './locales-smoke.mjs' ) ) . verifyLocales ( window ) ; else if ( smoke === 'advanced' ) await ( await import ( './advanced-smoke.mjs' ) ) . verifyAdvanced ( window ) ; else if ( smoke === 'fluent' ) await ( await import ( './fluent-smoke.mjs' ) ) . verifyFluent ( window ) ; else if ( smoke === 'search' ) await ( await import ( './search-smoke.mjs' ) ) . verifySearch ( window ) ; else if ( smoke === 'multi-window' ) await ( await import ( './multi-window-smoke.mjs' ) ) . verifyMultiWindow ( window , windows , createWindow ) ; else if ( smoke === 'crop' ) await ( await import ( './crop-smoke.mjs' ) ) . verifyCrop ( window , recents ) ; else if ( smoke === 'fit-width' ) await ( await import ( './fit-width-smoke.mjs' ) ) . verifyFitWidth ( window , recents ) ; else if ( smoke === 'reading-view' ) await ( await import ( './reading-view-smoke.mjs' ) ) . verifyReadingView ( window , recents ) ; else if ( smoke === 'performance' ) await ( await import ( './performance-smoke.mjs' ) ) . verifyPerformance ( window ) ; else if ( smoke === 'benchmark' ) await ( await import ( './benchmark-smoke.mjs' ) ) . verifyBenchmark ( window ) ; else if ( smoke === 'coverage' ) await ( await import ( './coverage-smoke.mjs' ) ) . verifyCoverage ( window , backend , token ) ; else if ( smoke === 'resize' ) { await ( await import ( './recents-smoke.mjs' ) ) . verifyRecents ( window , recents ) ; await ( await import ( './resize-smoke.mjs' ) ) . verifyResize ( window ) ; } else if ( smoke === 'animation' ) await ( await import ( './animation-smoke.mjs' ) ) . verifyAnimation ( window ) ; else if ( smoke === 'ux' ) await ( await import ( './ux-smoke.mjs' ) ) . verifyUX ( window , recents ) ; else if ( smoke === 'layout-region' ) await ( await import ( './layout-region-smoke.mjs' ) ) . verifyLayoutRegion ( window ) ; else if ( smoke === 'kernel-choice' ) await ( await import ( './kernel-choice-smoke.mjs' ) ) . verifyKernelChoice ( window ) ; else if ( smoke === 'kernels' ) await ( await import ( './kernel-smoke.mjs' ) ) . verifyKernelUI ( window ) ; else if ( [ 'annotations' , 'annotation-shortcuts' ] . includes ( smoke ) ) await ( await import ( './annotations-smoke.mjs' ) ) . verifyAnnotations ( window , recents ) ; else if ( smoke === 'file-open' ) await checks . verifySystemOpen ( window ) ; else await checks . verify ( window , backend , token , smoke , credentials ) ; }
440440 } ) . catch ( async error => { if ( smoke ) { await backend ?. close ( ) ; console . error ( 'Desktop smoke failed:' , error . stack || error . message ) ; if ( smoke === 'file-open' ) await writeFile ( '/tmp/preview-system-open-result.json' , JSON . stringify ( { passed :false , error :error . message } ) ) ; app . exit ( 1 ) ; return ; } dialog . showErrorBox ( 'PDFMathReader' , `The local reader could not start.\n\n${ error ?. message || 'The backend utility process did not become ready.' } \n\nQuit and reopen PDFMathReader.` ) ; app . quit ( ) ; } ) ;
441441 app . on ( 'before-quit' , event => {
442442 if ( ! backend || quitting ) return ;
0 commit comments