breezy-desktop/ui/src/licensedialogcontent.py

105 lines
4.2 KiB
Python

from gi.repository import Adw, Gtk, GLib
from .nolicense import NoLicense
from .statemanager import StateManager
from .licensetierrow import LicenseTierRow
from .licensefeaturerow import LicenseFeatureRow
from .license import BREEZY_GNOME_FEATURES, BREEZY_GNOME_TIERS
from .xrdriveripc import XRDriverIPC
import gettext
_ = gettext.gettext
@Gtk.Template(resource_path='/com/xronlinux/BreezyDesktop/gtk/license-dialog-content.ui')
class LicenseDialogContent(Gtk.Box):
__gtype_name__ = 'LicenseDialogContent'
tiers = Gtk.Template.Child()
features = Gtk.Template.Child()
request_token = Gtk.Template.Child()
verify_token = Gtk.Template.Child()
donation_info = Gtk.Template.Child()
def __init__(self, refresh_license_button):
super(Gtk.Box, self).__init__()
self.init_template()
# check if it has a set_subtitle_selectable method
if hasattr(self.donation_info, 'set_subtitle_selectable'):
self.donation_info.set_subtitle_selectable(True)
self.refresh_license_button = refresh_license_button
self.refresh_license_button.connect('clicked', self._refresh_license)
self.ipc = XRDriverIPC.get_instance()
StateManager.get_instance().connect('notify::license-action-needed', self._handle_license)
self._handle_license(StateManager.get_instance())
self.request_token.connect('apply', self._on_request_token)
self.verify_token.connect('apply', self._on_verify_token)
self.no_license = NoLicense(hide_refresh_button = True)
def _refresh_license(self, widget):
self.refresh_license_button.set_sensitive(False)
self.ipc.write_control_flags({'refresh_device_license': True})
GLib.timeout_add_seconds(3, self._handle_license)
def _handle_license(self, state_manager = None, val = None):
GLib.idle_add(self._handle_license_idle, state_manager or StateManager.get_instance())
def _handle_license_idle(self, state_manager):
self.refresh_license_button.set_sensitive(False)
license_view = state_manager.state['ui_view'].get('license', {})
self.request_token.set_visible(not state_manager.confirmed_token)
self.verify_token.set_visible(not state_manager.confirmed_token)
for child in self.tiers:
self.tiers.remove(child)
for child in self.features:
self.features.remove(child)
if license_view:
allowed_tiers = set(BREEZY_GNOME_TIERS)
allowed_features = set(BREEZY_GNOME_FEATURES)
tiers_group = Adw.PreferencesGroup(title=_("Paid Tier Status"), margin_top=20)
has_any_tier = False
for tier_name, tier_details in license_view.get('tiers', {}).items():
if tier_name not in allowed_tiers:
continue
tiers_group.add(LicenseTierRow(tier_name, tier_details))
has_any_tier = True
if has_any_tier:
self.tiers.append(tiers_group)
features_group = Adw.PreferencesGroup(title=_("Feature Availability"), margin_top=20)
has_any_feature = False
for feature_name, feature_details in license_view.get('features', {}).items():
if feature_name not in allowed_features:
continue
features_group.add(LicenseFeatureRow(feature_name, feature_details))
has_any_feature = True
if has_any_feature:
self.features.append(features_group)
else:
self.tiers.append(self.no_license)
self.refresh_license_button.set_sensitive(True)
def _on_request_token(self, widget):
email_address = self.request_token.get_text()
self.request_token.set_editable(False)
if not self.ipc.request_token(email_address):
self.request_token.set_editable(True)
def _on_verify_token(self, widget):
token = self.verify_token.get_text()
self.request_token.set_editable(False)
self.verify_token.set_editable(False)
if self.ipc.verify_token(token):
self.ipc.write_control_flags({'refresh_device_license': True})
else:
self.request_token.set_editable(True)
self.verify_token.set_editable(True)