a0704efa3c
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.
159 lines
4.9 KiB
Batchfile
159 lines
4.9 KiB
Batchfile
@echo off
|
|
REM =====================================================================
|
|
REM Kiwy Signage Player - Windows Build Script
|
|
REM =====================================================================
|
|
REM This script builds a standalone Windows .exe using PyInstaller.
|
|
REM
|
|
REM Prerequisites:
|
|
REM 1. Python 3.10+ installed (with "Add to PATH" checked)
|
|
REM 2. Visual C++ Redistributable (for ffpyplayer)
|
|
REM 3. FFmpeg binaries in PATH (optional, for video codec support)
|
|
REM
|
|
REM Steps:
|
|
REM 1. Run this script from the project root or the windows\ folder
|
|
REM 2. The .exe will be created in windows\dist\KiwySignagePlayer\
|
|
REM =====================================================================
|
|
|
|
setlocal enabledelayedexpansion
|
|
|
|
cd /d "%~dp0"
|
|
|
|
echo ============================================
|
|
echo Kiwy Signage Player - Windows Build
|
|
echo ============================================
|
|
echo.
|
|
|
|
REM ---- Check Python ----
|
|
where python >nul 2>&1
|
|
if %ERRORLEVEL% neq 0 (
|
|
echo [ERROR] Python not found! Please install Python 3.10+ and add it to PATH.
|
|
pause
|
|
exit /b 1
|
|
)
|
|
|
|
echo [INFO] Using Python:
|
|
python --version
|
|
|
|
REM ---- Create virtual environment (if not exists) ----
|
|
if not exist "venv\Scripts\python.exe" (
|
|
echo.
|
|
echo [STEP] Creating virtual environment...
|
|
python -m venv venv
|
|
if %ERRORLEVEL% neq 0 (
|
|
echo [ERROR] Failed to create virtual environment.
|
|
pause
|
|
exit /b 1
|
|
)
|
|
) else (
|
|
echo [INFO] Virtual environment already exists.
|
|
)
|
|
|
|
REM ---- Activate virtual environment ----
|
|
call venv\Scripts\activate.bat
|
|
|
|
REM ---- Install/upgrade pip ----
|
|
echo.
|
|
echo [STEP] Upgrading pip...
|
|
python -m pip install --upgrade pip
|
|
|
|
REM ---- Install dependencies ----
|
|
echo.
|
|
echo [STEP] Installing Windows dependencies...
|
|
pip install -r requirements_win.txt
|
|
if %ERRORLEVEL% neq 0 (
|
|
echo [ERROR] Failed to install dependencies.
|
|
pause
|
|
exit /b 1
|
|
)
|
|
|
|
REM ---- Verify Kivy installation ----
|
|
echo.
|
|
echo [STEP] Verifying Kivy installation...
|
|
python -c "import kivy; print(f'Kivy {kivy.__version__}')" 2>&1
|
|
if %ERRORLEVEL% neq 0 (
|
|
echo [WARNING] Kivy check failed. Build may still work but test carefully.
|
|
)
|
|
|
|
REM ---- Check PyInstaller ----
|
|
echo.
|
|
echo [STEP] Verifying PyInstaller...
|
|
python -c "import PyInstaller; print(f'PyInstaller {PyInstaller.__version__}')" 2>&1
|
|
if %ERRORLEVEL% neq 0 (
|
|
echo [ERROR] PyInstaller not found.
|
|
pause
|
|
exit /b 1
|
|
)
|
|
|
|
REM ---- Create app icon (from PNG if possible) ----
|
|
echo.
|
|
echo [STEP] Checking for app icon...
|
|
if not exist "..\config\resources\app_icon.ico" (
|
|
echo [INFO] No .ico icon found. Will use default PyInstaller icon.
|
|
echo [INFO] To add a custom icon, place app_icon.ico in config\resources\
|
|
)
|
|
|
|
REM ---- Run PyInstaller ----
|
|
echo.
|
|
echo [STEP] Building executable with PyInstaller...
|
|
echo This may take several minutes. Please wait...
|
|
echo.
|
|
|
|
pyinstaller build.spec --clean --noconfirm
|
|
if %ERRORLEVEL% neq 0 (
|
|
echo.
|
|
echo [ERROR] PyInstaller build failed!
|
|
echo Check the output above for error details.
|
|
pause
|
|
exit /b 1
|
|
)
|
|
|
|
REM ---- Optional code signing ----------------------------------------
|
|
REM For production PCs with Smart App Control ON, the exe MUST be signed
|
|
REM by a cert from a reputable public CA. If you have a .pfx, put its path
|
|
REM in the env var KIWY_SIGN_PFX (and optionally KIWY_SIGN_PFX_PASSWORD),
|
|
REM or drop a pfx named "kiwy_signing.pfx" in this folder. The build will
|
|
REM then auto-sign via sign_exe.ps1.
|
|
echo.
|
|
echo [STEP] Checking for code-signing certificate...
|
|
|
|
set "SIGN_PFX=%KIWY_SIGN_PFX%"
|
|
if not defined SIGN_PFX if exist "%~dp0kiwy_signing.pfx" set "SIGN_PFX=%~dp0kiwy_signing.pfx"
|
|
|
|
if defined SIGN_PFX (
|
|
echo [INFO ] Code-signing cert found: %SIGN_PFX%
|
|
if defined KIWY_SIGN_PFX_PASSWORD (
|
|
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0sign_exe.ps1" -CertPath "%SIGN_PFX%" -CertPassword "%KIWY_SIGN_PFX_PASSWORD%"
|
|
) else (
|
|
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0sign_exe.ps1" -CertPath "%SIGN_PFX%"
|
|
)
|
|
if not "!ERRORLEVEL!"=="0" (
|
|
echo [WARNING] Signing failed or signtool missing - the exe is NOT signed.
|
|
echo Smart App Control machines will still block it.
|
|
) else (
|
|
echo [OK] Executable signed successfully.
|
|
)
|
|
) else (
|
|
echo [INFO ] No signing cert found - skipping signing.
|
|
echo [INFO ] To sign automatically, set KIWY_SIGN_PFX to your .pfx path
|
|
echo or place "kiwy_signing.pfx" in this folder.
|
|
echo [INFO ] NOTE: Unsigned exe will be BLOCKED on PCs with Smart App Control ON.
|
|
)
|
|
|
|
REM ---- Success ----
|
|
echo.
|
|
echo ============================================
|
|
echo BUILD COMPLETE!
|
|
echo ============================================
|
|
echo.
|
|
echo Output: %~dp0dist\KiwySignagePlayer\
|
|
echo.
|
|
echo The executable is:
|
|
echo %~dp0dist\KiwySignagePlayer\KiwySignagePlayer.exe
|
|
echo.
|
|
echo To run: Double-click KiwySignagePlayer.exe
|
|
echo.
|
|
echo Note: The first run may take a while as Windows Defender
|
|
echo scans the executable. This is normal.
|
|
echo.
|
|
pause
|