def adjust_providers(self, status, package_disable=False): if status == 'disabled': action = 'enabled' if status == 'enabled': action = 'disabled' if len(self.known_providers) == 0: self.known_providers = database.get_providers() packages = list(set([provider['package'] for provider in self.known_providers])) selection = tools.showDialog.select("%s: %s Providers" % (tools.addonName, action[:-1].title()), packages) if selection == -1: return providers = [i for i in self.known_providers if i['package'] == packages[selection] and i['status'] == status] if package_disable is False: display_list = ["%s - %s" % (tools.colorString(i['provider_name'].upper()), i['provider_type'].title()) for i in providers if i['status'] == status] selection = tools.showDialog.multiselect("%s: %s Providers" % (tools.addonName, action[:-1].title()), display_list) if selection is None: return for i in selection: provider = providers[i] database.add_provider(provider['provider_name'], provider['package'], action, self.language, provider['provider_type']) elif package_disable is True: for i in providers: database.add_provider(i['provider_name'], i['package'], action, self.language, i['provider_type'])
def flip_mutliple_providers(self, status, provider_type=None, package_name=None): tools.showBusyDialog() providers = self.providers if package_name: providers = [i for i in providers if i['package'] == package_name] if provider_type: providers = [ i for i in providers if i['provider_type'] == provider_type ] for i in providers: self.providers_class.flip_provider_status(i['package'], i['provider_name'], status) self.providers = database.get_providers() self.fill_providers(self.package_list.getSelectedItem().getLabel()) tools.closeBusyDialog()
def flip_provider_status(self): provider_item = self.provider_list.getSelectedItem() new_status = self.providers_class.flip_provider_status( provider_item.getProperty('package'), provider_item.getLabel()) provider_item.setProperty('status', new_status) self.providers = database.get_providers()
def update_known_providers(self): provider_types = ['torrent', 'hosters'] sys.path.append(tools.dataPath) import providers providers = providers.get_all(self.language) if len(self.pre_update_collection) > 0: pack_name = self.pre_update_collection[0]['package'] hosters = providers[1] torrent = providers[0] for provider_type in range(len(provider_types)): for i in providers[provider_type]: provider_name = i[1] old_setting = [x for x in self.pre_update_collection if x['provider_type'] == provider_types[provider_type] and x['package'] == pack_name and x['provider_name'] == provider_name] if len(old_setting) > 0: old_setting = old_setting[0] database.add_provider(old_setting['provider_name'], old_setting['package'], old_setting['status'], old_setting['country'], old_setting['provider_type']) else: database.add_provider(i[1], i[2], 'enabled', self.language, provider_types[provider_type]) else: if self.known_providers is None or len(self.known_providers) == 0: for provider in providers[0]: tools.log('Adding Provider %s' % provider[1]) database.add_provider(provider[1], provider[2], 'enabled', self.language, 'torrent') for provider in providers[1]: tools.log('Adding Provider %s' % provider[1]) database.add_provider(provider[1], provider[2], 'enabled', self.language, 'hoster') else: for i in range(2): for provider in providers[i]: existing = [existing for existing in self.known_providers if provider[2] == existing['package']\ and provider[1] == existing['provider_name']\ and existing['provider_type'] == provider_types[i]] if len(existing) == 0: tools.log('Adding Provider %s' % provider[1]) database.add_provider(provider[1], provider[2], 'enabled', self.language, provider_types[i]) check = False self.known_providers = database.get_providers()
def __init__(self): # self.language = tools.getSetting('general.language') self.language = 'en' tools.progressDialog.create(tools.addonName, 'Please Wait, Building Provider List') self.known_providers = database.get_providers() tools.progressDialog.close() self.update_known_providers() self.providers_path = os.path.join(tools.dataPath, 'providers') self.modules_path = os.path.join(tools.dataPath, 'providerModules')
def adjust_providers(self, status, package_disable=False): if status == 'disabled': action = 'enabled' if status == 'enabled': action = 'disabled' if len(self.known_providers) == 0: self.known_providers = database.get_providers() known_packages = [i for i in self.known_packages] package_display = list( set([ '%s - %s' % (pack['pack_name'], pack['version']) for pack in known_packages ])) if len(known_packages) == 0: tools.showDialog.ok(tools.addonName, tools.lang(32074)) return selection = tools.showDialog.select( "%s: %s Providers" % (tools.addonName, action[:-1].title()), package_display) if selection == -1: return providers = [ i for i in self.known_providers if i['package'] == known_packages[selection]['pack_name'] and i['status'] == status and i['country'] == self.language ] if package_disable is False: display_list = [ "%s - %s" % (tools.colorString( i['provider_name'].upper()), i['provider_type'].title()) for i in providers if i['status'] == status ] selection = tools.showDialog.multiselect( "%s: %s Providers" % (tools.addonName, action[:-1].title()), display_list) if selection is None: return for i in selection: provider = providers[i] database.adjust_provider_status(provider['provider_name'], provider['package'], action) elif package_disable is True: for i in providers: database.adjust_provider_status(i['provider_name'], i['package'], action)
def __init__(self): self.deploy_init() self.pre_update_collection = [] self.language = 'en' self.known_providers = database.get_providers() self.known_packages = database.get_provider_packages() self.update_known_providers() self.providers_path = os.path.join(tools.dataPath, 'providers') self.modules_path = os.path.join(tools.dataPath, 'providerModules') self.meta_path = os.path.join(tools.dataPath, 'providerMeta')
def __init__(self): self.deploy_init() self.pre_update_collection = [] # self.language = tools.getSetting('general.language') self.language = 'en' #tools.progressDialog.create(tools.addonName, 'Please Wait, Building Provider List') self.known_providers = database.get_providers() self.known_packages = database.get_provider_packages() self.update_known_providers() #tools.progressDialog.close() self.providers_path = os.path.join(tools.dataPath, 'providers') self.modules_path = os.path.join(tools.dataPath, 'providerModules') self.meta_path = os.path.join(tools.dataPath, 'providerMeta')
def update_known_providers(self): provider_types = ['torrent', 'hosters'] sys.path.append(tools.dataPath) import providers all_providers = providers.get_all(self.language) all_providers = { 'torrent': all_providers[0], 'hosters': all_providers[1] } for provider_type in provider_types: for provider in all_providers[provider_type]: database.add_provider(provider[1], provider[2], 'enabled', self.language, provider_type) self.known_providers = database.get_providers()
def update_known_providers(self): sys.path.append(tools.dataPath) import providers providers = providers.get_all(self.language) if self.known_providers is None or len(self.known_providers) == 0: for provider in providers[0]: database.add_provider(provider[1], provider[2], 'enabled', self.language, 'torrent') for provider in providers[1]: database.add_provider(provider[1], provider[2], 'enabled', self.language, 'hoster') return for provider in providers[0]: check = False for kp in self.known_providers: if kp['country'] != self.language: continue if kp['provider_type'] != 'torrent': continue if provider[2] == kp['package'] and provider[1] == kp['provider_name']: check = True pass if check is False: tools.log('Adding Provider %s' % provider[1]) database.add_provider(provider[1], provider[2], 'enabled', self.language, 'torrent') check = False for provider in providers[1]: check = False for kp in self.known_providers: if kp['country'] != self.language: continue if kp['provider_type'] != 'hoster': continue if provider[2] == kp['package'] and provider[1] == kp['provider_name']: check = True if check is False: tools.log('Adding Provider %s' % provider[1]) database.add_provider(provider[1], provider[2], 'enabled', self.language, 'hoster') check = False self.known_providers = database.get_providers()
def flip_provider_status(self, package_name, provider_name, status_overide=None): current_status = [ i for i in database.get_providers() if i['package'] == package_name and i['provider_name'] == provider_name ][0]['status'] if not status_overide: if current_status == 'enabled': database.adjust_provider_status(provider_name, package_name, 'disabled') return 'disabled' else: database.adjust_provider_status(provider_name, package_name, 'enabled') return 'enabled' else: database.adjust_provider_status(provider_name, package_name, status_overide) return status_overide
def update_known_providers(self): provider_types = ['torrent', 'hosters'] sys.path.append(tools.dataPath) import providers providers = providers.get_all(self.language) if len(self.pre_update_collection) > 0: pack_name = self.pre_update_collection[0]['package'] hosters = providers[1] torrent = providers[0] for provider_type in range(len(provider_types)): for i in providers[provider_type]: provider_name = i[1] # We need to check that the provider file exists after updating # For some reason lsdir still shows files as existing after the module removes them. path = os.path.join(self.providers_path, pack_name, self.language, provider_types[provider_type], provider_name + ".py") if not os.path.exists(path): continue old_setting = [ x for x in self.pre_update_collection if x['provider_type'] == provider_types[provider_type] and x['package'] == pack_name and x['provider_name'] == provider_name ] if len(old_setting) > 0: old_setting = old_setting[0] database.add_provider(old_setting['provider_name'], old_setting['package'], old_setting['status'], old_setting['country'], old_setting['provider_type']) else: database.add_provider(i[1], i[2], 'enabled', self.language, provider_types[provider_type]) else: if self.known_providers is None or len(self.known_providers) == 0: for provider in providers[0]: tools.log('Adding Provider %s' % provider[1]) database.add_provider(provider[1], provider[2], 'enabled', self.language, 'torrent') for provider in providers[1]: tools.log('Adding Provider %s' % provider[1]) database.add_provider(provider[1], provider[2], 'enabled', self.language, 'hoster') else: for i in range(2): for provider in providers[i]: existing = [existing for existing in self.known_providers if provider[2] == existing['package']\ and provider[1] == existing['provider_name']\ and existing['provider_type'] == provider_types[i]] if len(existing) == 0: tools.log('Adding Provider %s' % provider[1]) database.add_provider(provider[1], provider[2], 'enabled', self.language, provider_types[i]) check = False self.known_providers = database.get_providers()
def install_zip(self, zip_file, silent=False): file_list = zip_file.namelist() for i in file_list: if i.startswith('/') or '..' in i: raise Exception meta_file = None for i in file_list: if i.startswith('meta.json'): meta_file = i if meta_file is not None: meta = zip_file.open(meta_file) meta = meta.readlines() meta = ''.join(meta) meta = meta.replace(' ', '').replace('\r', '').replace('\n', '') meta = json.loads(meta) requirements = ['author', 'name', 'version'] for i in requirements: if i not in meta: if not silent: self.failed_prompt() tools.log( 'Source pack is malformed, please check and correct issue in the meta file' ) return author = meta['author'] version = meta['version'] pack_name = meta['name'] remote_meta = meta.get('remote_meta', '') else: if not silent: self.failed_prompt() tools.log( 'Source pack is malformed, please check and correct issue in the meta file' ) import traceback traceback.print_exc() raise Exception if remote_meta == '': tools.showDialog.ok(tools.addonName, tools.lang(33016).encode('utf-8')) line1 = tools.colorString(tools.lang(33001).encode( 'utf-8')) + " %s - v%s" % (pack_name, version) line2 = tools.colorString( tools.lang(33002).encode('utf-8')) + "%s" % author line3 = tools.lang(33003).encode('utf-8') if not silent: accept = tools.showDialog.yesno( tools.addonName + " - %s" % tools.lang(33004).encode('utf-8'), line1, line2, line3, tools.lang(33005).encode('utf-8'), tools.lang(33006).encode('utf-8')) if accept == 0: return self.pre_update_collection = [ i for i in database.get_providers() if i['package'] == pack_name ] database.remove_package_providers(pack_name) folders = ['providerModules/', 'providers/'] meta_output_location = os.path.join(tools.dataPath, 'providerMeta', '%s.json' % pack_name) if os.path.isfile(meta_output_location): try: os.rename(meta_output_location, '%s.temp' % meta_output_location) except Exception as e: self.failure_cleanup(meta_output_location, pack_name, folders) tools.log('Failed to create temporary meta file') if not silent: tools.showDialog.ok(tools.addonName, tools.lang(33007).encode('utf-8')) return try: self.output_meta(meta) except: self.failure_cleanup(meta_output_location, pack_name, folders) tools.log('Failed to create new meta file') if not silent: self.failed_prompt() return else: self.output_meta(meta) if not silent: install_progress = tools.progressDialog install_progress.create( tools.addonName, '%s - %s' % (pack_name, tools.lang(33008).encode('utf-8')), tools.lang(33009).encode('utf-8')) install_progress.update(-1) try: for folder in folders: try: folder_path = os.path.join(tools.dataPath, folder.strip('/'), pack_name) if os.path.exists(folder_path): os.rename(folder_path, '%s.temp' % folder_path) for file in file_list: if file.startswith(folder): zip_file.extract(file, tools.dataPath) except: tools.log('Failed to extract to folder - %s' % folder) import traceback traceback.print_exc() self.failure_cleanup(meta_output_location, pack_name, folders) if not silent: self.failed_prompt() return try: zip_file.close() except: pass if not silent: install_progress.close() if not silent: tools.showDialog.ok( tools.addonName, '%s - %s' % (tools.lang(33010).encode('utf-8'), pack_name)) except: import traceback traceback.print_exc() if not silent: install_progress.close() tools.showDialog.ok( tools.addonName, '%s - %s' % (tools.lang(33012).encode('utf-8'), pack_name), tools.lang(33011).encode('utf-8')) return if os.path.exists('%s.temp' % meta_output_location): os.remove('%s.temp' % meta_output_location) for folder in folders: folder_path = os.path.join(tools.dataPath, folder.strip('/'), pack_name) if os.path.exists('%s.temp' % folder_path): shutil.rmtree('%s.temp' % folder_path) tools.log('Refreshing provider database ') database.add_provider_package(pack_name, author, remote_meta, version) self.update_known_providers() return True
class CustomProviders(tools.dialogWindow): installed_providers = database.get_providers() installed_packages = database.get_provider_packages() provider_packages = list( set(['%s' % pack['pack_name'] for pack in installed_packages])) package_display_strings = list( set([ '%s - %s' % (pack['pack_name'], pack['version']) for pack in installed_packages ])) def __init__(self): # Window Base texture_path = os.path.join(tools.IMAGES_PATH, 'texture.png') self.texture = tools.imageControl(0, 0, 1280, 720, texture_path) self.addControl(self.texture) self.background = tools.imageControl(0, 0, 1280, 720, '') background_diffuse = '0x1FFFFFFF' self.background.setColorDiffuse(background_diffuse) self.addControl(self.background) ################# # Window Items # ################# # Package Display self.package_list_control = tools.listControl( 20, 130, 480, 640, 'font12', '0xFFFFFFFF', '', os.path.join(tools.IMAGES_PATH, 'highlight11.png'), '', 0, 0, 0, 0, 30) self.addControl(self.package_list_control) self.package_list_control.addItems(self.package_display_strings) # Package Providers Display self.provider_list_control = tools.listControl( 20, 130, 480, 640, 'font12', '0xFFFFFFFF', '', os.path.join(tools.IMAGES_PATH, 'highlight11.png'), '', 0, 0, 0, 0, 30) self.addControl(self.provider_list_control) self.providers_display = [] self.package_title = '' self.providers_title = '' self.setFocus(self.package_list_control) pass def onAction(self, action): id = action.getId() if id == 92 or id == 10: self.close() self.close() if id == 7: self.close() if id == 0: pass def doModal(self): tools.kodiGui.WindowDialog.doModal(self) self.clearProperties() return def onControl(self, control): if self.source_list.getId() == control.getId(): self.close() def disable_provider(self): pass def enable_provider(self): pass
def poll_database(self): self.known_providers = database.get_providers() self.known_packages = database.get_provider_packages()
def install_zip(self, zip_file, silent=False): file_list = zip_file.namelist() for i in file_list: if i.startswith('/') or '..' in i: raise Exception zip_root_dir = '' if file_list[0].endswith('/'): zip_root_dir = file_list[0] for i, v in enumerate(file_list): file_list[i] = file_list[i].replace(zip_root_dir, '') file_list = file_list[1:] meta_file = None for i in file_list: if i.startswith('meta.json'): meta_file = i break if meta_file is not None: meta = zip_file.open(zip_root_dir + meta_file) meta = meta.readlines() meta = ''.join([ i if not isinstance(value, bytes) else value.decode('utf-8') for value in meta ]) meta = meta.replace(' ', '').replace('\r', '').replace('\n', '') meta = json.loads(meta) requirements = ['author', 'name', 'version'] for i in requirements: if i not in meta: if not silent: self.failed_prompt() tools.log( 'Source pack is malformed, please check and correct issue in the meta file' ) return author = meta['author'] version = meta['version'] pack_name = meta['name'] remote_meta = meta.get('remote_meta', '') else: if not silent: self.failed_prompt() tools.log( 'Source pack is malformed, please check and correct issue in the meta file' ) import traceback traceback.print_exc() raise Exception if remote_meta == '': tools.showDialog.ok(tools.addonName, tools.lang(33016)) line1 = tools.colorString( tools.lang(33001)) + " %s - v%s" % (pack_name, version) line2 = tools.colorString(tools.lang(33002)) + "%s" % author line3 = tools.lang(33003) if not silent: accept = tools.showDialog.yesno( tools.addonName + " - %s" % tools.lang(33004), line1, line2, line3, tools.lang(33005), tools.lang(33006)) if accept == 0: return self.pre_update_collection = [ i for i in database.get_providers() if i['package'] == pack_name ] folders = ['providerModules/', 'providers/'] meta_output_location = os.path.join(tools.dataPath, 'providerMeta', '%s.json' % pack_name) if os.path.isfile(meta_output_location): if os.path.isfile(meta_output_location + '.temp'): os.remove(meta_output_location + '.temp') try: os.rename(meta_output_location, '%s.temp' % meta_output_location) except Exception as e: self.failure_cleanup(meta_output_location, pack_name, folders) tools.log('Failed to create temporary meta file') if not silent: tools.showDialog.ok(tools.addonName, tools.lang(33007)) return try: self.output_meta(meta) except: self.failure_cleanup(meta_output_location, pack_name, folders) tools.log('Failed to create new meta file') if not silent: self.failed_prompt() return else: self.output_meta(meta) if not silent: install_progress = tools.progressDialog install_progress.create(tools.addonName, '%s - %s' % (pack_name, tools.lang(33008)), tools.lang(33009)) install_progress.update(-1) try: for folder in folders: try: folder_path = os.path.join(tools.dataPath, folder.strip('/'), pack_name) if os.path.exists(folder_path): if os.path.exists('%s.temp' % folder_path): shutil.rmtree('%s.temp' % folder_path) os.rename(folder_path, '%s.temp' % folder_path) for file in file_list: if file == 'providers/__init__.py': continue if file.startswith(folder): memberpath = os.path.join(zip_root_dir, file) targetpath = os.path.join(tools.dataPath, file) upperdirs = os.path.dirname(targetpath) if upperdirs and not os.path.exists(upperdirs): os.makedirs(upperdirs) if memberpath[-1] == '/': if not os.path.isdir(targetpath): os.mkdir(targetpath) continue with zip_file.open(memberpath) as source, \ open(targetpath, "wb") as target: shutil.copyfileobj(source, target) except: tools.log('Failed to extract to folder - %s' % folder) import traceback traceback.print_exc() self.failure_cleanup(meta_output_location, pack_name, folders) if not silent: self.failed_prompt() return try: zip_file.close() except: pass if not silent: try: install_progress.close() except: pass if not silent: tools.showDialog.ok(tools.addonName, '%s - %s' % (tools.lang(33010), pack_name)) except: import traceback traceback.print_exc() if not silent: try: install_progress.close() tools.showDialog.ok( tools.addonName, '%s - %s' % (tools.lang(33012), pack_name), tools.lang(33011)) except: pass return if os.path.exists('%s.temp' % meta_output_location): os.remove('%s.temp' % meta_output_location) for folder in folders: folder_path = os.path.join(tools.dataPath, folder.strip('/'), pack_name) if os.path.exists('%s.temp' % folder_path): shutil.rmtree('%s.temp' % folder_path) tools.log('Refreshing provider database ') database.add_provider_package(pack_name, author, remote_meta, version) tools.execute( 'RunPlugin("plugin://plugin.video.%s/?action=refreshProviders")' % tools.addonName.lower()) return True
def update_known_providers(self): provider_types = ['torrent', 'hosters'] sys.path.append(tools.dataPath) import providers all_providers = providers.get_all(self.language) all_providers = {'torrent': all_providers[0], 'hosters': all_providers[1]} database_providers = database.get_providers() for provider_type in provider_types: for provider in all_providers[provider_type]: database.add_provider(provider[1], provider[2], 'enabled', self.language, provider_type) # if len(self.pre_update_collection) > 0: # pack_name = self.pre_update_collection[0]['package'] # # for provider_type in range(len(provider_types)): # for i in providers[provider_type]: # provider_name = i[1] # tools.log(provider_name) # # # We need to check that the provider file exists after updating # # For some reason lsdir still shows files as existing after the module removes them. # path = os.path.join(self.providers_path, pack_name, self.language, # provider_types[provider_type], provider_name + ".py") # # if not os.path.exists(path): # continue # # old_setting = [x for x in self.pre_update_collection if # x['provider_type'] == provider_types[provider_type] and # x['package'] == pack_name and # x['provider_name'] == provider_name] # # if len(old_setting) > 0: # old_setting = old_setting[0] # database.add_provider(old_setting['provider_name'], # old_setting['package'], # old_setting['status'], # old_setting['country'], # old_setting['provider_type']) # else: # database.add_provider(i[1], i[2], 'enabled', self.language, provider_types[provider_type]) # # else: # if self.known_providers is None or len(self.known_providers) == 0: # # for provider in providers[0]: # tools.log('Adding Provider %s' % provider[1]) # database.add_provider(provider[1], provider[2], 'enabled', self.language, 'torrent') # for provider in providers[1]: # tools.log('Adding Provider %s' % provider[1]) # database.add_provider(provider[1], provider[2], 'enabled', self.language, 'hoster') # # else: # # for i in range(2): # for provider in providers[i]: # existing = [existing for existing in self.known_providers # if provider[2] == existing['package']\ # and provider[1] == existing['provider_name']\ # and existing['provider_type'] == provider_types[i]] # # # if len(existing) == 0: # tools.log('Adding Provider %s' % provider[1]) # database.add_provider(provider[1], provider[2], 'enabled', self.language, # provider_types[i]) # self.known_providers = database.get_providers()