def List_Indigo_Adult(url): if settings.getSetting('adult') == 'true': confirm = xbmcgui.Dialog().yesno( "Please Confirm", " Please confirm that you are at least 18 years of age.", " ", " ", "NO (EXIT)", "YES (ENTER)") if confirm: link = OPEN_URL(url).replace('\r', '').replace('\n', '').replace('\t', '') match = re.compile( "'name' => '(.+?)'.+?dataUrl' => '(.+?)'.+?xmlUrl' => '(.+?)'.+?downloadUrl' => '(.+?)'" ).findall(link) for name, dataurl, url, repourl in match: lang = 'Adults Only' add2HELPDir(name + ' (' + lang + ')', url, 'getaddoninfo', '', fanart, dataurl, repourl) #addHELPDir(name+' ('+lang+')',url,'getaddoninfo','',fanart,'',dataurl,repourl,'','') if len(match) == 0: return else: kodi.set_setting('adult', 'false') return viewsetter.set_view("sets")
def fullspeedtest(): # speed_test = base64.b64decode("aHR0cDovL2luZGlnby50dmFkZG9ucy5hZy9zcGVlZHRlc3Qvc3BlZWR0ZXN0ZmlsZS50eHQ=") speed_test = 'http://www.engineerhammad.com/2015/04/Download-Test-Files.html' try: # link = OPEN_URL(speed_test) link = kodi.read_file(speed_test) match = re.findall('href="([^"]*)".+src="([^"]*)"[^\d]*(\d+\s[^b]*b)', link) for m_url, m_iconimage, m_name in reversed(match): m_iconimage = artwork + str(m_name).replace(' ', '').lower() + '.png' if 'mb' in m_iconimage and not os.path.isfile(m_iconimage): m_iconimage = m_iconimage.replace('mb', '') if m_name not in '10 Gb': kodi.add_item('[COLOR ghostwhite]' + m_name + '[/COLOR]', m_url, "runtest", m_iconimage, description='Test with a ' + m_name + ' file') except Exception as e: kodi.log(str(e)) import traceback traceback.print_exc(file=sys.stdout) kodi.add_item('[COLOR ghostwhite]Speed Test is unavailable[/COLOR]', '', "", artwork + 'speed_test.png', description='') viewsetter.set_view("sets")
def what_sports(): # ####### AMERICAN ############### kodi.addItem('[COLOR blue][B]US Sports[/COLOR][/B]', '', '', artwork + 'icon.png', description='[COLOR gold]Sports from around the US[/COLOR]') link = kodi.read_file('https://www.tvguide.com/sports/live-today/') match = re.findall('(?s)program-link">([^<]*)<.+?info">([^\|]*) \| ([^<]*)<.+?description">([^<]*)', link) for m_name, m_time, m_channel, m_description in match: kodi.addItem('[COLOR white][B]%s[/COLOR][/B] - [COLOR gold]%s[/COLOR][COLOR white][B] | %s[/COLOR][/B]' % (m_time.lower(), name_cleaner(m_name), m_channel), '', '', artwork + 'icon.png', description='[COLOR gold][B]%s - %s[/COLOR][/B][COLOR white] - %s | %s[/COLOR]' % (m_description, name_cleaner(m_name), m_time.lower(), m_channel)) # ####### UK ############### kodi.addItem('[COLOR blue][B]UK Sports[/COLOR][/B]', '', '', artwork + 'icon.png', description='[COLOR gold]Sports from around the UK[/COLOR]') link = kodi.read_file('http://www.wheresthematch.com/tv/home.asp').replace('\r', '').replace('\n', '').replace('\t', '') pattern ='(?s)class="fixture">.+?href="http:\/\/[^\/]*\/([^\/]*)\/[^\.]*.asp">[^>]*>([^<]+)<.+?asp.+?">([^<]*)<' \ '.+?WHEN:<\/strong>([^&]*&).+?\/strong>([^<]*)' match = re.findall(pattern, link) for game, name1, name2, gametime, channel in match: gametime = re.search('at([^&]*)', gametime).group(1).replace('&', '').replace(' ', '') kodi.addItem('[COLOR white][B]%s[/COLOR][/B][COLOR gold] - %s - %s vs %s[/COLOR][COLOR white][B] | %s[/COLOR][/B]' % (gametime, game, name1, name2, channel), '', '', artwork+'icon.png', description='[COLOR gold][B]%s - %s vs %s[/COLOR][/B][COLOR white] - %s | %s[/COLOR]' % (game, name1, name2, gametime, channel)) viewsetter.set_view("tvshows")
def BACKUPMENU(): kodi.addItem( '[COLOR white]Select Backup Location[/COLOR]', 'url', 'display_backup_settings', '', description= "Choose the location to which you wish to store your backups!") kodi.addItem( '[COLOR white]Full Backup (All Files and Folders Included)[/COLOR]', 'url', 'full_backup', '', description="Backup everything possible!") kodi.addItem( '[COLOR white]Backup No Database (No Database Files Included)[/COLOR]', 'url', 'small_backup', '', description= "Backup your Kodi configuration without unnecessary database files!") kodi.addDir('[COLOR white]Restore Backup[/COLOR]', '', 'do_backup_restore', '', description="Restore your Kodi configuration from a backup!") kodi.addDir('[COLOR white]Delete Backup[/COLOR]', '', 'del_backup', '', description="Erase any backups you have saved!") viewsetter.set_view("sets")
def list_adult(): if settings.getSetting('adult') == 'true': confirm = xbmcgui.Dialog().yesno( "Please Confirm", " Please confirm that you are at least 18 years of age.", " ", " ", "NO (EXIT)", "YES (ENTER)") if confirm: url = 'https://indigo.tvaddons.co/installer/sources/xxx.php' link = kodi.open_url(url).replace('\r', '').replace('\n', '').replace( '\t', '') match = re.compile( "'name' => '(.+?)'.+?dataUrl' => '(.+?)'.+?xmlUrl' => '(.+?)'.+?downloadUrl' => '(.+?)'" ).findall(link) for name, dataurl, url, repourl in match: lang = 'Adults Only' add_2help_dir(name + ' (' + lang + ')', url, 'getaddoninfo', '', fanart, dataurl, repourl) if len(match) == 0: return else: kodi.set_setting('adult', 'false') return viewsetter.set_view("sets")
def fullspeedtest(): # speed_test = base64.b64decode("aHR0cDovL2luZGlnby50dmFkZG9ucy5hZy9zcGVlZHRlc3Qvc3BlZWR0ZXN0ZmlsZS50eHQ=") speed_test = 'http://www.engineerhammad.com/2015/04/Download-Test-Files.html' try: link = OPEN_URL(speed_test) match = re.findall('href="([^"]*)".+src="([^"]*)".+\n.+?(\d+\s[^b]*b)', link) for url, iconimage, name in reversed(match): iconimage = artwork + str(name).replace(' ', '').lower() + '.png' if 'mb' in iconimage and not os.path.isfile(iconimage): iconimage = iconimage.replace('mb', '') kodi.addItem('[COLOR ghostwhite]' + name + '[/COLOR]', url, "runtest", iconimage, description='Test with a ' + name + ' file') # link = OPEN_URL(speed_test).replace('\n', '').replace('\r', '') # match = re.compile('name="(.+?)".+?rl="(.+?)".+?mg="(.+?)".+?anart="(.+?)".+?ersion="(.+?)"').findall(link) # for name, url, iconimage, fanart, description in match: # kodi.addItem('[COLOR ghostwhite]' + name + " | " + description + '[/COLOR]', url, "runtest", artwork + 'speed_test.png', description=description) except: kodi.addItem('[COLOR ghostwhite]Speed Test is unavailable[/COLOR]', '', "", artwork + 'speed_test.png', description='') viewsetter.set_view("sets")
def INTERNATIONAL(url): if not '://' in url: url = base_url2 + url link = OPEN_URL(url) match = GetListItems(link) CMi = [] viewsetter.set_view("sets") #CMi.append(['Information',"XBMC.Action(Info)"]); if 'repository' in url: ToMode = 'interrepolist' else: ToMode = 'addonlist' for url, image, name, in match: if name == "Repositories": kodi.addDir( 'International Repositories', base_url + 'category/international/repositories', 'interlist', artwork + 'world.png', description="Foreign language addons from across the globe!") else: iconimage = base_url + image add2HELPDir(name, url, ToMode, iconimage, fanart, '', 'addon', CMi, True) nmatch = GetListNextPage(link) if len(nmatch) > 0: kodi.addDir('Next Page', (nmatch[0]), 'interrepolist', getArtworkJ('NextPage')) viewsetter.set_view("sets") return
def get_search_results(title): link = api.search_addons(title) # my_list = sorted(link, key=lambda k: k['name'].upper()) # for e in my_list: for e in link: name = e['name'] repourl = e['repodlpath'] path = e['addon_zip_path'] description = e['description'] icon = path.rsplit('/', 1)[0] + '/icon.png' l_fanart = path.rsplit('/', 1)[0] + '/fanart.jpg' if e['extension_point'] != 'xbmc.addon.repository': try: add_help_dir(name, path, 'addoninstall', icon, l_fanart, description, 'addon', repourl, '', '', CMi, contextreplace=False) except Exception as e: kodi.log(str(e)) viewsetter.set_view("sets")
def what_sports(): # ####### AMERICAN ############### kodi.add_item('[COLOR blue][B]US Sports[/COLOR][/B]', '', '', artwork + 'icon.png', description='[COLOR gold]Sports from around the US[/COLOR]') link = kodi.read_file('https://www.tvguide.com/sports/live-today/') match1 = re.search('(?s)"button-picker-divider"(.+?</html>)', link) if match1: pattern = '(?s)title="([^"]*)".+?-link.+?item">([^<]*)<.+?item">([^<]*)<.+?font-base">([^<]*)<' for m_name, m_time, m_channel, m_description in re.findall( pattern, match1.group(1)): kodi.add_item( '[COLOR white][B]%s[/COLOR][/B] - [COLOR gold]%s[/COLOR][COLOR white][B] | %s[/COLOR][/B]' % (m_time.lower(), name_cleaner(m_name), m_channel), '', '', artwork + 'icon.png', description= '[COLOR gold][B]%s - %s[/COLOR][/B][COLOR white] - %s | %s[/COLOR]' % (m_description, name_cleaner(m_name), m_time.lower(), m_channel)) # ####### UK ############### kodi.add_item('[COLOR blue][B]UK Sports[/COLOR][/B]', '', '', artwork + 'icon.png', description='[COLOR gold]Sports from around the UK[/COLOR]') link = kodi.read_file('http://www.wheresthematch.com/') pattern = '(?s)fixture-details">(.+?)t-details">(.+?)-name">(.+?)l-details">(.+?)</td>' for m_game, m_time, m_league, m_channels in re.findall(pattern, link): g_time = re.search('<strong>([^<]*)<', m_time) g_time = g_time.group(1).replace('00:', '12:').strip('0').replace( ' ', '') if g_time else '' g_league = re.search('<span>([^<]*)<', m_league) g_league = g_league.group(1).rstrip() if g_league else '' g_name = '' for team1, team2 in re.findall( '(?s).asp">[^>]*>([^<]+)<.+?asp.+?">([^<]*)', m_game): g_name = '%s vs %s' % (team1.strip(), team2.strip()) if m_game else '' channels = '' for channel in re.findall('title=".+?on ([^"]*)"', m_channels): for chan in ('&', 'tv app', 'sky'): channel = channel.replace( 'on ', '') if chan.lower() not in channel.lower() else '' channels += '' + channel if not channels else ', ' + channel if channel else '' kodi.add_item( '[COLOR white][B]%s[/COLOR][/B] - [COLOR gold]%s - %s[/COLOR][COLOR white][B] | %s[/COLOR][/B]' % (g_time, g_league, g_name, channels), '', '', artwork + 'icon.png', description= '[COLOR gold][B]%s - %s[/COLOR][/B] - [COLOR white]%s | %s[/COLOR]' % (g_name, g_league, g_time, channels)) viewsetter.set_view("tvshows")
def getaddoninfo(url, dataurl, repourl): lang = 'Adults Only' link = OPEN_URL(url).replace('\r', '').replace('\n', '').replace('\t', '') match = re.compile('<addon id="(.+?)".+?ame="(.+?)".+?ersion="(.+?)"').findall(link) for adid, name, version in match: dload = dataurl + adid + "/" + adid + "-" + version + ".zip" addHELPDir(name + ' (' + lang + ')', dload, 'addoninstall', '', fanart, '', 'addon', repourl, '', '') viewsetter.set_view("sets")
def getaddoninfo(url, dataurl, repourl): lang = 'Adults Only' link = kodi.open_url(url).replace('\r', '').replace('\n', '').replace('\t', '') match = re.compile('<addon id="(.+?)".+?ame="(.+?)".+?ersion="(.+?)"').findall(link) for adid, name, version in match: dload = dataurl + adid + "/" + adid + "-" + version + ".zip" addHELPDir(name + ' (' + lang + ')', dload, 'addoninstall', '', fanart, '', 'addon', repourl, '', '') viewsetter.set_view("sets")
def INTERNATIONAL_ADDONS(): imurl = 'https://www.tvaddons.co/kodi-addons/images/categories/international/' link = api.get_langs() if link: # for e in link: # name=e['languages'] # kodi.log(name) l_vert = { "af": "African", "ar": "Arabic", # "cn": "Chinese", "zh": "Chinese", "cs": "Czech", "da": "Danish", "nl": "Dutch", "ph": "Filipino", "fi": "Finnish", "fr": "French", "de": "German", "el": "Greek", # "iw": "Hebrew",.execute "he": "Hebrew", "hu": "Hungarian", "is": "Icelandic", "hi": "Indian", "ga": "Irish", "it": "Italian", "ja": "Japanese", "ko": "Korean", "mn": "Mongolian", "ne": "Nepali", "no": "Norwegian", "ur": "Pakistani", "pl": "Polish", "pt": "Portuguese", "ro": "Romanian", "ru": "Russian", "ms": "Singapore", "es": "Spanish", "sv": "Swedish", "ta": "Tamil", "th": "Thai", "tr": "Turkish", "vi": "Vietnamese" } for key in sorted(l_vert.items(), key=lambda key: key[1]): try: kodi.addDir( key[1], key[0], 'interaddonslist', imurl + key[1].lower() + '.png', description="Foreign language addons from across the globe!" ) except: pass viewsetter.set_view("sets")
def fullspeedtest(): SpeedTest = base64.b64decode("aHR0cDovL2luZGlnby50dmFkZG9ucy5hZy9zcGVlZHRlc3Qvc3BlZWR0ZXN0ZmlsZS50eHQ=") link = OPEN_URL(SpeedTest).replace('\n','').replace('\r','') match = re.compile('name="(.+?)".+?rl="(.+?)".+?mg="(.+?)".+?anart="(.+?)".+?ersion="(.+?)"').findall(link) for name,url,iconimage,fanart,description in match: kodi.addItem('[COLOR ghostwhite]' + name + " | " + description + '[/COLOR]',url,"runtest",artwork+'speed_test.png',description=description) viewsetter.set_view("sets")
def tool_menu(): kodi.addItem("Clear Cache", '', 'clearcache', artwork + 'clear_cache.png', description="Clear your device cache!") kodi.addItem("Purge Packages", '', 'purgepackages', artwork + 'purge_packages.png', description="Erase old addon update files!") kodi.addItem("Wipe Addons", '', 'wipeaddons', artwork + 'wipe_addons.png', description="Erase all your Kodi addons in one shot!") kodi.addDir( "Install Custom Keymaps", '', 'customkeys', artwork + 'custom_keymaps.png', description= "Get the best experience out of your device-specific remote control!") if kodi.get_setting('automain') == 'true': kodi.addItem( "Disable Auto Maintenance ", '', 'disablemain', artwork + 'disable_AM.png', description= "Disable the periodic automated erasing of cache and packages!") if kodi.get_setting('automain') == 'false': kodi.addItem( "Enable Auto Maintenance ", '', 'enablemain', artwork + 'enable_AM.png', description= "Enable the periodic automated erasing of cache and packages!") if kodi.get_setting('scriptblock') == 'true': kodi.addItem( "Disable Malicious Scripts Blocker", '', 'disableblocker', artwork + 'disable_MSB.png', description="Disable protection against malicious scripts!") if kodi.get_setting('scriptblock') == 'false': kodi.addItem( "Enable Malicious Scripts Blocker", '', 'enableblocker', artwork + 'enable_MSB.png', description="Enable protection against malicious scripts!") viewsetter.set_view("sets")
def main_index(): xbmc.executebuiltin("UpdateAddonRepos") kodi.add_item("Git Browser", '', 'github_main', artwork + 'github_browser.png', description="Search for repositories hosted on GitHub.") try: if len(str(api.get_all_addons())) < 20: raise ValueError('API is less than 20') kodi.add_dir('Search by: Addon/Author', '', 'searchaddon', artwork + 'search.png', description="Search for addons by Name or Author") if settings.getSetting('featured') == 'true': kodi.add_dir('Featured Addons', 'featured', 'addonlist', artwork + 'featured.png', description="The most popular Kodi addons!") # if settings.getSetting('livetv') == 'true': # kodi.add_dir('Live TV Addons', 'live', 'addonlist', artwork + 'livetv.png', # description="The most popular live TV addons!") # if settings.getSetting('sports') == 'true': # kodi.add_dir('Sports Addons', 'sports', 'addonlist', artwork + 'sports.png', # description="The most popular sports addons!") if settings.getSetting('video') == 'true': kodi.add_dir('Video Addons', 'video', 'addonlist', artwork + 'video.png', description="Every video addon in existence!") if settings.getSetting('audio') == 'true': kodi.add_dir('Audio Addons', 'audio', 'addonlist', artwork + 'audio.png', description="Find addons to listen to music!") if settings.getSetting('program') == 'true': kodi.add_dir('Program Addons', 'executable', 'addonlist', artwork + 'program.png', description="Every program addon you can imagine!") # if settings.getSetting('playlist') == 'true': # kodi.add_dir('Playlist Addons', 'playlists', 'addonlist', artwork + 'playlists.png', # description="The most popular playlist addons!") if settings.getSetting('services') == 'true': kodi.add_dir('Service Addons', 'service', 'addonlist', artwork + 'service.png') if settings.getSetting('skincat') == 'true': kodi.add_dir('Kodi Skins', 'skins', 'addonlist', artwork + 'kodi_skins.png', description="Change up your look!") if settings.getSetting('world') == 'true': kodi.add_dir('International Addons', 'international', 'interlist', artwork + 'world.png', description="Foreign language addons and repos from across the globe!") if settings.getSetting('adult') == 'true': kodi.add_dir('Adult Addons', 'xxx', 'adultlist', artwork + 'adult.png', description="Must be 18 years or older! This menu can be disabled from within Add-on Settings.") # if settings.getSetting('repositories') == 'true': # kodi.add_dir('Repositories','repositories', 'addonlist', artwork + 'repositories.png', # description="Browse addons by repository!") except Exception as e: kodi.log(str(e)) traceback.print_exc(file=sys.stdout) kodi.add_item("Addon Listing Is Temporarily Unavailable", '', '', artwork1 + 'addon_installer.png', description="The Addon Listing Is Temporarily Unavailable") # kodi.add_item('Enable Live Streaming', 'None', 'EnableRTMP', artwork + 'enablertmp.png', # description="Enable RTMP InputStream and InputStream Adaptive modules for Live Streaming.") kodi.add_item('Official OpenSubtitles Addon', openSub, 'addopensub', artwork + 'opensubicon.png', description="Install Official OpenSubtitles Addon!") kodi.add_dir('Install ZIP from Online Link', '', 'urlzip', artwork + 'onlinesource.png', description='Manually download and install addons or repositories from the web.') viewsetter.set_view("sets")
def rtmp_lib(): liblist = "http://indigo.tvaddons.ag/librtmp/rtmplist.txt" link = OPEN_URL(liblist).replace('\n','').replace('\r','') match = re.compile('name="(.+?)".+?rl="(.+?)".+?ersion="(.+?)"').findall(link) kodi.addItem('[COLOR gold][B]Files Will Be Donwloaded to the Kodi Home directory, You Will Need To Manually Install From There.[/COLOR][/B]','',100,'','','') #kodi.addItem('[COLOR gold]-----------------------------------------------------------[/COLOR]','',100,'','','') for name,url,description in match: kodi.addDir(name,url,"lib_installer",artwork+'icon.png') viewsetter.set_view("sets")
def SEARCHADDON(url): #Start Search Function searchUrl = url vq = _get_keyboard(heading="Search add-ons") if (not vq): return False, 0 # if blank or the user cancelled the keyboard, return title = urllib.quote_plus(vq) searchUrl += title + '&criteria=title' print "Searching URL: " + searchUrl List_Addons(searchUrl) viewsetter.set_view("sets")
def what_sports(): # ####### AMERICAN ############### kodi.addItem('[COLOR blue][B]US Sports[/COLOR][/B]', '', '', artwork + 'icon.png', description='[COLOR gold]Sports from around the US[/COLOR]') link = kodi.read_file('https://www.tvguide.com/sports/live-today/') pattern = '(?s)program-link">([^<]*)<.+?info">([^\|]*)\| ([^<]*)<.+?description">([^<]*)' for m_name, m_time, m_channel, m_description in re.findall(pattern, link): kodi.addItem( '[COLOR white][B]%s[/COLOR][/B] - [COLOR gold]%s[/COLOR][COLOR white][B] | %s[/COLOR][/B]' % (m_time.lower(), name_cleaner(m_name), m_channel), '', '', artwork + 'icon.png', description= '[COLOR gold][B]%s - %s[/COLOR][/B][COLOR white] - %s | %s[/COLOR]' % (m_description, name_cleaner(m_name), m_time.lower(), m_channel)) # ####### UK ############### kodi.addItem('[COLOR blue][B]UK Sports[/COLOR][/B]', '', '', artwork + 'icon.png', description='[COLOR gold]Sports from around the UK[/COLOR]') link = kodi.read_file('http://www.wheresthematch.com/').replace( '\r', '').replace('\n', '').replace('\t', '') pattern = '(?s)fixture-details">(.+?)t-details">(.+?)-name">(.+?)l-details">(.+?).png' for m_game, m_time, m_league, m_channels in re.findall(pattern, link): g_time = re.search('<strong>([^<]*)', m_time) g_time = g_time.group(1).strip('0').replace(' ', '') if g_time else '' league = re.search('<span>([^<]*)', m_league) g_league = ' - ' + league.group(1) if league else '' g_name = '' for team1, team2 in re.findall( '(?s).asp">[^>]*>([^<]+)<.+?asp.+?">([^<]*)', m_game): g_name = '- %s vs %s' % (team1, team2) if m_game else '' if '<strong class=' in m_game: game = re.search('<strong class="">([^<]*)', m_game) g_name = ' - ' + game.group( 1) if game and league != game.group(1) else '' channels = '' for channel in re.findall('-name">([^<]*)', m_channels): channels += ' ' + channel if not channels else ', ' + channel kodi.addItem( '[COLOR white][B]%s[/COLOR][/B][COLOR gold]%s %s[/COLOR][COLOR white][B] | %s[/COLOR][/B]' % (g_time, g_league, g_name, channels), '', '', artwork + 'icon.png', description= '[COLOR gold][B]%s - %s[/COLOR][/B][COLOR white] - %s | %s[/COLOR]' % (g_time, g_name, g_league, channels)) viewsetter.set_view("tvshows")
def github_main(url): github_instructions() kodi.addDir('Search by GitHub Username', 'username', 'github_search', artwork + 'search_by_username.png', description="Search for addons by Username. Ex. tvaddonsco") kodi.addDir('Search by GitHub Repository Title', 'repo', 'github_search', artwork + 'search_by_repository_title.png', description="Search for addons by Repository Name") kodi.addDir('Search GitHub by Addon ID', 'addon_id', 'github_search', artwork + 'searchaddonid.png', description="Search for addons by AddonID. Ex. plugin.video.youtube (Advanced)") #kodi.addItem('Update Addons', '', 'github_update', artwork + 'update_github.png', # description="Update GitHub Addons") viewsetter.set_view("sets")
def List_Indigo_WorldAlone(url): if not '://' in url: url = base_url2 + url link = OPEN_URL(url).replace('\r', '').replace('\n', '').replace('\t', '') match = re.compile( "'name' => '(.+?)','language' => '(.+?)'.+?downloadUrl' => '(.+?)'" ).findall(link) if len(match) == 0: return for name, lang, dload in match: lang = lang.capitalize() addHELPDir(name + ' (' + lang + ')', dload, 'addoninstall', '', fanart, '', 'addon', 'none', '', '') viewsetter.set_view("sets")
def backup_menu(): kodi.addItem('[COLOR white]Select Backup Location[/COLOR]', 'url', 'display_backup_settings', '', description="Choose the location to which you wish to store your backups!") kodi.addItem('[COLOR white]Full Backup (All Files and Folders Included)[/COLOR]', 'url', 'full_backup', '', description="Backup everything possible!") kodi.addItem('[COLOR white]Backup No Database (No Database Files Included)[/COLOR]', 'url', 'small_backup', '', description="Backup your Kodi configuration without unnecessary database files!") kodi.addDir('[COLOR white]Restore Backup[/COLOR]', '', 'do_backup_restore', '', description="Restore your Kodi configuration from a backup!") kodi.addDir('[COLOR white]Delete Backup[/COLOR]', '', 'del_backup', '', description="Erase any backups you have saved!") viewsetter.set_view("sets")
def rtmp_lib(): liblist = "http://indigo.tvaddons.co/librtmp/rtmplist.txt" try: link = OPEN_URL(liblist).replace('\n', '').replace('\r', '') except: kodi.addItem('[COLOR gold][B]This service is currently unavailable.[/COLOR][/B]', '', 100, '', '', '') return match = re.compile('name="(.+?)".+?rl="(.+?)".+?ersion="(.+?)"').findall(link) kodi.addItem('[COLOR gold][B]Files Will Be Donwloaded to the Kodi Home directory, You Will Need To Manually Install From There.[/COLOR][/B]', '', 100, '', '', '') # kodi.addItem('[COLOR gold]---------------------------------------------------------[/COLOR]', '', 100, '',' ', '') for name, url, description in match: kodi.addDir(name, url, "lib_installer", artwork + 'icon.png') viewsetter.set_view("sets")
def keymaps(): try: link = kodi.open_url(Keymaps_URL).replace('\n', '').replace('\r', '') except IOError: kodi.addDir("No Keymaps Available", '', '', artwork + 'unkeymap.png') kodi.log('Could not open keymaps URL') return match = re.compile('name="(.+?)".+?rl="(.+?)".+?mg="(.+?)".+?anart="(.+?)".+?ersion="(.+?)".+?ash="(.+?)"').findall( link) if os.path.isfile(KEYBOARD_FILE): kodi.addDir("Remove Current Keymap Configuration", '', 'uninstall_keymap', artwork + 'unkeymap.png') for name, url, iconimage, fanart, version, description in match: name = "[COLOR white][B]" + name + "[/B][/COLOR]" kodi.addDir(name, url, 'install_keymap', artwork + 'keymapadd.png') viewsetter.set_view("files")
def keymaps(): try: link = OPEN_URL(Keymaps_URL).replace('\n', '').replace('\r', '') except: kodi.addDir("No Keymaps Available", '', '', artwork + 'unkeymap.png') kodi.log('Could not open keymaps URL') return match = re.compile('name="(.+?)".+?rl="(.+?)".+?mg="(.+?)".+?anart="(.+?)".+?ersion="(.+?)".+?ash="(.+?)"').findall( link) if os.path.isfile(KEYBOARD_FILE): kodi.addDir("Remove Current Keymap Configuration", '', 'uninstall_keymap', artwork + 'unkeymap.png') for name, url, iconimage, fanart, version, description in match: kodi.addDir(name, url, 'install_keymap', artwork + 'keymapadd.png') name = "[COLOR white][B]" + name + "[/B][/COLOR]" viewsetter.set_view("files")
def rtmp_lib(): liblist = "http://indigo.tvaddons.co/librtmp/rtmplist.txt" try: link = OPEN_URL(liblist).replace('\n', '').replace('\r', '') except Exception as e: kodi.log(str(e)) kodi.addItem('[COLOR gold][B]This service is currently unavailable.[/COLOR][/B]', '', 100, '', '', '') return match = re.compile('name="(.+?)".+?rl="(.+?)".+?ersion="(.+?)"').findall(link) kodi.addItem('[COLOR gold][B]Files Will Be Donwloaded to the Kodi Home directory,' 'You Will Need To Manually Install From There.[/COLOR][/B]', '', 100, '', '', '') # kodi.addItem('[COLOR gold]---------------------------------------------------------[/COLOR]', '', 100, '',' ', '') for m_name, m_url, m_description in match: kodi.addDir(m_name, m_url, "lib_installer", artwork + 'icon.png') viewsetter.set_view("sets")
def what_sports(): link = OPEN_URL('http://www.wheresthematch.com/tv/home.asp').replace('\r', '').replace('\n', '').replace('\t', '') match = re.compile('href="http://www.wheresthematch.com/fixtures/(.+?).asp.+?class="">(.+?)</em> <em class="">v</em> <em class="">(.+?)</em>.+?time-channel ">(.+?)</span>').findall(link) for game, name1, name2, gametime in match: kodi.addItem('[COLOR gold][B]' + game + ' ' + '[/COLOR][/B]- [COLOR white]' + name1 + ' vs ' + name2 + ' - ' + gametime + ' [/COLOR]', '', '', artwork + 'icon.png', description='[COLOR gold][B]'+game+' '+'[/COLOR][/B]- [COLOR white]'+name1+' vs '+name2+' - '+gametime+' [/COLOR]') xbmc.executebuiltin("Container.SetViewMode(55)") # #######AMERICAN############### link = OPEN_URL('http://www.tvguide.com/sports/live-today/').replace('\r', '').replace('\n', '').replace('\t', '') sections = dom_parser.parse_dom(link, 'div', {'class': "listings-program-content"}) listings = dom_parser.parse_dom(sections, 'span', {'class': "listings-program-link"}) for stuff in sections: match = re.compile('class="listings-program-link">(.+?)</span></h3>.+?class="listings-program-link">.+?listings-program-airing-info">(.+?)</p><p.+?description">(.+?)</p>').findall(stuff) for name, time, description in match: kodi.addItem('[COLOR gold][B]' + name_cleaner(name) + ' ' + '[/COLOR][/B]- [COLOR white]' + ' - ' + time + ' [/COLOR]','', '', artwork + 'icon.png',description='[COLOR gold][B]' + name_cleaner(name) + ' ' + '[/COLOR][/B]- [COLOR white]' + ' - ' + time + ' [/COLOR]') viewsetter.set_view("files")
def MAININDEX(): kodi.addItem("Git Browser", '', 'github_main', artwork + 'github_browser.png', description="Search for repositories hosted on GitHub.") kodi.addDir('Search by: Addon/Author', '', 'searchaddon', artwork + 'search.png', description="Search for addons by Name or Author") if settings.getSetting('featured') == 'true': kodi.addDir('Featured Addons', 'featured', 'addonlist', artwork + 'featured.png', description="The most popular Kodi addons!") # if settings.getSetting('livetv') == 'true': # kodi.addDir('Live TV Addons', 'live', 'addonlist', artwork + 'livetv.png', # description="The most popular live TV addons!") # if settings.getSetting('sports') == 'true': # kodi.addDir('Sports Addons', 'sports', 'addonlist', artwork + 'sports.png', # description="The most popular sports addons!") if settings.getSetting('video') == 'true': kodi.addDir('Video Addons', 'video', 'addonlist', artwork + 'video.png', description="Every video addon in existence!") if settings.getSetting('audio') == 'true': kodi.addDir('Audio Addons', 'audio', 'addonlist', artwork + 'audio.png', description="Find addons to listen to music!") if settings.getSetting('program') == 'true': kodi.addDir('Program Addons', 'executable', 'addonlist', artwork + 'program.png', description="Every program addon you can imagine!") # if settings.getSetting('playlist') == 'true': # kodi.addDir('Playlist Addons', 'playlists', 'addonlist', artwork + 'playlists.png', # description="The most popular playlist addons!") if settings.getSetting('services') == 'true': kodi.addDir('Service Addons', 'service', 'addonlist', artwork + 'service.png') if settings.getSetting('skincat') == 'true': kodi.addDir('Kodi Skins', 'skins', 'addonlist', artwork + 'kodi_skins.png', description="Change up your look!") if settings.getSetting('world') == 'true': kodi.addDir('International Addons', 'international', 'interlist', artwork + 'world.png', description="Foreign language addons and repos from across the globe!") if settings.getSetting('adult') == 'true': kodi.addDir('Adult Addons', 'xxx', 'adultlist', artwork + 'adult.png', description="Must be 18 years or older! This menu can be disabled from within Add-on Settings.") # if settings.getSetting('repositories') == 'true': # kodi.addDir('Repositories','repositories', 'addonlist', artwork + 'repositories.png', # description="Browse addons by repository!") # kodi.addItem('Enable Live Streaming', 'None', 'EnableRTMP', artwork + 'enablertmp.png', # description="Enable RTMP InputStream and InputStream Adaptive modules for Live Streaming.") kodi.addItem('Official OpenSubtitles Addon', openSub, 'addopensub', artwork + 'opensubicon.png', description="Install Official OpenSubtitles Addon!") kodi.addDir('Install ZIP from Online Link', '', 'urlzip', artwork + 'onlinesource.png', description='Manually download and install addons or repositories from the web.') viewsetter.set_view("sets")
def keymaps(): #xbmc.executebuiltin("Container.Refresh") link = OPEN_URL(Keymaps_URL).replace('\n', '').replace('\r', '') match = re.compile( 'name="(.+?)".+?rl="(.+?)".+?mg="(.+?)".+?anart="(.+?)".+?ersion="(.+?)".+?ash="(.+?)"' ).findall(link) if os.path.isfile(KEYBOARD_FILE): kodi.addDir("Remove Current Keymap Configuration", '', 'uninstall_keymap', artwork + 'unkeymap.png') #Common.addItem('[COLOR white][B]Remove Current Keymap Configuration[/B][/COLOR]',BASEURL,128,ICON,FANART,'') for name, url, iconimage, fanart, version, description in match: kodi.addDir(name, url, 'install_keymap', artwork + 'keymapadd.png') name = "[COLOR white][B]" + name + "[/B][/COLOR]" #bname = " - [COLOR lightskyblue][COLOR white]This Week - [/COLOR][B]" + str(Common.count_advanced(name)) + "[/B][/COLOR]" #Common.addItem(name + bname,url,130,ADVANCED_SET_ICON,FANART,description) #xbmc.executebuiltin("Container.Refresh") viewsetter.set_view("files")
def List_Addons(url): if not '://' in url: url = base_url2 + url link = OPEN_URL(url) match = GetListItems(link) CMi = [] #kodi.log(link) if '/category/repositories/' in url: ToMode = 'addonlist' else: ToMode = 'addonindex' for url, image, name, in match: iconimage = base_url + image add2HELPDir(name, url, ToMode, iconimage, fanart, '', 'addon', CMi, True) nmatch = GetListNextPage(link) if len(nmatch) > 0: kodi.addDir('Next Page', (nmatch[0]), 'addonlist', getArtworkJ('NextPage')) viewsetter.set_view("sets")
def fullspeedtest(): # speed_test = base64.b64decode("aHR0cDovL2luZGlnby50dmFkZG9ucy5hZy9zcGVlZHRlc3Qvc3BlZWR0ZXN0ZmlsZS50eHQ=") speed_test = 'http://www.engineerhammad.com/2015/04/Download-Test-Files.html' try: link = OPEN_URL(speed_test) match = re.findall('href="([^"]*)".+src="([^"]*)".+\n.+?(\d+\s[^b]*b)', link) for url, iconimage, name in reversed(match): iconimage = artwork + str(name).replace(' ', '').lower() + '.png' if 'mb'in iconimage and not os.path.isfile(iconimage): iconimage = iconimage.replace('mb', '') kodi.addItem('[COLOR ghostwhite]' + name + '[/COLOR]', url, "runtest", iconimage, description='Test with a ' + name + ' file') # link = OPEN_URL(speed_test).replace('\n', '').replace('\r', '') # match = re.compile('name="(.+?)".+?rl="(.+?)".+?mg="(.+?)".+?anart="(.+?)".+?ersion="(.+?)"').findall(link) # for name, url, iconimage, fanart, description in match: # kodi.addItem('[COLOR ghostwhite]' + name + " | " + description + '[/COLOR]', url, "runtest", artwork + 'speed_test.png', description=description) except: kodi.addItem('[COLOR ghostwhite]Speed Test is unavailable[/COLOR]', '', "", artwork + 'speed_test.png', description='') viewsetter.set_view("sets")
def List_Adult(url): if settings.getSetting('adult') == 'true': confirm = xbmcgui.Dialog().yesno("Please Confirm", " Please confirm that you are at least 18 years of age.", " ", " ", "NO (EXIT)", "YES (ENTER)") if confirm: url = 'https://indigo.tvaddons.co/installer/sources/xxx.php' link = OPEN_URL(url).replace('\r', '').replace('\n', '').replace('\t', ''); match = re.compile( "'name' => '(.+?)'.+?dataUrl' => '(.+?)'.+?xmlUrl' => '(.+?)'.+?downloadUrl' => '(.+?)'").findall(link) for name, dataurl, url, repourl in match: lang = 'Adults Only' add2HELPDir(name + ' (' + lang + ')', url, 'getaddoninfo', '', fanart, dataurl, repourl) if len(match) == 0: return else: kodi.set_setting('adult', 'false') return viewsetter.set_view("sets")
def fullspeedtest(): # speed_test = base64.b64decode("aHR0cDovL2luZGlnby50dmFkZG9ucy5hZy9zcGVlZHRlc3Qvc3BlZWR0ZXN0ZmlsZS50eHQ=") speed_test = 'http://www.engineerhammad.com/2015/04/Download-Test-Files.html' try: # link = OPEN_URL(speed_test) link = kodi.read_file(speed_test) match = re.findall('href="([^"]*)".+src="([^"]*)".+\n.+?(\d+\s[^b]*b)', link) for m_url, m_iconimage, m_name in reversed(match): m_iconimage = artwork + str(m_name).replace(' ', '').lower() + '.png' if 'mb'in m_iconimage and not os.path.isfile(m_iconimage): m_iconimage = m_iconimage.replace('mb', '') kodi.addItem('[COLOR ghostwhite]' + m_name + '[/COLOR]', m_url, "runtest", m_iconimage, description='Test with a ' + m_name + ' file') except Exception as e: kodi.log(str(e)) import traceback traceback.print_exc(file=sys.stdout) kodi.addItem('[COLOR ghostwhite]Speed Test is unavailable[/COLOR]', '', "", artwork + 'speed_test.png', description='') viewsetter.set_view("sets")
def system_info(): systime = xbmc.getInfoLabel('System.Time ') dns1 = xbmc.getInfoLabel('Network.DNS1Address') gateway = xbmc.getInfoLabel('Network.GatewayAddress') ipaddy = xbmc.getInfoLabel('Network.IPAddress') linkstate = xbmc.getInfoLabel('Network.LinkState').replace("Link:", "") freespace, totalspace = maintool.get_free_space_mb(os.path.join(xbmc.translatePath('special://home'))) freespace = maintool.convert_size(freespace) + ' Free' totalspace = maintool.convert_size(totalspace) + ' Total' screenres = xbmc.getInfoLabel('system.screenresolution') freemem = xbmc.getInfoLabel('System.FreeMemory') # FIND WHAT VERSION OF KODI IS RUNNING xbmc_version = xbmc.getInfoLabel("System.BuildVersion") versioni = xbmc_version[:4] VERSIONS = {10: 'Dharma', 11: 'Eden', 12: 'Frodo', 13: 'Gotham', 14: 'Helix', 15: 'Isengard', 16: 'Jarvis', 17: 'Krypton'} codename = VERSIONS.get(int(xbmc_version[:2])) f = urllib.urlopen("http://www.canyouseeme.org/") html_doc = f.read() f.close() m = re.search('IP"\svalue="([^"]*)', html_doc) # Get Python Version pv = sys.version_info # System Information Menu kodi.addItem('[COLOR ghostwhite]Version: [/COLOR][COLOR lime]%s' % codename + " " + str(versioni) + "[/COLOR]", '', 100, artwork+'icon.png',"", description=" ") kodi.addItem('[COLOR ghostwhite]System Time: [/COLOR][COLOR lime]' + systime + '[/COLOR]', '', 100, artwork + 'icon.png', "", description=" ") kodi.addItem('[COLOR ghostwhite]Gateway: [/COLOR][COLOR blue]' + gateway + '[/COLOR]', '', 100, artwork + 'icon.png', "", description=" ") kodi.addItem('[COLOR ghostwhite]Local IP: [/COLOR][COLOR blue]' + ipaddy + '[/COLOR]', '', 100, artwork+'icon.png', "", description=" ") kodi.addItem('[COLOR ghostwhite]External IP: [/COLOR][COLOR blue]' + m.group(1) + '[/COLOR]', '', 100, artwork + 'icon.png', "", description=" ") kodi.addItem('[COLOR ghostwhite]DNS 1: [/COLOR][COLOR blue]' + dns1 + '[/COLOR]', '', 100, artwork + 'icon.png', "", description=" ") kodi.addItem('[COLOR ghostwhite]Network: [/COLOR][COLOR gold]'+linkstate + '[/COLOR]', '', 100, artwork + 'icon.png', "", description=" ") kodi.addItem('[COLOR ghostwhite]Disc Space: [/COLOR][COLOR gold]'+str(totalspace) + '[/COLOR]', '', 100, artwork + 'icon.png', "", description=" ") kodi.addItem('[COLOR ghostwhite]Disc Space: [/COLOR][COLOR gold]'+str(freespace) + '[/COLOR]', '', 100, artwork + 'icon.png', "", description=" ") kodi.addItem('[COLOR ghostwhite]Free Memory: [/COLOR][COLOR gold]'+str(freemem) + '[/COLOR]', '', 100, artwork + 'icon.png', "", description=" ") kodi.addItem('[COLOR ghostwhite]Resolution: [/COLOR][COLOR gold]' + str(screenres) + '[/COLOR]', '', 100, artwork + 'icon.png', "", description=" ") kodi.addItem('[COLOR ghostwhite]Python Version: [/COLOR][COLOR lime]%d.%d.%d' % (pv[0], pv[1], pv[2]) + '[/COLOR]', '', 100, artwork + 'icon.png', "", description=" ") viewsetter.set_view("files")
def List_Addons_Inner_Tabs(Name, url): if not '://' in url: url = base_url2 + url link = OPEN_URL(url) print 'url: ' + url print 'length of html: ' + str(len(link)) viewsetter.set_view("sets") if 'newest' in Name.lower(): link = link.split('<div class="tabs-inner" id="newest">')[-1].split( '</div>')[0] elif 'updated' in Name.lower(): link = link.split('<div class="tabs-inner" id="updated">')[-1].split( '</div>')[0] match = re.compile( "<li><a href='(.+?)'><img src='(.+?)' width='60' height='60' alt='(.+?)' class='pic alignleft' /><b>\s*(.+?)\s*</b></a><span class='date'>\s*(\d\d\d\d-\d\d-\d\d)\s*</span></li" ).findall(link) for url, image, name, name2, released in match: iconimage = base_url + image add2HELPDir( '[COLOR FF0077D7]%s [COLOR FFFFFFFF][[COLOR FFFFFFFF]%s[/COLOR]][/COLOR][/COLOR]' % (name, released), url, 'addonindex', iconimage, fanart, '', 'addon') viewsetter.set_view("sets")
def List_Repo_Top_Developers(url): if not '://' in url: url = base_url2 + url link = OPEN_URL(url) print 'url: ' + url #print link; #return try: link = link.split( '<span class="sidebar-widget-header"><h3 class="sidebar-widget-header">Top developers</h3></span>' )[-1] link = link.split('</ul>')[0] except: pass match = re.compile( "<li><img src='(.+?)' height='20' width='20' alt='(.+?)' /><a href='(.+?)' title='Show all addons from this author'>\s*(.+?)\s+\((\d+)\s+uploads\)</a></li" ).findall(link.replace('</li>', '</li\n\r\a>')) #print match for (image, rank, url, name, uploads) in match: iconimage = base_url + image add2HELPDir( "[COLOR FF0077D7]%s [COLOR FFFFFFFF][[COLOR FFFFFFFF]%s[/COLOR]][/COLOR][/COLOR]" % (name, uploads), url, 'addonlist', iconimage, fanart, '', 'addon') viewsetter.set_view("sets")
def what_sports(): # ####### AMERICAN ############### kodi.addItem('[COLOR blue][B]US Sports[/COLOR][/B]', '', '', artwork + 'icon.png', description='[COLOR gold]Sports from around the US[/COLOR]') link = kodi.read_file('https://www.tvguide.com/sports/live-today/') pattern = '(?s)program-link">([^<]*)<.+?info">([^\|]*)\| ([^<]*)<.+?description">([^<]*)' for m_name, m_time, m_channel, m_description in re.findall(pattern, link): kodi.addItem('[COLOR white][B]%s[/COLOR][/B] - [COLOR gold]%s[/COLOR][COLOR white][B] | %s[/COLOR][/B]' % (m_time.lower(), name_cleaner(m_name), m_channel), '', '', artwork + 'icon.png', description='[COLOR gold][B]%s - %s[/COLOR][/B][COLOR white] - %s | %s[/COLOR]' % (m_description, name_cleaner(m_name), m_time.lower(), m_channel)) # ####### UK ############### kodi.addItem('[COLOR blue][B]UK Sports[/COLOR][/B]', '', '', artwork + 'icon.png', description='[COLOR gold]Sports from around the UK[/COLOR]') link = kodi.read_file('http://www.wheresthematch.com/').replace('\r', '').replace('\n', '').replace('\t', '') pattern = '(?s)fixture-details">(.+?)t-details">(.+?)-name">(.+?)l-details">(.+?).png' for m_game, m_time, m_league, m_channels in re.findall(pattern, link): g_time = re.search('<strong>([^<]*)', m_time) g_time = g_time.group(1).strip('0').replace(' ', '') if g_time else '' league = re.search('<span>([^<]*)', m_league) g_league = ' - ' + league.group(1) if league else '' g_name = '' for team1, team2 in re.findall('(?s).asp">[^>]*>([^<]+)<.+?asp.+?">([^<]*)', m_game): g_name = '- %s vs %s' % (team1, team2) if m_game else '' if '<strong class=' in m_game: game = re.search('<strong class="">([^<]*)', m_game) g_name = ' - ' + game.group(1) if game and league != game.group(1) else '' channels = '' for channel in re.findall('-name">([^<]*)', m_channels): channels += ' ' + channel if not channels else ', ' + channel kodi.addItem('[COLOR white][B]%s[/COLOR][/B][COLOR gold]%s %s[/COLOR][COLOR white][B] | %s[/COLOR][/B]' % (g_time, g_league, g_name, channels), '', '', artwork + 'icon.png', description='[COLOR gold][B]%s - %s[/COLOR][/B][COLOR white] - %s | %s[/COLOR]' % (g_time, g_name, g_league, channels)) viewsetter.set_view("tvshows")
def INTERNATIONAL_ADDONS(): imurl = 'https://www.tvaddons.co/kodi-addons/images/categories/international/' link = api.get_langs() if link: # for e in link: # name=e['languages'] # kodi.log(name) l_vert = {"af": "African", "ar": "Arabic", # "cn": "Chinese", "zh": "Chinese", "cs": "Czech", "da": "Danish", "nl": "Dutch", "ph": "Filipino", "fi": "Finnish", "fr": "French", "de": "German", "el": "Greek", # "iw": "Hebrew", "he": "Hebrew", "hu": "Hungarian", "is": "Icelandic", "hi": "Indian", "ga": "Irish", "it": "Italian", "ja": "Japanese", "ko": "Korean", "mn": "Mongolian", "ne": "Nepali", "no": "Norwegian", "ur": "Pakistani", "pl": "Polish", "pt": "Portuguese", "ro": "Romanian", "ru": "Russian", "ms": "Singapore", "es": "Spanish", "sv": "Swedish", "ta": "Tamil", "th": "Thai", "tr": "Turkish", "vi": "Vietnamese"} # for key in l_vert: # if e['languages'] == key: # full_name = l_vert[key] # name = e['languages'] # try: # kodi.addDir(full_name, name, 'interaddonslist', imurl + full_name.lower() + '.png', # description="Foreign language addons from across the globe!") # except: # pass # viewsetter.set_view("sets") for key in sorted(l_vert.items(), key=lambda key: key[1]): try: kodi.addDir(key[1], key[0], 'interaddonslist', imurl + key[1].lower() + '.png', description="Foreign language addons from across the globe!") except: pass viewsetter.set_view("sets")
my_list = sorted(link, key=lambda k: k['name'].upper()) for e in link: name = e['name'] repourl = e['repodlpath'] path = e['addon_zip_path'] description = e['description'] icon = path.rsplit('/', 1)[0] + '/icon.png' fanart = path.rsplit('/', 1)[0] + '/fanart.jpg' if e['extension_point'] != 'xbmc.addon.repository': try: addHELPDir(name, path, 'addoninstall', icon, fanart, description, 'addon', repourl, '', '', CMi, contextreplace=False) except: pass viewsetter.set_view("sets") def github_main(url): if not xbmc.getCondVisibility('System.HasAddon(plugin.git.browser'): xbmc.executebuiltin("XBMC.InstallAddon(plugin.git.browser)") else: xbmc.executebuiltin("XBMC.Container.Update(plugin://plugin.git.browser)") # ******************************************************************** def INTERNATIONAL(): kodi.addDir('International Repos', '', 'interrepos', 'https://www.tvaddons.co/kodi-addons/images/categories/international.png', description="Foreign language repos from across the globe!") kodi.addDir('International Addonss', '', 'interaddons', 'https://www.tvaddons.co/kodi-addons/images/categories/international.png', description="Foreign language addons from across the globe!")
def system_info(): systime = xbmc.getInfoLabel('System.Time ') dns1 = xbmc.getInfoLabel('Network.DNS1Address') gateway = xbmc.getInfoLabel('Network.GatewayAddress') ipaddy = xbmc.getInfoLabel('Network.IPAddress') linkstate = xbmc.getInfoLabel('Network.LinkState').replace("Link:", "") freespace, totalspace = maintool.get_free_space_mb(os.path.join(xbmc.translatePath('special://home'))) freespace = maintool.convert_size(freespace) totalspace = maintool.convert_size(totalspace) screenres = xbmc.getInfoLabel('system.screenresolution') freemem = maintool.convert_size(maintool.revert_size(xbmc.getInfoLabel('System.FreeMemory'))) # FIND WHAT VERSION OF KODI IS RUNNING # xbmc_version = xbmc.getInfoLabel("System.BuildVersion") # versioni = xbmc_version[:4] # codename = kodi.get_codename() # Get External IP Address try: # ext_ip = ("blue", OPEN_URL('https://api.ipify.org')) ext_ip = ("blue", kodi.read_file('https://api.ipify.org')) except Exception as e: kodi.log(str(e)) try: # link = OPEN_URL('http://whatismyip.network/') link = kodi.read_file('http://whatismyip.network/') ext_ip = ("blue", re.search('>My IP Address[^=]*[^>]*>([^<]*)', link).group(1)) except: ext_ip = ("red", "IP Check Not Available") # Get Python Version pv = sys.version_info # System Information Menu # kodi.addItem('[COLOR ghostwhite]Version: [/COLOR][COLOR lime] %s %s[/COLOR]' % (codename, versioni), # '', 100, artwork + 'icon.png', "", description=" ") kodi.addItem('[COLOR ghostwhite]Version: [/COLOR][COLOR lime] %s %s[/COLOR]' % (kodi.get_codename(), xbmc.getInfoLabel("System.BuildVersion").split('Git')[0]),'', 100, artwork + 'icon.png', "", description=" ") kodi.addItem('[COLOR ghostwhite]System Time: [/COLOR][COLOR lime] %s[/COLOR]' % systime, '', 100, artwork + 'icon.png', "", description=" ") kodi.addItem('[COLOR ghostwhite]Gateway: [/COLOR][COLOR blue] %s[/COLOR]' % gateway, '', 100, artwork + 'icon.png', "", description=" ") kodi.addItem('[COLOR ghostwhite]Local IP: [/COLOR][COLOR blue] %s[/COLOR]' % ipaddy, '', 100, artwork+'icon.png', "", description=" ") kodi.addItem('[COLOR ghostwhite]External IP: [/COLOR][COLOR %s] %s[/COLOR]' % ext_ip, '', 100, artwork + 'icon.png', "", description=" ") kodi.addItem('[COLOR ghostwhite]DNS 1: [/COLOR][COLOR blue] %s[/COLOR]' % dns1, '', 100, artwork + 'icon.png', "", description=" ") kodi.addItem('[COLOR ghostwhite]Network: [/COLOR][COLOR gold] %s[/COLOR]' % linkstate, '', 100, artwork + 'icon.png', "", description=" ") if str(totalspace) != '0 B': kodi.addItem('[COLOR ghostwhite]Total Disc Space: [/COLOR][COLOR gold] %s[/COLOR]' % totalspace, '', 100, artwork + 'icon.png', "", description=" ") if str(freespace) != '0 B': kodi.addItem('[COLOR ghostwhite]Free Disc Space: [/COLOR][COLOR gold] %s[/COLOR]' % freespace, '', 100, artwork + 'icon.png', "", description=" ") kodi.addItem('[COLOR ghostwhite]Free Memory: [/COLOR][COLOR gold] %s[/COLOR]' % freemem, '', 100, artwork + 'icon.png', "", description=" ") kodi.addItem('[COLOR ghostwhite]Resolution: [/COLOR][COLOR gold] %s[/COLOR]' % screenres, '', 100, artwork + 'icon.png', "", description=" ") kodi.addItem('[COLOR ghostwhite]Python Version: [/COLOR][COLOR lime] %d.%d.%d[/COLOR]' % (pv[0], pv[1], pv[2]), '', 100, artwork + 'icon.png', "", description=" ") viewsetter.set_view("files")
def tool_menu(): menu_cache_path = cache_path if not os.path.exists(temp_path) and not os.path.exists(cache_path): os.makedirs(temp_path) if os.path.exists(temp_path): menu_cache_path = temp_path if not os.path.exists(packages_path): os.makedirs(packages_path) cache_size = '' thumb_size = '' packages_size = '' paths = {menu_cache_path: cache_size, thumbnail_path: thumb_size, packages_path: packages_size} if kodi.get_setting("maint_check_folders") == "true": for path in paths: try: paths[path] = ' - [COLOR blue]' + convert_size(get_size(path)) + '[/COLOR]' except: paths[path] = ' - [COLOR red]Error reading thumbnails[/COLOR]' startup_clean = kodi.get_setting("acstartup") if startup_clean == "false": startup_onoff = "Enable" su_art = 'enable_am_startup.png' else: startup_onoff = "Disable" su_art = 'disable_am_startup.png' su_desc = startup_onoff + " maintenance on Kodi launch!" weekly_clean = kodi.get_setting("clearday") if weekly_clean == "7": weekly_onoff = "Enable" acw_art = 'enable_am_week.png' acw_desc = "Set your device to perform maintenance on a given day each week!" else: weekly_onoff = "Disable" acw_art = 'disable_am_week.png' acw_desc = weekly_onoff + " weekly maintenance on Kodi launch!" if kodi.get_setting('scriptblock') == 'false': scb_onoff = 'Enable' scb_mode = 'toggleblocker' scb_art = 'enable_MSB.png' else: scb_onoff = 'Disable' scb_mode = 'toggleblocker' scb_art = 'enable_MSB.png' scb_desc = scb_onoff + " protection against malicious scripts!" if not _is_debugging(): debug_onoff = 'Enable' debug_art = 'enabledebug.png' else: debug_onoff = 'Disable' debug_art = 'disabledebug.png' debug_desc = debug_onoff + " Debugging!" # Maintenance Tool Menu kodi.addItem("Clear Cache " + str(paths[menu_cache_path]), '', 'clear_cache', artwork + 'currentcache.png', description="Clear your device cache!") kodi.addItem("Delete Thumbnails " + str(paths[thumbnail_path]), '', 'clear_thumbs', artwork + 'currentthumbs.png', description="Delete your Thumbnail cache!") kodi.addItem("Delete Packages " + str(paths[packages_path]), '', 'purge_packages', artwork + 'currentpackages.png', description="Delete your addon installation files!") kodi.addItem("Delete Crash Logs", '', 'crashlogs', artwork + 'clearcrash.png', description="Clear all crash logs from your device!") kodi.addItem("Delete Textures13.db", '', 'deletetextures', artwork + 'currentthumbs.png', description="This will delete the Textures13 database") kodi.addDir("Wipe Addons", '', 'wipe_addons', artwork + 'wipe_addons.png', description="Erase all your Kodi addons in one shot!") kodi.addItem("Run Auto Maintenance", '', 'autoclean', artwork + 'run_am.png', description="Clear your cache, thumbnails and delete addon packages in one click!") kodi.addItem(startup_onoff + ' Auto Maintenance on Startup', '', 'autocleanstartup', artwork + su_art, description=su_desc) kodi.addItem(weekly_onoff + ' Weekly Auto Maintenance', '', 'autocleanweekly', artwork + acw_art, description=acw_desc) kodi.addItem(debug_onoff + " Debugging Mode", '', 'debug_onoff', artwork + debug_art, description=debug_desc) kodi.addItem(scb_onoff + " Malicious Scripts Blocker", '', 'toggleblocker', artwork + scb_art, description=scb_desc) kodi.addItem("Force Update Addons", '', 'updateaddons', artwork + 'forceupdateaddons.png', description="Force a reload of all Kodi addons and repositories!") kodi.addDir("Install Custom Keymaps", '', 'customkeys', artwork + 'custom_keymaps.png', description="Get the best experience out of your device-specific remote control!") kodi.addItem("Reload Current Skin", '', 'reloadskin', artwork + 'reloadskin.png', description="Reload the skin!") viewsetter.set_view("sets")
def List_Addons(url): specials = ('featured', 'live', 'sports', 'playlists') regulars = ('video', 'executable') easyreg = ('audio', 'image', 'service', 'skins') if url in specials: query = url link = api.get_all_addons() feat = api.special_addons(query) my_list = sorted(link, key=lambda k: k['name']) for e in my_list: if e['id'] in feat: name = e['name'] repourl = e['repodlpath'] path = e['addon_zip_path'] description = e['description'] icon = path.rsplit('/', 1)[0] + '/icon.png' fanart = path.rsplit('/', 1)[0] + '/fanart.jpg' try: addHELPDir(name, path, 'addoninstall', icon, fanart, description, 'addon', repourl, '', '', CMi, contextreplace=False) except: pass if url in easyreg: link = api.get_types(url) my_list = sorted(link, key=lambda k: k['name']) for e in my_list: name = e['name'] repourl = e['repodlpath'] path = e['addon_zip_path'] description = e['description'] icon = path.rsplit('/', 1)[0] + '/icon.png' fanart = path.rsplit('/', 1)[0] + '/fanart.jpg' try: addHELPDir(name, path, 'addoninstall', icon, fanart, description, 'addon', repourl, '', '', CMi, contextreplace=False) except: pass # Split into ABC Menus if url in regulars: d = dict.fromkeys(string.ascii_uppercase, 0) my_list = sorted(d) for e in my_list: kodi.addDir(e, url, 'splitlist', artwork + e + '.png', description="Starts with letter " + e) kodi.addDir('Others', url, 'splitlist', artwork + 'symbols.png', description="Starts with another character") if url == 'repositories': link = api.get_repos() for e in link: name = e['name'] repourl = e['repodlpath'] path = e['addon_zip_path'] description = e['description'] icon = path.rsplit('/', 1)[0] + '/icon.png' fanart = path.rsplit('/', 1)[0] + '/fanart.jpg' try: addHELPDir(name, path, 'addoninstall', icon, fanart, description, 'addon', 'None', '', '', CMi, contextreplace=False) except: pass if url == 'skins': link = api.get_all_addons() my_list = sorted(link, key=lambda k: k['name']) for e in my_list: if e['extension_point'] == 'xbmc.gui.skin': name = e['name'] repourl = e['repodlpath'] path = e['addon_zip_path'] description = e['description'] icon = path.rsplit('/', 1)[0] + '/icon.png' fanart = path.rsplit('/', 1)[0] + '/fanart.jpg' try: addHELPDir(name, path, 'addoninstall', icon, fanart, description, 'addon', 'None', '', '', CMi, contextreplace=False) except: pass viewsetter.set_view("sets")
def system_info(): systime = xbmc.getInfoLabel('System.Time ') dns1 = xbmc.getInfoLabel('Network.DNS1Address') gateway = xbmc.getInfoLabel('Network.GatewayAddress') ipaddy = xbmc.getInfoLabel('Network.IPAddress') linkstate = xbmc.getInfoLabel('Network.LinkState').replace("Link:", "") freespace = xbmc.getInfoLabel('System.FreeSpace') screenres = xbmc.getInfoLabel('system.screenresolution') totalspace = xbmc.getInfoLabel('System.TotalSpace') freemem = xbmc.getInfoLabel('System.FreeMemory') ####################################################################### # FIND WHAT VERSION OF KODI IS RUNNING ####################################################################### xbmc_version = xbmc.getInfoLabel("System.BuildVersion") versioni = xbmc_version[:4] # if version >= 11.0 and version <= 11.9: # codename = 'Eden' # if version >= 12.0 and version <= 12.9: # codename = 'Frodo' # if version >= 13.0 and version <= 13.9: # codename = 'Gotham' # if version >= 14.0 and version <= 14.9: # codename = 'Helix' # if version >= 15.0 and version <= 15.9: # codename = 'Isengard' # if version >= 16.0 and version <= 16.9: # codename = 'Jarvis' # if version >= 17.0 and version <= 17.9: # codename = 'Krypton' VERSIONS = { 10: 'Dharma', 11: 'Eden', 12: 'Frodo', 13: 'Gotham', 14: 'Helix', 15: 'Isengard', 16: 'Jarvis', 17: 'Krypton' } v_str = versioni version = int(float(v_str.strip())) unknown = chr(version + 58) + '**' codename = VERSIONS.get(version, unknown) f = urllib.urlopen("http://www.canyouseeme.org/") html_doc = f.read() f.close() m = re.search( '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)', html_doc) check_folders = plugintools.get_setting("maint_check_folders") HOME = xbmc.translatePath('special://home/') PACKAGES = xbmc.translatePath( os.path.join('special://home/addons', 'packages')) THUMBS = xbmc.translatePath( os.path.join('special://home/userdata', 'Thumbnails')) CACHE_FOLDER = xbmc.translatePath(os.path.join('special://home', 'cache')) TEMP_FOLDER = xbmc.translatePath(os.path.join('special://', 'temp')) CACHE = "NULL" if check_folders == "true": if os.path.exists(CACHE_FOLDER): CACHE = CACHE_FOLDER if os.path.exists(TEMP_FOLDER): CACHE = TEMP_FOLDER if not os.path.exists(PACKAGES): os.makedirs(PACKAGES) if CACHE == "NULL": try: PACKAGES_SIZE_BYTE = maintool.get_size(PACKAGES) THUMB_SIZE_BYTE = maintool.get_size(THUMBS) except: pass else: try: CACHE_SIZE_BYTE = maintool.get_size(CACHE) PACKAGES_SIZE_BYTE = maintool.get_size(PACKAGES) THUMB_SIZE_BYTE = maintool.get_size(THUMBS) except: pass if CACHE == "NULL": try: PACKAGES_SIZE = maintool.convertSize(PACKAGES_SIZE_BYTE) THUMB_SIZE = maintool.convertSize(THUMB_SIZE_BYTE) except: pass else: try: CACHE_SIZE = maintool.convertSize(CACHE_SIZE_BYTE) PACKAGES_SIZE = maintool.convertSize(PACKAGES_SIZE_BYTE) THUMB_SIZE = maintool.convertSize(THUMB_SIZE_BYTE) except: pass if CACHE == "NULL": CACHE_SIZE = "Error reading cache" PV = sys.version_info kodi.addItem( '[COLOR ghostwhite]Version: [/COLOR][COLOR lime]%s' % codename + " " + str(versioni) + "[/COLOR]", '', 100, artwork + 'icon.png', "", description=" ") kodi.addItem('[COLOR ghostwhite]System Time: [/COLOR][COLOR lime]' + systime + '[/COLOR]', '', 100, artwork + 'icon.png', "", description=" ") kodi.addItem('[COLOR ghostwhite]Gateway: [/COLOR][COLOR blue]' + gateway + '[/COLOR]', '', 100, artwork + 'icon.png', "", description=" ") kodi.addItem('[COLOR ghostwhite]Local IP: [/COLOR][COLOR blue]' + ipaddy + '[/COLOR]', '', 100, artwork + 'icon.png', "", description=" ") kodi.addItem('[COLOR ghostwhite]External IP: [/COLOR][COLOR blue]' + m.group(0) + '[/COLOR]', '', 100, artwork + 'icon.png', "", description=" ") kodi.addItem('[COLOR ghostwhite]DNS 1: [/COLOR][COLOR blue]' + dns1 + '[/COLOR]', '', 100, artwork + 'icon.png', "", description=" ") kodi.addItem('[COLOR ghostwhite]Network: [/COLOR][COLOR gold]' + linkstate + '[/COLOR]', '', 100, artwork + 'icon.png', "", description=" ") kodi.addItem('[COLOR ghostwhite]Disc Space: [/COLOR][COLOR gold]' + str(totalspace) + '[/COLOR]', '', 100, artwork + 'icon.png', "", description=" ") kodi.addItem('[COLOR ghostwhite]Disc Space: [/COLOR][COLOR gold]' + str(freespace) + '[/COLOR]', '', 100, artwork + 'icon.png', "", description=" ") kodi.addItem('[COLOR ghostwhite]Free Memory: [/COLOR][COLOR gold]' + str(freemem) + '[/COLOR]', '', 100, artwork + 'icon.png', "", description=" ") kodi.addItem('[COLOR ghostwhite]Resolution: [/COLOR][COLOR gold]' + str(screenres) + '[/COLOR]', '', 100, artwork + 'icon.png', "", description=" ") kodi.addItem( '[COLOR ghostwhite]Python Version: [/COLOR][COLOR lime]%d.%d.%d' % (PV[0], PV[1], PV[2]) + '[/COLOR]', '', 100, artwork + 'icon.png', "", description=" ") if check_folders == "true": try: kodi.addItem("Cache Size: [COLOR blue]" + str(CACHE_SIZE) + '[/COLOR]', '', 'null', artwork + 'currentcache.png', description="Clear your device cache!") kodi.addItem("Packages Size: [COLOR blue]" + str(PACKAGES_SIZE) + '[/COLOR]', 'null', '', artwork + 'currentpackages.png', description="Clear your device cache!") kodi.addItem("Thumbnail Size: [COLOR blue]" + str(THUMB_SIZE) + '[/COLOR]', 'null', '', artwork + 'currentthumbs.png', description="Clear your device cache!") except: pass viewsetter.set_view("files")
def main_menu(): ###########TRY POP######## if len(kodi.get_setting('notify')) > 0: kodi.set_setting('notify', str(int(kodi.get_setting('notify')) + 1)) else: kodi.set_setting('notify', "1") if int(kodi.get_setting('notify')) == 1: xbmcgui.Dialog().notification('Serve Aiuto?', 'https://t.me/steaddon', artwork + 'icon.png', 3000, False) elif int(kodi.get_setting('notify')) == 5: kodi.set_setting('notify', "0") #########END POP########### if kodi.get_setting('hasran') == 'false': kodi.set_setting('hasran', 'true') if kodi.get_setting('set_rtmp') == 'false': try: addon_able.set_enabled("inputstream.adaptive") except: pass time.sleep(0.5) try: addon_able.set_enabled("inputstream.rtmp") except: pass if os.path.exists(oldinstaller): shutil.rmtree(oldinstaller) if os.path.exists(oldnotify): shutil.rmtree(oldnotify) if os.path.exists(oldmain): shutil.rmtree(oldmain) if os.path.exists(oldwiz): shutil.rmtree(oldwiz) if os.path.exists(oldfresh): shutil.rmtree(oldfresh) kodi.addDir( "Manutenzione Tools", '', 'call_maintool', artwork + 'maintool.png', description="Keep your Kodi setup running at optimum performance!") #kodi.addDir("Kodi Librtmp Files",'','get_libs',artwork+'librtmp_files.png') kodi.addDir("Factory Restore", '', 'call_restore', artwork + 'factory_restore.png', description="Start off fresh, wipe your Kodi setup clean!") kodi.addDir("Informazioni Sistema", '', 'system_info', artwork + 'system_info.png', description="Useful information about your Kodi setup!") kodi.addDir("Sports Listings", '', 'call_sports', artwork + 'sports_list.png', description="Who’s playing what today?") kodi.addDir( 'Backup / Restore', '', 'backup_restore', artwork + 'backup_restore.png', description="Backup or restore your Kodi configuration in minutes!") kodi.addItem( "Log Viewer", '', 'log_view', artwork + 'log_uploader.png', description="Easily view your error log without leaving Kodi!") if kodi.get_setting('notifications-on-startup') == 'false': kodi.addItem( "Notifications (Opt Out)", '', 'enable_notify', artwork + 'notification_optout.png', description="Unsubscribe from important Stefano notifications!") if kodi.get_setting('notifications-on-startup') == 'true': kodi.addItem( "Notifications (Opt In)", '', 'disable_notify', artwork + 'notification_in.png', description="Subscribe to important Stefano notifications!") viewsetter.set_view("sets")
def main_menu(): maintool.source_change() maintool.feed_change() # ########## TRY POP ######## if len(kodi.get_setting('notify')) > 0: kodi.set_setting('notify', str(int(kodi.get_setting('notify')) + 1)) else: kodi.set_setting('notify', "1") if int(kodi.get_setting('notify')) == 1: xbmcgui.Dialog().notification('Need Support?', 'www.tvaddons.co', artwork + 'icon.png', 3000, False) elif int(kodi.get_setting('notify')) == 5: kodi.set_setting('notify', "0") # ######## END POP ########### if kodi.get_setting('hasran') == 'false': kodi.set_setting('hasran', 'true') if kodi.get_setting('set_rtmp') == 'false': try: addon_able.set_enabled("inputstream.adaptive") except: pass time.sleep(0.5) try: addon_able.set_enabled("inputstream.rtmp") except: pass time.sleep(0.5) xbmc.executebuiltin("XBMC.UpdateLocalAddons()") kodi.set_setting('set_rtmp', 'true') dp = xbmcgui.DialogProgress() try: if (not os.path.exists(ART)) or (not os.path.exists(ART2)) or (not os.path.exists(ART3)): dp.create(AddonTitle, 'Getting ' + AddonTitle + ' Ready........', 'Downloading ' + AddonTitle + ' Icons......') dp.update(0) icons_zip = os.path.join(packagepath, AddonTitle + '_icons.zip') downloader.download(OPEN_URL('http://indigo.tvaddons.co/graphics/arts.txt'), icons_zip, dp) dp.update(0, 'Getting %s Ready........' % AddonTitle, 'Extracting %s Icons......' % AddonTitle) extract.all(icons_zip, addon_path, dp) dp.close() except: pass # # Check for HUBRepo and install it try: if not os.path.exists(hubpath): installer.HUBINSTALL('repository.xbmchub', 'http://github.com/tvaddonsco/tva-release-repo/raw/master/repository.xbmchub/', 'repository.xbmchub') xbmc.executebuiltin("XBMC.InstallAddon(%s)" % 'repository.xbmchub') addon_able.set_enabled("repository.xbmchub") xbmc.executebuiltin("XBMC.UpdateAddonRepos()") except: pass # Check for Log Uploader and install it try: if not os.path.exists(uploaderpath): installer.HUBINSTALL('script.tvaddons.debug.log', 'http://github.com/tvaddonsco/tva-release-repo/raw/master/script.tvaddons.debug.log/', 'script.tvaddons.debug.log') addon_able.set_enabled('script.tvaddons.debug.log') # xbmc.executebuiltin("InstallAddon(%s)" % 'script.tvaddons.debug.log') xbmc.executebuiltin("XBMC.UpdateLocalAddons()") except: pass # Check for old maintenance tools and remove them old_maintenance = (oldinstaller, oldnotify, oldmain, oldwiz, oldfresh) for old_file in old_maintenance: if os.path.exists(old_file): shutil.rmtree(old_file) if kodi.get_setting('wizardran') == 'false': kodi.addItem("Config Wizard", '', 'call_wizard',artwork+'config_wizard.png', description="Automatically configure Kodi with the best addons and goodies in seconds!") kodi.addDir("Addon Installer", '', 'call_installer', artwork + 'addon_installer.png', description="It’s like an App Store for Kodi addons!") kodi.addDir("Maintenance Tools", '', 'call_maintool', artwork + 'maintool.png', description="Keep your Kodi setup running at optimum performance!") # kodi.addDir("Kodi Librtmp Files", '', 'get_libs', artwork +'librtmp_files.png') kodi.addItem("Rejuvenate Kodi", '', 'call_rejuv', artwork + 'rejuvinate.png', description="Wipe and reconfigure Kodi with the latest Config Wizard setup!") kodi.addDir("Factory Restore", '', 'call_restore', artwork + 'factory_restore.png', description="Start off fresh, wipe your Kodi setup clean!") if os.path.exists(uploaderpath): kodi.addItem("Log Uploader", '', 'log_upload', artwork + 'log_uploader.png', description="Easily upload your error logs for troubleshooting!") kodi.addDir("Network Speed Test", '', 'runspeedtest', artwork + 'speed_test.png', description="How fast is your internet?") kodi.addDir("System Information", '', 'system_info', artwork + 'system_info.png', description="Useful information about your Kodi setup!") kodi.addDir("Sports Listings", '', 'call_sports', artwork + 'sports_list.png', description="Who’s playing what today?") kodi.addDir('Backup / Restore', '', 'backup_restore', artwork + 'backup_restore.png', description="Backup or restore your Kodi configuration in minutes!") kodi.addItem("Log Viewer", '', 'log_view', artwork + 'log_viewer.png', description="Easily view your error log without leaving Kodi!") if kodi.get_setting("notifications-on-startup") == "false": kodi.addItem("Notifications (Opt Out)", '', 'toggle_notify', artwork + 'notification_optout.png', description="Unsubscribe to important TV ADDONS notifications!") else: kodi.addItem("Notifications (Opt In)", '', 'toggle_notify', artwork + 'notification_in.png', description="Subscribe from important TV ADDONS notifications!") viewsetter.set_view("sets")