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.setDefaultButton(yes)
box.exec() box.exec()
return box.clickedButton() == yes 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 import requests
from packaging import version from packaging import version
from PyQt6.QtWidgets import QApplication 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.alert_manager import AlertManager
from app.core.settings_manager import SettingsManager from app.core.settings_manager import SettingsManager
from app.core.language_manager import LanguageManager from app.core.language_manager import LanguageManager
@ -67,10 +67,7 @@ class UpdateManager:
releases = self.get_releases_with_asset() releases = self.get_releases_with_asset()
release = releases[0] if releases else None release = releases[0] if releases else None
if release and version.parse(release["tag_name"]) > version.parse(current_version): if release and version.parse(release["tag_name"]) > version.parse(current_version):
choice = self.alert_manager.show_choice( choice = self.show_update_dialog(releases, current_version, parent)
self.language_manager.get_text("update_found").replace("{latest_tag}", release["tag_name"]),
parent=parent
)
if choice: if choice:
folder = QFileDialog.getExistingDirectory(parent, self.language_manager.get_text("choose_update_folder")) folder = QFileDialog.getExistingDirectory(parent, self.language_manager.get_text("choose_update_folder"))
if folder: if folder:
@ -114,3 +111,64 @@ class UpdateManager:
subprocess.Popen([local_path]) subprocess.Popen([local_path])
except Exception: except Exception:
self.alert_manager.show_error("update_download_error", parent=parent) 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_os": "Windows",
"app_version": "1.0.0", "app_version": "1.0.0",
"architecture": "x64", "architecture": "x64",
"icon_path": "data/assets/icon.ico", "icon_path": "data/assets/icon.ico",
"main_script": "main.py", "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", "update_download_error": "Error downloading update",
"downloading_update": "Downloading update...", "downloading_update": "Downloading update...",
"update": "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", "update_download_error": "Erreur lors du téléchargement de la mise à jour",
"downloading_update": "Téléchargement de la mise à jour...", "downloading_update": "Téléchargement de la mise à jour...",
"update": "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"
} }