feat: About changelog link, Drivers/Startup hide system entries - #270
Conversation
- About: OpenChangelog command opens GitHub CHANGELOG.md (#232) - Drivers: HideSystemDrivers toggle filters Microsoft/Windows drivers, shows only third-party entries (#234) - Startup: HideWindowsEntries toggle filters Microsoft/Windows startup items that should not be disabled (#238) - CHANGELOG updated Closes #232, Closes #234, Closes #238
📝 WalkthroughWalkthroughThis PR adds three user-facing features: a GitHub changelog link in the About view, a toggle to hide Microsoft/Windows drivers, and a toggle to hide Windows-related startup entries. Each view model now maintains an internal unfiltered collection and applies filtering based on user preferences, with corresponding changelog documentation. ChangesFiltering and Changelog Features
🎯 2 (Simple) | ⏱️ ~12 minutes
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
SysManager/SysManager/ViewModels/StartupViewModel.cs (1)
133-139:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winScan summary loses total scanned count when filter is enabled.
UpdateCounts()derivesTotalCountfromEntries(filtered), so togglingHideWindowsEntrieschanges the reported total instead of preserving scanned total. Show both displayed and total counts to keep the summary accurate.💡 Suggested fix
private void UpdateCounts() { - EnabledCount = Entries.Count(e => e.IsEnabled); - DisabledCount = Entries.Count(e => !e.IsEnabled); - TotalCount = Entries.Count; - ScanSummary = $"{EnabledCount} enabled · {DisabledCount} disabled · {TotalCount} total"; + var shownCount = Entries.Count; + EnabledCount = Entries.Count(e => e.IsEnabled); + DisabledCount = Entries.Count(e => !e.IsEnabled); + TotalCount = _allEntries.Count; + ScanSummary = HideWindowsEntries + ? $"{EnabledCount} enabled · {DisabledCount} disabled · {shownCount} shown / {TotalCount} total" + : $"{EnabledCount} enabled · {DisabledCount} disabled · {TotalCount} total"; }Also applies to: 141-152
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@SysManager/SysManager/ViewModels/StartupViewModel.cs` around lines 133 - 139, UpdateCounts currently computes TotalCount from the filtered Entries collection so toggling HideWindowsEntries changes the "total scanned" number; change it to keep a separate scanned-total source and compute totals from the unfiltered master collection (e.g. use the original list used to populate Entries such as AllEntries/_allEntries/EntriesSource) while keeping EnabledCount/DisabledCount based on the displayed Entries. Modify UpdateCounts (and the similar method around lines 141-152) to set ScannedTotalCount = masterCollection.Count, DisplayedTotalCount = Entries.Count, and update ScanSummary to show both (e.g. "X shown · Y enabled · Z disabled · N scanned") so the scanned total remains constant when filters toggle.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@SysManager/SysManager/ViewModels/StartupViewModel.cs`:
- Around line 133-139: UpdateCounts currently computes TotalCount from the
filtered Entries collection so toggling HideWindowsEntries changes the "total
scanned" number; change it to keep a separate scanned-total source and compute
totals from the unfiltered master collection (e.g. use the original list used to
populate Entries such as AllEntries/_allEntries/EntriesSource) while keeping
EnabledCount/DisabledCount based on the displayed Entries. Modify UpdateCounts
(and the similar method around lines 141-152) to set ScannedTotalCount =
masterCollection.Count, DisplayedTotalCount = Entries.Count, and update
ScanSummary to show both (e.g. "X shown · Y enabled · Z disabled · N scanned")
so the scanned total remains constant when filters toggle.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: de546fe5-c312-4d0b-a42e-5d5f91e50fac
📒 Files selected for processing (4)
CHANGELOG.mdSysManager/SysManager/ViewModels/AboutViewModel.csSysManager/SysManager/ViewModels/DriversViewModel.csSysManager/SysManager/ViewModels/StartupViewModel.cs
📜 Review details
🔇 Additional comments (3)
CHANGELOG.md (1)
28-35: Changelog additions look accurate and well-scoped.These entries clearly match the implemented features and linked issues.
SysManager/SysManager/ViewModels/AboutViewModel.cs (1)
207-209: OpenChangelog command implementation is clean and consistent.Good reuse of the existing URL-opening pattern and repo constants.
SysManager/SysManager/ViewModels/DriversViewModel.cs (1)
20-21: Filtering implementation is solid and reactive.The
_allDrivers+ApplyFilter()pattern andOnHideSystemDriversChangedhook are implemented cleanly and keep UI state predictable.Also applies to: 26-27, 33-34, 68-71, 122-142
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
SysManager/SysManager/ViewModels/DriversViewModel.cs (1)
89-92:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winReset filtered counts when scan output is empty
Line 91 exits before
ApplyFilter(), soDriverCountcan stay stale from a previous run. That makes the Line 68 summary potentially wrong when hide mode is on.✅ Minimal fix
private void ParseDriverJson(string raw) { - if (string.IsNullOrWhiteSpace(raw)) return; + if (string.IsNullOrWhiteSpace(raw)) + { + ApplyFilter(); + return; + } try { using var doc = JsonDocument.Parse(raw); var root = doc.RootElement; @@ } ApplyFilter(); }Also applies to: 120-120
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@SysManager/SysManager/ViewModels/DriversViewModel.cs` around lines 89 - 92, ParseDriverJson currently returns early when the input 'raw' is null/whitespace which leaves DriverCount and filtered counts stale; change the early-exit path in ParseDriverJson to reset DriverCount (and any related filtered counters) and then call ApplyFilter() before returning. Do the same for the other early-return spot referenced (the second occurrence in this file) so both places clear counts and invoke ApplyFilter() when scan output is empty to keep the UI summary correct.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@SysManager/SysManager/ViewModels/DriversViewModel.cs`:
- Around line 89-92: ParseDriverJson currently returns early when the input
'raw' is null/whitespace which leaves DriverCount and filtered counts stale;
change the early-exit path in ParseDriverJson to reset DriverCount (and any
related filtered counters) and then call ApplyFilter() before returning. Do the
same for the other early-return spot referenced (the second occurrence in this
file) so both places clear counts and invoke ApplyFilter() when scan output is
empty to keep the UI summary correct.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 14255445-2824-48d9-902c-49cdc3617e15
📒 Files selected for processing (1)
SysManager/SysManager/ViewModels/DriversViewModel.cs
📜 Review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
- GitHub Check: Build & unit tests
- GitHub Check: Analyze (csharp)
🔇 Additional comments (1)
SysManager/SysManager/ViewModels/DriversViewModel.cs (1)
123-138: Good filtering structure with_allDrivers+ApplyFilter()This is a clean MVVM pattern for toggle-based filtering and keeps the displayed collection deterministic.
|
Codecov Report❌ Patch coverage is 📢 Thoughts on this report? Let us know! |
## Summary chkdsk /scan requires admin privileges. Without elevation, the process exits with a non-zero code and every drive is reported as failed. This fix adds an upfront admin check with a clear user-facing message. ## Changes ### SystemHealthViewModel.cs - **RunChkdskCoreAsync**: Added \AdminHelper.IsElevated()\ guard at the top. If not elevated, sets drive status to \Needs admin\ and shows a message directing the user to the elevation button. - **RunChkdskOnSelectedAsync**: Same admin check before iterating drives, so the user gets immediate feedback instead of watching each drive fail sequentially. ## Testing - Build: 0 errors - No behavior change when running as admin — chkdsk proceeds normally - When not elevated: clear message shown, no process spawned, no cryptic exit codes Closes #270 Co-authored-by: laurentiu021 <laurentiu021@users.noreply.github.com>
* feat: About changelog link, Drivers/Startup hide system entries filters - About: OpenChangelog command opens GitHub CHANGELOG.md (#232) - Drivers: HideSystemDrivers toggle filters Microsoft/Windows drivers, shows only third-party entries (#234) - Startup: HideWindowsEntries toggle filters Microsoft/Windows startup items that should not be disabled (#238) - CHANGELOG updated Closes #232, Closes #234, Closes #238 * fix: call ApplyFilter inside ParseDriverJson so existing tests pass --------- Co-authored-by: laurentiu021 <laurentiu021@users.noreply.github.com>
Summary
Three small UX improvements in one PR:
1. About — View Changelog button (#232)
New \OpenChangelog\ command opens the GitHub CHANGELOG.md directly in the browser, giving users full visibility into what changed between versions.
2. Drivers — Hide system drivers toggle (#234)
New \HideSystemDrivers\ checkbox filters out Microsoft/Windows drivers from the list, showing only third-party drivers (NVIDIA, AMD, Realtek, etc.). Makes it easier to find relevant drivers.
3. Startup Manager — Hide Windows entries toggle (#238)
New \HideWindowsEntries\ checkbox filters out Microsoft/Windows startup items that should not be disabled. Helps users focus on third-party apps they can safely manage.
Implementation
Files modified
Closes #232, Closes #234, Closes #238
Summary by CodeRabbit