diff --git a/resources/windows/download_and_build.sh b/resources/windows/download_and_build.sh index a0a5a3b..273087b 100755 --- a/resources/windows/download_and_build.sh +++ b/resources/windows/download_and_build.sh @@ -26,7 +26,8 @@ cp ../icons/syng.ico src/ # docker run --volume "$(pwd)/src:/src/" batonogov/pyinstaller-linux:latest "pyinstaller --onefile syng/main.py" # rm -rf src/build # rm -rf src/dist -docker run --volume "$(pwd)/src:/src/" batonogov/pyinstaller-windows:latest "pyinstaller --onefile -w -i'.\syng.ico' --add-binary '.\mpv.exe;.' --add-binary '.\vulkan-1.dll;.' --add-binary '.\ffmpeg.exe;.' syng/main.py" +# docker run --volume "$(pwd)/src:/src/" batonogov/pyinstaller-windows:latest "pyinstaller --onefile -w -i'.\syng.ico' --add-data='.\syng\static\syng.png;.\static' --add-binary '.\mpv.exe;.' --add-binary '.\vulkan-1.dll;.' --add-binary '.\ffmpeg.exe;.' syng/main.py" +docker run --volume "$(pwd)/src:/src/" batonogov/pyinstaller-windows:latest "pyinstaller -F -w -i'.\syng.ico' --add-data='.\syng.ico;.' --add-binary '.\mpv.exe;.' --add-binary '.\vulkan-1.dll;.' --add-binary '.\ffmpeg.exe;.' syng/main.py" # cd syng-2.0.1 # wine python -m poetry install -E client diff --git a/syng/gui.py b/syng/gui.py index 09f0b3c..afd95be 100644 --- a/syng/gui.py +++ b/syng/gui.py @@ -1,4 +1,5 @@ from io import BytesIO +import sys import logging from logging.handlers import QueueListener from multiprocessing import Process, Queue @@ -8,12 +9,22 @@ import os import builtins from functools import partial import random -from typing import Any, Optional +from typing import TYPE_CHECKING, Any, Optional import multiprocessing import secrets import string import signal +try: + if not TYPE_CHECKING: + from ctypes import windll + + appid = "rocks.syng.Syng.2.0.1" + windll.shell32.SetCurrentProcessExplicitAppUserModelID(appid) +except ImportError: + pass + + from PyQt6.QtCore import QTimer from PyQt6.QtGui import QCloseEvent, QIcon, QPixmap from PyQt6.QtWidgets import ( @@ -379,13 +390,12 @@ class SyngGui(QMainWindow): super().__init__() self.setWindowTitle("Syng") - rel_path = os.path.dirname(__file__) - qt_img = QPixmap(os.path.join(rel_path, "static/syng.png")) - self.qt_icon = QIcon(qt_img) - self.setWindowIcon(self.qt_icon) + if os.name != "nt": + rel_path = os.path.dirname(__file__) + qt_img = QPixmap(os.path.join(rel_path, "static", "syng.png")) + self.setWindowIcon(QIcon(qt_img)) self.syng_server: Optional[Process] = None - # self.syng_client: Optional[subprocess.Popen[bytes]] = None self.syng_client: Optional[Process] = None self.syng_client_logging_listener: Optional[QueueListener] = None @@ -553,9 +563,14 @@ class LoggingLabelHandler(logging.Handler): def run_gui() -> None: + base_dir = os.path.dirname(__file__) + if getattr(sys, "frozen", False) and hasattr(sys, "_MEIPASS"): + base_dir = sys._MEIPASS + signal.signal(signal.SIGINT, signal.SIG_DFL) app = QApplication([]) + app.setWindowIcon(QIcon(os.path.join(base_dir, "syng.ico"))) app.setApplicationName("Syng") app.setDesktopFileName("rocks.syng.Syng") window = SyngGui()