66 lines
2.7 KiB
Python
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() |