def run(argv): # Initialize globals right away to avoid stale values from the last addon invocation. # Otherwise Kodi's reuseLanguageInvoker will cause some really quirky behavior! # PR: https://github.com/xbmc/xbmc/pull/13814 G.init_globals(argv) check_service_upgrade() netflix_service = NetflixService() if netflix_service.init_servers(): netflix_service.run()
def run(argv): # Initialize globals right away to avoid stale values from the last addon invocation. # Otherwise Kodi's reuseLanguageInvoker will cause some really quirky behavior! # PR: https://github.com/xbmc/xbmc/pull/13814 G.init_globals(argv) LOG.info('Started (Version {})'.format(G.VERSION_RAW)) LOG.info('URL is {}'.format(G.URL)) success = True window_cls = Window(10000) # Kodi home window # If you use multiple Kodi profiles you need to distinguish the property of current profile prop_nf_service_status = G.py2_encode('nf_service_status_' + get_current_kodi_profile_name()) is_external_call = _check_addon_external_call(window_cls, prop_nf_service_status) service_status = _get_service_status(window_cls, prop_nf_service_status) if service_status.get('status') != 'running': if not is_external_call: if service_status.get('status') == 'error': # The services are not started due to an error exception from resources.lib.kodi.ui import show_error_info show_error_info( get_local_string(30105), get_local_string(30240).format( service_status.get('message')), False, False) else: # The services are not started yet from resources.lib.kodi.ui import show_backend_not_ready show_backend_not_ready() success = False if success: cancel_playback = False pathitems = [part for part in G.REQUEST_PATH.split('/') if part] if G.IS_ADDON_FIRSTRUN: is_first_run_install, cancel_playback = check_addon_upgrade() if is_first_run_install: from resources.lib.config_wizard import run_addon_configuration run_addon_configuration() if cancel_playback and G.MODE_PLAY in pathitems[:1]: # Temporary for migration library STRM to new format. todo: to be removed in future releases # When a user do the add-on upgrade, the first time that the add-on will be opened will be executed # the library migration. But if a user instead to open the add-on, try to play a video from Kodi # library, Kodi will open the old STRM file because the migration is executed after. success = False else: success = route(pathitems) if not success: from xbmcplugin import endOfDirectory endOfDirectory(handle=G.PLUGIN_HANDLE, succeeded=False) LOG.log_time_trace()
def run(argv): """ Addon entry point """ G.init_globals(argv) if G.MODE == "camera": programmi_camera() elif G.MODE == "senato": programmi_senato() elif G.MODE == "tv": programmi_tv() elif G.MODE == "radio": programmi_radio() else: show_root_menu()
def run(argv): # Initialize globals right away to avoid stale values from the last addon invocation. # Otherwise Kodi's reuseLanguageInvoker will cause some really quirky behavior! # PR: https://github.com/xbmc/xbmc/pull/13814 G.init_globals(argv) LOG.info('Started (Version {})'.format(G.VERSION_RAW)) LOG.info('URL is {}'.format(G.URL)) success = False try: pathitems = [part for part in G.REQUEST_PATH.split('/') if part] success = route(pathitems) except Exception as exc: import traceback LOG.error(traceback.format_exc()) kodi_ops.dlg_ok( 'AutoUpdateKodi', kodi_ops.get_local_string(30700).format('[{}] {}'.format( exc.__class__.__name__, exc))) if not success: from xbmcplugin import endOfDirectory endOfDirectory(handle=G.PLUGIN_HANDLE, succeeded=False) LOG.log_time_trace()
def run(argv): # Initialize globals right away to avoid stale values from the last addon invocation. # Otherwise Kodi's reuseLanguageInvoker will cause some really quirky behavior! # PR: https://github.com/xbmc/xbmc/pull/13814 G.init_globals(argv) LOG.info('Started (Version {})', G.VERSION_RAW) LOG.info('URL is {}', G.URL) success = True is_external_call = _check_addon_external_call() service_status = _get_service_status() if service_status.get('status') != 'running': if not is_external_call: if service_status.get('status') == 'error': # The services are not started due to an error exception from resources.lib.kodi.ui import show_error_info show_error_info(get_local_string(30105), get_local_string(30240).format(service_status.get('message')), False, False) else: # The services are not started yet from resources.lib.kodi.ui import show_backend_not_ready show_backend_not_ready() success = False if success: pathitems = [part for part in G.REQUEST_PATH.split('/') if part] if G.IS_ADDON_FIRSTRUN: is_first_run_install = check_addon_upgrade() if is_first_run_install: from resources.lib.config_wizard import run_addon_configuration run_addon_configuration() success = route(pathitems) if not success: from xbmcplugin import endOfDirectory endOfDirectory(handle=G.PLUGIN_HANDLE, succeeded=False) LOG.log_time_trace()
def _on_change(self): LOG.debug('SettingsMonitor: settings have been changed, started checks') reboot_addon = False clean_cache = False use_mysql = G.ADDON.getSettingBool('use_mysql') use_mysql_old = G.LOCAL_DB.get_value('use_mysql', False, TABLE_SETTINGS_MONITOR) use_mysql_turned_on = use_mysql and not use_mysql_old LOG.debug('SettingsMonitor: Reloading global settings') G.init_globals(sys.argv, reinitialize_database=use_mysql != use_mysql_old, reload_settings=True) # Check the MySQL connection status after reinitialization of service global settings use_mysql_after = G.ADDON.getSettingBool('use_mysql') if use_mysql_turned_on and use_mysql_after: G.LOCAL_DB.set_value('use_mysql', True, TABLE_SETTINGS_MONITOR) ui.show_notification(G.ADDON.getLocalizedString(30202)) if not use_mysql_after and use_mysql_old: G.LOCAL_DB.set_value('use_mysql', False, TABLE_SETTINGS_MONITOR) _check_esn() # Check menu settings changes for menu_id, menu_data in iteritems(G.MAIN_MENU_ITEMS): # Check settings changes in show/hide menu if menu_data.get('has_show_setting', True): show_menu_new_setting = bool(G.ADDON.getSettingBool('_'.join(('show_menu', menu_id)))) show_menu_old_setting = G.LOCAL_DB.get_value('menu_{}_show'.format(menu_id), True, TABLE_SETTINGS_MONITOR) if show_menu_new_setting != show_menu_old_setting: G.LOCAL_DB.set_value('menu_{}_show'.format(menu_id), show_menu_new_setting, TABLE_SETTINGS_MONITOR) reboot_addon = True # Check settings changes in sort order of menu if menu_data.get('has_sort_setting'): menu_sortorder_new_setting = int(G.ADDON.getSettingInt('menu_sortorder_' + menu_data['path'][1])) menu_sortorder_old_setting = G.LOCAL_DB.get_value('menu_{}_sortorder'.format(menu_id), 0, TABLE_SETTINGS_MONITOR) if menu_sortorder_new_setting != menu_sortorder_old_setting: G.LOCAL_DB.set_value('menu_{}_sortorder'.format(menu_id), menu_sortorder_new_setting, TABLE_SETTINGS_MONITOR) clean_cache = True # Checks for settings changes that require cache invalidation if not clean_cache: page_results = G.ADDON.getSettingInt('page_results') page_results_old = G.LOCAL_DB.get_value('page_results', 90, TABLE_SETTINGS_MONITOR) if page_results != page_results_old: G.LOCAL_DB.set_value('page_results', page_results, TABLE_SETTINGS_MONITOR) clean_cache = True _check_msl_profiles() _check_watched_status_sync() if clean_cache: # We remove the cache to allow get the new results with the new settings G.CACHE.clear([CACHE_COMMON, CACHE_MYLIST, CACHE_SEARCH]) # Avoid perform these operations when the add-on is installed from scratch and there are no credentials if reboot_addon and not common.check_credentials(): reboot_addon = False if reboot_addon: LOG.debug('SettingsMonitor: addon will be rebooted') # Open root page common.container_update(common.build_url(['root'], mode=G.MODE_DIRECTORY))
def _on_change(self): common.reset_log_level_global_var() common.debug( 'SettingsMonitor: settings have been changed, started checks') reboot_addon = False clean_cache = False use_mysql = G.ADDON.getSettingBool('use_mysql') use_mysql_old = G.LOCAL_DB.get_value('use_mysql', False, TABLE_SETTINGS_MONITOR) use_mysql_turned_on = use_mysql and not use_mysql_old common.debug('SettingsMonitor: Reloading global settings') G.init_globals(sys.argv, reinitialize_database=use_mysql != use_mysql_old, reload_settings=True) # Check the MySQL connection status after reinitialization of service global settings use_mysql_after = G.ADDON.getSettingBool('use_mysql') if use_mysql_turned_on and use_mysql_after: G.LOCAL_DB.set_value('use_mysql', True, TABLE_SETTINGS_MONITOR) ui.show_notification(G.ADDON.getLocalizedString(30202)) if not use_mysql_after and use_mysql_old: G.LOCAL_DB.set_value('use_mysql', False, TABLE_SETTINGS_MONITOR) _esn_checks() # Check menu settings changes for menu_id, menu_data in iteritems(G.MAIN_MENU_ITEMS): # Check settings changes in show/hide menu if menu_data.get('has_show_setting', True): show_menu_new_setting = bool( G.ADDON.getSettingBool('_'.join(('show_menu', menu_id)))) show_menu_old_setting = G.LOCAL_DB.get_value( 'menu_{}_show'.format(menu_id), True, TABLE_SETTINGS_MONITOR) if show_menu_new_setting != show_menu_old_setting: G.LOCAL_DB.set_value('menu_{}_show'.format(menu_id), show_menu_new_setting, TABLE_SETTINGS_MONITOR) reboot_addon = True # Check settings changes in sort order of menu if menu_data.get('has_sort_setting'): menu_sortorder_new_setting = int( G.ADDON.getSettingInt('menu_sortorder_' + menu_data['path'][1])) menu_sortorder_old_setting = G.LOCAL_DB.get_value( 'menu_{}_sortorder'.format(menu_id), 0, TABLE_SETTINGS_MONITOR) if menu_sortorder_new_setting != menu_sortorder_old_setting: G.LOCAL_DB.set_value('menu_{}_sortorder'.format(menu_id), menu_sortorder_new_setting, TABLE_SETTINGS_MONITOR) # We remove the cache to allow get the new results in the chosen order G.CACHE.clear([CACHE_COMMON, CACHE_MYLIST, CACHE_SEARCH]) # Check changes on content profiles # This is necessary because it is possible that some manifests # could be cached using the previous settings (see msl_handler - load_manifest) menu_keys = [ 'enable_dolby_sound', 'enable_vp9_profiles', 'enable_hevc_profiles', 'enable_hdr_profiles', 'enable_dolbyvision_profiles', 'enable_force_hdcp', 'disable_webvtt_subtitle' ] collect_int = '' for menu_key in menu_keys: collect_int += unicode(int(G.ADDON.getSettingBool(menu_key))) collect_int_old = G.LOCAL_DB.get_value('content_profiles_int', '', TABLE_SETTINGS_MONITOR) if collect_int != collect_int_old: G.LOCAL_DB.set_value('content_profiles_int', collect_int, TABLE_SETTINGS_MONITOR) G.CACHE.clear([CACHE_MANIFESTS]) # Check if Progress Manager settings is changed progress_manager_enabled = G.ADDON.getSettingBool( 'ProgressManager_enabled') progress_manager_enabled_old = G.LOCAL_DB.get_value( 'progress_manager_enabled', False, TABLE_SETTINGS_MONITOR) if progress_manager_enabled != progress_manager_enabled_old: G.LOCAL_DB.set_value('progress_manager_enabled', progress_manager_enabled, TABLE_SETTINGS_MONITOR) common.send_signal(signal=common.Signals.SWITCH_EVENTS_HANDLER, data=progress_manager_enabled) # Avoid perform these operations when the add-on is installed from scratch and there are no credentials if (clean_cache or reboot_addon) and not common.check_credentials(): reboot_addon = False if reboot_addon: common.debug('SettingsMonitor: addon will be rebooted') # Open root page common.container_update( common.build_url(['root'], mode=G.MODE_DIRECTORY))
def run(argv): ''' Addon entry point ''' G.init_globals(argv) if G.PARAMS.get("page", "") == "": G.PAGENUM = 0 else: G.PAGENUM = int(G.PARAMS.get("page", "")) if G.MODE == "diretta_la7": play_dirette(G.URL_LIVE_LA7, True) elif G.MODE == "diretta_la7d": play_dirette(G.URL_LIVE_LA7D, True) elif G.MODE == "rivedi_la7": if G.PLAY == "": if G.GIORNO == "": rivedi(G.URL_RIVEDILA7, 'rivedila7.jpg') else: rivedi_giorno() else: play_video(G.PLAY, False) elif G.MODE == "rivedi_la7d": if G.PLAY == "": if G.GIORNO == "": rivedi(G.URL_RIVEDILA7D, 'rivedila7d.jpg') else: rivedi_giorno() else: play_video(G.PLAY, False) elif G.MODE == "la7_prime": if G.PLAY == "": if G.LINK == "": programmi_la7prime() else: video_programma() else: play_video(G.PLAY, False) elif G.MODE == "tutti_programmi": if G.PLAY == "": if G.LINK == "": programmi_lettera() else: video_programma() else: play_video(G.PLAY, False) elif G.MODE == "tg_meteo": if G.PLAY == "": if G.LINK == "": programmi_lettera_tg_meteo() else: video_programma() else: play_video(G.PLAY, False) elif G.MODE == "teche_la7": if G.PLAY == "": if G.LINK == "": programmi_lettera_teche_la7() else: video_programma_teche_la7() else: play_video(G.PLAY, False) else: show_root_menu()
def run(): G.init_globals() appcast_service = AppCastService() if appcast_service.init_servers(): appcast_service.run()
def run(argv): # pylint: disable=broad-except,ungrouped-imports,too-many-branches # Initialize globals right away to avoid stale values from the last addon invocation. # Otherwise Kodi's reuseLanguageInvoker will cause some really quirky behavior! # PR: https://github.com/xbmc/xbmc/pull/13814 G.init_globals(argv) reset_log_level_global_var() info('Started (Version {})'.format(G.VERSION_RAW)) info('URL is {}'.format(G.URL)) success = True window_cls = Window(10000) # Kodi home window # If you use multiple Kodi profiles you need to distinguish the property of current profile prop_nf_service_status = G.py2_encode('nf_service_status_' + get_current_kodi_profile_name()) is_external_call = _check_addon_external_call(window_cls, prop_nf_service_status) service_status = _get_service_status(window_cls, prop_nf_service_status) if service_status.get('status') != 'running': if not is_external_call: if service_status.get('status') == 'error': # The services are not started due to an error exception from resources.lib.kodi.ui import show_error_info show_error_info( get_local_string(30105), get_local_string(30240).format( service_status.get('message')), False, False) else: # The services are not started yet from resources.lib.kodi.ui import show_backend_not_ready show_backend_not_ready() success = False if success: try: cancel_playback = False pathitems = [part for part in G.REQUEST_PATH.split('/') if part] if G.IS_ADDON_FIRSTRUN: is_first_run_install, cancel_playback = check_addon_upgrade() if is_first_run_install: from resources.lib.config_wizard import run_addon_configuration run_addon_configuration() if cancel_playback and G.MODE_PLAY in pathitems[:1]: # Temporary for migration library STRM to new format. todo: to be removed in future releases # When a user do the add-on upgrade, the first time that the add-on will be opened will be executed # the library migration. But if a user instead to open the add-on, try to play a video from Kodi # library, Kodi will open the old STRM file because the migration is executed after. success = False else: success = route(pathitems) except BackendNotReady as exc_bnr: from resources.lib.kodi.ui import show_backend_not_ready show_backend_not_ready(G.py2_decode(str(exc_bnr), 'latin-1')) success = False except InputStreamHelperError as exc: from resources.lib.kodi.ui import show_ok_dialog show_ok_dialog('InputStream Helper Add-on error', ( 'The operation has been cancelled.\r\n' 'InputStream Helper has generated an internal error:\r\n{}\r\n\r\n' 'Please report it to InputStream Helper github.'.format(exc))) success = False except HttpError401: # HTTP error 401 Client Error: Unauthorized for url ... # This is a generic error, can happen when the http request for some reason has failed. # Known causes: # - Possible change of data format or wrong data in the http request (also in headers/params) # - Some current nf session data are not more valid (authURL/cookies/...) from resources.lib.kodi.ui import show_ok_dialog show_ok_dialog( get_local_string(30105), ('There was a communication problem with Netflix.\r\n' 'You can try the operation again or exit.')) success = False except (MbrStatusNeverMemberError, MbrStatusFormerMemberError): from resources.lib.kodi.ui import show_error_info show_error_info(get_local_string(30008), get_local_string(30180), False, True) success = False except Exception as exc: import traceback from resources.lib.kodi.ui import show_addon_error_info error(G.py2_decode(traceback.format_exc(), 'latin-1')) show_addon_error_info(exc) success = False if not success: from xbmcplugin import endOfDirectory endOfDirectory(handle=G.PLUGIN_HANDLE, succeeded=False) log_time_trace()