def papers_index(self): # self.data = cache.get(self.front_pages, 12) self.data = self.front_pages() if not self.data: return for i in self.data: i.update({'action': None, 'isFolder': 'False'}) self.list = [ item for item in self.data if any(item['group'] == group for group in [int(control.setting('papers_group'))]) ] if not control.setting('papers_group') == '0' else self.data if control.setting('papers_group') == '1': integer = 30231 elif control.setting('papers_group') == '2': integer = 30232 elif control.setting('papers_group') == '3': integer = 30233 elif control.setting('papers_group') == '4': integer = 30234 else: integer = 30235 switch = { 'title': control.lang(30047).format(control.lang(integer)), 'icon': iconname('switcher'), 'action': 'papers_switcher' } if control.setting('show_pic_switcher') == 'true': li = control.item(label=switch['title'], iconImage=switch['icon']) li.setArt({'fanart': control.addonInfo('fanart')}) url = '{0}?action={1}'.format(self.sysaddon, switch['action']) control.addItem(self.syshandle, url, li) for i in self.list: li = control.item(label=i['title'], iconImage=i['image']) li.setArt({ 'poster': i['image'], 'thumb': i['image'], 'fanart': control.addonInfo('fanart') }) li.setInfo('image', {'title': i['title'], 'picturepath': i['url']}) url = i['url'] isFolder = False self.directory.append((url, li, isFolder)) control.addItems(self.syshandle, self.directory) control.directory(self.syshandle)
def papers_index(self): self.data = self.front_pages() for i in self.data: i.update({'action': None, 'isFolder': 'False'}) try: self.list = [ item for item in self.data if item['group'] == int(control.setting('papers_group')) ] except Exception: self.list = [item for item in self.data if item['group'] == 0] control.setSetting('papers_group', '0') if control.setting('papers_group') == '1': integer = 30232 elif control.setting('papers_group') == '2': integer = 30233 elif control.setting('papers_group') == '3': integer = 30234 else: integer = 30231 switch = { 'title': control.lang(30047).format(control.lang(integer)), 'icon': iconname('switcher'), 'action': 'papers_switcher' } if control.setting('show_pic_switcher') == 'true': li = control.item(label=switch['title']) li.setArt({ 'icon': switch['icon'], 'fanart': control.addonInfo('fanart') }) url = '{0}?action={1}'.format(sysaddon, switch['action']) control.addItem(syshandle, url, li) for i in self.list: li = control.item(label=i['title']) li.setArt({ 'icon': i['image'], 'poster': i['image'], 'thumb': i['image'], 'fanart': control.addonInfo('fanart') }) li.setInfo('image', {'title': i['title'], 'picturepath': i['url']}) url = i['url'] self.directory.append((url, li, False)) control.addItems(syshandle, self.directory) control.directory(syshandle)
def play_media(link, image): link = unquote_plus(link) li = control.item(path=link, iconImage=image, thumbnailImage=image) li.setArt({'thumb': image}) control.player().play(link, li)
def paper_index(link): menu = [] items = _paper_index(link) if items is None: return for i in items: li = control.item(label=i['title']) li.setArt({ 'poster': i['image'], 'thumb': i['image'], 'fanart': control.join(control.addonPath, 'resources', 'media', 'newspaper_fanart.png') }) li.setInfo('image', {'title': i['title'], 'picturepath': i['url']}) url = i['url'] menu.append((url, li, False)) control.content(syshandle, 'images') control.addItems(syshandle, menu) control.directory(syshandle)
def play(self, name, url=None, as_script=True, append_string=''): try: url = self.worker(name, url, append_string) if url is None: return title = control.infoLabel('listitem.title') if title == '': title = control.infoLabel('listitem.label') icon = control.infoLabel('listitem.icon') item = control.item(path=url, iconImage=icon, thumbnailImage=icon) try: item.setArt({'icon': icon}) except Exception: pass item.setInfo(type='Video', infoLabels={'title': title}) if as_script: control.player.play(url, item) else: directory.resolve(url, meta={'title': title}, icon=icon) except Exception: pass
def kids(self): self.data = [{ 'title': control.lang(30078), 'url': 'plugin://plugin.video.AliveGR/?action=kids_live', 'icon': iconname('kids_live') }, { 'title': control.lang(30074), 'url': '{0}?action={1}'.format(self.sysaddon, 'cartoon_collection'), 'icon': iconname('cartoon_collection') }, { 'title': control.lang(30075), 'url': '{0}?action={1}'.format(self.sysaddon, 'educational'), 'icon': iconname('educational') }, { 'title': control.lang(30076), 'url': '{0}?action={1}'.format(self.sysaddon, 'kids_songs'), 'icon': iconname('kids_songs') }] try: if control.condVisibility('System.HasAddon({0})'.format(sdik)): extended = [ dict((k, control.lang(v) if (k == 'title') else v) for k, v in item.items()) for item in extension.kids_indexer ] extended = [ dict((k, iconname(v) if (k == 'icon') else v) for k, v in item.items()) for item in extended ] self.data = [self.data[0]] + extended + self.data[1:] except: pass for item in self.data: li = control.item(label=item['title']) li.setArt({ 'icon': item['icon'], 'fanart': control.addonInfo('fanart') }) self.list.append((item['url'], li, True)) control.addItems(self.syshandle, self.list) control.directory(self.syshandle)
def miscellany(self): self.data = self.misc_list() self.list = [] for item in self.data: if control.setting('lang_split') == '0': if 'Greek' in control.infoLabel('System.Language'): li = control.item(label=item['title'].partition(' - ')[2]) elif 'English' in control.infoLabel('System.Language'): li = control.item(label=item['title'].partition(' - ')[0]) else: li = control.item(label=item['title']) elif control.setting('lang_split') == '1': li = control.item(label=item['title'].partition(' - ')[0]) elif control.setting('lang_split') == '2': li = control.item(label=item['title'].partition(' - ')[2]) else: li = control.item(label=item['title']) li.setArt({ 'icon': item['icon'], 'fanart': control.addonInfo('fanart') }) url = item['url'] isFolder = True self.list.append((url, li, isFolder)) control.addItems(syshandle, self.list) control.directory(syshandle)
def radio_player(): lista = ['Radio Melodia Toronto', 'Canadian Ethnic Web Radio'] # selection = control.selectDialog(lista) # if selection == 0: listitem = control.item(label=lista[0]) listitem.setInfo('music', {'title': lista[0], 'genre': 'Greek Music'}) listitem.setArt({'icon': control.addonmedia('RADIO_MELODIA_TORONTO.png'), 'thumb': control.addonmedia('RADIO_MELODIA_TORONTO.png')}) control.player().play(item=variables.Melodia_url, listitem=listitem)
def kids_songs(self): self.data = [ { 'title': u'Zouzounia TV kids songs - Παιδικά Τραγούδια από τα Ζουζούνια', 'url': 'plugin://plugin.video.zouzounia.tv/', 'icon': 'https://yt3.ggpht.com/-zhH35bOsqec/AAAAAAAAAAI/AAAAAAAAAAA/LxUO6o-ZHPc/s256-c-k-no-mo-rj-c0xffffff/photo.jpg' } , { 'title': u'Greek songs with lyrics No.1 - Ελληνικά παιδικά τραγούδια με στίχους No.1', 'url': '{0}/channel/UCUmGu9Ncu5NeaEjwpLXW0PQ/'.format(YT_ADDON), 'icon': 'https://yt3.ggpht.com/-MVbyrB7DJrY/AAAAAAAAAAI/AAAAAAAAAAA/WjLUCzyX3zI/s256-c-k-no-mo-rj-c0xffffff/photo.jpg' } , { 'title': u'Greek songs with lyrics No.2 - Ελληνικά παιδικά τραγούδια με στίχους No.2', 'url': '{0}/channel/UCyENiZwRYzfXzbwP-Mxk9oA/'.format(YT_ADDON), 'icon': 'https://yt3.ggpht.com/-Jdrq5I2r5Tc/AAAAAAAAAAI/AAAAAAAAAAA/z7IPqFS7jqA/s256-c-k-no-mo-rj-c0xffffff/photo.jpg' } , { 'title': u'Greek Karaoke - Ελληνικό Καραόκε', 'url': '{0}/channel/UCp_0VMwvn5LeJMhtreBFIcA/playlist/PLP25S0MkvCeRlD0w1GXbitRL6sbyMscVi/'.format(YT_ADDON), 'icon': 'https://i.ytimg.com/vi/Iz5P8xJel-U/mqdefault.jpg' } , { 'title': u'Karaoke for English Learning - Μαθαίνω Αγγλικά με καραόκε', 'url': '{0}/channel/UCp_0VMwvn5LeJMhtreBFIcA/playlist/PLP25S0MkvCeSL-M5Q0qG3Eszj0I1O98bT/'.format(YT_ADDON), 'icon': 'https://i.ytimg.com/vi/L2atYpQ7Zbg/mqdefault.jpg' } , { 'title': u'Learning Music for Kids - Μαθαίνω Μουσική, για παιδιά', 'url': '{0}/channel/UCp_0VMwvn5LeJMhtreBFIcA/playlist/PLP25S0MkvCeRr5VH-HylSX89MHXQ_KyS0/'.format(YT_ADDON), 'icon': 'https://i.ytimg.com/vi/w5tF5J_BNfI/mqdefault.jpg' } ] for item in self.data: if control.setting('lang_split') == '0': if 'Greek' in control.infoLabel('System.Language'): li = control.item(label=item['title'].partition(' - ')[2]) elif 'English' in control.infoLabel('System.Language'): li = control.item(label=item['title'].partition(' - ')[0]) else: li = control.item(label=item['title']) elif control.setting('lang_split') == '1': li = control.item(label=item['title'].partition(' - ')[0]) elif control.setting('lang_split') == '2': li = control.item(label=item['title'].partition(' - ')[2]) else: li = control.item(label=item['title']) li.setArt({'icon': item['icon'], 'fanart': control.addonInfo('fanart')}) self.list.append((item['url'], li, True)) control.addItems(syshandle, self.list) control.directory(syshandle)
def run(self, url, source): path = control.join(control.dataPath, 'temp') try: path = path.decode('utf-8') except Exception: pass control.deleteDir(control.join(path, ''), force=True) control.makeFile(control.dataPath) control.makeFile(path) if source == 'subtitlesgr': subtitle = subtitlesgr.subtitlesgr().download(path, url) elif source == 'xsubstv': subtitle = xsubstv.xsubstv().download(path, url) elif source == 'subzxyz': subtitle = subzxyz.subzxyz().download(path, url) elif source == 'tvsubtitlesgr': subtitle = None else: subtitle = None if subtitle is not None: item = control.item(label=subtitle) control.addItem(handle=syshandle, url=subtitle, listitem=item, isFolder=False) control.directory(syshandle)
def listing(self, url=None, return_list=False, query=None): if url: self.data = self.items_list(url) else: self.data = self.replies_viewer(query) if self.data is None: return self.list = action_updater(self.data) self.menu = cm_updater(self.list, url) if return_list: return self.menu else: if active_mode()[1] == 'pictures': for i in self.menu: li = control.item(label=i['title']) li.setArt({ 'icon': i['image'], 'poster': i['image'], 'thumb': i['image'], 'fanart': control.addonInfo('fanart') }) li.setInfo('image', { 'title': i['title'], 'picturepath': i['url'] }) url = i['url'] self.directory.append((url, li, False)) control.addItems(init.syshandle, self.directory) control.directory(init.syshandle) else: directory.add(self.menu, content='movies')
def constructor(channels): menu = [] for item in channels: li = control.item(label=item['title']) li.setInfo('video', {'title': item['title'], 'plot': item['plot']}) li.setArt({ 'fanart': item['fanart'], 'icon': item['icon'], 'thumb': item['icon'] }) li.setProperty('IsPlayable', 'true') _url = '{0}?action=play&url={1}'.format(sysaddon, item['url']) _isFolder = False menu.append((_url, li, _isFolder)) control.addItems(syshandle, menu) control.directory(syshandle)
def mag_index(self, url): number = int(client.request(url + '/pages')) pages = [] for page in list(range(1, number + 1)): string = str(page) title = control.lang(30026) + ' ' + string if len(string) == 2: image = url + '/thumbs' + '/thumb-' + string + '.jpg' link = url + '/page-' + string + '.jpg' else: image = url + '/thumbs' + '/thumb-' + '0' + string + '.jpg' link = url + '/page-' + '0' + string + '.jpg' data = {'title': title, 'image': image, 'url': link} pages.append(data) for p in pages: li = control.item(label=p['title'], iconImage=p['image'], thumbnailImage=p['image']) li.setArt({ 'poster': p['image'], 'thumb': p['image'], 'fanart': control.addonInfo('fanart') }) li.setInfo('image', { 'title': p['title'], 'picturepath': p['image'] }) path = p['url'] control.addItem(int(self.argv[1]), path, li, False) control.directory(int(self.argv[1]))
def mags_index(self): magazines = magazine_list()[0] for mag in magazines: li = control.item(label=mag['title'], iconImage=mag['image']) li.setArt({ 'poster': mag['image'], 'thumb': mag['image'], 'fanart': control.addonInfo('fanart') }) li.setInfo('image', { 'title': mag['title'], 'picturepath': mag['url'] }) url = mag['url'] control.addItem(int(self.argv[1]), url, li, True) control.directory(int(self.argv[1]))
def miscellany(self): if control.setting('debug') == 'true': self.data = cache.get(self.misc_list, int(control.setting('cache_period'))) else: self.data = cache.get(self.misc_list, 24) if self.data is None: log_debug('Misc channels list did not load successfully') return self.list = [] for item in self.data: if control.setting('lang_split') == '0': if 'Greek' in control.infoLabel('System.Language'): li = control.item(label=item['title'].partition(' - ')[2]) elif 'English' in control.infoLabel('System.Language'): li = control.item(label=item['title'].partition(' - ')[0]) else: li = control.item(label=item['title']) elif control.setting('lang_split') == '1': li = control.item(label=item['title'].partition(' - ')[0]) elif control.setting('lang_split') == '2': li = control.item(label=item['title'].partition(' - ')[2]) else: li = control.item(label=item['title']) li.setArt({ 'icon': item['icon'], 'fanart': control.addonInfo('fanart') }) url = item['url'] isFolder = True self.list.append((url, li, isFolder)) control.addItems(self.syshandle, self.list) control.directory(self.syshandle)
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 news(self): items = [{ 'title': control.lang(30230), 'icon': 'https://www.iconexperience.com/_img/v_collection_png/256x256/shadow/newspaper.png', 'url': '{0}?action=papers'.format(self.sysaddon), 'fanart': control.addonInfo('fanart') }, { 'title': control.lang(30118), 'icon': control.addonmedia(addonid=art_id, theme='networks', icon='ert_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.ert.gr/?action=episodes&url=http%3a%2f%2fwebtv.ert.gr%2fcategory%2fkatigories%2feidiseis%2f', 'fanart': control.addonmedia(addonid=art_id, theme='networks', icon='ert_fanart.jpg', media_subfolder=False) }, { 'title': control.lang(30119), 'icon': control.addonmedia(addonid=art_id, theme='networks', icon='ant1_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.antenna.gr/?action=news', 'fanart': control.addonmedia(addonid=art_id, theme='networks', icon='ant1_fanart.jpg', media_subfolder=False) }, { 'title': control.lang(30120), 'icon': control.addonmedia(addonid=art_id, theme='networks', icon='star_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.star.gr/?action=news', 'fanart': control.addonmedia(addonid=art_id, theme='networks', icon='star_fanart.jpg', media_subfolder=False) }, { 'title': control.lang(30122), 'icon': control.addonmedia(addonid=art_id, theme='networks', icon='alpha_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.alphatv.gr/?action=news', 'fanart': control.addonmedia(addonid=art_id, theme='networks', icon='alpha_fanart.jpg', media_subfolder=False) }, { 'title': control.lang(30121), 'icon': control.addonmedia(addonid=art_id, theme='networks', icon='skai_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.skai.gr/?action=news', 'fanart': control.addonmedia(addonid=art_id, theme='networks', icon='skai_fanart.jpg', media_subfolder=False) }, { 'title': 'Euronews', 'icon': control.addonmedia(addonid=art_id, theme='networks', icon='euronews_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.euronews.com/?action=videos&url=%22methodName%22%3a%22content.getThemeDetails%22%2c%22params%22%3a%7b%22tId%22%3a%221%22%7d', 'fanart': control.addonmedia(addonid=art_id, theme='networks', icon='euronews_fanart.jpg', media_subfolder=False) }] for item in items: list_item = control.item(label=item['title']) list_item.setArt({'icon': item['icon'], 'fanart': item['fanart']}) url = item['url'] isFolder = True self.list.append((url, list_item, isFolder)) control.addItems(self.syshandle, self.list) control.directory(self.syshandle)
def resolve(url, meta=None, icon=None, dash=False, manifest_type=None, inputstream_type='adaptive', headers=None, mimetype=None, resolved_mode=True, live=False): """ Prepares a resolved url into a listitem for playback :param url: Requires a string or unicode, append required urlencoded headers with pipe | :param meta: a dictionary with listitem keys: values :param icon: String :param dash: Boolean :param manifest_type: String :param inputstream_type: String 99.9% of the time it is adaptive :param headers: dictionary or urlencoded string :param mimetype: String :return: None """ from tulip.init import syshandle # Fail gracefully instead of making Kodi complain. if url is None: from kodi_six.xbmc import log log('URL was not provided, failure to resolve stream') return if not headers and '|' in url: url, sep, headers = url.rpartition('|') elif headers: if isinstance(headers, basestring): if headers.startswith('|'): headers = headers[1:] elif isinstance(headers, dict): headers = urlencode(headers) if not dash and headers: url = '|'.join([url, headers]) item = control.item(path=url) if icon is not None: item.setArt({'icon': icon, 'thumb': icon}) if meta is not None: item.setInfo(type='Video', infoLabels=meta) krypton_plus = int( control.infoLabel('System.AddonVersion(xbmc.python)').replace( '.', '')) >= 2250 try: isa_enabled = control.addon_details('inputstream.adaptive').get( 'enabled') except KeyError: isa_enabled = False if dash and krypton_plus and isa_enabled: if not manifest_type: manifest_type = 'mpd' if not mimetype: mimetype = 'application/xml+dash' item.setContentLookup(False) item.setMimeType('{0}'.format(mimetype)) item.setProperty('inputstreamaddon', 'inputstream.{}'.format(inputstream_type)) item.setProperty( 'inputstream.{0}.manifest_type'.format(inputstream_type), manifest_type) if headers: item.setProperty( "inputstream.{0}.stream_headers".format(inputstream_type), headers) elif mimetype: item.setContentLookup(False) item.setMimeType('{0}'.format(mimetype)) if dash and live: item.setProperty( 'inputstream.{}.manifest_update_parameter'.format( inputstream_type), '&start_seq=$START_NUMBER$') if resolved_mode: control.resolve(syshandle, True, item) else: control.player().play(url, item)
def networks(self): networks = [{ 'title': 'EPT', 'icon': control.addonmedia(addonid=art_id, theme='networks', icon='ert_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.ert.gr/', 'fanart': control.addonmedia(addonid=art_id, theme='networks', icon='ert_fanart.jpg', media_subfolder=False) }, { 'title': 'ANT1', 'icon': control.addonmedia(addonid=art_id, theme='networks', icon='ant1_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.antenna.gr/', 'fanart': control.addonmedia(addonid=art_id, theme='networks', icon='ant1_fanart.jpg', media_subfolder=False) }, { 'title': 'STAR', 'icon': control.addonmedia(addonid=art_id, theme='networks', icon='star_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.star.gr/', 'fanart': control.addonmedia(addonid=art_id, theme='networks', icon='star_fanart.jpg', media_subfolder=False) }, { 'title': 'ALPHA', 'icon': control.addonmedia(addonid=art_id, theme='networks', icon='alpha_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.alphatv.gr/', 'fanart': control.addonmedia(addonid=art_id, theme='networks', icon='alpha_fanart.jpg', media_subfolder=False) }, { 'title': 'SKAI', 'icon': control.addonmedia(addonid=art_id, theme='networks', icon='skai_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.skai.gr/', 'fanart': control.addonmedia(addonid=art_id, theme='networks', icon='skai_fanart.jpg', media_subfolder=False) }, { 'title': 'EURONEWS', 'icon': control.addonmedia(addonid=art_id, theme='networks', icon='euronews_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.euronews.com/', 'fanart': control.addonmedia(addonid=art_id, theme='networks', icon='euronews_fanart.jpg', media_subfolder=False) }, { 'title': 'NOVASPORTS', 'icon': control.addonmedia(addonid=art_id, theme='networks', icon='nova_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.novasports.gr/', 'fanart': control.addonmedia(addonid=art_id, theme='networks', icon='nova_fanart.jpg', media_subfolder=False) }, { 'title': 'GREEK VOICE', 'icon': control.addonmedia(addonid=art_id, theme='networks', icon='wzra48_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.greekvoice/', 'fanart': control.addonmedia(addonid=art_id, theme='networks', icon='wzra48_fanart.jpg', media_subfolder=False) }, { 'title': 'TORONTO CHANNELS', 'icon': control.addonmedia(addonid=art_id, theme='networks', icon='tc_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.Toronto-Channels/', 'fanart': control.addonmedia(addonid=art_id, theme='networks', icon='tc_fanart.jpg', media_subfolder=False) }, { 'title': 'MONTREAL GREEK TV', 'icon': control.addonmedia(addonid=art_id, theme='networks', icon='mg_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.montreal.greek-tv/', 'fanart': control.addonmedia(addonid=art_id, theme='networks', icon='mgtv_fanart.jpg', media_subfolder=False) }, { 'title': 'FAROS ON AIR', 'icon': control.addonmedia(addonid=art_id, theme='networks', icon='faros_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.faros.on-air/', 'fanart': control.addonmedia(addonid=art_id, theme='networks', icon='faros_fanart.jpg', media_subfolder=False) }] for network in networks: list_item = control.item(label=network['title']) list_item.setArt({ 'icon': network['icon'], 'fanart': network['fanart'] }) url = network['url'] self.list.append((url, list_item, True)) control.addItems(self.syshandle, self.list) control.directory(self.syshandle)
def run(self, url, source): log_debug('Source selected: {0}'.format(source)) path = control.join(control.dataPath, 'temp') try: path = path.decode('utf-8') except Exception: pass control.deleteDir(control.join(path, ''), force=True) control.makeFile(control.dataPath) control.makeFile(path) if control.setting('keep_subs') == 'true' or control.setting( 'keep_zips') == 'true': if not control.get_info_label('ListItem.Path').startswith( 'plugin://') and control.setting('destination') == '0': output_path = control.get_info_label('Container.FolderPath') elif control.setting('output_folder').startswith('special://'): output_path = control.transPath( control.setting('output_folder')) else: output_path = control.setting('output_folder') if not exists(output_path): control.makeFile(output_path) if source == 'subtitlesgr': subtitle = subtitlesgr.Subtitlesgr().download(path, url) elif source == 'xsubstv': subtitle = xsubstv.Xsubstv().download(path, url) elif source == 'podnapisi': subtitle = podnapisi.Podnapisi().download(path, url) elif source == 'vipsubs': subtitle = vipsubs.Vipsubs().download(path, url) else: subtitle = None if subtitle is not None: if control.setting('keep_subs') == 'true': # noinspection PyUnboundLocalVariable try: if control.setting('destination') in ['0', '2']: if control.infoLabel('{0}.Title'.format( infolabel_prefix)).startswith('plugin://'): copy( subtitle, control.join(output_path, os_split(subtitle)[1])) log_debug( 'Item currently selected is not a local file, cannot save subtitle next to it' ) else: output_filename = control.join( output_path, ''.join([ splitext( control.infoLabel('ListItem.FileName')) [0], splitext(os_split(subtitle)[1])[1] ])) if exists(output_filename): yesno = control.yesnoDialog( control.lang(30015)) if yesno: copy(subtitle, output_filename) else: copy(subtitle, output_filename) if control.setting('destination') == '2': if control.setting('output_folder').startswith( 'special://'): output_path = control.transPath( control.setting('output_folder')) else: output_path = control.setting( 'output_folder') copy( subtitle, control.join(output_path, os_split(subtitle)[1])) else: copy(subtitle, control.join(output_path, os_split(subtitle)[1])) control.infoDialog(control.lang(30008)) except Exception: control.infoDialog(control.lang(30013)) item = control.item(label=subtitle) control.addItem(handle=self.syshandle, url=subtitle, listitem=item, isFolder=False) control.directory(self.syshandle)
def add(items, cacheToDisc=True, content=None, mediatype=None, infotype='video', argv=None, as_playlist=False, pd_heading=None, pd_message='', clear_first=True, progress=False, category=None): if argv is None: from tulip.init import sysaddon, syshandle else: sysaddon = argv[0] syshandle = int(argv[1]) if items is None or len(items) == 0: return # sysicon = control.join(control.addonInfo('path'), 'resources', 'media') sysimage = control.addonInfo('icon') sysfanart = control.addonInfo('fanart') if progress: pd = control.progressDialogGB pd.create(heading=control.name() if not pd_heading else pd_heading, message=pd_message) else: pd = None if as_playlist and clear_first: control.playlist(1 if infotype == 'video' else 0).clear() meta_tags = [ 'count', 'size', 'date', 'genre', 'country', 'year', 'episode', 'season', 'sortepisode', 'sortseason', 'episodeguide', 'showlink', 'top250', 'setid', 'tracknumber', 'rating', 'userrating', 'watched', 'playcount', 'overlay', 'cast', 'castandrole', 'director', 'mpaa', 'plot', 'plotoutline', 'title', 'originaltitle', 'sorttitle', 'duration', 'studio', 'tagline', 'writer', 'tvshowtitle', 'premiered', 'status', 'set', 'gameclient', 'setoverview', 'tag', 'imdbnumber', 'code', 'aired', 'credits', 'lastplayed', 'album', 'artist', 'votes', 'path', 'trailer', 'dateadded', 'mediatype', 'dbid', 'tracknumber', 'discnumber', 'lyrics', 'listeners', 'musicbrainztrackid', 'comment', 'picturepath', 'platform', 'genres', 'publisher', 'developer', 'overview' ] for c, i in list(enumerate(items)): try: if progress: p = control.per_cent(c, len(items)) pd.update(p) try: label = control.lang(i['title']).encode('utf-8') except Exception: label = i['title'] if 'label' in i and not i['label'] == '0': label = i['label'] if 'image' in i and not i['image'] == '0': image = i['image'] elif 'poster' in i and not i['poster'] == '0': image = i['poster'] elif 'icon' in i and not i['icon'] == '0': image = control.addonmedia(i['icon']) else: image = sysimage if 'banner' in i and not i['banner'] == '0': banner = i['banner'] elif 'fanart' in i and not i['fanart'] == '0': banner = i['fanart'] else: banner = image fanart = i['fanart'] if 'fanart' in i and not i[ 'fanart'] == '0' else sysfanart isFolder = False if 'isFolder' in i and not i[ 'isFolder'] == '0' else True try: is_play_boolean = i.get('isPlayable') in [ 'True', 'true', '1', 'yes', 'Yes' ] except Exception: is_play_boolean = False isPlayable = True if not isFolder and 'isPlayable' not in i else is_play_boolean if isPlayable: isFolder = False try: action = '{0}?action={1}'.format(sysaddon, i['action']) except KeyError: return try: url = 'url={0}'.format(quote_plus(i['url'])) except Exception: url = None try: title = 'title={0}'.format(quote_plus(i['title'])) except KeyError: try: title = 'title={0}'.format( quote_plus(i['title'].encode('utf-8'))) except KeyError: title = None except Exception: title = None try: icon = 'image={0}'.format(quote_plus(i['image'])) except KeyError: try: icon = 'image={0}'.format( quote_plus(i['image'].encode('utf-8'))) except KeyError: icon = None except Exception: icon = None try: name = 'name={0}'.format(quote_plus(i['name'])) except KeyError: try: name = 'name={0}'.format( quote_plus(i['name'].encode('utf-8'))) except KeyError: name = None except Exception: name = None try: year = 'year={0}'.format(quote_plus(i['year'])) except Exception: year = None try: plot = 'plot={0}'.format(quote_plus(i['plot'])) except KeyError: try: plot = 'plot={0}'.format( quote_plus(i['plot'].encode('utf-8'))) except KeyError: plot = None except Exception: plot = None try: genre = 'genre={0}'.format(quote_plus(i['genre'])) except KeyError: try: genre = 'genre={0}'.format( quote_plus(i['genre'].encode('utf-8'))) except KeyError: genre = None except Exception: genre = None try: dash = 'dash={0}'.format(quote_plus(i['dash'])) except Exception: dash = None try: query = 'query={0}'.format(quote_plus(i['query'])) except Exception: query = None parts = [ foo for foo in [ action, url, title, icon, name, year, plot, genre, dash, query ] if foo ] uri = '&'.join(parts) cm = [] menus = i['cm'] if 'cm' in i else [] for menu in menus: try: try: tmenu = control.lang(menu['title']).encode('utf-8') except Exception: tmenu = menu['title'] try: qmenu = urlencode(menu['query']) except Exception: qmenu = urlencode( dict((k, v.encode('utf-8')) for k, v in menu['query'].items())) cm.append( (tmenu, 'RunPlugin({0}?{1})'.format(sysaddon, qmenu))) except Exception: pass meta = dict((k, v) for k, v in iteritems(i) if k in meta_tags and (not v == '0' or v is None)) if mediatype is not None: meta['mediatype'] = mediatype item = control.item(label=label) item.setArt({ 'icon': image, 'thumb': image, 'poster': image, 'tvshow.poster': image, 'season.poster': image, 'banner': banner, 'tvshow.banner': banner, 'season.banner': banner, 'fanart': fanart }) item.addContextMenuItems(cm) item.setInfo( type=infotype if 'infotype' not in i else i['infotype'], infoLabels=meta) if isPlayable: if not i['action'] == 'pvr_client': item.setProperty('IsPlayable', 'true') else: item.setProperty('IsPlayable', 'false') if not i['action'] == 'pvr_client': if 'streaminfo' not in i and infotype == 'video': item.addStreamInfo(infotype, {'codec': 'h264'}) else: item.addStreamInfo(infotype, i.get('streaminfo')) if as_playlist and isPlayable: control.playlist(1 if infotype == 'video' else 0).add( url=uri, listitem=item, index=c) else: control.addItem(handle=syshandle, url=uri, listitem=item, isFolder=isFolder, totalItems=len(items)) except Exception as reason: log('Directory not added, reason of failure: ' + repr(reason)) if progress: pd.update(100) pd.close() if as_playlist: control.openPlaylist(1 if infotype == 'video' else 0) return try: i = items[0] if i['next'] == '': raise Exception() url = '{0}?action={1}&url={2}'.format(sysaddon, i['nextaction'], quote_plus(i['next'])) icon = i['nexticon'] if 'nexticon' in i else control.addonmedia( 'next.png') fanart = i['nextfanart'] if 'nextfanart' in i else sysfanart try: label = control.lang(i['nextlabel']).encode('utf-8') except Exception: label = 'Next' item = control.item(label=label) item.setArt({ 'icon': icon, 'thumb': icon, 'poster': icon, 'tvshow.poster': icon, 'season.poster': icon, 'banner': icon, 'tvshow.banner': icon, 'season.banner': icon, 'fanart': fanart }) control.addItem(handle=syshandle, url=url, listitem=item, isFolder=True, totalItems=len(items)) except Exception: pass if content is not None: control.content(syshandle, content) if category is not None: control.setcategory(syshandle, category) control.directory(syshandle, cacheToDisc=cacheToDisc)
def run(self, query=None): if 'Greek' not in str(self.langs).split(','): control.directory(self.syshandle) control.infoDialog(control.lang(30002)) return dup_removal = False if not query: title = match_title = control.infoLabel( '{0}.Title'.format(infolabel_prefix)) with concurrent_futures.ThreadPoolExecutor(5) as executor: if re.search(r'[^\x00-\x7F]+', title) is not None: title = control.infoLabel( '{0}.OriginalTitle'.format(infolabel_prefix)) title = unicodedata.normalize('NFKD', title).encode('ascii', 'ignore') title = py3_dec(title) 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) season_episode_query_nospace = '{0} S{1}E{2}'.format( tvshowtitle, season, episode) threads = [ executor.submit(self.subtitlesgr, season_episode_query_nospace), executor.submit(self.xsubstv, season_episode_query), executor.submit(self.podnapisi, season_episode_query), executor.submit(self.vipsubs, season_episode_query) ] dup_removal = True log_debug('Dual query used for subtitles search: ' + title_query + ' / ' + season_episode_query) if control.setting('queries') == 'true': threads.extend([ executor.submit(self.subtitlesgr, title_query), executor.submit(self.vipsubs, title_query), executor.submit(self.podnapisi, title_query), executor.submit(self.subtitlesgr, season_episode_query) ]) elif year != '': # movie query = '{0} ({1})'.format(title, year) threads = [ executor.submit(self.subtitlesgr, query), executor.submit(self.xsubstv, query), executor.submit(self.vipsubs, query), executor.submit(self.podnapisi, query) ] else: # file query, year = control.cleanmovietitle(title) if year != '': query = '{0} ({1})'.format(query, year) threads = [ executor.submit(self.subtitlesgr, query), executor.submit(self.xsubstv, query), executor.submit(self.vipsubs, query), executor.submit(self.podnapisi, query) ] for future in concurrent_futures.as_completed(threads): item = future.result() if not item: continue self.list.extend(item) if not dup_removal: log_debug('Query used for subtitles search: ' + query) self.query = query self.query = py3_dec(self.query) else: # Manual query with concurrent_futures.ThreadPoolExecutor(5) as executor: query = match_title = py3_dec(query) threads = [ executor.submit(self.subtitlesgr, query), executor.submit(self.xsubstv, query), executor.submit(self.vipsubs, query), executor.submit(self.podnapisi, query) ] for future in concurrent_futures.as_completed(threads): item = future.result() if not item: continue self.list.extend(item) if len(self.list) == 0: control.directory(self.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'] == 'subtitlesgr'] f += [i for i in self.list if i['source'] == 'podnapisi'] f += [i for i in self.list if i['source'] == 'vipsubs'] 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'] == 'xsubstv': i['name'] = u'[xsubstv] {0}'.format(i['name']) elif i['source'] == 'podnapisi': i['name'] = u'[podnapisi] {0}'.format(i['name']) elif i['source'] == 'vipsubs': i['name'] = u'[vipsubs] {0}'.format(i['name']) except Exception: pass if control.setting('sorting') == '1': key = 'source' elif control.setting('sorting') == '2': key = 'downloads' elif control.setting('sorting') == '3': key = 'rating' else: key = 'title' self.list = sorted(self.list, key=lambda k: k[key].lower(), reverse=control.setting('sorting') in ['1', '2', '3']) for i in self.list: u = {'action': 'download', 'url': i['url'], 'source': i['source']} u = '{0}?{1}'.format(self.sysaddon, urlencode(u)) item = control.item(label='Greek', label2=i['name']) item.setArt({'icon': str(i['rating'])[:1], 'thumb': 'el'}) if ratio( splitext(i['title'].lower())[0], splitext(match_title)[0]) >= int( control.setting('sync_probability')): item.setProperty('sync', 'true') else: item.setProperty('sync', 'false') item.setProperty('hearing_imp', 'false') control.addItem(handle=self.syshandle, url=u, listitem=item, isFolder=False) control.directory(self.syshandle)
def external_links(self): self.data = [{ 'title': control.lang(30030), 'icon': control.addonInfo('icon'), 'url': 'https://farosonair.com/' }, { 'title': control.lang(30031), 'icon': control.addonInfo('icon'), 'url': 'https://farosonair.com/category/farosnews/' }, { 'title': control.lang(30028), 'icon': 'facebook.png', 'url': 'https://www.facebook.com/farosonair' }, { 'title': control.lang(30029), 'icon': 'instagram.png', 'url': 'https://www.instagram.com/farosonair16/' }, { 'title': control.lang(30026), 'icon': 'twitter.png', 'url': 'https://twitter.com/faros_on_air' }, { 'title': control.lang(30027), 'icon': 'youtube_sub.png', 'url': 'https://www.youtube.com/channel/UCfU04d4DbqpyotwfgxRS6EQ?sub_confirmation=1' }] for i in self.data: i.update({'action': 'open_website'}) if control.setting('external_action') == 'false': links = [i['url'] for i in self.data] titles = [i['title'] for i in self.data] choice = control.selectDialog(titles) if choice >= 0: if control.condVisibility('System.Platform.Android'): from resources.lib.helpers import android_activity android_activity(links[choice]) else: import webbrowser webbrowser.open(links[choice]) else: pass else: for i in self.data: if i['icon'] != control.addonInfo('icon'): image = control.join(control.addonPath, 'resources', 'media', i['icon']) else: image = control.addonInfo('icon') li = control.item(label=i['title']) li.setArt({ 'poster': image, 'thumb': image, 'fanart': control.addonInfo('fanart') }) li.setInfo('video', {'title': i['title']}) url = '{0}?action={1}&url={2}'.format(sysaddon, i['action'], i['url']) self.list.append((url, li, False)) control.addItems(syshandle, self.list) control.directory(syshandle)
def cartoon_collection(self): self.data = [{ 'title': u'Classical Films - Κλασσικά Κινηματογραφημένα', 'url': '{0}/channel/UCsKQX1G7XQO2a5nD9nrse-Q/playlist/PLF0A5359586D57FE8/' .format(YT_ADDON), 'icon': 'https://i.ytimg.com/vi/X9RxumkELfE/mqdefault.jpg' }, { 'title': u'Mythology - Μυθολογία', 'url': '{0}/channel/UCsKQX1G7XQO2a5nD9nrse-Q/playlist/PL3E1C926284F12F32/' .format(YT_ADDON), 'icon': 'https://i.ytimg.com/vi/kpd-Z_VK6Jc/mqdefault.jpg' }, { 'title': u'Aesop\'s Fables - Αισώπου Μύθοι', 'url': '{0}/channel/UCsKQX1G7XQO2a5nD9nrse-Q/playlist/PL4FF9F773D3596E60/' .format(YT_ADDON), 'icon': 'https://i.ytimg.com/vi/Gkr-pV_gY48/mqdefault.jpg' }, { 'title': u'Greek Fairy Tales - Ελληνικά Παραμύθια', 'url': '{0}/channel/UC9VmWb5Wd5sc4E4k1CevEug/'.format(YT_ADDON), 'icon': 'https://yt3.ggpht.com/-n8KoGQ6U_zc/AAAAAAAAAAI/AAAAAAAAAAA/SoUWvy5-Tb8/s256-c-k-no-mo-rj-c0xffffff/photo.jpg' }, { 'title': u'Fairy Tales & Songs - Παραμύθια και Τραγούδια', 'url': '{0}/channel/UCClAFTnbGditvz9_7_7eumw/playlists/'.format(YT_ADDON), 'icon': 'https://yt3.ggpht.com/-mBPhzUcDIHM/AAAAAAAAAAI/AAAAAAAAAAA/pNQi44zsLq8/s256-c-k-no-mo-rj-c0xffffff/photo.jpg' }, { 'title': u'Collection Miscellaneous - Συλλογή Διάφορα', 'url': '{0}/channel/UCsKQX1G7XQO2a5nD9nrse-Q/playlist/PL4075DA390F6E82B1/' .format(YT_ADDON), 'icon': 'https://i.ytimg.com/vi/MPtZ_VHNg34/mqdefault.jpg' }] for i in self.data: i['url'] = '?'.join( [i['url'], 'addon_id={}'.format(control.addonInfo('id'))]) additional = { 'title': u'Various full length movies - Διάφορες ταινίες πλήρους μήκους', 'url': '{0}?action={1}'.format(sysaddon, 'cartoon_various'), 'icon': iconname('kids') } if control.setting('show_alt_vod') == 'true': self.data.insert(0, additional) for item in self.data: if control.setting('lang_split') == '0': if 'Greek' in control.infoLabel('System.Language'): li = control.item(label=item['title'].partition(' - ')[2]) elif 'English' in control.infoLabel('System.Language'): li = control.item(label=item['title'].partition(' - ')[0]) else: li = control.item(label=item['title']) elif control.setting('lang_split') == '1': li = control.item(label=item['title'].partition(' - ')[0]) elif control.setting('lang_split') == '2': li = control.item(label=item['title'].partition(' - ')[2]) else: li = control.item(label=item['title']) li.setArt({ 'icon': item['icon'], 'fanart': control.addonInfo('fanart') }) self.list.append((item['url'], li, True)) control.addItems(syshandle, self.list) control.directory(syshandle)
def educational(self): self.data = [{ 'title': u'Learn about animals - Μάθε για τα ζώα', 'url': '{0}/channel/UCsKQX1G7XQO2a5nD9nrse-Q/playlist/PL7Adbo89X3LRboPyGr30sIRMnc20C77ui/' .format(YT_ADDON), 'icon': 'https://i.ytimg.com/vi/_fDdVYJA9Vk/mqdefault.jpg' }, { 'title': u'Secondary school education - Εκπαίδευση Δημοτικού Σχολείου', 'url': '{0}/channel/UCsKQX1G7XQO2a5nD9nrse-Q/playlist/PL7Adbo89X3LQvxn7RyUySvQy6C6hTUTXf/' .format(YT_ADDON), 'icon': 'https://i.ytimg.com/vi/isxjo7M2h74/mqdefault.jpg' }, { 'title': u'Sexual Education for children - Σεξουαλική Αγωγή για παιδιά', 'url': '{0}/channel/UCsKQX1G7XQO2a5nD9nrse-Q/playlist/PL7Adbo89X3LRy-LRQEeRdT_kf5iFdofsu/' .format(YT_ADDON), 'icon': 'https://i.ytimg.com/vi/l9gN1F6S3bc/mqdefault.jpg' }, { 'title': u'World\'s Seven Ancient Miracles - Τα Επτά Θαύματα του Αρχαίου Κόσμου', 'url': '{0}/channel/UCp_0VMwvn5LeJMhtreBFIcA/playlist/PLP25S0MkvCeThKG7GK1k2DRgB5im-vPHc/' .format(YT_ADDON), 'icon': 'https://i.ytimg.com/vi/5nEDQ_jYJIo/mqdefault.jpg' }, { 'title': u'The land of Knowledge - Η Χώρα των Γνώσεων', 'url': '{0}/channel/UCp_0VMwvn5LeJMhtreBFIcA/playlist/PLP25S0MkvCeS-ZVlk0vgNdx5igsFvYN8s/' .format(YT_ADDON), 'icon': 'https://i.ytimg.com/vi/K-Ba9l2uDDk/mqdefault.jpg' }, { 'title': u'Ancient Egypt - Αρχαία Αίγυπτος', 'url': '{0}/channel/UCp_0VMwvn5LeJMhtreBFIcA/playlist/PLP25S0MkvCeTrRcdIHjtziNEkqPqalUOa/' .format(YT_ADDON), 'icon': 'https://i.ytimg.com/vi/pV8EMy8gaXI/mqdefault.jpg' }, { 'title': u'Explorers & Seafarers - Εξερευνητές και Θαλασσοπόροι', 'url': '{0}/channel/UCp_0VMwvn5LeJMhtreBFIcA/playlist/PLP25S0MkvCeQRBb7ayyynWgYEUbkQKPpJ/' .format(YT_ADDON), 'icon': 'https://i.ytimg.com/vi/SPdnnVNZgwc/mqdefault.jpg' }, { 'title': u'Mini Encyclopaedia - Μικρή Εγκυκλοπαίδεια', 'url': '{0}/channel/UCp_0VMwvn5LeJMhtreBFIcA/playlist/PLP25S0MkvCeTLMi1bFqLC_cn5ZAtqSvlV/' .format(YT_ADDON), 'icon': 'https://i.ytimg.com/vi/o31_SNQFYhc/mqdefault.jpg' }, { 'title': u'Miscellaneous Documentaties - Διάφορα Ντοκυμαντέρ', 'url': '{0}/channel/UCp_0VMwvn5LeJMhtreBFIcA/playlist/PLP25S0MkvCeRY94Yga82ZYsPJ9Xbe3OiZ/' .format(YT_ADDON), 'icon': 'https://i.ytimg.com/vi/Vf_o_Q5ZQRg/mqdefault.jpg' }, { 'title': u'Learn Ancient Greek - Μάθετε Αρχαία Ελληνικά', 'url': '{0}/channel/UC5quWsvOBNUaR-Duv3K-JFA/playlist/PLxqCshQO3A1HnlHwxda3wX_kzY-C0gpZq/' .format(YT_ADDON), 'icon': 'https://i.ytimg.com/vi/st01jb_Xb7g/mqdefault.jpg' }, { 'title': u'Drawings - Ζωγραφιές', 'url': '{0}/channel/UC5quWsvOBNUaR-Duv3K-JFA/playlist/PLxqCshQO3A1FmjzGXbfIjTSXcysLfPfKM/' .format(YT_ADDON), 'icon': 'https://i.ytimg.com/vi/GdiLSXePno8/mqdefault.jpg' }] for item in self.data: if control.setting('lang_split') == '0': if 'Greek' in control.infoLabel('System.Language'): li = control.item(label=item['title'].partition(' - ')[2]) elif 'English' in control.infoLabel('System.Language'): li = control.item(label=item['title'].partition(' - ')[0]) else: li = control.item(label=item['title']) elif control.setting('lang_split') == '1': li = control.item(label=item['title'].partition(' - ')[0]) elif control.setting('lang_split') == '2': li = control.item(label=item['title'].partition(' - ')[2]) else: li = control.item(label=item['title']) li.setArt({ 'icon': item['icon'], 'fanart': control.addonInfo('fanart') }) self.list.append((item['url'], li, True)) control.addItems(syshandle, self.list) control.directory(syshandle)
def sports_news(self): self.data = [{ 'title': 'EPT Sports', 'icon': control.addonmedia(addonid=art_id, theme='networks', icon='ert_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.ert.gr/?action=episodes&url=http%3a%2f%2fwebtv.ert.gr%2fcategory%2fkatigories%2fathlitika%2f', 'fanart': control.addonmedia(addonid=art_id, theme='networks', icon='ert_fanart.jpg', media_subfolder=False) }, { 'title': 'Skai Sports', 'icon': control.addonmedia(addonid=art_id, theme='networks', icon='skai_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.skai.gr/?action=sports', 'fanart': control.addonmedia(addonid=art_id, theme='networks', icon='skai_fanart.jpg', media_subfolder=False) }, { 'title': 'Euronews Sports', 'icon': control.addonmedia(addonid=art_id, theme='networks', icon='euronews_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.euronews.com/?action=videos&url=%22methodName%22%3a%22content.getThemeDetails%22%2c%22params%22%3a%7b%22tId%22%3a%228%22%7d', 'fanart': control.addonmedia(addonid=art_id, theme='networks', icon='euronews_fanart.jpg', media_subfolder=False) }, { 'title': 'NovaSports', 'icon': control.addonmedia(addonid=art_id, theme='networks', icon='nova_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.novasports.gr/', 'fanart': control.addonmedia(addonid=art_id, theme='networks', icon='nova_fanart.jpg', media_subfolder=False) }] for item in self.data: list_item = control.item(label=item['title']) list_item.setArt({'icon': item['icon'], 'fanart': item['fanart']}) _url_ = item['url'] isFolder = True self.list.append((_url_, list_item, isFolder)) control.addItems(self.syshandle, self.list) control.directory(self.syshandle)
def news(self): items = [{ 'title': control.lang(30230), 'icon': 'https://www.iconexperience.com/_img/v_collection_png/256x256/shadow/newspaper.png', 'url': '{0}?action=papers'.format(sysaddon), 'fanart': control.addonInfo('fanart') }, { 'title': control.lang(30118), 'icon': control.addonmedia(addonid=ART_ID, theme='networks', icon='ert_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.ert.gr/?action=categories&url=https%3A%2F%2Fwww.ertflix.gr%2Fshow%2Fnews', 'fanart': control.addonmedia(addonid=ART_ID, theme='networks', icon='ert_fanart.jpg', media_subfolder=False) }, { 'title': control.lang(30119), 'icon': control.addonmedia(addonid=ART_ID, theme='networks', icon='ant1_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.antenna.gr/?action=videos&url=https%3a%2f%2fwww.ant1news.gr%2fvideos', 'fanart': control.addonmedia(addonid=ART_ID, theme='networks', icon='ant1_fanart.jpg', media_subfolder=False) }, { 'title': control.lang(30120), 'icon': control.addonmedia(addonid=ART_ID, theme='networks', icon='star_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.star.gr/?action=news', 'fanart': control.addonmedia(addonid=ART_ID, theme='networks', icon='star_fanart.jpg', media_subfolder=False) }, { 'title': control.lang(30122), 'icon': control.addonmedia(addonid=ART_ID, theme='networks', icon='alpha_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.alphatv.gr/?action=news&url=https%3a%2f%2fwww.alphatv.gr%2fnews', 'fanart': control.addonmedia(addonid=ART_ID, theme='networks', icon='alpha_fanart.jpg', media_subfolder=False) }, { 'title': control.lang(30121), 'icon': control.addonmedia(addonid=ART_ID, theme='networks', icon='skai_icon.png', media_subfolder=False), 'url': 'plugin://plugin.video.skai.gr/?action=news', 'fanart': control.addonmedia(addonid=ART_ID, theme='networks', icon='skai_fanart.jpg', media_subfolder=False) }] for item in items: list_item = control.item(label=item['title']) list_item.setArt({'icon': item['icon'], 'fanart': item['fanart']}) url = item['url'] isFolder = True if 'papers' not in item['url'] else False self.list.append((url, list_item, isFolder)) control.addItems(syshandle, self.list) control.directory(syshandle)
def run(self, url, source): log_debug('Source selected: {0}'.format(source)) path = control.join(control.dataPath, 'temp') try: path = path.decode('utf-8') except Exception: pass control.deleteDir(control.join(path, ''), force=True) control.makeFile(control.dataPath) control.makeFile(path) if control.setting('keep_subs') == 'true' or control.setting( 'keep_zips') == 'true': if control.setting('output_folder').startswith('special://'): output_path = control.transPath( control.setting('output_folder')) else: output_path = control.setting('output_folder') control.makeFile(output_path) if source == 'subtitlesgr': subtitle = subtitlesgr.Subtitlesgr().download(path, url) elif source == 'xsubstv': subtitle = xsubstv.Xsubstv().download(path, url) elif source == 'podnapisi': subtitle = podnapisi.Podnapisi().download(path, url) elif source == 'vipsubs': subtitle = vipsubs.Vipsubs().download(path, url) else: subtitle = None if subtitle is not None: if control.setting('keep_subs') == 'true': # noinspection PyUnboundLocalVariable copy(subtitle, control.join(output_path, os_split(subtitle)[1])) control.infoDialog(control.lang(30008)) item = control.item(label=subtitle) control.addItem(handle=self.syshandle, url=subtitle, listitem=item, isFolder=False) control.directory(self.syshandle)
def run(self, query=None): if not 'Greek' in str(langs).split(','): control.directory(syshandle) control.infoDialog(control.lang(32002).encode('utf-8')) return if query is None: title = control.infoLabel('VideoPlayer.Title') if re.search(r'[^\x00-\x7F]+', title) is not None: title = control.infoLabel('VideoPlayer.OriginalTitle') year = control.infoLabel('VideoPlayer.Year') tvshowtitle = control.infoLabel('VideoPlayer.TVshowtitle') season = control.infoLabel('VideoPlayer.Season') episode = control.infoLabel('VideoPlayer.Episode') if 's' in episode.lower(): season, episode = '0', episode[-1:] if not tvshowtitle == '': # episode query = '%s S%02dE%02d' % (tvshowtitle, int(season), int(episode)) elif not year == '': # movie query = '%s (%s)' % (title, year) else: # file query, year = getCleanMovieTitle(title) if not year == '': query = '%s (%s)' % (query, year) self.query = query threads = [] threads.append(workers.Thread(self.xsubstv)) threads.append(workers.Thread(self.subzxyz)) threads.append(workers.Thread(self.subtitlesgr)) [i.start() for i in threads] for i in range(0, 10 * 2): try: is_alive = [x.is_alive() for x in threads] if all(x == False for x in is_alive): break if control.aborted is True: break control.sleep(500) except: pass if len(self.list) == 0: control.directory(syshandle) return f = [] 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 for i in self.list: try: if i['source'] == 'subzxyz': i['name'] = '[subzxyz] %s' % i['name'] elif i['source'] == 'xsubstv': i['name'] = '[xsubstv] %s' % i['name'] except: pass for i in self.list: try: name, url, source, rating = i['name'], i['url'], i[ 'source'], i['rating'] u = {'action': 'download', 'url': url, 'source': source} u = '%s?%s' % (sysaddon, urllib.urlencode(u)) item = control.item(label='Greek', label2=name, iconImage=str(rating), thumbnailImage='el') item.setProperty('sync', 'false') item.setProperty('hearing_imp', 'false') control.addItem(handle=syshandle, url=u, listitem=item, isFolder=False) except: pass control.directory(syshandle)
def main_menu(): menu = [] menu_items = [ { 'title': control.lang(30001), 'icon': control.addonmedia(addonid='resource.images.greekvoice.artwork', icon='television.png'), 'url': '{0}?action={1}'.format(sysaddon, 'live'), 'fanart': control.addonmedia(addonid='resource.images.greekvoice.artwork', icon='GV_TV2_fanart.jpg') }, { 'title': control.lang(30002), 'icon': control.addonmedia(addonid='resource.images.greekvoice.artwork', icon='radio.png'), 'url': '{0}?action={1}'.format(sysaddon, 'radio'), 'fanart': control.addonmedia(addonid='resource.images.greekvoice.artwork', icon='TILEMOUSIKI_fanart.jpg') }, { 'title': control.lang(30014), 'icon': control.addonmedia(addonid='resource.images.greekvoice.artwork', icon='GV_YT_icon.png'), 'url': 'plugin://plugin.video.youtube/channel/{0}/?addon_id={1}'.format( channel_id, control.addonInfo('id')), 'fanart': control.addonmedia(addonid='resource.images.greekvoice.artwork', icon='GV_TV2_fanart.jpg') } # , # { # 'title': control.lang(30004), # 'icon': control.addonmedia(addonid='resource.images.greekvoice.artwork', icon='settings.png'), # 'url': '{0}?action={1}'.format(sysaddon, 'settings'), # 'fanart': control.addonInfo('fanart') # } ] for item in menu_items: li = control.item(label=item['title']) li.setInfo('video', {'title': item['title']}) li.setArt({ 'fanart': item['fanart'], 'icon': item['icon'], 'thumb': item['icon'] }) _url = item['url'] if item['url'].endswith('settings'): _isFolder = False else: _isFolder = True menu.append((_url, li, _isFolder)) control.addItems(syshandle, menu) control.directory(syshandle)