Conversation
|
Great job! |
|
Will this cache the images rather than requiring re-downloading all the icon images each session? |
|
@nomnaut No, the program does not cache images, so they are redownloaded from Steam at startup. It works by downloading the icon and cover bytes in the background using Although the logic in |
|
Would it be difficult to cache the same images on local storage and then check there first for images? I feel like the small storage cost would be worth the time and api savings. |
I hadn't thought of that, so I'll see if it's feasible. I'm mainly worried about users with huge Steam libraries, as caching all those icons could end up taking quite a bit of disk space. I'll run some tests to see how to handle it properly! |
|
I’m willing to test it. I have 1,352 games in my library spanning 22 years with plenty of storage space. I can clone the repo and apply your PR. (I imagine building the executable shouldn’t be difficult). |
|
Haha that's amazing! I actually have a good amount of games myself, so I should be able to run tests on my end without issue. I won't be able to dive into this until tomorrow afternoon, but I'll update this thread once I start working on it and set up the code. Thanks for the offer! |
|
GD, let me know if I can help lol. Also, at that point you might as well make a fork rather than waiting for the PR to be approved. |
implement local disk caching and memory optimization for game and achievement icons"
|
Turns out I was able to get to this earlier than expected! Caching is now implemented. A few details on the implementation and testing: Location: Cached images are stored in SteamAchievementManager\SAM.Picker\bin\x86\Debug\net8.0-windows\cache (relative to the executable). Test results: Tested on my library of ~900 games and everything runs smoothly. Footprint: The full cache for 900 games is only about 14 MB, so storage shouldn't be a problem unless someone has 10,000+ games—at which point RAM usage would likely become the bottleneck anyway. I haven't done an extreme stress test beyond this to avoid hitting Steam API rate limits or potential temporary bans. If you know a safe way to simulate heavy load without triggering API limits, let me know! |
|
ai slop |
📌 Overview
This Pull Request bumps the Steam Achievement Manager (SAM) to v7.0.42, bringing a massive modernization effort by transitioning the Picker from legacy WinForms to a modern, high-fidelity WPF interface. Alongside the UI revamp, it completely fixes critical issues with game discovery that occurred due to deprecated Steam API endpoints, restoring the classic SAM exact library detection.
✨ Key Features & UI Changes
GamePicker.cswindow with a fully responsive, dark-themedMainWindow.xamlWPF interface..csprojfile to utilize.NET 8, taking advantage of better runtime performance while strictly maintainingx86output (essential forsteamclient.dllinterop).v7.0.42.🐛 Bug Fixes & Engine Restorations
The official
ISteamApps/GetAppListweb endpoints are heavily rate-limited and deprecated.Re-implemented the battle-tested, classic Gibbed discovery engine: This application now properly downloads the master
games.xmllist again and directly queries the local client API usingSteamApps008.IsSubscribedApp(...). This restores 100% discovery precision and eliminates generic "App 1000" fallbacks.Images reliant on generic static store CDN locations (
capsule_184x69.jpg) failed frequently because retired/delisted games return HTTP 404s. Reverted the image resolver to safely request cached metadata properties (small_capsule,logo) from the local client API (SteamApps001). Now, all graphics load gracefully and asynchronously.Resolved an issue where users clicking on a game from
SAM.Picker.exeencountered an error because it couldn't locateSAM.Game.exein local debug/dev environments. The startup info now traverses the solution properly to gracefully link with the\bin\execution directory.🛠️ Technical Details
GameInfoViewModel.csfor clean XAML databinding (INotifyPropertyChanged).DispatcherUnhandledExceptionhandlers to capture and diagnose rendering/API execution exceptions silently rather than crash-to-desktop.steam_api.dlland original Gibbed API hooks.