founded update details

This commit is contained in:
Louis Mazin 2025-09-08 19:56:40 +02:00
parent 8f8d7c1b26
commit 278f2353fe
5 changed files with 100 additions and 9 deletions

View File

@ -36,3 +36,28 @@ class AlertManager:
box.setDefaultButton(yes)
box.exec()
return box.clickedButton() == yes
def show_choice_with_details(self, message: str, parent=None, details_callback=None) -> bool:
"""
Affiche une boîte de dialogue Oui/Non avec un bouton Détails.
Si detailed_text est fourni, l'ajoute comme texte détaillé (affichable par l'utilisateur).
Le callback details_callback est appelé lorsque l'utilisateur clique sur le bouton Détails.
"""
box = QMessageBox(parent)
box.setWindowTitle(self.language_manager.get_text("confirmation"))
box.setText(message)
box.setIcon(QMessageBox.Icon.Question)
yes = box.addButton(QMessageBox.StandardButton.Yes)
no = box.addButton(QMessageBox.StandardButton.No)
details = box.addButton(self.language_manager.get_text("details"), QMessageBox.ButtonRole.ActionRole)
yes.setText(self.language_manager.get_text("yes"))
no.setText(self.language_manager.get_text("no"))
box.setDefaultButton(yes)
def on_button_clicked(button):
if button == details and details_callback:
details_callback()
box.buttonClicked.connect(on_button_clicked)
box.exec()
return box.clickedButton() == yes

View File

@ -1,7 +1,7 @@
import requests
from packaging import version
from PyQt6.QtWidgets import QApplication
from PyQt6.QtWidgets import QFileDialog, QDialog, QVBoxLayout
from PyQt6.QtWidgets import QFileDialog, QDialog, QVBoxLayout, QTextEdit, QPushButton, QHBoxLayout, QLabel
from app.core.alert_manager import AlertManager
from app.core.settings_manager import SettingsManager
from app.core.language_manager import LanguageManager
@ -67,10 +67,7 @@ class UpdateManager:
releases = self.get_releases_with_asset()
release = releases[0] if releases else None
if release and version.parse(release["tag_name"]) > version.parse(current_version):
choice = self.alert_manager.show_choice(
self.language_manager.get_text("update_found").replace("{latest_tag}", release["tag_name"]),
parent=parent
)
choice = self.show_update_dialog(releases, current_version, parent)
if choice:
folder = QFileDialog.getExistingDirectory(parent, self.language_manager.get_text("choose_update_folder"))
if folder:
@ -114,3 +111,64 @@ class UpdateManager:
subprocess.Popen([local_path])
except Exception:
self.alert_manager.show_error("update_download_error", parent=parent)
def show_update_dialog(self, releases: List[Dict], current_version: str, parent=None) -> bool:
"""
Affiche une boîte de dialogue avec options Mettre à jour et Détails via l'alert_manager
"""
latest_release = releases[0]
message = self.language_manager.get_text("update_found").replace("{latest_tag}", latest_release["tag_name"])
# Utiliser l'alert_manager avec boutons personnalisés
choice = self.alert_manager.show_choice_with_details(
message,
parent=parent,
details_callback=lambda: self.show_details_dialog(releases, current_version, parent)
)
return choice
def show_details_dialog(self, releases: List[Dict], current_version: str, parent=None) -> None:
"""
Affiche tous les changelogs des versions supérieures à la version actuelle
"""
dialog = QDialog(parent)
dialog.setWindowTitle(self.language_manager.get_text("update_details"))
dialog.setModal(True)
dialog.resize(600, 500)
layout = QVBoxLayout(dialog)
# Zone de texte pour afficher les changelogs
text_edit = QTextEdit()
text_edit.setReadOnly(True)
# Filtrer et trier les releases supérieures à la version actuelle
newer_releases = []
for release in releases:
if version.parse(release["tag_name"]) > version.parse(current_version):
newer_releases.append(release)
# Trier par version décroissante (plus récente en premier)
newer_releases.sort(key=lambda x: version.parse(x["tag_name"]), reverse=True)
# Construire le texte des changelogs
changelog_text = ""
for release in newer_releases:
changelog_text += f"## {self.language_manager.get_text('version')} {release['tag_name']} :\n\n"
body = release['body'].replace('\n','\n### ')
changelog_text += f"### {body}"
changelog_text += "\n\n"
if release != newer_releases[-1]:
changelog_text += "---\n\n"
print(changelog_text)
text_edit.setAcceptRichText(True)
text_edit.setMarkdown(changelog_text)
layout.addWidget(text_edit)
# Bouton Fermer
close_button = QPushButton(self.language_manager.get_text("close"))
close_button.clicked.connect(dialog.close)
layout.addWidget(close_button)
dialog.exec()

View File

@ -1,9 +1,9 @@
{
"app_name": "Application",
"app_name": "HoDA",
"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

@ -24,5 +24,9 @@
"update_download_error": "Error downloading update",
"downloading_update": "Downloading update...",
"update": "Update",
"footer_text": "© 2025 Louis Mazin. All rights reserved."
"footer_text": "© 2025 Louis Mazin. All rights reserved.",
"details": "Details",
"version": "Version",
"update_details": "Update Details",
"close": "Close"
}

View File

@ -24,5 +24,9 @@
"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",
"footer_text": "© 2025 Louis Mazin. Tous droits réservés."
"footer_text": "© 2025 Louis Mazin. Tous droits réservés.",
"details": "Détails",
"version": "Version",
"update_details": "Détails de la mise à jour",
"close": "Fermer"
}