Пример #1
0
def lists_trakt_my_lists():
    lists = trakt.trakt_get_lists()
    items = []
    for list in lists:
        name = list["name"]
        user = list["user"]["username"]
        slug = list["ids"]["slug"]
        items.append({
            'label': name,
            'path': plugin.url_for("lists_trakt_show_list", user = user, slug = slug),
            'context_menu': [
                (
                    _("Scan item to library"),
                    "RunPlugin({0})".format(plugin.url_for("lists_trakt_add_all_to_library", user=user, slug=slug))
                ),
                (
                    "{0} ({1})".format(_("Play"), _("Random").lower()),
                    "RunPlugin({0})".format(plugin.url_for("lists_trakt_play_random", user=user, slug=slug))
                )
            ],
            'icon': get_icon_path("traktmylists"),
            'thumbnail': get_icon_path("traktmylists"),
        })
        fanart = plugin.addon.getAddonInfo('fanart')
        for item in items:
            item['properties'] = {'fanart_image' : get_background_path()}
    if FORCE == True: return plugin.finish(items=items, sort_methods=SORT, view_mode=VIEW)
    else: return plugin.finish(items=items, sort_methods=SORT)
Пример #2
0
def update_players():
    url = plugin.get_setting(SETTING_PLAYERS_UPDATE_URL)
    if updater.update_players(url):
        plugin.notify(msg=_('Players'), title=_('Updated'), delay=1000, image=get_icon_path("player"))
    else:
        plugin.notify(msg=_('Players update'), title=_('Failed'), delay=1000, image=get_icon_path("player"))
    plugin.open_settings()
Пример #3
0
def tv():
    """ TV directory """
    items = [
        {
            'label': _("Search"),
            'path': plugin.url_for(tv_search),
            'icon': get_icon_path("search"),
        },
        {
            'label': _("Genres"),
            'path': plugin.url_for(tv_genres),
            'icon': get_icon_path("genres"),
        },
        {
            'label': _("Popular"),
            'path': plugin.url_for(tv_most_popular, page='1'),
            'icon': get_icon_path("popular"),
        },
        {
            'label': _("On the air"),
            'path': plugin.url_for(tv_now_playing, page='1'),
            'icon': get_icon_path("tv"),
        },
        {
            'label': _("Top rated"),
            'path': plugin.url_for(tv_top_rated, page='1'),
            'icon': get_icon_path("top_rated"),
        },
    ]
    
    fanart = plugin.addon.getAddonInfo('fanart')
    for item in items:
        item['properties'] = {'fanart_image' : fanart}

    return items
Пример #4
0
def root():
    """ Root directory """
    items = [
        {
            'label': _("Movies"),
            'path': plugin.url_for("movies"),
            'icon': get_icon_path("movies"),
        },
        {
            'label': _("TV Shows"),
            'path': plugin.url_for("tv"),
            'icon': get_icon_path("tv"),
        },
        {
            'label': _("Live"),
            'path': plugin.url_for("live"),
            'icon': get_icon_path("live"),
        },
        {
            'label': _("Lists"),
            'path': plugin.url_for("lists"),
            'icon': get_icon_path("lists"),
        }
    ]
    
    fanart = plugin.addon.getAddonInfo('fanart')
    for item in items:
        item['properties'] = {'fanart_image' : fanart}
        
    return items
Пример #5
0
def update_players():
    url = plugin.get_setting(SETTING_PLAYERS_UPDATE_URL, converter=unicode)
    if updater.update_players(url):
        plugin.notify(msg=_("Players"), title=_("Updated"), delay=1000, image=get_icon_path("player"))
    else:
        plugin.notify(msg=_("Players update"), title=_("Failed"), delay=1000, image=get_icon_path("player"))
    plugin.open_settings()
Пример #6
0
def total_setup():
    plugin.notify(msg="Total Setup", title="Started", delay=1000, image=get_icon_path("metalliq"))
    if player_setup() == True:
        pass
    if source_setup() == True:
        pass
    plugin.notify(msg="Total Setup", title="Completed", delay=5000, image=get_icon_path("metalliq"))
Пример #7
0
def total():
    xbmc.executebuiltin('SetProperty(running,totalmeta,home)')
    plugin.notify(msg=_('Automated install'), title=_('Started'), delay=1000, image=get_icon_path("meta"))
    url = "https://api.github.com/repos/OpenELEQ/unofficial-meta-players-verified/zipball"
    if updater.update_players(url):
        plugin.notify(msg=_('Players'), title=_('Updated'), delay=1000, image=get_icon_path("player"))
    else:
        plugin.notify(msg=_('Players update'), title=_('Failed'), delay=1000, image=get_icon_path("player"))
    xbmc.executebuiltin("RunPlugin(plugin://plugin.video.meta/settings/players/all/)")
    movielibraryfolder = plugin.get_setting(SETTING_MOVIES_LIBRARY_FOLDER)
    try:
        meta.library.movies.auto_movie_setup(movielibraryfolder)
        plugin.notify(msg=_('Movies library folder'), title=_('Setup Done'), delay=1000, image=get_icon_path("movies"))
    except:
        plugin.notify(msg=_('Movies library folder'), title=_('Setup Failed'), delay=1000, image=get_icon_path("movies"))
    tvlibraryfolder = plugin.get_setting(SETTING_TV_LIBRARY_FOLDER)
    try:
        meta.library.tvshows.auto_tv_setup(tvlibraryfolder)
        plugin.notify(msg=_('TVShows library folder'), title=_('Setup Done'), delay=1000, image=get_icon_path("tv"))
    except:
        plugin.notify(msg=_('TVShows library folder'), title=_('Setup Failed'), delay=1000, image=get_icon_path("player"))
    xbmc.sleep(5000)
    while xbmc.getCondVisibility("Window.IsActive(dialoginfo)"):
        if not xbmc.getCondVisibility("Window.IsActive(dialoginfo)"):
            break
    plugin.notify(msg=_('Automated install'), title=_('Completed'), delay=5000, image=get_icon_path("meta"))
    xbmc.executebuiltin('ClearProperty(running,home)')
Пример #8
0
def lists_trakt_liked_lists(page):
    lists, pages = trakt.trakt_get_liked_lists(page)
    items = []
    for list in lists:
        info = list["list"]
        name = info["name"]
        user = info["user"]["username"]
        slug = info["ids"]["slug"]
        items.append({
            'label': name,
            'path': plugin.url_for("lists_trakt_show_list", user = user, slug = slug),
            'context_menu': [
                (
                    _("Add list to library"),
                    "RunPlugin({0})".format(plugin.url_for("lists_trakt_add_all_to_library", user=user, slug=slug))
                )
            ],
            'icon': get_icon_path("traktlikedlists"),
        })
    if pages > page:
        items.append({
            'label': _("Next >>"),
            'path': plugin.url_for("lists_trakt_liked_lists", page = int(page) + 1),
            'icon': get_icon_path("traktlikedlists"),
        })
    if FORCE == True: return plugin.finish(items=items, sort_methods=SORT, view_mode=VIEW)
    else: return plugin.finish(items=items, sort_methods=SORT)
Пример #9
0
def player_setup():
    xbmc.executebuiltin("SetProperty(running,totalmetalliq,home)")
    url = "https://api.github.com/repos/OpenELEQ/verified-metalliq-players/zipball"
    if updater.update_players(url):
        plugin.notify(msg=_("Players"), title=_("Updated"), delay=1000, image=get_icon_path("player"))
    else:
        plugin.notify(msg=_("Players update"), title=_("Failed"), delay=1000, image=get_icon_path("player"))
    xbmc.executebuiltin("RunPlugin(plugin://plugin.video.metalliq/settings/players/all/)")
    xbmc.executebuiltin("ClearProperty(running,home)")
    return True
Пример #10
0
def root_search():
    """ Search directory """
    items = [
        {"label": "All", "path": plugin.url_for(root_search_term, page="1"), "icon": get_icon_path("search")},
        {
            "label": _("Movies") + ": " + _("Search (Trakt)"),
            "path": plugin.url_for("trakt_movies_search", page="1"),
            "icon": get_icon_path("movies"),
        },
        {
            "label": _("Movies") + ": " + _("Search (TMDb)"),
            "path": plugin.url_for("tmdb_movies_search", page="1"),
            "icon": get_icon_path("movies"),
        },
        {
            "label": _("TV shows") + ": " + _("Search (Trakt)"),
            "path": plugin.url_for("trakt_tv_search", page="1"),
            "icon": get_icon_path("tv"),
        },
        {
            "label": _("TV shows") + ": " + _("Search (TMDb)"),
            "path": plugin.url_for("tmdb_tv_search"),
            "icon": get_icon_path("tv"),
        },
        {
            "label": _("TV shows") + ": " + _("Search (TVDb)"),
            "path": plugin.url_for("tvdb_tv_search"),
            "icon": get_icon_path("tv"),
        },
        {
            "label": _("Music") + ": " + _("Search artist"),
            "path": plugin.url_for("music_search_artist"),
            "icon": get_icon_path("music"),
        },
        {
            "label": _("Music") + ": " + _("Search album"),
            "path": plugin.url_for("music_search_album"),
            "icon": get_icon_path("music"),
        },
        {
            "label": _("Music") + ": " + _("Search track"),
            "path": plugin.url_for("music_search_track"),
            "icon": get_icon_path("music"),
        },
        {"label": _("Live") + ": " + _("Search"), "path": plugin.url_for("live_search"), "icon": get_icon_path("live")},
        {
            "label": _("Lists") + ": " + _("Search"),
            "path": plugin.url_for("lists_trakt_search_for_lists"),
            "icon": get_icon_path("lists"),
        },
    ]
    fanart = plugin.addon.getAddonInfo("fanart")
    for item in items:
        item["properties"] = {"fanart_image": get_background_path()}
    return items
Пример #11
0
def settings_set_players(media):
    playericon = get_icon_path("player")
    if media == "all":
        medias = ["movies","tvshows","live"]
        for media in medias:
            mediatype = media.replace('es','e ').replace('ws','w ').replace('all','').replace('ve','ve ')
            players = get_players(media)
            selected = [p.id for p in players]
            if selected is not None:
                if media == "movies":
                    plugin.set_setting(SETTING_MOVIES_ENABLED_PLAYERS, selected)
                elif media == "tvshows":
                    plugin.set_setting(SETTING_TV_ENABLED_PLAYERS, selected)
                elif media == "live":
                    plugin.set_setting(SETTING_LIVE_ENABLED_PLAYERS, selected)
                else:
                    raise Exception("invalid parameter %s" % media)
            plugin.notify(msg=_('All '+mediatype+'players'), title=_('Enabled'), delay=1000, image=get_icon_path("player"))
        plugin.notify(msg=_('All players'), title=_('Enabled'), delay=1000, image=get_icon_path("player"))
        return
    else:
        mediatype = media.replace('es','e ').replace('ws','w ').replace('all','').replace('ve','ve ')
        players = get_players(media)
        players = sorted(players,key=lambda player: player.clean_title.lower())
        version = xbmc.getInfoLabel('System.BuildVersion')
        if version.startswith('16') or version.startswith('17'):
            msg = "Do you want to enable all "+mediatype+"players?"
            if dialogs.yesno(_("Enable all "+mediatype+"players"), _(msg)):
                selected = [p.id for p in players]
            else:
                result = dialogs.multiselect(_("Select "+mediatype+"players to enable"), [p.clean_title for p in players])
                if result is not None:
                    selected = [players[i].id for i in result]
        else:
            selected = None
            msg = "Kodi 16 is required for multi-selection. Do you want to enable all "+mediatype+"players instead?"
            if dialogs.yesno(_("Enable all "+mediatype+"players"), _(msg)):
                selected = [p.id for p in players]
            else:
                result = dialogs.multichoice(_("Select "+mediatype+"players to enable"), [p.clean_title for p in players])
                if result is not None:
                    selected = [players[i].id for i in result]
        if selected is not None:
            if media == "movies":
                plugin.set_setting(SETTING_MOVIES_ENABLED_PLAYERS, selected)
            elif media == "tvshows":
                plugin.set_setting(SETTING_TV_ENABLED_PLAYERS, selected)
            elif media == "live":
                plugin.set_setting(SETTING_LIVE_ENABLED_PLAYERS, selected)
            else:
                raise Exception("invalid parameter %s" % media)
        plugin.notify(msg=_('All '+mediatype+'players'), title=_('Updated'), delay=1000, image=get_icon_path("player"))
Пример #12
0
def trakt_my_movies():
    items = [
        {
            'label': "{0} ({1})".format(_("Library"), "collection"),
            'path': plugin.url_for("trakt_movies_collection"),
            'icon': get_icon_path("traktcollection"),
            'context_menu': [
                (
                    _("Scan item to library"),
                    "RunPlugin({0})".format(plugin.url_for("trakt_movies_collection_to_library"))
                ),
                (
                    "{0} ({1})".format(_("Play"), _("Random").lower()),
                    "RunPlugin({0})".format(plugin.url_for("trakt_movies_play_random_collection"))
                )
            ]
        },
        {
            'label': "{0} {1} ({2})".format(_("Unwatched"), _("movies"), "watchlist"),
            'path': plugin.url_for("trakt_movies_watchlist"),
            'icon': get_icon_path("traktwatchlist"),
            'context_menu': [
                (
                    _("Scan item to library"),
                    "RunPlugin({0})".format(plugin.url_for("trakt_movies_watchlist_to_library"))
                ),
                (
                    "{0} ({1})".format(_("Play"), _("Random").lower()),
                    "RunPlugin({0})".format(plugin.url_for("trakt_movies_play_random_watchlist"))
                )
            ]
        },
        {
            'label':"{0} ({1})".format(_("Find similar"), "recommendations"),
            'path': plugin.url_for("trakt_movies_recommendations"),
            'icon': get_icon_path("traktrecommendations"),
            'context_menu': [
                (
                    _("Scan item to library"),
                    "RunPlugin({0})".format(plugin.url_for("trakt_movies_recommendations_to_library"))
                ),
                (
                    "{0} ({1})".format(_("Play"), _("Random").lower()),
                    "RunPlugin({0})".format(plugin.url_for("trakt_movies_play_random_recommendation"))
                )
            ]
        }
    ]
    for item in items: item['properties'] = {'fanart_image' : get_background_path()}
    if FORCE == True: plugin.finish(items=items, sort_methods=SORT, view_mode=VIEW)
    else: return plugin.finish(items=items, sort_methods=SORT)
Пример #13
0
def lists_search_for_lists_term(term, page):
    lists, pages = trakt.search_for_list(term, page)
    page = int(page)
    pages = int(pages)
    items = []
    for list in lists:
        if "list" in list:
            list_info = list["list"]
        else:
            continue
        name = list_info["name"]
        user = list_info["username"]
        slug = list_info["ids"]["slug"]
        total = list_info["item_count"]

        info = {}
        info['title'] = name
        if "description" in list_info: info["plot"] = list_info["description"]
        else: info["plot"] = _("No description available")
        if user != None and total != None and total != 0:
            items.append({
                'label': "{0} - {1} ({2})".format(to_utf8(name), to_utf8(user), total),
                'path': plugin.url_for("lists_trakt_show_list", user=user, slug=slug),
                'context_menu': [
                    (
                        _("Scan item to library"),
                        "RunPlugin({0})".format(plugin.url_for("lists_trakt_add_all_to_library", user=user, slug=slug))
                    ),
                   (
                        "{0} ({1})".format(_("Play"), _("Random").lower()),
                        "RunPlugin({0})".format(plugin.url_for("lists_trakt_play_random", user=user, slug=slug))
                    )
                ],
                'info': info,
                'icon': get_icon_path("traktlikedlists"),
                'thumbnail': get_icon_path("traktlikedlists"),
            })
            fanart = plugin.addon.getAddonInfo('fanart')
            for item in items:
                item['properties'] = {'fanart_image' : get_background_path()}
    if pages > page:
        items.append({
            'label': _("Next page").format() + "  >>  (%s/%s)" % (page + 1, pages),
            'path': plugin.url_for("lists_search_for_lists_term", term = term, page=page + 1),
            'icon': get_icon_path("item_next"),
            'thumbnail': get_icon_path("item_next"),
        })
    if FORCE == True: return plugin.finish(items=items, sort_methods=SORT, view_mode=VIEW)
    else: return plugin.finish(items=items, sort_methods=SORT)
Пример #14
0
def music_artist(name):
    name = to_utf8(name)
    items = [
        {
            "label": _("Tracks"),
            "path": plugin.url_for("music_artist_tracks", artist_name=name),
            "icon": get_icon_path("music"),
        },
        {
            "label": _("Albums"),
            "path": plugin.url_for("music_artist_albums", artist_name=name),
            "icon": get_icon_path("music"),
        },
    ]
    return items
Пример #15
0
def lists():
    """ Lists directory """
    items = [
        {
            'label': _("Trakt liked lists"),
            'path': plugin.url_for("lists_trakt_liked_lists"),
            'icon': get_icon_path("tv"),  # TODO
        },
        {
            'label': _("Trakt my lists"),
            'path': plugin.url_for("lists_trakt_my_lists"),
            'icon': get_icon_path("tv"),  # TODO
        }
    ]
    return items
Пример #16
0
def lists_search_for_lists_term(term,page):
    lists, pages = trakt.search_for_list(term, page)
    page = int(page)
    pages = int(pages)
    items = []
    for list in lists:
        if "list" in list:
            list_info = list["list"]
        else:
            continue
        name = list_info["name"]
        user = list_info["username"]
        slug = list_info["ids"]["slug"]

        info = {}
        info['title'] = name
        if "description" in list_info:
            info["plot"] = list_info["description"]
        else:
            info["plot"] = _("No description available")
        if user != None:
            items.append({
                'label': "{0} {1} {2}".format(to_utf8(name), _("by"), to_utf8(user)),
                'path': plugin.url_for("lists_trakt_show_list", user=user, slug=slug),
                'context_menu': [
                    (
                        _("Add list to library"),
                        "RunPlugin({0})".format(plugin.url_for("lists_trakt_add_all_to_library", user=user, slug=slug))
                    )
                ],
                'info': info,
                'icon': get_icon_path("traktlikedlists"),
            })
            fanart = plugin.addon.getAddonInfo('fanart')
            for item in items:
                item['properties'] = {'fanart_image' : get_background_path()}
    if (len(items) < plugin.get_setting(SETTING_TRAKT_PER_PAGE, int) and pages > page):
        page = page + 1
        results = lists_search_for_lists_term(term, page)
        return items + results
    if pages > page:
        items.append({
            'label': _("Next page").format() + "  >>  (%s/%s)" % (page + 1, pages),
            'path': plugin.url_for("lists_search_for_lists_term", term = term, page=page + 1),
            'icon': get_icon_path("traktlikedlists"),
        })
    if FORCE == True: return plugin.finish(items=items, sort_methods=SORT, view_mode=VIEW)
    else: return plugin.finish(items=items, sort_methods=SORT)
Пример #17
0
def toggle_between_skins():
    if xbmc.getCondVisibility("Skin.HasSetting(Contexting)") != True: contexting = False
    else: contexting = True
    if xbmc.getCondVisibility("Skin.HasSetting(Toggling)") != True: toggling = False
    else: toggling = True
    current_skin = str(xbmc.executeJSONRPC('{"jsonrpc":"2.0", "method":"Settings.GetSettingValue","params":{"setting":"lookandfeel.skin"}, "id":1}')).replace('{"id":1,"jsonrpc":"2.0","result":{"value":"','').replace('"}}','')
    primary_skin = plugin.get_setting(SETTING_PRIMARY_SKIN, unicode)
    if primary_skin == "": plugin.set_setting(SETTING_PRIMARY_SKIN, current_skin)
    alternate_skin = plugin.get_setting(SETTING_ALTERNATE_SKIN, unicode)
    if alternate_skin == "":
        if primary_skin != "skin.confluence" and primary_skin != "": plugin.set_setting(SETTING_ALTERNATE_SKIN, "skin.confluence")
        else:
            dialogs.notify(msg="Alternate skin", title="Not set", delay=5000, image=get_icon_path("metalliq"))
            return openSettings(addonid, 5.7)
    if primary_skin != alternate_skin and primary_skin != "" and alternate_skin != "" and xbmc.getCondVisibility('System.HasAddon(%s)' % primary_skin) and xbmc.getCondVisibility('System.HasAddon(%s)' % alternate_skin):
        if current_skin != primary_skin:
            xbmc.executeJSONRPC('{"jsonrpc":"2.0", "method":"Settings.SetSettingValue","params":{"setting":"lookandfeel.skin","value":"%s"}, "id":1}' % primary_skin)
            xbmc.executebuiltin('SetFocus(11)')
            xbmc.executebuiltin('Action(Select)')
        else:
            xbmc.executeJSONRPC('{"jsonrpc":"2.0", "method":"Settings.SetSettingValue","params":{"setting":"lookandfeel.skin","value":"%s"}, "id":1}' % alternate_skin)
            xbmc.executebuiltin('SetFocus(11)')
            xbmc.executebuiltin('Action(Select)')
        xbmc.sleep(2000)
        if contexting == False and xbmc.getCondVisibility("Skin.HasSetting(Contexting)") == True: toggle_context_player()
        elif contexting == True and xbmc.getCondVisibility("Skin.HasSetting(Contexting)") == False: toggle_context_player()
        else: pass
        if toggling == False and xbmc.getCondVisibility("Skin.HasSetting(Toggling)") == True: toggle_preferred_toggle()
        elif toggling == True and xbmc.getCondVisibility("Skin.HasSetting(Toggling)") == False: toggle_preferred_toggle()
        else: pass
Пример #18
0
def setup_library(library_folder):
    if library_folder[-1] != "/":
        library_folder += "/"
    metalliq_playlist_folder = "special://profile/playlists/mixed/MetalliQ/"
    if not xbmcvfs.exists(metalliq_playlist_folder):
        xbmcvfs.mkdir(metalliq_playlist_folder)
    playlist_folder = plugin.get_setting(SETTING_MOVIES_PLAYLIST_FOLDER, converter=str)
    if plugin.get_setting(SETTING_MOVIES_PLAYLIST_FOLDER, converter=str)[-1] != "/":
        playlist_folder += "/"
    # create folders
    if not xbmcvfs.exists(playlist_folder):
        xbmcvfs.mkdir(playlist_folder)
    if not xbmcvfs.exists(library_folder):
        # create folder
        xbmcvfs.mkdir(library_folder)
        # auto configure folder
        msg = _(
            "Would you like to automatically set [COLOR ff0084ff]M[/COLOR]etalli[COLOR ff0084ff]Q[/COLOR] as a movies video source?"
        )
        if dialogs.yesno(_("Library setup"), msg):
            source_thumbnail = get_icon_path("movies")
            source_name = "[COLOR ff0084ff]M[/COLOR]etalli[COLOR ff0084ff]Q[/COLOR] " + _("Movies")
            source_content = '(\'{0}\',\'movies\',\'metadata.themoviedb.org\',\'\',2147483647,1,\'<settings><setting id="RatingS" value="TMDb" /><setting id="certprefix" value="Rated " /><setting id="fanart" value="true" /><setting id="keeporiginaltitle" value="false" /><setting id="language" value="{1}" /><setting id="tmdbcertcountry" value="us" /><setting id="trailer" value="true" /></settings>\',0,0,NULL,NULL)'.format(
                library_folder, LANG
            )
            add_source(source_name, library_folder, source_content, source_thumbnail)
    # return translated path
    return xbmc.translatePath(library_folder)
Пример #19
0
def lists_trakt_add_liked_to_library():
    lists, pages = trakt.trakt_get_liked_lists(1)
    misc_ids = []
    movie_ids = []
    tv_ids = []
    import xbmcgui
    pDialog = xbmcgui.DialogProgress()
    pDialog.create('[COLOR ff0084ff]M[/COLOR]etalli[COLOR ff0084ff]Q[/COLOR]', 'Creating batch import files')
    for page in range(0, int(pages)):
        lists, ignore = trakt.trakt_get_liked_lists(page)
        list_number = 1
        if (pDialog.iscanceled()): return
        percent = (int(page) / int(pages)) * 100
        pDialog.update(int(percent), '{0} {1} of {2} ...        '.format(_("Scanning for new content"), page, pages))
        for list in lists:
            list_number += 1
            pDialog.update(int(percent), '{0} {1} of {2} ...        '.format(_("Scanning for new content"), page, pages), 'list {0} of {1} on page'.format(list_number, len(lists) + 1))
            info = list["list"]
            user = info["user"]["username"]
            slug = info["ids"]["slug"]
            items = lists_trakt_show_list(user, slug)
            list_misc_ids, list_movie_ids, list_tv_ids = batch_find_list_ids(items)
            write_list_id_files(list_misc_ids, list_movie_ids, list_tv_ids, slug, user)
            misc_ids.extend(list_misc_ids)
            movie_ids.extend(list_movie_ids)
            tv_ids.extend(list_tv_ids)
    pDialog.close()
    write_batch_id_files(tv_ids, movie_ids, misc_ids)
    dialogs.notify(msg='Generating', title='.strm-files', delay=3000, image=get_icon_path("metalliq"))
    xbmc.executebuiltin("RunPlugin(plugin://plugin.video.metalliq/movies/batch_add_to_library)")
Пример #20
0
def music_artist(name):
    name = to_utf8(name)
    items = [
        {
            'label': _("Tracks"),
            'path': plugin.url_for("music_artist_tracks", artist_name=name),
            'icon': get_icon_path("music")
        },
        {
            'label': _("Albums"),
            'path': plugin.url_for("music_artist_albums", artist_name=name),
            'icon': get_icon_path("music")
        },
    ]
    if FORCE == True: plugin.set_view_mode(VIEW); return items
    else: return items
Пример #21
0
def list_tvshows(response):
    """ TV shows listing """
    import_tvdb()
        
    # Attach TVDB data to TMDB results
    items = []
    results = response['results']
    for tvdb_show, tmdb_show in execute(tmdb_to_tvdb, results, workers=10):
        if tvdb_show is not None:
            items.append(make_tvshow_item(tvdb_show, tmdb_show))
    
    if xbmc.abortRequested:
        return

    # Paging
    if 'page' in response:
        page = response['page']
        args = caller_args()
        if page < response['total_pages']:
            args['page'] = str(page + 1)
            items.append({
                'label': _("Next >>"),
                'icon': get_icon_path("item_next"),
                'path': plugin.url_for(caller_name(), **args)
            })
    
    return items
Пример #22
0
def toggle_between_skins():
    if xbmc.getCondVisibility("Skin.HasSetting(Contexting)") != True:
        contexting = False
    else:
        contexting = True
    if xbmc.getCondVisibility("Skin.HasSetting(Toggling)") != True:
        toggling = False
    else:
        toggling = True
    current_skin = (
        str(
            xbmc.executeJSONRPC(
                '{"jsonrpc":"2.0", "method":"Settings.GetSettingValue","params":{"setting":"lookandfeel.skin"}, "id":1}'
            )
        )
        .replace('{"id":1,"jsonrpc":"2.0","result":{"value":"', "")
        .replace('"}}', "")
    )
    primary_skin = plugin.get_setting(SETTING_PRIMARY_SKIN, converter=str)
    alternate_skin = plugin.get_setting(SETTING_ALTERNATE_SKIN, converter=str)
    if primary_skin == "":
        plugin.set_setting(SETTING_PRIMARY_SKIN, current_skin)
    if alternate_skin == "":
        if primary_skin != "skin.confluence":
            plugin.set_setting(SETTING_ALTERNATE_SKIN, "skin.confluence")
        else:
            plugin.notify(
                msg="Alternate skin", title="Not set", delay=5000, image=get_icon_path("metalliq")
            ), openSettings(addonid, 5.5)
    if (
        primary_skin != alternate_skin
        and primary_skin != ""
        and alternate_skin != ""
        and xbmc.getCondVisibility("System.HasAddon(%s)" % primary_skin)
        and xbmc.getCondVisibility("System.HasAddon(%s)" % alternate_skin)
    ):
        if current_skin != primary_skin:
            xbmc.executeJSONRPC(
                '{"jsonrpc":"2.0", "method":"Settings.SetSettingValue","params":{"setting":"lookandfeel.skin","value":"%s"}, "id":1}'
                % primary_skin
            )
            xbmc.executebuiltin("SetFocus(11)")
            xbmc.executebuiltin("Action(Select)")
        else:
            xbmc.executeJSONRPC(
                '{"jsonrpc":"2.0", "method":"Settings.SetSettingValue","params":{"setting":"lookandfeel.skin","value":"%s"}, "id":1}'
                % alternate_skin
            )
            xbmc.executebuiltin("SetFocus(11)")
            xbmc.executebuiltin("Action(Select)")
        if toggling == False:
            xbmc.executebuiltin("Skin.Reset(Toggling)")
        else:
            xbmc.executebuiltin("Skin.SetBool(Toggling)")
        if contexting == False:
            xbmc.executebuiltin("Skin.Reset(Contexting)")
        else:
            xbmc.executebuiltin("Skin.SetBool(Contexting)")
Пример #23
0
def browse_library_channels():
    items = [
        {
            'label': _("New channel"),
            'path': plugin.url_for(live_search),
            'icon': get_icon_path("search"),
        },
    ]
    library_channels = get_library_channels()
    if library_channels:
        for (index, library_channel) in enumerate(library_channels):
            if library_channel != None:
                items.append({
                    'label': str(library_channel),
                    'path': plugin.url_for(live_play, program="None", language="en", channel=library_channel, mode="library"),
                    'icon': get_icon_path("library"),
                })
    return items
Пример #24
0
def music_artist_tracks(artist_name, page):
    artist_name = to_utf8(artist_name)
    results = lastfm.get_artist_top_tracks(artist_name, page)
    items = []
    for track in results["track"]:
        large_image = track["image"][-1]["#text"]
        track_name = to_utf8(track["name"])
        context_menu = [
            (
                _("Context player"),
                "PlayMedia({0})".format(
                    plugin.url_for("music_play_audio", artist_name=artist_name, track_name=track_name, mode="context")
                ),
            ),
            (
                _("Add to library"),
                "RunPlugin({0})".format(
                    plugin.url_for("music_add_to_library", artist_name=artist_name, track_name=track_name)
                ),
            ),
            (
                _("Musicvideo"),
                "PlayMedia({0})".format(
                    plugin.url_for("music_play_video", artist_name=artist_name, track_name=track_name, mode="default")
                ),
            ),
        ]
        if plugin.get_setting(SETTING_PREFERRED_MUSIC_TYPE) == "audio":
            item = {
                "label": track_name,
                "path": plugin.url_for("music_play_audio", artist_name=artist_name, track_name=track_name),
                "thumbnail": large_image,
                "icon": "DefaultMusic.png",
                "poster": large_image,
                "info_type": "music",
                "context_menu": context_menu,
            }
        else:
            item = {
                "label": track_name,
                "path": plugin.url_for("music_play_video", artist_name=artist_name, track_name=track_name),
                "thumbnail": large_image,
                "icon": "DefaultMusicVideo.png",
                "poster": large_image,
                "info_type": "music",
                "context_menu": context_menu,
            }
        items.append(item)
    if results["@attr"]["totalPages"] > page:
        items.append(
            {
                "label": _("Next >>"),
                "icon": get_icon_path("item_next"),
                "path": plugin.url_for(music_artist_tracks, artist_name=artist_name, page=int(page) + 1),
            }
        )
    return items
Пример #25
0
def export_tv_library():
    folder_path = plugin.get_setting(SETTING_TV_LIBRARY_FOLDER)
    if not xbmcvfs.exists(folder_path):
        return plugin.notify(msg="TVShows folder", title="Absent", delay=5000, image=get_icon_path("tv"))
    ids = ""
    shows = xbmcvfs.listdir(folder_path)[0]
    if len(shows) < 1:
        return plugin.notify(msg="TVShows folder", title="Empty", delay=5000, image=get_icon_path("tv"))
    else:
        for show in shows:
            ids = ids + str(show) + "\n"
    shows_backup_file_path = "special://profile/addon_data/plugin.video.metalliq/shows_to_add.bak"
    if xbmcvfs.exists(shows_backup_file_path):
        os.remove(xbmc.translatePath(shows_backup_file_path))
    if not xbmcvfs.exists(shows_backup_file_path):
        batch_add_file = xbmcvfs.File(shows_backup_file_path, "w")
        batch_add_file.write(ids)
        batch_add_file.close()
    plugin.notify(msg="TVShows", title="Backed up", delay=5000, image=get_icon_path("tv"))
Пример #26
0
def music_artist_albums(artist_name, page):
    artist_name = to_utf8(artist_name)
    results = lastfm.get_artist_top_albums(artist_name, page)
    items = [
        {
            'label': _("All Tracks"),
            'path': plugin.url_for("music_artist_tracks", artist_name=artist_name),
            'icon': get_icon_path("music")
        }
    ]
    for album in results["album"]:
        album_name = to_utf8(album["name"])
        image = album['image'][-1]['#text']
        artist_album_name = to_utf8(album['artist']['name'])
        context_menu = [
            (
                _("Scan item to library"),
                "RunPlugin({0})".format(plugin.url_for("music_add_album_to_library", artist_name=artist_album_name,
                                                       album_name=album_name))
            )
        ]
        item = {
            'thumbnail': image,
            'label': "{0}".format(album_name),
            'info': {
                'title': album_name,
                'artist': [artist_album_name],
            },
            'info_type': 'music',
            'path': plugin.url_for("music_artist_album_tracks", artist_name=artist_name, album_name=album_name),
            'context_menu': context_menu
        }
        items.append(item)
    if results["@attr"]["totalPages"] > page:
        next_page = int(page) + 1
        items.append({
            'label': _("Next >>"),
            'icon': get_icon_path("item_next"),
            'path': plugin.url_for("music_artist_albums", artist_name=artist_name, page=next_page)
        })
    if FORCE == True: plugin.set_view_mode(VIEW); return items
    else: return items
Пример #27
0
def lists_trakt_liked_lists(page):
    lists, pages = trakt.trakt_get_liked_lists(page)
    items = []
    for list in lists:
        info = list["list"]
        name = info["name"]
        user = info["user"]["username"]
        slug = info["ids"]["slug"]
        items.append({
            'label': name,
            'path': plugin.url_for("lists_trakt_show_list", user = user, slug = slug),
            'icon': get_icon_path("traktlikedlists"),  # TODO
        })
    if pages > page:
        items.append({
            'label': _("Next >>"),
            'path': plugin.url_for("lists_trakt_liked_lists", page = int(page) + 1),
            'icon': get_icon_path("traktlikedlists"),  # TODO
        })
    return items
Пример #28
0
def lists():
    """ Lists directory """
    items = [
        {
            'label': _("Trakt liked lists"),
            'path': plugin.url_for("lists_trakt_liked_lists", page = 1),
            'icon': get_icon_path("traktlikedlists"),
        },
        {
            'label': _("Trakt my lists"),
            'path': plugin.url_for("lists_trakt_my_lists"),
            'icon': get_icon_path("traktmylists"),
        },
        {
            'label': _("Search"),
            'path': plugin.url_for("lists_trakt_search_for_lists"),
            'icon': get_icon_path("search"),
        },
    ]
    return items
Пример #29
0
def music_artist_albums(artist_name, page):
    artist_name = to_utf8(artist_name)
    results = lastfm.get_artist_top_albums(artist_name, page)
    items = [
        {
            "label": _("All Tracks"),
            "path": plugin.url_for("music_artist_tracks", artist_name=artist_name),
            "icon": get_icon_path("music"),
        }
    ]
    for album in results["album"]:
        album_name = to_utf8(album["name"])
        image = album["image"][-1]["#text"]
        artist_album_name = to_utf8(album["artist"]["name"])
        context_menu = [
            (
                _("Add to library"),
                "RunPlugin({0})".format(
                    plugin.url_for("music_add_album_to_library", artist_name=artist_album_name, album_name=album_name)
                ),
            )
        ]
        item = {
            "thumbnail": image,
            "label": "{0}".format(album_name),
            "info": {"title": album_name, "artist": [artist_album_name]},
            "info_type": "music",
            "path": plugin.url_for("music_artist_album_tracks", artist_name=artist_name, album_name=album_name),
            "context_menu": context_menu,
        }
        items.append(item)
    if results["@attr"]["totalPages"] > page:
        next_page = int(page) + 1
        items.append(
            {
                "label": _("Next >>"),
                "icon": get_icon_path("item_next"),
                "path": plugin.url_for(music_artist_albums, artist_name=artist_name, page=next_page),
            }
        )
    return items
Пример #30
0
def music_artist_tracks(artist_name, page):
    artist_name = to_utf8(artist_name)
    results = lastfm.get_artist_top_tracks(artist_name, page)
    items = []
    for track in results["track"]:
        large_image = track["image"][-1]["#text"]
        track_name = to_utf8(track["name"])
        context_menu = [
            (
                _("Context player"),
                "PlayMedia({0})".format(plugin.url_for("music_play_audio", artist_name=artist_name,
                                                       track_name=track_name, mode='context'))
            ),
            (
                _("Scan item to library"),
                "RunPlugin({0})".format(plugin.url_for("music_add_to_library", artist_name=artist_name,
                                                       track_name=track_name))
            ),
            (
                _("Musicvideo"),
                "PlayMedia({0})".format(plugin.url_for("music_play_video", artist_name=artist_name,
                                                       track_name=track_name, mode='default'))
            )
        ]
        if plugin.get_setting(SETTING_PREFERRED_MUSIC_TYPE, unicode) == "audio":
            item = {
                'label': track_name,
                'path': plugin.url_for("music_play_audio", artist_name=artist_name, track_name=track_name),
                'thumbnail': large_image,
                'icon': "DefaultMusic.png",
                'poster': large_image,
                'info_type': 'music',
                'context_menu': context_menu,
            }
        else:
            item = {
                'label': track_name,
                'path': plugin.url_for("music_play_video", artist_name=artist_name, track_name=track_name),
                'thumbnail': large_image,
                'icon': "DefaultMusicVideo.png",
                'poster': large_image,
                'info_type': 'music',
                'context_menu': context_menu,
            }
        items.append(item)
    if results["@attr"]["totalPages"] > page:
        items.append({
            'label': _("Next >>"),
            'icon': get_icon_path("item_next"),
            'path': plugin.url_for("music_artist_tracks", artist_name=artist_name, page=int(page) + 1)
        })
    if FORCE == True: plugin.set_view_mode(VIEW); return items
    else: return items
Пример #31
0
def auto_music_setup(library_folder):
    if library_folder[-1] != "/":
        library_folder += "/"
    metalliq_playlist_folder = "special://profile/playlists/mixed/MetalliQ/"
    if not xbmcvfs.exists(metalliq_playlist_folder):
        xbmcvfs.mkdir(metalliq_playlist_folder)
    playlist_folder = plugin.get_setting(SETTING_MUSIC_PLAYLIST_FOLDER,
                                         unicode)
    if plugin.get_setting(SETTING_MUSIC_PLAYLIST_FOLDER, unicode)[-1] != "/":
        playlist_folder += "/"
    if not xbmcvfs.exists(playlist_folder): xbmcvfs.mkdir(playlist_folder)
    if not xbmcvfs.exists(library_folder):
        try:
            xbmcvfs.mkdir(library_folder)
            source_thumbnail = get_icon_path("music")
            source_name = "[COLOR ff0084ff]M[/COLOR]etalli[COLOR ff0084ff]Q[/COLOR] " + _(
                "Music")
            source_content = "('{0}','musicvideos','metadata.musicvideos.imvdb','',2147483647,0,'<settings/>',0,0,NULL,NULL)".format(
                library_folder)
            add_source(source_name, library_folder, source_content,
                       source_thumbnail)
            return True
        except:
            False
Пример #32
0
def list_trakt_items(results, pages, page):
    from trakt import trakt
    movies = [get_trakt_movie_metadata(item, None) for item in results]
    items = [make_movie_item(movie) for movie in movies]
    page = int(page)
    pages = int(pages)
    if pages > 1:
        args = caller_args()
        args['page'] = page + 1
        items.append({
            'label':
            "{0}  >>  ({1}/{2})".format(_("Next page"), page + 1, pages),
            'path':
            plugin.url_for(caller_name(), **args),
            'icon':
            get_icon_path("item_next"),
            'properties': {
                'fanart_image': get_background_path()
            }
        })
    if FORCE == True:
        return plugin.finish(items=items, sort_methods=SORT, view_mode=VIEW)
    else:
        return plugin.finish(items=items, sort_methods=SORT)
Пример #33
0
def setup_library(library_folder):
    if library_folder[-1] != "/":
        library_folder += "/"
    playlist_folder = plugin.get_setting(SETTING_MUSIC_PLAYLIST_FOLDER,
                                         unicode)
    if plugin.get_setting(SETTING_MUSIC_PLAYLIST_FOLDER, unicode)[-1] != "/":
        playlist_folder += "/"
    # create folders
    if not xbmcvfs.exists(playlist_folder): xbmcvfs.mkdir(playlist_folder)
    if not xbmcvfs.exists(library_folder):
        # create folder
        xbmcvfs.mkdir(library_folder)
        msg = _(
            "Would you like to automatically set [COLOR yellow]chappaai[/COLOR] as a music source?"
        )
        if dialogs.yesno("{0} {1}".format(_("Library"), "setup"), msg):
            source_thumbnail = get_icon_path("musicvideos")
            source_name = "[COLOR yellow]chappaai[/COLOR] " + _("Music videos")
            source_content = "('{0}','musicvideos','metadata.musicvideos.theaudiodb.com','',2147483647,0,'<settings><setting id=\"fanarttvalbumthumbs\" value=\"true\" /><setting id=\"tadbalbumthumbs\" value=\"true\" /></settings>',0,0,NULL,NULL)".format(
                library_folder)
            add_source(source_name, library_folder, source_content,
                       source_thumbnail)
    # return translated path
    return xbmc.translatePath(library_folder)
Пример #34
0
def list_tvshows(response):
    """ TV shows listing """
    import_tvdb()
    # Attach TVDB data to TMDB results
    items = []
    results = response['results']
    for tvdb_show, tmdb_show in execute(tmdb_to_tvdb, results, workers=10):
        if tvdb_show is not None:
            info = build_tvshow_info(tvdb_show, tmdb_show)
            items.append(make_tvshow_item(info))
    if xbmc.abortRequested:
        return
    # Paging
    if 'page' in response:
        page = response['page']
        args = caller_args()
        if page < response['total_pages']:
            args['page'] = str(page + 1)
            items.append({
                'label': _("Next >>"),
                'icon': get_icon_path("item_next"),
                'path': plugin.url_for(caller_name(), **args)
            })
    return items
Пример #35
0
def lists():
    """ Lists directory """
    items = [
        {
            'label': "{0} {1}".format("\"Liked\"", _("Playlists").lower()),
            'path': plugin.url_for("lists_trakt_liked_lists", page = 1),
            'icon': get_icon_path("traktlikedlists"),
            'thumbnail': get_icon_path("traktlikedlists"),
            'context_menu': [
                (
                    _("Scan item to library"),
                    "RunPlugin({0})".format(plugin.url_for("lists_trakt_add_liked_to_library"))
                )
            ]
        },
        {
            'label': "{0} {1}".format(_("Watch your"), _("Playlists").lower()),
            'path': plugin.url_for("lists_trakt_my_lists"),
            'icon': get_icon_path("traktmylists"),
            'thumbnail': get_icon_path("traktmylists"),
            'context_menu': [
                (
                    _("Scan item to library"),
                    "RunPlugin({0})".format(plugin.url_for("lists_trakt_add_my_lists_to_library"))
                )
            ]
        },
        {
            'label': "{0}".format(_("Enter search string")),
            'path': plugin.url_for("lists_trakt_search_for_lists"),
            'icon': get_icon_path("search"),
            'thumbnail': get_icon_path("search"),
        },
    ]
    fanart = plugin.addon.getAddonInfo('fanart')
    for item in items:
        item['properties'] = {'fanart_image' : get_background_path()}
    if FORCE == True: plugin.set_view_mode(VIEW); return items
    else: return items
Пример #36
0
def root():
    """ Root directory """
    items = [{
        'label': _("Movies"),
        'path': plugin.url_for("movies"),
        'icon': get_icon_path("movies"),
        'thumbnail': get_icon_path("movies"),
    }, {
        'label': _("TV shows"),
        'path': plugin.url_for("tv"),
        'icon': get_icon_path("tv"),
        'thumbnail': get_icon_path("tv"),
    }, {
        'label': _("Music"),
        'path': plugin.url_for("music"),
        'icon': get_icon_path("music"),
        'thumbnail': get_icon_path("music"),
    }, {
        'label': _("TV channels"),
        'path': plugin.url_for("live"),
        'icon': get_icon_path("live"),
        'thumbnail': get_icon_path("live"),
    }, {
        'label':
        _("Playlists"),
        'path':
        plugin.url_for("lists"),
        'icon':
        get_icon_path("lists"),
        'thumbnail':
        get_icon_path("lists"),
        'context_menu': [(_("Scan item to library"), "RunPlugin({0})".format(
            plugin.url_for("lists_trakt_add_all_lists_to_library")))],
    }, {
        'label': _("Enter search string"),
        'path': plugin.url_for("root_search"),
        'icon': get_icon_path("search"),
        'thumbnail': get_icon_path("search"),
    }]
    fanart = plugin.addon.getAddonInfo('fanart')
    for item in items:
        item['properties'] = {'fanart_image': get_background_path()}
    if FORCE == True:
        plugin.set_view_mode(VIEW)
        return items
    else:
        return items
Пример #37
0
def settings_set_players(media):
    playericon = get_icon_path("player")
    medias = ["movies", "tvshows", "musicvideos", "music", "live"]
    if media == "all":
        for med in medias:
            mediatype = med.replace('es', 'e').replace('ws', 'w').replace(
                'all', '').replace('os', 'o').replace('vs', 'v s').replace(
                    'tv', 'TV').replace('musicvideo',
                                        'Music video').replace('live', 'TV')
            players = get_players(med)
            selected = [p.id for p in players]
            if selected is not None:
                if med == "movies":
                    plugin.set_setting(SETTING_MOVIES_ENABLED_PLAYERS,
                                       selected)
                elif med == "tvshows":
                    plugin.set_setting(SETTING_TV_ENABLED_PLAYERS, selected)
                elif med == "musicvideos":
                    plugin.set_setting(SETTING_MUSICVIDEOS_ENABLED_PLAYERS,
                                       selected)
                elif med == "music":
                    plugin.set_setting(SETTING_MUSIC_ENABLED_PLAYERS, selected)
                elif med == "live":
                    plugin.set_setting(SETTING_LIVE_ENABLED_PLAYERS, selected)
                else:
                    raise Exception("invalid parameter %s" % media)
            dialogs.notify(msg="{0} {1}".format(
                _(mediatype).capitalize(),
                _("Player").lower()),
                           title=_('Enabled'),
                           delay=1000,
                           image=get_icon_path("player"))
        dialogs.notify(msg="{0}".format(_("Player")),
                       title="{0} {1}".format(_("All"),
                                              _('Enabled').lower()),
                       delay=1000,
                       image=get_icon_path("player"))
        return True
    elif media == "tvportal":
        players = get_players("live")
        selected = [p.id for p in players]
        plugin.set_setting(SETTING_LIVE_ENABLED_PLAYERS, selected)
        return
    else:
        mediatype = media.replace('es', 'e').replace('ws', 'w').replace(
            'all', '').replace('os', 'o').replace('vs', 'v s').replace(
                'tv', 'TV').replace('musicvideo',
                                    'Music video').replace('live', 'TV')
        players = get_players(media)
        players = sorted(players,
                         key=lambda player: player.clean_title.lower())
        version = xbmc.getInfoLabel('System.BuildVersion')
        selected = None
        if version.startswith('16') or version.startswith('17'):
            msg = "Do you want to enable all " + mediatype + "players?"
            if dialogs.yesno(_("Enable all " + mediatype + "players"), _(msg)):
                selected = [p.id for p in players]
            else:
                result = dialogs.multiselect(
                    _("Select " + mediatype + "players to enable"),
                    [p.clean_title for p in players])
                if result is not None:
                    selected = [players[i].id for i in result]
        else:
            selected = None
            msg = "Kodi 16 is required for multi-selection. Do you want to enable all " + mediatype + "players instead?"
            if dialogs.yesno(
                    "{0} {1} {2} {3}s".format(_("Enable"),
                                              _("All").lower(), mediatype,
                                              _("Player").lower()), _(msg)):
                selected = [p.id for p in players]
            else:
                result = dialogs.multichoice(
                    "{0}: {1} {2} {3}".format(_("Enable"), _("Select"),
                                              _("Player").lower()),
                    [p.clean_title for p in players])
                if result is not None:
                    selected = [players[i].id for i in result]
        if selected is not None:
            if media == "movies":
                plugin.set_setting(SETTING_MOVIES_ENABLED_PLAYERS, selected)
            elif media == "tvshows":
                plugin.set_setting(SETTING_TV_ENABLED_PLAYERS, selected)
            elif media == "musicvideos":
                plugin.set_setting(SETTING_MUSICVIDEOS_ENABLED_PLAYERS,
                                   selected)
            elif media == "music":
                plugin.set_setting(SETTING_MUSIC_ENABLED_PLAYERS, selected)
            elif media == "live":
                plugin.set_setting(SETTING_LIVE_ENABLED_PLAYERS, selected)
            else:
                raise Exception("invalid parameter %s" % media)
        dialogs.notify(msg="{0} {1} {2}".format(_("Enable"),
                                                _(mediatype).lower(),
                                                _("Player").lower()),
                       title=_('Done'),
                       delay=1000,
                       image=get_icon_path("player"))
    plugin.open_settings()
Пример #38
0
def _lists_trakt_show_list(list_items):
    genres_dict = trakt.trakt_get_genres("tv")
    if type(list_items) == str:
        import urllib
        list_items = eval(urllib.unquote(list_items))
    items = []
    for list_item in list_items:
        item = None
        item_type = list_item["type"]
        if item_type == "show":
            tvdb_id = list_item["show"]["ids"]["tvdb"]
            show = list_item["show"]
            info = get_tvshow_metadata_trakt(show, genres_dict)
            context_menu = [
                (
                    _("Add to library"),
                    "RunPlugin({0})".format(plugin.url_for("tv_add_to_library", id=tvdb_id))
                ),
                (
                    _("Show info"), 'Action(Info)'
                ),
                (
                    _("Remove from list"),
                    "RunPlugin({0})".format(plugin.url_for("lists_remove_show_from_list", src="tvdb", id=tvdb_id))
                )
            ]
            item = ({
                'label': info['title'],
                'path': plugin.url_for("tv_tvshow", id=tvdb_id),
                'context_menu': context_menu,
                'thumbnail': info['poster'],
                'icon': get_icon_path("tv"),
                'poster': info['poster'],
                'properties' : {'fanart_image' : info['fanart']},
                'info_type': 'video',
                'stream_info': {'video': {}},
                'info': info
            })
        elif item_type == "season":
            tvdb_id = list_item["show"]["ids"]["tvdb"]
            season = list_item["season"]
            show = list_item["show"]
            show_info = get_tvshow_metadata_trakt(show, genres_dict)
            season_info = get_season_metadata_trakt(show_info,season, genres_dict)
            label = "{0} - Season {1}".format(to_utf8(show["title"]),season["number"])
            context_menu = [
                (
                    _("Add to library"),
                    "RunPlugin({0})".format(plugin.url_for("tv_add_to_library", id=tvdb_id))
                ),
                (
                    _("Show info"), 'Action(Info)'
                ),
                (
                    _("Remove from list"),
                    "RunPlugin({0})".format(plugin.url_for("lists_remove_season_from_list", src="tvdb",
                                                           id=tvdb_id, season=list_item["season"]["number"]))
                )
            ]
            item = ({
                'label': label,
                'path': plugin.url_for(tv_season, id=tvdb_id, season_num=list_item["season"]["number"]),
                'context_menu': context_menu,
                'info': season_info,
                'thumbnail': season_info['poster'],
                'icon': get_icon_path("tv"),
                'poster': season_info['poster'],
                'properties': {'fanart_image': season_info['fanart']},
            })
        elif item_type == "episode":
            tvdb_id = list_item["show"]["ids"]["tvdb"]
            episode = list_item["episode"]
            show = list_item["show"]
            season_number = episode["season"]
            episode_number = episode["number"]
            show_info = get_tvshow_metadata_trakt(show, genres_dict)
            episode_info = get_episode_metadata_trakt(show_info, episode)
            label = "{0} - S{1}E{2} - {3}".format(show_info["title"], season_number,
                                                  episode_number, episode_info["title"])
            context_menu = [
                (
                    _("Select stream..."),
                    "PlayMedia({0})".format(
                        plugin.url_for("tv_play", id=tvdb_id, season=season_number,
                                       episode=episode_number, mode='select'))
                ),
                (
                    _("Show info"),
                    'Action(Info)'
                ),
                (
                    _("Add to list"),
                    "RunPlugin({0})".format(plugin.url_for("lists_add_episode_to_list", src='tvdb', id=tvdb_id,
                                                           season=season_number, episode=episode_number))
                ),
                (
                    _("Remove from list"),
                    "RunPlugin({0})".format(plugin.url_for("lists_remove_season_from_list", src="tvdb", id=tvdb_id,
                                                           season=season_number, episode = episode_number))
                )
            ]
            item = ({
                'label': label,
                'path': plugin.url_for("tv_play", id=tvdb_id, season=season_number,
                                       episode=episode_number, mode='default'),
                'context_menu': context_menu,
                'info': episode_info,
                'is_playable': True,
                'info_type': 'video',
                'stream_info': {'video': {}},
                'thumbnail': episode_info['poster'],
                'poster': episode_info['poster'],
                'icon': get_icon_path("tv"),
                'properties': {'fanart_image': episode_info['fanart']},
                      })
        elif item_type == "movie":
            movie = list_item["movie"]
            movie_info = get_trakt_movie_metadata(movie)
            item = make_movie_item(movie_info, True)
        if item is not None:
            items.append(item)
    for item in items:
        item['properties'] = {'fanart_image' : get_background_path()}
    if FORCE == True: return plugin.finish(items=items, sort_methods=SORT, view_mode=VIEW)
    else: return plugin.finish(items=items, sort_methods=SORT)
Пример #39
0
def music_artist_tracks(artist_name, page):
    artist_name = to_utf8(artist_name)
    results = lastfm.get_artist_top_tracks(artist_name, page)
    items = []
    for track in results["track"]:
        large_image = track["image"][-1]["#text"]
        track_name = to_utf8(track["name"])
        context_menu = [(_("Context player"), "PlayMedia({0})".format(
            plugin.url_for("music_play_audio",
                           artist_name=artist_name,
                           track_name=track_name,
                           mode='context'))),
                        (_("Scan item to library"), "RunPlugin({0})".format(
                            plugin.url_for("music_add_to_library",
                                           artist_name=artist_name,
                                           track_name=track_name))),
                        (_("Musicvideo"), "PlayMedia({0})".format(
                            plugin.url_for("music_play_video",
                                           artist_name=artist_name,
                                           track_name=track_name,
                                           mode='default')))]
        if plugin.get_setting(SETTING_PREFERRED_MUSIC_TYPE,
                              unicode) == "audio":
            item = {
                'label':
                track_name,
                'path':
                plugin.url_for("music_play_audio",
                               artist_name=artist_name,
                               track_name=track_name),
                'thumbnail':
                large_image,
                'icon':
                "DefaultMusic.png",
                'poster':
                large_image,
                'info_type':
                'music',
                'context_menu':
                context_menu,
            }
        else:
            item = {
                'label':
                track_name,
                'path':
                plugin.url_for("music_play_video",
                               artist_name=artist_name,
                               track_name=track_name),
                'thumbnail':
                large_image,
                'icon':
                "DefaultMusicVideo.png",
                'poster':
                large_image,
                'info_type':
                'music',
                'context_menu':
                context_menu,
            }
        items.append(item)
    if results["@attr"]["totalPages"] > page:
        items.append({
            'label':
            _("Next >>"),
            'icon':
            get_icon_path("item_next"),
            'path':
            plugin.url_for("music_artist_tracks",
                           artist_name=artist_name,
                           page=int(page) + 1)
        })
    if FORCE == True:
        plugin.set_view_mode(VIEW)
        return items
    else:
        return items
Пример #40
0
def music():
    items = [{
        'label': _("Enter search string"),
        'path': plugin.url_for("music_search"),
        'icon': get_icon_path("search"),
    }, {
        'label': "{0} {1}".format(_("Top 100"), _("Artists")),
        'path': plugin.url_for("music_top_artists"),
        'icon': get_icon_path("top_rated"),
    }, {
        'label': "{0} {1}".format(_("Top 100"), _("Tracks")),
        'path': plugin.url_for("music_top_tracks"),
        'icon': get_icon_path("trending"),
    }, {
        'label':
        "{0} {1} ({2})".format(_("Top 100"), _("Artists"), "NL"),
        'path':
        plugin.url_for("music_top_artists_by_country", country='netherlands'),
        'icon':
        get_icon_path("top_nl"),
    }, {
        'label':
        "{0} {1} ({2})".format(_("Top 100"), _("Artists"), "UK"),
        'path':
        plugin.url_for("music_top_artists_by_country",
                       country='united kingdom'),
        'icon':
        get_icon_path("top_uk"),
    },
             {
                 'label':
                 "{0} {1} ({2})".format(_("Top 100"), _("Artists"), "US"),
                 'path':
                 plugin.url_for("music_top_artists_by_country",
                                country='united states'),
                 'icon':
                 get_icon_path("top_us"),
             }, {
                 'label':
                 "{0} {1} ({2})".format(_("Top 100"), _("Artists"), "CA"),
                 'path':
                 plugin.url_for("music_top_artists_by_country",
                                country='canada'),
                 'icon':
                 get_icon_path("top_ca"),
             }, {
                 'label':
                 "{0} {1} ({2})".format(_("Top 100"), _("Artists"), "AU"),
                 'path':
                 plugin.url_for("music_top_artists_by_country",
                                country='australia'),
                 'icon':
                 get_icon_path("top_au"),
             }, {
                 'label':
                 "{0} {1} ({2})".format(_("Top 100"), _("Tracks"), "NL"),
                 'path':
                 plugin.url_for("music_top_tracks_by_country",
                                country='netherlands'),
                 'icon':
                 get_icon_path("trending_nl"),
             }, {
                 'label':
                 "{0} {1} ({2})".format(_("Top 100"), _("Tracks"), "UK"),
                 'path':
                 plugin.url_for("music_top_tracks_by_country",
                                country='united kingdom'),
                 'icon':
                 get_icon_path("trending_uk"),
             }, {
                 'label':
                 "{0} {1} ({2})".format(_("Top 100"), _("Tracks"), "US"),
                 'path':
                 plugin.url_for("music_top_tracks_by_country",
                                country='united states'),
                 'icon':
                 get_icon_path("trending_us"),
             }, {
                 'label':
                 "{0} {1} ({2})".format(_("Top 100"), _("Tracks"), "CA"),
                 'path':
                 plugin.url_for("music_top_tracks_by_country",
                                country='canada'),
                 'icon':
                 get_icon_path("trending_ca"),
             }, {
                 'label':
                 "{0} {1} ({2})".format(_("Top 100"), _("Tracks"), "AU"),
                 'path':
                 plugin.url_for("music_top_tracks_by_country",
                                country='australia'),
                 'icon':
                 get_icon_path("trending_au"),
             }]
    for item in items:
        item['properties'] = {'fanart_image': get_background_path()}
    if FORCE == True:
        plugin.set_view_mode(VIEW)
        return items
    else:
        return items
Пример #41
0
def add_tvshow_to_library(library_folder, show, play_plugin=None):
    clean_needed = False
    id = show['id']
    showname = to_utf8(show['seriesname'])
    if showname == "None" or showname == None:
        show_folder = os.path.join(library_folder, str(id) + '/')
        if os.path.isdir(show_folder): return shutil.rmtree(show_folder)
    playlist_folder = plugin.get_setting(SETTING_TV_PLAYLIST_FOLDER, unicode)
    if not xbmcvfs.exists(playlist_folder):
        try:
            xbmcvfs.mkdir(playlist_folder)
        except:
            dialogs.notify(msg=_(
                'Creation of [COLOR limegreen]M[/COLOR]etalli[COLOR limegreen]Q[/COLOR] 4[COLOR limegreen]Q[/COLOR]ed Playlist Folder'
            ),
                           title=_('Failed'),
                           delay=5000,
                           image=get_icon_path("lists"))
    playlist_file = os.path.join(playlist_folder, id + ".xsp")
    if not xbmcvfs.exists(playlist_file):
        playlist_file = xbmcvfs.File(playlist_file, 'w')
        content = '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?><smartplaylist type="tvshows"><name>%s</name><match>all</match><rule field="path" operator="contains"><value>%s%s</value></rule><rule field="playcount" operator="is"><value>0</value></rule><order direction="ascending">numepisodes</order></smartplaylist>' % (
            showname, plugin.get_setting(
                SETTING_TV_LIBRARY_FOLDER, str).replace(
                    'special://profile', ''), str(id))
        playlist_file.write(str(content))
        playlist_file.close()
    ## Create show folder
    enc_show = showname.translate(None, '\/:*?"<>|').strip('.')
    show_folder = os.path.join(library_folder, str(id) + '/')
    if not xbmcvfs.exists(show_folder):
        try:
            xbmcvfs.mkdir(show_folder)
        except:
            pass
        # Create play with file
        if play_plugin is not None:
            player_filepath = os.path.join(show_folder, 'player.info')
            player_file = xbmcvfs.File(player_filepath, 'w')
            content = "{0}".format(play_plugin)
            player_file.write(content)
            player_file.close()
        # Create nfo file
        nfo_filepath = os.path.join(show_folder, 'tvshow.nfo')
        if not xbmcvfs.exists(nfo_filepath):
            nfo_file = xbmcvfs.File(nfo_filepath, 'w')
            content = "http://thetvdb.com/index.php?tab=series&id=%s" % str(id)
            nfo_file.write(content)
            nfo_file.close()
    ## Get existing items in library
    # get all ids of the show
    ids = [id, show.get('imdb_id', None)]  # TODO: add tmdb!
    ids = [x for x in ids if x]
    # get show episodes in library
    try:
        # get tvshow from library
        libshows = RPC.VideoLibrary.GetTVShows(
            properties=["imdbnumber", "title", "year"])['tvshows']
        libshows = [
            i for i in libshows if str(i['imdbnumber']) in ids or (
                str(i['year']) == str(show.get('year', 0))
                and equals(show['seriesname'], i['title']))
        ]
        libshow = libshows[0]
        # get existing (non strm) episodes in library
        libepisodes = RPC.VideoLibrary.GetEpisodes(
            filter={
                "and": [{
                    "field": "tvshow",
                    "operator": "is",
                    "value": to_utf8(libshow['title'])
                }]
            },
            properties=["season", "episode", "file"])['episodes']
        libepisodes = [(int(i['season']), int(i['episode']))
                       for i in libepisodes if not i['file'].endswith(".strm")]
    except:
        libepisodes = []
    ## Create content strm files
    for (season_num, season) in show.items():
        if season_num == 0:  # or not season.has_aired():
            continue
        for (episode_num, episode) in season.items():
            if episode_num == 0:
                continue
            delete = False
            if plugin.get_setting(SETTING_AIRED_UNKNOWN, bool) == True:
                aired_unknown = True
            else:
                aired_unknown = False
            if not episode.has_aired(flexible=aired_unknown):
                delete = True
                #break
            if delete or (season_num, episode_num) in libepisodes:
                if library_tv_remove_strm(show, show_folder, id, season_num,
                                          episode_num):
                    clean_needed = True
            else:
                library_tv_strm(show, show_folder, id, season_num, episode_num)
    files, dirs = xbmcvfs.listdir(show_folder)
    if not dirs:
        shutil.rmtree(show_folder)
        clean_needed = True


#    if xbmc.getCondVisibility("system.hasaddon(script.qlickplay)"): xbmc.executebuiltin("RunScript(script.qlickplay,info=afteradd)")
#    elif xbmc.getCondVisibility("system.hasaddon(script.extendedinfo)"): xbmc.executebuiltin("RunScript(script.extendedinfo,info=afteradd)")
    return clean_needed
Пример #42
0
def toggle_context_player():
    if xbmc.getCondVisibility("Skin.HasSetting(Contexting)") != True: dialogs.notify(msg="Context player", title="Switched off", delay=5000, image=get_icon_path("metalliq"))
    else: dialogs.notify(msg="Context player", title="Switched on", delay=5000, image=get_icon_path("metalliq"))
    xbmc.executebuiltin("Skin.ToggleSetting(Contexting)")
Пример #43
0
def batch_add_tvshows_to_library(library_folder, show):
    id = show['id']
    showname = to_utf8(show['seriesname'])
    playlist_folder = plugin.get_setting(SETTING_TV_PLAYLIST_FOLDER, unicode)
    if not xbmcvfs.exists(playlist_folder):
        try: xbmcvfs.mkdir(playlist_folder)
        except: dialogs.notify(msg=_('Creation of [COLOR ff0084ff]M[/COLOR]etalli[COLOR ff0084ff]Q[/COLOR] Playlist Folder'), title=_('Failed'), delay=5000, image=get_icon_path("lists"))
    playlist_file = os.path.join(playlist_folder, id+".xsp")
    if not xbmcvfs.exists(playlist_file):
        playlist_file = xbmcvfs.File(playlist_file, 'w')
        content = '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?><smartplaylist type="tvshows"><name>%s</name><match>all</match><rule field="path" operator="contains"><value>%s%s</value></rule><rule field="playcount" operator="is"><value>0</value></rule><order direction="ascending">numepisodes</order></smartplaylist>' % (showname, plugin.get_setting(SETTING_TV_LIBRARY_FOLDER, unicode).replace('special://profile',''), str(id))
        playlist_file.write(str(content))
        playlist_file.close()
    show_folder = os.path.join(library_folder, str(id)+'/')
    if not xbmcvfs.exists(show_folder):
        try: xbmcvfs.mkdir(show_folder)
        except: pass
    player_filepath = os.path.join(show_folder, 'player.info')
    player_file = xbmcvfs.File(player_filepath, 'w')
    content = "default"
    player_file.write(content)
    player_file.close()
    nfo_filepath = os.path.join(show_folder, 'tvshow.nfo')
    if not xbmcvfs.exists(nfo_filepath):
        nfo_file = xbmcvfs.File(nfo_filepath, 'w')
        content = "http://thetvdb.com/index.php?tab=series&id=%s" % str(id)
        nfo_file.write(content)
        nfo_file.close()
    clean_needed = True
    return clean_needed
Пример #44
0
def lists_trakt_add_all_to_library(user, slug):
    items = lists_trakt_show_list(user, slug, raw=True)
    misc_ids, movie_ids, tv_ids = batch_find_list_ids(items)
    write_list_id_files(misc_ids, tv_ids, movie_ids, slug, user)
    write_batch_id_files(tv_ids, movie_ids, misc_ids)
    dialogs.notify(msg='Conversion done', title='starting batch-add', delay=3000, image=get_icon_path("metalliq"))
    xbmc.executebuiltin("RunPlugin(plugin://plugin.video.metalliq/movies/batch_add_to_library)")
Пример #45
0
def root_search_term(term, page):
    if term == "None":
        # Get search keyword
        search_entered = plugin.keyboard(heading=_("search for"))
        if not search_entered:
            return
    else:
        search_entered = term
    items = [{
        'label':
        "All" + ": " + search_entered,
        'path':
        plugin.url_for(root_search_term, term=search_entered, page='1'),
        'icon':
        get_icon_path("search"),
    }, {
        'label':
        _("Movies") + " - " + _("Search (Trakt)") + ": " + search_entered,
        'path':
        plugin.url_for("trakt_movies_search_term",
                       term=search_entered,
                       page='1'),
        'icon':
        get_icon_path("movies"),
    }, {
        'label':
        _("Movies") + " - " + _("Search (TMDb)") + ": " + search_entered,
        'path':
        plugin.url_for("tmdb_movies_search_term",
                       term=search_entered,
                       page='1'),
        'icon':
        get_icon_path("movies"),
    }, {
        'label':
        _("TV shows") + " - " + _("Search (Trakt)") + ": " + search_entered,
        'path':
        plugin.url_for("trakt_tv_search_term", term=search_entered, page='1'),
        'icon':
        get_icon_path("tv"),
    }, {
        'label':
        _("TV shows") + " - " + _("Search (TMDb)") + ": " + search_entered,
        'path':
        plugin.url_for("tmdb_tv_search_term", term=search_entered, page='1'),
        'icon':
        get_icon_path("tv"),
    }, {
        'label':
        _("TV shows") + " - " + _("Search (TVDb)") + ": " + search_entered,
        'path':
        plugin.url_for("tvdb_tv_search_term", term=search_entered, page='1'),
        'icon':
        get_icon_path("tv"),
    }, {
        'label':
        _("Music") + " - " + _("Search artist") + ": " + search_entered,
        'path':
        plugin.url_for("music_search_artist_term",
                       term=search_entered,
                       page='1'),
        'icon':
        get_icon_path("music"),
    }, {
        'label':
        _("Music") + " - " + _("Search album") + ": " + search_entered,
        'path':
        plugin.url_for("music_search_album_term",
                       term=search_entered,
                       page='1'),
        'icon':
        get_icon_path("music"),
    }, {
        'label':
        _("Music") + " - " + _("Search track") + ": " + search_entered,
        'path':
        plugin.url_for("music_search_track_term",
                       term=search_entered,
                       page='1'),
        'icon':
        get_icon_path("music"),
    }, {
        'label': _("Live") + " - " + _("Search") + ": " + search_entered,
        'path': plugin.url_for("live_search_term", term=search_entered),
        'icon': get_icon_path("live"),
    }, {
        'label':
        _("Lists") + " - " + _("Search") + ": " + search_entered,
        'path':
        plugin.url_for("lists_search_for_lists_term",
                       term=search_entered,
                       page='1'),
        'icon':
        get_icon_path("lists"),
    }]
    fanart = plugin.addon.getAddonInfo('fanart')
    for item in items:
        item['properties'] = {'fanart_image': get_background_path()}
    return items
Пример #46
0
def root_search():
    """ Search directory """
    items = [{
        'label': "All",
        'path': plugin.url_for(root_search_term, page='1'),
        'icon': get_icon_path("search"),
    }, {
        'label': _("Movies") + ": " + _("Search (Trakt)"),
        'path': plugin.url_for("trakt_movies_search", page='1'),
        'icon': get_icon_path("movies"),
    }, {
        'label': _("Movies") + ": " + _("Search (TMDb)"),
        'path': plugin.url_for("tmdb_movies_search", page='1'),
        'icon': get_icon_path("movies"),
    }, {
        'label': _("TV shows") + ": " + _("Search (Trakt)"),
        'path': plugin.url_for("trakt_tv_search", page='1'),
        'icon': get_icon_path("tv"),
    }, {
        'label': _("TV shows") + ": " + _("Search (TMDb)"),
        'path': plugin.url_for("tmdb_tv_search"),
        'icon': get_icon_path("tv"),
    }, {
        'label': _("TV shows") + ": " + _("Search (TVDb)"),
        'path': plugin.url_for("tvdb_tv_search"),
        'icon': get_icon_path("tv"),
    }, {
        'label': _("Music") + ": " + _("Search artist"),
        'path': plugin.url_for("music_search_artist"),
        'icon': get_icon_path("music"),
    }, {
        'label': _("Music") + ": " + _("Search album"),
        'path': plugin.url_for("music_search_album"),
        'icon': get_icon_path("music"),
    }, {
        'label': _("Music") + ": " + _("Search track"),
        'path': plugin.url_for("music_search_track"),
        'icon': get_icon_path("music"),
    }, {
        'label': _("Live") + ": " + _("Search"),
        'path': plugin.url_for("live_search"),
        'icon': get_icon_path("live"),
    }, {
        'label': _("Lists") + ": " + _("Search"),
        'path': plugin.url_for("lists_trakt_search_for_lists"),
        'icon': get_icon_path("lists"),
    }]
    fanart = plugin.addon.getAddonInfo('fanart')
    for item in items:
        item['properties'] = {'fanart_image': get_background_path()}
    return items
Пример #47
0
def music():
    items = [
        {
            'label': _("Search"),
            'path': plugin.url_for("music_search"),
            'icon': get_icon_path("search"),
        },
        {
            'label': _("Top Artists"),
            'path': plugin.url_for("music_top_artists"),
            'icon': get_icon_path("top_rated"),
        },
        {
            'label': _("Top Tracks"),
            'path': plugin.url_for("music_top_tracks"),
            'icon': get_icon_path("trending"),
        },
        {
            'label': _("Top Artists (NL)"),
            'path': plugin.url_for("music_top_artists_by_country", country='netherlands'),
            'icon': get_icon_path("top_nl"),
        },
        {
            'label': _("Top Artists (UK)"),
            'path': plugin.url_for("music_top_artists_by_country", country='united kingdom'),
            'icon': get_icon_path("top_uk"),
        },
        {
            'label': _("Top Artists (US)"),
            'path': plugin.url_for("music_top_artists_by_country", country='united states'),
            'icon': get_icon_path("top_us"),
        },
        {
            'label': _("Top Artists (CA)"),
            'path': plugin.url_for("music_top_artists_by_country", country='canada'),
            'icon': get_icon_path("top_ca"),
        },
        {
            'label': _("Top Artists (AU)"),
            'path': plugin.url_for("music_top_artists_by_country", country='australia'),
            'icon': get_icon_path("top_au"),
        },
        {
            'label': _("Top Tracks (NL)"),
            'path': plugin.url_for("music_top_tracks_by_country", country='netherlands'),
            'icon': get_icon_path("trending_nl"),
        },
        {
            'label': _("Top Tracks (UK)"),
            'path': plugin.url_for("music_top_tracks_by_country", country='united kingdom'),
            'icon': get_icon_path("trending_uk"),
        },
        {
            'label': _("Top Tracks (US)"),
            'path': plugin.url_for("music_top_tracks_by_country", country='united states'),
            'icon': get_icon_path("trending_us"),
        },
        {
            'label': _("Top Tracks (CA)"),
            'path': plugin.url_for("music_top_tracks_by_country", country='canada'),
            'icon': get_icon_path("trending_ca"),
        },
        {
            'label': _("Top Tracks (AU)"),
            'path': plugin.url_for("music_top_tracks_by_country", country='australia'),
            'icon': get_icon_path("trending_au"),
        }
    ]

    fanart = plugin.addon.getAddonInfo('fanart')
    for item in items:
        item['properties'] = {'fanart_image' : get_background_path()}
        
    return items
Пример #48
0
def write_batch_id_files(tv_ids, movie_ids, misc_ids):
    if len(tv_ids) > 0:
        shows_import_file_path = "special://profile/addon_data/plugin.video.metalliq/shows_to_add.txt"
        if xbmcvfs.exists(shows_import_file_path): os.remove(xbmc.translatePath(shows_import_file_path))
        tv_id_list = ""
        for id in tv_ids:
            tv_id_list = tv_id_list + str(id) + '\n'
        if not xbmcvfs.exists(shows_import_file_path):
            batch_add_file = xbmcvfs.File(shows_import_file_path, 'w')
            batch_add_file.write(tv_id_list)
            batch_add_file.close()
        dialogs.notify(msg='Converting tvshows, seasons & episodes', title='to id-list for batch-adding', delay=3000, image=get_icon_path("tvshows"))
    if len(movie_ids) > 0:
        movies_import_file_path = "special://profile/addon_data/plugin.video.metalliq/movies_to_add.txt"
        if xbmcvfs.exists(movies_import_file_path): os.remove(xbmc.translatePath(movies_import_file_path))
        movie_id_list = ""
        for id in movie_ids:
            movie_id_list = movie_id_list + str(id) + '\n'
        if not xbmcvfs.exists(movies_import_file_path):
            batch_add_file = xbmcvfs.File(movies_import_file_path, 'w')
            batch_add_file.write(movie_id_list)
            batch_add_file.close()
        dialogs.notify(msg='Converting movies', title='to id-list for batch-adding', delay=3000, image=get_icon_path("movies"))
    if len(misc_ids) > 0:
        misc_import_file_path = "special://profile/addon_data/plugin.video.metalliq/misc_to_add.txt"
        if xbmcvfs.exists(misc_import_file_path): os.remove(xbmc.translatePath(misc_import_file_path))
        misc_id_list = ""
        for id in misc_ids:
            misc_id_list = misc_id_list + str(id) + '\n'
        if not xbmcvfs.exists(misc_import_file_path):
            batch_add_file = xbmcvfs.File(misc_import_file_path, 'w')
            batch_add_file.write(misc_id_list)
            batch_add_file.close()
        dialogs.notify(msg='Converting miscellaneous', title='to id-list for batch-adding', delay=3000, image=get_icon_path("tvshows"))
Пример #49
0
def sources_setup():
    movielibraryfolder = plugin.get_setting(SETTING_MOVIES_LIBRARY_FOLDER,
                                            unicode)
    try:
        meta.library.movies.auto_movie_setup(movielibraryfolder)
        dialogs.notify(msg="{0}: {1} {2}".format(_('Movies'), _('Configure'),
                                                 _("Library").lower()),
                       title=_('Done'),
                       delay=1000,
                       image=get_icon_path("movies"))
    except:
        dialogs.notify(msg="{0}: {1} {2}".format(_("Movies"), _('Configure'),
                                                 _("Library").lower()),
                       title=_('Failed for %s') % _('Movies'),
                       delay=1000,
                       image=get_icon_path("movies"))
    tvlibraryfolder = plugin.get_setting(SETTING_TV_LIBRARY_FOLDER, unicode)
    try:
        meta.library.tvshows.auto_tvshows_setup(tvlibraryfolder)
        dialogs.notify(msg="{0}: {1} {2}".format(_('TV shows'), _('Configure'),
                                                 _("Library").lower()),
                       title=_('Done'),
                       delay=1000,
                       image=get_icon_path("tv"))
    except:
        dialogs.notify(msg="{0}: {1} {2}".format(_("TV shows"), _('Configure'),
                                                 _("Library").lower()),
                       title=_('Failed for %s') % _('TV shows'),
                       delay=1000,
                       image=get_icon_path("tv"))
    musiclibraryfolder = plugin.get_setting(SETTING_MUSIC_LIBRARY_FOLDER,
                                            unicode)
    try:
        meta.library.music.auto_music_setup(musiclibraryfolder)
        dialogs.notify(msg="{0}: {1} {2}".format(_('Music'), _('Configure'),
                                                 _("Library").lower()),
                       title=_('Done'),
                       delay=1000,
                       image=get_icon_path("music"))
    except:
        dialogs.notify(msg="{0}: {1} {2}".format(_("Music"), _('Configure'),
                                                 _("Library").lower()),
                       title=_('Failed for %s') % _('Music'),
                       delay=1000,
                       image=get_icon_path("music"))
    livelibraryfolder = plugin.get_setting(SETTING_LIVE_LIBRARY_FOLDER,
                                           unicode)
    try:
        meta.library.live.auto_live_setup(livelibraryfolder)
        dialogs.notify(msg="{0}: {1} {2}".format(_('TV'), _('Configure'),
                                                 _("Library").lower()),
                       title=_('Done'),
                       delay=1000,
                       image=get_icon_path("live"))
    except:
        dialogs.notify(msg="{0}: {1} {2}".format(_('TV'), _('Configure'),
                                                 _("Library").lower()),
                       title=_('Failed for %s') % _('TV'),
                       delay=1000,
                       image=get_icon_path("live"))
    return True
Пример #50
0
def play_channel_from_guide(channel, program, language, mode):
    # Get channelers to use
    if mode == 'select':
        play_plugin = ADDON_PICKER.id
    elif mode == 'default':
        play_plugin = plugin.get_setting(SETTING_LIVE_DEFAULT_CHANNELER, unicode)
    else:
        play_plugin = mode
    channelers = active_channelers("live")
    channelers = [p for p in channelers if p.id == play_plugin] or channelers
    if not channelers:
        dialogs.notify(msg="{0} {1} {2}".format(_("No cache").replace(_("Cache").lower(),_("TV")), _("Player").lower(), _("Enabled").lower()), title=_("Error"), delay=5000, image=get_icon_path("live"))
        action_cancel()
        return
    # Get parameters
    params = {}
    for lang in get_needed_langs(channelers):
        params[lang] = get_channel_parameters(channel, program, language)
        params[lang] = to_unicode(params[lang])
    # Go for it
    link = on_play_video(mode, channelers, params)
    if link:
        action_play({
            'label': channel,
            'path': link,
            'is_playable': True,
            'info_type': 'video',
        })
Пример #51
0
def tv():
    """ TV directory """
    items = [
        {
            'label': _("Search"),
            'path': plugin.url_for(tv_search),
            'icon': get_icon_path("search"),
        },
        {
            'label': _("Genres"),
            'path': plugin.url_for(tv_genres),
            'icon': get_icon_path("genres"),
        },
        {
            'label': _("Popular"),
            'path': plugin.url_for(tv_most_popular, page='1'),
            'icon': get_icon_path("popular"),
        },
        {
            'label': _("On the air"),
            'path': plugin.url_for(tv_now_playing, page='1'),
            'icon': get_icon_path("ontheair"),
        },
        {
            'label': _("Top rated"),
            'path': plugin.url_for(tv_top_rated, page='1'),
            'icon': get_icon_path("top_rated"),
        },
        {
            'label':
            _("Trakt collection"),
            'path':
            plugin.url_for(tv_trakt_collection),
            'icon':
            get_icon_path("traktcollection"),
            'context_menu': [(_("Add to library"), "RunPlugin({0})".format(
                plugin.url_for(tv_trakt_collection_to_library)))],
        },
        {
            'label':
            _("Trakt watchlist"),
            'path':
            plugin.url_for(tv_trakt_watchlist),
            'icon':
            get_icon_path("traktwatchlist"),
            'context_menu': [(_("Add to library"), "RunPlugin({0})".format(
                plugin.url_for(tv_trakt_watchlist_to_library)))],
        },
        {
            'label': _("Next episodes"),
            'path': plugin.url_for(tv_trakt_next_episodes),
            'icon': get_icon_path("traktnextepisodes"),
        },
        {
            'label': _("My calendar"),
            'path': plugin.url_for(tv_trakt_calendar),
            'icon': get_icon_path("traktcalendar"),
        },
        {
            'label': _("Trakt recommendations"),
            'path': plugin.url_for(tv_trakt_recommendations),
            'icon': get_icon_path("traktrecommendations"),
        },
    ]

    fanart = plugin.addon.getAddonInfo('fanart')
    for item in items:
        item['properties'] = {'fanart_image': fanart}

    return items
Пример #52
0
def lists_search_for_lists_term(term, page):
    lists, pages = trakt.search_for_list(term, page)
    page = int(page)
    pages = int(pages)
    items = []
    for list in lists:
        if "list" in list:
            list_info = list["list"]
        else:
            continue
        name = list_info["name"]
        user = list_info["username"]
        slug = list_info["ids"]["slug"]
        total = list_info["item_count"]

        info = {}
        info['title'] = name
        if "description" in list_info: info["plot"] = list_info["description"]
        else: info["plot"] = _("No description available")
        if user != None and total != None and total != 0:
            items.append({
                'label':
                "{0} - {1} ({2})".format(to_utf8(name), to_utf8(user), total),
                'path':
                plugin.url_for("lists_trakt_show_list", user=user, slug=slug),
                'context_menu':
                [(_("Scan item to library"), "RunPlugin({0})".format(
                    plugin.url_for("lists_trakt_add_all_to_library",
                                   user=user,
                                   slug=slug))),
                 ("{0} ({1})".format(_("Play"),
                                     _("Random").lower()),
                  "RunPlugin({0})".format(
                      plugin.url_for("lists_trakt_play_random",
                                     user=user,
                                     slug=slug)))],
                'info':
                info,
                'icon':
                get_icon_path("traktlikedlists"),
                'thumbnail':
                get_icon_path("traktlikedlists"),
            })
            fanart = plugin.addon.getAddonInfo('fanart')
            for item in items:
                item['properties'] = {'fanart_image': get_background_path()}
    if pages > page:
        items.append({
            'label':
            _("Next page").format() + "  >>  (%s/%s)" % (page + 1, pages),
            'path':
            plugin.url_for("lists_search_for_lists_term",
                           term=term,
                           page=page + 1),
            'icon':
            get_icon_path("item_next"),
            'thumbnail':
            get_icon_path("item_next"),
        })
    if FORCE == True:
        return plugin.finish(items=items, sort_methods=SORT, view_mode=VIEW)
    else:
        return plugin.finish(items=items, sort_methods=SORT)
Пример #53
0
def movies():
    """ Movies directory """
    items = [
        {
            'label': _("Search"),
            'path': plugin.url_for(movies_search),
            'icon': get_icon_path("search"),
        },
        {
            'label': _("Genres"),
            'path': plugin.url_for(movies_genres),
            'icon': get_icon_path("genres"),
        },
        {
            'label': _("Popular"),
            'path': plugin.url_for(movies_most_popular, page='1'),
            'icon': get_icon_path("popular"),
        },
        {
            'label': _("In theatres"),
            'path': plugin.url_for(movies_now_playing, page='1'),
            'icon': get_icon_path("intheatres"),
        },
        {
            'label': _("Top rated"),
            'path': plugin.url_for(movies_top_rated, page='1'),
            'icon': get_icon_path("top_rated"),
        },
        {
            'label': _("Blockbusters"),
            'path': plugin.url_for(movies_blockbusters, page='1'),
            'icon': get_icon_path("most_voted"),
        },
        {
            'label':
            _("Trakt collection"),
            'path':
            plugin.url_for(movies_trakt_collection),
            'icon':
            get_icon_path("traktcollection"),
            'context_menu': [(_("Add to library"), "RunPlugin({0})".format(
                plugin.url_for(movies_trakt_collection_to_library)))],
        },
        {
            'label':
            _("Trakt watchlist"),
            'path':
            plugin.url_for(movies_trakt_watchlist),
            'icon':
            get_icon_path("traktwatchlist"),
            'context_menu': [(_("Add to library"), "RunPlugin({0})".format(
                plugin.url_for(movies_trakt_watchlist_to_library)))],
        },
        {
            'label': _("Trakt recommendations"),
            'path': plugin.url_for(movies_trakt_recommendations),
            'icon': get_icon_path("traktrecommendations"),
        },
    ]

    fanart = plugin.addon.getAddonInfo('fanart')
    for item in items:
        item['properties'] = {'fanart_image': fanart}

    return items
Пример #54
0
def batch_find_list_ids(items):
    tv_ids = []
    misc_ids = []
    movie_ids = []
    import_tvdb()
    for item in items:
        if not isinstance(item, type):
            if "'tvdb': " in str(item) or "'tvdb_id': " in str(item):
                if "'tvdb': " in str(item):
                    pre_tvdb = str(item).split("'tvdb': ")
                elif "'tvdb_id': " in str(item):
                    pre_tvdb = str(item).split("'tvdb_id': ")
                if len(pre_tvdb) == 2: pro_tvdb = str(pre_tvdb[1]).split(",")
                elif len(pre_tvdb) == 3: pro_tvdb = str(pre_tvdb[2]).split(",")
                tvdb_id = str(pro_tvdb[0])
                if not tvdb_id or tvdb_id == None or tvdb_id == "None":
                    pre_imdb = str(item).split("u'imdb': u'")
                    pro_imdb = str(pre_imdb[1]).split("'")
                    imdb = str(pro_imdb[0])
                    tvdb_id = tvdb.search_by_imdb(imdb)
                    if not tvdb_id: misc_ids.append(imdb)
                if not tvdb_id in tv_ids and tvdb_id != None and tvdb_id != "None":
                    tv_ids.append(tvdb_id)
            elif "'tmdb': " in str(item):
                pre_tmdb = str(item).split("'tmdb': ")
                pro_tmdb = str(pre_tmdb[1]).split(",")
                tmdb = str(pro_tmdb[0])
                if not tmdb or tmdb == None or tmdb == "None":
                    pre_imdb = str(item).split("u'imdb': u'")
                    pro_imdb = str(pre_imdb[1]).split("'")
                    imdb = str(pro_imdb[0])
                    tvdb_id = tvdb.search_by_imdb(imdb)
                    if not imdb and not tvdb_id:
                        return dialogs.notify(msg="No id found for item",
                                              title='',
                                              delay=3000,
                                              image=get_icon_path("chappaai"))
                    if imdb and not tvdb_id:
                        if imdb not in movie_ids and imdb != None and imdb != "None":
                            movie_ids.append(imdb)
                    elif tvdb_id:
                        if not tvdb_id in tv_ids and tvdb_id != None and tvdb_id != "None":
                            tv_ids.append(tvdb_id)
                if not tmdb in movie_ids and tmdb != None and tmdb != "None":
                    movie_ids.append(tmdb)
        else:
            if "tvshowtitle" in str(item["info"]):
                if item["info"]["tvdb_id"] != None and item["info"][
                        "tvdb_id"] != "" and str(
                            item["info"]["tvdb_id"]) not in tv_ids:
                    tv_ids.append(str(item["info"]["tvdb_id"]))
                elif item["info"]["imdb_id"] != None and item["info"][
                        "imdb_id"] != "" and str(
                            item["info"]["imdb_id"]) not in tv_ids:
                    tv_ids.append(str(item["info"]["imdb_id"]))
            else:
                if item["info"]["tmdb"] != None and item["info"][
                        "tmdb"] != "" and str(
                            item["info"]["tmdb"]) not in movie_ids:
                    movie_ids.append(str(item["info"]["tmdb"]))
                elif item["info"]["imdb_id"] != None and item["info"][
                        "imdb_id"] != "" and str(
                            item["info"]["imdb_id"]) not in movie_ids:
                    movie_ids.append(str(item["info"]["imdb_id"]))
    return misc_ids, movie_ids, tv_ids
Пример #55
0
def music_search_term(term, page):
    items = [{
        'label':
        "{0}: '{1}' - {2} ({3})".format(_("Search"), term, _("Albums"),
                                        "LastFM"),
        'path':
        plugin.url_for("music_search_album_term", term=term, page='1'),
        'icon':
        get_icon_path("music"),
        'thumbnail':
        get_icon_path("music"),
    }, {
        'label':
        "{0}: '{1}' - {2} ({3})".format(_("Search"), term, _("Artists"),
                                        "LastFM"),
        'path':
        plugin.url_for("music_search_artist_term", term=term, page='1'),
        'icon':
        get_icon_path("music"),
        'thumbnail':
        get_icon_path("music"),
    }, {
        'label':
        "{0}: '{1}' - {2} ({3})".format(_("Search"), term, _("Tracks"),
                                        "LastFM"),
        'path':
        plugin.url_for("music_search_track_term", term=term, page='1'),
        'icon':
        get_icon_path("music"),
        'thumbnail':
        get_icon_path("music"),
    }, {
        'label':
        "{0}: '{1}' - {2} ({3})".format(_("Search"), term, _("Channels"),
                                        "Live addons"),
        'path':
        plugin.url_for("live_search_term", term=term),
        'icon':
        get_icon_path("live"),
        'thumbnail':
        get_icon_path("live"),
    }, {
        'label':
        "{0}: '{1}' - {2} ({3})".format(_("Search"), term, _("Playlists"),
                                        "Trakt"),
        'path':
        plugin.url_for("lists_search_for_lists_term", term=term, page='1'),
        'icon':
        get_icon_path("lists"),
        'thumbnail':
        get_icon_path("lists"),
    }, {
        'label':
        "{0}: '{1}' - {2} ({3})".format(_("Search"), term, _("Movies"),
                                        "TMDb"),
        'path':
        plugin.url_for("tmdb_movies_search_term", term=term, page='1'),
        'icon':
        get_icon_path("movies"),
        'thumbnail':
        get_icon_path("movies"),
    }, {
        'label':
        "{0}: '{1}' - {2} ({3})".format(_("Search"), term, _("Movies"),
                                        "Trakt"),
        'path':
        plugin.url_for("trakt_movies_search_term", term=term, page='1'),
        'icon':
        get_icon_path("movies"),
        'thumbnail':
        get_icon_path("movies"),
    }, {
        'label':
        "{0}: '{1}' - {2} ({3})".format(_("Search"), term, _("TV shows"),
                                        "TMDb"),
        'path':
        plugin.url_for("tmdb_tv_search_term", term=term, page='1'),
        'icon':
        get_icon_path("tv"),
        'thumbnail':
        get_icon_path("tv"),
    }, {
        'label':
        "{0}: '{1}' - {2} ({3})".format(_("Search"), term, _("TV shows"),
                                        "Trakt"),
        'path':
        plugin.url_for("trakt_tv_search_term", term=term, page='1'),
        'icon':
        get_icon_path("tv"),
        'thumbnail':
        get_icon_path("tv"),
    }, {
        'label':
        "{0}: '{1}' - {2} ({3})".format(_("Search"), term, _("TV shows"),
                                        "TVDb"),
        'path':
        plugin.url_for("tv_search_term", term=term, page='1'),
        'icon':
        get_icon_path("search"),
        'thumbnail':
        get_icon_path("search"),
    }, {
        'label':
        "{0}: '{1}' - {2} ({3})".format(_("Search"), term, _("Music"),
                                        plugin.addon.getAddonInfo('name')),
        'path':
        plugin.url_for("music_search_term", term=term, page='1'),
        'icon':
        get_icon_path("search"),
        'thumbnail':
        get_icon_path("search"),
    }, {
        'label': "{0} {1}".format(_("Edit"),
                                  _("Search string").lower()),
        'path': plugin.url_for("music_search_edit", term=term),
        'icon': get_icon_path("search"),
        'thumbnail': get_icon_path("search"),
    }]
    for item in items:
        item['properties'] = {'fanart_image': get_background_path()}
    if FORCE == True:
        plugin.set_view_mode(VIEW)
        return items
    else:
        return items
Пример #56
0
def _lists_trakt_show_list(list_items):
    genres_dict = trakt.trakt_get_genres("tv")
    if type(list_items) == str:
        import urllib
        list_items = eval(urllib.unquote(list_items))
    items = []
    for list_item in list_items:
        item = None
        item_type = list_item["type"]
        if item_type == "show":
            tvdb_id = list_item["show"]["ids"]["tvdb"]
            if tvdb_id != "" and tvdb_id != None:
                show = list_item["show"]
                info = get_tvshow_metadata_trakt(show, genres_dict)
                context_menu = [
                    (_("Scan item to library"), "RunPlugin({0})".format(
                        plugin.url_for("tv_add_to_library", id=tvdb_id))),
                    (_("TV show information"), 'Action(Info)'),
                    ("{0}".format(
                        _("Remove from library").replace(
                            _("Library").lower(),
                            _("Playlist").lower())), "RunPlugin({0})".format(
                                plugin.url_for("lists_remove_show_from_list",
                                               src="tvdb",
                                               id=tvdb_id)))
                ]
                if plugin.get_setting(SETTING_TRAKT_LIST_ARTWORK,
                                      bool) == False:
                    item = ({
                        'label': info['title'],
                        'path': plugin.url_for("tv_tvshow", id=tvdb_id),
                        'context_menu': context_menu,
                        'thumbnail': info['poster'],
                        'icon': get_icon_path("tv"),
                        'poster': info['poster'],
                        'properties': {
                            'fanart_image': info['fanart']
                        },
                        'info_type': 'video',
                        'stream_info': {
                            'video': {}
                        },
                        'info': info
                    })
                else:
                    item = make_tvshow_item(info)
            else:
                item = None
        elif item_type == "season":
            tvdb_id = list_item["show"]["ids"]["tvdb"]
            season = list_item["season"]
            show = list_item["show"]
            show_info = get_tvshow_metadata_trakt(show, genres_dict)
            season_info = get_season_metadata_trakt(show_info, season,
                                                    genres_dict)
            label = "{0} - Season {1}".format(show["title"], season["number"])
            context_menu = [
                (_("Scan item to library"), "RunPlugin({0})".format(
                    plugin.url_for("tv_add_to_library", id=tvdb_id))),
                ("%s %s" % (_("Season"), _("Information").lower()),
                 'Action(Info)'),
                ("{0}".format(
                    _("Remove from library").replace(
                        _("Library").lower(),
                        _("Playlist").lower())),
                 "RunPlugin({0})".format(
                     plugin.url_for("lists_remove_season_from_list",
                                    src="tvdb",
                                    id=tvdb_id,
                                    season=list_item["season"]["number"])))
            ]
            item = ({
                'label':
                label,
                'path':
                plugin.url_for("tv_season",
                               id=tvdb_id,
                               season_num=list_item["season"]["number"]),
                'context_menu':
                context_menu,
                'info':
                season_info,
                'thumbnail':
                season_info['poster'],
                'icon':
                get_icon_path("tv"),
                'poster':
                season_info['poster'],
                'properties': {
                    'fanart_image': season_info['fanart']
                },
            })
        elif item_type == "episode":
            tvdb_id = list_item["show"]["ids"]["tvdb"]
            episode = list_item["episode"]
            show = list_item["show"]
            season_number = episode["season"]
            episode_number = episode["number"]
            show_info = get_tvshow_metadata_trakt(show, genres_dict)
            episode_info = get_episode_metadata_trakt(show_info, episode)
            label = "{0} - S{1}E{2} - {3}".format(show_info["title"],
                                                  season_number,
                                                  episode_number,
                                                  episode_info["title"])
            context_menu = [
                ("{0} {1}...".format(_("Select"),
                                     _("Stream").lower()),
                 "PlayMedia({0})".format(
                     plugin.url_for("tv_play",
                                    id=tvdb_id,
                                    season=season_number,
                                    episode=episode_number,
                                    mode='select'))),
                ("%s %s" % (_("Episode"), _("Information").lower()),
                 'Action(Info)'),
                (_("Add to playlist"), "RunPlugin({0})".format(
                    plugin.url_for("lists_add_episode_to_list",
                                   src='tvdb',
                                   id=tvdb_id,
                                   season=season_number,
                                   episode=episode_number))),
                ("{0}".format(
                    _("Remove from library").replace(
                        _("Library").lower(),
                        _("Playlist").lower())), "RunPlugin({0})".format(
                            plugin.url_for("lists_remove_season_from_list",
                                           src="tvdb",
                                           id=tvdb_id,
                                           season=season_number,
                                           episode=episode_number)))
            ]
            item = ({
                'label':
                label,
                'path':
                plugin.url_for("tv_play",
                               id=tvdb_id,
                               season=season_number,
                               episode=episode_number,
                               mode='default'),
                'context_menu':
                context_menu,
                'info':
                episode_info,
                'is_playable':
                True,
                'info_type':
                'video',
                'stream_info': {
                    'video': {}
                },
                'thumbnail':
                episode_info['poster'],
                'poster':
                episode_info['poster'],
                'icon':
                get_icon_path("tv"),
                'properties': {
                    'fanart_image': episode_info['fanart']
                },
            })
        elif item_type == "movie":
            movie = list_item["movie"]
            movie_info = get_trakt_movie_metadata(movie)
            try:
                tmdb_id = movie_info['tmdb']
            except:
                tmdb_id = ""
            try:
                imdb_id = movie_info['imdb']
            except:
                imdb_id = ""
            if tmdb_id != None and tmdb_id != "":
                src = "tmdb"
                id = tmdb_id
            elif imdb_id != None and mdb_id != "":
                src = "imdb"
                id = imdb_id
            else:
                src = ""
                id = ""
            if src == "": item = None
            else:
                if xbmc.getCondVisibility("system.hasaddon(script.qlickplay)"):
                    context_menu = [
                        (_("Scan item to library"), "RunPlugin({0})".format(
                            plugin.url_for("movies_add_to_library",
                                           src=src,
                                           id=id))),
                        ("%s %s" % (_("Movie"), _("Trailer").lower()),
                         "RunScript(script.qlickplay,info=playtrailer,id={0})".
                         format(id)),
                        ("[COLOR ff0084ff]Q[/COLOR]lick[COLOR ff0084ff]P[/COLOR]lay",
                         "RunScript(script.qlickplay,info=movieinfo,id={0})".
                         format(id)),
                        ("%s %s (%s)" % ("Recommended", _("movies"), "TMDb"),
                         "ActivateWindow(10025,plugin://script.qlickplay/?info=similarmovies&id={0})"
                         .format(id))
                    ]
                elif xbmc.getCondVisibility(
                        "system.hasaddon(script.extendedinfo)"):
                    context_menu = [
                        (_("Scan item to library"), "RunPlugin({0})".format(
                            plugin.url_for("movies_add_to_library",
                                           src=src,
                                           id=id))),
                        ("%s %s" % (_("Movie"), _("Trailer").lower()),
                         "RunScript(script.extendedinfo,info=playtrailer,id={0})"
                         .format(id)),
                        ((_("Extended movie info"), _("Extended movie info"),
                          "RunScript(script.extendedinfo,info=extendedinfo,id={0})"
                          .format(id)),
                         ("%s %s (%s)" % ("Recommended", _("movies"), "TMDb"),
                          "ActivateWindow(10025,plugin://script.extendedinfo/?info=similarmovies&id={0})"
                          .format(id)))
                    ]
                else:
                    context_menu = [
                        (_("Scan item to library"), "RunPlugin({0})".format(
                            plugin.url_for("movies_add_to_library",
                                           src=src,
                                           id=id)))
                    ]
                    context_menu.append(
                        ("%s %s (%s)" % ("Related", _("movies"), "Trakt"),
                         "ActivateWindow(10025,{0})".format(
                             plugin.url_for("movies_related", id=id, page=1))))
                    context_menu.append(
                        ("{0} {1}...".format(_("Select"),
                                             _("Stream").lower()),
                         "PlayMedia({0})".format(
                             plugin.url_for("movies_play",
                                            src=src,
                                            id=id,
                                            mode='select'))))
                    context_menu.append(
                        (_("Add to playlist"), "RunPlugin({0})".format(
                            plugin.url_for("lists_add_movie_to_list",
                                           src=src,
                                           id=id))))
                    context_menu.append(
                        (_("Movie information"), 'Action(Info)'))
                if imdb_id != None and imdb_id != "":
                    context_menu.append(
                        ("Show Actors", "ActivateWindow(10025,{0})".format(
                            plugin.url_for("people_list_movie_people",
                                           id=imdb_id,
                                           source="imdb",
                                           fanart=get_background_path()))))
                elif tmdb_id != None and tmdb_id != "":
                    context_menu.append(
                        ("Show Actors", "ActivateWindow(10025,{0})".format(
                            plugin.url_for("people_list_movie_people",
                                           id=tmdb_id,
                                           source="tmdb",
                                           fanart=get_background_path()))))
            item = make_movie_item(movie_info, True)
        elif item_type == "person":
            person_id = list_item['person']['ids']['trakt']
            person_tmdb_id = list_item['person']['ids']['tmdb']
            context_menu = []
            try:
                import_tmdb()
                person_images = tmdb.People(
                    person_tmdb_id).images()['profiles']
                person_image = 'https://image.tmdb.org/t/p/w640' + person_images[
                    0]['file_path']
            except:
                person_image = ''
            person_name = to_utf8(list_item['person']['name'])
            item = ({
                'label':
                person_name,
                'path':
                plugin.url_for("trakt_movies_person", person_id=person_id),
                'context_menu':
                context_menu,
                #'info': season_info,
                'thumbnail':
                person_image,
                'icon':
                get_icon_path("movies"),
                'poster':
                person_image,
                'properties': {
                    'fanart_image': person_image
                },
            })
        if item is not None:
            items.append(item)
    for item in items:
        item['properties'] = {'fanart_image': get_background_path()}
    return items
Пример #57
0
def music_search_track_term(term, page):
    search_results = lastfm.search_track(term, page)
    tracks = search_results["trackmatches"]["track"]
    items_per_page = search_results["opensearch:itemsPerPage"]
    start_index = search_results["opensearch:startIndex"]
    total_results = search_results["opensearch:totalResults"]
    items = []
    for track in tracks:
        large_image = track["image"][-1]["#text"]
        track_name = to_utf8(track["name"])
        artist_name = to_utf8(track["artist"])
        context_menu = [("{0} {1} {2}...".format(_("Select"),
                                                 _("Audio").lower(),
                                                 _("Stream").lower()),
                         "PlayMedia({0})".format(
                             plugin.url_for("music_play_audio",
                                            artist_name=artist_name,
                                            track_name=track_name,
                                            mode='context'))),
                        (_("Scan item to library"), "RunPlugin({0})".format(
                            plugin.url_for("music_add_to_library",
                                           artist_name=artist_name,
                                           track_name=track_name))),
                        ("{0} {1} {2}...".format(_("Select"),
                                                 _("Video").lower(),
                                                 _("Stream").lower()),
                         "RunPlugin({0})".format(
                             plugin.url_for("music_play_video",
                                            artist_name=artist_name,
                                            track_name=track_name,
                                            mode='context')))]
        item = {
            'label':
            "{0} - {1}".format(artist_name, track_name),
            'path':
            plugin.url_for("music_play_audio",
                           artist_name=artist_name,
                           track_name=track_name),
            'thumbnail':
            large_image,
            'icon':
            "DefaultMusic.png",
            'poster':
            large_image,
            'info': {
                'artist': artist_name,
            },
            'info_type':
            'music',
            'context_menu':
            context_menu
        }

        items.append(item)
    if start_index + items_per_page < total_results:
        items.append({
            'label':
            _("Next >>"),
            'icon':
            get_icon_path("item_next"),
            'path':
            plugin.url_for("music_search_track_term",
                           term=term,
                           page=int(page) + 1)
        })
    if FORCE == True:
        plugin.set_view_mode(VIEW)
        return items
    else:
        return items
Пример #58
0
@plugin.route('/clear_cache')
def clear_cache():
    """ Clear all caches """
    for filename in os.listdir(plugin.storage_path):
        file_path = os.path.join(plugin.storage_path, filename)
        try:
            if os.path.isfile(file_path):
                os.unlink(file_path)
            elif os.path.isdir(file_path):
                shutil.rmtree(file_path)
        except Exception, e:
            traceback.print_exc()
    dialogs.notify(msg='Cache',
                   title='Deleted',
                   delay=5000,
                   image=get_icon_path("metalliq"))


@plugin.route('/update_library')
def update_library():
    is_updating = get_property("updating_library")
    is_syncing = get_property("syncing_library")
    now = time.time()
    if is_syncing and now - int(is_syncing) < plugin.get_setting(
            SETTING_UPDATE_LIBRARY_INTERVAL, int) * 60:
        plugin.log.info("Skipping library sync")
    else:
        if plugin.get_setting(SETTING_LIBRARY_SYNC_COLLECTION,
                              bool) == True or plugin.get_setting(
                                  SETTING_LIBRARY_SYNC_WATCHLIST,
                                  bool) == True:
def live():
    """ Live TV directory """
    library_channels = get_library_channels()
    if library_channels:
        items = [
            {
                'label': "{0} {1}".format(_("View your"),
                                          _("Channels").lower()),
                'path': plugin.url_for("browse_library_channels"),
                'icon': get_icon_path("library"),
            },
            {
                'label': "{0}: {1}".format(_("Search"), _("Channel")),
                'path': plugin.url_for("live_search"),
                'icon': get_icon_path("search"),
            },
        ]
    else:
        items = [
            {
                'label': "{0}: {1}".format(_("Search"), _("Channel")),
                'path': plugin.url_for("live_search"),
                'icon': get_icon_path("search"),
            },
        ]
    channels = get_channels()
    if channels:
        items.append({
            'label': _("Remove %s") % _("Channels").lower(),
            'path': plugin.url_for("clear_channels"),
            'icon': get_icon_path("clear"),
        })
    for (index, channel) in enumerate(channels):
        channelori = channel
        channel = to_utf8(channel)
        if channel in library_channels:
            context_menu = []
        else:
            context_menu = [(_("Scan item to library"),
                             "RunPlugin({0})".format(
                                 plugin.url_for("live_add_to_library",
                                                channel=channel,
                                                mode="library")))]
        if channel in channels:
            context_menu.append((_("Remove %s") % _("Channel").lower(),
                                 "RunPlugin({0})".format(
                                     plugin.url_for("remove_channel",
                                                    channel=channel))))
        if index != 0:
            context_menu.append((_("Move up"), "RunPlugin({0})".format(
                plugin.url_for("move_channel_up", channel=channel))))
        if index != len(channels) - 1:
            context_menu.append((_("Move down"), "RunPlugin({0})".format(
                plugin.url_for("move_channel_down", channel=channel))))
        items.append({
            'label':
            channel,
            'path':
            plugin.url_for("live_play",
                           channel=channel,
                           program="None",
                           language="en",
                           mode="external"),
            'icon':
            "DefaultVideo.png",
            'context_menu':
            context_menu,
        })
    return items
Пример #60
0
def lists_trakt_add_all_to_library(user, slug):
    items = lists_trakt_show_list(user, slug)
    tv_ids = []
    movie_ids = []
    for item in items:
        if not isinstance(item, type):
            if "/tv/" in str(item):
                if "/tv/play/" in str(item):
                    pre_tvdb = str(item).split(" (plugin://plugin.video.metalliq/tv/play/")
                    pro_tvdb = str(pre_tvdb[1]).split("/")
                    tvdb = str(pro_tvdb[0])
                    if not tvdb in tv_ids: tv_ids.append(tvdb)
                elif "/tv/tvdb/" in str(item):
                    pre_tvdb = str(item).split(" (plugin://plugin.video.metalliq/tv/tvdb/")
                    if "/" in str(pre_tvdb[1]): pro_tvdb = str(pre_tvdb[1]).split("/")
                    else: pro_tvdb = str(pre_tvdb[1]).split(")")
                    tvdb = str(pro_tvdb[0])
                    if not tvdb in tv_ids: tv_ids.append(tvdb)
            elif "/movies/" in str(item):
                if "/tmdb/" in str(item):
                    pre_tmdb = str(item).split(" (plugin://plugin.video.metalliq/movies/play/tmdb/")
                    pro_tmdb = str(pre_tmdb[1]).split("/")
                    tmdb = str(pro_tmdb[0])
                    if not tmdb in movie_ids: movie_ids.append(tmdb)
                elif "/imdb/" in str(item):
                    pre_imdb = str(item).split(" (plugin://plugin.video.metalliq/movies/play/imdb/")
                    pro_imdb = str(pre_imdb[1]).split("/")
                    imdb = str(pro_imdb[0])
                    if not imdb in movie_ids: movie_ids.append(imdb)
        else:
            if "tvshowtitle" in str(item["info"]):
                if item["info"]["tvdb_id"] != None and item["info"]["tvdb_id"] != "" and str(item["info"]["tvdb_id"]) not in tv_ids: tv_ids.append(str(item["info"]["tvdb_id"]))
                elif item["info"]["imdb_id"] != None and item["info"]["imdb_id"] != "" and str(item["info"]["imdb_id"]) not in tv_ids: tv_ids.append(str(item["info"]["imdb_id"]))
            else:
                if item["info"]["tmdb"] != None and item["info"]["tmdb"] != "" and str(item["info"]["tmdb"]) not in movie_ids: movie_ids.append(str(item["info"]["tmdb"]))
                elif item["info"]["imdb_id"] != None and item["info"]["imdb_id"] != "" and str(item["info"]["imdb_id"]) not in movie_ids: movie_ids.append(str(item["info"]["imdb_id"]))
    if len(tv_ids) > 0:
        shows_list_file_path = "special://profile/addon_data/plugin.video.metalliq/shows_from_" + slug + "_by_" + user + ".txt"
        shows_import_file_path = "special://profile/addon_data/plugin.video.metalliq/shows_to_add.txt"
        if xbmcvfs.exists(shows_list_file_path): os.remove(xbmc.translatePath(shows_import_file_path))
        if xbmcvfs.exists(shows_import_file_path): os.remove(xbmc.translatePath(shows_import_file_path))
        tv_id_list = ""
        for id in tv_ids:
            tv_id_list = tv_id_list + str(id) + '\n'
        if not xbmcvfs.exists(shows_list_file_path):
            batch_add_file = xbmcvfs.File(shows_list_file_path, 'w')
            batch_add_file.write(tv_id_list)
            batch_add_file.close()
        if not xbmcvfs.exists(shows_import_file_path):
            batch_add_file = xbmcvfs.File(shows_import_file_path, 'w')
            batch_add_file.write(tv_id_list)
            batch_add_file.close()
        plugin.notify(msg='TVShows, seasons & episodes', title='Converted to list.txt', delay=3000, image=get_icon_path("tvshows"))
    if len(movie_ids) > 0:
        movies_list_file_path = "special://profile/addon_data/plugin.video.metalliq/movies_from_" + slug + "_by_" + user + ".txt"
        movies_import_file_path = "special://profile/addon_data/plugin.video.metalliq/movies_to_add.txt"
        if xbmcvfs.exists(movies_list_file_path): os.remove(xbmc.translatePath(movies_import_file_path))
        if xbmcvfs.exists(movies_import_file_path): os.remove(xbmc.translatePath(movies_import_file_path))
        movie_id_list = ""
        for id in movie_ids:
            movie_id_list = movie_id_list + str(id) + '\n'
        if not xbmcvfs.exists(movies_list_file_path):
            batch_add_file = xbmcvfs.File(movies_list_file_path, 'w')
            batch_add_file.write(movie_id_list)
            batch_add_file.close()
        if not xbmcvfs.exists(movies_import_file_path):
            batch_add_file = xbmcvfs.File(movies_import_file_path, 'w')
            batch_add_file.write(movie_id_list)
            batch_add_file.close()
        plugin.notify(msg='Movies', title='Converted to list.txt', delay=3000, image=get_icon_path("movies"))
    plugin.notify(msg='Generating', title='.strm-files', delay=3000, image=get_icon_path("metalliq"))
    xbmc.executebuiltin("RunPlugin(plugin://plugin.video.metalliq/movies/batch_add_to_library)")