# 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`.