Commit Graph
179 Commits
Author SHA1 Message Date
LeoVasanko 8d3e872d41 More ignores. 2026-05-25 02:21:44 +00:00
LeoVasanko 3768967e7d BLE001 except Exception replaced for more specific types. 2026-05-25 02:19:41 +00:00
LeoVasanko 54a4b57230 Unsafe fixes. 2026-05-25 02:12:31 +00:00
LeoVasanko 95081ca50e Suppress useless families. 2026-05-25 02:07:38 +00:00
LeoVasanko 0e5251ab91 Ruff automatic fixes and formatting. 2026-05-25 01:57:17 +00:00
LeoVasanko 5f69b5365f Add strict ruff config. 2026-05-25 01:55:51 +00:00
LeoVasanko b835b82e94 Add ETag and 10-minute cache for /api/media 2026-05-24 22:39:29 +00:00
LeoVasanko 93d89e32e2 Handle ffmpeg probe non-zero exits separately 2026-05-24 19:59:12 +00:00
LeoVasanko eeb28e991f Use Windows Shell API for reliable Explorer file selection
Use SHParseDisplayName + SHOpenFolderAndSelectItems to open the parent folder and select files with special-character paths. Keep explorer.exe /n,/select as a fallback when the API path fails.
2026-05-24 19:32:36 +00:00
LeoVasanko 780f223b82 Fix uvicorn forcing SelectorEventLoop on Windows dev mode
Uvicorn's asyncio_loop_factory returns SelectorEventLoop on Windows
whenever reload=True (use_subprocess=True). SelectorEventLoop does not
support asyncio subprocess APIs, causing NotImplementedError in the app.

Fix: pass loop='none' so uvicorn respects the ProactorEventLoop policy
we configure, instead of overriding it. Also suppress the Py3.14
DeprecationWarning on the policy class itself.
2026-05-24 19:14:31 +00:00
LeoVasanko 8586bd26e1 Remove PWA/SW and fix blocking startup I/O
- Remove vite-plugin-pwa and all service worker code. The app no longer
  registers a service worker; legacy SWs are unregistered on load.
- Move snapshot parsing (thousands of sync Path.exists() calls) into a
  thread pool via asyncio.to_thread() so the health check responds
  immediately on startup.
- Wrap aiopathlib AsyncPath.iterdir() (sync os.scandir under the hood)
  in asyncio.to_thread() in scanner and scanning modules so directory
  walks do not monopolize the event loop.
2026-05-24 19:01:13 +00:00
LeoVasanko b574c974a7 Harden ffmpeg subprocess handling and Windows loop policy 2026-05-24 18:06:07 +00:00
LeoVasanko 94f2f10dcd Fix root path handling and release action menus 2026-05-24 17:40:55 +00:00
LeoVasanko 487e410a8f Remove scrollbar. 2026-05-24 02:49:57 +00:00
LeoVasanko 36fc2a77d9 feat: merge duplicate items across roots with combined releases
- Add root_id to Torrent type for per-torrent root tracking
- Merge movies: combine all torrents, keep best metadata, sort by quality
- Merge series: combine seasons/episodes/torrents across roots
- Torrents are quality-sorted (resolution, HDR, DV, Atmos) across all roots
- App.vue play/openFolder use torrent-specific root_id when available
2026-05-24 02:37:09 +00:00
LeoVasanko 06565f688c feat: deduplicate movies/series across roots in merged index
Items with the same content hash from multiple roots are now shown as a
single card. When duplicates exist, the item with the best metadata
(info, cover, backdrop, showreels, torrent count) is displayed.
2026-05-24 02:24:36 +00:00
LeoVasanko 4097c3c9ac ui: replace folder dropdown with full-screen settings view
- Change header icon from folder to settings cog
- Replace roots dropdown panel with full-screen settings overlay
- Keep media roots as the only setting section for now
2026-05-23 22:23:16 +00:00
LeoVasanko 9c75fa4569 refactor: remove legacy single-root APIs, defer filesystem I/O, enforce POSIX paths
- Remove legacy endpoints: /api/change-folder, /api/index, /api/scan, /api/status,
  /api/playback/resume-positions
- Remove legacy global scanner module-level API from hivescan/scanner.py
- Defer all filesystem validation to background task in server lifespan (macOS-safe)
- CLI and winmain pass raw paths via MEDIAHIVE_ROOTS; no pre-startup validation
- Enforce POSIX paths everywhere (as_posix(), no backslash leakage)
- Remove MEDIAHIVE_PATH and MEDIAHIVE_DEFER_INITIAL_ROOT env vars
- Update frontend api.ts to use per-root resume positions
- Update docs/API.md and docs/multi-index-plan.md
- Fix Python 2 style except clauses in hivescan/utils.py and scanning.py
2026-05-23 22:21:35 +00:00
LeoVasanko 2f83193ff4 fix: use html classes instead of :global() for input modality styles
The :global() pseudo-class in Vue scoped SFC styles was being mangled
by the Vue compiler, producing broken CSS that applied properties like
z-index and opacity directly to the <html> element and dropped the
intended component selectors entirely.

Replace the html[data-mouse-active] / html[data-pointer-visible] data
attribute approach with plain CSS classes (mouse-active, pointer-visible)
toggled on document.documentElement. In Vue scoped styles, prefixing a
selector with html.mouse-active or html:not(.mouse-active) compiles
correctly — the html part stays global while the component selector
receives the scoped attribute — avoiding :global() entirely.

This keeps all component styles inside <style scoped> and fixes the
layout breakage caused by the original commit.
2026-05-23 21:57:59 +00:00
LeoVasanko 79dc1b25cc Fix search exit flow and history behavior 2026-05-23 20:33:48 +00:00
LeoVasanko 0f404e5e53 Refine input modality to prevent hover/focus highlight conflicts 2026-05-23 18:58:53 +00:00
LeoVasanko 075f6a50cc fix: kill ffmpeg on cancellation and use POSIX paths everywhere
Bug 1 (shutdown hang):
- Add _kill_proc() helper to force-kill ffmpeg subprocesses immediately
  when a showreel generation task is cancelled or fails.
- Unlink the incomplete output file after killing the process.
- Applies to both generate_showreel_images() and generate_episode_reel().

Bug 2 (path inconsistency):
- Use .as_posix() instead of str() for all persisted and stored paths
  across the codebase (config, env vars, index store, API responses,
  torrent paths, playable files, cover images, episode reels, etc.).
- Ensures forward slashes are used exclusively even on Windows.

Files changed:
- mediahive/hivescan/showreel.py
- mediahive/server.py
- mediahive/hivescan/scanner.py
- mediahive/hivescan/scanning.py
- mediahive/hivescan/indexer.py
- mediahive/hivescan/images.py
- mediahive/hivescan/__main__.py
2026-05-23 18:36:43 +00:00
LeoVasanko 0b5c47f4d1 Normalize path search separators 2026-05-23 17:28:47 +00:00
LeoVasanko 169eb122b5 Improve media search ranking 2026-05-23 17:23:57 +00:00
LeoVasanko 7fbfb27d95 Normalize PTN scene tag edges 2026-05-23 17:12:41 +00:00
LeoVasanko 4ac40e3585 fix: more consistent synced row scrolling 2026-05-23 03:43:48 +00:00
LeoVasanko 52ce50e548 style(ui): refine release badge order, spacing, and palette 2026-05-23 03:21:17 +00:00
LeoVasanko b8e23587b8 feat(ui): refine source logos and normalize TV/CAM quality badges 2026-05-23 03:01:40 +00:00
LeoVasanko fbfe05588d feat(ui): show WEB provider logos from PTN network metadata 2026-05-23 02:41:08 +00:00
LeoVasanko 6820937a4b feat(ui): add DVD disc icon and strict disc-file logo rules 2026-05-23 02:17:45 +00:00
LeoVasanko c5d09c5177 feat(hivescan): add DVD indexing and metadata probing 2026-05-23 01:53:34 +00:00
LeoVasanko 00454f0929 fix(hivescan): prefer MovieObject and probe Blu-ray streams 2026-05-23 01:08:07 +00:00
LeoVasanko 6b74a6d308 feat(ui): add Blu-ray disc logo badge for disc releases 2026-05-23 00:38:27 +00:00
LeoVasanko 04aa858338 feat(ui): refine detail navigation and cast row layout 2026-05-22 21:20:05 +00:00
LeoVasanko 491e707b6f refactor(ui): anchor detail header darkening to reel geometry 2026-05-22 19:20:59 +00:00
LeoVasanko c3dee9bed9 feat(series): improve release popup navigation and controls 2026-05-22 18:48:34 +00:00
LeoVasanko a748adf87e feat(ui): redesign release card presentation 2026-05-22 18:26:29 +00:00
LeoVasanko e23ea7d14e defer GUI root activation until backend is running 2026-05-22 16:49:04 +00:00
LeoVasanko 155c5712c2 Prefer ffmpeg-derived resolution and normalize to SD/HD/FHD/4K/8K 2026-05-22 16:44:08 +00:00
LeoVasanko be140bc286 Simplify startup flow and defer media root activation 2026-05-22 16:30:19 +00:00
LeoVasanko 33b59bbace Improve mac startup splash UX and logo rendering 2026-05-22 15:36:38 +00:00
LeoVasanko 8d3de512eb Rename the winbuild script to guibuild.py. 2026-05-22 03:09:25 +00:00
LeoVasanko 0660b4e9d2 Use ffmpeg parsing for media probe metadata and remove ffprobe bundling 2026-05-22 03:08:36 +00:00
LeoVasanko 7eb81877fd Add Qt mac backend support, Safari/Chrome playback fixes, and AV1 reel updates 2026-05-22 01:39:28 +00:00
LeoVasanko eeed9f3ef7 Implement Safari video startup fixes and range streaming support 2026-05-21 04:06:44 +00:00
LeoVasanko 2e9928a411 Scope reel poster fallback to browser cards 2026-05-21 02:38:39 +00:00
LeoVasanko e40c953617 Movie details layout
- Grid layout: poster/releases left, cast spanning center+right top, versions center, metadata right
- Cast gallery moved to wider center column with photo-card grid (2:3 aspect, text overlay)
- Full cast now stored in index (removed 10-item truncation)
- Cast gender field added to metadata model, TMDB client, indexer, and frontend types
- Gender-specific cast placeholder SVGs (male suit silhouette, female portrait)
- Synopsis text moved from left poster box into right metadata card
- Format badge backgrounds made opaque (res/qual/codec/audio solid colors)
- Releases list moved under poster image in left column
- Cast photo and character font sizes reduced for compact display
2026-05-21 00:43:09 +00:00
LeoVasanko 7aeec90e4f Add slash key to access search. 2026-05-20 04:11:52 +00:00
LeoVasanko 98fbdc63f1 User-centric docs. 2026-05-20 04:09:01 +00:00
LeoVasanko ed37238122 Add screenshot to README 2026-05-20 03:33:09 +00:00