コード例 #1
0
    def install():

        if control.conditional_visibility('System.Platform.Linux') and not (
                path.exists(control.transPath(xbmc_path))
                or path.exists(control.transPath(home_path))):

            control.okDialog(heading='AliveGR', line1=control.lang(30323))

            return False

        elif path.exists(control.transPath(xbmc_path)) or path.exists(
                control.transPath(home_path)):

            return True

        elif control.kodi_version() >= 18.0 and not control.condVisibility(
                'System.HasAddon(pvr.iptvsimple)'):

            control.execute('InstallAddon(pvr.iptvsimple)')

            return True

        elif control.condVisibility('System.HasAddon(pvr.iptvsimple)'):

            return 'enabled'

        else:

            return False
コード例 #2
0
    def techno_choices(self, url):

        self.list = cache.get(youtube.youtube(key=thgiliwt(api_keys['api_key']), replace_url=replace_url).playlist, 12, url)

        if self.list is None:

            return

        for i in self.list:
            i['label'] = i.pop('title')
            # process stupid descriptions/comments put up by uploaders on labels
            i['label'] = re.sub(r'PREMIERE ?:|\(full version\)\.mp4|\(?(?:Un)?Official.*\)? ?(?:HD)?|\[?HD (?:108|72)0p\]?', '', i['label'], flags=re.IGNORECASE)

        for count, i in list(enumerate(self.list, start=1)):

            if '–' in i['label']:
                sep = '–'
            elif ':' in i['label'] and not '-' in i['label']:
                sep = ':'
            elif '-' in i['label']:
                sep = '-'
            else:
                sep = ' '

            artist, separator, title = i['label'].partition(sep)

            if '&' in artist:
                artists_separator = '&'
            elif ',' in artist:
                artists_separator = ','
            elif 'feat.' in artist:
                artists_separator = 'feat.'
            elif 'feat' in artist:
                artists_separator = 'feat'
            elif 'Feat' in artist:
                artists_separator = 'Feat'
            else:
                artists_separator = None

            if artists_separator:
                artist = [a.strip() for a in artist.split(artists_separator)]
                on_label = ' / '.join(artist)
            else:
                on_label = artist.strip()
                artist = [artist.strip()]

            i.update(
                {
                    'action': 'play', 'isFolder': 'False', 'title': title, 'label': ' '.join([on_label, separator , title]),
                    'album': control.lang(30292), 'fanart': 'https://i.ytimg.com/vi/vtjL9IeowUs/maxresdefault.jpg',
                    'tracknumber': count, 'count': count, 'artist': artist
                }
            )

            if control.setting('audio_only') == 'true' and control.condVisibility('Window.IsVisible(music)'):
                i['artist'] = on_label

        control.sortmethods('tracknum', mask='%A')

        directory.add(self.list, content=self.content, infotype=self.infotype, argv=self.argv)
コード例 #3
0
def enable_iptv():

    xbmc_path = control.join('special://xbmc', 'addons', 'pvr.iptvsimple')
    home_path = control.join('special://home', 'addons', 'pvr.iptvsimple')

    if control.condVisibility('Pvr.HasTVChannels') and (
            path.exists(control.transPath(xbmc_path))
            or path.exists(control.transPath(home_path))
    ) and control.addon_details('pvr.iptvsimple').get('enabled'):

        control.infoDialog(message=control.lang(30407), time=4000)

    elif not path.exists(control.join(iptv_folder, 'settings.xml')):

        control.infoDialog(message=control.lang(30409), time=4000)

    else:

        if control.yesnoDialog(line1=control.lang(30406)):

            control.enable_addon('pvr.iptvsimple')

            if control.infoLabel(
                    'System.AddonVersion(xbmc.python)') == '2.24.0':

                control.execute('StartPVRManager')
コード例 #4
0
def yt_setup():
    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)

########################################################################################################################

    if control.yesnoDialog(line1=control.lang(30132)):

        wizard()

    if control.condVisibility(
            'System.HasAddon(inputstream.adaptive)') and control.yesnoDialog(
                line1=control.lang(30287)):

        yt_mpd()
コード例 #5
0
ファイル: tools.py プロジェクト: DoBucki/Kodi_Remote_Manager
def yt_setup():

    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 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)

########################################################################################################################

    process()

    if control.yesnoDialog(line1=control.lang(30132), line2='', line3=''):

        wizard()

    else: pass

    if control.condVisibility('System.HasAddon(inputstream.adaptive)') and control.yesnoDialog(line1=control.lang(30287), line2='', line3=''):

        yt_mpd()

    else: pass
コード例 #6
0
def prevent_failure():

    for i in range(0, 500):

        if control.condVisibility('Window.IsActive(busydialog)'):
            control.sleep(100)
        else:
            control.execute('Dialog.Close(all,true)')
            break
コード例 #7
0
    def music_list(self, url):

        html = client.request(url)

        try:

            html = html.decode('utf-8')

        except Exception:

            pass

        if 'albumlist' in html:
            artist = [client.parseDOM(html, 'h4')[0].partition(' <a')[0]]
        else:
            artist = None

        if control.setting('audio_only') == 'true' and control.condVisibility('Window.IsVisible(music)') and artist is not None:
            artist = ''.join(artist)

        if 'songlist' in html:
            songlist = client.parseDOM(html, 'div', attrs={'class': 'songlist'})[0]
            items = client.parseDOM(songlist, 'li')
        elif 'albumlist' in html:
            albumlist = client.parseDOM(html, 'div', attrs={'class': 'albumlist'})[0]
            items = client.parseDOM(albumlist, 'li')
        else:
            artistlist = client.parseDOM(html, 'div', attrs={'class': 'artistlist'})[0]
            items = client.parseDOM(artistlist, 'li')

        if 'icon/music' in html:
            icon = client.parseDOM(html, 'img', attrs={'class': 'img-responsive'}, ret='src')[-1]
            icon = urljoin(gm.GM_BASE, icon)
        else:
            icon = iconname('music')

        for item in items:

            title = client.parseDOM(item, 'a')[0]
            link = client.parseDOM(item, 'a', ret='href')[0]
            link = urljoin(gm.GM_BASE, link)

            if 'gapi.client.setApiKey' in html:
                if CACHE_DEBUG:
                    link = gm.source_maker(url)['links'][0]
                else:
                    link = cache.get(gm.source_maker, 48, url)['links'][0]

            data = {'title': title, 'url': link, 'image': icon}

            if artist:

                data.update({'artist': artist})

            self.list.append(data)

        return self.list
コード例 #8
0
def wrapper(url):

    if url.endswith('/live'):

        url = generic(url)

        if not url:

            return

    streams = youtube_resolver.resolve(url)

    try:
        addon_enabled = control.addon_details('inputstream.adaptive').get(
            'enabled')
    except KeyError:
        addon_enabled = False

    if not addon_enabled:

        streams = [s for s in streams if 'dash' not in s['title'].lower()]

    if control.condVisibility('Window.IsVisible(music)') and control.setting(
            'audio_only') == 'true':

        audio_choices = [
            u for u in streams if 'dash/audio' in u and 'dash/video' not in u
        ]

        if control.setting('yt_quality_picker') == '0':
            resolved = audio_choices[0]['url']
        else:
            qualities = [i['title'] for i in audio_choices]
            urls = [i['url'] for i in audio_choices]

            links = list(zip(qualities, urls))

            resolved = stream_picker(links)

        return resolved

    elif control.setting('yt_quality_picker') == '1':

        qualities = [i['title'] for i in streams]
        urls = [i['url'] for i in streams]

        links = list(zip(qualities, urls))
        resolved = stream_picker(links)

        return resolved

    else:

        resolved = streams[0]['url']

        return resolved
コード例 #9
0
def pair(link):

    link = unquote_plus(link)

    if condVisibility('system.platform.android'):
        from tulip.control import android_activity
        android_activity(link)
    else:
        import webbrowser
        webbrowser.open(link)
コード例 #10
0
ファイル: kids.py プロジェクト: DoBucki/Kodi_Remote_Manager
    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)
コード例 #11
0
def wrapper(url):

    if replace_url:

        result = re.sub(
            r'''https?://(?:[0-9A-Z-]+\.)?(?:(youtu\.be|youtube(?:-nocookie)?\.com)/?\S*?[^\w\s-])([\w-]{11})(?=[^\w-]|$)(?![?=&+%\w.-]*(?:['"][^<>]*>|</a>))[?=&+%\w.-]*''',
            yt_prefix + r'\2', url, flags=re.I
        )

        if url != result:

            return result

    streams = youtube_resolver.resolve(url)

    try:
        addon_enabled = control.addon_details('inputstream.adaptive').get('enabled')
    except KeyError:
        addon_enabled = False

    if not addon_enabled:

        streams = [s for s in streams if 'dash' not in s['title'].lower()]

    if control.condVisibility('Window.IsVisible(music)') and control.setting('audio_only') == 'true':

        audio_choices = [u for u in streams if 'dash/audio' in u and 'dash/video' not in u]

        if control.setting('yt_quality_picker') == '0':
            resolved = audio_choices[0]['url']
        else:
            qualities = [i['title'] for i in audio_choices]
            urls = [i['url'] for i in audio_choices]

            resolved = stream_picker(qualities, urls)

        return resolved

    elif control.setting('yt_quality_picker') == '1':

        qualities = [i['title'] for i in streams]
        urls = [i['url'] for i in streams]

        resolved = stream_picker(qualities, urls)

        return resolved

    else:

        resolved = streams[0]['url']

        return resolved
コード例 #12
0
    def __init__(self):

        self.list = []
        self.data = []
        self.mgreekz_id = 'https://www.youtube.com/channel/UClMj1LyMRBMu_TG1B1BirqQ/'
        self.mgreekz_id = self.mgreekz_id.replace(
            'https://www.youtube.com/channel', '{0}/channel'.format(YT_ADDON))
        if control.setting('audio_only') == 'true' and control.condVisibility(
                'Window.IsVisible(music)'):
            self.content = 'songs'
            self.infotype = 'music'
        else:
            self.content = 'musicvideos'
            self.infotype = 'video'
コード例 #13
0
def enable_proxy_module():

    if control.condVisibility('System.HasAddon(service.streamlink.proxy)'):

        control.infoDialog(control.lang(30143))

    else:

        if control.infoLabel('System.AddonVersion(xbmc.python)') == '2.24.0':

            control.execute('RunPlugin(plugin://service.streamlink.proxy/)')

        else:

            control.execute('InstallAddon(service.streamlink.proxy)')
コード例 #14
0
    def __init__(self, argv):

        self.list = []; self.data = []
        self.mgreekz_id = 'UClMj1LyMRBMu_TG1B1BirqQ'
        self.mgreekz_url = 'http://mad.tv/'
        self.rythmos_url = 'https://www.rythmosfm.gr/'
        self.plus_url = 'http://plusradio.gr/top20'
        self.radiopolis_url_gr = 'http://www.radiopolis.gr/elliniko-radio-polis-top-20/'
        self.radiopolis_url_other = 'http://www.radiopolis.gr/to-kseno-polis-top-20/'
        self.rythmos_top20_url = urljoin(self.rythmos_url, 'community/top20/')
        if control.setting('audio_only') == 'true' and control.condVisibility('Window.IsVisible(music)'):
            self.content = 'songs'
            self.infotype = 'music'
        else:
            self.content = 'musicvideos'
            self.infotype = 'video'
        self.argv = argv
コード例 #15
0
def activate_other_addon(url, query=None):

    if not url.startswith('plugin://'):
        url = ''.join(['plugin://', url, '/'])

    parsed = urlparse(url)

    if not control.condVisibility('System.HasAddon({0})'.format(
            parsed.netloc)):
        control.execute('InstallAddon({0})'.format(parsed.netloc))

    params = dict(parse_qsl(parsed.query))
    action = params.get('action')
    url = params.get('url')

    directory.run_builtin(addon_id=parsed.netloc,
                          action=action,
                          url=url,
                          content_type=query)
コード例 #16
0
    def _mgreekz_top10(self):

        from youtube_requests import get_search

        html = client.request(self.mgreekz_url)

        spotify_playlist_url = client.parseDOM(html, 'iframe', ret='src')[0]

        spotify_html = client.request(spotify_playlist_url)

        spotify_object = client.parseDOM(spotify_html, 'script', attrs={'id': 'resource', 'type': 'application/json'})[0]

        json_object = json.loads(spotify_object)

        comment = plot = json_object.get('description')

        tracks = json_object.get('tracks').get('items')

        for track in tracks:

            song = track.get('track')

            title = song.get('name')

            artists = on_label = [i['name'] for i in song.get('artists')]

            if control.setting('audio_only') == 'true' and control.condVisibility('Window.IsVisible(music)'):
                artists = ' / '.join(artists)

            search = get_search(q=title + ' ' + 'official', search_type='video')[0]
            vid = search['id']['videoId']
            link = yt_url + vid
            image = thumb_maker(link.rpartition('/' if 'youtu.be' in link else '=')[2])

            self.list.append(
                {
                    'label': title + ' - ' + ' & '.join(on_label), 'url': link, 'album': 'Mad Greek Top 10',
                    'image': image, 'artist': artists, 'comment': comment, 'plot': plot, 'title': title
                }
            )

        return self.list
コード例 #17
0
def log_upload():

    exists = control.condVisibility('System.HasAddon(script.kodi.loguploader)')
    addon_path = control.transPath(control.join('special://', 'home', 'addons', 'script.kodi.loguploader'))

    if not exists:

        if path.exists(addon_path):
            control.enable_addon('script.kodi.loguploader')
        else:
            control.execute('InstallAddon(script.kodi.loguploader)')

        while not path.exists(addon_path):
            control.sleep(1000)
        else:
            control.execute('RunScript(script.kodi.loguploader)')

    else:

        control.execute('RunScript(script.kodi.loguploader)')
コード例 #18
0
    def top50_list(self, url):

        self.list = self._top50(url)

        if self.list is None:
            log_debug('Developer\'s picks section failed to load')
            return

        for count, item in list(enumerate(self.list, start=1)):
            add_to_playlist = {
                'title': 30226,
                'query': {
                    'action': 'add_to_playlist'
                }
            }
            clear_playlist = {
                'title': 30227,
                'query': {
                    'action': 'clear_playlist'
                }
            }
            item.update({
                'action': 'play',
                'isFolder': 'False',
                'cm': [add_to_playlist, clear_playlist],
                'album': control.lang(30269),
                'fanart':
                'https://i.ytimg.com/vi/vtjL9IeowUs/maxresdefault.jpg',
                'tracknumber': count,
                'code': count,
                'artist': [item['label'].partition(' - ')[0]]
            })

            if control.setting(
                    'audio_only') == 'true' and control.condVisibility(
                        'Window.IsVisible(music)'):
                item['artist'] = item['artist'][0]

        control.sortmethods('tracknum', mask='%A')
        directory.add(self.list, content=self.content, infotype=self.infotype)
コード例 #19
0
def pvr_client(query='false'):

    control.execute('Dialog.Close(all)')

    if control.condVisibility('Pvr.HasTVChannels'):

        if query is None or query == 'false':

            selection = control.selectDialog([control.lang(30001), control.lang(30014)])

            if selection == 0:
                control.execute('ActivateWindow(TVChannels)')
            elif selection == 1:
                control.execute('ActivateWindow(TVGuide)')

        elif query == 'true':

            control.execute('ActivateWindow(TVGuide)')

    else:

        control.infoDialog(message=control.lang(30065))
コード例 #20
0
    def music_list(self, url):

        html = client.request(url)

        if 'albumlist' in html:
            artist = [client.parseDOM(html, 'h4')[0].partition(' <a')[0]]
        else:
            artist = None

        if control.setting('audio_only') == 'true' and control.condVisibility('Window.IsVisible(music)') and artist is not None:
            artist = ''.join(artist)

        if 'songlist' in html:
            songlist = client.parseDOM(html, 'div', attrs={'class': 'songlist'})[0]
            items = client.parseDOM(songlist, 'li')
        elif 'albumlist' in html:
            albumlist = client.parseDOM(html, 'div', attrs={'class': 'albumlist'})[0]
            items = client.parseDOM(albumlist, 'li')
        else:
            artistlist = client.parseDOM(html, 'div', attrs={'class': 'artistlist'})[0]
            items = client.parseDOM(artistlist, 'li')

        if 'icon/music' in html:
            icon = client.parseDOM(html, 'img', attrs={'class': 'img-responsive'}, ret='src')[-1]
            icon = urljoin(gm.base_link, icon)
        else:
            icon = iconname('music')

        for item in items:

            title = client.parseDOM(item, 'a')[0]
            link = client.parseDOM(item, 'a', ret='href')[0]
            link = urljoin(gm.base_link, link)

            data = {'title': title, 'url': link, 'image': icon, 'artist': artist}

            self.list.append(data)

        return self.list
コード例 #21
0
    def menu(self):

        self.list = [{
            'title':
            control.lang(30170),
            'action':
            'music_live',
            'image':
            iconname('monitor'),
            'fanart':
            'https://i.ytimg.com/vi/vtjL9IeowUs/maxresdefault.jpg'
        }, {
            'title':
            control.lang(30124),
            'action':
            'gm_music',
            'image':
            iconname('music'),
            'fanart':
            'https://cdn.allwallpaper.in/wallpapers/1280x720/1895/music-hd-1280x720-wallpaper.jpg'
        }, {
            'title':
            control.lang(30126),
            'action':
            'mgreekz_index',
            'image':
            'https://pbs.twimg.com/profile_images/697098521527328772/VY8e_klm_400x400.png',
            'fanart':
            control.addonmedia(addonid=ART_ID,
                               theme='networks',
                               icon='mgz_fanart.jpg',
                               media_subfolder=False),
            'isFolder':
            'False',
            'isPlayable':
            'False'
        }, {
            'title':
            control.lang(30269),
            'action':
            'top50_list',
            'url':
            's1GeuATNw9GdvcXYy9Cdl5mLydWZ2lGbh9yL6MHc0RHa',
            'image':
            control.addonInfo('icon'),
            'fanart':
            'https://i.ytimg.com/vi/vtjL9IeowUs/maxresdefault.jpg'
        }, {
            'title':
            control.lang(30292),
            'action':
            'techno_choices',
            'url':
            'PLZF-_NNdxpb5s1vjh6YSMTyjjlfiZhgbp',
            'image':
            control.addonInfo('icon'),
            'fanart':
            'https://i.ytimg.com/vi/vtjL9IeowUs/maxresdefault.jpg'
        }]

        if control.condVisibility('Window.IsVisible(music)'):
            del self.list[0]

        directory.add(self.list)
コード例 #22
0
    def live_tv(self, zapping=False, query=None):

        if control.setting('live_tv_mode') == '1' and query is None:
            zapping = True

        if control.setting('debug') == 'false':
            live_data = cache.get(self.live, 8)
        else:
            live_data = cache.get(self.live,
                                  int(control.setting('cache_period')))

        self.list = live_data[0]

        if self.list is None:
            log_debug('Live channels list did not load successfully')
            return

        if zapping and control.setting('live_group_switcher') != '0':

            value = int(control.setting('live_group_switcher')) - 1

            group = str(live_groups.values()[value])

            self.list = [item for item in self.list if item['group'] == group]

        elif control.setting('show_live_switcher') == 'true':

            if control.setting('live_group') != 'ALL' and query is None:

                self.list = [
                    item for item in self.list
                    if item['group'] == control.setting('live_group')
                ]

        elif not zapping:

            if control.setting('live_group_switcher') != '0' and query is None:

                value = int(control.setting('live_group_switcher')) - 1

                group = str(live_groups.values()[value])

                self.list = [
                    item for item in self.list if item['group'] == group
                ]

        if control.setting('show_alt') == 'false':

            self.list = [
                item for item in self.list if not any([
                    'BUP' in item['title'],
                    re.search(r'\(\d\)', item['title'])
                ])
            ]

        year = datetime.now().year

        for count, item in list(enumerate(self.list, start=1)):

            item.update({
                'action':
                'play_resolved'
                if zapping and control.setting('preresolve_streams') == 'true'
                else 'play',
                'isFolder':
                'False',
                'year':
                year,
                'duration':
                None,
                'code':
                str(count)
            })

        for item in self.list:

            # bookmark = dict((k, v) for k, v in iteritems(item) if not k == 'next')
            # bookmark['bookmark'] = item['url']
            #
            # bookmark_cm = {'title': 30080, 'query': {'action': 'addBookmark', 'url': json.dumps(bookmark)}}
            if not zapping:
                r_and_c_cm = {
                    'title': 30082,
                    'query': {
                        'action': 'refresh_and_clear'
                    }
                }
            else:
                r_and_c_cm = None
            pvr_client_cm = {
                'title': 30084,
                'query': {
                    'action': 'pvr_client',
                    'query': 'true'
                }
            }
            if item['website'] != 'None':
                web_cm = {
                    'title': 30316,
                    'query': {
                        'action': 'open_link',
                        'url': item['website']
                    }
                }
            else:
                web_cm = None

            if control.condVisibility('Pvr.HasTVChannels'):
                item.update({'cm': [r_and_c_cm, pvr_client_cm, web_cm]})
            else:
                item.update({'cm': [r_and_c_cm, web_cm]})

        if control.setting(
                'show_live_switcher') == 'true' and zapping is False:

            switch = {
                'title':
                control.lang(30047).format(
                    control.lang(30048) if control.setting('live_group') ==
                    'ALL' else control.lang(int(control.setting('live_group'))
                                            )),
                'image':
                iconname('switcher'),
                'action':
                'live_switcher',
                'plot':
                control.lang(30034) + '\n' + control.lang(30035) +
                live_data[2],
                'isFolder':
                'False',
                'isPlayable':
                'False'
            }

            self.list.insert(0, switch)

        if control.setting('preresolve_streams') == 'true':

            from resources.lib.modules.player import conditionals

            pd = control.progressDialogGB
            pd.create(control.name())

            for item in self.list:

                try:
                    percent = control.per_cent(int(item['code']),
                                               len(self.list))
                    pd.update(percent)
                    item.update(
                        {'url': conditionals(item['url'], params=self.params)})
                except Exception as e:
                    log_debug('Failed to resolve ' + item['title'] +
                              ' , reason: ' + repr(e))
                    continue

            pd.update(100)
            pd.close()

        if query:

            self.list = [i for i in self.list if query in i['title'].lower()]

            return self.list

        if not zapping:

            control.sortmethods('production_code')
            control.sortmethods('title')
            control.sortmethods('genre')

        directory.add(self.list,
                      content='movies',
                      argv=self.argv,
                      as_playlist=zapping,
                      progress=len(self.list) >= 100)
コード例 #23
0
    def menu(self):

        self.list = [
            {
                'title': control.lang(30170),
                'action': 'music_live',
                'image': iconname('monitor'),
                'fanart': 'https://i.ytimg.com/vi/vtjL9IeowUs/maxresdefault.jpg'
            }
            ,
            {
                'title': control.lang(30124),
                'action': 'gm_music',
                'image': iconname('music'),
                'fanart': 'https://cdn.allwallpaper.in/wallpapers/1280x720/1895/music-hd-1280x720-wallpaper.jpg'
            }
            ,
            {
                'title': control.lang(30126),
                'action': 'mgreekz_index',
                'image': 'https://pbs.twimg.com/profile_images/697098521527328772/VY8e_klm_400x400.png',
                'fanart': control.addonmedia(
                    addonid=art_id, theme='networks', icon='mgz_fanart.jpg', media_subfolder=False
                )
            }
            ,
            {
                'title': control.lang(30127),
                'action': 'mgreekz_top10',
                'image': 'https://pbs.twimg.com/profile_images/697098521527328772/VY8e_klm_400x400.png',
                'fanart': control.addonmedia(
                    addonid=art_id, theme='networks', icon='mgz_fanart.jpg', media_subfolder=False
                )
            }
            ,
            {
                'title': control.lang(30128),
                'action': 'top20_list',
                'url': self.rythmos_top20_url,
                'image': 'https://is3-ssl.mzstatic.com/image/thumb/Purple62/v4/3e/a4/48/3ea44865-8cb2-5fec-be70-188a060b712c/source/256x256bb.jpg',
                'fanart': control.addonmedia(
                    addonid=art_id,
                    theme='networks',
                    icon='rythmos_fanart.jpg',
                    media_subfolder=False
                )
            }
            ,
            {
                'title': control.lang(30221),
                'action': 'top20_list',
                'url': self.plus_url,
                'image': 'https://is5-ssl.mzstatic.com/image/thumb/Purple20/v4/e8/99/e8/e899e8ea-0df6-0f60-d66d-b82b8021e8af/source/256x256bb.jpg',
                'fanart': 'https://i.imgur.com/G8koVR8.jpg'
            }
            ,
            {
                'title': control.lang(30222),
                'action': 'top20_list',
                'url': self.radiopolis_url_gr,
                'image': 'http://www.radiopolis.gr/wp-content/uploads/2017/11/noimageavailable.jpg',
                'fanart': 'https://i.ytimg.com/vi/tCupKdpHVx8/maxresdefault.jpg'
            }
            ,
            {
                'title': control.lang(30223),
                'action': 'top20_list',
                'url': self.radiopolis_url_other,
                'image': 'http://www.radiopolis.gr/wp-content/uploads/2017/11/noimageavailable.jpg',
                'fanart': 'https://i.ytimg.com/vi/tCupKdpHVx8/maxresdefault.jpg'
            }
            ,
            {
                'title': control.lang(30269),
                'action': 'top50_list',
                'url': 's1GeuATNw9GdvcXYy9Cdl5mLydWZ2lGbh9yL6MHc0RHa',
                'image': control.addonInfo('icon'),
                'fanart': 'https://i.ytimg.com/vi/vtjL9IeowUs/maxresdefault.jpg'
            }
            ,
            {
                'title': control.lang(30292),
                'action': 'techno_choices',
                'url': 'PLZF-_NNdxpb5s1vjh6YSMTyjjlfiZhgbp',
                'image': control.addonInfo('icon'),
                'fanart': 'https://i.ytimg.com/vi/vtjL9IeowUs/maxresdefault.jpg'
            }
        ]

        if control.condVisibility('Window.IsVisible(music)'):
            del self.list[0]

        log_debug('Music section loaded')
        directory.add(self.list, argv=self.argv)
コード例 #24
0
    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)
コード例 #25
0
    def _top20(self, url):

        from youtube_requests import get_search

        cookie = client.request(url, close=False, output='cookie')
        html = client.request(url, cookie=cookie)

        if url == self.rythmos_top20_url:
            attributes = {'class': 'va-title'}
        elif url == self.plus_url:
            attributes = {'class': 'element element-itemname first last'}
        elif url == self.radiopolis_url_gr or url == self.radiopolis_url_other:
            attributes = {'class': 'thetopdata'}

        items = client.parseDOM(
            html, 'td' if 'radiopolis' in url else 'div', attrs=attributes
        )

        year = str(datetime.now().year)

        for item in items:

            if url == self.rythmos_top20_url:
                label = client.parseDOM(item, 'span', attrs={'class': 'toptitle'})[0]
                label = client.replaceHTMLCodes(label)
                label = re.sub('\s? ?-\s? ?', ' - ', label)
                image = client.parseDOM(item, 'img', ret='src')[0]
                image = image.replace(' ', '%20')
                title = label.partition(' - ')[2]
                if control.setting('audio_only') == 'true' and control.condVisibility('Window.IsVisible(music)'):
                    artist = label.partition(' - ')[0]
                else:
                    artist = [label.partition(' - ')[0]]
            elif url == self.plus_url:
                label = item.partition('.')[2].strip()
                title = label.partition('-')[2]
                if control.setting('audio_only') == 'true' and control.condVisibility('Window.IsVisible(music)'):
                    artist = label.partition('-')[0]
                else:
                    artist = [label.partition('-')[0]]
            elif url == self.radiopolis_url_gr or url == self.radiopolis_url_other:
                a_href = client.parseDOM(item, 'a')
                a_href = ' - '.join(a_href) if len(a_href) == 2 else a_href[0]
                label = client.stripTags(a_href.replace('\"', '').replace('&amp;', '&').replace('\n', ' - '))
                title = label.partition(' - ')[2]
                if control.setting('audio_only') == 'true' and control.condVisibility('Window.IsVisible(music)'):
                    artist = label.partition(' - ')[0]
                else:
                    artist = [label.partition(' - ')[0]]

            if any([url == self.rythmos_top20_url, url == self.plus_url]):
                search = get_search(q=title + ' ' + 'official', search_type='video')[0]
                description = search['snippet']['description']
                year = search['snippet']['publishedAt'][:4]
                vid = search['id']['videoId']
                image = search['snippet']['thumbnails']['default']['url']
                link = yt_url + vid
            elif url == self.radiopolis_url_gr or url == self.radiopolis_url_other:
                links = client.parseDOM(item, 'a', ret='href')
                link = links[1] if len(links) == 2 else links[0]
                image = thumb_maker(link.rpartition('/' if 'youtu.be' in link else '=')[2])
                description = None

            self.list.append(
                {
                    'label': label, 'url': link, 'image': image, 'title': title, 'artist': artist, 'plot': description,
                    'year': int(year)
                }
            )

        return self.list
コード例 #26
0
    def menu(self):

        self.list = [{
            'title':
            '[B]' + control.addonInfo('name') + ': ' + control.lang(30255) +
            '[/B]',
            'action':
            'info',
            'icon':
            control.addonInfo('icon')
        }, {
            'title':
            '[B]' + control.addonInfo('name') + ': ' + control.lang(30350) +
            '[/B]',
            'action':
            'toggle_alt',
            'icon':
            iconname('monitor'),
            'isFolder':
            'False',
            'isPlayable':
            'False'
        }, {
            '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':
            '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.lang(30320) + ': ' + control.lang(30272),
            'action': 'input_stream_addons',
            'icon': iconname('monitor')
        }, {
            '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'
                        }
                    }]})

        directory.add(self.list)
コード例 #27
0
def bool_skin_setting(setting_id):

    return bool(
        control.condVisibility('Skin.HasSetting({0})'.format(setting_id)))
コード例 #28
0
    def visible_window(window_id):

        boolean = control.condVisibility('Window.IsVisible({0})'.format(window_id))

        return boolean
コード例 #29
0
ファイル: kids.py プロジェクト: DoBucki/Kodi_Remote_Manager
        the Free Software Foundation, either version 2 of the License, or
        (at your option) any later version.
        This program is distributed in the hope that it will be useful,
        but WITHOUT ANY WARRANTY; without even the implied warranty of
        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 = []
コード例 #30
0
    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)