Consolidate tool actions into Settings → Tools tab (declutter Edit menu)#7
Merged
Merged
Conversation
Edit menu was crowded with 7 new items (Find Duplicates, Find Game, Compare Profiles, Group Launch, Migrate Key, Test API Key, plus Backup submenu). Consolidates them into a new Settings → Tools tab with a 4×2 button grid: Find Duplicates | Find Game in Library Compare Profiles | Group Launch Migrate Encryption Key| Test API Key Create Backup... | Restore Backup... SettingsWindow exposes a SettingsToolAction enum and a RequestedAction property; tool buttons set it, save in-progress settings via SaveSettings(), then close. AccountsWindow's existing SettingsButton_Click reads RequestedAction after the dialog closes and dispatches to the same handlers that previously sat on the Edit menu. Edit menu now back to a clean 5 items: Login All Missing, Refresh Window, Reload Accounts, Settings, Sort. Keyboard shortcuts (Ctrl+R/D/F/N/B/L) still work since they bind through RelayCommand directly to the handlers, not through the removed menu items. File → Backup submenu kept as an additional entry point for discoverability — duplication is intentional.
…ing flow
Two bug fixes:
1. Profile Info now distinguishes "all 0 hours = playtime hidden by
privacy" from "user actually hasn't played anything". Steam's
GetOwnedGames endpoint returns the games list even when the profile
has Game Details set to Private/Friends-only — but every game comes
back with playtime_forever=0. Without this, the UI showed "246
games • 0.0h total" with every row "Never played" for a 14-year-old
account, which was misleading.
- ProfileInfo.PlaytimeLikelyHidden: true when >=5 games returned
but every playtime_forever and playtime_2weeks is 0.
- Games tab now shows a blue info banner above the list when this
state is detected.
- Footer text becomes "N games • playtime hidden by privacy"
instead of the misleading "N games • 0.0h total".
- OwnedGame.PlaytimeDisplay returns "—" instead of "Never played"
for 0-minute rows so the list itself is neutral about the cause.
2. Login All Missing: skipped per-login SerializeAccounts during the
bulk loginAllSequence and persist once at the end via new
PersistAfterBulkLogin helper. With 24 accounts the per-login
serialize-with-backup-rotation was racing against the spawned
login threads' file I/O and Steam's own loginusers.vdf writes.
Also added a final summary MessageBox showing how many were
processed, replacing the bare "Done!".
If every account already has a SteamID, the previous flow would pop the confirmation dialog, then disable the UI for a foreach loop that found zero work and exited silently. From the user's perspective: "I clicked it and nothing happened." Now: count missing-SteamID accounts up front. If zero, show "Every account already has a SteamID — nothing to do." with an explanation of what the action is for, and return without touching the UI state. If >0, the confirmation dialog now also tells you exactly how many accounts will be processed.
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
Cleans up the Edit menu, which got crowded with 7 tool entries from PR #6.
Before
Edit menu:
After
Edit menu (back to compact):
The 6 tool actions plus Create / Restore Backup live on a new Settings → Tools tab as a 4×2 button grid. Click any → settings get saved, dialog closes, action runs.
How it works
SettingsWindowexposesRequestedAction(enum) and aRaiseTool(action)helper that firesSaveSettings()thenDialogResult=true; Close().AccountsWindow.SettingsButton_ClickreadsRequestedActionafter the dialog closes and dispatches to the same handlers that previously hung off the Edit menu (they're still in the file, just no longer wired to MenuItems directly).Ctrl+R / D / F / N / B / L) still work — they bind throughRelayCommanddirectly to the handlers, independent of the menu structure.Test plan
Generated by Claude Code