# GeoVLogViewer **WPF-based desktop application (placeholder) for visualising decrypted GeoV flight logs** > **Status: PLANNING / SCAFFOLD ONLY** > *This project currently contains an empty WPF shell (`App.xaml`, `MainWindow.xaml`). > The README documents the intended roadmap so future contributors know exactly what > to build and where.* --- ## 0 · Vision GeoVLogViewer will become the *analyst-side GUI* that sits on top of **GeoVLogReader**: ``` Encrypted .h5 ───► GeoVLogReader (CLI/lib) ───► GeoVLogViewer (plots, maps, QC) ``` * **ReaderLib** (to be extracted from the CLI) handles decryption, parsing and row→model conversion. * **Viewer** focuses solely on **visualisation, QA/QC and light editing of flight‑manifest metadata**—never on cryptography or heavy analytics (those stay in Jupyter/Python). --- ## 1 · Solution relationships ``` GeoVLog.sln │ ├─ GeoVLog.Core (shared models, compression + crypto helpers) ├─ GeoVLogReader (console – already functional) ├─ GeoVLogViewer (this WPF project – empty shell today) └─ tests/GeoVLog.Tests ``` Planned new library: * **GeoVLog.ReaderLib** – thin wrapper around the reader CLI code so both the CLI and the Viewer can reference it. Until that exists, Viewer will compile but not load any data. --- ## 2 · Planned feature matrix | Phase | Feature | Notes / dependencies | |-------|---------|----------------------| | **α (MVP)** | • Open plain `.h5` (already decrypted)
• Data‑grid preview of `/measurements` rows
• Basic strip‑chart of a chosen sensor channel | Needs *ReaderLib* adapter returning `IObservable` | | **β** | • Integrate **ReaderLib** decryption path (accept encrypted file + private key)
• Flight manifest sidebar (read‑only YAML) | Private key path stored in user settings | | **β.2** | • Quick‑look map plotting GPS points
• Summary stats panel (duration, rows/sec, min/max by sensor) | GPS from `/measurements` where `sensor == "gps"` | | **γ** | • Manifest editor (YAML write‑back, versioned)
• Export selected slice as CSV
• Dark‑mode theme | Requires write access to HDF5 attributes | | **γ+** | • Plugin panel architecture (scientist extensions)
• Anomaly detection overlay (dropouts, saturation) | Use MEF or Scrutor DI | --- ## 3 · Tech stack & decisions | Area | Choice | Reason | |------|--------|--------| | **UI framework** | **WPF (.NET 8) + MVVM (CommunityToolkit.Mvvm)** | Native Windows look, mature chart libs. | | **Charting** | **LiveChartsCore.SkiaSharp** | GPU‑accelerated, open‑source. | | **DI container** | **Microsoft.Extensions.DependencyInjection** | Same pattern as GeoVLogSvc. | | **HDF5 access** | **HDF5.NET** | Consistent across projects. | | **Mapping** | **Bing Maps WPF** or **GMap.NET** | Lightweight map tiles. | --- ## 4 · Current scaffold (commit `0000000`) ```text src/GeoVLogViewer/ │ GeoVLogViewer.csproj ─ net8.0-windows │ App.xaml │ App.xaml.cs ─ Startup: registers DI, no window yet └─ Views/ └─ MainWindow.xaml ─ empty 800×450 window ``` > **TODO markers** inside `App.xaml.cs` and `MainWindow.xaml.cs` list the next > implementation steps. --- ## 5 · Roadmap & tasks | ID | Milestone | Owner | ETA | |----|-----------|-------|-----| | V‑1 | Extract `GeoVLog.ReaderLib` from CLI (decrypt + load) | — | — | | V‑2 | Hook ReaderLib into Viewer; data grid POC | — | — | | V‑3 | Add LiveCharts line plot | — | — | | V‑4 | File‑open dialogue + MRU | — | — | | V‑5 | Map quick‑look panel using GPS rows | — | — | | V‑6 | Manifest read/write pane | — | — | *(Fill Owner/ETA during sprint planning.)* --- ## 6 · Building & running (placeholder) ```powershell cd GeoVLog/src/GeoVLogViewer dotnet run # opens blank window for now ``` When V‑2 is done: ```powershell dotnet run -- --file "20250521_09_plain.h5" ``` --- ## 7 · Development guidelines * **MVVM everywhere** – ViewModels in `ViewModels/`, Views in `Views/`. * **No crypto in UI** – all decryption via ReaderLib. * **Async data flow** – prefer `IAsyncEnumerable` and `ObservableCollection`. * **Theme variables** – colours in `Styles/Colours.xaml` for easy dark‑mode. --- ## 8 · License GeoVLogViewer will inherit the repo MIT licence once functional. --- *Questions?* Ping **@lead-dev** on Slack or file an issue with label `viewer`.