Beispiel #1
0
def connect_openvpn(config, restart=False, sudopassword=None):
    with storage.PersistentDict('vpn') as db:
        Script.log('OpenVPN: Connecting OpenVPN configuration: [%s]' % config)

        if Script.setting.get_boolean('vpn.sudo') and \
                Script.setting.get_boolean('vpn.sudopsw') and sudopassword is None:

            keyboard = xbmc.Keyboard(default='',
                                     heading=Script.localize(
                                         LABELS['Enter your sudo password']),
                                     hidden=True)
            keyboard.doModal()
            if keyboard.isConfirmed():
                sudopassword = keyboard.getText()

        openvpn = vpnlib.OpenVPN(
            Script.setting.get_string('vpn.openvpnfilepath'),
            config,
            ip=ip,
            port=port,
            args=Script.setting.get_string('vpn.args'),
            sudo=Script.setting.get_boolean('vpn.sudo'),
            sudopwd=sudopassword,
            debug=True)

        try:
            if restart:
                openvpn.disconnect()
                db['status'] = "disconnected"
            openvpn.connect()
            utils.send_notification(Script.localize(
                LABELS['Started VPN connection']),
                                    title="OpenVPN",
                                    time=3000)

            db['status'] = "connected"
        except vpnlib.OpenVPNError as exception:
            if exception.errno == 1:
                db['status'] = "connected"

                if xbmcgui.Dialog().yesno(
                        'OpenVPN',
                        Script.localize(LABELS[
                            'An existing OpenVPN instance appears to be running.']
                                        ),
                        Script.localize(LABELS['Disconnect it?'])):

                    Script.log('OpenVPN: User has decided to restart OpenVPN')
                    connect_openvpn(config, True, sudopassword)
                else:
                    Script.log(
                        'OpenVPN: User has decided not to restart OpenVPN')
            else:
                xbmcgui.Dialog().ok(
                    'OpenVPN',
                    Script.localize(LABELS[
                        'An error has occurred whilst trying to connect OpenVPN']
                                    ))
                db['status'] = "failed"
        db.flush()
Beispiel #2
0
def import_ovpn(*args, **kwargs):
    path = xbmcgui.Dialog().browse(1,
                                   Script.localize(30342),
                                   'files',
                                   mask='.ovpn|.conf',
                                   enableMultiple=False)

    if path and os.path.exists(path) and os.path.isfile(path):
        Script.log('OpenVPN: Import: [%s]' % path)

        keyboard = xbmc.Keyboard(default='',
                                 heading=Script.localize(30348),
                                 hidden=False)
        keyboard.doModal()
        if keyboard.isConfirmed() and len(keyboard.getText()) > 0:
            name = keyboard.getText()

            ovpnfiles = {}
            with storage.PersistentDict('vpn') as db:
                ovpnfiles = db['ovpnfiles']
                db.flush()

            if name in ovpnfiles and not xbmcgui.Dialog().yesno(
                    'OpenVPN', Script.localize(30349)):
                xbmcgui.Dialog().ok('OpenVPN', Script.localize(30350))

            else:
                ovpnfiles[name] = path
                with storage.PersistentDict('vpn') as db:
                    db['ovpnfiles'] = ovpnfiles
                    db.flush()
        else:
            xbmcgui.Dialog().ok('OpenVPN', Script.localize(30351))
Beispiel #3
0
def grab_current_programmes(country_id):
    """Retrieve current programmes of channels of country_id.

    Args:
        country_id (str)
    Returns:
        dict: (key: xmltv_id, value: current programme)
    """
    if country_id not in xmltv_infos:
        return {}
    try:
        # Download, if needed, xmltv file of today
        xmltv_fp = download_xmltv_file(country_id)

        # Grab current programmes in xmltv file
        programmes = read_programmes(xmltv_fp, only_current_programmes=True)

        # Use the channel as key
        tv_guide = {}
        for programme in programmes:
            programme = programme_post_treatment(programme)
            tv_guide[programme['channel']] = programme

        return tv_guide
    except Exception as e:
        Script.notify(Script.localize(30722),
                      Script.localize(30723),
                      display_time=7000)
        Script.log('xmltv module failed with error: {}'.format(e),
                   lvl=Script.ERROR)
        return {}
def connect_openvpn(config, sudopassword=None):
    Script.log('OpenVPN: Connecting OpenVPN configuration: [%s]' % config)

    if Script.setting.get_boolean('vpn.sudo') and \
            Script.setting.get_boolean('vpn.sudopsw') and sudopassword is None:

        keyboard = xbmc.Keyboard()
        keyboard.setHeading(Script.localize(30353))
        keyboard.setHiddenInput(True)
        keyboard.doModal()
        if keyboard.isConfirmed():
            sudopassword = keyboard.getText()
        else:
            return

    openvpn = vpnlib.OpenVPN(
        Script.setting.get_string('vpn.openvpnfilepath'),
        config,
        ip=IP,
        port=PORT,
        args=Script.setting.get_string('vpn.args'),
        sudo=Script.setting.get_boolean('vpn.sudo'),
        sudopwd=sudopassword)

    try:
        openvpn.connect()
        Script.notify(
            "OpenVPN",
            Script.localize(30354),
            display_time=3000)
    except Exception as e:
        xbmcgui.Dialog().ok(
            'OpenVPN',
            Script.localize(30358))
        Script.log('OpenVPN: OpenVPN error: ' + str(e))
def channel_homepage(plugin, item_id, **kwargs):
    """
    List channel homepage elements
    (e.g. https://www.france.tv/france-2/)
    """
    r = urlquick.get(URL_API_MOBILE('/apps/%s' % item_id),
                     params={'platform': 'apps'})
    j = json.loads(r.text)
    j = j['collections'] if 'collections' in j else j['items']

    for collection in j:
        item = Listitem()
        if set_item_callback_based_on_type(item, collection['type'],
                                           collection):
            yield item

    menu_items = [
        (Script.localize(30701),
         '/generic/taxonomy/%s/contents'),  # All videos
        (Script.localize(30717), '/apps/regions/%s/programs')  # All programs
    ]
    for menu_item in menu_items:
        item = Listitem()
        item.label = menu_item[0]
        item.set_callback(grab_json_collections,
                          URL_API_MOBILE(menu_item[1] % item_id.split('/')[1]),
                          page=0,
                          collection_position=0)
        item_post_treatment(item)
        yield item
def list_categories(plugin, item_id, **kwargs):
    """List categroies from https://player.stv.tv/categories/."""
    resp = urlquick.get(URL_CATEGORIES_JSON)
    json_parser = json.loads(resp.text)

    # Most popular category
    item = Listitem()
    item.label = Script.localize(30727)
    item.set_callback(list_videos, item_id=item_id, order_by="-views")
    item_post_treatment(item)
    yield item

    # Recently added category
    item = Listitem()
    item.label = Script.localize(30728)
    item.set_callback(list_videos,
                      item_id=item_id,
                      order_by="-availability.from")
    item_post_treatment(item)
    yield item

    # Other categories
    for category_datas in json_parser["results"]:
        item = Listitem()
        item.label = category_datas["name"]
        item.art["thumb"] = item.art["landscape"] = category_datas["images"][
            "_filepath"]
        item.set_callback(list_programs,
                          item_id=item_id,
                          category_guid=category_datas["guid"])
        item_post_treatment(item)
        yield item
def ask_to_delete_error_fav_item(params):
    """
    Suggest user to delete
    the fav item that trigger the error
    """
    r = xbmcgui.Dialog().yesno(Script.localize(LABELS['Information']),
                               Script.localize(30807))
    if r:
        remove_favourite_item(plugin=None, item_hash=params['item_hash'])
def grab_json_collections(plugin,
                          json_url,
                          page=0,
                          collection_position=None,
                          **kwargs):
    plugin.add_sort_methods(xbmcplugin.SORT_METHOD_UNSORTED)
    r = urlquick.get(json_url, params={'platform': 'apps', 'page': str(page)})
    j = json.loads(r.text)
    cnt = -1
    items = []
    if 'collections' in j:
        collections = j['collections']
    else:
        collections = [j]
    for collection in collections:
        cnt = cnt + 1
        next_page_item = None
        if 'cursor' in collection:
            if 'next' in collection['cursor']:
                next_ = collection['cursor']['next']
                if next_:
                    next_page_item = Listitem.next_page(
                        json_url, page=next_, collection_position=cnt)

        # If we are not in page 0, directly print items
        if collection_position is not None and cnt == collection_position:
            return list_generic_items(plugin, collection['items'],
                                      next_page_item)

        item = Listitem()
        if set_item_callback_based_on_type(item, collection['type'],
                                           collection, next_page_item):
            items.append(item)

    if 'item' in j:
        if 'program_path' in j['item'] or 'url_complete' in j['item']:
            if 'program_path' in j['item']:
                path = j['item']['program_path']
            elif 'url_complete' in j['item']:
                path = j['item']['url_complete']
            menu_items = [
                (Script.localize(30701),
                 '/generic/taxonomy/%s/contents'),  # All videos
                (Script.localize(30717), '/apps/regions/%s/programs'
                 )  # All programs
            ]
            for menu_item in menu_items:
                item = Listitem()
                item.label = menu_item[0]
                item.set_callback(grab_json_collections,
                                  URL_API_MOBILE(menu_item[1] % path),
                                  page=0,
                                  collection_position=0)
                item_post_treatment(item)
                items.append(item)

    return items
def error_handler(exception):
    """
    This function is called each time
    run() trigger an Exception
    """
    params = entrypoint_utils.get_params_in_query(sys.argv[2])

    # If it's an HTTPError
    if isinstance(exception, urlquick.HTTPError):
        code = exception.code
        msg = exception.msg
        # hdrs = exception.hdrs
        # url = exception.filename
        Script.log(
            'urlquick.get() failed with HTTPError code {} with message "{}"'.
            format(code, msg, lvl=Script.ERROR))

        # Build dialog message
        dialog_message = msg
        if 'http_code_' + str(code) in LABELS:
            dialog_message = Script.localize(LABELS['http_code_' + str(code)])

        # Build dialog title
        dialog_title = Script.localize(
            LABELS['HTTP Error code']) + ' ' + str(code)

        # Show xbmc dialog
        xbmcgui.Dialog().ok(dialog_title, dialog_message)

        # If error code is in avoid_log_uploader, then return
        # Else, let log_uploader run
        avoid_log_uploader = [403, 404]
        if code in avoid_log_uploader:
            return

    # If we come from fav menu we
    # suggest user to delete this item
    if 'from_fav' in params:
        fav.ask_to_delete_error_fav_item(params)

    # Else, we ask the user if he wants
    # to share his log to addon devs
    elif Script.setting.get_boolean('log_pop_up'):
        ask_to_share_log = True
        log_exceptions = [
            'No items found', 'Youtube-DL: Video geo-restricted by the owner'
        ]
        for log_exception in log_exceptions:
            if log_exception in str(exception):
                ask_to_share_log = False

        if ask_to_share_log:
            log_uploader = importlib.import_module(
                'resources.lib.log_uploader')
            log_uploader.ask_to_share_log()
Beispiel #10
0
def connect_openvpn(config, restart=False, sudopassword=None):
    with storage.PersistentDict('vpn') as db:
        Script.log('OpenVPN: Connecting OpenVPN configuration: [%s]' % config)

        if Script.setting.get_boolean('vpn.sudo') and \
                Script.setting.get_boolean('vpn.sudopsw') and sudopassword is None:

            keyboard = xbmc.Keyboard(default='',
                                     heading=Script.localize(30353),
                                     hidden=True)
            keyboard.doModal()
            if keyboard.isConfirmed():
                sudopassword = keyboard.getText()

        openvpn = vpnlib.OpenVPN(
            Script.setting.get_string('vpn.openvpnfilepath'),
            config,
            ip=ip,
            port=port,
            args=Script.setting.get_string('vpn.args'),
            sudo=Script.setting.get_boolean('vpn.sudo'),
            sudopwd=sudopassword,
            debug=True)

        try:
            if restart:
                openvpn.disconnect()
                db['status'] = "disconnected"
            openvpn.connect()
            Script.notify(
                "OpenVPN",
                Script.localize(30354),
                display_time=3000)

            db['status'] = "connected"
        except vpnlib.OpenVPNError as exception:
            if exception.errno == 1:
                db['status'] = "connected"

                if xbmcgui.Dialog().yesno(
                        'OpenVPN',
                        Script.localize(30356),
                        Script.localize(30357)):

                    Script.log('OpenVPN: User has decided to restart OpenVPN')
                    connect_openvpn(config, True, sudopassword)
                else:
                    Script.log(
                        'OpenVPN: User has decided not to restart OpenVPN')
            else:
                xbmcgui.Dialog().ok(
                    'OpenVPN',
                    Script.localize(30358))
                db['status'] = "failed"
        db.flush()
def add_vpn_context(item):
    with storage.PersistentDict('vpn') as db:
        vpn_label = Script.localize(LABELS['Connect VPN'])
        if 'status' in db:
            if db['status'] == 'connected':
                vpn_label = Script.localize(LABELS['Disconnect VPN'])
        else:
            db['status'] = 'disconnected'
            db.flush()

        item.context.script(vpn_item_callback, vpn_label)
Beispiel #12
0
def add_context_menus_to_item(item,
                              item_id,
                              item_index,
                              menu_id,
                              menu_len,
                              is_playable=False,
                              item_infos={}):
    """Add basic context menus to the item

    Args:
        plugin (codequick.script.Script)
        item (codequick.listing.Listitem): Item for which we want to add context menus
        item_id (str): Id of the item
        item_index (int): Index of the item
        menu_id (str): Menu to get (e.g. root)
        menu_len (int): Length of the item menu
    """

    # Move up
    if item_index > 0:
        item.context.script(move_item,
                            Script.localize(30501),
                            direction='up',
                            item_id=item_id,
                            menu_id=menu_id)

    # Move down
    if item_index < menu_len - 1:
        item.context.script(move_item,
                            Script.localize(30500),
                            direction='down',
                            item_id=item_id,
                            menu_id=menu_id)

    # Hide
    item.context.script(hide_item,
                        Script.localize(30502),
                        item_id=item_id,
                        menu_id=menu_id)

    # delete_for_submission_start
    # Connect/Disconnect VPN
    add_vpn_context(item)
    # delete_for_submission_end

    # Add to add-on favourites
    item.context.script(fav.add_item_to_favourites,
                        Script.localize(30800),
                        is_playable=is_playable,
                        item_infos=item_infos)

    return
Beispiel #13
0
def ask_to_delete_error_fav_item(item_hash):
    """Callback function if a favourite item trigger an error

    Suggest user to delete
    the fav item that trigger an error

    Args:
        item_hash (str): Item hash that trigger an error
    """

    r = xbmcgui.Dialog().yesno(Script.localize(30600), Script.localize(30807))
    if r:
        remove_favourite_item(plugin=None, item_hash=item_hash)
Beispiel #14
0
def favourites(plugin, start=0, **kwargs):
    """Build 'favourites' menu of the addon ('favourites' menu callback function)

    Args:
        plugin (codequick.script.Script)
        start (int): Index of the menu starting item (multiple pages support)
        **kwargs: Arbitrary keyword arguments
    Returns:
        Iterator[codequick.listing.Listitem]: Kodi 'favourites' menu
    """

    # Get sorted items
    sorted_menu = []
    fav_dict = fav.get_fav_dict_from_json()
    menu = []
    for item_hash, item_dict in list(fav_dict['items'].items()):
        item = (item_dict['params']['order'], item_hash, item_dict)
        menu.append(item)

    # We sort the menu according to the item_order values
    sorted_menu = sorted(menu, key=lambda x: x[0])

    # Notify the user if there is no item in favourites
    if len(sorted_menu) == 0:
        Script.notify(Script.localize(30033), Script.localize(30806), display_time=7000)
        yield False

    # Add each item in the listing
    cnt = 0

    for index, (item_order, item_hash, item_dict) in enumerate(sorted_menu):
        if index < start:
            continue

        # If more thant 30 items add a new page
        if cnt == 30:
            yield Listitem().next_page(start=index)
            break

        cnt += 1

        item_dict['params']['from_fav'] = True
        item_dict['params']['item_hash'] = item_hash

        try:
            # Build item from dict
            item = Listitem.from_dict(**item_dict)

            # Generate a valid callback
            url = build_kodi_url(item_dict['callback'], item_dict['params'])
            item.set_callback(url, is_folder=item_dict['params']['is_folder'], is_playbale=item_dict['params']['is_playable'])
Beispiel #15
0
def guess_fav_prefix(item_id):
    """Keep in memory the current main category (e.g. Live TV, Catch-up TV, ...)
    This category label will be used as a prefix when the user add a favourite

    """
    prefixes = {
        'root': '',
        'live_tv': Script.localize(30030),
        'replay': Script.localize(30031),
        'websites': Script.localize(30032)
    }
    if item_id in prefixes:
        s = mem_storage.MemStorage('fav')
        s['prefix'] = prefixes[item_id]
def save_tv_integration_settings(j):
    """Save tv integration settings dict in json file

    Args:
        j (dict): Tv integration dict to save
    """
    try:
        with open(TV_INTEGRATION_SETTINGS_FP, 'w') as f:
            json.dump(j, f, indent=4)
    except Exception as e:
        Script.notify(Script.localize(30270), Script.localize(30276))
        Script.log('Failed to save TV integration settings (%s)',
                   e,
                   lvl=Script.ERROR)
def disconnect_openvpn():
    Script.log('OpenVPN: Disconnecting OpenVPN')
    try:
        vpnlib.disconnect(IP, PORT)
        Script.log('OpenVPN: Disconnect OpenVPN successful')
        Script.notify(
            "OpenVPN",
            Script.localize(30355),
            display_time=3000)
    except Exception as e:
        xbmcgui.Dialog().ok(
            'OpenVPN',
            Script.localize(30362))
        Script.log('OpenVPN: OpenVPN error: ' + str(e))
def ask_to_share_log():
    """
    Ask the if he wants to share his log
    directly by mail with a QR code
    or by sharing the pastebin URL by mail,
    on github or forum
    """
    r = xbmcgui.Dialog().yesno(Script.localize(LABELS['Information']),
                               Script.localize(30860))
    if not r:
        return

    if not xbmcvfs.exists(PROFILE):
        xbmcvfs.mkdirs(PROFILE)

    succes, data = read_log(LOGFILE)
    print_error = False
    error_message = ""
    if succes:
        content = clean_log(data)
        succes, data = post_log(content)
        if succes:
            imagefile = os.path.join(xbmc.translatePath(PROFILE),
                                     '%s.png' % str(data.split('/')[-1]))
            message = Script.localize(30861)
            message = message.replace("URL_TO_REPLACE", data)
            mail_url = 'mailto:[email protected]?subject=Kodi%20log&body=' + data
            qrIMG = pyqrcode.create(mail_url)
            qrIMG.png(imagefile, scale=10)

            qr = QRCode("script-loguploader-main.xml",
                        CWD,
                        "default",
                        image=imagefile,
                        text=message)
            qr.doModal()
            del qr
            xbmcvfs.delete(imagefile)
        else:
            print_error = True
            error_message = data
    else:
        print_error = True
        error_message = data

    if print_error:
        xbmcgui.Dialog().ok(Script.localize(LABELS['Information']),
                            Script.localize(30862) + ': ' + error_message)

    return
def outre_mer_root(plugin, region_path, **kwargs):
    menu_items = [
        (Script.localize(30704),
         '/generic/taxonomy/%s/contents'),  # Last videos
        (Script.localize(30717), '/apps/regions/%s/programs')  # All programs
    ]
    for menu_item in menu_items:
        item = Listitem()
        item.label = menu_item[0]
        item.set_callback(grab_json_collections,
                          URL_API_MOBILE(menu_item[1] % region_path),
                          page=0,
                          collection_position=0)
        item_post_treatment(item)
        yield item
Beispiel #20
0
def select_ovpn():
    ovpnfiles = {}
    with storage.PersistentDict('vpn') as db:
        try:
            ovpnfiles = db['ovpnfiles']
        except KeyError:
            db['ovpnfiles'] = ovpnfiles
        db.flush()

    if len(ovpnfiles) == 0:
        return None

    else:
        response = vpnlib.is_running(ip, port)
        Script.log('OpenVPN: Response from is_running: [%s] [%s] [%s]' %
                   (response[0], response[1], response[2]))
        if response[0]:
            # Le VPN est connecté
            disconnect_openvpn()

        configs = []
        ovpnfileslist = []
        for name, configfilepath in list(ovpnfiles.items()):
            configs.append(name)
            ovpnfileslist.append(configfilepath)

        idx = xbmcgui.Dialog().select(
            Script.localize(LABELS['Select OpenVPN configuration to run']),
            configs)
        if idx >= 0:
            Script.log('OpenVPN: Select conf: [%s]' % ovpnfileslist[idx])
            return ovpnfileslist[idx]
        else:
            return ''
Beispiel #21
0
def process_mixed_product(item):
    title = ensure_native_str(item['title'], 'utf-8')
    if item['pricingPlans'][0]['availability']:
        if item['pricingPlans'][0]['availability']['plus']:
            if HIDE_PREMIUM:
                return False
            title += ' |%s|' % ensure_native_str(Script.localize(30308),
                                                 'utf-8')
    else:
        return False
    itemId = item['id']
    productType = item['productType']
    liz = Listitem()
    liz.label = title
    liz.art["poster"] = formatimg(item['image']['posterImage'], 'poster')
    liz.art["fanart"] = formatimg(item['image']['thumbnailImage'], 'fanart')
    if 'logoTitleImage' in item:
        liz.art["banner"] = formatimg(item['logoTitleImage'], 'banner')
    aired = str(item['createdDate'].split('T')[0])
    liz.info.date(aired, "%Y-%m-%d")
    liz.info['plot'] = ensure_native_str(item['description'], 'utf-8')
    if productType == 'MOVIE':
        liz.info['duration'] = item['duration']
        liz.info['mediatype'] = "movie"
        liz.set_callback(play_video, streamId=itemId)
    elif productType == 'SHOW':
        liz.info['mediatype'] = "show"
        liz.set_callback(BROWSE_SEASONS, showId=itemId)
    CONTEXT_MENU2(liz, itemId, title, productType)
    return liz
Beispiel #22
0
def CONTEXT_MENU2(item, itemID, title, productType):
    item.context.script(export_to_library,
                        Script.localize(30211),
                        title=title,
                        itemID=itemID,
                        productType=productType)
    return
def select_ovpn():
    ovpnfiles = {}
    with storage.PersistentDict('vpn') as db:
        try:
            ovpnfiles = db['ovpnfiles']
        except KeyError:
            db['ovpnfiles'] = ovpnfiles
        db.flush()

    if len(ovpnfiles) == 0:
        return None

    configs = []
    ovpnfileslist = []
    for name, configfilepath in list(ovpnfiles.items()):
        configs.append(name)
        ovpnfileslist.append(configfilepath)

    idx = xbmcgui.Dialog().select(
        Script.localize(30352),
        configs)
    if idx < 0:
        return ''

    Script.log('OpenVPN: Select conf: [%s]' % ovpnfileslist[idx])
    return ovpnfileslist[idx]
def delete_ovpn(*args, **kwargs):
    ovpnfiles = {}
    with storage.PersistentDict('vpn') as db:
        try:
            ovpnfiles = db['ovpnfiles']
        except KeyError:
            db['ovpnfiles'] = ovpnfiles
        db.flush()

    if len(ovpnfiles) == 0:
        return None

    configs = []
    ovpnfileslist = []
    for name, configfilepath in list(ovpnfiles.items()):
        configs.append(name)
        ovpnfileslist.append(configfilepath)

    idx = xbmcgui.Dialog().select(
        Script.localize(30360),
        configs)

    if idx < 0:
        return ''

    Script.log('Select: [%s]' % ovpnfileslist[idx])
    new_ovpnfiles = {}
    for name, configfilepath in list(ovpnfiles.items()):
        if configfilepath != ovpnfileslist[idx]:
            new_ovpnfiles[name] = configfilepath
    with storage.PersistentDict('vpn') as db:
        db['ovpnfiles'] = new_ovpnfiles
        db.flush()
def get_quality_YTDL(download_mode=False):
    # If not download mode get the 'quality' setting
    if not download_mode:
        quality = Script.setting.get_string('quality')
        if quality == 'BEST':
            return 3
        elif quality == 'DEFAULT':
            return 3
        elif quality == 'DIALOG':
            youtubeDL_qualiy = ['SD', '720p', '1080p', 'Highest Available']
            seleted_item = xbmcgui.Dialog().select(
                Script.localize(LABELS['choose_video_quality']),
                youtubeDL_qualiy)
            return seleted_item

        else:
            return 3

    # Else we need to use the 'dl_quality' setting
    elif download_mode:
        dl_quality = Script.setting.get_string('dl_quality')
        if dl_quality == 'SD':
            return 0
        if dl_quality == '720p':
            return 1
        if dl_quality == '1080p':
            return 2
        if dl_quality == 'Highest available':
            return 3
        return 3
Beispiel #26
0
def get_item_label(item_id):
    label = item_id
    if item_id in LABELS:
        label = LABELS[item_id]
        if isinstance(label, int):
            label = Script.localize(label)
    return label
Beispiel #27
0
def add_context_menus_to_item(item,
                              item_id,
                              item_index,
                              menu_id,
                              menu_len,
                              is_playable=False,
                              item_infos={}):
    """Add basic context menus to the item

    Args:
        plugin (codequick.script.Script)
        item (codequick.listing.Listitem): Item for which we want to add context menus
        item_id (str): Id of the item
        item_index (int): Index of the item
        menu_id (str): Menu to get (e.g. root)
        menu_len (int): Length of the item menu
    """

    # Move up
    if item_index > 0:
        item.context.script(move_item,
                            Script.localize(LABELS['Move up']),
                            direction='up',
                            item_id=item_id,
                            menu_id=menu_id)

    # Move down
    if item_index < menu_len - 1:
        item.context.script(move_item,
                            Script.localize(LABELS['Move down']),
                            direction='down',
                            item_id=item_id,
                            menu_id=menu_id)

    # Hide
    item.context.script(hide_item,
                        Script.localize(LABELS['Hide']),
                        item_id=item_id,
                        menu_id=menu_id)

    # Add to add-on favourites
    item.context.script(fav.add_item_to_favourites,
                        Script.localize(LABELS['Add to add-on favourites']),
                        is_playable=is_playable,
                        item_infos=item_infos)

    return
Beispiel #28
0
def disconnect_openvpn():
    with storage.PersistentDict('vpn') as db:
        Script.log('OpenVPN: Disconnecting OpenVPN')
        try:
            db['status'] = "disconnecting"
            response = vpnlib.is_running(ip, port)
            if response[0]:
                vpnlib.disconnect(ip, port)
                if response[1] is not None:
                    Script.notify('OpenVPN', Script.localize(30355))
            db['status'] = "disconnected"
            Script.log('OpenVPN: Disconnect OpenVPN successful')
        except vpnlib.OpenVPNError as exception:
            xbmcgui.Dialog().ok('OpenVPN', Script.localize(30358))
            Script.log('OpenVPN: OpenVPN error: ' + str(exception))
            db['status'] = "failed"
        db.flush()
Beispiel #29
0
def CONTEXT_MENU(item, itemID, profile_id, profile_type, is_master):
    item.context.script(add_to_my_list,
                        Script.localize(30212),
                        itemID=itemID,
                        profile_id=profile_id,
                        profile_type=profile_type,
                        is_master=is_master)
    return
Beispiel #30
0
def guess_fav_prefix(item_id):
    """Keep in memory the current main category (e.g. Live TV, Catch-up TV, ...)
    This category label will be used as a prefix when the user add a favourite

    """

    prefix = 'empty'
    if item_id == 'live_tv':
        prefix = Script.localize(30030)
    elif item_id == 'replay':
        prefix = Script.localize(30031)
    elif item_id == 'websites':
        prefix = Script.localize(30032)
    elif item_id == 'root':
        prefix = ''
    if prefix != 'empty':
        s = mem_storage.MemStorage('fav')
        s['prefix'] = prefix