2025-10-22 18:34:02 +02:00

66 lines
2.7 KiB
Python

from functools import wraps
from PyQt6.QtWidgets import QMessageBox
from app.core.main_manager import MainManager
def require_license(feature_id: str, show_upgrade_dialog: bool = True):
"""
Décorateur pour protéger une fonctionnalité premium
Usage:
@require_license("advanced_export")
def export_to_excel(self):
# Code de la fonctionnalité premium
"""
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
main_manager = MainManager.get_instance()
license_manager = main_manager.get_license_manager()
settings_manager = main_manager.get_settings_manager()
# Si le système de licence est désactivé, autoriser toutes les fonctionnalités
if not settings_manager.get_config("enable_licensing"):
return func(*args, **kwargs)
if not license_manager.is_feature_available(feature_id):
if show_upgrade_dialog:
show_upgrade_message(feature_id)
return None
return func(*args, **kwargs)
return wrapper
return decorator
def show_upgrade_message(feature_id: str):
"""Affiche un message invitant à acheter la version premium"""
main_manager = MainManager.get_instance()
language_manager = main_manager.get_language_manager()
settings_manager = main_manager.get_settings_manager()
# Si le système de licence est désactivé, ne rien afficher
if not settings_manager.get_config("enable_licensing"):
return
feature_name = settings_manager.get_config("feature_descriptions", {}).get(
feature_id, feature_id
)
msg = QMessageBox()
msg.setIcon(QMessageBox.Icon.Information)
msg.setWindowTitle(language_manager.get_text("premium_feature"))
msg.setText(language_manager.get_text("premium_feature_message").format(feature=feature_name))
msg.setInformativeText(language_manager.get_text("upgrade_prompt"))
buy_btn = msg.addButton(language_manager.get_text("buy_now"), QMessageBox.ButtonRole.AcceptRole)
activate_btn = msg.addButton(language_manager.get_text("activate_license"), QMessageBox.ButtonRole.ActionRole)
msg.addButton(language_manager.get_text("cancel"), QMessageBox.ButtonRole.RejectRole)
msg.exec()
if msg.clickedButton() == buy_btn:
import webbrowser
webbrowser.open(settings_manager.get_config("purchase_url"))
elif msg.clickedButton() == activate_btn:
from app.ui.windows.activation_window import ActivationWindow
activation_window = ActivationWindow()
activation_window.exec()