refactor: Gott-Datei document_viewer.dart in 5 Dateien aufgeteilt
Sechster Durchgang derselben part/part-of-Technik wie bei den 5 vorigen Umbauten - reine Verschiebung, keine Logikänderung. document_viewer.dart schrumpft von 1773 auf 20 Zeilen (nur noch Bibliothekskopf), 34 Top-Level-Bloecke (31 Klassen/Enums + 3 lose Funktionen) auf 5 thematische Dateien unter lib/features/chat/document/ verteilt. Verifiziert per automatisiertem Blockvergleich gegen das Original und flutter analyze (weiterhin nur 1 bekannter Hinweis). voice_channel.dart und app_shell.dart bewusst nicht angefasst - haengen an der noch unentschiedenen Call-Fassade bzw. dem Bootstrap/Login-Pfad. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
+72
@@ -13,6 +13,78 @@ Schritt (und beim Abbruch mitten im Schritt den Zwischenstand). Format:
|
||||
|
||||
---
|
||||
|
||||
## 2026-07-03 – M2: Gott-Datei `document_viewer.dart` aufgeteilt (5 Dateien)
|
||||
|
||||
**Erledigt:** Vor dem Weiterarbeiten wie immer Arbeitszyklus durchlaufen
|
||||
(`PROGRESS.md`/`ROADMAP.md` gelesen, `flutter doctor` geprüft – GUI-Lücken
|
||||
auf dem Pi unverändert). Die Ist-Analyse aus M2 hatte ursprünglich 8 große
|
||||
Dateien gefunden, aber nur 5 wurden als „Gott-Dateien" tatsächlich
|
||||
aufgeteilt (`settings_modal.dart`, `message_group.dart`, `rooms_panel.dart`,
|
||||
`space_admin_dialog.dart`, `chat_view.dart`); `document_viewer.dart` (1773
|
||||
Zeilen, 31 Klassen/Enums + 3 lose Top-Level-Helfer) war übrig, ist aber
|
||||
inhaltlich genau derselbe Fall (viele unabhängige Widget-Klassen in einer
|
||||
Datei) und – anders als `voice_channel.dart`/`app_shell.dart` – reines
|
||||
Medien-/PDF-Anzeige-Feature ohne Berührung mit Login/Session/Verschlüsselung
|
||||
oder der noch unentschiedenen Call-Fassade. Deshalb mit derselben
|
||||
bewährten Technik aufgeteilt:
|
||||
|
||||
- `part`/`part of` wie bei den 5 vorigen Umbauten, per Skript extrahiert
|
||||
(Klammer-Zählung für Blockgrenzen inkl. der 3 losen Top-Level-Funktionen
|
||||
`_saveBytes`, `_extractPsdThumbnail`, `_detectType` – nicht nur
|
||||
`class`/`enum`, das wurde diesmal zusätzlich automatisiert gesucht, um
|
||||
keine lose Funktion zu übersehen).
|
||||
- 5 neue Dateien unter `lib/features/chat/document/`:
|
||||
`document_viewer_core.dart` (`DocumentViewer`-Dispatcher, `_DocHeader`,
|
||||
`_ExtBadge`, `_DocContent`, `_DocType`-Enum + `_detectType`, `_ErrorView`,
|
||||
`_UnsupportedViewer`, `_FileFallback`), `document_viewer_pdf.dart`
|
||||
(größter Teil: `_RenderCache`, `PdfInlinePreview`+State für die
|
||||
Chat-Inline-Vorschau, `_NavArrow`, `_saveBytes`, `_PdfFullViewer`+State,
|
||||
`_PdfFullscreenViewer`+State, `_FsBtn`, `_ThumbnailStrip`+State),
|
||||
`document_viewer_text.dart` (SVG/Markdown/Text/Office-Text-Extraktion),
|
||||
`document_viewer_archive.dart` (ZIP/TAR-Archiv-Browser, PSD-Thumbnail-
|
||||
Extraktion inkl. `_extractPsdThumbnail`, Sketch/XD-ZIP-Preview),
|
||||
`document_viewer_misc.dart` (`_ProprietaryViewer`-Infokarte für nicht
|
||||
darstellbare Formate). `document_viewer.dart` selbst: nur noch
|
||||
Bibliothekskopf (Imports + 5 `part`-Direktiven, 20 Zeilen).
|
||||
- Verifikation wie bei den 5 vorigen Umbauten: automatisierte
|
||||
Klammer-Zählung fand alle 34 Top-Level-Blöcke (31 Klassen/Enums + 3 lose
|
||||
Funktionen), alle wortwörtlich in den neuen Dateien wiedergefunden,
|
||||
`class`/`enum`-Anzahl (31) vorher/nachher identisch, `flutter analyze`
|
||||
unverändert bei 1 bekanntem Hinweis (`chat_provider.dart:42`). Einzige
|
||||
externe Importstelle (`message_group.dart`) bleibt unverändert gültig, da
|
||||
`document_viewer.dart` weiterhin der Bibliothekseinstieg ist.
|
||||
- **Bewusst NICHT angefasst:** `voice_channel.dart` (1123 Zeilen) und
|
||||
`app_shell.dart` (1073 Zeilen) – auch große Dateien mit vielen Klassen,
|
||||
aber `voice_channel.dart` gehört zur noch unentschiedenen Call-Fassade
|
||||
(siehe Fragen an Bernd unten) und `app_shell.dart` enthält den
|
||||
Bootstrap-Trigger (`_triggerBootstrap`) für Cross-Signing/Key-Backup –
|
||||
laut CLAUDE.md heiliger Bereich. Eine reine Datei-Aufteilung wäre zwar
|
||||
vermutlich genauso risikoarm wie bei den anderen 6, aber ohne GUI-Test auf
|
||||
dem Pi wollte ich das Risiko nicht zusätzlich zum ohnehin schon
|
||||
aufgelaufenen UNGETESTET-Stapel erhöhen, bevor nicht wenigstens einmal ein
|
||||
PC-Durchlauf stattgefunden hat.
|
||||
|
||||
**Offen/Nächster Schritt:** UNGETESTET (Pi) – siehe ROADMAP-Eintrag oben,
|
||||
gehört zum selben ausstehenden Windows-Praxistest wie die 5 vorigen
|
||||
Datei-Aufteilungen (PDF/Text/Archiv/Bild im Chat öffnen, Vollbild-PDF-Viewer
|
||||
inkl. Thumbnail-Leiste und Speichern-Button prüfen). Danach bleibt exakt
|
||||
dieselbe Blockade wie im Eintrag direkt darunter: kein M1/M2-Punkt mehr
|
||||
ohne Bernds Antwort (Call-Pilot, SQLCipher-Priorität) oder PC/GUI-Zugriff
|
||||
sicher bearbeitbar.
|
||||
|
||||
**Stolperfallen:** Anders als bei den 5 vorigen Umbauten gab es diesmal 3
|
||||
lose Top-Level-Funktionen zusätzlich zu den Klassen/Enums
|
||||
(`_saveBytes`/`_extractPsdThumbnail`/`_detectType`) – eine reine
|
||||
`grep -E '^(class|enum) '`-Suche hätte sie übersehen und stillschweigend aus
|
||||
der neuen Datei-Struktur fallen lassen. Deshalb diesmal zusätzlich per
|
||||
Diff aller durch Klammer-Zählung abgedeckten vs. nicht abgedeckten
|
||||
Zeilenbereiche geprüft, dass keine „Lücke" zwischen zwei Klassenblöcken
|
||||
mehr als Kommentar/Leerzeile ist. Für künftige Datei-Aufteilungen (z. B.
|
||||
`voice_channel.dart`/`app_shell.dart`, falls Bernd grünes Licht gibt): immer
|
||||
zuerst auf lose Top-Level-Funktionen prüfen, nicht nur auf Klassen/Enums.
|
||||
|
||||
---
|
||||
|
||||
## 2026-07-03 – Session-Check: weiterhin kein sicher bearbeitbarer Punkt auf dem Pi
|
||||
|
||||
**Erledigt:** Vor dem Weiterarbeiten Arbeitszyklus komplett durchlaufen: `PROGRESS.md`
|
||||
|
||||
Reference in New Issue
Block a user