feat(drop): importeer een gesleepte presentatie (#1175) #1180

Merged
brenno merged 1 commit from claude/drag-drop-presentation-import-1175 into main 2026-08-03 18:51:41 +00:00
Owner

Sluit de tweede helft van #1175 (de eerste was #1178): een presentatie op het venster slepen importeert hem nu, in plaats van hem stil te laten vallen.

Wat er verandert

Beide drop-handlers pakten tot nu alleen .md/.ocideck/afbeeldingen op; een gesleepte .pptx/.odp/.key verdween geruisloos. Nu herkennen ze een presentatie en sturen de al-gelezen bytes naar importDroppedPresentations:

  • Module Importeren aan → het hele stel gaat de import in. Eén bestand opent direct; meerdere gaan naar de bestaande wachtrijdialoog (volgorde + doelmap). Precies dezelfde route als Presentaties importeren….
  • Module uit → geen stille import, maar dezelfde uitweg als bij "Openen…": een melding die naar Instellingen wijst (hergebruik van #1178).
  • Gemengde sleep blijft werken: Markdown, afbeeldingen en presentaties nemen elk hun eigen route.

Bonus: de desktop-handler zit ook achter OS-"openen met" (OpenFileChannel), dus een .odp openen via bestandsassociatie importeert nu ook.

Aanpak

  • importDroppedPresentations (in de import-library, waar de tests hem afdekken) deelt de module-gating en routing; _onFilesDropped (desktop, app_shell.dart) en _onWebFilesDropped (web, shell_actions.dart) lezen elk hun bytes en geven het stel door.
  • Hergebruik van #1178: isImportablePresentationName, de gedeelde extensielijst en presentationOpenRescueSnackBar. Geen nieuwe l10n.
  • File-size ratchet: shell_actions.dart op precies 1000 gehouden (comments getightened); app_shell.dart-baseline 806 → 813, gedocumenteerd in check_conventions.dart. Bewust géén nieuw part-bestand: de drop-handlers zijn niet door een test gedekt, dus een nieuw bestand zou de per-file-dekkingsvloer tripten.

Waarborgen

  • Twee nieuwe tests in presentation_import_action_test.dart: gesleepte presentatie opent als deck (module aan), en wijst naar Instellingen zonder tab (module uit).
  • CHANGELOG, USER_GUIDE en SOURCE_MAP bijgewerkt; de "buiten scope"-noot uit #1178 ingetrokken.
  • Volledige make check groen in een geïsoleerde worktree (formatting, analyse, conventies, privacy-projectie, methodelengte, dode code, hardcoded tekst, taalcheck, volledige testsuite, dekkingsvloeren — 87,5%).

Hiermee is #1175 volledig afgehandeld — beide openstaande ingangen (Openen… en slepen) leiden nu naar de import.

🤖 Generated with Claude Code

Sluit de tweede helft van #1175 (de eerste was #1178): een presentatie op het venster **slepen** importeert hem nu, in plaats van hem stil te laten vallen. ## Wat er verandert Beide drop-handlers pakten tot nu alleen `.md`/`.ocideck`/afbeeldingen op; een gesleepte `.pptx`/`.odp`/`.key` verdween geruisloos. Nu herkennen ze een presentatie en sturen de al-gelezen bytes naar `importDroppedPresentations`: - **Module Importeren aan** → het hele stel gaat de import in. Eén bestand opent direct; meerdere gaan naar de bestaande wachtrijdialoog (volgorde + doelmap). Precies dezelfde route als **Presentaties importeren…**. - **Module uit** → geen stille import, maar dezelfde uitweg als bij "Openen…": een melding die naar **Instellingen** wijst (hergebruik van #1178). - **Gemengde sleep** blijft werken: Markdown, afbeeldingen en presentaties nemen elk hun eigen route. **Bonus:** de desktop-handler zit ook achter OS-"openen met" (`OpenFileChannel`), dus een `.odp` openen via bestandsassociatie importeert nu ook. ## Aanpak - `importDroppedPresentations` (in de import-library, waar de tests hem afdekken) deelt de module-gating en routing; `_onFilesDropped` (desktop, `app_shell.dart`) en `_onWebFilesDropped` (web, `shell_actions.dart`) lezen elk hun bytes en geven het stel door. - Hergebruik van #1178: `isImportablePresentationName`, de gedeelde extensielijst en `presentationOpenRescueSnackBar`. **Geen nieuwe l10n.** - File-size ratchet: `shell_actions.dart` op precies 1000 gehouden (comments getightened); `app_shell.dart`-baseline 806 → 813, gedocumenteerd in `check_conventions.dart`. Bewust géén nieuw part-bestand: de drop-handlers zijn niet door een test gedekt, dus een nieuw bestand zou de per-file-dekkingsvloer tripten. ## Waarborgen - Twee nieuwe tests in `presentation_import_action_test.dart`: gesleepte presentatie opent als deck (module aan), en wijst naar Instellingen zonder tab (module uit). - CHANGELOG, USER_GUIDE en SOURCE_MAP bijgewerkt; de "buiten scope"-noot uit #1178 ingetrokken. - Volledige `make check` groen in een geïsoleerde worktree (formatting, analyse, conventies, privacy-projectie, methodelengte, dode code, hardcoded tekst, taalcheck, volledige testsuite, dekkingsvloeren — 87,5%). Hiermee is #1175 volledig afgehandeld — beide openstaande ingangen (Openen… en slepen) leiden nu naar de import. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
feat(drop): importeer een gesleepte presentatie in plaats van hem te negeren (#1175)
All checks were successful
scans / scans (pull_request) Successful in 2m14s
static-gate / static-gate (pull_request) Successful in 4m58s
dc237b6a69
Een of meer .pptx/.odp/.key-bestanden op het venster slepen ging tot nu stil
verloren — alleen .md/.ocideck/afbeeldingen werden opgepakt. Beide drop-handlers
(_onFilesDropped desktop, _onWebFilesDropped web) herkennen nu een presentatie en
sturen de al-gelezen bytes naar importDroppedPresentations: staat de module
Importeren aan, dan gaat het stel de import in (één opent direct, meer naar de
wachtrij); staat hij uit, dan dezelfde uitweg als bij "Openen" — een melding die
naar Instellingen wijst, geen stille import.

Geen nieuwe l10n (hergebruikt de meldingen uit #1178). shell_actions.dart blijft
op het 1000-regelplafond; app_shell.dart-baseline 806 -> 813 gedocumenteerd.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
brenno merged commit 085bbacbb7 into main 2026-08-03 18:51:41 +00:00
brenno deleted branch claude/drag-drop-presentation-import-1175 2026-08-03 18:51:42 +00:00
Sign in to join this conversation.
No description provided.