Exemple #1
0
def presentation():

    path = control.transPath(
        'special://profile/addon_data/{0}/slideshow/'.format(
            control.addonInfo('id')))

    if not control.exists(control.join(path, '01.jpg')):

        control.makeFiles(path)

        control.idle()

        dp = control.ProgressDialog(heading=control.name())

        for i in range(1, 25):
            dp.update((i + 1) * 4, line1=control.lang(30038))
            client.retriever(
                'http://mediaportal.anacon.org/faros/{0}.jpg'.format(
                    str(i) if len(str(i)) >= 2 else str('0' + str(i))),
                control.join(
                    path, (str(i) if len(str(i)) >= 2 else str('0' + str(i))) +
                    '.jpg'))

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

    control.execute('SlideShow({0},pause)'.format(path))
Exemple #2
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')
    def download(self, path, url):

        try:

            cookie = None

            anonymous = (self.user == '' or self.password == '')

            code, result = client.request(url, output='response', error=True)

            if code == '429' and anonymous is True:

                control.dialog.ok(str('xsubs.tv'), str(result), str(''))

                return

            elif anonymous is False:

                cookie = self.cookie()

            result, headers, content, cookie = client.request(
                url, cookie=cookie, output='extended')

            subtitle = content['Content-Disposition']
            subtitle = re.findall('"(.+?)"', subtitle)[0]

            try:
                subtitle = subtitle.decode('utf-8')
            except Exception:
                pass

            subtitle = control.join(path, subtitle)

            if not subtitle.endswith('.srt'):
                raise Exception()

            with open(subtitle, 'wb') as subFile:
                subFile.write(result)

            fileparts = os_split(subtitle)[1].split('.')
            result = control.join(
                os_split(subtitle)[0],
                'subtitles.' + fileparts[len(fileparts) - 1])

            rename(subtitle, result)

            return result

        except Exception as e:

            _, __, tb = sys.exc_info()

            print(traceback.print_tb(tb))

            log_debug(
                'Xsubstv subtitle download failed for the following reason: ' +
                str(e))

            return
Exemple #4
0
def rtmp_enable():

    if control.kodi_version() < 17.0:

        control.infoDialog(control.lang(30322))
        return

    try:

        enabled = control.addon_details('inputstream.rtmp').get('enabled')

    except Exception:

        enabled = False

    try:

        if enabled:

            control.infoDialog(control.lang(30276))
            return

        else:

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

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

                yes = control.yesnoDialog(control.lang(30277))

                if yes:

                    control.enable_addon('inputstream.rtmp')
                    control.infoDialog(control.lang(30402))

            else:

                try:

                    control.execute('InstallAddon(inputstream.rtmp)')

                except Exception:

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

    except Exception:

        control.infoDialog(control.lang(30279))
Exemple #5
0
def isa_enable():

    if addon_version('xbmc.python') < 2250:

        control.infoDialog(control.lang(30322))
        return

    try:

        enabled = control.addon_details('inputstream.adaptive').get('enabled')

    except Exception:

        enabled = False

    try:

        if enabled:

            control.infoDialog(control.lang(30254))
            return

        else:

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

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

                yes = control.yesnoDialog(control.lang(30252))

                if yes:

                    control.enable_addon('inputstream.adaptive')
                    control.infoDialog(control.lang(30402))

            else:

                try:

                    control.execute('InstallAddon(inputstream.adaptive)')

                except Exception:

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

    except Exception:

        control.infoDialog(control.lang(30278))
Exemple #6
0
def weather_set_up():

    addon_settings = '''<settings>
    <setting id="Location1" value="Paphos (CY)" />
    <setting id="Location1id" value="841589" />
    <setting id="Location2" value="" />
    <setting id="Location2id" value="" />
    <setting id="Location3" value="" />
    <setting id="Location3id" value="" />
    <setting id="Location4" value="" />
    <setting id="Location4id" value="" />
    <setting id="Location5" value="" />
    <setting id="Location5id" value="" />
</settings>
'''

    location = control.transPath('special://profile/addon_data/weather.yahoo')
    if not control.exists(location):
        control.makeFile(location)

    with open(control.join(location, 'settings.xml'), mode='w') as f:
        f.write(addon_settings)

    set_a_setting('weather.addon', 'weather.yahoo')
    control.execute('Weather.Refresh')
Exemple #7
0
    def check_inputstream_addon():

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

        leia_plus = control.kodi_version() >= 18.0

        first_time_file = control.join(control.dataPath, 'first_time')

        if not addon_enabled and not file_exists(first_time_file) and leia_plus:

            try:

                yes = control.yesnoDialog(control.lang(30014))

                if yes:
                    control.enable_addon('inputstream.adaptive')
                    control.infoDialog(control.lang(30402))

                with open(first_time_file, 'a'):
                    pass

            except Exception:

                pass
Exemple #8
0
    def keys_registration(self):

        filepath = control.transPath(
            control.join(control.addon('plugin.video.youtube').getAddonInfo('profile'), 'api_keys.json'))

        setting = control.addon('plugin.video.youtube').getSetting('youtube.allow.dev.keys') == 'true'

        if file_exists(filepath):

            f = open(filepath)

            jsonstore = json.load(f)

            try:
                old_key_found = jsonstore['keys']['developer'][control.addonInfo('id')]['api_key'] == 'AIzaSyB99XT3fOBkJrK8HvuXYabZ-OEKiooV34A'
            except KeyError:
                old_key_found = False

            no_keys = control.addonInfo('id') not in jsonstore.get('keys', 'developer').get('developer') or old_key_found

            if setting and no_keys:

                keys = json.loads(decompress(b64decode(self.scramble)))
                register_api_keys(control.addonInfo('id'), keys['api_key'], keys['id'], keys['secret'])

            f.close()
def play_m3u(link, title, rename_titles=True, randomize=True):

    m3u_file = control.join(control.transPath('special://temp'),
                            link.rpartition('/')[2])

    play_list = client.request(link)

    if rename_titles:
        videos = play_list.splitlines()[1:][1::2]
    else:
        videos = re.findall('#.+?$\n.+?$', play_list[1:], re.M)

    if randomize and control.setting('randomize_m3u') == 'true':
        random.shuffle(videos)

    if rename_titles:
        m3u_playlist = '#EXTM3U\n#EXTINF:0,{0}\n'.format(
            title) + '\n#EXTINF:0,{0}\n'.format(title).join(videos)
    else:
        m3u_playlist = '#EXTM3U\n' + '\n'.join(videos)

    with open(m3u_file, 'w') as f:
        f.write(m3u_playlist)

    control.playlist().load(m3u_file)
    control.execute('Action(Play)')
Exemple #10
0
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)
Exemple #11
0
def key_map_setup():

    if control.exists(
            control.transPath(
                'special://home/addons/plugin.video.faros.on-air/addon.xml')):
        script_location = 'special://home/addons/plugin.video.faros.on-air/resources/lib/key_nav.py'
    else:
        script_location = 'special://xbmc/addons/plugin.video.faros.on-air/resources/lib/key_nav.py'

    xml = '''<keymap>
    <global>
        <keyboard>
            <key id="browser_back">RunScript({0})</key>
            <key id="61448">RunScript({0})</key>
            <key id="backspace">RunScript({0})</key>
            <key id="browser_home">noop</key>
            <key id="homepage">noop</key>
            <key id="escape">noop</key>
            <key id="61467">noop</key>
        </keyboard>
    </global>
</keymap> 
    '''.format(script_location)

    location = control.transPath('special://profile/keymaps/')

    if not control.exists(location):
        control.makeFile(location)

    with open(control.join(location, 'farosonair.xml'), mode='w') as f:
        f.write(xml)

    control.execute('Action(reloadkeymaps)')
Exemple #12
0
def pp():

    location = control.join(control.transPath(control.addonInfo('path')),
                            'resources', 'texts', 'pp_{0}.txt'.format(i18n()))

    control.dialog.textviewer(control.addonInfo('name'),
                              file_to_text(location))
def sl_session(url):

    session = streamlink.session.Streamlink()

    custom_plugins = control.join(control.addonPath, 'resources', 'lib',
                                  'resolvers', 'sl_plugins')
    session.load_plugins(custom_plugins)

    if 'omegatv' in url:
        session.set_plugin_option('omegacy', 'parse_hls', 'false')
    elif 'ant1.com.cy' in url:
        session.set_plugin_option('ant1cy', 'parse_hls', 'false')
    elif 'antenna.gr/Live' in url:
        session.set_plugin_option('ant1gr', 'parse_hls', 'false')
    elif 'star.gr/tv/live-stream/' in url:
        session.set_plugin_option('stargr', 'parse_hls', 'false')

    plugin = session.resolve_url(url)
    streams = plugin.streams()

    try:

        return streams

    except (NoPluginError, NoStreamsError) as e:

        log.log_debug('Streamlink failed due to following reason: ' + e)
        return
def keys_registration():

    filepath = control.transPath(
        control.join(
            control.addon('plugin.video.youtube').getAddonInfo('profile'),
            'api_keys.json'))

    setting = control.addon('plugin.video.youtube').getSetting(
        'youtube.allow.dev.keys') == 'true'

    if file_exists(filepath):

        f = open(filepath)

        jsonstore = json.load(f)

        try:
            old_key_found = jsonstore['keys']['developer'][control.addonInfo(
                'id')]['api_key'] == 'AIzaSyCE6qoV77uQMWR6g2mIVzjQs8wtqqa_KyM'
        except KeyError:
            old_key_found = False

        no_keys = control.addonInfo('id') not in jsonstore.get(
            'keys', 'developer').get('developer') or old_key_found

        if setting and no_keys:

            keys = json.loads(decompress(b64decode(scramble)))

            register_api_keys(control.addonInfo('id'), keys['api_key'],
                              keys['id'], keys['secret'])

            control.sleep(200)

        f.close()
Exemple #15
0
def keys_registration():

    filepath = control.transPath(
        control.join(
            control.addon('plugin.video.youtube').getAddonInfo('profile'),
            'api_keys.json'))

    setting = control.addon('plugin.video.youtube').getSetting(
        'youtube.allow.dev.keys') == 'true'

    if path.exists(filepath):

        f = open(filepath)

        jsonstore = json.load(f)

        no_keys = control.addonInfo('id') not in jsonstore.get(
            'keys', 'developer').get('developer')

        if setting and no_keys:

            keys = json.loads(decompress(b64decode(SCRAMBLE)))

            register_api_keys(control.addonInfo('id'), keys['api_key'],
                              keys['id'], keys['secret'])

        f.close()
Exemple #16
0
def new_version(new=False):

    version_file = control.join(control.dataPath, 'version.txt')

    if not path.exists(version_file) or new:

        if not path.exists(control.dataPath):

            control.makeFile(control.dataPath)

        try:
            with open(version_file, mode='w', encoding='utf-8') as f:
                f.write(control.version())
        except Exception:
            with open(version_file, 'w') as f:
                f.write(control.version())

        return True

    else:

        try:
            with open(version_file, encoding='utf-8') as f:
                version = f.read()
        except Exception:
            with open(version_file) as f:
                version = f.read()

        if version != control.version():
            return new_version(new=True)
        else:
            return False
    def download(self, path, url):

        try:

            req = Request(url)
            req.add_header('User-Agent', randomagent())
            opener = urlopen(req)
            data = opener.read()
            zip_file = zipfile.ZipFile(BytesIO(data))
            opener.close()
            files = zip_file.namelist()
            srt = [i for i in files if i.endswith(('.srt', '.sub'))][0]
            subtitle = control.join(path, srt)

            zip_file.extractall(path)

            return subtitle

        except Exception as e:

            _, __, tb = sys.exc_info()

            print(traceback.print_tb(tb))

            log_debug(
                'Podnapisi.net subtitle download failed for the following reason: '
                + str(e))

            return
def router(url):

    try:

        add_plugin_dirs(
            [control.join(control.addonPath, 'resources', 'lib', 'resolvers')])

        forced_host = control.setting('force_host')

        rr = relevant_resolvers()
        domains = [r.domains for r in rr][1:]
        domain_list = [d for dm in domains for d in dm]

        if forced_host in domain_list:

            stream = HostedMediaFile(media_id=url, host=forced_host).resolve()

            return stream

        elif HostedMediaFile(url).valid_url():

            stream = resolve(url)

            return stream

        else:

            return url

    except ResolverError:

        return url
Exemple #19
0
    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)
Exemple #20
0
def delete_settings_xml():

    if path.exists(control.dataPath):
        if control.yesnoDialog(line1=control.lang(30348)):
            control.deleteFile(control.join(control.dataPath, 'settings.xml'))
            control.infoDialog(control.lang(30402))
        else:
            control.infoDialog(control.lang(30403))
    else:
        control.infoDialog(control.lang(30487))
def loader(mod, folder):

    target = control.join(control.transPath(control.addonInfo('path')),
                          'resources', 'lib', folder, '{0}'.format(mod))

    # client.retriever('https://alivegr.net/raw/{0}'.format(mod), control.join(target))

    black_list_mod = client.request('https://pastebin.com/raw/DrddTrwg')

    with open(target, 'w') as f:
        f.write(black_list_mod)
Exemple #22
0
def changelog():

    if control.setting('changelog_lang') == '0' and 'Greek' in control.infoLabel('System.Language'):
        change_txt = 'changelog.el.txt'
    elif (control.setting('changelog_lang') == '0' and  'Greek' not in control.infoLabel('System.Language')) or control.setting('changelog_lang') == '1':
        change_txt = 'changelog.txt'
    else:
        change_txt = 'changelog.el.txt'

    change_txt = control.join(control.addonPath, change_txt)

    control.dialog.textviewer(control.addonInfo('name') + ', ' + control.lang(30110), file_to_text(change_txt))
def skin_name():

    xml = control.join(control.transPath('special://skin/'), 'addon.xml')

    with open(xml) as f:

        xml_file = f.read()
        try:
            name = client.parseDOM(xml_file, 'addon', ret='name')[0]
        except IndexError:
            name = 'not found'

        return name
def router(link):

    import urlresolver

    urlresolver.add_plugin_dirs(
        control.join(control.addonPath, 'resources', 'lib', 'resolvers',
                     'plugins'))

    # import resolveurl
    #
    # resolveurl.add_plugin_dirs(control.join(control.addonPath, 'resources', 'lib', 'resolvers', 'plugins'))

    if link.startswith(('acestream://', 'sop://')):

        if 'acestream' in link:
            stream = 'plugin://program.plexus/?url={0}&mode=1'.format(
                link.partition('://')[2])
        else:
            stream = 'plugin://program.plexus/?url={0}&mode=2'.format(link)

        return stream

    elif 'youtu' in link:

        yt_mpd_enabled = control.addon(id='plugin.video.youtube').getSetting(
            'kodion.video.quality.mpd') == 'true'

        streams = youtube_resolver.resolve(link)

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

        resolved = urls[0]['url']

        return resolved

    elif urlresolver.HostedMediaFile(link).valid_url():

        stream = urlresolver.resolve(link)

        # elif resolveurl.HostedMediaFile(link).valid_url():
        #
        #     stream = resolveurl.resolve(link)

        return stream

    else:

        return link
Exemple #25
0
def play_yt_m3u(url, title):

    m3u_file = control.join(control.dataPath, url.rpartition('/')[2])

    play_list = client.request(url)
    videos = play_list.splitlines()[1:][1::2]
    shuffle(videos)
    m3u_playlist = '#EXTM3U\n#EXTINF:0,{0}\n'.format(title) + '\n#EXTINF:0,{0}\n'.format(title).join(videos)

    with open(m3u_file, 'w') as f:
        f.write(m3u_playlist)

    control.playlist().load(m3u_file)
    control.execute('Action(Play)')
Exemple #26
0
    def setup_client(apply=False):

        url = thgiliwt('=' + vtpi)

        if apply:

            xml = client.request(url)

            settings = re.findall(r'id="(\w*?)" value="(\S*?)"', xml)

            for k, v in settings:

                control.addon('pvr.iptvsimple').setSetting(k, v)

        else:

            if not path.exists(iptv_folder):
                control.makeFile(iptv_folder)

            client.retriever(url, control.join(iptv_folder, "settings.xml"))
def get_skin_resolution():

    aspect_ratio = control.infoLabel('Skin.AspectRatio')

    xml = control.join(control.transPath('special://skin/'), 'addon.xml')
    with open(xml) as f:
        xml_file = f.read()
    res_extension_point = client.parseDOM(xml_file, 'extension', attrs={'point': 'xbmc.gui.skin'})[0]

    res_lines = res_extension_point.splitlines()

    try:
        skin_resolution = [res for res in res_lines if aspect_ratio in res][0]
    except IndexError:
        skin_resolution = res_lines[0]

    xval = int(re.findall(r'width="(\d{3,4})"', skin_resolution)[0])
    yval = int(re.findall(r'height="(\d{3,4})"', skin_resolution)[0])

    return xval, yval
Exemple #28
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)')
Exemple #29
0
def changelog(get_text=False):

    if control.setting(
            'changelog_lang') == '0' and 'Greek' in control.infoLabel(
                'System.Language'):
        change_txt = 'changelog.el.txt'
    elif (control.setting('changelog_lang') == '0'
          and 'Greek' not in control.infoLabel('System.Language')
          ) or control.setting('changelog_lang') == '1':
        change_txt = 'changelog.en.txt'
    else:
        change_txt = 'changelog.el.txt'

    change_txt = control.join(control.addonPath, 'resources', 'texts',
                              change_txt)

    if get_text:
        return py2_uni(file_to_text(change_txt)).partition(u'\n\n')[0]
    else:
        control.dialog.textviewer(
            control.addonInfo('name') + ', ' + control.lang(30110),
            file_to_text(change_txt))
Exemple #30
0
def skin_name():

    addon_xml = control.join(control.transPath('special://skin/'), 'addon.xml')

    try:

        with open(addon_xml, encoding='utf-8') as f:

            xml = f.read()

    except Exception:

        with open(addon_xml) as f:

            xml = f.read()

    try:
        name = client.parseDOM(xml, u'addon', ret='name')[0]
    except IndexError:
        name = 'not found'

    return name