founded update details
This commit is contained in:
parent
8f8d7c1b26
commit
278f2353fe
@ -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
|
@ -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()
|
||||||
|
@ -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"
|
||||||
}
|
}
|
@ -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"
|
||||||
}
|
}
|
@ -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"
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user