123 Commits

Author SHA1 Message Date
pax
9518f95a3c Clear preview only when the previewed post is blacklisted
Compare cached file path to determine if the right-clicked post
is the same one being previewed before clearing.
2026-04-05 13:49:20 -05:00
pax
df40a15093 Remove restart required from library directory label 2026-04-05 13:43:22 -05:00
pax
ed91f35975 Live settings apply — no restart needed for most settings
Infinite scroll, library dir, thumbnail size, rating, score
all apply immediately when saving settings.
2026-04-05 13:40:09 -05:00
pax
7115d34504 Infinite scroll mode — toggle in Settings > General
When enabled, hides prev/next buttons and loads more posts
automatically when scrolling to the bottom. Posts appended
to the grid, deduped against already-shown posts. Restart
required to toggle.
2026-04-05 13:37:38 -05:00
pax
78b7215467 Fix page label not updating when loading from cache 2026-04-05 13:28:15 -05:00
pax
63292aa9ba Cache page results — prev/next loads instantly from memory
Each page's results cached per search session. Going back to a
previous page loads from cache instead of re-fetching. Cache
cleared on new search.
2026-04-05 13:25:32 -05:00
pax
5bfc086931 Deduplicate posts across pages — backfilled posts don't repeat
Track shown post IDs across pages. Posts pulled from next page
via backfill won't appear again when navigating to that page.
Reset on new search.
2026-04-05 13:18:44 -05:00
pax
cd4efbcc45 Add backfill debug logging 2026-04-05 13:09:47 -05:00
pax
e515c19d05 Don't clear preview on blacklist — just re-search
Blacklisting a tag or post no longer clears the preview of an
unrelated post. The search reloads and the blacklisted post
simply disappears from the grid.
2026-04-05 13:05:17 -05:00
pax
396c008e9f Start prefetch from top on search, re-centers on post click 2026-04-05 12:59:58 -05:00
pax
e91d7d8a51 Prefetch in all 8 directions (ring expansion) not just linear
Expands outward in a grid-aware ring: left, right, up, down,
and all 4 diagonals at each distance level. Covers the page
more evenly.
2026-04-05 12:57:46 -05:00
pax
2156dec91d Spiral prefetch: gradually preloads entire page from clicked post
Expands outward from the selected post (±1, ±2, ±3...) with
200ms pacing between each download. Already-cached files skip
instantly. Setting renamed to "Prefetch whole page over time".
2026-04-05 12:47:57 -05:00
pax
09c4f56cbb Shorten prefetch checkbox label 2026-04-05 12:42:56 -05:00
pax
9df3009a94 Sync video player state between preview and slideshow, fix skip
- Mute, volume, autoplay, loop state synced on slideshow open/close
- Loop restart detection requires position > 80% of duration to
  prevent false triggers on new video loads
2026-04-05 05:51:43 -05:00
pax
40ded871cc Fix last video skipping in Next mode
Reset _last_pos on play_file so a new video starting at 0
doesn't trigger the loop-restart detection from the previous
video's high position.
2026-04-05 05:47:29 -05:00
pax
76c25aa892 Custom QProxyStyle for visible arrows on dark themes, widen Library btn
- QProxyStyle overrides drawPrimitive to draw arrow triangles in
  the theme's text color (extracted from QSS)
- Works for spinbox up/down and combobox dropdown arrows
- Cross-platform, no SVG resources needed
- Library button widened to 80px to prevent text clipping
2026-04-05 05:38:34 -05:00
pax
0ec72f41fa Fix spinbox/combobox arrows under custom QSS
Extract text and background colors from QSS and set palette roles
(ButtonText, WindowText, Button) so Fusion draws arrows in the
correct color. Removed broken spinbox button overrides from themes.
2026-04-05 05:32:53 -05:00
pax
32f67cb57c Remove injected spinbox fix, add spinbox styling to bundled themes
Each theme now has its own QSpinBox button styling matching
its color scheme. No more injected CSS hacks.
2026-04-05 05:28:52 -05:00
pax
24146d49db Fix spinbox arrows under custom QSS
Inject CSS triangle arrows using palette(text) color when the
user's QSS doesn't already style QSpinBox buttons.
2026-04-05 05:27:41 -05:00
pax
fefc8c7fd5 Remove old custom_css_guide.txt — replaced by themes/README.md 2026-04-05 05:24:42 -05:00
pax
059b24d255 Revert Nerd Font glyph buttons and button width changes
Reverts 4 commits: Nerd Font detection, icon properties, lazy
detection, and hardcoded width removal. Not ready for stable.
2026-04-05 05:21:53 -05:00
pax
fb6a524868 Fix missing Property import in preview.py 2026-04-05 05:20:17 -05:00
pax
892c2aa60f Fix Nerd Font detection (codicon range), QSS-targetable icon properties
- Use codicon codepoints (eb7c etc.) which exist in Terminess/Nerd Fonts
- All icons overridable via QSS: qproperty-playIcon, qproperty-pauseIcon,
  qproperty-muteIcon, qproperty-unmuteIcon on VideoPlayer
- Lazy detection after QSS is applied
2026-04-05 05:18:26 -05:00
pax
0e092b2b93 Lazy Nerd Font detection — runs after QSS is loaded
Detection deferred to first play_file call so the widget's font
(including QSS overrides) is checked instead of the default font.
2026-04-05 05:14:08 -05:00
pax
7b6c325bdb Nerd Font glyph buttons, remove hardcoded button widths
Auto-detects if app font has Nerd Font glyphs. If yes, uses
unicode icons for Play/Pause/Mute/Loop/etc. Falls back to text.
Removed all setFixedWidth on buttons so QSS can control sizing.
2026-04-05 05:06:36 -05:00
pax
915afb41df Ctrl+P privacy screen works from slideshow window 2026-04-05 04:52:48 -05:00
pax
1cc7bc06c1 Privacy screen hides slideshow and pauses video, update keybinds
- Ctrl+P now hides slideshow window and pauses all video playback
- Slideshow restored when privacy screen is toggled off
- README keybinds: arrow keys + hjkl for preview navigation
2026-04-05 04:48:41 -05:00
pax
5c3995f5d6 Fix right-click: select visually without activating preview
Right-click selects the thumbnail (border highlight) but doesn't
trigger post_selected/activated, so preview stays on current post.
Added hover border highlight. Removed _last_activated_index guard.
2026-04-05 04:30:40 -05:00
pax
05e19ee957 Clear preview on blacklist, right-click doesn't change selection
- Blacklisting a tag or post clears the preview
- Right-click shows context menu without selecting/activating post
2026-04-05 04:25:05 -05:00
pax
fad6ab65af Fix video thumbnails (ffmpeg with placeholder fallback), fix right-click restart
- Video thumbnails: try ffmpeg, fall back to play icon placeholder
- Right-click no longer restarts video playback on same post
- Reset activated index on new search
2026-04-05 04:21:48 -05:00
pax
85ec13bf7c Fix video thumbnail capture for new files
Add audio output (muted) so QMediaPlayer decodes frames.
Add capture guard and timeout cleanup.
2026-04-05 04:18:12 -05:00
pax
660abe42e7 Replace ffmpeg with Qt-native video thumbnails
Use QMediaPlayer + QVideoSink to grab the first frame instead
of shelling out to ffmpeg. Removes ffmpeg as a dependency entirely.
2026-04-05 04:16:38 -05:00
pax
a2302e2caa Add missing defaults, log all caught exceptions
- Add prefetch_adjacent, clear_cache_on_exit, slideshow_monitor,
  library_dir to _DEFAULTS for fresh installs
- Replace all silent except-pass with logged warnings
2026-04-05 04:01:35 -05:00
pax
08c961ba80 Configurable slideshow monitor in Settings > General
Dropdown lists all monitors. Default: same as app window.
Select a specific monitor to always open slideshow there.
2026-04-05 03:55:47 -05:00
pax
385acc2a0a Force slideshow to open on same monitor as main window 2026-04-05 03:51:33 -05:00
pax
eede01ff51 Only show Autoplay/Manual button when Next mode is selected
Autoplay is irrelevant for Loop and Once — only matters when
videos auto-advance to the next post.
2026-04-05 03:49:59 -05:00
pax
adeb318131 Set minimum size on slideshow window to prevent squishing 2026-04-05 03:46:05 -05:00
pax
48fec74dcd Populate info panel on first slideshow open 2026-04-05 03:43:41 -05:00
pax
d8b28152f6 Hide preview and expand info panel when slideshow is open
Preview widget hidden (not just cleared), info panel expands to
fill the space. Splitter sizes saved and restored on close.
2026-04-05 03:40:44 -05:00
pax
e0f54a963d Show info panel with tags in preview area while slideshow is open
Auto-shows the info panel when slideshow opens (filling the empty
preview space with tags and post details). Restores previous
visibility state when slideshow closes.
2026-04-05 03:37:03 -05:00
pax
b8033c41e1 3-way Loop/Once/Next cycle, cleaner Autoplay/Manual labels
- Loop: repeat forever
- Once: play once, stop at end
- Next: play once, advance to next post
- Autoplay/Manual labels for auto-start toggle
- Document :checked state in themes/README.md
2026-04-05 03:31:58 -05:00
pax
0362256bbd Manual mode pauses at end of current video instead of restarting 2026-04-05 03:27:00 -05:00
pax
78f2dc030f Fix Loop/Next: use position detection instead of EndOfMedia
EndOfMedia doesn't fire reliably with setLoops(1). Instead,
use Infinite loops and detect the loop restart via position
jumping from near-end back to 0. Pause and emit play_next
when in Next mode. Toggle takes effect immediately.
2026-04-05 03:22:18 -05:00
pax
68e04776b1 Loop/Next toggle takes effect immediately during playback
Use manual looping via EndOfMedia instead of QMediaPlayer.Loops.Infinite
so toggling mid-playback works without waiting for next video.
2026-04-05 03:19:22 -05:00
pax
192397f1ec Pre-release fixes for v0.1.5
- Fix Library slideshow navigation (was falling through to Browse)
- Fix bookmarks import signal using wrong variable name
- Fix "Favoriting" status message → "Bookmarking"
- Rename FavThumbSignals → BookmarkThumbSignals
- Update README: all Favorite→Bookmark, add Library section
- Add Library tab to keybinds documentation
2026-04-05 03:13:00 -05:00
pax
c26d9a64f9 Space to pause/play video when hovering over preview
Uses keyPressEvent on main window — only fires when no text
input has focus (search bar consumes Space itself). Checks
underMouse() so it only works when hovering the preview.
2026-04-05 03:06:47 -05:00
pax
d4ee2b2ec1 Fix video position not restoring on slideshow close
Emit closed signal before stopping video so the position
can be read in _on_fullscreen_closed.
2026-04-05 03:00:44 -05:00
pax
558c07877b Add button to manually add blacklisted post URLs
Supports pasting multiple URLs at once (space or newline separated).
2026-04-05 02:54:28 -05:00
pax
781f03e85b Show warning when library is empty or unreachable
Covers both unmounted drives (dir exists but empty) and
missing directories with red warning text.
2026-04-05 02:50:10 -05:00
pax
4ffc2afc84 Show "Library directory unreachable" when path is gone
Detects missing/unreadable library dir on refresh and shows
red warning text instead of blank grid.
2026-04-05 02:45:24 -05:00