Commit graph

37 commits

Author SHA1 Message Date
ee2691148d Bump version to v0.1.40
All checks were successful
Build plugin / build (push) Successful in 1m12s
2026-08-19 16:42:23 -03:00
97c1519833 readability: rename constants, variables, extract enums across plugins
- itch: UPPER_CASE constants, CACHE_NAMESPACE, butler_process/rpc_socket/connection_state, LOGIN_METHOD enum, SETTINGS_SECTION, signal handler renames
- artprovider: UPPER_CASE constants, _enriched_meta, _find_game_dict, dead code removal, named poll intervals
- session-switch: MAX_POLL_FRAMES, _poll_for_power_menu, BUTTON_LABEL const
2026-08-19 16:41:31 -03:00
7ee08ac571 readability: extract magic constants, fix Go jargon
- goos/goarch -> os_name/arch_name (Go ecosystem jargon)
- BUTLER_USER_AGENT now reads version from plugin.json at runtime
- Added named constants: CONNECTION_TIMEOUT_ITERATIONS,
  CONNECTION_POLL_DELAY_MS, PERCENTAGE_SCALE, LAUNCH_WATCH_INTERVAL_SEC,
  UPDATE_CHECK_INTERVAL_SEC, BUTLERD_BOOT_MAX_ATTEMPTS,
  BUTLERD_BOOT_RETRY_DELAY_SEC, LAUNCH_WATCH_TIMEOUT_MS,
  EXECUTE_PERMISSION_BIT
- Removed BYTES_PER_MB (inline 1024 * 1024 is clearer)
2026-08-19 16:20:20 -03:00
18f674c00b update icon
All checks were successful
Build plugin / build (push) Successful in 1m10s
2026-08-18 12:01:35 -03:00
c15d49bfd1 Migrate settings UI to OGPU themed widgets and add logout
All checks were successful
Build plugin / build (push) Successful in 1m6s
- Replace plain Godot Controls with StatusPanel, ComponentTextInput,
  Toggle, CardButton, and Dropdown components
- Add logout functionality that clears API key or closes session
- Match Steam plugin's settings UI style
2026-08-17 12:27:14 -03:00
b9effee104 Bump to v0.1.39
All checks were successful
Build plugin / build (push) Successful in 1m8s
2026-08-17 02:20:05 -03:00
d09bd2ae79 Replace cookie HTTP verification with butlerd's Profile.List + UseSavedLogin
Some checks failed
Build plugin / build (push) Has been cancelled
Butlerd stores credentials in its SQLite DB after the first password
login. On restart, Profile.List finds saved profiles and
Profile.UseSavedLogin refreshes them — no cookie persistence needed on
our side.
2026-08-17 02:19:22 -03:00
1931ae143a Fix cookie persistence: save dict as JSON, verify via HTTP on restart
All checks were successful
Build plugin / build (push) Successful in 1m11s
2026-08-17 02:08:53 -03:00
2b07195789 Persist login cookies for seamless password login restart
All checks were successful
Build plugin / build (push) Successful in 1m8s
2026-08-17 02:04:00 -03:00
e2a4464d0d Add password login and collection visibility settings
All checks were successful
Build plugin / build (push) Successful in 1m10s
2026-08-17 02:00:39 -03:00
173aa94ea9 Bump version to v0.1.35
All checks were successful
Build plugin / build (push) Successful in 1m10s
2026-08-16 20:51:23 -03:00
f4aa8fd1e0 Remove boxart download system
All checks were successful
Build plugin / build (push) Successful in 1m11s
2026-08-16 20:23:45 -03:00
dbd955437e Bump to v0.1.33
All checks were successful
Build plugin / build (push) Successful in 1m7s
2026-08-16 19:57:16 -03:00
6e7f8c886d Fix CI: remove upload-artifact (not supported on Forgejo)
All checks were successful
Build plugin / build (push) Successful in 1m7s
2026-08-16 16:04:43 -03:00
8ff1878268 Fix CI: remove sudo (runner is root in Docker)
Some checks failed
Build plugin / build (push) Failing after 1m14s
2026-08-16 16:02:34 -03:00
ebbe3da28b Add Forgejo CI workflow to build and release the plugin
Some checks failed
Build plugin / build (push) Failing after 1m25s
2026-08-16 16:00:22 -03:00
6ede5ae10e Bump to v0.1.32 2026-08-16 15:49:31 -03:00
404ee87a64 Enriched metadata, per-layout boxart, install failure UI, and modal focus fix (v0.1.31) 2026-08-16 15:33:36 -03:00
ff2ae68d9e Add install locations, upload picker, update flags, move, and launch hooks (v0.1.24) 2026-08-10 00:04:37 -03:00
a024907696 Launch LÖVE/Java games and surface launch failures as a popup (v0.1.23) 2026-08-09 23:05:04 -03:00
8b393090ca Fix stale cache launches, FNF runtime deps, and uninstall focus death (v0.1.20)
- Inject the user-level shared-libs dir into LD_LIBRARY_PATH for installed
  games so FNF finds libvlc.so.5 (idempotent, avoids duplicate entries)
- Reconcile cached installs against butlerd's live caves: normalize
  int/float ids, wait for butlerd when the cache claims installs, keep the
  cache when Fetch.Caves fails, and re-save the reconciled cache
- get_caves() returns null on RPC error (vs [] for genuinely nothing
  installed) so callers can tell a transient failure apart
- Patch freshly installed/updated items in place so the Play button launches
  the new binary immediately
- Drop and re-add items through the LibraryManager so the library menu
  re-renders after install/uninstall (core handler is a no-op upstream)
- Restore launch-page focus after uninstall by searching get_tree().root:
  get_tree().current_scene is null in OGPU, so the old fix silently no-oped
  and left the D-pad dead
2026-08-09 15:43:30 -03:00
8a2d8b5374 Resolve launch commands from butlerd's install receipt (v0.1.12)
The old `find | head -n 1` guess picked the wrong binary for many games
(e.g. a Unity LinuxPlayer_s.debug stub instead of the real .x64 launcher,
or nothing at all for .love games), so most fresh installs failed to
launch. Read .itch/receipt.json.gz (butlerd writes the authoritative
launch target on every install) and use its resolved command, with a
smarter best-effort scan as fallback. Re-resolve commands on cache load
so existing installs are fixed without a reinstall.
2026-08-08 00:00:26 -03:00
18ef80e868 Bump to 0.1.11 (install-location + orphan-cave fix) 2026-08-07 22:48:56 -03:00
3473073582 Install games to persistent user://butler/games and reconcile orphaned caves
OGPU moves the whole extracted plugin directory (plugins/itch/) to trash
on every plugin update, so keeping installed games under
user://plugins/itch/games meant game files silently vanished on update
while butler.db kept the (now orphaned) cave. That made fresh installs
fail with butlerd's "That upload is already installed!" and broke
launches for games whose files were gone.

- New installs go to user://butler/games (persistent, next to butler.db)
  via a reworked _ensure_install_location; prereqs move there too
- _install/_update reconcile the cave first: a cave whose install folder
  no longer exists is uninstalled before a fresh (re)install, and a valid
  existing cave turns the request into an update instead
- _make_item treats missing-folder caves as not installed, and the cache
  path re-checks cwd so stale caches don't render a broken Play button
- orphaned caves are cleaned out of butler.db in the background on library
  load
- drop the plugin's global InstallLocation class stub: it collided with
  OGPU core's nested Library.InstallLocation and broke compilation on a
  cold .godot cache (the unused install_to arg is now untyped)
- Makefile: compute preset number with shell arithmetic instead of bc
2026-08-07 22:48:17 -03:00
7d5dedc0b9 Hide games with no platform info while the platform filter is on (v0.1.10) 2026-08-07 22:19:51 -03:00
b0183b7c20 Add option to filter games not available on the current platform
The new 'Only show games available on this platform' checkbox in the
plugin settings drops games whose platforms don't include the OS
OpenGamepadUI is running on (e.g. Windows-only games on Linux). Games
with no platform info at all (HTML5) are kept since there's nothing to
filter on. The setting is read on every library load, so toggling it
reloads the itch.io library without a restart.
2026-08-07 18:41:39 -03:00
f7d8f09f92 Fill in plugin metadata (forge URL, author) 2026-08-07 01:35:27 -03:00
e48a0b501d Emit install/update/uninstall completion and forward install progress to the base Library contract so OGPU's InstallManager and launch menu stop hanging at 0% 2026-08-06 19:13:34 -03:00
b19903e682 Normalize outbound RPC params to ints so cached game dicts (float ids from Godot's JSON parser) don't fail Install.Queue with -32700 2026-08-06 19:08:44 -03:00
e9f25d104b Merge games from the profile's itch.io collections into the library (deduped against owned games) so bookmarked free games show up 2026-08-06 18:52:55 -03:00
9cd4cb32e3 Use itch.io's stillCoverUrl for animated GIF covers so those games still get boxart (Godot can't decode GIFs) 2026-08-06 18:46:02 -03:00
a9371bdbc2 Download itch.io cover art into OGPU's local boxart dir so games show real covers instead of the placeholder 2026-08-06 18:29:47 -03:00
c4fdd2f974 Refresh stale butlerd Fetch.* data (owned keys, caves, uploads) so a cold database doesn't report an empty library or no compatible uploads 2026-08-06 18:11:35 -03:00
e8111f89c2 Persist butler outside the plugin dir so plugin updates don't wipe it
OGPU wipes user://plugins/<id>/ (and everything inside it) whenever a
plugin is updated or re-extracted, so storing butler and butler.db under
user://plugins/itch/assets meant every version bump deleted the binary
and its login session. Store them in persistent user://butler instead,
and migrate any leftover install from the old location.
2026-08-06 17:19:28 -03:00
408991a693 Fix butlerd RPC -32700: normalize integral JSON floats to ints
Godot JSON.parse decodes every JSON number as a float, so integer ids
(7670) round-trip through JSON.stringify as 7670.0, which Go's int64
fields reject with RPC error -32700. Normalize at the parse boundary so
profile/game/upload ids serialize correctly.

Also drop the nonexistent 'fresh' parameter from Fetch.ProfileOwnedKeys.
2026-08-05 22:08:24 -03:00
jose
5d686a5b02 Revert to threaded butlerd client; keep min-api 1.1.0; add InstallLocation stub 2026-08-05 20:43:32 -03:00
3132a5015a Initial commit 2026-08-05 17:27:43 -03:00