breezy-desktop/ui/src/licensedialog.py

76 lines
3.2 KiB
Python

from gi.repository import Adw, Gtk, GLib
from .statemanager import StateManager
from .licensetierrow import LicenseTierRow
from .licensefeaturerow import LicenseFeatureRow
from .xrdriveripc import XRDriverIPC
@Gtk.Template(resource_path='/com/xronlinux/BreezyDesktop/gtk/license-dialog.ui')
class LicenseDialog(Gtk.Dialog):
__gtype_name__ = 'LicenseDialog'
tiers = Gtk.Template.Child()
features = Gtk.Template.Child()
request_token = Gtk.Template.Child()
verify_token = Gtk.Template.Child()
refresh_license_button = Gtk.Template.Child()
def __init__(self):
super(Gtk.Dialog, self).__init__()
self.init_template()
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.refresh_license_button.connect('clicked', self._refresh_license)
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)
tiers_group = Adw.PreferencesGroup(title="Paid Tier Status", margin_top=20)
self.tiers.append(tiers_group)
for tier_name, tier_details in license_view['tiers'].items():
tiers_group.add(LicenseTierRow(tier_name, tier_details))
for child in self.features:
self.features.remove(child)
features_group = Adw.PreferencesGroup(title="Feature Availability", margin_top=20)
self.features.append(features_group)
for feature_name, feature_details in license_view['features'].items():
features_group.add(LicenseFeatureRow(feature_name, feature_details))
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)