upsell_neocom_controller.py (4182B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\clonegrade\upsell_neocom_controller.py 2 import logging 3 import threadutils 4 import uthread2 5 from eve.client.script.ui.omega.upsell.neocomButton import OmegaUpsellFixedNeocomButtonExtension 6 from omega.client.clone_grade_svc import get_clone_grade_svc 7 from omega.client.const import LOG_ENTRY_NAME 8 import omega.client.signal as omega_signals 9 from stackless_response_router.exceptions import TimeoutException 10 from omega.client.mock.omega_state import mocked_long_lapsing 11 logger = logging.getLogger(__name__) 12 13 class UpsellNeocomController(object): 14 15 def __init__(self): 16 self._neocom_button_extension = None 17 self._update_thread = None 18 omega_signals.on_omega_license_acquired.connect(self._on_omega_license_changed) 19 omega_signals.on_omega_license_changed.connect(self._on_omega_license_changed) 20 omega_signals.on_omega_license_expired.connect(self._on_omega_license_changed) 21 omega_signals.on_omega_recurring_changed.connect(self._on_omega_license_changed) 22 mocked_long_lapsing.on_change.connect(self._on_mocked_omega_lapsing_changed) 23 24 def __del__(self): 25 omega_signals.on_omega_license_acquired.disconnect(self._on_omega_license_changed) 26 omega_signals.on_omega_license_changed.disconnect(self._on_omega_license_changed) 27 omega_signals.on_omega_license_expired.disconnect(self._on_omega_license_changed) 28 omega_signals.on_omega_recurring_changed.disconnect(self._on_omega_license_changed) 29 mocked_long_lapsing.on_change.connect(self._on_mocked_omega_lapsing_changed) 30 self._kill_update_thread() 31 32 def _kill_update_thread(self): 33 if self._update_thread is not None: 34 self._update_thread.kill() 35 self._update_thread = None 36 37 def update_neocom_button(self): 38 self._kill_update_thread() 39 self._update_thread = uthread2.StartTasklet(self._update_neocom_button) 40 41 def _update_neocom_button(self): 42 log_info = '%s - Updating NEOCOM button: ' % LOG_ENTRY_NAME 43 try: 44 is_omega = get_clone_grade_svc().is_omega_without_grace_period() 45 log_info += 'user is Omega, ' if is_omega else 'user is Alpha, ' 46 is_about_to_lapse = get_clone_grade_svc().is_omega_about_to_lapse() 47 log_info += 'about to lapse, ' if is_about_to_lapse else 'not about to lapse, ' 48 if not is_omega or is_about_to_lapse: 49 log_info += 'so we need to show the button in the NEOCOM.' 50 self._register_neocom_button_extension() 51 else: 52 log_info += 'so we need to hide the button in the NEOCOM.' 53 self._unregister_neocom_button_extension() 54 except TimeoutException: 55 log_info += "Could not get Omega status - timed out. If not using mocks, this isn't expected to work in dev tier." 56 finally: 57 logger.info(log_info) 58 59 @threadutils.threaded 60 def _register_neocom_button_extension(self): 61 if self._neocom_button_extension is not None: 62 if not self._unregister_neocom_button_extension(): 63 return 64 logger.info('%s - Registering NEOCOM button extension' % LOG_ENTRY_NAME) 65 self._neocom_button_extension = OmegaUpsellFixedNeocomButtonExtension() 66 sm.GetService('neocom').RegisterFixedButtonExtension(self._neocom_button_extension) 67 68 def _unregister_neocom_button_extension(self): 69 if self._neocom_button_extension is not None: 70 try: 71 logger.info('%s - Unregistering NEOCOM button extension' % LOG_ENTRY_NAME) 72 sm.GetService('neocom').UnregisterFixedButtonExtension(self._neocom_button_extension) 73 return True 74 except ValueError: 75 return False 76 finally: 77 self._neocom_button_extension = None 78 79 def _on_omega_license_changed(self, *args): 80 self._kill_update_thread() 81 self._update_neocom_button() 82 83 def _on_mocked_omega_lapsing_changed(self, *args): 84 self._kill_update_thread() 85 self._update_neocom_button()