Releases: matisseduffield/SAM
Releases · matisseduffield/SAM
test
test
What's Changed
- Auto-update pipeline: in-process self-updater + workflow maintains latest.txt by @matisseduffield in #8
Full Changelog: v1.5.9331.26726...v1.5.9331.26727
test
test
What's Changed
- Consolidate tool actions into Settings → Tools tab (declutter Edit menu) by @matisseduffield in #7
Full Changelog: v1.5.9331.26725...v1.5.9331.26726
QoL batch
Summary
Big QoL batch built in one branch for a single phone-merge.
Encryption painless suite
- Migrate Encryption Key dialog (Edit menu): re-encrypt every
Password/SharedSecretwith a new key. Includes a "Test old key" button so you don't run a destructive migration with the wrong input. Can generate a random key or take a custom one; can optionally seal the new key via DPAPI (locked to your Windows user) so future rebuilds of SAM never breakinfo.datagain. - Sealed-key storage (
Core/EncryptionKey.cs): ifsamsettings.inihas a[System] SealedKey, that's what every encrypt/decrypt uses. Otherwise falls back to the existing"PRIVATE_KEY"literal so old installs still work unchanged. - Friendlier crypto errors:
StringCipher.Decryptnow replaces "Padding is invalid and cannot be removed" with "Decryption failed — the encryption key does not match… open Settings → Migrate Encryption Key". NewCryptoHelperdistinguishes wrong-key / not-encrypted / corrupted for callers that want to branch on it. - Encrypted Backup / Restore (File → Backup): write a portable
.sambackupfile (passphrase-encrypted, key-independent) on one machine, restore on another. Restore offers Replace / Merge. - Versioned
info.dat.bak.{timestamp}kept on every save (default 5, configurable via[Settings] BackupCount). Pre-existinginfo.dat.bakis preserved on first run. - Test API Key (Edit menu): round-trips through
ISteamWebAPIUtil/GetSupportedAPIList, shows pass/fail with actionable text.
Account management
- Find Duplicates (Edit menu): groups accounts by same username and same SteamID; per-row Delete. Solves the
paris12345678910double-entry problem. - Group Launch (Edit menu / Ctrl+L): multi-select + filter, configurable inter-login delay (default 8s), sequentially
Login()s each. - Sort → Last Logged In:
Account.LastLoggedInis stamped every login (and persisted via the existingSerializeAccountspath), sortable most-recent-first. - Import → Steam Desktop Authenticator (.maFile) / Folder: bulk-parse SDA
.maFiles. For each, fillsSharedSecreton the matchingNameaccount or creates a new one. Encrypts with the currenteKey.
Profile Info window v2
- Friends tab populated via
ISteamUser/GetFriendList+ a batch summaries enrichment pass (persona name, avatar, online status, friend-since). - Compare Profiles (Edit menu): two
GetProfileInfoAsynccalls (cache-shared with Profile Info), side-by-side level / hours / games / top-20-by-hours with delta indicators and library overlap count. - Per-account right-click → Compare With... preselects the clicked account on the left side of the compare window.
- Find Game in Library (Edit menu / Ctrl+F): query-string search across every account with a SteamID; per-account live progress, results show account + game + hours.
UX polish
- Live window title:
FileSystemWatcheronloginusers.vdfre-reads MostRecent whenever Steam writes the file, so the idle title (SAM — PersonaName (accountname)) updates within ms of a Steam account switch. 500ms debounce + silent fall back if no Steam path is set. - Keyboard shortcuts via
InputBindings(bound through a tinyRelayCommandwrapper):
| Shortcut | Action |
|---|---|
Ctrl+R |
Reload all accounts |
Ctrl+D |
Find duplicates |
Ctrl+F |
Find game in library |
Ctrl+N |
New account |
Ctrl+B |
Backup (create encrypted) |
Ctrl+L |
Group launch |
Files
| Status | Path | Purpose |
|---|---|---|
| new | Core/EncryptionKey.cs |
DPAPI-sealed key store |
| new | Core/CryptoHelper.cs |
Friendly crypto errors |
| new | Core/MaFileImporter.cs |
SDA .maFile parsing |
| new | Core/RelayCommand.cs |
Minimal ICommand for keyboard shortcuts |
| new | Views/MigrateKeyWindow.{xaml,xaml.cs} |
Migration UI |
| new | Views/FindDuplicatesWindow.{xaml,xaml.cs} |
Duplicate finder |
| new | Views/FindGameWindow.{xaml,xaml.cs} |
Game library cross-reference |
| new | Views/GroupLaunchWindow.{xaml,xaml.cs} |
Multi-login sequencer |
| new | Views/CompareProfilesWindow.{xaml,xaml.cs} |
Side-by-side compare |
| modified | Core/AccountUtils.cs |
+RotateBackups, +ValidateApiKeyAsync, +FindDuplicates, +GetFriendListAsync, +SerializeBackup/DeserializeBackup, +GetCurrentSteamUser |
| modified | Core/ProfileInfo.cs |
+FriendInfo + friends slot in orchestrator |
| modified | Core/Account.cs |
+LastLoggedIn |
| modified | Core/StringCipher.cs |
+DecryptOrThrow, friendly error in Decrypt |
| modified | Core/SortType.cs |
+LastLoggedIn |
| modified | Core/SAMSettings.cs, Core/UserSettings.cs |
+SealedKey, +BackupCount |
| modified | Views/ProfileInfoWindow.{xaml,xaml.cs} |
Friends tab |
| modified | Views/AccountsWindow.{xaml,xaml.cs} |
New menus, handlers, dynamic eKey property, LastLoggedIn write, dynamic title, file watcher, keyboard shortcuts, Compare With... in account right-click |
| modified | SAM.csproj |
System.Security ref + new file entries |
What's Changed
- QoL batch: sealed-key migration, friendly crypto errors, compare profiles, group launch, maFile import, friends tab, backup/restore, live title, keyboard shortcuts by @matisseduffield in #6
Full Changelog: v1.5.9331.26724...v1.5.9331.26725
1.5.9331.26724
What's new
- Profile Info: right-click an account to see avatar, persona name, Steam level, country, ban badges, full owned games list with icons and hours played, and a "recently played" tab. Results cache for 15 minutes per SteamID. Requires a Steam Web API key in Settings → Steam → ApiKey.
- Steam Mobile App login: handles the new "Use Steam Mobile App to confirm" prompt and the "Enter a code instead" fallback.
- Release pipeline: SAM.exe is now built with Costura.Fody assemblies properly embedded (single-file ~4.3 MB binary, no loose DLLs required).
Install: download SAM.exe below and drop it next to your existing samsettings.ini / info.dat.
What's Changed
- Add Profile Info right-click action (Steam Web API data + 15 min cache) by @matisseduffield in #5
Full Changelog: v1.5.9331.26723...v1.5.9331.26724
Handle Steam Mobile App confirm and 'Enter a code instead' after login
What's Changed
Added handling for "Steam Mobile App Confirm" and "Enter a code instead" prompt after login.
Detects Steam mobile app confirmation screen.
Automatically triggers correct flow if user chooses code input.
credit to @newfebriwisnu