Skip to content

feat: About changelog link, Drivers/Startup hide system entries - #270

Merged
laurentiu021 merged 2 commits into
mainfrom
feat/ui-filters
May 12, 2026
Merged

feat: About changelog link, Drivers/Startup hide system entries#270
laurentiu021 merged 2 commits into
mainfrom
feat/ui-filters

Conversation

@laurentiu021

@laurentiu021 laurentiu021 commented May 12, 2026

Copy link
Copy Markdown
Owner

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

  • Both filters use a backing _allEntries\ / _allDrivers\ list + \ApplyFilter()\ pattern
  • Filter state is reactive via \partial void OnXxxChanged\ (CommunityToolkit.Mvvm)
  • Summary labels update to show filtered count vs total

Files modified

  • \ViewModels/AboutViewModel.cs\ — OpenChangelog command
  • \ViewModels/DriversViewModel.cs\ — HideSystemDrivers + ApplyFilter
  • \ViewModels/StartupViewModel.cs\ — HideWindowsEntries + ApplyFilter
  • \CHANGELOG.md\

Closes #232, Closes #234, Closes #238

Summary by CodeRabbit

  • New Features
    • Added a "View Changelog" button in the About section linking to the project's changelog on GitHub
    • Added a toggle to hide Microsoft/Windows drivers in the Drivers view
    • Added a toggle to hide Microsoft/Windows startup entries in the Startup Manager

Review Change Stack

- 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
@coderabbitai

coderabbitai Bot commented May 12, 2026

Copy link
Copy Markdown
📝 Walkthrough

Walkthrough

This 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.

Changes

Filtering and Changelog Features

Layer / File(s) Summary
Changelog documentation
CHANGELOG.md
Three new feature entries added describing the About changelog link, Drivers system driver filter, and Startup Windows entry filter.
About view — Changelog link
SysManager/SysManager/ViewModels/AboutViewModel.cs
OpenChangelog relay command opens the GitHub CHANGELOG.md by constructing the URL from UpdateService.Owner and UpdateService.Repo.
Drivers view — System driver filtering
SysManager/SysManager/ViewModels/DriversViewModel.cs
Internal _allDrivers stores all parsed drivers; ParseDriverJson adds entries to _allDrivers and calls ApplyFilter(); ApplyFilter() rebuilds public Drivers, updates DriverCount and Summary; IsSystemDriver() classifies drivers whose Manufacturer contains "Microsoft" or "Windows" (case-insensitive).
Startup view — Windows entry filtering
SysManager/SysManager/ViewModels/StartupViewModel.cs
Internal _allEntries stores all scanned startup entries; adds observable HideWindowsEntries with change handler that calls ApplyFilter(); ScanAsync populates _allEntries then calls ApplyFilter(); ApplyFilter() rebuilds public Entries and updates counts; IsWindowsEntry() checks Publisher and Command for Microsoft/Windows-related substrings.

🎯 2 (Simple) | ⏱️ ~12 minutes


A changelog link, drivers filtered clean,
Windows entries tucked away from the scene,
Three toggles to tidy the system's show—
Less clutter below, more clarity to know! 🐰✨

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title concisely and accurately summarizes all three main changes: About changelog link, Drivers hide system entries toggle, and Startup hide system entries toggle.
Linked Issues check ✅ Passed The PR implements all three features as specified in linked issues #232, #234, and #238: About changelog link, Drivers filter for system drivers, and Startup filter for Windows entries.
Out of Scope Changes check ✅ Passed All changes are directly aligned with the three linked objectives; no unrelated modifications were introduced beyond the stated scope.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/ui-filters

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 win

Scan summary loses total scanned count when filter is enabled.

UpdateCounts() derives TotalCount from Entries (filtered), so toggling HideWindowsEntries changes 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

📥 Commits

Reviewing files that changed from the base of the PR and between 1c36e1c and 425e661.

📒 Files selected for processing (4)
  • CHANGELOG.md
  • SysManager/SysManager/ViewModels/AboutViewModel.cs
  • SysManager/SysManager/ViewModels/DriversViewModel.cs
  • SysManager/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 and OnHideSystemDriversChanged hook are implemented cleanly and keep UI state predictable.

Also applies to: 26-27, 33-34, 68-71, 122-142

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 win

Reset filtered counts when scan output is empty

Line 91 exits before ApplyFilter(), so DriverCount can 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

📥 Commits

Reviewing files that changed from the base of the PR and between 425e661 and 4342455.

📒 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-commenter

Copy link
Copy Markdown

⚠️ Please install the 'codecov app svg image' to ensure uploads and comments are reliably processed by Codecov.

Codecov Report

❌ Patch coverage is 58.97436% with 16 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
...sManager/SysManager/ViewModels/DriversViewModel.cs 57.14% 7 Missing and 2 partials ⚠️
...sManager/SysManager/ViewModels/StartupViewModel.cs 64.70% 5 Missing and 1 partial ⚠️
SysManager/SysManager/ViewModels/AboutViewModel.cs 0.00% 1 Missing ⚠️

📢 Thoughts on this report? Let us know!

@laurentiu021
laurentiu021 merged commit 99931f6 into main May 12, 2026
5 checks passed
@laurentiu021
laurentiu021 deleted the feat/ui-filters branch May 12, 2026 12:30
laurentiu021 added a commit that referenced this pull request May 22, 2026
## 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>
laurentiu021 added a commit that referenced this pull request May 22, 2026
* 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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants