refacto pour simplifier la maintenance. Voir à séparer dans des sous class plus tard

This commit is contained in:
2026-03-13 12:20:16 +01:00
parent 13b591a157
commit 983d584015
2 changed files with 113 additions and 82 deletions

View File

@@ -130,6 +130,9 @@ class ConfigManager:
self.set(VOLUME_KEY, volume)
# --------------- GETTERS MÉTIER -------------------------------
def get_default(self, key: str):
return CONFIG_SCHEMA[key]["default"]
def get_discord_user(self) -> str:
return cast(str, self.get(DISCORD_USER_KEY))

View File

@@ -9,7 +9,7 @@ from PySide6.QtUiTools import QUiLoader
from PySide6.QtWidgets import QMainWindow, QApplication, QGraphicsDropShadowEffect
from PySide6.QtMultimedia import QMediaPlayer, QAudioOutput
from config.configure import ConfigManager
from config.config_manager import ConfigManager, VOLUME_KEY
# Compile resources.qrc into resources_rc.py
# rcc -g python .\resources.qrc -o .\src\resources_rc.py
@@ -50,13 +50,13 @@ class MainWindow(QMainWindow):
# Initialisation de la configuration
self.config = ConfigManager()
# Chargement de l'interface
self.ui = QUiLoader().load(f"{bundle_dir}/ui/mainwindow.ui", self)
central = self.ui.centralWidget()
self.setCentralWidget(central)
self.setCentralWidget(self.ui.centralWidget())
# # Remove the title bar and window frame
# Remove the title bar and window frame
self.setWindowFlags(Qt.WindowType.FramelessWindowHint | Qt.WindowType.Window)
# # Optional: Make background transparent (if you want rounded corners, etc.)
# Optional: Make background transparent (if you want rounded corners, etc.)
self.setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground)
# Initialize audio
@@ -79,15 +79,17 @@ class MainWindow(QMainWindow):
self.media_player.setSourceDevice(self.mp3buffer)
# Définir la valeur initiale du slider (ici: 10%)
#self.ui.audio_volume_adjust.setValue(10)
self.ui.audio_volume_adjust.setValue(self.config.get_volume())
#self.audio_output.setVolume(0.1)
self.audio_output.setVolume(self.config.get_volume() / 100)
volume = self.config.get_volume()
# Initialisation de la mémoire du volume (par défaut 10%)
self.previous_volume = 10
self.is_muted = False
# Définir la valeur initiale du slider (ici: 10%)
self.ui.audio_volume_adjust.setValue(volume)
self.audio_output.setVolume(volume / 100)
self.is_muted = volume == 0
self.previous_volume = volume if volume != 0 else self.config.get_default(VOLUME_KEY)
if self.is_muted:
self.ui.mute_btn.setProperty("muted", True)
# Connexion du Slider
self.ui.audio_volume_adjust.valueChanged.connect(self.update_volume)
@@ -104,38 +106,114 @@ class MainWindow(QMainWindow):
self.ui.info_text.setMarkdown(patch_note)
self.setup_button_animation()
self.connect_signals()
# On centre la fenêtre avant de l'afficher
self.center_window()
self.show()
#------------------------------------------------------------------------------------------------------------
def setup_button_animation(self):
# 1. Création de l'effet de lueur intense
self.ui.connexion_btn.glow = QGraphicsDropShadowEffect(self.ui.connexion_btn)
self.ui.connexion_btn.glow.setBlurRadius(20) # Point de départ
self.ui.connexion_btn.glow.setOffset(0, 0) # Centré
self.ui.connexion_btn.glow.setColor(QColor(255, 140, 0, 255)) # Orange pur (Alpha max)
#self.ui.connexion_btn.setGraphicsEffect(self.ui.connexion_btn.glow)
glow = QGraphicsDropShadowEffect(self.ui.connexion_btn)
glow.setBlurRadius(20) # Point de départ
glow.setOffset(0, 0) # Centré
glow.setColor(QColor(255, 140, 0, 255)) # Orange pur (Alpha max)
self.ui.connexion_btn.glow = glow
# 2. Animation du "Pulse" avec une grande amplitude
self.ui.connexion_btn.pulse_anim = QPropertyAnimation(self.ui.connexion_btn.glow, b"blurRadius")
self.ui.connexion_btn.pulse_anim.setDuration(1200) # Un peu plus rapide pour le dynamisme
self.ui.connexion_btn.pulse_anim.setStartValue(15) # Lueur de base
self.ui.connexion_btn.pulse_anim.setKeyValueAt(0.5, 70) # Lueur d'explosion (très large)
self.ui.connexion_btn.pulse_anim.setEndValue(15)
anim = QPropertyAnimation(glow, b"blurRadius")
anim.setDuration(1200) # Un peu plus rapide pour le dynamisme
anim.setStartValue(15) # Lueur de base
anim.setKeyValueAt(0.5, 70) # Lueur d'explosion (très large)
anim.setEndValue(15)
self.ui.connexion_btn.pulse_anim.setEasingCurve(QEasingCurve.InOutQuad)
self.ui.connexion_btn.pulse_anim.setLoopCount(-1)
#self.ui.connexion_btn.pulse_anim.start()
anim.setEasingCurve(QEasingCurve.InOutQuad)
anim.setLoopCount(-1)
self.ui.connexion_btn.pulse_anim = anim
def connect_signals(self):
# Find the button by its objectName in Qt Designer
# Example: objectName = "close_btn"
self.ui.close_btn.clicked.connect(self.close)
self.ui.minimize_btn.clicked.connect(self.showMinimized)
self.ui.connexion_btn.clicked.connect(self.connexion_btn_link)
self.ui.discord_btn.clicked.connect(self.discord_btn_link)
self.ui.intranet_btn.clicked.connect(self.intranet_btn_link)
self.ui.mute_btn.clicked.connect(self.mute_btn_link)
#self.show()
def set_volume(self, value):
self.audio_output.setVolume(value / 100)
self.ui.audio_volume_adjust.setValue(value)
self.config.set_volume(value)
# On centre la fenêtre avant de l'afficher
self.center_window()
self.show()
def update_volume(self, value):
# 'value' est l'entier venant du slider (ex: 0 à 100)
# On convertit en float pour QAudioOutput (0.0 à 1.0)
volume = value / 100.0
self.audio_output.setVolume(volume)
self.config.set_volume(value)
if volume == 0:
self.ui.mute_btn.setStyleSheet("background-color: red;")
def mute_btn_link(self) -> None:
current_volume = self.ui.audio_volume_adjust.value()
if current_volume == 0 and self.is_muted is False:
# volume déjà à 0 → restaurer le volume par défaut
default_volume = self.config.get_default(VOLUME_KEY)
self.ui.audio_volume_adjust.setValue(default_volume)
self.audio_output.setVolume(default_volume / 100)
self.config.set_volume(default_volume)
self.ui.mute_btn.setStyleSheet("")
return
if not self.is_muted:
# --- PASSAGE EN MUTE ---
self.previous_volume = current_volume
self.audio_output.setVolume(0.0)
self.ui.audio_volume_adjust.setValue(0)
self.ui.mute_btn.setStyleSheet("background-color: red;")
self.is_muted = True
self.config.set_volume(0)
else:
# --- RESTAURATION ---
volume_float = self.previous_volume / 100
self.audio_output.setVolume(volume_float)
self.ui.audio_volume_adjust.setValue(self.previous_volume)
self.ui.mute_btn.setStyleSheet("")
self.is_muted = False
self.config.set_volume(self.previous_volume)
@staticmethod
def connexion_btn_link():
return None
@staticmethod
def discord_btn_link():
webbrowser.open('https://discord.gg/A7eanmSkp2')
def intranet_btn_link(self):
webbrowser.open('https://la-taniere.fun/connexion/')
self.ui.connexion_btn.setGraphicsEffect(self.ui.connexion_btn.glow)
self.ui.connexion_btn.pulse_anim.start()
def center_window(self):
# On s'assure que la fenêtre a calculé sa taille
@@ -170,56 +248,6 @@ class MainWindow(QMainWindow):
self._drag_pos = None
super().mouseReleaseEvent(event)
@staticmethod
def connexion_btn_link():
return None
@staticmethod
def discord_btn_link() -> None:
webbrowser.open('https://discord.gg/A7eanmSkp2')
return None
def intranet_btn_link(self) -> None:
webbrowser.open('https://la-taniere.fun/connexion/')
self.ui.connexion_btn.setGraphicsEffect(self.ui.connexion_btn.glow)
self.ui.connexion_btn.pulse_anim.start()
return None
def update_volume(self, value):
# 'value' est l'entier venant du slider (ex: 0 à 100)
# On convertit en float pour QAudioOutput (0.0 à 1.0)
volume = value / 100.0
self.audio_output.setVolume(volume)
self.config.set_volume(value)
def mute_btn_link(self) -> None:
if not self.is_muted:
# --- PASSAGE EN MUTE ---
# On sauvegarde la valeur actuelle du slider
self.previous_volume = self.ui.audio_volume_adjust.value()
# On met le volume à 0 (moteur audio + interface)
self.audio_output.setVolume(0.0)
self.ui.audio_volume_adjust.setValue(0)
# Optionnel : changer l'icône ou le style du bouton
self.ui.mute_btn.setStyleSheet("background-color: red;")
self.is_muted = True
self.config.set_volume(0)
else:
# --- RETOUR DU SON ---
# On restaure le volume précédent
volume_float = self.previous_volume / 100.0
self.audio_output.setVolume(volume_float)
self.ui.audio_volume_adjust.setValue(self.previous_volume)
# Optionnel : remettre le style d'origine
self.ui.mute_btn.setStyleSheet("")
self.is_muted = False
self.config.set_volume(self.previous_volume)
def closeEvent(self, event):
self.config.save()
super().closeEvent(event)