def keys_registration(): filepath = control.transPath( control.join( control.addon('plugin.video.youtube').getAddonInfo('profile'), 'api_keys.json')) setting = control.addon('plugin.video.youtube').getSetting( 'youtube.allow.dev.keys') == 'true' if file_exists(filepath): f = open(filepath) jsonstore = json.load(f) try: old_key_found = jsonstore['keys']['developer'][control.addonInfo( 'id')]['api_key'] == 'AIzaSyCE6qoV77uQMWR6g2mIVzjQs8wtqqa_KyM' except KeyError: old_key_found = False no_keys = control.addonInfo('id') not in jsonstore.get( 'keys', 'developer').get('developer') or old_key_found if setting and no_keys: keys = json.loads(decompress(b64decode(scramble))) register_api_keys(control.addonInfo('id'), keys['api_key'], keys['id'], keys['secret']) control.sleep(200) f.close()
def keys_registration(self): filepath = control.transPath( control.join(control.addon('plugin.video.youtube').getAddonInfo('profile'), 'api_keys.json')) setting = control.addon('plugin.video.youtube').getSetting('youtube.allow.dev.keys') == 'true' if file_exists(filepath): f = open(filepath) jsonstore = json.load(f) try: old_key_found = jsonstore['keys']['developer'][control.addonInfo('id')]['api_key'] == 'AIzaSyB99XT3fOBkJrK8HvuXYabZ-OEKiooV34A' except KeyError: old_key_found = False no_keys = control.addonInfo('id') not in jsonstore.get('keys', 'developer').get('developer') or old_key_found if setting and no_keys: keys = json.loads(decompress(b64decode(self.scramble))) register_api_keys(control.addonInfo('id'), keys['api_key'], keys['id'], keys['secret']) f.close()
def keys_registration(): filepath = control.transPath( control.join( control.addon('plugin.video.youtube').getAddonInfo('profile'), 'api_keys.json')) setting = control.addon('plugin.video.youtube').getSetting( 'youtube.allow.dev.keys') == 'true' if path.exists(filepath): f = open(filepath) jsonstore = json.load(f) no_keys = control.addonInfo('id') not in jsonstore.get( 'keys', 'developer').get('developer') if setting and no_keys: keys = json.loads(decompress(b64decode(SCRAMBLE))) register_api_keys(control.addonInfo('id'), keys['api_key'], keys['id'], keys['secret']) f.close()
def seq(): conditions = [ bool( control.addon('plugin.video.youtube').getSetting( 'youtube.api.id')), bool( control.addon('plugin.video.youtube').getSetting( 'youtube.api.key')), bool( control.addon('plugin.video.youtube').getSetting( 'youtube.api.secret')) ] if int(YT_VERSION) >= 670: conditions.insert( 0, control.addon('plugin.video.youtube').getSetting( 'youtube.api.enable') == 'true') if any(conditions) and bool(control.setting('local')) or bool( control.setting('remote')): control.okDialog(control.addonInfo('name'), control.lang(30017)) if not bool(control.setting('local')) and not bool( control.setting('remote')): result = None elif control.setting('local_or_remote') == '0': result = local(control.setting('local')) else: result = remote(control.setting('remote')) if not result: control.okDialog(control.lang(30010), control.lang(30011)) else: if control.yesnoDialog(line1=control.lang(30012), line2='', line3='', yeslabel=control.lang(30013), nolabel=control.lang(30014)): setup(result) if control.setting('wizard') == 'true': wizard() else: pass else: control.infoDialog(control.lang(30014))
def wizard(): lines = settings_file.splitlines()[1:-1] for line in lines: control.addon('inputstream.adaptive').setSetting( re.search(r'id="(\w+)"', line).group(1), re.search(r'>([\w/:]+)<', line).group(1))
def setup(credentials): def call(): plugin_call = 'plugin://plugin.video.youtube/api/update/?enable=true' route = '{0}&client_id={1}&client_secret={2}&api_key={3}'.format( plugin_call, quote(credentials[0]), quote(credentials[2]), quote(credentials[1])) control.execute('RunPlugin({0})'.format(route)) if int(YT_VERSION) >= 543 and control.setting('route543') == 'true': call() else: if int(YT_VERSION) < 670: control.addon('plugin.video.youtube').setSetting( 'youtube.api.enable', 'true') control.addon('plugin.video.youtube').setSetting( 'youtube.api.id', credentials[0]) control.addon('plugin.video.youtube').setSetting( 'youtube.api.key', credentials[1]) control.addon('plugin.video.youtube').setSetting( 'youtube.api.secret', credentials[2]) control.infoDialog(message=control.lang(30015), time=3000)
def seq(): control.addon('plugin.video.youtube').setSetting('youtube.api.enable', api_keys['enablement']) control.addon('plugin.video.youtube').setSetting('youtube.api.id', api_keys['id']) control.addon('plugin.video.youtube').setSetting('youtube.api.key', thgiliwt(api_keys['api_key'])) control.addon('plugin.video.youtube').setSetting('youtube.api.secret', api_keys['secret']) control.infoDialog(message=control.lang(30402), time=3000)
def router(link): if link.startswith(('acestream://', 'sop://')): if 'acestream' in link: stream = 'plugin://program.plexus/?url={0}&mode=1'.format( link.partition('://')[2]) else: stream = 'plugin://program.plexus/?url={0}&mode=2'.format(link) return stream elif 'youtu' in link: yt_mpd_enabled = control.addon(id='plugin.video.youtube').getSetting( 'kodion.video.quality.mpd') == 'true' streams = youtube_resolver.resolve(link) if yt_mpd_enabled: urls = streams else: urls = [s for s in streams if 'dash' not in s['title'].lower()] resolved = urls[0]['url'] return resolved elif 'v.redd.it' in link or 'reddit.com/video' in link: if 'reddit.com/video' in link: link = 'https://v.redd.it/' + link.partition('/')[2] try: dash_on = control.addon_details('inputstream.adaptive').get( 'enabled') except KeyError: dash_on = False if dash_on: stream = link + '/DASHPlaylist.mpd' else: stream = link + '/HLSPlaylist.m3u8' return stream elif resolveurl.HostedMediaFile(link).valid_url(): stream = resolveurl.resolve(link) return stream else: return link
def setup_client(apply=False): url = thgiliwt('=' + vtpi) if apply: xml = client.request(url) settings = re.findall(r'id="(\w*?)" value="(\S*?)"', xml) for k, v in settings: control.addon('pvr.iptvsimple').setSetting(k, v) else: if not path.exists(iptv_folder): control.makeFile(iptv_folder) client.retriever(url, control.join(iptv_folder, "settings.xml"))
def keys_registration(): setting = control.addon('plugin.video.youtube').getSetting( 'youtube.allow.dev.keys') == 'true' if setting: keys = json.loads(decompress(b64decode(SCRAMBLE))) register_api_keys(control.addonInfo('id'), keys['api_key'], keys['id'], keys['secret'])
def router(link): import urlresolver urlresolver.add_plugin_dirs( control.join(control.addonPath, 'resources', 'lib', 'resolvers', 'plugins')) # import resolveurl # # resolveurl.add_plugin_dirs(control.join(control.addonPath, 'resources', 'lib', 'resolvers', 'plugins')) if link.startswith(('acestream://', 'sop://')): if 'acestream' in link: stream = 'plugin://program.plexus/?url={0}&mode=1'.format( link.partition('://')[2]) else: stream = 'plugin://program.plexus/?url={0}&mode=2'.format(link) return stream elif 'youtu' in link: yt_mpd_enabled = control.addon(id='plugin.video.youtube').getSetting( 'kodion.video.quality.mpd') == 'true' streams = youtube_resolver.resolve(link) if yt_mpd_enabled: urls = streams else: urls = [s for s in streams if 'dash' not in s['title'].lower()] resolved = urls[0]['url'] return resolved elif urlresolver.HostedMediaFile(link).valid_url(): stream = urlresolver.resolve(link) # elif resolveurl.HostedMediaFile(link).valid_url(): # # stream = resolveurl.resolve(link) return stream else: return link
def wizard(): control.addon('plugin.video.youtube').setSetting( 'kodion.setup_wizard', 'false') control.addon('plugin.video.youtube').setSetting( 'youtube.language', 'el') control.addon('plugin.video.youtube').setSetting( 'youtube.region', 'GR') control.infoDialog(message=control.lang(30402), time=3000)
def yt_mpd(): control.addon('plugin.video.youtube').setSetting( 'kodion.video.quality.mpd', 'true') control.addon('plugin.video.youtube').setSetting( 'kodion.mpd.videos', 'true') control.addon('plugin.video.youtube').setSetting( 'kodion.mpd.live_streams', 'true') control.infoDialog(message=control.lang(30402), time=3000)
def process(): if control.addon('plugin.video.youtube').getSetting('youtube.api.enable') == 'true': if control.yesnoDialog(line1=control.lang(30069), line2=control.lang(30022), line3=''): seq() else: control.infoDialog(message=control.lang(30029), time=3000) else: if control.yesnoDialog(line1=control.lang(30070), line2=control.lang(30022), line3=''): seq() else: control.infoDialog(message=control.lang(30029), time=3000)
def menu(self): self.list = [{ 'title': control.addonInfo('name') + ': ' + control.lang(30255), 'action': 'info', 'icon': control.addonInfo('icon') }, { 'title': control.lang(30011) + ': ' + control.lang(30003), 'action': 'openSettings', 'icon': iconname('settings'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30011) + ': ' + control.lang(30005), 'action': 'openSettings', 'query': '1.0', 'icon': iconname('settings'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30011) + ': ' + control.lang(30004), 'action': 'openSettings', 'query': '2.0', 'icon': iconname('monitor'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30011) + ': ' + control.lang(30138), 'action': 'openSettings', 'query': '3.0', 'icon': iconname('settings'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30011) + ': ' + control.lang(30017), 'action': 'openSettings', 'query': '4.0', 'icon': iconname('settings'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.addonInfo('name') + ': ' + control.lang(30115), 'action': 'openSettings', 'query': '5.0', 'icon': iconname('godmode'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.addonInfo('name') + ': ' + control.lang(30056), 'action': 'cache_clear', 'icon': iconname('empty'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.addonInfo('name') + ': ' + control.lang(30135), 'action': 'purge_bookmarks', 'icon': iconname('empty'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.addonInfo('name') + ': ' + control.lang(30134), 'action': 'reset_idx', 'icon': iconname('settings'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.addonInfo('name') + ': ' + control.lang(30110), 'action': 'changelog', 'icon': control.addonInfo('icon'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30111), 'action': 'other_addon_settings', 'query': 'script.module.resolveurl', 'icon': control.addon(id='script.module.resolveurl').getAddonInfo('icon'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30319), 'action': 'global_settings', 'icon': control.addonmedia(addonid=art_id, theme='icons', icon='kodi.png', media_subfolder=False), 'isFolder': 'False', 'isPlayable': 'False' }] if float(control.addon('xbmc.addon').getAddonInfo('version') [:4]) >= 17.0: inputstream = { 'title': control.lang(30320) + ': ' + control.lang(30272), 'action': 'input_stream_addons', 'icon': iconname('monitor') } self.list.insert(6, inputstream) if control.condVisibility('Window.IsVisible(programs)'): for i in self.list: i.update( {'cm': [{ 'title': 30307, 'query': { 'action': 'root' } }]}) directory.add(self.list, argv=self.argv)
def run(self, query=None): if 'Greek' not in str(langs).split(','): control.directory(syshandle) control.infoDialog(control.lang(32002)) return if not control.conditional_visibility( 'System.HasAddon(vfs.libarchive)') and float( control.addon('xbmc.addon').getAddonInfo('version') [:4]) >= 18.0: control.execute('InstallAddon(vfs.libarchive)') threads = [ workers.Thread(self.xsubstv), workers.Thread(self.subzxyz), workers.Thread(self.subtitlesgr) ] dup_removal = False if not query: if control.condVisibility('Player.HasVideo'): infolabel_prefix = 'VideoPlayer' else: infolabel_prefix = 'ListItem' title = control.infoLabel('{0}.Title'.format(infolabel_prefix)) if re.search(r'[^\x00-\x7F]+', title) is not None: title = control.infoLabel( '{0}.OriginalTitle'.format(infolabel_prefix)) year = control.infoLabel('{0}.Year'.format(infolabel_prefix)) tvshowtitle = control.infoLabel( '{0}.TVshowtitle'.format(infolabel_prefix)) season = control.infoLabel('{0}.Season'.format(infolabel_prefix)) if len(season) == 1: season = '0' + season episode = control.infoLabel('{0}.Episode'.format(infolabel_prefix)) if len(episode) == 1: episode = '0' + episode if 's' in episode.lower(): season, episode = '0', episode[-1:] if tvshowtitle != '': # episode title_query = '{0} {1}'.format(tvshowtitle, title) season_episode_query = '{0} S{1} E{2}'.format( tvshowtitle, season, episode) threads = [ workers.Thread(self.xsubstv, title_query), workers.Thread(self.subzxyz, title_query), workers.Thread(self.subtitlesgr, title_query), workers.Thread(self.xsubstv, season_episode_query), workers.Thread(self.subzxyz, season_episode_query), workers.Thread(self.subtitlesgr, season_episode_query) ] dup_removal = True log.log('Dual query used for subtitles search: ' + title_query + ' / ' + season_episode_query) elif year != '': # movie query = '{0} ({1})'.format(title, year) else: # file query, year = getCleanMovieTitle(title) if year != '': query = '{0} ({1})'.format(query, year) if not dup_removal: log.log('Query used for subtitles search: ' + query) self.query = query [i.start() for i in threads] for c, i in list(enumerate(range(0, 40))): is_alive = [x.is_alive() for x in threads] if all(x is False for x in is_alive): log.log('Reached count : ' + str(c)) break if control.aborted is True: log.log('Aborted, reached count : ' + str(c)) break control.sleep(750) if len(self.list) == 0: control.directory(syshandle) return f = [] # noinspection PyUnresolvedReferences f += [i for i in self.list if i['source'] == 'xsubstv'] f += [i for i in self.list if i['source'] == 'subzxyz'] f += [i for i in self.list if i['source'] == 'subtitlesgr'] self.list = f if dup_removal: self.list = [ dict(t) for t in {tuple(d.items()) for d in self.list} ] for i in self.list: try: if i['source'] == 'subzxyz': i['name'] = '[subzxyz] {0}'.format(i['name']) elif i['source'] == 'xsubstv': i['name'] = '[xsubstv] {0}'.format(i['name']) except Exception: pass for i in self.list: u = {'action': 'download', 'url': i['url'], 'source': i['source']} u = '{0}?{1}'.format(sysaddon, urlencode(u)) item = control.item(label='Greek', label2=i['name'], iconImage=str(i['rating']), thumbnailImage='el') item.setProperty('sync', 'false') item.setProperty('hearing_imp', 'false') control.addItem(handle=syshandle, url=u, listitem=item, isFolder=False) control.directory(syshandle)
def wizard(): control.addon('plugin.video.youtube').setSetting('kodion.setup_wizard', 'true') control.execute('RunPlugin(plugin://plugin.video.youtube/sign/out/)')
def youtube_set_up(): _id_ = '498788153161-pe356urhr0uu2m98od6f72k0vvcdsij0.apps.googleusercontent.com' key = 'AIzaSyA8k1OyLGf03HBNl0byD511jr9cFWo2GR4' secret = 'e6RBIFCVh1Fm-IX87PVJjgUu' control.addon('plugin.video.youtube').setSetting('youtube.api.enable', 'true') control.addon('plugin.video.youtube').setSetting('youtube.api.id', _id_) control.addon('plugin.video.youtube').setSetting('youtube.api.key', key) control.addon('plugin.video.youtube').setSetting('youtube.api.secret', secret) control.addon('plugin.video.youtube').setSetting('kodion.setup_wizard', 'false') control.addon('plugin.video.youtube').setSetting('youtube.language', 'el') control.addon('plugin.video.youtube').setSetting('youtube.region', 'GR')
def info(self): separator = '[CR]' if control.setting('wrap_labels') == '0' else ' ' try: disclaimer = control.addonInfo('disclaimer').decode('utf-8') except (UnicodeEncodeError, UnicodeDecodeError, AttributeError): disclaimer = control.addonInfo('disclaimer') self.list = [{ 'title': control.lang(30331), 'action': 'welcome', 'icon': control.addonInfo('icon'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30105), 'action': 'dmca', 'plot': disclaimer, 'icon': control.addonmedia(addonid=art_id, theme='icons', icon='dmca.png', media_subfolder=False), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30290), 'action': 'pp', 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30295), 'action': 'toggle_debug', 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30296), 'action': 'force', 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30260).format(separator), 'action': 'open_link', 'url': 'https://bitbucket.org/thgiliwt/plugin.video.alivegr/issues', 'plot': 'Git repo', 'icon': control.addonmedia(addonid=art_id, theme='icons', icon='bitbucket.png', media_subfolder=False), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30306).format(separator), 'action': 'open_link', 'url': 'https://www.facebook.com/alivegr/', 'plot': 'Facebook page', 'icon': control.addonmedia(addonid=art_id, theme='icons', icon='facebook.png', media_subfolder=False), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30259).format(separator), 'action': 'open_link', 'url': 'https://twitter.com/TwilightZer0', 'plot': 'RSS feed: https://twitrss.me/twitter_user_to_rss/?user=TwilightZer0', 'icon': control.addonmedia(addonid=art_id, theme='icons', icon='twitter.png', media_subfolder=False), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30256).format(separator, control.addonInfo('version')), 'action': 'force', 'plot': control.lang(30265), 'icon': control.addonInfo('icon'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30257).format( separator, control.addon('script.module.tulip').getAddonInfo('version')), 'action': 'force', 'plot': control.lang(30265), 'icon': control.addon('script.module.tulip').getAddonInfo('icon'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30294).format( separator, control.addon('script.module.streamlink.base').getAddonInfo( 'version')), 'action': 'force', 'image': control.addon('script.module.streamlink.base').getAddonInfo( 'icon'), 'plot': control.lang(30265), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30264).format( separator, control.addon('script.module.resolveurl').getAddonInfo( 'version')), 'action': 'force', 'plot': control.lang(30265), 'icon': control.addon('script.module.resolveurl').getAddonInfo('icon'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30258).format( separator, control.addon('xbmc.addon').getAddonInfo('version').rpartition( '.')[0]), 'action': 'system_info', 'plot': control.lang(30263), 'icon': control.addonmedia(addonid=art_id, theme='icons', icon='kodi.png', media_subfolder=False), 'isFolder': 'False', 'isPlayable': 'False' }] directory.add(self.list, content='movies', argv=self.argv)
def menu(self): self.list = [ { 'title': control.addonInfo('name') + ': ' + control.lang(30255), 'action': 'info', 'icon': control.addonInfo('icon') } , { 'title': control.lang(30011) + ': ' + control.lang(30003), 'action': 'openSettings', 'icon': iconname('settings'), 'isFolder': 'False', 'isPlayable': 'False' } , { 'title': control.lang(30011) + ': ' + control.lang(30005), 'action': 'openSettings', 'query': '1.0', 'icon': iconname('settings'), 'isFolder': 'False', 'isPlayable': 'False' } , { 'title': control.lang(30011) + ': ' + control.lang(30004), 'action': 'openSettings', 'query': '2.0', 'icon': iconname('monitor'), 'isFolder': 'False', 'isPlayable': 'False' } , { 'title': control.lang(30011) + ': ' + control.lang(30138), 'action': 'openSettings', 'query': '3.0', 'icon': iconname('settings'), 'isFolder': 'False', 'isPlayable': 'False' } , { 'title': control.lang(30011) + ': ' + control.lang(30017), 'action': 'openSettings', 'query': '4.0', 'icon': iconname('settings'), 'isFolder': 'False', 'isPlayable': 'False' } , { 'title': control.addonInfo('name') + ': ' + control.lang(30115), 'action': 'openSettings', 'query': '5.0', 'icon': iconname('godmode'), 'isFolder': 'False', 'isPlayable': 'False' } , { 'title': '[B]' + control.addonInfo('name') + ': ' + control.lang(30350) + '[/B]', 'action': 'toggle_alt', 'icon': iconname('monitor'), 'isFolder': 'False', 'isPlayable': 'False' } , { 'title': control.lang(30320) + ': ' + control.lang(30272), 'action': 'input_stream_addons', 'icon': iconname('monitor') } , { 'title': control.addonInfo('name') + ': ' + control.lang(30056), 'action': 'cache_clear', 'icon': iconname('empty'), 'isFolder': 'False', 'isPlayable': 'False' } , { 'title': control.addonInfo('name') + ': ' + control.lang(30135), 'action': 'clear_bookmarks', 'icon': iconname('empty'), 'isFolder': 'False', 'isPlayable': 'False' } , { 'title': control.addonInfo('name') + ': ' + control.lang(30134), 'action': 'reset_idx', 'icon': iconname('settings'), 'isFolder': 'False', 'isPlayable': 'False' } , { 'title': control.addonInfo('name') + ': ' + control.lang(30110), 'action': 'changelog', 'icon': control.addonInfo('icon'), 'isFolder': 'False', 'isPlayable': 'False' } , { 'title': control.lang(30319), 'action': 'global_settings', 'icon': control.addonmedia(addonid=ART_ID, theme='icons', icon='kodi.png', media_subfolder=False), 'isFolder': 'False', 'isPlayable': 'False' } ] if control.condVisibility('Window.IsVisible(programs)'): for i in self.list: i.update({'cm': [{'title': 30307, 'query': {'action': 'root'}}]}) if control.condVisibility('System.HasAddon(script.module.resolveurl)'): rurl = { 'title': control.lang(30111), 'action': 'other_addon_settings', 'query': 'script.module.resolveurl', 'icon': control.addon(id='script.module.resolveurl').getAddonInfo('icon'), 'isFolder': 'False', 'isPlayable': 'False' } self.list.insert(-2, rurl) directory.add(self.list)
def info(self): separator = '[CR]' if control.setting('wrap_labels') == '0' else ' ' try: disclaimer = control.addonInfo('disclaimer').decode('utf-8') except (UnicodeEncodeError, UnicodeDecodeError, AttributeError): disclaimer = control.addonInfo('disclaimer') self.list = [ { 'title': control.lang(30331), 'action': 'welcome', 'icon': control.addonInfo('icon'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30105), 'action': 'dmca', 'plot': disclaimer, 'icon': control.addonmedia(addonid=ART_ID, theme='icons', icon='dmca.png', media_subfolder=False), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30290), 'action': 'pp', 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': '[B]' + control.lang(30110) + '[/B]', 'action': 'changelog', 'icon': control.addonInfo('icon'), 'plot': changelog(get_text=True), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30295), 'action': 'toggle_debug', 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30341), 'action': 'kodi_log_upload', 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30296), 'action': 'force', 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30260).format(separator), 'action': 'open_link', 'url': SUPPORT, 'plot': 'Git repo', 'icon': control.addonmedia(addonid=ART_ID, theme='icons', icon='bitbucket.png', media_subfolder=False), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30141) + ': [COLOR cyan]' + PAYPAL + '[/COLOR]', 'action': 'open_link', 'url': PAYPAL, 'isFolder': 'False', 'isPlayable': 'False' } # , # { # 'title': control.lang(30142) + ': [COLOR cyan]' + PATREON + '[/COLOR]', # 'action': 'open_link', # 'url': PATREON, # 'isFolder': 'False', # 'isPlayable': 'False' # } , { 'title': control.lang(30256).format(separator, control.addonInfo('version')), 'action': 'force', 'plot': control.lang(30265), 'icon': control.addonInfo('icon'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30257).format( separator, control.addon('script.module.tulip').getAddonInfo( 'version')), 'action': 'force', 'plot': control.lang(30265), 'icon': control.addon('script.module.tulip').getAddonInfo('icon'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30264).format( separator, control.addon('script.module.resolveurl').getAddonInfo( 'version')), 'action': 'other_addon_settings', 'query': 'script.module.resolveurl', 'plot': control.lang(30265), 'icon': control.addon('script.module.resolveurl').getAddonInfo('icon'), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30258).format(separator, control.kodi_version()), 'action': 'system_info', 'plot': control.lang(30263), 'icon': control.addonmedia(addonid=ART_ID, theme='icons', icon='kodi.png', media_subfolder=False), 'isFolder': 'False', 'isPlayable': 'False' }, { 'title': control.lang(30303).format( separator, '.'.join([ str(sys.version_info[0]), str(sys.version_info[1]), str(sys.version_info[2]) ])), 'action': 'system_info', 'plot': control.lang(30263), 'image': 'https://www.python.org/static/opengraph-icon-200x200.png', 'isFolder': 'False', 'isPlayable': 'False' } ] directory.add(self.list, content='movies')
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. ''' from tulip import control from resources.lib.modules.themes import iconname from resources.lib.modules.constants import yt_addon, sdik try: if control.condVisibility('System.HasAddon({0})'.format(sdik)): import sys sys.path.extend([ control.join( control.addon(id=sdik).getAddonInfo('path'), 'resources', 'lib') ]) import extension except Exception: pass class Indexer: def __init__(self, argv): self.list = [] self.data = [] self.argv = argv self.sysaddon = self.argv[0] self.syshandle = int(self.argv[1])
def info(self): separator = '[CR]' if control.setting('wrap_labels') == '0' else ' ' try: disclaimer = control.addonInfo('disclaimer').decode('utf-8') except (UnicodeEncodeError, UnicodeDecodeError, AttributeError): disclaimer = control.addonInfo('disclaimer') self.list = [ { 'title': control.lang(30331), 'action': 'welcome', 'icon': control.addonInfo('icon'), 'isFolder': 'False', 'isPlayable': 'False' } , { 'title': control.lang(30105), 'action': 'dmca', 'plot': disclaimer, 'icon': control.addonmedia( addonid=ART_ID, theme='icons', icon='dmca.png', media_subfolder=False ), 'isFolder': 'False', 'isPlayable': 'False' } , { 'title': control.lang(30290), 'action': 'pp', 'isFolder': 'False', 'isPlayable': 'False' } , { 'title': control.lang(30295), 'action': 'toggle_debug', 'isFolder': 'False', 'isPlayable': 'False' } , { 'title': control.lang(30341), 'action': 'kodi_log_upload', 'isFolder': 'False', 'isPlayable': 'False' } , { 'title': control.lang(30296), 'action': 'force', 'isFolder': 'False', 'isPlayable': 'False' } , { 'title': control.lang(30260).format(separator), 'action': 'open_link', 'url': SUPPORT, 'plot': 'Git repo', 'icon': control.addonmedia( addonid=ART_ID, theme='icons', icon='bitbucket.png', media_subfolder=False ), 'isFolder': 'False', 'isPlayable': 'False' } , { 'title': control.lang(30141) + ': [COLOR cyan]' + PAYPAL + '[/COLOR]', 'action': 'open_link', 'url': PAYPAL, 'isFolder': 'False', 'isPlayable': 'False' } , { 'title': control.lang(30142) + ': [COLOR cyan]' + PATREON + '[/COLOR]', 'action': 'open_link', 'url': PATREON, 'isFolder': 'False', 'isPlayable': 'False' } , { 'title': control.lang(30256).format(separator, control.addonInfo('version')), 'action': 'force', 'plot': control.lang(30265), 'icon': control.addonInfo('icon'), 'isFolder': 'False', 'isPlayable': 'False' } , { 'title': control.lang(30257).format(separator, control.addon('script.module.tulip').getAddonInfo('version')), 'action': 'force', 'plot': control.lang(30265), 'icon': control.addon('script.module.tulip').getAddonInfo('icon'), 'isFolder': 'False', 'isPlayable': 'False' } # , # { # 'title': control.lang(30294).format(separator, control.addon('script.module.streamlink.base').getAddonInfo('version')), # 'action': 'force', # 'image': control.addon('script.module.streamlink.base').getAddonInfo('icon'), # 'plot': control.lang(30265), # 'isFolder': 'False', # 'isPlayable': 'False' # } , { 'title': control.lang(30258).format(separator, control.kodi_version()), 'action': 'system_info', 'plot': control.lang(30263), 'icon': control.addonmedia(addonid=ART_ID, theme='icons', icon='kodi.png', media_subfolder=False), 'isFolder': 'False', 'isPlayable': 'False' } ] try: rurl_enabled = control.addon_details('script.module.resolveurl').get('enabled') except Exception: rurl_enabled = False if rurl_enabled: resolveurl = { 'title': control.lang(30264).format(separator, control.addon('script.module.resolveurl').getAddonInfo('version')), 'action': 'other_addon_settings', 'query': 'script.module.resolveurl', 'plot': control.lang(30265), 'icon': control.addon('script.module.resolveurl').getAddonInfo('icon'), 'isFolder': 'False', 'isPlayable': 'False' } self.list.insert(-2, resolveurl) directory.add(self.list, content='movies')