fix(export): vang een mislukte export op zodat het dialoog niet eeuwig hangt (#708) #710
No reviewers
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck!710
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/export-hangt-bij-fout"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Gevonden tijdens deze sessie uit een "hij hangt gewoon"-melding bij het exporteren. De app stond op 0% processor te slapen — niet te renderen, maar te wachten op iets dat nooit kwam. Dat sloot traagheid uit: het hing echt.
Oorzaak
_ExportDialogState._export()inexport_dialog.darthad geen enkeletry/catch— in het hele bestand niet één. De functie zet_loading = true, en roept danSlideRasterizer.rasterize(...)enexportService.export(...)aan. Gooit een van beide — eenSlideRasterizerNoFrameException(frame-timeout), een schrijffout, een fout in de PPTX/PDF-assemblage — dan vliegt de uitzondering ongevangen naar buiten en wordt de regel die_loading = falsezet nooit bereikt. Het dialoog blijft op zijn "…samenstellen…"-fasetekst staan, voor altijd, zonder melding.De bestaande foutafhandeling dekte alleen een teruggegeven
ExportResult(success: false). Een gegooide uitzondering ging daar volledig langs.Waarom dit meer dan cosmetisch is
Een export die vastloopt op een missend bestand of een render-hapering laat de gebruiker met een dood venster achter — sluiten is de enige uitweg, en er is geen spoor van wat er misging. Voor een product dat exporteren als kernfunctie heeft, is "faalt stil en voorgoed" de slechtste uitkomst.
De reparatie
De render- en exportstap zitten nu in een
try/catch. Bij een fout: loggen mét stacktrace,_loadinguit, en de melding tonen — met de technische reden op een eigen regel, want "de export is mislukt" alleen laat je met niets achter._exportis opgesplitst in een dunne omhulling (detry/catch) en_runExport(de body, ongewijzigd erin). De omhulling zit op het niveau dat óók de rasterizer-timeout vangt — dat was de oorspronkelijke verdenking toen dit opdook.Getoetst
ExportServicedie gooit, geëxporteerd als HTML (dat slaat de rasterizer over, dus de fout landt recht in het dialoog). Zonder de fix loopt het venster vast op de laadtekst "…samenstellen…"; ermee verschijnt de foutmelding. De test is dus rood vóór en groen ná — dat is de mutatie-evidentie ineen.make l10n-checkgroen).make checkgroen,make check-secretsenmake sastschoon.Herkomst van de melding
Ik had de traagheid eerst ten onrechte op inherente rendering en op #613 (de UI-thread-scans) gegooid. Dat klopte niet: de diagnose via de procestoestand (0% CPU,
sleeping) en de code wees eenduidig hierheen. #613 is een echte, aparte traagheid vóór het renderen; dit is een deadlock ná een fout. Twee verschillende dingen.Closes #708