Esempio n. 1
0
def ManageBlacklistMenu(**kwargs):
    oc = SubFolderObjectContainer(title2=unicode(kwargs["title"]),
                                  replace_parent=True)
    rating_key = kwargs["rating_key"]
    part_id = kwargs["part_id"]
    language = kwargs["language"]
    remove_sub_key = kwargs.pop("remove_sub_key", None)
    current_data = unicode(kwargs["current_data"])

    current_sub, stored_subs, storage = get_current_sub(
        rating_key, part_id, language)
    current_bl, subs = stored_subs.get_blacklist(part_id, language)

    if remove_sub_key:
        remove_sub_key = tuple(remove_sub_key.split("__"))
        stored_subs.blacklist(part_id, language, remove_sub_key, add=False)
        storage.save(stored_subs)
        Log.Info("Removed %s from blacklist", remove_sub_key)

    kwargs.pop("randomize")

    oc.add(
        DirectoryObject(key=Callback(ItemDetailsMenu,
                                     rating_key=kwargs["rating_key"],
                                     item_title=kwargs["item_title"],
                                     title=kwargs["title"],
                                     randomize=timestamp()),
                        title=_(u"< Back to %s", kwargs["title"]),
                        summary=current_data,
                        thumb=default_thumb))

    def sorter(pair):
        # thanks RestrictedModule parser for messing with lambda (x, y)
        return pair[1]["date_added"]

    for sub_key, data in sorted(current_bl.iteritems(),
                                key=sorter,
                                reverse=True):
        provider_name, subtitle_id = sub_key
        title = _(
            u"%(provider_name)s, %(subtitle_id)s (added: %(date_added)s, %(mode)s), Language: %(language)s, "
            u"Score: %(score)i, Storage: %(storage_type)s",
            provider_name=provider_name,
            subtitle_id=subtitle_id,
            date_added=df(data["date_added"]),
            mode=current_sub.get_mode_verbose(data["mode"]),
            language=display_language(Language.fromietf(language)),
            score=data["score"],
            storage_type=data["storage_type"])
        oc.add(
            DirectoryObject(key=Callback(ManageBlacklistMenu,
                                         remove_sub_key="__".join(sub_key),
                                         randomize=timestamp(),
                                         **kwargs),
                            title=title,
                            summary=_(u"Remove subtitle from blacklist")))

    storage.destroy()

    return oc
Esempio n. 2
0
def ListStoredSubsForItemMenu(**kwargs):
    oc = SubFolderObjectContainer(title2=unicode(kwargs["title"]), replace_parent=True)
    rating_key = kwargs["rating_key"]
    part_id = kwargs["part_id"]
    language = Language.fromietf(kwargs["language"])

    current_sub, stored_subs, storage = get_current_sub(rating_key, part_id, language)
    all_subs = stored_subs.get_all(part_id, language)
    kwargs.pop("randomize")

    for key, subtitle in sorted(filter(lambda x: x[0] != "current", all_subs.items()),
                                key=lambda x: x[1].date_added, reverse=True):
        is_current = key == all_subs["current"]

        summary = u"added: %s, %s, Language: %s, Score: %i, Storage: %s" % \
                  (df(subtitle.date_added),
                   subtitle.mode_verbose, display_language(language), subtitle.score,
                   subtitle.storage_type)

        sub_name = subtitle.provider_name
        if sub_name == "embedded":
            sub_name += " (%s)" % subtitle.id

        oc.add(DirectoryObject(
            key=Callback(SelectStoredSubForItemMenu, randomize=timestamp(), sub_key="__".join(key), **kwargs),
            title=u"%s%s, Score: %s" % ("Current: " if is_current else "Stored: ", sub_name,
                                        subtitle.score),
            summary=summary
        ))

    return oc
Esempio n. 3
0
def HistoryMenu():
    from support.history import get_history
    history = get_history()
    oc = SubFolderObjectContainer(title2=_("History"), replace_parent=True)

    for item in history.items[:100]:
        possible_language = item.language
        language_display = item.lang_name if not possible_language else display_language(
            possible_language)

        oc.add(
            DirectoryObject(key=Callback(ItemDetailsMenu,
                                         title=item.title,
                                         item_title=item.item_title,
                                         rating_key=item.rating_key),
                            title=u"%s (%s)" %
                            (item.item_title, _(item.mode_verbose)),
                            summary=_(u"%s in %s (%s, score: %s), %s",
                                      language_display, item.section_title,
                                      _(item.provider_name), item.score,
                                      df(item.time)),
                            thumb=item.thumb or default_thumb))

    history.destroy()

    return oc
Esempio n. 4
0
def ManageBlacklistMenu(**kwargs):
    oc = SubFolderObjectContainer(title2=unicode(kwargs["title"]), replace_parent=True)
    rating_key = kwargs["rating_key"]
    part_id = kwargs["part_id"]
    language = kwargs["language"]
    remove_sub_key = kwargs.pop("remove_sub_key", None)
    current_data = unicode(kwargs["current_data"])

    current_sub, stored_subs, storage = get_current_sub(rating_key, part_id, language)
    current_bl, subs = stored_subs.get_blacklist(part_id, language)

    if remove_sub_key:
        remove_sub_key = tuple(remove_sub_key.split("__"))
        stored_subs.blacklist(part_id, language, remove_sub_key, add=False)
        storage.save(stored_subs)
        Log.Info("Removed %s from blacklist", remove_sub_key)

    kwargs.pop("randomize")

    oc.add(DirectoryObject(
        key=Callback(ItemDetailsMenu, rating_key=kwargs["rating_key"], item_title=kwargs["item_title"],
                     title=kwargs["title"], randomize=timestamp()),
        title=_(u"< Back to %s", kwargs["title"]),
        summary=current_data,
        thumb=default_thumb
    ))

    def sorter(pair):
        # thanks RestrictedModule parser for messing with lambda (x, y)
        return pair[1]["date_added"]

    for sub_key, data in sorted(current_bl.iteritems(), key=sorter, reverse=True):
        provider_name, subtitle_id = sub_key
        title = _(u"%(provider_name)s, %(subtitle_id)s (added: %(date_added)s, %(mode)s), Language: %(language)s, "
                  u"Score: %(score)i, Storage: %(storage_type)s",
                  provider_name=_(provider_name),
                  subtitle_id=subtitle_id,
                  date_added=df(data["date_added"]),
                  mode=_(current_sub.get_mode_verbose(data["mode"])),
                  language=display_language(Language.fromietf(language)),
                  score=data["score"],
                  storage_type=data["storage_type"])
        oc.add(DirectoryObject(
            key=Callback(ManageBlacklistMenu, remove_sub_key="__".join(sub_key), randomize=timestamp(), **kwargs),
            title=title,
            summary=_(u"Remove subtitle from blacklist")
        ))

    storage.destroy()

    return oc
Esempio n. 5
0
def HistoryMenu():
    from support.history import get_history
    history = get_history()
    oc = SubFolderObjectContainer(title2="History", replace_parent=True)

    for item in history.history_items:
        oc.add(
            DirectoryObject(
                key=Callback(ItemDetailsMenu,
                             title=item.title,
                             item_title=item.item_title,
                             rating_key=item.rating_key),
                title=u"%s (%s)" % (item.item_title, item.mode_verbose),
                summary=u"%s in %s (%s, score: %s), %s" %
                (item.lang_name, item.section_title, item.provider_name,
                 item.score, df(item.time))))

    return oc
Esempio n. 6
0
def ListStoredSubsForItemMenu(**kwargs):
    oc = SubFolderObjectContainer(title2=unicode(kwargs["title"]), replace_parent=True)
    rating_key = kwargs["rating_key"]
    part_id = kwargs["part_id"]
    language = Language.fromietf(kwargs["language"])

    current_sub, stored_subs, storage = get_current_sub(rating_key, part_id, language)
    all_subs = stored_subs.get_all(part_id, language)
    kwargs.pop("randomize")

    for key, subtitle in sorted(filter(lambda x: x[0] not in ("current", "blacklist"), all_subs.items()),
                                key=lambda x: x[1].date_added, reverse=True):
        is_current = key == all_subs["current"]

        summary = _(u"added: %(date_added)s, %(mode)s, Language: %(language)s, Score: %(score)i, Storage: "
                    u"%(storage_type)s",
                    date_added=df(subtitle.date_added),
                    mode=_(subtitle.mode_verbose),
                    language=display_language(language),
                    score=subtitle.score,
                    storage_type=subtitle.storage_type)

        sub_name = subtitle.provider_name
        if sub_name == "embedded":
            sub_name += " (%s)" % subtitle.id

        oc.add(DirectoryObject(
            key=Callback(SelectStoredSubForItemMenu, randomize=timestamp(), sub_key="__".join(key), **kwargs),
            title=_(u"%(current_state)s%(subtitle_name)s, Score: %(score)s",
                    current_state=_("Current: ") if is_current else _("Stored: "),
                    subtitle_name=sub_name,
                    score=subtitle.score),
            summary=summary
        ))

    return oc
Esempio n. 7
0
def fatality(randomize=None,
             force_title=None,
             header=None,
             message=None,
             only_refresh=False,
             no_history=False,
             replace_parent=False):
    """
    subzero main menu
    """
    from interface.advanced import PinMenu, ClearPin, AdvancedMenu
    from interface.menu import RefreshMissing, IgnoreListMenu, HistoryMenu

    title = config.full_version  # force_title if force_title is not None else config.full_version
    oc = ObjectContainer(title1=title,
                         title2=title,
                         header=unicode(header) if header else title,
                         message=message,
                         no_history=no_history,
                         replace_parent=replace_parent,
                         no_cache=True)

    # always re-check permissions
    config.refresh_permissions_status()

    # always re-check enabled sections
    config.refresh_enabled_sections()

    if config.lock_menu and not config.pin_correct:
        oc.add(
            DirectoryObject(
                key=Callback(PinMenu, randomize=timestamp()),
                title=pad_title("Enter PIN"),
                summary=
                "The owner has restricted the access to this menu. Please enter the correct pin",
            ))
        return oc

    if not config.permissions_ok and config.missing_permissions:
        for title, path in config.missing_permissions:
            oc.add(
                DirectoryObject(
                    key=Callback(fatality, randomize=timestamp()),
                    title=pad_title("Insufficient permissions"),
                    summary="Insufficient permissions on library %s, folder: %s"
                    % (title, path),
                ))
        return oc

    if not config.enabled_sections:
        oc.add(
            DirectoryObject(
                key=Callback(fatality, randomize=timestamp()),
                title=pad_title("I'm not enabled!"),
                summary=
                "Please enable me for some of your libraries in your server settings; currently I do nothing",
            ))
        return oc

    if not only_refresh:
        if Dict["current_refresh_state"]:
            oc.add(
                DirectoryObject(key=Callback(fatality,
                                             force_title=" ",
                                             randomize=timestamp()),
                                title=pad_title("Working ... refresh here"),
                                summary="Current state: %s; Last state: %s" %
                                ((Dict["current_refresh_state"] or "Idle") if
                                 "current_refresh_state" in Dict else "Idle",
                                 (Dict["last_refresh_state"] or "None")
                                 if "last_refresh_state" in Dict else "None")))

        oc.add(
            DirectoryObject(
                key=Callback(OnDeckMenu),
                title="On-deck items",
                summary=
                "Shows the current on deck items and allows you to individually (force-) refresh their metadata/"
                "subtitles.",
                thumb=R("icon-ondeck.jpg")))
        if "last_played_items" in Dict and Dict["last_played_items"]:
            oc.add(
                DirectoryObject(
                    key=Callback(RecentlyPlayedMenu),
                    title=pad_title("Recently played items"),
                    summary=
                    "Shows the %i recently played items and allows you to individually (force-) refresh their "
                    "metadata/subtitles." %
                    config.store_recently_played_amount,
                    thumb=R("icon-played.jpg")))
        oc.add(
            DirectoryObject(
                key=Callback(RecentlyAddedMenu),
                title="Recently-added items",
                summary="Shows the recently added items per section.",
                thumb=R("icon-added.jpg")))
        oc.add(
            DirectoryObject(
                key=Callback(RecentMissingSubtitlesMenu,
                             randomize=timestamp()),
                title="Show recently added items with missing subtitles",
                summary=
                "Lists items with missing subtitles. Click on \"Find recent items with missing subs\" "
                "to update list",
                thumb=R("icon-missing.jpg")))
        oc.add(
            DirectoryObject(
                key=Callback(SectionsMenu),
                title="Browse all items",
                summary=
                "Go through your whole library and manage your ignore list. You can also "
                "(force-) refresh the metadata/subtitles of individual items.",
                thumb=R("icon-browse.jpg")))

        task_name = "SearchAllRecentlyAddedMissing"
        task = scheduler.task(task_name)

        if task.ready_for_display:
            task_state = "Running: %s/%s (%s%%)" % (
                task.items_done, task.items_searching, task.percentage)
        else:
            task_state = "Last scheduler run: %s; Next scheduled run: %s; Last runtime: %s" % (
                df(scheduler.last_run(task_name))
                or "never", df(scheduler.next_run(task_name)) or "never",
                str(task.last_run_time).split(".")[0])

        oc.add(
            DirectoryObject(
                key=Callback(RefreshMissing, randomize=timestamp()),
                title=
                "Search for missing subtitles (in recently-added items, max-age: %s)"
                % Prefs["scheduler.item_is_recent_age"],
                summary=
                "Automatically run periodically by the scheduler, if configured. %s"
                % task_state,
                thumb=R("icon-search.jpg")))

        oc.add(
            DirectoryObject(
                key=Callback(IgnoreListMenu),
                title="Display ignore list (%d)" % len(ignore_list),
                summary=
                "Show the current ignore list (mainly used for the automatic tasks)",
                thumb=R("icon-ignore.jpg")))

        oc.add(
            DirectoryObject(key=Callback(HistoryMenu),
                            title="History",
                            summary="Show the last %i downloaded subtitles" %
                            int(Prefs["history_size"]),
                            thumb=R("icon-history.jpg")))

    oc.add(
        DirectoryObject(key=Callback(fatality,
                                     force_title=" ",
                                     randomize=timestamp()),
                        title=pad_title("Refresh"),
                        summary="Current state: %s; Last state: %s" %
                        ((Dict["current_refresh_state"] or "Idle")
                         if "current_refresh_state" in Dict else "Idle",
                         (Dict["last_refresh_state"] or "None")
                         if "last_refresh_state" in Dict else "None"),
                        thumb=R("icon-refresh.jpg")))

    # add re-lock after pin unlock
    if config.pin:
        oc.add(
            DirectoryObject(key=Callback(ClearPin, randomize=timestamp()),
                            title=pad_title("Re-lock menu(s)"),
                            summary="Enabled the PIN again for menu(s)"))

    if not only_refresh:
        oc.add(
            DirectoryObject(key=Callback(AdvancedMenu),
                            title=pad_title("Advanced functions"),
                            summary="Use at your own risk",
                            thumb=R("icon-advanced.jpg")))

    return oc
Esempio n. 8
0
def ItemDetailsMenu(rating_key, title=None, base_title=None, item_title=None, randomize=None, header=None):
    """
    displays the item details menu of an item that doesn't contain any deeper tree, such as a movie or an episode
    :param rating_key:
    :param title:
    :param base_title:
    :param item_title:
    :param randomize:
    :return:
    """
    from interface.main import IgnoreMenu

    title = unicode(base_title) + " > " + unicode(title) if base_title else unicode(title)
    item = plex_item = get_item(rating_key)
    current_kind = get_item_kind_from_rating_key(rating_key)

    timeout = 30

    oc = SubFolderObjectContainer(title2=title, replace_parent=True, header=header)

    if not item:
        oc.add(DirectoryObject(
            key=Callback(ItemDetailsMenu, rating_key=rating_key, title=title, base_title=base_title,
                         item_title=item_title, randomize=timestamp()),
            title=u"Item not found: %s!" % item_title,
            summary="Plex didn't return any information about the item, please refresh it and come back later",
            thumb=default_thumb
        ))
        return oc

    # add back to season for episode
    if current_kind == "episode":
        from interface.menu import MetadataMenu
        show = get_item(item.show.rating_key)
        season = get_item(item.season.rating_key)

        oc.add(DirectoryObject(
            key=Callback(MetadataMenu, rating_key=season.rating_key, title=season.title, base_title=show.title,
                         previous_item_type="show", previous_rating_key=show.rating_key,
                         display_items=True, randomize=timestamp()),
            title=u"< Back to %s" % season.title,
            summary="Back to %s > %s" % (show.title, season.title),
            thumb=season.thumb or default_thumb
        ))

    oc.add(DirectoryObject(
        key=Callback(RefreshItem, rating_key=rating_key, item_title=item_title, randomize=timestamp(),
                     timeout=timeout * 1000),
        title=u"Refresh: %s" % item_title,
        summary="Refreshes the %s, possibly searching for missing and picking up new subtitles on disk" % current_kind,
        thumb=item.thumb or default_thumb
    ))
    oc.add(DirectoryObject(
        key=Callback(RefreshItem, rating_key=rating_key, item_title=item_title, force=True, randomize=timestamp(),
                     timeout=timeout * 1000),
        title=u"Force-find subtitles: %s" % item_title,
        summary="Issues a forced refresh, ignoring known subtitles and searching for new ones",
        thumb=item.thumb or default_thumb
    ))

    # get stored subtitle info for item id
    subtitle_storage = get_subtitle_storage()
    stored_subs = subtitle_storage.load_or_new(item)

    # look for subtitles for all available media parts and all of their languages
    has_multiple_parts = len(plex_item.media) > 1
    part_index = 0
    for media in plex_item.media:
        for part in media.parts:
            filename = os.path.basename(part.file)
            if not os.path.exists(part.file):
                continue

            part_id = str(part.id)
            part_index += 1

            part_index_addon = ""
            part_summary_addon = ""
            if has_multiple_parts:
                part_index_addon = u"File %s: " % part_index
                part_summary_addon = "%s " % filename

            # iterate through all configured languages
            for lang in config.lang_list:
                # get corresponding stored subtitle data for that media part (physical media item), for language
                current_sub = stored_subs.get_any(part_id, lang)
                current_sub_id = None
                current_sub_provider_name = None

                summary = u"%sNo current subtitle in storage" % part_summary_addon
                current_score = None
                if current_sub:
                    current_sub_id = current_sub.id
                    current_sub_provider_name = current_sub.provider_name
                    current_score = current_sub.score

                    summary = u"%sCurrent subtitle: %s (added: %s, %s), Language: %s, Score: %i, Storage: %s" % \
                              (part_summary_addon, current_sub.provider_name, df(current_sub.date_added),
                               current_sub.mode_verbose, display_language(lang), current_sub.score,
                               current_sub.storage_type)

                    oc.add(DirectoryObject(
                        key=Callback(SubtitleOptionsMenu, rating_key=rating_key, part_id=part_id, title=title,
                                     item_title=item_title, language=lang, language_name=display_language(lang),
                                     current_id=current_sub_id,
                                     item_type=plex_item.type, filename=filename, current_data=summary,
                                     randomize=timestamp(), current_provider=current_sub_provider_name,
                                     current_score=current_score),
                        title=u"%sManage %s subtitle" % (part_index_addon, display_language(lang)),
                        summary=summary
                    ))
                else:
                    oc.add(DirectoryObject(
                        key=Callback(ListAvailableSubsForItemMenu, rating_key=rating_key, part_id=part_id, title=title,
                                     item_title=item_title, language=lang, language_name=display_language(lang),
                                     current_id=current_sub_id,
                                     item_type=plex_item.type, filename=filename, current_data=summary,
                                     randomize=timestamp(), current_provider=current_sub_provider_name,
                                     current_score=current_score),
                        title=u"%sList %s subtitles" % (part_index_addon, display_language(lang)),
                        summary=summary
                    ))

            if config.plex_transcoder:
                # embedded subtitles
                embedded_count = 0
                embedded_langs = []
                for stream in part.streams:
                    # subtitle stream
                    if stream.stream_type == 3 and not stream.stream_key and stream.codec in TEXT_SUBTITLE_EXTS:
                        lang = get_language_from_stream(stream.language_code)

                        if not lang and config.treat_und_as_first:
                            lang = list(config.lang_list)[0]

                        if lang:
                            embedded_langs.append(lang)
                            embedded_count += 1

                if embedded_count:
                    oc.add(DirectoryObject(
                        key=Callback(ListEmbeddedSubsForItemMenu, rating_key=rating_key, part_id=part_id, title=title,
                                     item_type=plex_item.type, item_title=item_title, base_title=base_title,
                                     randomize=timestamp()),
                        title=u"%sEmbedded subtitles (%s)" % (part_index_addon, ", ".join(display_language(l) for l in
                                                                                          set(embedded_langs))),
                        summary=u"Extract and activate embedded subtitle streams"
                    ))

    ignore_title = item_title
    if current_kind == "episode":
        ignore_title = get_item_title(item)
    add_ignore_options(oc, "videos", title=ignore_title, rating_key=rating_key, callback_menu=IgnoreMenu)
    subtitle_storage.destroy()

    return oc
Esempio n. 9
0
def fatality(randomize=None, force_title=None, header=None, message=None, only_refresh=False, no_history=False,
             replace_parent=False):
    """
    subzero main menu
    """
    from interface.advanced import PinMenu, ClearPin, AdvancedMenu
    from interface.menu import RefreshMissing, IgnoreListMenu, HistoryMenu

    title = config.full_version  # force_title if force_title is not None else config.full_version
    oc = ObjectContainer(title1=title, title2=title, header=unicode(header) if header else title, message=message,
                         no_history=no_history,
                         replace_parent=replace_parent, no_cache=True)

    # always re-check permissions
    config.refresh_permissions_status()

    # always re-check enabled sections
    config.refresh_enabled_sections()

    if config.lock_menu and not config.pin_correct:
        oc.add(DirectoryObject(
            key=Callback(PinMenu, randomize=timestamp()),
            title=pad_title(_("Enter PIN")),
            summary=_("The owner has restricted the access to this menu. Please enter the correct pin"),
        ))
        return oc

    if not config.permissions_ok and config.missing_permissions:
        if not isinstance(config.missing_permissions, list):
            oc.add(DirectoryObject(
                key=Callback(fatality, randomize=timestamp()),
                title=pad_title(_("Insufficient permissions")),
                summary=config.missing_permissions,
            ))
        else:
            for title, path in config.missing_permissions:
                oc.add(DirectoryObject(
                    key=Callback(fatality, randomize=timestamp()),
                    title=pad_title(_("Insufficient permissions")),
                    summary=_("Insufficient permissions on library %(title)s, folder: %(path)s",
                              title=title,
                              path=path),
                ))
        return oc

    if not config.enabled_sections:
        oc.add(DirectoryObject(
            key=Callback(fatality, randomize=timestamp()),
            title=pad_title(_("I'm not enabled!")),
            summary=_("Please enable me for some of your libraries in your server settings; currently I do nothing"),
        ))
        return oc

    if not only_refresh:
        if Dict["current_refresh_state"]:
            oc.add(DirectoryObject(
                key=Callback(fatality, force_title=" ", randomize=timestamp()),
                title=pad_title(_("Working ... refresh here")),
                summary=_("Current state: %s; Last state: %s",
                    (Dict["current_refresh_state"] or _("Idle")) if "current_refresh_state" in Dict else _("Idle"),
                    (Dict["last_refresh_state"] or _("None")) if "last_refresh_state" in Dict else _("None")
                )
            ))

        oc.add(DirectoryObject(
            key=Callback(OnDeckMenu),
            title=_("On-deck items"),
            summary=_("Shows the current on deck items and allows you to individually (force-) refresh their metadata/subtitles."),
            thumb=R("icon-ondeck.jpg")
        ))
        if "last_played_items" in Dict and Dict["last_played_items"]:
            oc.add(DirectoryObject(
                key=Callback(RecentlyPlayedMenu),
                title=pad_title(_("Recently played items")),
                summary=_("Shows the %s recently played items and allows you to individually (force-) refresh their metadata/subtitles.", config.store_recently_played_amount),
                thumb=R("icon-played.jpg")
            ))
        oc.add(DirectoryObject(
            key=Callback(RecentlyAddedMenu),
            title=_("Recently-added items"),
            summary=_("Shows the recently added items per section."),
            thumb=R("icon-added.jpg")
        ))
        oc.add(DirectoryObject(
            key=Callback(RecentMissingSubtitlesMenu, randomize=timestamp()),
            title=_("Show recently added items with missing subtitles"),
            summary=_("Lists items with missing subtitles. Click on \"Find recent items with missing subs\" to update list"),
            thumb=R("icon-missing.jpg")
        ))
        oc.add(DirectoryObject(
            key=Callback(SectionsMenu),
            title=_("Browse all items"),
            summary=_("Go through your whole library and manage your ignore list. You can also (force-) refresh the metadata/subtitles of individual items."),
            thumb=R("icon-browse.jpg")
        ))

        task_name = "SearchAllRecentlyAddedMissing"
        task = scheduler.task(task_name)

        if task.ready_for_display:
            task_state = _("Running: %(items_done)s/%(items_searching)s (%(percentage)s%%)",
                           items_done=task.items_done,
                           items_searching=task.items_searching,
                           percentage=task.percentage)
        else:
            lr = scheduler.last_run(task_name)
            nr = scheduler.next_run(task_name)
            task_state = _("Last run: %s; Next scheduled run: %s; Last runtime: %s",
                df(scheduler.last_run(task_name)) if lr else "never",
                df(scheduler.next_run(task_name)) if nr else "never",
                str(task.last_run_time).split(".")[0])

        oc.add(DirectoryObject(
            key=Callback(RefreshMissing, randomize=timestamp()),
            title=_("Search for missing subtitles (in recently-added items, max-age: %s)", Prefs[
                "scheduler.item_is_recent_age"]),
            summary=_("Automatically run periodically by the scheduler, if configured. %s", task_state),
            thumb=R("icon-search.jpg")
        ))

        ref_list = get_decision_list()
        incl_excl_ref = _("include list") if ref_list.store == "include" else _("ignore list")

        oc.add(DirectoryObject(
            key=Callback(IgnoreListMenu),
            title=_("Display %(incl_excl_list_name)s (%(count)d)",
                    incl_excl_list_name=incl_excl_ref, count=len(ref_list)),
            summary=_("Show the current %(incl_excl_list_name)s (mainly used for the automatic tasks)",
                      incl_excl_list_name=incl_excl_ref),
            thumb=R("icon-ignore.jpg")
        ))

        oc.add(DirectoryObject(
            key=Callback(HistoryMenu),
            title=_("History"),
            summary=_("Show the last %i downloaded subtitles", int(Prefs["history_size"])),
            thumb=R("icon-history.jpg")
        ))

    oc.add(DirectoryObject(
        key=Callback(fatality, force_title=" ", randomize=timestamp()),
        title=pad_title(_("Refresh")),
        summary=_("Current state: %s; Last state: %s",
            (Dict["current_refresh_state"] or _("Idle")) if "current_refresh_state" in Dict else _("Idle"),
            (Dict["last_refresh_state"] or _("None")) if "last_refresh_state" in Dict else _("None")
        ),
        thumb=R("icon-refresh.jpg")
    ))

    # add re-lock after pin unlock
    if config.pin:
        oc.add(DirectoryObject(
            key=Callback(ClearPin, randomize=timestamp()),
            title=pad_title(_("Re-lock menu(s)")),
            summary=_("Enabled the PIN again for menu(s)")
        ))

    if not only_refresh:
        if "provider_throttle" in Dict and Dict["provider_throttle"].keys():
            summary_data = []
            for provider, data in Dict["provider_throttle"].iteritems():
                reason, until, desc = data
                summary_data.append(unicode(_("%(throttled_provider)s until %(until_date)s (%(reason)s)",
                                              throttled_provider=provider,
                                              until_date=until.strftime("%y/%m/%d %H:%M"),
                                              reason=reason)))

            oc.add(DirectoryObject(
                key=Callback(fatality, force_title=" ", randomize=timestamp()),
                title=pad_title(_("Throttled providers: %s", ", ".join(Dict["provider_throttle"].keys()))),
                summary=", ".join(summary_data),
                thumb=R("icon-throttled.jpg")
            ))

        oc.add(DirectoryObject(
            key=Callback(AdvancedMenu),
            title=pad_title(_("Advanced functions")),
            summary=_("Use at your own risk"),
            thumb=R("icon-advanced.jpg")
        ))

    return oc
Esempio n. 10
0
def ItemDetailsMenu(rating_key,
                    title=None,
                    base_title=None,
                    item_title=None,
                    randomize=None):
    """
    displays the item details menu of an item that doesn't contain any deeper tree, such as a movie or an episode
    :param rating_key:
    :param title:
    :param base_title:
    :param item_title:
    :param randomize:
    :return:
    """
    title = unicode(base_title) + " > " + unicode(
        title) if base_title else unicode(title)
    item = get_item(rating_key)
    current_kind = get_item_kind_from_rating_key(rating_key)

    timeout = 30

    oc = SubFolderObjectContainer(title2=title, replace_parent=True)
    oc.add(
        DirectoryObject(
            key=Callback(RefreshItem,
                         rating_key=rating_key,
                         item_title=item_title,
                         randomize=timestamp(),
                         timeout=timeout * 1000),
            title=u"Refresh: %s" % item_title,
            summary=
            "Refreshes the %s, possibly searching for missing and picking up new subtitles on disk"
            % current_kind,
            thumb=item.thumb or default_thumb))
    oc.add(
        DirectoryObject(
            key=Callback(RefreshItem,
                         rating_key=rating_key,
                         item_title=item_title,
                         force=True,
                         randomize=timestamp(),
                         timeout=timeout * 1000),
            title=u"Auto-search: %s" % item_title,
            summary=
            "Issues a forced refresh, ignoring known subtitles and searching for new ones",
            thumb=item.thumb or default_thumb))

    # get stored subtitle info for item id
    subtitle_storage = get_subtitle_storage()
    stored_subs = subtitle_storage.load_or_new(item)

    # get the plex item
    plex_item = list(Plex["library"].metadata(rating_key))[0]

    # get current media info for that item
    media = plex_item.media

    # look for subtitles for all available media parts and all of their languages
    for part in media.parts:
        filename = os.path.basename(part.file)
        part_id = str(part.id)

        # iterate through all configured languages
        for lang in config.lang_list:
            lang_a2 = lang.alpha2
            # ietf lang?
            if cast_bool(Prefs["subtitles.language.ietf"]) and "-" in lang_a2:
                lang_a2 = lang_a2.split("-")[0]

            # get corresponding stored subtitle data for that media part (physical media item), for language
            current_sub = stored_subs.get_any(part_id, lang_a2)
            current_sub_id = None
            current_sub_provider_name = None

            summary = u"No current subtitle in storage"
            current_score = None
            if current_sub:
                current_sub_id = current_sub.id
                current_sub_provider_name = current_sub.provider_name
                current_score = current_sub.score

                summary = u"Current subtitle: %s (added: %s, %s), Language: %s, Score: %i, Storage: %s" % \
                          (current_sub.provider_name, df(current_sub.date_added), current_sub.mode_verbose, lang,
                           current_sub.score, current_sub.storage_type)

            oc.add(
                DirectoryObject(key=Callback(
                    ListAvailableSubsForItemMenu,
                    rating_key=rating_key,
                    part_id=part_id,
                    title=title,
                    item_title=item_title,
                    language=lang,
                    current_id=current_sub_id,
                    item_type=plex_item.type,
                    filename=filename,
                    current_data=summary,
                    randomize=timestamp(),
                    current_provider=current_sub_provider_name,
                    current_score=current_score),
                                title=u"List %s subtitles" % lang.name,
                                summary=summary))

    add_ignore_options(oc,
                       "videos",
                       title=item_title,
                       rating_key=rating_key,
                       callback_menu=IgnoreMenu)

    return oc
Esempio n. 11
0
def ItemDetailsMenu(rating_key, title=None, base_title=None, item_title=None, randomize=None, header=None,
                    message=None):
    """
    displays the item details menu of an item that doesn't contain any deeper tree, such as a movie or an episode
    :param rating_key:
    :param title:
    :param base_title:
    :param item_title:
    :param randomize:
    :return:
    """
    from interface.main import InclExclMenu

    title = unicode(base_title) + " > " + unicode(title) if base_title else unicode(title)
    item = plex_item = get_item(rating_key)
    current_kind = get_item_kind_from_rating_key(rating_key)

    timeout = 30

    oc = SubFolderObjectContainer(
            title2=title,
            replace_parent=True,
            header=header,
            message=message)

    if not item:
        oc.add(DirectoryObject(
            key=Callback(
                    ItemDetailsMenu,
                    rating_key=rating_key,
                    title=title,
                    base_title=base_title,
                    item_title=item_title,
                    randomize=timestamp()),
            title=_(u"Item not found: %s!", item_title),
            summary=_("Plex didn't return any information about the item, please refresh it and come back later"),
            thumb=default_thumb
        ))
        return oc

    # add back to season for episode
    if current_kind == "episode":
        from interface.menu import MetadataMenu
        show = get_item(item.show.rating_key)
        season = get_item(item.season.rating_key)

        oc.add(DirectoryObject(
            key=Callback(
                    MetadataMenu,
                    rating_key=season.rating_key,
                    title=season.title,
                    base_title=show.title,
                    previous_item_type="show",
                    previous_rating_key=show.rating_key,
                    display_items=True,
                    randomize=timestamp()),
            title=_(u"< Back to %s", season.title),
            summary=_("Back to %s > %s", show.title, season.title),
            thumb=season.thumb or default_thumb
        ))

    oc.add(DirectoryObject(
        key=Callback(
                RefreshItem,
                rating_key=rating_key,
                item_title=item_title,
                randomize=timestamp(),
                timeout=timeout * 1000),
        title=_(u"Refresh: %s", item_title),
        summary=_("Refreshes %(the_movie_series_season_episode)s, possibly searching for missing and picking up "
                  "new subtitles on disk", the_movie_series_season_episode=_(u"the %s" % current_kind)),
        thumb=item.thumb or default_thumb
    ))
    oc.add(DirectoryObject(
        key=Callback(RefreshItem, rating_key=rating_key, item_title=item_title, force=True, randomize=timestamp(),
                     timeout=timeout * 1000),
        title=_(u"Force-find subtitles: %(item_title)s", item_title=item_title),
        summary=_("Issues a forced refresh, ignoring known subtitles and searching for new ones"),
        thumb=item.thumb or default_thumb
    ))

    # get stored subtitle info for item id
    subtitle_storage = get_subtitle_storage()
    stored_subs = subtitle_storage.load_or_new(item)

    # look for subtitles for all available media parts and all of their languages
    has_multiple_parts = len(plex_item.media) > 1
    part_index = 0
    for media in plex_item.media:
        for part in media.parts:
            filename = os.path.basename(part.file)
            if not os.path.exists(part.file):
                continue

            part_id = str(part.id)
            part_index += 1

            part_index_addon = u""
            part_summary_addon = u""
            if has_multiple_parts:
                part_index_addon = _(u"File %(file_part_index)s: ", file_part_index=part_index)
                part_summary_addon = u"%s " % filename

            # iterate through all configured languages
            for lang in config.lang_list:
                # get corresponding stored subtitle data for that media part (physical media item), for language
                current_sub = stored_subs.get_any(part_id, lang)
                current_sub_id = None
                current_sub_provider_name = None

                summary = _(u"%(part_summary)sNo current subtitle in storage", part_summary=part_summary_addon)
                current_score = None
                if current_sub:
                    current_sub_id = current_sub.id
                    current_sub_provider_name = current_sub.provider_name
                    current_score = current_sub.score

                    summary = _(u"%(part_summary)sCurrent subtitle: %(provider_name)s (added: %(date_added)s, "
                                u"%(mode)s), Language: %(language)s, Score: %(score)i, Storage: %(storage_type)s",
                                part_summary=part_summary_addon,
                                provider_name=_(current_sub.provider_name),
                                date_added=df(current_sub.date_added),
                                mode=_(current_sub.mode_verbose),
                                language=display_language(lang),
                                score=current_sub.score,
                                storage_type=current_sub.storage_type)

                    oc.add(DirectoryObject(
                        key=Callback(SubtitleOptionsMenu, rating_key=rating_key, part_id=part_id, title=title,
                                     item_title=item_title, language=lang, language_name=display_language(lang),
                                     current_id=current_sub_id,
                                     item_type=plex_item.type, filename=filename, current_data=summary,
                                     randomize=timestamp(), current_provider=current_sub_provider_name,
                                     current_score=current_score),
                        title=_(u"%(part_summary)sManage %(language)s subtitle", part_summary=part_index_addon,
                                language=display_language(lang)),
                        summary=summary
                    ))
                else:
                    oc.add(DirectoryObject(
                        key=Callback(ListAvailableSubsForItemMenu, rating_key=rating_key, part_id=part_id, title=title,
                                     item_title=item_title, language=lang, language_name=display_language(lang),
                                     current_id=current_sub_id,
                                     item_type=plex_item.type, filename=filename, current_data=summary,
                                     randomize=timestamp(), current_provider=current_sub_provider_name,
                                     current_score=current_score),
                        title=_(u"%(part_summary)sList %(language)s subtitles", part_summary=part_index_addon,
                                language=display_language(lang)),
                        summary=summary
                    ))

            if config.plex_transcoder:
                # embedded subtitles
                embedded_count = 0
                embedded_langs = []
                for stream in part.streams:
                    # subtitle stream
                    if stream.stream_type == 3 and not stream.stream_key and stream.codec in TEXT_SUBTITLE_EXTS:
                        lang = get_language_from_stream(stream.language_code)
                        is_forced = is_stream_forced(stream)

                        if not lang and config.treat_und_as_first:
                            lang = list(config.lang_list)[0]

                        if lang:
                            lang = Language.rebuild(lang, forced=is_forced)
                            embedded_langs.append(lang)
                            embedded_count += 1

                if embedded_count:
                    oc.add(DirectoryObject(
                        key=Callback(ListEmbeddedSubsForItemMenu, rating_key=rating_key, part_id=part_id, title=title,
                                     item_type=plex_item.type, item_title=item_title, base_title=base_title,
                                     randomize=timestamp()),
                        title=_(u"%(part_summary)sEmbedded subtitles (%(languages)s)",
                                part_summary=part_index_addon,
                                languages=", ".join(display_language(l)
                                                    for l in list(OrderedDict.fromkeys(embedded_langs)))),
                        summary=_(u"Extract embedded subtitle streams")
                    ))

    ignore_title = item_title
    if current_kind == "episode":
        ignore_title = get_item_title(item)
    add_incl_excl_options(oc, "videos", title=ignore_title, rating_key=rating_key, callback_menu=InclExclMenu)
    subtitle_storage.destroy()

    return oc
Esempio n. 12
0
def fatality(randomize=None,
             force_title=None,
             header=None,
             message=None,
             only_refresh=False,
             no_history=False,
             replace_parent=False):
    """
    subzero main menu
    """
    from interface.advanced import PinMenu, ClearPin, AdvancedMenu
    from interface.menu import RefreshMissing, IgnoreListMenu, HistoryMenu

    title = config.full_version  # force_title if force_title is not None else config.full_version
    oc = ObjectContainer(title1=title,
                         title2=title,
                         header=unicode(header) if header else title,
                         message=message,
                         no_history=no_history,
                         replace_parent=replace_parent,
                         no_cache=True)

    # always re-check permissions
    config.refresh_permissions_status()

    # always re-check enabled sections
    config.refresh_enabled_sections()

    if config.lock_menu and not config.pin_correct:
        oc.add(
            DirectoryObject(
                key=Callback(PinMenu, randomize=timestamp()),
                title=pad_title(_("Enter PIN")),
                summary=
                _("The owner has restricted the access to this menu. Please enter the correct pin"
                  ),
            ))
        return oc

    if not config.permissions_ok and config.missing_permissions:
        if not isinstance(config.missing_permissions, list):
            oc.add(
                DirectoryObject(
                    key=Callback(fatality, randomize=timestamp()),
                    title=pad_title(_("Insufficient permissions")),
                    summary=config.missing_permissions,
                ))
        else:
            for title, path in config.missing_permissions:
                oc.add(
                    DirectoryObject(
                        key=Callback(fatality, randomize=timestamp()),
                        title=pad_title(_("Insufficient permissions")),
                        summary=
                        _("Insufficient permissions on library %(title)s, folder: %(path)s",
                          title=title,
                          path=path),
                    ))
        return oc

    if not config.enabled_sections:
        oc.add(
            DirectoryObject(
                key=Callback(fatality, randomize=timestamp()),
                title=pad_title(_("I'm not enabled!")),
                summary=
                _("Please enable me for some of your libraries in your server settings; currently I do nothing"
                  ),
            ))
        return oc

    if not only_refresh:
        if Dict["current_refresh_state"]:
            oc.add(
                DirectoryObject(
                    key=Callback(fatality,
                                 force_title=" ",
                                 randomize=timestamp()),
                    title=pad_title(_("Working ... refresh here")),
                    summary=_("Current state: %s; Last state: %s",
                              (Dict["current_refresh_state"] or _("Idle")) if
                              "current_refresh_state" in Dict else _("Idle"),
                              (Dict["last_refresh_state"] or _("None"))
                              if "last_refresh_state" in Dict else _("None"))))

        oc.add(
            DirectoryObject(
                key=Callback(OnDeckMenu),
                title=_("On-deck items"),
                summary=
                _("Shows the current on deck items and allows you to individually (force-) refresh their metadata/subtitles."
                  ),
                thumb=R("icon-ondeck.jpg")))
        if "last_played_items" in Dict and Dict["last_played_items"]:
            oc.add(
                DirectoryObject(
                    key=Callback(RecentlyPlayedMenu),
                    title=pad_title(_("Recently played items")),
                    summary=_(
                        "Shows the %s recently played items and allows you to individually (force-) refresh their metadata/subtitles.",
                        config.store_recently_played_amount),
                    thumb=R("icon-played.jpg")))
        oc.add(
            DirectoryObject(
                key=Callback(RecentlyAddedMenu),
                title=_("Recently-added items"),
                summary=_("Shows the recently added items per section."),
                thumb=R("icon-added.jpg")))
        oc.add(
            DirectoryObject(
                key=Callback(RecentMissingSubtitlesMenu,
                             randomize=timestamp()),
                title=_("Show recently added items with missing subtitles"),
                summary=
                _("Lists items with missing subtitles. Click on \"Find recent items with missing subs\" to update list"
                  ),
                thumb=R("icon-missing.jpg")))
        oc.add(
            DirectoryObject(
                key=Callback(SectionsMenu),
                title=_("Browse all items"),
                summary=
                _("Go through your whole library and manage your ignore list. You can also (force-) refresh the metadata/subtitles of individual items."
                  ),
                thumb=R("icon-browse.jpg")))

        task_name = "SearchAllRecentlyAddedMissing"
        task = scheduler.task(task_name)

        if task.ready_for_display:
            task_state = _(
                "Running: %(items_done)s/%(items_searching)s (%(percentage)s%%)",
                items_done=task.items_done,
                items_searching=task.items_searching,
                percentage=task.percentage)
        else:
            lr = scheduler.last_run(task_name)
            nr = scheduler.next_run(task_name)
            task_state = _(
                "Last run: %s; Next scheduled run: %s; Last runtime: %s",
                df(scheduler.last_run(task_name)) if lr else "never",
                df(scheduler.next_run(task_name)) if nr else "never",
                str(task.last_run_time).split(".")[0])

        oc.add(
            DirectoryObject(
                key=Callback(RefreshMissing, randomize=timestamp()),
                title=_(
                    "Search for missing subtitles (in recently-added items, max-age: %s)",
                    Prefs["scheduler.item_is_recent_age"]),
                summary=_(
                    "Automatically run periodically by the scheduler, if configured. %s",
                    task_state),
                thumb=R("icon-search.jpg")))

        ref_list = get_decision_list()
        incl_excl_ref = _(
            "include list") if ref_list.store == "include" else _(
                "ignore list")

        oc.add(
            DirectoryObject(
                key=Callback(IgnoreListMenu),
                title=_("Display %(incl_excl_list_name)s (%(count)d)",
                        incl_excl_list_name=incl_excl_ref,
                        count=len(ref_list)),
                summary=
                _("Show the current %(incl_excl_list_name)s (mainly used for the automatic tasks)",
                  incl_excl_list_name=incl_excl_ref),
                thumb=R("icon-ignore.jpg")))

        oc.add(
            DirectoryObject(key=Callback(HistoryMenu),
                            title=_("History"),
                            summary=_("Show the last %i downloaded subtitles",
                                      int(Prefs["history_size"])),
                            thumb=R("icon-history.jpg")))

    oc.add(
        DirectoryObject(
            key=Callback(fatality, force_title=" ", randomize=timestamp()),
            title=pad_title(_("Refresh")),
            summary=_("Current state: %s; Last state: %s",
                      (Dict["current_refresh_state"] or _("Idle"))
                      if "current_refresh_state" in Dict else _("Idle"),
                      (Dict["last_refresh_state"] or _("None"))
                      if "last_refresh_state" in Dict else _("None")),
            thumb=R("icon-refresh.jpg")))

    # add re-lock after pin unlock
    if config.pin:
        oc.add(
            DirectoryObject(key=Callback(ClearPin, randomize=timestamp()),
                            title=pad_title(_("Re-lock menu(s)")),
                            summary=_("Enabled the PIN again for menu(s)")))

    if not only_refresh:
        if "provider_throttle" in Dict and Dict["provider_throttle"].keys():
            summary_data = []
            for provider, data in Dict["provider_throttle"].iteritems():
                reason, until, desc = data
                summary_data.append(
                    unicode(
                        _("%(throttled_provider)s until %(until_date)s (%(reason)s)",
                          throttled_provider=provider,
                          until_date=until.strftime("%y/%m/%d %H:%M"),
                          reason=reason)))

            oc.add(
                DirectoryObject(
                    key=Callback(fatality,
                                 force_title=" ",
                                 randomize=timestamp()),
                    title=pad_title(
                        _("Throttled providers: %s",
                          ", ".join(Dict["provider_throttle"].keys()))),
                    summary=", ".join(summary_data),
                    thumb=R("icon-throttled.jpg")))

        oc.add(
            DirectoryObject(key=Callback(AdvancedMenu),
                            title=pad_title(_("Advanced functions")),
                            summary=_("Use at your own risk"),
                            thumb=R("icon-advanced.jpg")))

    return oc
Esempio n. 13
0
def ItemDetailsMenu(rating_key,
                    title=None,
                    base_title=None,
                    item_title=None,
                    randomize=None):
    """
    displays the item details menu of an item that doesn't contain any deeper tree, such as a movie or an episode
    :param rating_key:
    :param title:
    :param base_title:
    :param item_title:
    :param randomize:
    :return:
    """
    from interface.main import IgnoreMenu

    title = unicode(base_title) + " > " + unicode(
        title) if base_title else unicode(title)
    item = get_item(rating_key)
    current_kind = get_item_kind_from_rating_key(rating_key)

    timeout = 30

    oc = SubFolderObjectContainer(title2=title, replace_parent=True)

    # add back to season for episode
    if current_kind == "episode":
        from interface.menu import MetadataMenu
        show = get_item(item.show.rating_key)
        season = get_item(item.season.rating_key)

        oc.add(
            DirectoryObject(key=Callback(MetadataMenu,
                                         rating_key=season.rating_key,
                                         title=season.title,
                                         base_title=show.title,
                                         previous_item_type="show",
                                         previous_rating_key=show.rating_key,
                                         display_items=True,
                                         randomize=timestamp()),
                            title=u"< Back to %s" % season.title,
                            summary="Back to %s > %s" %
                            (show.title, season.title),
                            thumb=season.thumb or default_thumb))

    oc.add(
        DirectoryObject(
            key=Callback(RefreshItem,
                         rating_key=rating_key,
                         item_title=item_title,
                         randomize=timestamp(),
                         timeout=timeout * 1000),
            title=u"Refresh: %s" % item_title,
            summary=
            "Refreshes the %s, possibly searching for missing and picking up new subtitles on disk"
            % current_kind,
            thumb=item.thumb or default_thumb))
    oc.add(
        DirectoryObject(
            key=Callback(RefreshItem,
                         rating_key=rating_key,
                         item_title=item_title,
                         force=True,
                         randomize=timestamp(),
                         timeout=timeout * 1000),
            title=u"Force-find subtitles: %s" % item_title,
            summary=
            "Issues a forced refresh, ignoring known subtitles and searching for new ones",
            thumb=item.thumb or default_thumb))

    # get stored subtitle info for item id
    subtitle_storage = get_subtitle_storage()
    stored_subs = subtitle_storage.load_or_new(item)

    # get the plex item
    plex_item = get_item(rating_key)

    # look for subtitles for all available media parts and all of their languages
    has_multiple_parts = len(plex_item.media) > 1
    part_index = 0
    for media in plex_item.media:
        for part in media.parts:
            filename = os.path.basename(part.file)
            if not os.path.exists(part.file):
                continue

            part_id = str(part.id)
            part_index += 1

            # iterate through all configured languages
            for lang in config.lang_list:
                # get corresponding stored subtitle data for that media part (physical media item), for language
                current_sub = stored_subs.get_any(part_id, lang)
                current_sub_id = None
                current_sub_provider_name = None

                part_index_addon = ""
                part_summary_addon = ""
                if has_multiple_parts:
                    part_index_addon = u"File %s: " % part_index
                    part_summary_addon = "%s " % filename

                summary = u"%sNo current subtitle in storage" % part_summary_addon
                current_score = None
                if current_sub:
                    current_sub_id = current_sub.id
                    current_sub_provider_name = current_sub.provider_name
                    current_score = current_sub.score

                    summary = u"%sCurrent subtitle: %s (added: %s, %s), Language: %s, Score: %i, Storage: %s" % \
                              (part_summary_addon, current_sub.provider_name, df(current_sub.date_added),
                               current_sub.mode_verbose, lang, current_sub.score, current_sub.storage_type)

                    oc.add(
                        DirectoryObject(key=Callback(
                            SubtitleOptionsMenu,
                            rating_key=rating_key,
                            part_id=part_id,
                            title=title,
                            item_title=item_title,
                            language=lang,
                            language_name=lang.name,
                            current_id=current_sub_id,
                            item_type=plex_item.type,
                            filename=filename,
                            current_data=summary,
                            randomize=timestamp(),
                            current_provider=current_sub_provider_name,
                            current_score=current_score),
                                        title=u"%sActions for %s subtitle" %
                                        (part_index_addon, lang.name),
                                        summary=summary))
                else:
                    oc.add(
                        DirectoryObject(key=Callback(
                            ListAvailableSubsForItemMenu,
                            rating_key=rating_key,
                            part_id=part_id,
                            title=title,
                            item_title=item_title,
                            language=lang,
                            language_name=lang.name,
                            current_id=current_sub_id,
                            item_type=plex_item.type,
                            filename=filename,
                            current_data=summary,
                            randomize=timestamp(),
                            current_provider=current_sub_provider_name,
                            current_score=current_score),
                                        title=u"%sList %s subtitles" %
                                        (part_index_addon, lang.name),
                                        summary=summary))

    add_ignore_options(oc,
                       "videos",
                       title=item_title,
                       rating_key=rating_key,
                       callback_menu=IgnoreMenu)
    subtitle_storage.destroy()

    return oc
Esempio n. 14
0
def HistoryMenu():
    from support.history import get_history
    history = get_history()
    oc = SubFolderObjectContainer(title2=_("History"), replace_parent=True)

    for item in history.items[:100]:
        possible_language = item.language
        language_display = item.lang_name if not possible_language else display_language(possible_language)

        oc.add(DirectoryObject(
            key=Callback(ItemDetailsMenu, title=item.title, item_title=item.item_title,
                         rating_key=item.rating_key),
            title=u"%s (%s)" % (item.item_title, _(item.mode_verbose)),
            summary=_(u"%s in %s (%s, score: %s), %s", language_display, item.section_title,
                                                       _(item.provider_name), item.score, df(item.time)),
            thumb=item.thumb or default_thumb
        ))

    history.destroy()

    return oc