Skip to content

feat(live-graph): show 'Logging to Device' status while SD-card logging#507

Open
tylerkron wants to merge 2 commits into
mainfrom
claude/sharp-dhawan-464bba
Open

feat(live-graph): show 'Logging to Device' status while SD-card logging#507
tylerkron wants to merge 2 commits into
mainfrom
claude/sharp-dhawan-464bba

Conversation

@tylerkron
Copy link
Copy Markdown
Contributor

Summary

The Live Graph showed an empty plot and a "LOGGING OFF" label while the device was actively recording to its SD card, because samples in that mode are written on-device and never stream to the desktop. This PR makes the pane reflect what's actually happening.

  • Live Graph in SD-card mode now hides the (necessarily empty) plot and shows a centered status panel: recording icon, elapsed clock, format chip, and a one-line note that recorded data appears in Logged Data after retrieval.
  • Header chips swap the RATE (Hz) chip for an ELAPSED (HH:mm:ss) chip when SD logging is active.
  • IsLogging now reflects device-reported state, not just the local toggle flag — so a desktop reconnect to a device that's still SD-logging shows "LOGGING ON" instead of misleadingly showing "LOGGING OFF". The view model subscribes to each device's PropertyChanged for IsLoggingToSdCard and the IsLogging getter combines the toggle flag with that signal.

Implementation notes

  • ConnectedDevices.CollectionChanged handler diffs against a tracked HashSet<IStreamingDevice> instead of using e.OldItems / e.NewItems directly. This is required because ObservableCollection<T>.Clear() raises a Reset event with OldItems == nullUpdateUi calls Clear() on every device-list refresh, so a naive subscribe/unsubscribe handler would leak handlers.
  • SdLoggingElapsed formats off TimeSpan.TotalHours, not the Hours component, so multi-day sessions don't wrap at 24h.
  • Streaming-mode state isn't tracked via PropertyChanged because IsStreaming isn't on the IStreamingDevice interface; the streaming path already updates state synchronously through the toggle setter, so this isn't a regression.

Known gap (out of scope)

When the desktop reconnects to a USB device that's already SD-logging, nothing currently queries the device's actual state — IsLoggingToSdCard stays false until something calls StartSdCardLogging() locally. The infrastructure to react is now in place; closing this loop likely needs a Core/firmware-level state query and is a separate task.

Test plan

  • Start SD-card logging on a USB device; Live Graph header shows LOGGING ON + ELAPSED chip; plot is replaced with the "Logging to Device" status overlay; elapsed clock advances every second.
  • Stop SD-card logging; overlay disappears, plot returns, header swaps back to RATE chip.
  • Start streaming-to-app logging; overlay does not appear; live plot draws as before.
  • Verify the new unit tests pass on Windows CI: Daqifi.Desktop.Test/ViewModels/DaqifiViewModelLoggingStateTests.cs.
  • Run a long (>1h) SD-logging session and confirm the elapsed clock displays correctly past 24h if reachable in test.

🤖 Generated with Claude Code

The Live Graph showed an empty plot and "LOGGING OFF" while the device was
actively recording to its SD card, because samples are written on-device in
that mode and never reach the desktop. Replaces the empty plot with a status
panel (recording icon, elapsed clock, format) and makes the logging toggle
reflect device-reported state instead of only the local toggle flag — so a
desktop reconnect to a device that's still SD-logging now displays the real
state.

- IsLogging getter combines the toggle flag with each connected device's
  IsLoggingToSdCard, subscribing via PropertyChanged so the UI follows
  device state without polling.
- Subscription tracking uses a HashSet diff against ConnectedDevices so
  Clear/Reset events don't leak handlers when the device list refreshes.
- Adds IsSdCardLoggingActive + a 1Hz DispatcherTimer-driven SdLoggingElapsed,
  formatted off TotalHours so multi-day sessions don't wrap at 24h.
- LiveGraphPane hides the OxyPlot and "no channels streaming" empty state
  when SD-logging is active, swaps the RATE chip for ELAPSED, and shows a
  centered status overlay matching the existing in-pane card style.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
@tylerkron tylerkron requested a review from a team as a code owner April 28, 2026 04:42
@qodo-code-review
Copy link
Copy Markdown
Contributor

Review Summary by Qodo

Show "Logging to Device" status while SD-card logging active

✨ Enhancement

Grey Divider

Walkthroughs

Description
• Live Graph now displays "Logging to Device" status panel when SD-card logging is active, replacing
  the empty plot
• IsLogging property reflects device-reported SD-card logging state via PropertyChanged
  subscriptions, not just local toggle
• Header chips swap RATE (Hz) for ELAPSED (HH:mm:ss) when SD-card logging is active, with elapsed
  time formatted for multi-day sessions
• Added comprehensive unit tests for logging state tracking, device subscription lifecycle, and
  property change notifications
Diagram
flowchart LR
  A["Device SD-Card<br/>Logging State"] -->|PropertyChanged| B["OnDeviceLoggingStateChanged"]
  B -->|Updates| C["IsSdCardLoggingActive"]
  C -->|Drives| D["Live Graph<br/>Status Panel"]
  C -->|Drives| E["ELAPSED Chip<br/>in Header"]
  F["DispatcherTimer<br/>1Hz Tick"] -->|Updates| G["SdLoggingElapsed<br/>HH:mm:ss"]
  G -->|Binds to| D
  H["ConnectedDevices<br/>CollectionChanged"] -->|Diff via HashSet| I["Subscribe/<br/>Unsubscribe<br/>PropertyChanged"]
  I -->|Prevents| J["Handler Leaks<br/>on Clear/Reset"]
Loading

Grey Divider

File Changes

1. Daqifi.Desktop.Test/ViewModels/DaqifiViewModelLoggingStateTests.cs 🧪 Tests +131/-0

New unit tests for SD-card logging state tracking

• New test class with 6 unit tests covering logging state tracking and device subscription lifecycle
• Tests verify IsLogging reflects device-reported SD-card logging state
• Tests confirm IsSdCardLoggingActive follows device PropertyChanged events and resets elapsed
 time
• Tests validate handler cleanup on device removal and Clear() operations to prevent leaks
• Tests ensure unrelated property changes don't trigger logging state notifications

Daqifi.Desktop.Test/ViewModels/DaqifiViewModelLoggingStateTests.cs


2. Daqifi.Desktop/ViewModels/DaqifiViewModel.cs ✨ Enhancement +117/-1

Implement device-state-aware logging and elapsed timer

• Added IsSdCardLoggingActive property that returns true when any connected device reports SD-card
 logging
• Added SdLoggingElapsed property (HH:mm:ss format) driven by 1Hz DispatcherTimer that
 starts/stops with SD logging
• Modified IsLogging getter to combine local toggle flag with AnyDeviceActivelyLogging() check
• Added OnConnectedDevicesCollectionChanged handler using HashSet diff to safely
 subscribe/unsubscribe from device PropertyChanged events, preventing handler leaks on Clear()
 and Reset events
• Added OnDeviceLoggingStateChanged and RaiseLoggingStateChanged methods to propagate device
 state changes to UI
• Added UpdateSdLoggingTimer and OnSdLoggingTimerTick methods to manage elapsed time calculation
 using TotalHours for multi-day session support
• Added _sdLoggingElapsedTimer, _sdLoggingStartedAt, and _sdLoggingElapsed private fields
• Added using System.Windows.Threading for DispatcherTimer

Daqifi.Desktop/ViewModels/DaqifiViewModel.cs


3. Daqifi.Desktop/View/Prototype/LiveGraphPane.xaml ✨ Enhancement +111/-17

Add SD-card logging status panel and header chip swapping

• Wrapped RATE chip in StackPanel with Visibility bound to inverted IsSdCardLoggingActive to
 hide in SD-logging mode
• Added new ELAPSED chip that displays SdLoggingElapsed and shows only when
 IsSdCardLoggingActive is true
• Added Visibility binding to main PlotView to hide the plot when SD-card logging is active
• Changed empty-state overlay trigger from single DataTrigger to MultiDataTrigger requiring both
 no active channels AND not SD-card logging
• Added new SD-card logging status overlay panel with recording icon, "Logging to Device" title,
 elapsed time display, format chip, and informational text about data retrieval

Daqifi.Desktop/View/Prototype/LiveGraphPane.xaml


Grey Divider

Qodo Logo

@qodo-code-review
Copy link
Copy Markdown
Contributor

qodo-code-review Bot commented Apr 28, 2026

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 📎 Requirement gaps (0)

Grey Divider


Action required

1. SdLoggingElapsed manual backing property📘 Rule violation ✧ Quality
Description
SdLoggingElapsed is implemented with a private backing field and a trivial setter that only checks
equality and raises OnPropertyChanged(). This violates the requirement to avoid explicit
backing-field properties for trivial logic and to prefer [ObservableProperty] for simple
observable ViewModel properties in files already using CommunityToolkit MVVM generators.
Code

Daqifi.Desktop/ViewModels/DaqifiViewModel.cs[R286-295]

+    public string SdLoggingElapsed
+    {
+        get => _sdLoggingElapsed;
+        private set
+        {
+            if (_sdLoggingElapsed == value) { return; }
+            _sdLoggingElapsed = value;
+            OnPropertyChanged();
+        }
+    }
Evidence
The checklist forbids manual getter/setter + backing field properties when the logic is trivial
(read/write + notification) and requires using [ObservableProperty] for simple observable
ViewModel properties. The added SdLoggingElapsed property matches the failure pattern: a backing
field with only an equality check and OnPropertyChanged().

Rule 244796: Use explicit properties with backing fields only for nontrivial logic
Rule 244799: Use [ObservableProperty] for simple observable ViewModel properties
Daqifi.Desktop/ViewModels/DaqifiViewModel.cs[286-295]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`SdLoggingElapsed` is a simple observable property implemented manually with a backing field and `OnPropertyChanged()`, which violates the compliance rules requiring `[ObservableProperty]` (or equivalent Toolkit pattern) for simple ViewModel properties and discouraging trivial manual backing-field properties.

## Issue Context
`DaqifiViewModel` already uses CommunityToolkit.Mvvm source generators (`[ObservableProperty]`) extensively, so this property should follow the same pattern.

## Fix Focus Areas
- Daqifi.Desktop/ViewModels/DaqifiViewModel.cs[286-295]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Inline if braces in setter📘 Rule violation ✧ Quality
Description
The setter uses an inline braced if statement (if (...) { return; }), which violates the Allman
brace style requirement. This reduces consistency with the project’s mandated brace formatting.
Code

Daqifi.Desktop/ViewModels/DaqifiViewModel.cs[291]

+            if (_sdLoggingElapsed == value) { return; }
Evidence
The Allman-style rule requires opening braces on their own line for control blocks; the added if
uses braces on the same line as the condition. The violating inline block appears in the new
SdLoggingElapsed setter.

Rule 244808: Use Allman style for opening braces
Daqifi.Desktop/ViewModels/DaqifiViewModel.cs[291-291]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
An inline braced control block (`if (...) { return; }`) violates the required Allman brace style.

## Issue Context
This occurs in the newly added `SdLoggingElapsed` setter.

## Fix Focus Areas
- Daqifi.Desktop/ViewModels/DaqifiViewModel.cs[291-291]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


3. Logging state guard bypass🐞 Bug ≡ Correctness
Description
IsLogging can now be true purely from device SD-logging state while
LoggingManager.Instance.Active remains false, so guards that rely on Active (e.g.,
sampling-frequency changes) won’t trigger even though the UI reports logging on. This allows
SelectedStreamingFrequency changes while SD logging is active and IsLogging==true, potentially
sending configuration changes during an active logging session.
Code

Daqifi.Desktop/ViewModels/DaqifiViewModel.cs[R203-208]

    public bool IsLogging
    {
-        get => _isLogging;
+        get => _isLogging || AnyDeviceActivelyLogging();
        set
        {
            var preSessionWarningShown = false;
Evidence
The PR changes IsLogging to return _isLogging || AnyDeviceActivelyLogging(), and the new unit
test demonstrates IsLogging becomes true without ever setting the toggle/setter. However, the
sampling-frequency setter blocks changes only when LoggingManager.Instance.Active is true, so in
the tested scenario (device reports SD logging but toggle never flipped), the frequency-change guard
is bypassed.

Daqifi.Desktop/ViewModels/DaqifiViewModel.cs[197-272]
Daqifi.Desktop.Test/ViewModels/DaqifiViewModelLoggingStateTests.cs[12-23]
Daqifi.Desktop/ViewModels/DaqifiViewModel.cs[331-348]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
`SelectedStreamingFrequency` currently blocks changes only when `LoggingManager.Instance.Active` is true. After this PR, `IsLogging` may be true due to device-reported SD logging even when `Active` is false, so the block doesn’t run.

### Issue Context
This occurs in the scenario explicitly introduced/tested by the PR: adding a connected device that reports `IsLoggingToSdCard=true` without flipping the logging toggle.

### Fix Focus Areas
- Daqifi.Desktop/ViewModels/DaqifiViewModel.cs[331-348]
- Daqifi.Desktop/ViewModels/DaqifiViewModel.cs[197-299]

### Expected fix
Update the sampling-frequency guard to also consider SD logging / `IsLogging` (e.g., `if (IsLogging)` or `if (LoggingManager.Instance.Active || IsSdCardLoggingActive)`), so frequency changes are consistently blocked whenever the UI indicates logging is active.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Advisory comments

4. Misleading IsLogging comment🐞 Bug ⚙ Maintainability
Description
The IsLogging XML comment says it reflects devices that are "actively streaming/SD-logging", but
the implementation only checks IsLoggingToSdCard and does not include any streaming signal. This
mismatch can mislead future changes and reviewers about what conditions actually make IsLogging
true.
Code

Daqifi.Desktop/ViewModels/DaqifiViewModel.cs[R197-206]

+    /// <summary>
+    /// True if the user has toggled logging on, OR if any connected device reports
+    /// it is actively streaming/SD-logging. Reading from device state ensures the
+    /// toggle reflects reality even when logging was started in a prior session
+    /// and the device kept logging across a reconnect.
+    /// </summary>
    public bool IsLogging
    {
-        get => _isLogging;
+        get => _isLogging || AnyDeviceActivelyLogging();
        set
Evidence
The comment describes streaming and SD logging, but AnyDeviceActivelyLogging() and
IsSdCardLoggingActive both only evaluate IsLoggingToSdCard.

Daqifi.Desktop/ViewModels/DaqifiViewModel.cs[197-205]
Daqifi.Desktop/ViewModels/DaqifiViewModel.cs[275-299]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
The `IsLogging` comment claims streaming+SD logging, but code only checks SD logging.

### Issue Context
This is documentation/maintainability drift that can cause incorrect assumptions.

### Fix Focus Areas
- Daqifi.Desktop/ViewModels/DaqifiViewModel.cs[197-205]
- Daqifi.Desktop/ViewModels/DaqifiViewModel.cs[297-299]

### Expected fix
Either (1) update the comment to describe SD-only device state, or (2) expand `AnyDeviceActivelyLogging()` to include a real streaming signal (if available) and keep the comment.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Qodo Logo

Comment thread Daqifi.Desktop/ViewModels/DaqifiViewModel.cs Outdated
Comment thread Daqifi.Desktop/ViewModels/DaqifiViewModel.cs Outdated
Comment thread Daqifi.Desktop/ViewModels/DaqifiViewModel.cs
- Convert SdLoggingElapsed to [ObservableProperty] for consistency with
  the rest of the view model (CommunityToolkit MVVM source generators).
  Removes the manual property + inline-brace style violation.
- Block SelectedStreamingFrequency changes whenever IsLogging is true,
  not only when LoggingManager.Active is — so the guard also fires when
  a device is reporting SD logging that the local toggle never started.
- Clarify the IsLogging XML comment: streaming state isn't tracked via
  PropertyChanged because IsStreaming isn't on the interface.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
@tylerkron
Copy link
Copy Markdown
Contributor Author

@qodo-code-review re: advisory #4 (misleading IsLogging comment) — fixed in b060467. The XML doc on IsLogging previously said "actively streaming/SD-logging" but the implementation only checks IsLoggingToSdCard. Updated the comment to accurately describe SD-only device-state tracking and to note that streaming is intentionally not tracked here because IsStreaming is not on the IStreamingDevice interface — the streaming path stays in sync via the toggle setter.

@github-actions
Copy link
Copy Markdown

📊 Code Coverage Report

Summary

Summary
Generated on: 4/28/2026 - 5:00:07 AM
Coverage date: 4/28/2026 - 4:59:33 AM - 4/28/2026 - 5:00:03 AM
Parser: MultiReport (4x Cobertura)
Assemblies: 3
Classes: 119
Files: 148
Line coverage: 18.1% (1553 of 8536)
Covered lines: 1553
Uncovered lines: 6983
Coverable lines: 8536
Total lines: 26424
Branch coverage: 19.3% (540 of 2788)
Covered branches: 540
Total branches: 2788
Method coverage: Feature is only available for sponsors

Coverage

DAQiFi - 18%
Name Line Branch
DAQiFi 18% 19.4%
Daqifi.Desktop.App 5.4% 0%
Daqifi.Desktop.Channel.AbstractChannel 40.9% 27.7%
Daqifi.Desktop.Channel.AnalogChannel 58.7% 25%
Daqifi.Desktop.Channel.Channel 11.5% 0%
Daqifi.Desktop.Channel.ChannelColorManager 100% 100%
Daqifi.Desktop.Channel.DataSample 91.6%
Daqifi.Desktop.Channel.DigitalChannel 65.2% 25%
Daqifi.Desktop.Commands.CompositeCommand 0% 0%
Daqifi.Desktop.Commands.HostCommands 0%
Daqifi.Desktop.Commands.WeakEventHandlerManager 0% 0%
Daqifi.Desktop.Configuration.FirewallConfiguration 90.6% 66.6%
Daqifi.Desktop.Configuration.WindowsFirewallWrapper 64% 68.4%
Daqifi.Desktop.ConnectionManager 42.4% 39.2%
Daqifi.Desktop.Converters.BoolToActiveStatusConverter 0% 0%
Daqifi.Desktop.Converters.BoolToConnectionStatusConverter 0% 0%
Daqifi.Desktop.Converters.BoolToStatusColorConverter 0% 0%
Daqifi.Desktop.Converters.BrushColorMatchConverter 0% 0%
Daqifi.Desktop.Converters.ConnectionTypeToColorConverter 0% 0%
Daqifi.Desktop.Converters.ConnectionTypeToUsbConverter 0% 0%
Daqifi.Desktop.Converters.InvertedBoolToVisibilityConverter 0% 0%
Daqifi.Desktop.Converters.ListToStringConverter 0% 0%
Daqifi.Desktop.Converters.NotNullToVisibilityConverter 0% 0%
Daqifi.Desktop.Converters.OxyColorToBrushConverter 0% 0%
Daqifi.Desktop.Device.AbstractStreamingDevice 42.9% 38.6%
Daqifi.Desktop.Device.DeviceMessage 0%
Daqifi.Desktop.Device.Firmware.BootloaderSessionStreamingDeviceAdapter 0% 0%
Daqifi.Desktop.Device.Firmware.WifiPromptDelayProcessRunner 0% 0%
Daqifi.Desktop.Device.NativeMethods 100%
Daqifi.Desktop.Device.SerialDevice.SerialStreamingDevice 27.6% 30.8%
Daqifi.Desktop.Device.WiFiDevice.DaqifiStreamingDevice 40.9% 39.4%
Daqifi.Desktop.DialogService.DialogService 0% 0%
Daqifi.Desktop.DialogService.ServiceLocator 0% 0%
Daqifi.Desktop.DiskSpace.DiskSpaceCheckResult 100%
Daqifi.Desktop.DiskSpace.DiskSpaceEventArgs 100%
Daqifi.Desktop.DiskSpace.DiskSpaceMonitor 88.2% 86.6%
Daqifi.Desktop.DuplicateDeviceCheckResult 100%
Daqifi.Desktop.Exporter.OptimizedLoggingSessionExporter 66.5% 62.7%
Daqifi.Desktop.Exporter.SampleData 100%
Daqifi.Desktop.Helpers.BooleanConverter`1 0% 0%
Daqifi.Desktop.Helpers.BooleanToInverseBoolConverter 0% 0%
Daqifi.Desktop.Helpers.BooleanToVisibilityConverter 0%
Daqifi.Desktop.Helpers.EnumDescriptionConverter 100% 100%
Daqifi.Desktop.Helpers.IntToVisibilityConverter 0% 0%
Daqifi.Desktop.Helpers.MinMaxDownsampler 98.6% 97.9%
Daqifi.Desktop.Helpers.MyMultiValueConverter 0%
Daqifi.Desktop.Helpers.NaturalSortHelper 100% 100%
Daqifi.Desktop.Helpers.OxyPlotDarkTheme 0%
Daqifi.Desktop.Helpers.VersionHelper 98.2% 66.2%
Daqifi.Desktop.Logger.DatabaseLogger 0% 0%
Daqifi.Desktop.Logger.DatabaseMigrator 0% 0%
Daqifi.Desktop.Logger.DeviceLegendGroup 100% 100%
Daqifi.Desktop.Logger.LoggedSeriesLegendItem 0% 0%
Daqifi.Desktop.Logger.LoggingContext 100%
Daqifi.Desktop.Logger.LoggingContextDesignTimeFactory 0%
Daqifi.Desktop.Logger.LoggingManager 0% 0%
Daqifi.Desktop.Logger.LoggingSession 16% 5%
Daqifi.Desktop.Logger.PlotLogger 0% 0%
Daqifi.Desktop.Logger.SessionDeviceMetadata 80%
Daqifi.Desktop.Logger.SummaryLogger 0% 0%
Daqifi.Desktop.Logger.TimestampGapDetector 95% 83.3%
Daqifi.Desktop.Loggers.ImportOptions 0%
Daqifi.Desktop.Loggers.ImportProgress 0% 0%
Daqifi.Desktop.Loggers.SdCardSessionImporter 0% 0%
Daqifi.Desktop.MainWindow 0% 0%
Daqifi.Desktop.Migrations.AddSamplesSessionTimeIndex 0%
Daqifi.Desktop.Migrations.AddSessionDeviceMetadata 0%
Daqifi.Desktop.Migrations.AddSessionSampleCount 0%
Daqifi.Desktop.Migrations.InitialSQLiteMigration 0%
Daqifi.Desktop.Migrations.LoggingContextModelSnapshot 0%
Daqifi.Desktop.Models.AddProfileModel 0%
Daqifi.Desktop.Models.DaqifiSettings 80.5% 83.3%
Daqifi.Desktop.Models.DebugDataCollection 6.6% 0%
Daqifi.Desktop.Models.DebugDataModel 0% 0%
Daqifi.Desktop.Models.Notifications 0%
Daqifi.Desktop.Models.SdCardFile 0% 0%
Daqifi.Desktop.Services.WindowsPrincipalAdminChecker 0%
Daqifi.Desktop.Services.WpfMessageBoxService 0%
Daqifi.Desktop.UpdateVersion.VersionNotification 0% 0%
Daqifi.Desktop.View.ConnectionDialog 0% 0%
Daqifi.Desktop.View.DebugWindow 0% 0%
Daqifi.Desktop.View.DeviceLogsView 0% 0%
Daqifi.Desktop.View.DuplicateDeviceDialog 0% 0%
Daqifi.Desktop.View.ErrorDialog 0% 0%
Daqifi.Desktop.View.ExportDialog 0% 0%
Daqifi.Desktop.View.FirmwareDialog 0% 0%
Daqifi.Desktop.View.Flyouts.FirmwareFlyout 0% 0%
Daqifi.Desktop.View.Flyouts.LiveGraphFlyout 0% 0%
Daqifi.Desktop.View.Flyouts.NotificationsFlyout 0% 0%
Daqifi.Desktop.View.Flyouts.SummaryFlyout 0% 0%
Daqifi.Desktop.View.MigrationStatusWindow 0% 0%
Daqifi.Desktop.View.MinimapInteractionController 0% 0%
Daqifi.Desktop.View.ProfilesPane 0% 0%
Daqifi.Desktop.View.Prototype.ChannelsPanePrototype 0% 0%
Daqifi.Desktop.View.Prototype.DevicesPanePrototype 0% 0%
Daqifi.Desktop.View.Prototype.LiveGraphPane 0% 0%
Daqifi.Desktop.View.Prototype.LoggedDataPanePrototype 0% 0%
Daqifi.Desktop.View.SuccessDialog 0% 0%
Daqifi.Desktop.ViewModels.ChannelsPaneViewModel 0% 0%
Daqifi.Desktop.ViewModels.ChannelTileViewModel 0% 0%
Daqifi.Desktop.ViewModels.ConnectionDialogViewModel 37.3% 39.1%
Daqifi.Desktop.ViewModels.DaqifiViewModel 20.8% 15.5%
Daqifi.Desktop.ViewModels.DeviceLogsViewModel 0% 0%
Daqifi.Desktop.ViewModels.DevicesPaneViewModel 0% 0%
Daqifi.Desktop.ViewModels.DeviceTileViewModel 0% 0%
Daqifi.Desktop.ViewModels.DuplicateDeviceDialogViewModel 0%
Daqifi.Desktop.ViewModels.ErrorDialogViewModel 0%
Daqifi.Desktop.ViewModels.ExportDialogViewModel 0% 0%
Daqifi.Desktop.ViewModels.FirmwareDialogViewModel 0% 0%
Daqifi.Desktop.ViewModels.NewProfileChannelItem 0%
Daqifi.Desktop.ViewModels.NewProfileDeviceItem 0% 0%
Daqifi.Desktop.ViewModels.ProfilesPaneViewModel 0% 0%
Daqifi.Desktop.ViewModels.SettingsViewModel 0% 0%
Daqifi.Desktop.ViewModels.SuccessDialogViewModel 85.7%
Daqifi.Desktop.WindowViewModelMapping.IWindowViewModelMappingsContract 0%
Daqifi.Desktop.WindowViewModelMapping.WindowViewModelMappings 0%
Sentry.Generated.BuildPropertyInitializer 100%
Daqifi.Desktop.Common - 30.8%
Name Line Branch
Daqifi.Desktop.Common 30.8% 16.6%
Daqifi.Desktop.Common.Loggers.AppLogger 33.7% 16.6%
Daqifi.Desktop.Common.Loggers.NoOpLogger 0%
Daqifi.Desktop.IO - 100%
Name Line Branch
Daqifi.Desktop.IO 100% ****
Daqifi.Desktop.IO.Messages.MessageEventArgs`1 100%

Coverage report generated by ReportGeneratorView full report in build artifacts

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant