100 Commits
Author SHA1 Message Date
najdek 6a47b858e0 chore: bump version to v0.6.1 and update changelog 2026-10-14 21:24:03 +02:00
najdek 71f983f4c5 Revert "refactor: remove kill disc player on startup functionality"
This reverts commit ba529e8917.

Restore the startup option, config persistence, API fields, and translated settings toggle while preserving later validation, atomic writes, HTTP response handling, and launcher changes. Use the validated shared process lookup and cover restored behavior with regression checks.
2026-10-14 21:17:08 +02:00
najdek fe5ca8121c bump version to v0.6.0, update docs 2026-10-14 01:26:17 +02:00
najdek 549b18ab09 feat(ui): omit official repository tag and truncate long source names 2026-10-14 01:12:02 +02:00
najdek 0803b69a7d fix: migrate legacy official repository payloads to payloads_v2.json layout 2026-10-14 00:43:37 +02:00
najdek 9270ee02fe docs: update DONATE.md 2026-10-13 23:52:59 +02:00
najdek 16266b5568 update default mirror url 2026-10-13 23:38:12 +02:00
najdek 0f636e854f Revert "feat: use icons.json alongside payloads.json without requiring icons_url"
This reverts commit fcccce15c9.
2026-10-13 23:26:23 +02:00
najdek aeb7b00e4c fix: update custom repository name when catalog name changes on refresh
Closes #92
2026-10-13 22:04:38 +02:00
najdek 34c3aebffa fix: kill payloads with SIGTERM first before SIGKILL
Closes #91
2026-10-13 22:04:34 +02:00
najdek 03ed81414a frontend: remove etaHEN and kstuff conflict check
Closes #98
2026-10-13 21:09:31 +02:00
najdek 605395276e docs: update README 2026-10-13 20:52:54 +02:00
najdek 17ef88d430 fix: preserve PS5 page size in host process fixtures 2026-10-13 20:52:12 +02:00
najdek b2626e6666 fix: update serializer fixture and remove Chrome checks from CI 2026-10-13 20:31:16 +02:00
najdek fcccce15c9 feat: use icons.json alongside payloads.json without requiring icons_url 2026-10-13 19:40:29 +02:00
najdek 7fcfd1a814 fix: stack notifications and preserve independent dismissal timers 2026-10-13 19:11:49 +02:00
najdek 586646dad7 fix: make dashboard payload cards clickable to their edges 2026-10-13 19:08:10 +02:00
najdek c81c5f12df fix: constrain payload details width and allow removing installed payloads 2026-10-13 19:05:18 +02:00
najdek 8d373c04a7 fix: format console sync times locally and refresh catalogs every three hours 2026-10-13 18:54:35 +02:00
najdek 9ccba6adab feat: redesign autoload progress and improve editor navigation 2026-10-13 18:43:34 +02:00
najdek 41b0c19ba5 feat: show payload metadata in launch overlay 2026-10-13 17:38:58 +02:00
najdek 626c463be6 Restore official self-updates with legacy launcher compatibility 2026-10-13 15:34:31 +02:00
najdek 9e6c5918a7 feat: cache repository icon catalogs separately 2026-10-13 13:20:02 +02:00
najdek a5a1760070 docs: align project contracts and retire unused stats 2026-10-13 11:28:47 +02:00
najdek 23b4a24407 fix: harden offline markdown rendering and complete locale coverage 2026-10-13 11:11:34 +02:00
najdek d0524c7f08 fix: own frontend save queues and enforce quality gates 2026-10-13 01:53:27 +02:00
najdek 345a78ec63 fix: preserve ordered SSE logs and wake streams on shutdown 2026-10-13 01:13:42 +02:00
najdek 197c9d765b fix: validate process snapshots before listing or startup lookup 2026-10-13 00:58:08 +02:00
najdek 9bd3dfdd1d fix: wait for autoload configuration before editing or saving 2026-10-13 00:44:15 +02:00
najdek c47b725344 fix: synchronize autoload lifecycle and bound loader transfers 2026-10-13 00:08:13 +02:00
najdek ab82dbf05e fix: validate partial settings and synchronize persistent edits and history 2026-10-12 23:23:19 +02:00
najdek 1ee6a61bc2 fix: protect browser mutations and preserve LAN clients 2026-10-12 23:03:58 +02:00
najdek dfc3ce20a6 fix: verify downloads and constrain payload execution paths 2026-10-12 21:51:20 +02:00
najdek 59adaa0fa3 fix: publish storage slots safely and recover interrupted commits 2026-10-12 21:11:49 +02:00
najdek 5c04204f97 fix: bound collection growth and propagate allocation failures 2026-10-12 19:49:45 +02:00
najdek 45be5c6cd7 fix: reject incomplete JSON and bound serializer output 2026-10-12 19:37:53 +02:00
najdek 3c42e3cf0e fix: bound JSON extraction and decode Unicode escapes 2026-10-12 18:48:23 +02:00
najdek 0d39bd5cf4 fix: preserve Unicode and complete escapes in JSON encoding 2026-10-12 18:02:02 +02:00
najdek 608d7fa5f2 fix: clean up terminated HTTP requests and bound autoload lists 2026-10-12 17:54:16 +02:00
najdek 9b863e8020 fix: release HTTP responses and report allocation failures 2026-10-12 17:09:40 +02:00
najdek 60ac0bb988 fix: integrate external link modal with history navigation to prevent exiting page on back button 2026-10-12 03:23:10 +02:00
najdek 9e4978dc2c fix: constrain README width, add link confirmation modal and support non-GitHub sources 2026-10-12 03:10:07 +02:00
najdek 27541b197f fix: include source in repository payload JSON to enable README fetching
- Serialize source and source_direct in /repository_payloads JSON response
- Serialize source and description in /list_payloads for installed repository slots
- Add source_direct fallback for repository URL resolution in PayloadDetailPanel
2026-10-12 03:00:26 +02:00
najdek 8c627657fa fix: visual indication during payload install and live status update in details panel
- Add installing/updating button loading states with spinner in PayloadDetailPanel
- Prevent abrupt modal and detail dismiss on install click
- Dynamically resolve statusInfo to reflect installed state immediately upon completion
- Add Installed badge in details screen header
- Resolve friendly repository names for 'Also installed from <repo name>' and conflict dialogs instead of raw URLs
- Populate fallback repository name during slot metadata load and legacy migration
2026-10-12 02:53:55 +02:00
najdek dd29218f06 fix: resolve stack overflow crash during repository install and improve DNS failure resilience 2026-10-12 02:36:59 +02:00
najdek e3362e3527 feat: restrict repository icons to inline data URIs and document specifications 2026-10-12 02:22:47 +02:00
najdek ba529e8917 refactor: remove kill disc player on startup functionality
- Remove disc player termination call from daemon startup in main.c
- Remove ps5_kill_disc_player, get_pid_by_name, and unused LncUtil externs
- Remove KILL_DISC_PLAYER_ON_STARTUP from config storage and HTTP endpoints
- Remove Kill Disc Player toggle row from SettingsView
2026-10-12 01:40:09 +02:00
najdek 265c827e7f feat(frontend): redesign autoload view layout, card styling, and instant sync
- Place Available Payloads on the left and Autoload Sequence on the right
- Style payload cards in both columns to match dashboard (icons, badges, and title scroll on focus)
- Wrap available payloads in matching glass-panel container with visible borders
- Remove subtitle from Add Delay card
- Reduce top and bottom margins on autoload view to fill viewport cleanly
- Implement instant configuration saving with keepalive and pagehide/beforeunload sync
2026-10-12 01:33:55 +02:00
najdek e23c017961 style(frontend): compact dashboard payload card spacing and center row items vertically 2026-10-12 00:51:55 +02:00
najdek fec2928b14 fix(frontend): dismiss modals and exit dashboard modes on back button 2026-10-12 00:51:42 +02:00
najdek a1c152a203 feat: persist dashboard favorites in backend across all browsers
- Store favorites in /data/pldmgr/favorites.txt on backend
- Return FAVORITES and FAVORITES_INITIALIZED in /get_config
- Parse and save FAVORITES in /set_config POST handler
- Automatically update/remove favorites entries on slot delete, replace, and legacy migration
- Sync favorites state from backend in frontend on startup and persist updates
- Include one-time migration from localStorage for existing clients
2026-10-12 00:06:09 +02:00
najdek fde985c7d8 feat(frontend): display repository source badge under version on dashboard
- Move repository badge to a new line under version and author
- Style with matching badge aesthetics as version pill
- Replace "Manual" badge for local/manual payloads with "Other Source"
- Remove legacy absolute bottom-right placement to prevent overlaps
2026-10-11 23:56:39 +02:00
najdek 125d628dd0 chore: remove translations submodule and add TRANSLATIONS.md
- Remove frontend/src/locales git submodule and track translation files directly
- Credit JensJ56 for Dutch translation
- Move supported languages and past translator credits to TRANSLATIONS.md
- Document that translations since v0.6.0 are generated via Google Gemini AI
- Add issue reporting link for translation feedback
2026-10-11 23:37:56 +02:00
najdek 37f5b3b6cf fix(installer): recursively create app directories for fresh systems
On clean PS5 systems with no prior apps or games installed, /user/app does not exist yet, causing direct mkdir() on /user/app/<title_id> to fail with ENOENT (errno: 2).

Use recursive mkdir_p to create the required directory tree (/user/app/<title_id>/sce_sys).

Resolves #108
2026-10-11 23:12:30 +02:00
najdek aedf1bf31a Merge pull request #109 from kianborg/fix/repository-timeout-autoload 2026-10-11 23:07:05 +02:00
najdek 098f1c3a47 refactor: remove self-update mechanism and exclude pldmgr from repo listings
- Remove startup self-update check and chainloading in main.c
- Remove self-update logic and ELF version inspection from repository.c and repository.h
- Neuter /update_check route to return status none
- Remove update banners, notifications, and settings toggle from frontend
- Exclude pldmgr from repository payload listings and block installing pldmgr as a payload
- Add launch guards in HTTP server and autoload worker preventing pldmgr self-execution
2026-10-11 23:04:18 +02:00
najdek bb9deccc7e fix(frontend): resolve PS5 WebKit onload popstate exit and add runtime polyfills
- Ignore WebKit initial onload popstate on root dashboard to prevent premature exit
- Add polyfills for RegExp named capture groups, Array/String at, replaceAll, and queueMicrotask
- Add top-level React ErrorBoundary and window error diagnostic overlays
- Configure Vite/Terser for safari10/11 compatibility and keep console errors
- Defensively guard version formatting, URLs, and favorite move directional arrows
2026-10-11 18:27:57 +02:00
najdek 13a034175f feat: redesign payload storage with managed slots and stable identifiers
- Implement managed slot layout: repo/<id>@<srchash8> and local/<key> with meta.json sidecars
- Decouple user uploads and USB imports from repository matching and updates
- Use stable slot keys for autoload.txt, favorites, launching, and deletion
- Add strict token-based version comparison in C and JS, hiding install button when repo is older
- Support cross-source duplicate handling (keep both vs replace) with conflict modals
- Auto-refresh stale repository caches on install and retry seamlessly
- Implement one-time legacy storage migration on startup (layout version 2)
- Update CUSTOM_REPOSITORIES.md with id field specifications and comparison rules
- Remove deprecated /repository_push and /repository_install_push routes
- Add full test suite for versions, payloadStatus, helpers, and markdown
2026-10-11 11:33:31 +02:00
najdek 9b4c73168e feat(frontend): overhaul Get Payloads grid, detail view, and add URL state persistence
- Redesign Get Payloads grid into wide 3-column cards with icon on left, version top-right, dynamic title width, max 3-line description, and bottom-right installed checkmark

- Overhaul Payload Details panel with hero header, compact action button, author, repository link, short description, and raw GitHub README rendering with stripped images

- Implement URL hash state persistence and hierarchical history navigation for views and deep payload links (#/payload/:filename?src=:id)

- Add unit test suite for history navigation and route parsing

- Update locales submodule pointer with new detail view translations
2026-10-10 23:38:55 +02:00
najdek 8e395dca4d feat(frontend): implement PS5 browser back button history navigation
- Port history navigation strategy from pkg-manager to prevent PS5 Circle button from exiting browser
- Seed baseline history stack with Dashboard at root entry 0
- Navigate between top-level pages via replaceState so Back always returns directly to Dashboard
- Allow deep sub-views (Sources under Settings, Move from USB under Storage) to pop back to parent views
- Intercept modal/panel closures (confirmations, downloads, logs, payload details, dashboard edit modes) on Back press
- Exit browser via window.close / history.back only when Back is pressed from Dashboard root
2026-10-10 22:28:57 +02:00
najdek dea099432a feat(ui): redesign Get Payloads section header and controls 2026-10-10 22:16:43 +02:00
najdek eb4795b1b1 fix(ui): allow clicking anywhere on payload button to delete in manage mode 2026-10-10 22:00:10 +02:00
najdek e4e72dc9d8 Bump version to 0.5.2 2026-09-29 12:30:50 +02:00
najdek 8fd3212ec5 fix: resolve minor ui and backend validation issues
This addresses the remaining minor issues outlined in ISSUES.md.

- Extracted remaining hardcoded English strings into i18n locales

- Fixed stale state and implemented lazy-loaded images in PayloadDetailPanel

- Revived 'installed' payload state in StorageHub by no longer filtering them out

- Fixed event propagation bug in dashboard manage mode where clicking anywhere triggered delete

- Hardened C backend 'is_pldmgr_filename' to strictly match pldmgr prefixes, preventing false positives
2026-08-10 18:32:42 +02:00
najdek 675a1df0ef chore(i18n): update locales submodule 2026-08-10 18:11:22 +02:00
najdek 8534a75584 feat(ui): add update notifications toggle to settings
This addresses the missing UI toggle for the SHOW_UPDATE_NOTIFICATIONS config key.

- Added toggle to SettingsView under Startup section

- Wired toggle state directly to the config file via /set_config

- Included i18n keys for the new settings labels
2026-08-10 18:11:13 +02:00
najdek 701ac66f9b fix(ui): inject dashboard icons and metadata from repository context
This addresses the issue where dashboard payloads lacked icons.

Instead of passing the icon through the C backend's payload list, this leverages the existing `RepositoryContext` remote catalog.

- Wrapped the root `App` in `RepositoryProvider` inside `main.jsx`.

- Added `filenameMap` to `RepositoryContext` to build a fast O(1) lookup map of all payload metadata across sources.

- Injected the map data directly into Dashboard `PayloadButton` cards.
2026-08-10 18:01:08 +02:00
najdek b1f4fa0044 fix(core): resolve critical json parsing and self-update issues
This addresses the top two critical issues identified in ISSUES.md.

Backend C Fixes:

- Added `skip_top_level_wrapper()` and `find_next_object_start()` to `repository.c` to correctly parse payloads even when wrapped in a top-level JSON object or containing stringified braces.

- Updated `repository_check_self_update` and `repository_check_repo_update` to return full version, filename, and source metadata required by the frontend.

Frontend React Fixes:

- Updated the `App.jsx` update banner to properly consume the API contract.

- Added a functional `handleApplyUpdate` to load the downloaded self-update elf.

- Added a functional `handleInstallUpdate` to trigger repository installation when a new version is available.
2026-08-10 17:42:32 +02:00
najdek 56c7a7e0bf perf(ui): optimize payload icons and refine text marquee behaviors
- Removed heavy CSS shadows from payload icons for smoother scrolling

- Implemented dual-element approach for payload name marquee animations

- Re-labeled manage view to 'Remove Payload' when active
2026-08-10 16:02:51 +02:00
najdek 087093a872 fix(ui): center short payload names in repository grid 2026-08-10 15:57:40 +02:00
najdek cb3fbf4716 feat(repository): overhaul payload repository to app store experience
This commit completely redesigns how users browse, view, and install payloads.

Backend C Changes:
- Updated C structures to support multiple concurrent payload sources (config.h, repository.h).
- Modified repository.c and config.c to parse and retain multi-source JSON payloads.
- Allowed the HTTP server to serve the dynamically merged JSON sources.

Frontend React Changes:
- Converted StorageHub.jsx into a grid-based "App Shop" catalog layout.
- Replaced the modal payload view with a seamless full-page PayloadDetailPanel.jsx component for extended markdown reading and details.
- Added RepositoryContext.jsx to unify repository fetching across views.
- Styled payload cards with a dynamic marquee animation for overflowing text names (PayloadName.jsx).
- Allowed external icons, with a fallback placeholder for payloads without one.
- Polished padding, margins, and transition effects for spatial controller navigation.
- Removed duplicate versioning strings in payload titles and tweaked dashboard header text.
2026-08-10 15:56:38 +02:00
najdek 218f291d0e docs: fix crowdin badge IDs after adding new language 2026-08-06 10:07:33 +02:00
najdek eaa2d0a884 bump version to v0.5.1 and update changelog 2026-08-02 15:06:54 +02:00
najdek 38125c9123 i18n: update translations 2026-08-02 15:05:55 +02:00
najdek 0e09431349 frontend: fix race condition when killing processes (#79) 2026-07-23 22:50:15 +02:00
najdek bb6a425bf0 bump version to v0.5.0 and update changelog 2026-07-21 22:50:31 +02:00
najdek 3d3721e523 update translations and readme 2026-07-21 22:46:40 +02:00
najdek 3b15b5ca26 feat: Add payload launch indicator
Introduces a visual indicator to help track payloads launched during the current session.

Backend:
- Create history_mgr.c to track the last 20 launched payload paths
- Log payloads in ps5_launcher.c upon successful launch
- Add /history_list API endpoint to expose the launch history
- Update Makefile

Frontend:
- Fetch and poll /history_list in App.jsx to maintain launch history state
- Add isLaunched prop to PayloadButton.jsx to render a checkmark indicator

Closes #44
2026-07-21 22:19:50 +02:00
najdek 8195cd0c0f i18n: rename All Payloads to Others 2026-07-21 20:51:10 +02:00
najdek d84dcc41e0 i18n: update translations 2026-07-21 20:04:34 +02:00
najdek 19cbde2912 bump version to 0.4.2 and update changelog 2026-07-20 21:56:07 +02:00
najdek 312dbb5b8b i18n: add new translations 2026-07-20 21:52:51 +02:00
najdek 1174447254 Merge branch 'fix/frontend-build-missing-locales' 2026-07-20 20:46:32 +02:00
najdek 45f411c9a8 i18n: sync latest translations and update supported languages
- Update `frontend/src/locales` submodule to pull in the latest translations from Crowdin
- Add translators for newly supported languages: German, Persian, and Ukrainian to README
- Fix Crowdin badge URLs for Italian, Portuguese (Brazilian), and Russian which shifted after adding Persian
2026-07-20 20:32:43 +02:00
najdek 7b454e6164 bump version to 0.4.1 and update changelog 2026-07-20 01:09:11 +02:00
najdek 1c1eda870f i18n: add new translations 2026-07-20 00:58:17 +02:00
najdek dabd5dfde7 i18n: add translations for default repository categories 2026-07-19 18:25:57 +02:00
najdek e5997d968e docs: update README.md 2026-07-19 17:43:11 +02:00
najdek 1a73d1e8bc bump version to 0.4.0 and update changelog 2026-07-19 17:16:20 +02:00
najdek b88336f8ed i18n: enable automatic browser language detection
The app will now automatically detect and use the user's browser language on first load. We can safely do this since only high-quality languages (70%+ translated) are enabled anyway.
2026-07-19 16:57:02 +02:00
najdek 09f9f41d6b i18n: update translations 2026-07-19 16:43:28 +02:00
najdek 18111a65d0 docs: add translator credits and progress badges to README 2026-07-19 14:24:04 +02:00
najdek 6baaa76a96 i18n: standardise "Installation failed" fallback string 2026-07-19 13:41:33 +02:00
Mateusz Najdek 915e643f97 Merge pull request #66 from owendswang/fix/static-third-party-linking
build: link third-party dependencies statically
2026-07-19 03:37:10 +02:00
Mateusz Najdek 4a7f3c9204 docs: Add translation guidelines to README
Added translation guidelines for community contributions.
2026-07-19 03:29:06 +02:00
najdek 832fab5950 feat: introduce multi-language support (i18n)
Introduces a complete localization system using i18next, enabling the application to be translated into multiple languages by the community via Crowdin.

Key additions:
- Core i18next integration with English as the default base language.
- A language selector in the Settings menu for users to easily switch languages.
- Full UI localization, including support for complex grammar rules (e.g., dynamic pluralization) and responsive text layouts.
- A dedicated `locales` git submodule to seamlessly sync community-driven translations.
- Automatic filtering of incomplete languages (under 70% translated) to ensure a high-quality user experience.

Note:
This implementation currently applies exclusively to the frontend web UI. Native PS5 system notifications (triggered by the backend C code) remain in English and are not yet covered by this localization system.
2026-07-19 03:11:12 +02:00
Mateusz Najdek a0fcc0c742 docs: update CHANGELOG.md 2026-07-17 19:09:26 +02:00
najdek 1f90d9f1ce docs: update CHANGELOG.md for v0.3.3 release 2026-07-17 18:16:25 +02:00
najdekandlucaszhongsj 5d91c61b8f fix(frontend): use version field from repository payloads
When a repository payload explicitly defines a version, use it instead of trying to guess the version out of the filename.

Closes #60

Co-authored-by: lucaszhongsj <20980720+lucaszhongsj@users.noreply.github.com>
2026-07-17 18:00:19 +02:00
najdekandlucaszhongsj 1eb4e4b556 feat: move launcher icon to Media category
Sets applicationCategoryType to 65536 so the app appears in the Media tab rather than the Games tab on the PS5 home screen.

Closes #62

Co-authored-by: lucaszhongsj <20980720+lucaszhongsj@users.noreply.github.com>
2026-07-17 17:51:01 +02:00