Video: - Replace Qt Multimedia with mpv via python-mpv + OpenGL render API - Hardware-accelerated decoding, frame-accurate seeking, proper EOF detection - Translucent overlay controls in both preview and popout - LC_NUMERIC=C for mpv locale compatibility Popout viewer (renamed from slideshow): - Floating toolbar + controls overlay with auto-hide (2s) - Window auto-resizes to content aspect ratio on navigation - Hyprland: hyprctl resizewindowpixel + keep_aspect_ratio prop - Window geometry persisted to DB across sessions - Smart F11 exit sizing (60% monitor, centered) Preview toolbar: - Bookmark, Save, BL Tag, BL Post, Popout buttons above preview - Save opens folder picker menu, shows Save/Unsave state - Blacklist actions have confirmation dialogs - Per-tab button visibility (Library: Save + Popout only) - Cross-tab state management with grid selection clearing Search & pagination: - SearchState dataclass replaces 8 scattered attrs + defensive getattr - Media type filter dropdown (All/Animated/Video/GIF/Audio) - API retry with backoff on 429/503/timeout - Infinite scroll dedup fix (local seen set per backfill round) - Prev/Next buttons hide at boundaries, "(end)" status indicator Grid: - Rubber band drag selection - Saved/bookmarked dots update instantly across all tabs - Library/bookmarks emit signals on file deletion for cross-tab sync Settings & misc: - Default site option - Max thumbnail cache setting (500MB default) - Source URLs clickable in info panel - Long URLs truncated to prevent splitter blowout - Bulk save no longer auto-bookmarks
69 lines
1.3 KiB
Python
69 lines
1.3 KiB
Python
# -*- mode: python ; coding: utf-8 -*-
|
|
|
|
import sys
|
|
from PyInstaller.utils.hooks import collect_data_files, collect_submodules
|
|
|
|
block_cipher = None
|
|
|
|
hiddenimports = [
|
|
*collect_submodules('booru_viewer'),
|
|
'httpx',
|
|
'httpx._transports',
|
|
'httpx._transports.default',
|
|
'h2',
|
|
'hpack',
|
|
'hyperframe',
|
|
'PIL',
|
|
'PIL.Image',
|
|
'PIL.JpegImagePlugin',
|
|
'PIL.PngImagePlugin',
|
|
'PIL.GifImagePlugin',
|
|
'PIL.WebPImagePlugin',
|
|
'PIL.BmpImagePlugin',
|
|
'mpv',
|
|
]
|
|
|
|
a = Analysis(
|
|
['booru_viewer/main_gui.py'],
|
|
pathex=[],
|
|
binaries=[('mpv-2.dll', '.')] if sys.platform == 'win32' else [],
|
|
datas=[('icon.png', '.')],
|
|
hiddenimports=hiddenimports,
|
|
hookspath=[],
|
|
hooksconfig={},
|
|
runtime_hooks=[],
|
|
excludes=['textual', 'tkinter', 'unittest'],
|
|
noarchive=True,
|
|
optimize=2,
|
|
cipher=block_cipher,
|
|
)
|
|
|
|
pyz = PYZ(a.pure, cipher=block_cipher)
|
|
|
|
exe = EXE(
|
|
pyz,
|
|
a.scripts,
|
|
[],
|
|
exclude_binaries=True,
|
|
name='booru-viewer',
|
|
debug=False,
|
|
bootloader_ignore_signals=False,
|
|
strip=False,
|
|
upx=False,
|
|
upx_exclude=[],
|
|
console=False,
|
|
disable_windowed_traceback=False,
|
|
argv_emulation=False,
|
|
icon='icon.ico',
|
|
)
|
|
|
|
coll = COLLECT(
|
|
exe,
|
|
a.binaries,
|
|
a.datas,
|
|
strip=False,
|
|
upx=False,
|
|
upx_exclude=[],
|
|
name='booru-viewer',
|
|
)
|