import threading from PySide6.QtCore import QTimer from PySide6.QtGui import QIcon from PySide6.QtWidgets import QMainWindow import sys from pathlib import Path import logging import base64 from src.conf import ConfManager from src.download import DownloadManager from src.handler import WebHandler from windows.site_window import SiteWindow import resources_rc class MainWindow(QMainWindow): def __init__(self, parent=None): super().__init__(parent) # Création d'un logger spécifique pour cette classe self.logger = logging.getLogger("MainWindow") self.logger.info("Initialisation de la fenêtre principale") # initialise main app self.setWindowTitle("Oxpanel") self.setMinimumSize(1024, 768) self.setWindowIcon(QIcon(":/oxpanel.ico")) self.url = "http://127.0.0.1:8000/" if "--dev" in sys.argv else "https://oxpanel.com/" self.logger.debug(f"URL configurée: {self.url}") # initialise every module self.logger.debug("Initialisation des modules") self.conf = ConfManager(self) self.download_manager = DownloadManager(self) self.web_handler = WebHandler(self.download_manager, self) # initialise windows self.logger.debug("Initialisation des fenêtres") self.site_window = SiteWindow(self) self.setCentralWidget(self.site_window) # connection des signaux self.site_window.on_cookie_added.connect(self.download_manager.add_cookie) self.logger.debug("Signaux connectés") self.logger.info("Fenêtre principale initialisée avec succès") def handle_files(self, file_paths): """ Traite les fichiers reçus via "Ouvrir avec" ou d'une autre instance. Args: file_paths (list): Liste des chemins de fichiers à traiter """ if not self.web_handler.site_loaded: QTimer.singleShot(100, lambda: self.handle_files(file_paths)) self.logger.info("Site pas prêt, report de l'envoie des fichiers") return self.logger.info(f"Traitement de {len(file_paths)} fichiers reçus") for file_path in file_paths: file_path = Path(file_path) self.logger.debug(f"Traitement du fichier : {file_path}") # Exemple: vérifier si le fichier existe if file_path.exists(): self.logger.debug(f"Le fichier {file_path} existe") try: with file_path.open("rb") as file: file_content = file.read() encoded_content = base64.b64encode(file_content).decode("utf-8") self.web_handler.on_message.emit({ "context": "upload_torrent", "content": encoded_content }) except Exception as e: self.logger.error(f"Erreur lors de la lecture ou de l'encodage du fichier {file_path}: {e}") else: self.logger.warning(f"Le fichier {file_path} n'existe pas") def closeEvent(self, event, /): self.download_manager.pause = True self.download_manager.stop = True self.download_manager.close_thread_workers() event.accept()