Opdateringer

This commit is contained in:
2026-04-15 16:30:03 +02:00
parent 4a206f2f19
commit 920cd8222d
8 changed files with 1163 additions and 251 deletions

94
linedance-app/BUILD.md Normal file
View File

@@ -0,0 +1,94 @@
# LineDance Player — Windows Build Guide
## Forudsætninger
Installer følgende på din Windows-maskine:
1. **Python 3.11+**
https://www.python.org/downloads/
✅ Sæt flueben ved "Add Python to PATH"
2. **VLC** (64-bit)
https://www.videolan.org/vlc/
Kræves både til udvikling og til slutbrugere
3. **NSIS 3.x**
https://nsis.sourceforge.io/Download
Bruges til at bygge `.exe` installationsprogrammet
---
## Første gang: Opsæt miljø
```bat
cd linedance-app
python -m venv venv
venv\Scripts\activate
pip install -r requirements.txt
```
---
## Byg installer
```bat
build.bat
```
Det gør automatisk:
1. PyInstaller → `dist\LineDancePlayer\` (hele programmet)
2. NSIS → `dist\LineDancePlayer-Setup.exe` (installer til brugerne)
Tager 2-5 minutter første gang.
---
## Upload til server
```bat
scp dist\LineDancePlayer-Setup.exe bruger@linedanceplayer.dk:/opt/docker/linedanceafspiller/linedance-api/web/public/download/
```
Filen er tilgængelig på:
`https://linedanceplayer.dk/download/LineDancePlayer-Setup.exe`
---
## Ikoner (valgfrit men anbefalet)
Placer disse filer i `installer\` mappen:
| Fil | Størrelse | Beskrivelse |
|-----|-----------|-------------|
| `icon.ico` | 256×256 | Program-ikon (Windows .ico format) |
| `welcome.bmp` | 164×314 | Velkomst-billede i installer |
| `header.bmp` | 150×57 | Header-billede i installer |
Uden ikoner bygges der med standard NSIS-udseende.
---
## Fejlfinding
**PyInstaller fejler med "module not found"**
Tilføj modulet til `hiddenimports` i `build_windows.spec`
**VLC ikke fundet ved kørsel**
Sørg for at VLC er installeret som 64-bit — samme arkitektur som Python
**NSIS fejler**
Kør `makensis /V4 installer.nsi` for detaljeret output
---
## Versionsnummer
Opdater versionsnummeret i `installer.nsi`:
```nsis
!define APP_VERSION "1.0.1"
```
Og i `app.html` på hjemmesiden:
```html
<div class="version" id="win-version">Version 1.0.1 · 64-bit</div>
```

View File

@@ -1,35 +1,123 @@
@echo off
echo === LineDance Player - Windows Build ===
setlocal enabledelayedexpansion
echo.
echo ================================================
echo LineDance Player - Windows Build + Installer
echo ================================================
echo.
:: ── Aktiver venv ──────────────────────────────────────────────────────────────
if exist "venv\Scripts\activate.bat" (
call venv\Scripts\activate.bat
) else (
echo ADVARSEL: venv ikke fundet
echo ADVARSEL: venv ikke fundet - bruger system Python
)
pip install pyinstaller >nul 2>&1
:: ── Tjek Python ───────────────────────────────────────────────────────────────
python --version >nul 2>&1
if errorlevel 1 (
echo FEJL: Python ikke fundet
pause & exit /b 1
)
if exist "dist\LineDancePlayer" rmdir /s /q "dist\LineDancePlayer"
if exist "build\LineDancePlayer" rmdir /s /q "build\LineDancePlayer"
:: ── Installer/opdater PyInstaller ─────────────────────────────────────────────
echo [1/4] Installerer PyInstaller...
pip install pyinstaller --quiet
echo Bygger... (1-3 minutter)
:: ── Ryd gamle builds ──────────────────────────────────────────────────────────
echo [2/4] Rydder gamle builds...
if exist "dist\LineDancePlayer" rmdir /s /q "dist\LineDancePlayer"
if exist "build\LineDancePlayer" rmdir /s /q "build\LineDancePlayer"
:: ── PyInstaller build ─────────────────────────────────────────────────────────
echo [3/4] Bygger med PyInstaller (2-5 minutter)...
echo.
pyinstaller build_windows.spec --clean --noconfirm
if errorlevel 1 (
echo.
echo FEJL: Se fejlbesked ovenfor
pause
exit /b 1
echo FEJL: PyInstaller fejlede - se fejlbesked ovenfor
pause & exit /b 1
)
echo.
echo === FAERDIG ===
echo Program: dist\LineDancePlayer\LineDancePlayer.exe
echo OK: dist\LineDancePlayer\ er klar
echo.
echo HUSK: Kopieer hele dist\LineDancePlayer\ mappen - ikke kun .exe!
echo HUSK: VLC skal vaere installeret paa maskinen.
:: ── NSIS installer ────────────────────────────────────────────────────────────
echo [4/4] Bygger NSIS installer...
echo.
:: Find NSIS
set "NSIS="
if exist "C:\Program Files (x86)\NSIS\makensis.exe" set "NSIS=C:\Program Files (x86)\NSIS\makensis.exe"
if exist "C:\Program Files\NSIS\makensis.exe" set "NSIS=C:\Program Files\NSIS\makensis.exe"
if not defined NSIS (
echo ADVARSEL: NSIS ikke fundet.
echo.
echo Download NSIS fra https://nsis.sourceforge.io/Download
echo og koer derefter: makensis installer.nsi
echo.
echo PyInstaller-buildet ligger klar i dist\LineDancePlayer\
goto :done
)
:: Tjek installer-mappe og billeder
if not exist "installer" mkdir installer
:: Generer et simpelt .ico hvis det mangler (kræver PowerShell)
if not exist "installer\icon.ico" (
echo Genererer standard ikon...
powershell -NoProfile -Command ^
"$bmp = New-Object System.Drawing.Bitmap(64,64); " ^
"$g = [System.Drawing.Graphics]::FromImage($bmp); " ^
"$g.Clear([System.Drawing.Color]::FromArgb(14,15,17)); " ^
"$b = New-Object System.Drawing.SolidBrush([System.Drawing.Color]::FromArgb(232,160,32)); " ^
"$g.FillEllipse($b, 8, 8, 48, 48); " ^
"$bmp.Save('installer\icon.png'); " ^
"$g.Dispose(); $bmp.Dispose()" 2>nul
echo (Sæt et rigtigt icon.ico i installer\ for bedre resultat)
)
:: Byg NSIS — uden ikon-linjer hvis .ico mangler
if exist "installer\icon.ico" (
"%NSIS%" /V2 installer.nsi
) else (
:: Lav midlertidig .nsi uden ikon
powershell -NoProfile -Command ^
"(Get-Content installer.nsi) | " ^
"Where-Object { $_ -notmatch 'MUI_ICON|MUI_UNICON|MUI_HEADERIMAGE' } | " ^
"Set-Content installer_tmp.nsi"
"%NSIS%" /V2 installer_tmp.nsi
del installer_tmp.nsi
)
if errorlevel 1 (
echo.
echo FEJL: NSIS fejlede - se fejlbesked ovenfor
pause & exit /b 1
)
:done
echo.
echo ================================================
echo FAERDIG!
echo ================================================
if exist "dist\LineDancePlayer-Setup.exe" (
echo.
echo Installer: dist\LineDancePlayer-Setup.exe
for %%A in ("dist\LineDancePlayer-Setup.exe") do (
set /a SIZEMB=%%~zA / 1048576
echo Stoerrelse: !SIZEMB! MB
)
echo.
echo Upload til server:
echo scp dist\LineDancePlayer-Setup.exe bruger@linedanceplayer.dk:/opt/docker/linedanceafspiller/linedance-api/web/public/download/
) else (
echo.
echo PyInstaller-build: dist\LineDancePlayer\
echo Kør makensis installer.nsi manuelt naar NSIS er installeret
)
echo.
pause

116
linedance-app/installer.nsi Normal file
View File

@@ -0,0 +1,116 @@
; LineDance Player — NSIS Installer Script
; Kræver NSIS 3.x installeret: https://nsis.sourceforge.io/
!define APP_NAME "LineDance Player"
!define APP_EXE "LineDancePlayer.exe"
!define APP_VERSION "1.0.0"
!define APP_PUBLISHER "LineDance Player"
!define APP_URL "https://linedanceplayer.dk"
!define INSTALL_DIR "$LOCALAPPDATA\Programs\LineDancePlayer"
!define REG_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\LineDancePlayer"
; ── Generelle indstillinger ───────────────────────────────────────────────────
Name "${APP_NAME}"
OutFile "dist\LineDancePlayer-Setup.exe"
InstallDir "${INSTALL_DIR}"
InstallDirRegKey HKCU "${REG_KEY}" "InstallLocation"
RequestExecutionLevel user ; Ingen admin-rettigheder nødvendige
SetCompressor /SOLID lzma
Unicode True
; ── Moderne UI ────────────────────────────────────────────────────────────────
!include "MUI2.nsh"
!include "FileFunc.nsh"
!define MUI_ABORTWARNING
!define MUI_ICON "installer\icon.ico"
!define MUI_UNICON "installer\icon.ico"
!define MUI_WELCOMEFINISHPAGE_BITMAP "installer\welcome.bmp"
!define MUI_HEADERIMAGE
!define MUI_HEADERIMAGE_BITMAP "installer\header.bmp"
; Farver (orange tema)
!define MUI_BGCOLOR "0C0D10"
!define MUI_TEXTCOLOR "ECEEF4"
; ── Sider ─────────────────────────────────────────────────────────────────────
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Danish"
!insertmacro MUI_LANGUAGE "English"
; ── Installer ─────────────────────────────────────────────────────────────────
Section "LineDance Player" SecMain
SectionIn RO ; Obligatorisk
SetOutPath "$INSTDIR"
; Kopiér alle filer fra dist\LineDancePlayer\
File /r "dist\LineDancePlayer\*.*"
; Start-menu genvej
CreateDirectory "$SMPROGRAMS\${APP_NAME}"
CreateShortcut "$SMPROGRAMS\${APP_NAME}\${APP_NAME}.lnk" \
"$INSTDIR\${APP_EXE}" "" "$INSTDIR\${APP_EXE}" 0
; Skrivebords-genvej (valgfri — spørg brugeren)
CreateShortcut "$DESKTOP\${APP_NAME}.lnk" \
"$INSTDIR\${APP_EXE}" "" "$INSTDIR\${APP_EXE}" 0
; Gem installationsinfo i registry (til afinstallation)
WriteRegStr HKCU "${REG_KEY}" "DisplayName" "${APP_NAME}"
WriteRegStr HKCU "${REG_KEY}" "DisplayVersion" "${APP_VERSION}"
WriteRegStr HKCU "${REG_KEY}" "Publisher" "${APP_PUBLISHER}"
WriteRegStr HKCU "${REG_KEY}" "URLInfoAbout" "${APP_URL}"
WriteRegStr HKCU "${REG_KEY}" "InstallLocation" "$INSTDIR"
WriteRegStr HKCU "${REG_KEY}" "UninstallString" '"$INSTDIR\Uninstall.exe"'
WriteRegStr HKCU "${REG_KEY}" "DisplayIcon" "$INSTDIR\${APP_EXE}"
WriteRegDWORD HKCU "${REG_KEY}" "NoModify" 1
WriteRegDWORD HKCU "${REG_KEY}" "NoRepair" 1
; Beregn installationsstørrelse
${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2
IntFmt $0 "0x%08X" $0
WriteRegDWORD HKCU "${REG_KEY}" "EstimatedSize" "$0"
; Skriv afinstaller
WriteUninstaller "$INSTDIR\Uninstall.exe"
SectionEnd
; ── VLC tjek (advarsel hvis ikke installeret) ─────────────────────────────────
Section -VLCCheck
ReadRegStr $0 HKLM "SOFTWARE\VideoLAN\VLC" ""
ReadRegStr $1 HKCU "SOFTWARE\VideoLAN\VLC" ""
${If} $0 == ""
${AndIf} $1 == ""
MessageBox MB_YESNO|MB_ICONINFORMATION \
"LineDance Player bruger VLC til afspilning.$\n$\nVLC er ikke installeret. Vil du åbne download-siden?$\n$\n(Du kan installere det senere)" \
IDNO VLCSkip
ExecShell "open" "https://www.videolan.org/vlc/"
VLCSkip:
${EndIf}
SectionEnd
; ── Afinstaller ───────────────────────────────────────────────────────────────
Section "Uninstall"
; Slet programfiler
RMDir /r "$INSTDIR"
; Slet genveje
Delete "$SMPROGRAMS\${APP_NAME}\${APP_NAME}.lnk"
RMDir "$SMPROGRAMS\${APP_NAME}"
Delete "$DESKTOP\${APP_NAME}.lnk"
; Slet registry
DeleteRegKey HKCU "${REG_KEY}"
; Bevar brugernes data i %APPDATA%\.linedance — slet IKKE
SectionEnd

View File

@@ -25,17 +25,21 @@ def main():
# Undertrryk ufarlige Qt Windows-advarsler i konsollen
import sys as _sys
if _sys.platform == "win32":
from PyQt6.QtCore import qInstallMessageHandler, QtMsgType
def _qt_msg_handler(msg_type, context, message):
if any(x in message for x in [
"registerTimer", "Unhandled scheme",
"Point size <= 0", "setPointSize",
"QFont::",
]):
return
from PyQt6.QtCore import qInstallMessageHandler, QtMsgType
def _qt_msg_handler(msg_type, context, message):
# Undertrykk kendte harmløse advarsler
if any(x in message for x in [
"registerTimer", "Unhandled scheme",
"Point size <= 0", "setPointSize",
"QFont::", "Timers cannot be stopped",
"Timers cannot be started",
"Cannot create children for a parent",
"event dispatcher has already been destroyed",
]):
return
if _sys.platform == "win32":
print(message)
qInstallMessageHandler(_qt_msg_handler)
qInstallMessageHandler(_qt_msg_handler)
# Indlæs sprog fra indstillinger
from ui.settings_dialog import load_settings