Commit graph

475 commits

Author SHA1 Message Date
KhooLy
6365ab189d Ad-hoc sign macOS release bundle
Some checks are pending
Warm Windows ANGLE Cache / warm-angle-cache (push) Waiting to run
2026-07-26 19:29:23 +03:00
KhooLy
a64e7d1450 Fix macOS libmpv portability check 2026-07-26 19:03:10 +03:00
KhooLy
6e11fc679a Release v0.1.29 with mpv gpu-next.17 2026-07-26 18:58:50 +03:00
KhooLy
267cf8b4a3 Refine player skip and next episode actions 2026-07-26 18:43:23 +03:00
KhooLy
e0d1d700d2 Add Trakt comments detail dialog 2026-07-26 18:32:06 +03:00
KhooLy
9fd5285eb7 Refresh continue watching after external sync 2026-07-26 18:03:07 +03:00
KhooLy
1c16719117 Fix continue watching sync and dismissal 2026-07-26 17:57:57 +03:00
KhooLy
5de8168bbf Complete external sync and calendar integration 2026-07-26 17:15:02 +03:00
KhooLy
52284c53f8 fix(windows): synchronize native player controls and status 2026-07-26 14:48:01 +03:00
KhooLy
64025232f9 fix calendar provider sync and presentation 2026-07-26 04:40:02 +03:00
KhooLy
f28c52c2d8 ci: validate bundled macOS libraries
Some checks are pending
Warm Windows ANGLE Cache / warm-angle-cache (push) Waiting to run
2026-07-26 03:42:55 +03:00
KhooLy
0c46c16001 Fix similar title source picker and Trakt results 2026-07-26 03:36:04 +03:00
KhooLy
f0e1a13fe8 Keep profile controls accessible during image selection 2026-07-26 03:22:41 +03:00
KhooLy
dd82614e57 Improve profile image pack selection 2026-07-26 03:18:56 +03:00
KhooLy
f357af0d9e Add profile picker customization and recommendation sources 2026-07-26 03:13:56 +03:00
KhooLy
e194041b3f Retry Trakt sync after authorization failures 2026-07-26 02:53:48 +03:00
KhooLy
7ae9919546 Fix mpv first-frame audio handoff 2026-07-26 02:36:00 +03:00
KhooLy
0136de4549 Improve external library sync settings 2026-07-26 02:24:25 +03:00
KhooLy
3e7b8d062e feat: add provider library sources and sync fixes 2026-07-26 01:09:30 +03:00
KhooLy
b9e7e6f805 Fix desktop OAuth callback handoff 2026-07-26 00:29:40 +03:00
KhooLy
4f21ab1566 fix: expose platform GL resolvers 2026-07-22 22:53:50 +03:00
KhooLy
dd8ab61eae fix: compile platform GL bindings 2026-07-22 22:20:03 +03:00
KhooLy
4eb0f54b8c fix: restore Windows and macOS builds 2026-07-22 21:41:47 +03:00
KhooLy
19b5b461a9 fix: sync generated core method list 2026-07-22 20:29:06 +03:00
KhooLy
aeadd2b81a feat: show addon uptime status 2026-07-22 18:48:31 +03:00
KhooLy
5ea0d04a13 refactor: split desktop player and engine modules 2026-07-22 18:46:44 +03:00
KhooLy
73b5c5c2ec Delegate desktop sync decisions to core 2026-07-22 16:56:22 +03:00
KhooLy
87d9739956 feat: organize plugin repositories 2026-07-22 02:16:12 +03:00
KhooLy
876c61bd73 feat: improve desktop calendar and plugins 2026-07-22 02:10:23 +03:00
KhooLy
f360c71be2 fix: stabilize Linux Vulkan playback 2026-07-22 01:07:53 +03:00
KhooLy
5c0ce696de open externalUrl streams in the browser without flashing the player
The external-stream check ran after showPlayerLoading had already
fired, so tapping a paywall/config-link stream card briefly opened the
player loading overlay before falling back to the browser. Moved the
check to the top of handlePlay, before any player UI state is touched.
2026-07-19 16:35:39 +03:00
KhooLy
0b693c3c57 pass the required unknownName arg to core's parseManifest
The TS wrapper never sent it, so every addon manifest fetch failed at
the FFI boundary with "missing field unknownName" before the manifest
body was even read.
2026-07-19 16:35:07 +03:00
KhooLy
df290f27c6 delegate anime-tracking detection and AniList matching to fluxa-core
Replaces the local regex-based detection heuristic and search-result
matching with calls into fluxa-core, so the same logic Android can now
also use isn't duplicated (or drifting) between platforms.
2026-07-18 23:52:35 +03:00
KhooLy
fdccb06183 delegate remaining screen and hook policy to fluxa-core
Continues the shared-core migration: addon sort/priority ordering and
disabled-addon filtering now route through fluxa-core instead of being
computed locally, alongside the broader policy delegation already
in flight across screens and hooks.
2026-07-18 23:38:19 +03:00
KhooLy
87f209d7fb use shared core business policies 2026-07-18 21:47:47 +03:00
KhooLy
dcbd7880e6 use native fullscreen on Linux 2026-07-18 21:09:47 +03:00
KhooLy
e054fd06bc delegate reusable policy to fluxa core 2026-07-18 21:05:30 +03:00
KhooLy
75c1b3a9d4 delegate library and playback policy to core 2026-07-18 20:18:06 +03:00
KhooLy
d3a001d193 Move Linux Vulkan rendering off the GTK main thread
The Vulkan render+present ran inside the 16ms glib timeout on the GTK
main thread — the same thread WebKit uses for overlay input — and FIFO
presents plus vkAcquireNextImageKHR (100ms timeout) blocked it for a
large slice of every frame, which made the React player overlay laggy
compared to the OpenGL path (which just draws into GTK's own FBO).
Windows and macOS already render on a dedicated thread; Linux now does
too. The GTK loop only publishes the surface size through atomics and
keeps the GDK/Wayland surface handles.

Also:
- prefer VK_PRESENT_MODE_MAILBOX_KHR when available so presents don't
  block on vsync at all
- take the player_renderer lock only around the mpv render itself, not
  across acquire/present, so overlay IPC (seek, status polls) no longer
  queues behind vsync waits
- on X11, create the Vulkan surface on a private XOpenDisplay connection;
  GTK never calls XInitThreads, so presenting over GTK's Display from
  another thread would race
- a load issued before the render thread has wired mpv's Vulkan render
  context is now deferred and retried instead of failing
2026-07-16 19:12:36 +03:00
KhooLy
a31ae053de Move business policy from the shell into fluxa-core
- nuvioSync.ts drops its in-TS import/merge policy (watchlist mapping,
  progress construction, watched reconciliation, savedAt bumps, profile
  and collection mapping) and now orchestrates pulls around
  nuvio* core methods, including the pending savedAt-bump behavior
- animeDetection.ts deleted: dead duplicate of core anime_detection,
  playback already used coreDetectAnimePlayback
- air-date refresh due-check, SIMKL scrobble stop threshold, and the
  torrent readiness budget now come from core instead of local constants
2026-07-16 18:53:51 +03:00
KhooLy
c1f36a7359 Route UpdateModal strings through i18n 2026-07-16 18:05:58 +03:00
KhooLy
a76674ee48 Recover swapchain state after a Vulkan render error
Bailing out between vkAcquireNextImageKHR and present left the acquire
semaphore with a pending signal and the image unpresented; the next frame
reused the semaphore in that state. On any render_and_present failure,
wait for the device to idle, recreate the binary semaphores, and rebuild
the swapchain.
2026-07-16 18:05:58 +03:00
KhooLy
cb059a6fcb Pin guarded fetches to the addresses vetted by net_guard
ensure_public_host checked DNS and then let reqwest re-resolve, so a
rebinding DNS entry could swap in a private IP between the check and the
request. vetted_client resolves once, validates every address, and pins
the connection to that set via resolve_to_addrs. Redirects to IP-literal
private hosts are refused as well. The shared artwork client goes away
since pinning is per-host.
2026-07-16 18:05:58 +03:00
KhooLy
4411d78580 Create storage key file with 0600 from the start
fs::write followed by set_permissions left a window where the key was
world-readable.
2026-07-16 18:05:43 +03:00
KhooLy
3f8368dbae Generate cast proxy tokens from the OS CSPRNG
RandomState hashes are seeded per-process but aren't a CSPRNG; the proxy
listens on all interfaces so the token is the only access control.
2026-07-16 18:05:43 +03:00
KhooLy
b04b8b830f Reject nuvio_request paths that don't start with /
A path like @evil.com turned the Supabase host into userinfo and sent the
anon key to an attacker-chosen host.
2026-07-16 18:05:43 +03:00
KhooLy
5a07658981 Interrupt runaway plugins and cap QuickJS memory
The 60s tokio timeout only fires at await points, so a plugin stuck in a
synchronous loop blocked its spawn_blocking thread forever. An interrupt
handler with the same deadline preempts synchronous execution too, and a
256MB memory limit stops unbounded allocation.
2026-07-16 18:05:43 +03:00
KhooLy
c08a9c610e Add missing i18n keys for render backend and player engine settings
Some checks failed
Warm Windows ANGLE Cache / warm-angle-cache (push) Has been cancelled
settings.render_backend(_desc) and settings.player_engine(_desc) were
referenced via t() but never added to either locale file, so the
hardcoded || fallback strings were silently used instead.
2026-07-15 19:38:34 +03:00
KhooLy
b2ad5e55ea Surface Nuvio sync errors in the settings UI
Previously sync failures were silently swallowed. Record errors into
NuvioSyncMeta on both the automatic and manual sync paths, and show
a "Sync error" status line in the sync service popover when present.
2026-07-15 19:36:14 +03:00
KhooLy
736b99313e Add stream/magnet link copy and download-from-context-menu
Adds a context menu on the player overlay and source rows to copy a
stream's direct/magnet link or trigger an offline download, backed
by a new stream_magnet_link command and a torrent-download resolver
that reuses (or starts) the torrent server on demand. Also refactors
start_torrent_stream's health-check into ensure_healthy_torrent_base_url
for reuse, and keeps the torrent server alive across stream stops so
downloads can still be resolved, tearing it down only on app exit.
2026-07-15 19:36:03 +03:00