Fix pre-existing player issues: edit upload paths, playlist sync, DPI, console

src/edit_popup.py: pass and reproduce the server-side edited-media layout
('edited_media/<media_id>/') when saving an edit, falling back to the flat
folder when no media id is available, so uploads land where the server expects.

src/get_playlists_v2.py: preserve every server field (audio, muted, description,
id, position, ...) when rewriting playlist items, instead of rebuilding fixed
dicts that silently dropped them. Web-link items keep their original http(s) url
and are never downloaded.

windows/pyi_runtime_hook.py: declare per-monitor DPI awareness before SDL/Kivy
initialise, so on a scaled display the window is not virtualised to a smaller
resolution (which left a black strip and mis-scaled media).

windows/build_win.bat: optional code signing step for PCs with Smart App Control
enabled, driven by KIWY_SIGN_PFX / KIWY_SIGN_PFX_PASSWORD or a local
kiwy_signing.pfx.

windows/build.spec, windows/README_WINDOWS_BUILD.md, windows/development-track.md:
build notes and manifest updates.
This commit is contained in:
ske087
2026-09-10 16:44:04 +03:00
parent 6dc79828bc
commit a0704efa3c
6 changed files with 228 additions and 32 deletions
+33
View File
@@ -10,6 +10,37 @@ import sys
import platform
from pathlib import Path
def _set_process_dpi_awareness():
"""Declare per-monitor DPI awareness BEFORE SDL/Kivy initialize.
On a display scaled above 100% (e.g. 1920x1080 @ 125%), Windows
virtualizes a non-DPI-aware app to the scaled-down size (1536x864).
Kivy then sizes its content area to the virtualized resolution, leaving a
black strip on one side and making images/videos render at the wrong size.
Must run before any SDL window is created, so this lives in the runtime
hook (the first Python code that runs in the frozen app).
"""
try:
try:
aware = ctypes.c_int(2) # PROCESS_PER_MONITOR_DPI_AWARE_V2
ctypes.windll.shcore.SetProcessDpiAwareness(aware)
return
except Exception:
pass
try:
ctypes.windll.user32.SetProcessDPIAware()
return
except Exception:
pass
except Exception:
pass
if platform.system() == 'Windows':
import ctypes
_set_process_dpi_awareness()
# ── IMPORTANT: Set Windows environment BEFORE any Kivy code runs ──
# This must happen before main.py's top-level code executes, because
# main.py sets SDL_VIDEODRIVER=wayland,x11,dummy which would crash on Windows.
@@ -23,6 +54,8 @@ os.environ['FFPYPLAYER_CODECS'] = 'h264,h265,vp9,vp8'
os.environ['SDL_VIDEO_ALLOW_SCREENSAVER'] = '0'
os.environ['KIVY_NO_FILELOG'] = '1'
os.environ['KIVY_INPUTPROVIDERS'] = '' # Let Kivy auto-detect on Windows
# Use native physical pixels (fixes black strip on DPI-scaled displays).
os.environ.setdefault('SDL_VIDEO_HIGHDPI', '1')
# ── Capture ALL early output to a crash log ─────────────────────────
# Ensure we catch any exception that happens before Logger is available.