Opdateringer
This commit is contained in:
94
linedance-app/BUILD.md
Normal file
94
linedance-app/BUILD.md
Normal 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>
|
||||
```
|
||||
@@ -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
116
linedance-app/installer.nsi
Normal 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
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user