[Bug] Het faalbeleid van de presentatie-import wordt gezet maar nooit gelezen #812
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#812
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Bij het overzetten van de presentatie-import (#772) is
SlideFailurePolicymeegekomen, maar het bijbehorende gedrag niet. Het resultaat is bedrading die niets doet.Wat er staat.
lib/services/import/models/slide_failure_policy.dartdeclareertbestEffort,skipenrasterize.ProblemSlide.suggestedPolicydraagt zo'n waarde, endeck_builder.dart(~regel 585) vult hem netjes in:rasterizeals de dia een afbeelding heeft, andersbestEffort.Wat er niet staat. Niets leest dat veld ooit uit. De import doet altijd best-effort + een 'niet overgenomen'-notitiedia;
skipenrasterizezijn onbereikbaar. DeproblemSlidesuitPresentationImportResultworden alleen geteld voor de melding ('N dia's vragen aandacht').Waarom dit meer is dan een ongebruikt veld. Het losse bronproject had hier een echte functie: bij een dia die niet schoon converteert kon de gebruiker per dia kiezen — best-effort met notitie, rasteriseren als afbeelding, overslaan, of de hele import afbreken — met een 'auto-doorgaan'-instelling om die vraag over te slaan. Die keuze is er nu niet; de enum wekt de indruk van wel.
De dode-code-poort ving dit niet, en dat is geen fout van de poort: die toetst of een bestand bereikbaar is vanuit
main(), niet of een enumwaarde ooit gelezen wordt. Het bestand is bereikbaar, dus groen.Twee wegen, en de keuze is de eigenlijke vraag:
ProblemSlidedraagt al alles wat zo'n dialoog nodig heeft: bronnummer, titel, de beschrijvingen van wat er misgaat, en of er een afbeelding is. Let op de wisselwerking met de bulk-wachtrij: tien bestanden × per-dia-vragen is snel onwerkbaar, dus daar hoort een 'niet meer vragen'-uitweg bij.suggestedPolicyschrappen. Best-effort + notitiedia is een verdedigbare vaste keuze, en dan is er ook niets dat anders suggereert.Let op dat
rasterizein het bronproject leunde op een aanroep van LibreOffice (soffice) als extern proces. Dat komt hier niet terug: geen subproces, geen externe afhankelijkheid. Wordt het optie 1, dan moet 'rasteriseren' iets anders betekenen (bijvoorbeeld: alleen de afbeeldingen van de dia houden en de rest laten vallen — wat de bron-code feitelijk ook deed als er al een afbeelding was) of vervallen.Herkomst: gevonden bij de eindcontrole van #772, op de vraag of werkelijk alles uit het bronproject was overgezet. Antwoord: de conversiemotor wel, dit beleid niet.
Opgepakt, optie 1: het beslismoment bouwen. Tak:
fix/import-faalbeleid-812.Reikwijdte:
deck_builder.dartgaat het beleid werkelijk toepassen (per bron-dia), de import-service krijgt een tweefase-vorm zodat de vraag tússen classificeren en bouwen past (niet twee keer parsen), en er komt een beslisdialoog voor de enkelvoudige import. De bulk-wachtrij vraagt bewust níéts — tien bestanden × per-dia-vragen is geen route — die blijft best-effort, en dat komt in de tekst te staan.Eén naamswijziging vooraf:
rasterizewordtimageOnly. Rasteriseren impliceert renderen, en dat kan hier niet (geen subproces). Wat de bron-code feitelijk deed was 'houd alleen de afbeeldingen van deze dia', en zo gaat het ook heten.Geland op main met merge-commit
c50d1b1e(PR #819, zes commits). Geverifieerd op main: de beslisdialoog staat er,rasterizeensuggestedPolicykomen nergens meer voor, en het beleid wordt werkelijk gelezen.Gekozen voor optie 1: het beslismoment gebouwd. Bij één bestand verschijnt de vraag zodra er dia's zijn met écht verlies — per dia zo volledig mogelijk, alleen de afbeelding, of overslaan, met de redenen erbij. De bulk-wachtrij vraagt bewust niets.
rasterizeheetimageOnly. Zoals het issue al aangaf kon rasteriseren hier niet terugkomen: dat leunde in het bronproject op een LibreOffice-subproces. Wat die code feitelijk deed zodra er een plaatje was, is wat de naam nu zegt.Drie grenzen zitten met een test vast: het beleid raakt alleen dia's met écht verlies (anders ruimt één keuze een heel deck op), afbreken breekt ook werkelijk af, en de standaardkeuze vernietigt niets.
Dat laatste was de scherpste vondst, en hij kwam pas boven bij het schrijven van de documentatie: de uitleg beloofde 'wat u niet aanraakt wordt zo volledig mogelijk overgenomen', terwijl de voorselectie op
imageOnlystond zodra een dia een afbeelding had. Wie niets aanraakte en op Importeren drukte, verloor juist de tekst van díé dia's. Elke dia begint nu op best-effort en het voorstel-veld is geschrapt — een voorstel dat tegelijk de standaard is, is geen voorstel maar een besluit dat voor je genomen is. Wil advies terugkomen, dan komt het terug náást een veilige standaard, niet ervoor in de plaats.make checkgroen (6555 tests, dekking 86,5%), geen basislijn verhoogd, geen nieuwe afhankelijkheid.