feat(community): community fixes #27
Merged
Merged
Conversation
feat(layouts): tabbed-layout data model + repo + migration (phase 19.1) - GridLayout/LayoutId entities, ILayoutRepository + SqliteLayoutRepository - migration 012: Layouts + LayoutTiles, seed Default layout from IncludedInGrid - GetTiles joins Cameras so deleted cameras leave no ghost tiles - repo tests green @
feat(layouts): tab bar + grid reads active layout (phase 19.1) - GridPageViewModel: Layouts/ActiveLayout, switch/add/rename/delete tabs, grid size per layout - grid tiles come from the active layout; tile reorder persists to it - active layout persisted in UserSettings; library "include in grid" targets the active layout - tab strip UI with active-tab highlight; tests green @
feat(layouts): tab drag-reorder + library checkbox per active layout (phase 19.1) - drag tabs to reorder; persists SortOrder via ILayoutRepository.ReorderAsync - library "in grid" checkbox now reflects active-layout membership, not the global flag - GetActiveLayoutCameraIdsAsync seeds the checkbox without triggering a persist @
feat(backup): config export/import service (phase 19.2) - IConfigBackupService + SqliteConfigBackupService: export to JSON, preview, import - cameras upsert by GUID, layouts appended with tiles; schemaVersion gated - no secrets exported (entity holds none); groups/settings deferred - round-trip + preview + schema-reject tests green @
feat(notifications): coordinator policy engine + settings (phase 19.3) - INotificationService + NotificationCoordinator: per-kind toggles, per-camera cooldown, quiet hours over the event stream - ShouldNotify/InQuietHours pure + unit-tested (13 tests) - settings + DI wiring; eager Start() per head; Null sink until native delivery lands @
feat(notifications): settings UI + Android sink (phase 19.3) - Settings → Advanced: enable, motion/detection toggles, cooldown, quiet hours - AndroidNotificationService (NotificationManager channel); POST_NOTIFICATIONS requested at startup - desktop + iOS sinks still pending; Android delivers, others no-op via Null sink @
- add a camera-picker dialog per layout, opened from the tab strip; toggling adds/removes tiles live against the layout - start tile/tab drag only past a threshold so a plain click switches tabs and opens cameras again - ignore tile taps that originate on the snapshot/listen buttons
- SnapshotAsync returns an empty array while the stream warms up instead of throwing - stops the InvalidOperationException flood (and the perceived hang) when grabbing an HD snapshot off a freshly opened mainstream - document the contract on IVideoSession; FfmpegPlaybackSession matches
- SetVersionFromGit runs `git describe --tags` and feeds InformationalVersion + numeric AssemblyVersion - fallback Version 0.1.9 for tagless/tarball builds so it's never 1.0.0.0 - suppress the SDK "+commit" suffix so About shows a clean tag
- desktop notification sink: borderless Telegram-style corner toast, stacks up to 4, auto-dismiss + click-to-close (phase 19.3) - "Send test notification" button to preview it from settings - "Report a problem" + "Open logs" buttons opening the repo issues page with version/OS prefilled (phase 19.5) - About now reads the git-tag InformationalVersion
- OpenAsync returns null instead of throwing NotSupportedException when the camera advertises no backchannel track - StartAsync reports Unsupported; the page shows a friendly "no two-way audio" hint and hides the mic button - stops the first-chance exception flood on pressing the mic
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
19.1 Tabbed layouts
LayoutTilesmany-to-many).19.2 Config export / import
19.3 Notifications
Fixes & polish
Deferred (by decision)
branding.json.Related
Type
Checklist
TreatWarningsAsErrors=true).dotnet test); new Core logic has unit tests.AppreferencesCoreonly (Infrastructure / Video / Devices wired via DI in a head).Platforms tested
Screenshots / notes