This commit is contained in:
2025-04-13 19:06:01 +02:00
commit cc91de9d52
29 changed files with 4049 additions and 0 deletions

91
windows/main_window.py Normal file
View File

@@ -0,0 +1,91 @@
import asyncio
import sys
from pathlib import Path
import logging
import base64
from PySide6.QtCore import QTimer
from PySide6.QtGui import QIcon
from PySide6.QtWidgets import QMainWindow
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(lambda cookie: asyncio.ensure_future(self.download_manager.add_cookie(cookie)))
self.logger.debug("Signaux connectés")
# initialisation du gestionnaire de téléchargement
self.dm_loop = None
QTimer.singleShot(0, self.setup_async_tasks)
self.logger.info("Fenêtre principale initialisée avec succès")
def setup_async_tasks(self):
# Lancer les tâches asyncio une fois que l'application est prête
self.logger.debug("Configuration des tâches asynchrones")
self.dm_loop = asyncio.ensure_future(self.download_manager.loop_queue())
self.logger.debug("File d'attente de téléchargement démarrée")
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_ready:
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")