From 3e75532517774013b34185d927f7b278894bc117 Mon Sep 17 00:00:00 2001 From: Xarkam Date: Thu, 26 Mar 2026 18:11:03 +0100 Subject: [PATCH] Changement de lib audio, suppression de quiloader --- La Tanière Launcher.spec | 14 +- src/controllers/audio_controller.py | 41 +- src/ui/main_window.py | 21 +- src/ui/ui_mainwindow_vertical_pager.py | 652 +++++++++++++++++++++++++ 4 files changed, 700 insertions(+), 28 deletions(-) create mode 100644 src/ui/ui_mainwindow_vertical_pager.py diff --git a/La Tanière Launcher.spec b/La Tanière Launcher.spec index 530b814..ead6ef8 100644 --- a/La Tanière Launcher.spec +++ b/La Tanière Launcher.spec @@ -26,7 +26,7 @@ a = Analysis( (str(BASE_DIR / 'styles' / 'styles.qss'), 'styles'), # UI (tu peux ajouter d'autres .ui ici) - (str(BASE_DIR / 'ui' / 'mainwindow_vertical_pager.ui'), 'ui'), + # (str(BASE_DIR / 'ui' / 'mainwindow_vertical_pager.ui'), 'ui'), ], hiddenimports=[ "pypresence" @@ -55,9 +55,9 @@ a = Analysis( 'PySide6.QtDesigner', 'PySide6.QtHelp', 'PySide6.QtLocation', - # 'PySide6.QtMultimedia', # Nécessaire pour l'audio + 'PySide6.QtMultimedia', # Nécessaire pour l'audio 'PySide6.QtMultimediaWidgets', - # 'PySide6.QtNetwork', # Dépendance à QtMultimedia + 'PySide6.QtNetwork', # Dépendance à QtMultimedia 'PySide6.QtNetworkAuth', 'PySide6.QtNfc', 'PySide6.QtOpenGL', @@ -230,9 +230,9 @@ unwanted_dlls = [ 'Qt6WebSockets', 'Qt6Sql', 'Qt6Test', - # 'Qt6OpenGL', # Dependance a Qt6UiTools + 'Qt6OpenGL', # Dependance a Qt6UiTools 'Qt6PrintSupport', - # 'Qt6Xml', # Dependance fichier .ui + 'Qt6Xml', # Dependance fichier .ui 'Qt6Help', 'Qt6Designer', 'Qt6Concurrent', @@ -253,7 +253,7 @@ for item in a.binaries: # "iconengines", # à garder pour les svg dans l'app "tls", "printsupport", - #"opengl", + "opengl", # <- ne pas mettre en exclude. "qml", "quick", "webengine", @@ -302,7 +302,7 @@ exe = EXE( "msvcp140.dll" ], runtime_tmpdir=None, - console=False, + console=True, # 🔥 ONEFILE onefile=True, diff --git a/src/controllers/audio_controller.py b/src/controllers/audio_controller.py index f303523..1c49004 100644 --- a/src/controllers/audio_controller.py +++ b/src/controllers/audio_controller.py @@ -1,6 +1,7 @@ -from PySide6.QtCore import QFile, QBuffer, QByteArray, QIODevice -from PySide6.QtMultimedia import QMediaPlayer, QAudioOutput +from PySide6.QtCore import QFile +import cyminiaudio as cma +import tempfile from config.config_manager import ConfigManager, VOLUME_KEY from config.constants import Resources @@ -13,32 +14,32 @@ class AudioController: self._slider = slider self._mute_btn = mute_btn - # Lecteur - self._player = QMediaPlayer() - self._output = QAudioOutput() - self._player.setAudioOutput(self._output) - self._player.setLoops(-1) - # Chargement du MP3 depuis les ressources Qt mp3file = QFile(Resources.MP3.value) mp3file.open(QFile.ReadOnly) - mp3data = mp3file.readAll() + mp3data = mp3file.readAll().data() mp3file.close() - # Mise en buffer du MP3 - self._buffer = QBuffer() - self._buffer.setData(QByteArray(mp3data)) - self._buffer.open(QIODevice.ReadOnly) - self._player.setSourceDevice(self._buffer) + # 2. Créer un fichier temporaire "invisible" pour l'utilisateur + self.tmp = tempfile.NamedTemporaryFile(delete=False, suffix=".mp3") + self.tmp.write(mp3data) + self.tmp.close() # Libère le verrou pour le lecteur # État initial du lecteur volume = config.get_volume() - self._is_muted = volume == 0 + self._is_muted = (volume == 0) self._previous_volume = volume if volume != 0 else config.get_default(VOLUME_KEY) self._apply_volume(volume, save=False) self._refresh_mute_btn() - self._player.play() + + # 3. Initialiser le moteur SANS le bloc 'with' + # En les stockant dans self, ils restent vivants en mémoire + self._audio_engine = cma.Engine() + self._sound = self._audio_engine.play(self.tmp.name) + self._sound.looping = True + # On force le volume du son pour correspondre à la config + self._sound.volume = volume / 100.0 # Connexions self._slider.valueChanged.connect(self._on_slider_changed) @@ -63,7 +64,9 @@ class AudioController: def _on_slider_changed(self, value: int) -> None: self._is_muted = value == 0 - self._output.setVolume(value / 100.0) + if hasattr(self, '_sound'): + # cyminiaudio attend souvent un float entre 0.0 et 1.0 + self._sound.volume = value / 100.0 self._config.set_volume(value) self._refresh_mute_btn() @@ -72,7 +75,9 @@ class AudioController: self._slider.setValue(value) self._slider.blockSignals(False) - self._output.setVolume(value / 100.0) + # Même correction ici + if hasattr(self, '_sound'): + self._sound.volume = value / 100.0 if save: self._config.set_volume(value) diff --git a/src/ui/main_window.py b/src/ui/main_window.py index 1ebe4d5..5e74451 100644 --- a/src/ui/main_window.py +++ b/src/ui/main_window.py @@ -1,14 +1,15 @@ import webbrowser +import os from sys import platform from os import environ from PySide6 import QtGui from PySide6.QtGui import QIcon from PySide6.QtCore import Qt, QTimer -from PySide6.QtUiTools import QUiLoader from PySide6.QtWidgets import QMainWindow, QSizePolicy from PySide6.QtCore import QThread, Signal +from ui.ui_mainwindow_vertical_pager import Ui_MainWindow from config.config_manager import ConfigManager from config.constants import PlayerServerInfo, Urls from tools.http_client import ApiError @@ -34,6 +35,9 @@ class MainWindow(QMainWindow): def __init__(self, bundle_dir: str, config_manager: ConfigManager): super().__init__() + self.ui = Ui_MainWindow() + self.ui.setupUi(self) + self.config = config_manager self.stored_user_id = self.config.get_discord_user() self.queue_thread = None @@ -43,8 +47,8 @@ class MainWindow(QMainWindow): self.remaining_time = 0 # en secondes # UI - self.ui = QUiLoader().load(f"{bundle_dir}/ui/mainwindow_vertical_pager.ui", self) - self.setCentralWidget(self.ui.centralWidget()) + # self.ui = QUiLoader().load(f"{bundle_dir}/ui/mainwindow_vertical_pager.ui", self) + #self.setCentralWidget(self.ui.centralWidget()) self.setWindowFlags(Qt.WindowType.FramelessWindowHint | Qt.WindowType.Window) self.setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground) @@ -253,8 +257,19 @@ class MainWindow(QMainWindow): self.queue_thread.stop() self.queue_thread.wait() # Attend que le thread se termine proprement self.config.save() + self.cleanup() super().closeEvent(event) + def cleanup(self): + """À appeler lors de la fermeture de la fenêtre principale""" + if hasattr(self, '_sound'): + self._sound.stop() + if hasattr(self, '_temp_mp3'): + try: + os.unlink(self._temp_mp3.name) + except OSError: + pass + # ------------------------------------------------------------------ # Change ui on runtime # ------------------------------------------------------------------ diff --git a/src/ui/ui_mainwindow_vertical_pager.py b/src/ui/ui_mainwindow_vertical_pager.py new file mode 100644 index 0000000..9f369f0 --- /dev/null +++ b/src/ui/ui_mainwindow_vertical_pager.py @@ -0,0 +1,652 @@ +# -*- coding: utf-8 -*- + +################################################################################ +## Form generated from reading UI file 'mainwindow_vertical_pageryBuDUs.ui' +## +## Created by: Qt User Interface Compiler version 6.10.2 +## +## WARNING! All changes made in this file will be lost when recompiling UI file! +################################################################################ + +from PySide6.QtCore import (QCoreApplication, QMetaObject, QRect, + QSize, Qt) +from PySide6.QtGui import (QIcon, + QPixmap) +from PySide6.QtWidgets import (QFrame, QHBoxLayout, QLabel, + QPushButton, QSizePolicy, QSlider, + QSpacerItem, QStackedWidget, QTextEdit, QVBoxLayout, + QWidget) + + +class Ui_MainWindow(object): + def setupUi(self, MainWindow): + if not MainWindow.objectName(): + MainWindow.setObjectName(u"MainWindow") + MainWindow.setWindowModality(Qt.WindowModality.ApplicationModal) + MainWindow.resize(1199, 703) + sizePolicy = QSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth()) + MainWindow.setSizePolicy(sizePolicy) + MainWindow.setMinimumSize(QSize(1199, 703)) + MainWindow.setMaximumSize(QSize(1199, 703)) + MainWindow.setContextMenuPolicy(Qt.ContextMenuPolicy.NoContextMenu) + icon = QIcon() + icon.addFile(u":/assets/Icone.ico", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + MainWindow.setWindowIcon(icon) + self.main_container = QWidget(MainWindow) + self.main_container.setObjectName(u"main_container") + self.main_container.setMinimumSize(QSize(1199, 703)) + self.main_container.setMaximumSize(QSize(1199, 703)) + self.verticalLayout = QVBoxLayout(self.main_container) + self.verticalLayout.setSpacing(0) + self.verticalLayout.setObjectName(u"verticalLayout") + self.verticalLayout.setContentsMargins(0, 0, 0, 0) + self.title_bar = QFrame(self.main_container) + self.title_bar.setObjectName(u"title_bar") + self.title_bar.setMinimumSize(QSize(1199, 50)) + self.title_bar.setMaximumSize(QSize(1199, 50)) + self.title_bar.setFrameShape(QFrame.Shape.NoFrame) + self.title_bar.setFrameShadow(QFrame.Shadow.Raised) + self.horizontalLayout = QHBoxLayout(self.title_bar) + self.horizontalLayout.setSpacing(0) + self.horizontalLayout.setObjectName(u"horizontalLayout") + self.horizontalLayout.setContentsMargins(0, 9, 0, 0) + self.horizontalSpacer = QSpacerItem(1006, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + + self.horizontalLayout.addItem(self.horizontalSpacer) + + self.minimize_btn = QPushButton(self.title_bar) + self.minimize_btn.setObjectName(u"minimize_btn") + self.minimize_btn.setMinimumSize(QSize(0, 0)) + self.minimize_btn.setMaximumSize(QSize(25, 25)) + self.minimize_btn.setStyleSheet(u"") + self.minimize_btn.setIconSize(QSize(32, 32)) + + self.horizontalLayout.addWidget(self.minimize_btn) + + self.horizontalSpacer1 = QSpacerItem(20, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) + + self.horizontalLayout.addItem(self.horizontalSpacer1) + + self.close_btn = QPushButton(self.title_bar) + self.close_btn.setObjectName(u"close_btn") + self.close_btn.setMaximumSize(QSize(42, 42)) + self.close_btn.setStyleSheet(u"") + icon1 = QIcon() + icon1.addFile(u":/assets/system-shutdown.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.close_btn.setIcon(icon1) + self.close_btn.setIconSize(QSize(32, 32)) + + self.horizontalLayout.addWidget(self.close_btn) + + self.horizontalSpacer_3 = QSpacerItem(30, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) + + self.horizontalLayout.addItem(self.horizontalSpacer_3) + + + self.verticalLayout.addWidget(self.title_bar) + + self.frame = QFrame(self.main_container) + self.frame.setObjectName(u"frame") + self.frame.setMinimumSize(QSize(1199, 0)) + self.frame.setMaximumSize(QSize(1199, 658)) + self.frame.setFrameShape(QFrame.Shape.NoFrame) + self.frame.setFrameShadow(QFrame.Shadow.Raised) + self.horizontalLayout1 = QHBoxLayout(self.frame) + self.horizontalLayout1.setSpacing(0) + self.horizontalLayout1.setObjectName(u"horizontalLayout1") + self.horizontalLayout1.setContentsMargins(0, 0, 0, 0) + self.left_column = QFrame(self.frame) + self.left_column.setObjectName(u"left_column") + self.left_column.setMinimumSize(QSize(450, 630)) + self.left_column.setMaximumSize(QSize(450, 630)) + self.left_column.setFrameShape(QFrame.Shape.NoFrame) + self.left_column.setFrameShadow(QFrame.Shadow.Raised) + self.verticalLayout_5 = QVBoxLayout(self.left_column) + self.verticalLayout_5.setSpacing(0) + self.verticalLayout_5.setObjectName(u"verticalLayout_5") + self.verticalLayout_5.setContentsMargins(0, 0, 0, 0) + self.logo_frame = QFrame(self.left_column) + self.logo_frame.setObjectName(u"logo_frame") + self.logo_frame.setFrameShape(QFrame.Shape.NoFrame) + self.logo_frame.setFrameShadow(QFrame.Shadow.Raised) + + self.verticalLayout_5.addWidget(self.logo_frame) + + self.frame_3 = QFrame(self.left_column) + self.frame_3.setObjectName(u"frame_3") + sizePolicy1 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed) + sizePolicy1.setHorizontalStretch(0) + sizePolicy1.setVerticalStretch(0) + sizePolicy1.setHeightForWidth(self.frame_3.sizePolicy().hasHeightForWidth()) + self.frame_3.setSizePolicy(sizePolicy1) + self.frame_3.setMinimumSize(QSize(0, 100)) + self.frame_3.setFrameShape(QFrame.Shape.NoFrame) + self.frame_3.setFrameShadow(QFrame.Shadow.Raised) + self.horizontalLayout_6 = QHBoxLayout(self.frame_3) + self.horizontalLayout_6.setSpacing(0) + self.horizontalLayout_6.setObjectName(u"horizontalLayout_6") + self.horizontalLayout_6.setContentsMargins(0, 0, 0, 0) + self.frame_5 = QFrame(self.frame_3) + self.frame_5.setObjectName(u"frame_5") + sizePolicy2 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Preferred) + sizePolicy2.setHorizontalStretch(0) + sizePolicy2.setVerticalStretch(0) + sizePolicy2.setHeightForWidth(self.frame_5.sizePolicy().hasHeightForWidth()) + self.frame_5.setSizePolicy(sizePolicy2) + self.frame_5.setMinimumSize(QSize(0, 0)) + self.frame_5.setFrameShape(QFrame.Shape.NoFrame) + self.frame_5.setFrameShadow(QFrame.Shadow.Raised) + self.horizontalLayout_8 = QHBoxLayout(self.frame_5) + self.horizontalLayout_8.setObjectName(u"horizontalLayout_8") + self.queue_lbl = QLabel(self.frame_5) + self.queue_lbl.setObjectName(u"queue_lbl") + self.queue_lbl.setAutoFillBackground(False) + self.queue_lbl.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.horizontalLayout_8.addWidget(self.queue_lbl) + + self.queue_position = QLabel(self.frame_5) + self.queue_position.setObjectName(u"queue_position") + self.queue_position.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.horizontalLayout_8.addWidget(self.queue_position) + + self.horizontalSpacer_5 = QSpacerItem(80, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_8.addItem(self.horizontalSpacer_5) + + + self.horizontalLayout_6.addWidget(self.frame_5) + + + self.verticalLayout_5.addWidget(self.frame_3) + + self.frame_4 = QFrame(self.left_column) + self.frame_4.setObjectName(u"frame_4") + sizePolicy1.setHeightForWidth(self.frame_4.sizePolicy().hasHeightForWidth()) + self.frame_4.setSizePolicy(sizePolicy1) + self.frame_4.setMinimumSize(QSize(0, 0)) + self.frame_4.setMaximumSize(QSize(16777215, 50)) + self.frame_4.setStyleSheet(u"") + self.frame_4.setFrameShape(QFrame.Shape.NoFrame) + self.frame_4.setFrameShadow(QFrame.Shadow.Raised) + self.horizontalLayout_7 = QHBoxLayout(self.frame_4) + self.horizontalLayout_7.setObjectName(u"horizontalLayout_7") + self.audio_volume_adjust = QSlider(self.frame_4) + self.audio_volume_adjust.setObjectName(u"audio_volume_adjust") + self.audio_volume_adjust.setAutoFillBackground(False) + self.audio_volume_adjust.setStyleSheet(u"") + self.audio_volume_adjust.setValue(20) + self.audio_volume_adjust.setOrientation(Qt.Orientation.Horizontal) + self.audio_volume_adjust.setInvertedAppearance(False) + + self.horizontalLayout_7.addWidget(self.audio_volume_adjust) + + self.mute_btn = QPushButton(self.frame_4) + self.mute_btn.setObjectName(u"mute_btn") + self.mute_btn.setMinimumSize(QSize(32, 32)) + icon2 = QIcon() + icon2.addFile(u":/assets/sound-speaker.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.mute_btn.setIcon(icon2) + self.mute_btn.setFlat(True) + + self.horizontalLayout_7.addWidget(self.mute_btn) + + self.horizontalSpacer_10 = QSpacerItem(180, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_7.addItem(self.horizontalSpacer_10) + + + self.verticalLayout_5.addWidget(self.frame_4) + + + self.horizontalLayout1.addWidget(self.left_column) + + self.right_column = QFrame(self.frame) + self.right_column.setObjectName(u"right_column") + self.right_column.setMinimumSize(QSize(0, 650)) + self.right_column.setMaximumSize(QSize(700, 650)) + self.right_column.setFrameShape(QFrame.Shape.NoFrame) + self.right_column.setFrameShadow(QFrame.Shadow.Raised) + self.verticalLayout1 = QVBoxLayout(self.right_column) + self.verticalLayout1.setSpacing(0) + self.verticalLayout1.setObjectName(u"verticalLayout1") + self.verticalLayout1.setContentsMargins(0, 0, 0, 0) + self.title_frame = QFrame(self.right_column) + self.title_frame.setObjectName(u"title_frame") + sizePolicy1.setHeightForWidth(self.title_frame.sizePolicy().hasHeightForWidth()) + self.title_frame.setSizePolicy(sizePolicy1) + self.title_frame.setMinimumSize(QSize(0, 140)) + self.title_frame.setMaximumSize(QSize(16777215, 140)) + self.title_frame.setFrameShape(QFrame.Shape.NoFrame) + self.title_frame.setFrameShadow(QFrame.Shadow.Raised) + self.verticalLayout_4 = QVBoxLayout(self.title_frame) + self.verticalLayout_4.setSpacing(0) + self.verticalLayout_4.setObjectName(u"verticalLayout_4") + self.verticalLayout_4.setContentsMargins(0, 0, 0, 0) + self.maintitle_label = QLabel(self.title_frame) + self.maintitle_label.setObjectName(u"maintitle_label") + + self.verticalLayout_4.addWidget(self.maintitle_label, 0, Qt.AlignmentFlag.AlignHCenter) + + self.verticalSpacer = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) + + self.verticalLayout_4.addItem(self.verticalSpacer) + + self.subtitle_label = QLabel(self.title_frame) + self.subtitle_label.setObjectName(u"subtitle_label") + self.subtitle_label.setMinimumSize(QSize(0, 0)) + self.subtitle_label.setTextFormat(Qt.TextFormat.AutoText) + self.subtitle_label.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.verticalLayout_4.addWidget(self.subtitle_label) + + + self.verticalLayout1.addWidget(self.title_frame) + + self.verticalSpacer_10 = QSpacerItem(20, 20, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) + + self.verticalLayout1.addItem(self.verticalSpacer_10) + + self.stackedWidget = QStackedWidget(self.right_column) + self.stackedWidget.setObjectName(u"stackedWidget") + self.stackedWidget.setMinimumSize(QSize(700, 482)) + self.stackedWidget.setMaximumSize(QSize(700, 560)) + self.stackedWidget.setFrameShape(QFrame.Shape.NoFrame) + self.main_page = QWidget() + self.main_page.setObjectName(u"main_page") + self.main_page.setMinimumSize(QSize(0, 482)) + self.main_page.setMaximumSize(QSize(700, 482)) + self.frame1 = QFrame(self.main_page) + self.frame1.setObjectName(u"frame1") + self.frame1.setGeometry(QRect(0, 0, 700, 482)) + self.frame1.setMinimumSize(QSize(0, 0)) + self.frame1.setMaximumSize(QSize(700, 650)) + self.frame1.setFrameShape(QFrame.Shape.NoFrame) + self.frame1.setFrameShadow(QFrame.Shadow.Raised) + self.verticalLayout_10 = QVBoxLayout(self.frame1) + self.verticalLayout_10.setSpacing(0) + self.verticalLayout_10.setObjectName(u"verticalLayout_10") + self.verticalLayout_10.setContentsMargins(0, 0, 0, 0) + self.btn_frame = QFrame(self.frame1) + self.btn_frame.setObjectName(u"btn_frame") + sizePolicy1.setHeightForWidth(self.btn_frame.sizePolicy().hasHeightForWidth()) + self.btn_frame.setSizePolicy(sizePolicy1) + self.btn_frame.setMaximumSize(QSize(16777215, 150)) + self.btn_frame.setStyleSheet(u"") + self.btn_frame.setFrameShape(QFrame.Shape.NoFrame) + self.btn_frame.setFrameShadow(QFrame.Shadow.Raised) + self.horizontalLayout_4 = QHBoxLayout(self.btn_frame) + self.horizontalLayout_4.setSpacing(0) + self.horizontalLayout_4.setObjectName(u"horizontalLayout_4") + self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0) + self.verticalLayout_6 = QVBoxLayout() + self.verticalLayout_6.setObjectName(u"verticalLayout_6") + self.verticalSpacer_7 = QSpacerItem(20, 0, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) + + self.verticalLayout_6.addItem(self.verticalSpacer_7) + + self.connexion_btn = QPushButton(self.btn_frame) + self.connexion_btn.setObjectName(u"connexion_btn") + self.connexion_btn.setMinimumSize(QSize(250, 50)) + self.connexion_btn.setStyleSheet(u"") + icon3 = QIcon() + icon3.addFile(u":/assets/padlock-lock.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.connexion_btn.setIcon(icon3) + self.connexion_btn.setIconSize(QSize(32, 32)) + + self.verticalLayout_6.addWidget(self.connexion_btn) + + self.verticalSpacer_8 = QSpacerItem(20, 15, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) + + self.verticalLayout_6.addItem(self.verticalSpacer_8) + + self.staff_btn = QPushButton(self.btn_frame) + self.staff_btn.setObjectName(u"staff_btn") + self.staff_btn.setMinimumSize(QSize(250, 50)) + icon4 = QIcon() + icon4.addFile(u":/assets/tools-repair.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.staff_btn.setIcon(icon4) + self.staff_btn.setIconSize(QSize(32, 32)) + + self.verticalLayout_6.addWidget(self.staff_btn) + + + self.horizontalLayout_4.addLayout(self.verticalLayout_6) + + self.horizontalSpacer_6 = QSpacerItem(30, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_4.addItem(self.horizontalSpacer_6) + + self.verticalLayout_9 = QVBoxLayout() + self.verticalLayout_9.setObjectName(u"verticalLayout_9") + self.discord_btn = QPushButton(self.btn_frame) + self.discord_btn.setObjectName(u"discord_btn") + self.discord_btn.setMinimumSize(QSize(250, 50)) + icon5 = QIcon() + icon5.addFile(u":/assets/discord-icon.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.discord_btn.setIcon(icon5) + self.discord_btn.setIconSize(QSize(32, 32)) + + self.verticalLayout_9.addWidget(self.discord_btn) + + self.verticalSpacer_9 = QSpacerItem(15, 15, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) + + self.verticalLayout_9.addItem(self.verticalSpacer_9) + + self.intranet_btn = QPushButton(self.btn_frame) + self.intranet_btn.setObjectName(u"intranet_btn") + self.intranet_btn.setMinimumSize(QSize(250, 50)) + icon6 = QIcon() + icon6.addFile(u":/assets/computer-tv.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.intranet_btn.setIcon(icon6) + self.intranet_btn.setIconSize(QSize(32, 32)) + + self.verticalLayout_9.addWidget(self.intranet_btn) + + + self.horizontalLayout_4.addLayout(self.verticalLayout_9) + + + self.verticalLayout_10.addWidget(self.btn_frame) + + self.verticalSpacer_3 = QSpacerItem(20, 20, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) + + self.verticalLayout_10.addItem(self.verticalSpacer_3) + + self.info_frame = QFrame(self.frame1) + self.info_frame.setObjectName(u"info_frame") + sizePolicy1.setHeightForWidth(self.info_frame.sizePolicy().hasHeightForWidth()) + self.info_frame.setSizePolicy(sizePolicy1) + self.info_frame.setMinimumSize(QSize(0, 300)) + self.info_frame.setStyleSheet(u"") + self.info_frame.setFrameShape(QFrame.Shape.StyledPanel) + self.info_frame.setFrameShadow(QFrame.Shadow.Raised) + self.horizontalLayout_9 = QHBoxLayout(self.info_frame) + self.horizontalLayout_9.setSpacing(0) + self.horizontalLayout_9.setObjectName(u"horizontalLayout_9") + self.horizontalLayout_9.setContentsMargins(0, 0, 0, 0) + self.info_text = QTextEdit(self.info_frame) + self.info_text.setObjectName(u"info_text") + self.info_text.setReadOnly(True) + self.info_text.setTextInteractionFlags(Qt.TextInteractionFlag.NoTextInteraction) + + self.horizontalLayout_9.addWidget(self.info_text) + + + self.verticalLayout_10.addWidget(self.info_frame) + + self.stackedWidget.addWidget(self.main_page) + self.auth_discord_page = QWidget() + self.auth_discord_page.setObjectName(u"auth_discord_page") + self.auth_discord_page.setMinimumSize(QSize(0, 482)) + self.auth_discord_page.setMaximumSize(QSize(700, 482)) + self.frame_2 = QFrame(self.auth_discord_page) + self.frame_2.setObjectName(u"frame_2") + self.frame_2.setGeometry(QRect(0, 0, 700, 482)) + self.frame_2.setMaximumSize(QSize(700, 16777215)) + self.frame_2.setFrameShape(QFrame.Shape.NoFrame) + self.frame_2.setFrameShadow(QFrame.Shadow.Raised) + self.verticalLayout_2 = QVBoxLayout(self.frame_2) + self.verticalLayout_2.setSpacing(0) + self.verticalLayout_2.setObjectName(u"verticalLayout_2") + self.verticalLayout_2.setContentsMargins(0, 0, 0, 0) + self.auth_discord_page_title = QFrame(self.frame_2) + self.auth_discord_page_title.setObjectName(u"auth_discord_page_title") + self.auth_discord_page_title.setMinimumSize(QSize(0, 80)) + self.auth_discord_page_title.setMaximumSize(QSize(16777215, 80)) + self.auth_discord_page_title.setFrameShape(QFrame.Shape.NoFrame) + self.auth_discord_page_title.setFrameShadow(QFrame.Shadow.Raised) + self.horizontalLayout_2 = QHBoxLayout(self.auth_discord_page_title) + self.horizontalLayout_2.setSpacing(0) + self.horizontalLayout_2.setObjectName(u"horizontalLayout_2") + self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0) + self.horizontalSpacer_2 = QSpacerItem(292, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_2.addItem(self.horizontalSpacer_2) + + self.discord_info_icon = QLabel(self.auth_discord_page_title) + self.discord_info_icon.setObjectName(u"discord_info_icon") + self.discord_info_icon.setMinimumSize(QSize(32, 32)) + self.discord_info_icon.setMaximumSize(QSize(32, 32)) + self.discord_info_icon.setPixmap(QPixmap(u":/assets/letter-i-info.svg")) + self.discord_info_icon.setScaledContents(True) + + self.horizontalLayout_2.addWidget(self.discord_info_icon) + + self.discord_info_title_label = QLabel(self.auth_discord_page_title) + self.discord_info_title_label.setObjectName(u"discord_info_title_label") + self.discord_info_title_label.setMinimumSize(QSize(180, 30)) + self.discord_info_title_label.setScaledContents(True) + + self.horizontalLayout_2.addWidget(self.discord_info_title_label) + + self.horizontalSpacer_4 = QSpacerItem(291, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_2.addItem(self.horizontalSpacer_4) + + + self.verticalLayout_2.addWidget(self.auth_discord_page_title) + + self.auth_discord_page_content = QFrame(self.frame_2) + self.auth_discord_page_content.setObjectName(u"auth_discord_page_content") + self.auth_discord_page_content.setMaximumSize(QSize(700, 16777215)) + self.auth_discord_page_content.setFrameShape(QFrame.Shape.NoFrame) + self.auth_discord_page_content.setFrameShadow(QFrame.Shadow.Raised) + self.verticalLayout_3 = QVBoxLayout(self.auth_discord_page_content) + self.verticalLayout_3.setSpacing(0) + self.verticalLayout_3.setObjectName(u"verticalLayout_3") + self.verticalLayout_3.setContentsMargins(0, 0, 0, 0) + self.verticalSpacer_4 = QSpacerItem(0, 20, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) + + self.verticalLayout_3.addItem(self.verticalSpacer_4) + + self.label_2 = QLabel(self.auth_discord_page_content) + self.label_2.setObjectName(u"label_2") + self.label_2.setMinimumSize(QSize(0, 50)) + self.label_2.setMaximumSize(QSize(16777215, 50)) + self.label_2.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.verticalLayout_3.addWidget(self.label_2) + + self.verticalSpacer_2 = QSpacerItem(20, 30, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) + + self.verticalLayout_3.addItem(self.verticalSpacer_2) + + self.frame_8 = QFrame(self.auth_discord_page_content) + self.frame_8.setObjectName(u"frame_8") + self.frame_8.setFrameShape(QFrame.Shape.NoFrame) + self.frame_8.setFrameShadow(QFrame.Shadow.Raised) + self.horizontalLayout_3 = QHBoxLayout(self.frame_8) + self.horizontalLayout_3.setSpacing(0) + self.horizontalLayout_3.setObjectName(u"horizontalLayout_3") + self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0) + self.horizontalSpacer_7 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_3.addItem(self.horizontalSpacer_7) + + self.discord_auth_btn = QPushButton(self.frame_8) + self.discord_auth_btn.setObjectName(u"discord_auth_btn") + self.discord_auth_btn.setMinimumSize(QSize(380, 50)) + self.discord_auth_btn.setMaximumSize(QSize(250, 50)) + self.discord_auth_btn.setIcon(icon5) + self.discord_auth_btn.setIconSize(QSize(32, 32)) + + self.horizontalLayout_3.addWidget(self.discord_auth_btn) + + self.horizontalSpacer_8 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_3.addItem(self.horizontalSpacer_8) + + + self.verticalLayout_3.addWidget(self.frame_8) + + self.verticalSpacer_5 = QSpacerItem(20, 200, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) + + self.verticalLayout_3.addItem(self.verticalSpacer_5) + + + self.verticalLayout_2.addWidget(self.auth_discord_page_content) + + self.stackedWidget.addWidget(self.auth_discord_page) + self.whitelist = QWidget() + self.whitelist.setObjectName(u"whitelist") + self.whitelist.setMinimumSize(QSize(700, 482)) + self.whitelist.setMaximumSize(QSize(700, 482)) + self.frame_6 = QFrame(self.whitelist) + self.frame_6.setObjectName(u"frame_6") + self.frame_6.setGeometry(QRect(0, 0, 700, 482)) + self.frame_6.setMinimumSize(QSize(700, 482)) + self.frame_6.setMaximumSize(QSize(700, 482)) + self.frame_6.setFrameShape(QFrame.Shape.NoFrame) + self.frame_6.setFrameShadow(QFrame.Shadow.Raised) + self.verticalLayout_8 = QVBoxLayout(self.frame_6) + self.verticalLayout_8.setSpacing(0) + self.verticalLayout_8.setObjectName(u"verticalLayout_8") + self.verticalLayout_8.setContentsMargins(0, 0, 0, 0) + self.whitelist_page_title = QFrame(self.frame_6) + self.whitelist_page_title.setObjectName(u"whitelist_page_title") + self.whitelist_page_title.setMinimumSize(QSize(0, 80)) + self.whitelist_page_title.setMaximumSize(QSize(16777215, 80)) + self.whitelist_page_title.setFrameShape(QFrame.Shape.NoFrame) + self.whitelist_page_title.setFrameShadow(QFrame.Shadow.Raised) + self.horizontalLayout_5 = QHBoxLayout(self.whitelist_page_title) + self.horizontalLayout_5.setSpacing(0) + self.horizontalLayout_5.setObjectName(u"horizontalLayout_5") + self.horizontalLayout_5.setContentsMargins(0, 0, 0, 0) + self.horizontalSpacer_9 = QSpacerItem(292, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_5.addItem(self.horizontalSpacer_9) + + self.whitelist_info_icon_labe = QLabel(self.whitelist_page_title) + self.whitelist_info_icon_labe.setObjectName(u"whitelist_info_icon_labe") + self.whitelist_info_icon_labe.setMinimumSize(QSize(32, 32)) + self.whitelist_info_icon_labe.setMaximumSize(QSize(32, 32)) + self.whitelist_info_icon_labe.setPixmap(QPixmap(u":/assets/letter-i-info.svg")) + self.whitelist_info_icon_labe.setScaledContents(True) + + self.horizontalLayout_5.addWidget(self.whitelist_info_icon_labe) + + self.whitelist_info_title_label = QLabel(self.whitelist_page_title) + self.whitelist_info_title_label.setObjectName(u"whitelist_info_title_label") + self.whitelist_info_title_label.setMinimumSize(QSize(180, 30)) + self.whitelist_info_title_label.setScaledContents(True) + + self.horizontalLayout_5.addWidget(self.whitelist_info_title_label) + + self.horizontalSpacer_11 = QSpacerItem(291, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_5.addItem(self.horizontalSpacer_11) + + + self.verticalLayout_8.addWidget(self.whitelist_page_title) + + self.frame_7 = QFrame(self.frame_6) + self.frame_7.setObjectName(u"frame_7") + self.frame_7.setMaximumSize(QSize(700, 16777215)) + self.frame_7.setFrameShape(QFrame.Shape.NoFrame) + self.frame_7.setFrameShadow(QFrame.Shadow.Raised) + self.verticalLayout_7 = QVBoxLayout(self.frame_7) + self.verticalLayout_7.setSpacing(0) + self.verticalLayout_7.setObjectName(u"verticalLayout_7") + self.verticalLayout_7.setContentsMargins(0, 0, 0, 0) + self.verticalSpacer_6 = QSpacerItem(0, 20, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) + + self.verticalLayout_7.addItem(self.verticalSpacer_6) + + self.whitelist_info_text = QLabel(self.frame_7) + self.whitelist_info_text.setObjectName(u"whitelist_info_text") + self.whitelist_info_text.setMinimumSize(QSize(0, 50)) + self.whitelist_info_text.setMaximumSize(QSize(16777215, 50)) + self.whitelist_info_text.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.verticalLayout_7.addWidget(self.whitelist_info_text) + + self.verticalSpacer_11 = QSpacerItem(20, 30, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) + + self.verticalLayout_7.addItem(self.verticalSpacer_11) + + self.frame_9 = QFrame(self.frame_7) + self.frame_9.setObjectName(u"frame_9") + self.frame_9.setFrameShape(QFrame.Shape.NoFrame) + self.frame_9.setFrameShadow(QFrame.Shadow.Raised) + self.horizontalLayout_10 = QHBoxLayout(self.frame_9) + self.horizontalLayout_10.setSpacing(0) + self.horizontalLayout_10.setObjectName(u"horizontalLayout_10") + self.horizontalLayout_10.setContentsMargins(0, 0, 0, 0) + self.horizontalSpacer_12 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_10.addItem(self.horizontalSpacer_12) + + self.no_whitelist_btn = QPushButton(self.frame_9) + self.no_whitelist_btn.setObjectName(u"no_whitelist_btn") + self.no_whitelist_btn.setMinimumSize(QSize(380, 50)) + self.no_whitelist_btn.setMaximumSize(QSize(250, 50)) + icon7 = QIcon() + icon7.addFile(u":/assets/no_whitelist.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.no_whitelist_btn.setIcon(icon7) + self.no_whitelist_btn.setIconSize(QSize(32, 32)) + + self.horizontalLayout_10.addWidget(self.no_whitelist_btn) + + self.horizontalSpacer_13 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_10.addItem(self.horizontalSpacer_13) + + + self.verticalLayout_7.addWidget(self.frame_9) + + self.verticalSpacer_12 = QSpacerItem(20, 200, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) + + self.verticalLayout_7.addItem(self.verticalSpacer_12) + + + self.verticalLayout_8.addWidget(self.frame_7) + + self.stackedWidget.addWidget(self.whitelist) + + self.verticalLayout1.addWidget(self.stackedWidget) + + + self.horizontalLayout1.addWidget(self.right_column) + + + self.verticalLayout.addWidget(self.frame) + + MainWindow.setCentralWidget(self.main_container) + + self.retranslateUi(MainWindow) + + self.stackedWidget.setCurrentIndex(2) + + + QMetaObject.connectSlotsByName(MainWindow) + # setupUi + + def retranslateUi(self, MainWindow): + MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None)) + self.minimize_btn.setText("") + self.close_btn.setText("") + self.queue_lbl.setText(QCoreApplication.translate("MainWindow", u"Position en file d'attente: ", None)) + self.queue_position.setText(QCoreApplication.translate("MainWindow", u"-", None)) + self.mute_btn.setText("") + self.maintitle_label.setText(QCoreApplication.translate("MainWindow", u"LA TANI\u00c8RE", None)) + self.subtitle_label.setText(QCoreApplication.translate("MainWindow", u"Un espace pour se retrouver", None)) + self.connexion_btn.setText(QCoreApplication.translate("MainWindow", u" Connexion", None)) + self.staff_btn.setText(QCoreApplication.translate("MainWindow", u"staff", None)) + self.discord_btn.setText(QCoreApplication.translate("MainWindow", u" Discord", None)) + self.intranet_btn.setText(QCoreApplication.translate("MainWindow", u" Intranet", None)) + self.discord_info_icon.setText("") + self.discord_info_title_label.setText(QCoreApplication.translate("MainWindow", u"Information", None)) + self.label_2.setText(QCoreApplication.translate("MainWindow", u"UNE PREMI\u00c8RE AUTHENTIFICATION AVEC DISCORD EST N\u00c9CESSAIRE.", None)) + self.discord_auth_btn.setText(QCoreApplication.translate("MainWindow", u" M'authentifer avec Discord", None)) + self.whitelist_info_icon_labe.setText("") + self.whitelist_info_title_label.setText(QCoreApplication.translate("MainWindow", u"Information", None)) + self.whitelist_info_text.setText(QCoreApplication.translate("MainWindow", u"Tu n\u2019es pas whitelist\u00e9 sur le serveur.\n" +"Inscris-toi sur Discord, puis relance le launcher.", None)) + self.no_whitelist_btn.setText(QCoreApplication.translate("MainWindow", u" Compris !", None)) + # retranslateUi +