update full manage

This commit is contained in:
Louis Mazin 2025-08-19 20:12:30 +02:00
parent 7ae16570d5
commit df598ef183
5 changed files with 55 additions and 12 deletions

View File

@ -1,9 +1,11 @@
import requests
from packaging import version
from PyQt6.QtWidgets import QFileDialog
from PyQt6.QtWidgets import QApplication
from PyQt6.QtWidgets import QFileDialog, QDialog, QVBoxLayout
from app.core.alert_manager import AlertManager
from app.core.settings_manager import SettingsManager
from app.core.language_manager import LanguageManager
from app.ui.widgets.loading_bar import LoadingBar
import os
import sys
import subprocess
@ -17,7 +19,6 @@ class UpdateManager:
self.app_name = self.settings_manager.get_config("app_name").replace(" ","_")
self.app_os = self.settings_manager.get_config("app_os")
self.arch = self.settings_manager.get_config("architecture")
self.extension = "exe" if self.app_os.lower() == "windows" else "AppImage" # adapte selon OS
def get_latest_release_with_asset(self) -> dict:
# Récupère la release la plus récente qui contient le bon fichier
@ -33,10 +34,10 @@ class UpdateManager:
resp = requests.get(api_url)
releases = resp.json()
# Cherche le bon asset dans chaque release
expected_filename = f"{self.app_name}-{self.app_os}-{self.arch}.{self.extension}"
expected_filename = f"{self.app_name}-{self.app_os}-{self.arch}"
for release in releases:
for asset in release.get("assets", []):
if asset.get("name", "") == expected_filename:
if expected_filename in asset.get("name", ""):
return {
"tag_name": release.get("tag_name"),
"download_url": asset.get("browser_download_url")
@ -56,18 +57,36 @@ class UpdateManager:
if choice:
folder = QFileDialog.getExistingDirectory(parent, self.language_manager.get_text("choose_update_folder"))
if folder:
self.download(release["download_url"], folder, parent)
self.download(release["download_url"], release["tag_name"], folder, parent)
return True
return False
def download(self, download_url, folder, parent=None):
def download(self, download_url, version, folder, parent=None):
try:
filename = os.path.basename(download_url)
filename = os.path.basename(download_url).replace(".", "-" +version + ".")
local_path = os.path.join(folder, filename)
resp = requests.get(download_url, stream=True)
total = int(resp.headers.get('content-length', 0))
# Crée une boîte de dialogue avec la barre de chargement
dialog = QDialog(parent)
dialog.setWindowTitle(self.language_manager.get_text("update"))
layout = QVBoxLayout(dialog)
loading_bar = LoadingBar(self.language_manager.get_text("downloading_update"), dialog)
layout.addWidget(loading_bar)
dialog.setModal(True)
dialog.show()
downloaded = 0
with open(local_path, "wb") as f:
for chunk in resp.iter_content(chunk_size=8192):
f.write(chunk)
if chunk:
f.write(chunk)
downloaded += len(chunk)
percent = int(downloaded * 100 / total) if total else 0
loading_bar.set_progress(percent)
QApplication.processEvents()
dialog.close()
msg = self.language_manager.get_text("update_downloaded").replace("{local_path}", local_path)
self.alert_manager.show_success(msg, parent=parent)
# Ouvre le fichier téléchargé

View File

@ -0,0 +1,20 @@
from PyQt6.QtWidgets import QProgressBar, QWidget, QVBoxLayout, QLabel
from PyQt6.QtCore import Qt
class LoadingBar(QWidget):
def __init__(self, label_text: str = "", parent=None) -> None:
super().__init__(parent)
layout = QVBoxLayout(self)
layout.setAlignment(Qt.AlignmentFlag.AlignCenter)
self.label = QLabel(label_text, self)
self.progress = QProgressBar(self)
self.progress.setMinimum(0)
self.progress.setMaximum(100)
layout.addWidget(self.label)
layout.addWidget(self.progress)
def set_label(self, text: str) -> None:
self.label.setText(text)
def set_progress(self, value: int) -> None:
self.progress.setValue(value)

View File

@ -1,10 +1,10 @@
{
"app_name": "Application",
"app_name": "HoDA",
"python_version": "3.11.7",
"app_os": "Windows",
"app_version": "1.0.0",
"architecture": "x64",
"icon_path": "data/assets/icon.ico",
"main_script": "main.py",
"git_repo": "https://gitea.louismazin.ovh/LouisMazin/PythonApplicationTemplate"
"git_repo": "https://gitea.louismazin.ovh/LouisMazin/HoDA"
}

View File

@ -21,5 +21,7 @@
"update_found": "New version available: {latest_tag} \nDo you want to install the update?",
"choose_update_folder": "Choose destination folder",
"update_downloaded": "Update downloaded to {local_path}",
"update_download_error": "Error downloading update"
"update_download_error": "Error downloading update",
"downloading_update": "Downloading update...",
"update": "Update"
}

View File

@ -21,5 +21,7 @@
"update_found": "Nouvelle version disponible : {latest_tag} \nVoulez-vous installer la mise à jour ?",
"choose_update_folder": "Choisissez le dossier de destination",
"update_downloaded": "Mise à jour téléchargée dans {local_path}",
"update_download_error": "Erreur lors du téléchargement de la mise à jour"
"update_download_error": "Erreur lors du téléchargement de la mise à jour",
"downloading_update": "Téléchargement de la mise à jour...",
"update": "Mise à jour"
}