The Images tab would freeze when selecting shortcuts or correcting
grid IDs because block_on() was called on the main UI thread.
Changes:
- Convert handle_shortcut_selected() to spawn async SteamGridDB search
in the background instead of blocking the UI thread
- Convert handle_correct_grid_request() to spawn async name search
in the background instead of blocking
- Add poll_grid_id_search() and poll_name_search() to receive async
results via watch channels
- Add grid_id_search and name_search fields to ImageSelectState
- Fix Windows file:// URL paths by normalizing backslashes to forward
slashes (file:/// prefix for absolute paths)
- Remove blocking thread::sleep(100ms) after image selection, replace
with request_repaint()
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Errors from saving shortcuts were silently swallowed, leaving users
with no feedback when writes failed (e.g., due to Steam running or
permission issues).
Changes:
- Make save_shortcuts() return Result<(), String> with user-friendly
error messages suggesting to check Steam is not running
- Add SyncProgress::Error variant to surface errors through the UI
- Display sync errors in red text in both the Import and Images tabs
- Propagate save errors in disconnect_shortcut()
- Continue processing other users when one fails in sync_shortcuts()
and fix_all_shortcut_icons()
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>