def import_library(self, pathitems): # pylint: disable=unused-argument """Import previous exported STRM files to add-on and/or convert them to the current STRM format type""" if _check_auto_update_running(): return path = ui.show_browse_dialog(common.get_local_string(651), default_path=G.DATA_PATH) if path: if not ui.ask_for_confirmation(common.get_local_string(30140), common.get_local_string(20135)): return get_library_cls().import_library(path)
def run_nf_authentication_key(): """ Start operations to do the login with the authentication key file :return: data to send to service or None if user cancel operations or something was wrong """ from resources.lib.kodi import ui file_path = ui.show_browse_dialog(get_local_string(30400) + ': NFAuthentication.key', 1, extensions='.key') if file_path: data = '' while data == '': pin = ui.show_dlg_input_numeric(get_local_string(30345)) if pin: data = _get_authentication_key_data(file_path, pin) else: data = None if data and _verify_authentication_key_data(data): return _prepare_authentication_key_data(data) return None
def _save_system_info(): # Ask to save to a file filename = 'NFSystemInfo.txt' path = ui.show_browse_dialog( f'{common.get_local_string(30603)} - {filename}') if not path: return # This collect the main data to allow verification checks for problems data = f'Netflix add-on version: {G.VERSION}' data += f'\nDebug enabled: {LOG.is_enabled}' data += f'\nSystem platform: {common.get_system_platform()}' data += f'\nMachine architecture: {common.get_machine()}' data += f'\nUser agent string: {common.get_user_agent()}' data += '\n\n#### Widevine info ####\n' if common.get_system_platform() == 'android': data += f'\nSystem ID: {G.LOCAL_DB.get_value("drm_system_id", "--not obtained--", TABLE_SESSION)}' data += f'\nSecurity level: {G.LOCAL_DB.get_value("drm_security_level", "--not obtained--", TABLE_SESSION)}' data += f'\nHDCP level: {G.LOCAL_DB.get_value("drm_hdcp_level", "--not obtained--", TABLE_SESSION)}' wv_force_sec_lev = G.LOCAL_DB.get_value('widevine_force_seclev', WidevineForceSecLev.DISABLED, TABLE_SESSION) data += f'\nForced security level setting is: {wv_force_sec_lev}' else: try: from ctypes import (CDLL, c_char_p) cdm_lib_file_path = _get_cdm_file_path() try: lib = CDLL(cdm_lib_file_path) data += '\nLibrary status: Correctly loaded' try: lib.GetCdmVersion.restype = c_char_p data += f'\nVersion: {lib.GetCdmVersion().decode("utf-8")}' except Exception: # pylint: disable=broad-except # This can happen if the endpoint 'GetCdmVersion' is changed data += '\nVersion: Reading error' except Exception as exc: # pylint: disable=broad-except # This should not happen but currently InputStream Helper does not perform any verification checks on # downloaded and installed files, so if due to an problem it installs a CDM for a different architecture # or the files are corrupted, the user can no longer play videos and does not know what to do data += '\nLibrary status: Error loading failed' data += '\n>>> It is possible that is installed a CDM of a wrong architecture or is corrupted' data += '\n>>> Suggested solutions:' data += '\n>>> - Restore a previous version of Widevine library from InputStream Helper add-on settings' data += '\n>>> - Report the problem to the GitHub of InputStream Helper add-on' data += f'\n>>> Error details: {exc}' except Exception as exc: # pylint: disable=broad-except data += f'\nThe data could not be obtained. Error details: {exc}' data += '\n\n#### ESN ####\n' esn = get_esn() or '--not obtained--' data += f'\nUsed ESN: {common.censure(esn) if len(esn) > 50 else esn}' data += f'\nWebsite ESN: {get_website_esn() or "--not obtained--"}' data += f'\nAndroid generated ESN: {(generate_android_esn() or "--not obtained--")}' if common.get_system_platform() == 'android': data += '\n\n#### Device system info ####\n' try: import subprocess info = subprocess.check_output(['/system/bin/getprop' ]).decode('utf-8') data += f'\n{info}' except Exception as exc: # pylint: disable=broad-except data += f'\nThe data could not be obtained. Error: {exc}' data += '\n' try: common.save_file(common.join_folders_paths(path, filename), data.encode('utf-8')) ui.show_notification( f'{xbmc.getLocalizedString(35259)}: {filename}') # 35259=Saved except Exception as exc: # pylint: disable=broad-except LOG.error('save_file error: {}', exc) ui.show_notification('Error! Try another path')