update full manage
This commit is contained in:
parent
7ae16570d5
commit
df598ef183
@ -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é
|
||||
|
20
app/ui/widgets/loading_bar.py
Normal file
20
app/ui/widgets/loading_bar.py
Normal 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)
|
@ -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"
|
||||
}
|
@ -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"
|
||||
}
|
@ -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"
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user