def set_listened_all(showId):
    items_count = 0
    offset = 0
    episodeIds = []
    data = call_api(url="https://api.mujrozhlas.cz/shows/" + showId +
                    "/episodes?sort=-since&page[limit]=1&page[offset]=0")
    if "err" in data:
        xbmcgui.Dialog().notification("ČRo", "Problém při získání pořadů",
                                      xbmcgui.NOTIFICATION_ERROR, 4000)
        sys.exit()
    if "data" in data and len(data["data"]) > 0:
        items_count = int(data["meta"]["count"])

    if items_count > 0:
        while offset < items_count:
            data = call_api(
                url="https://api.mujrozhlas.cz/shows/" + showId +
                "/episodes?sort=-since&page[limit]=100&page[offset]=" +
                str(offset))
            if "err" in data:
                xbmcgui.Dialog().notification("ČRo",
                                              "Problém při získání pořadů",
                                              xbmcgui.NOTIFICATION_ERROR, 4000)
                sys.exit()
            if "data" in data and len(data["data"]) > 0:
                for episode in data["data"]:
                    episodeIds.append(episode["id"])
            offset = offset + 100

        for episodeId in episodeIds:
            if not get_listened(episodeId):
                set_listened(episodeId, showId)
    xbmc.executebuiltin('Container.Refresh')
def list_program_day(stationId, day, label):
    xbmcplugin.setPluginCategory(_handle, label)
    day = parse_datetime(day).strftime("%Y-%m-%d")
    episodeIds = []
    data = call_api(
        url="https://api.mujrozhlas.cz/schedule-day-flat?filter[day]=" + day +
        "&filter[stations.id]=" + stationId)
    if "err" in data:
        xbmcgui.Dialog().notification("ČRo", "Problém při načtení programu",
                                      xbmcgui.NOTIFICATION_ERROR, 4000)
        sys.exit()
    if "data" in data and len(data["data"]) > 0:
        for item in data["data"]:
            episodeIds.append(item["id"])
    else:
        xbmcgui.Dialog().notification("ČRo", "Problém při načtení programu",
                                      xbmcgui.NOTIFICATION_ERROR, 4000)
        sys.exit()

    if len(episodeIds) > 0:
        for episodeId in episodeIds:
            data = call_api(url="https://api.mujrozhlas.cz/episodes/" +
                            episodeId)
            if "err" not in data and "data" in data and len(data["data"]) > 0:
                for item in data["data"]:
                    print(item)
def get_minmax_days(stationId):
    mindate = ""
    maxdate = ""
    data = call_api(
        url="https://api.mujrozhlas.cz/schedule?filter[stations.id]=" +
        stationId + "&sort=since&page[limit]=1&page[offset]=0")
    if "err" in data:
        xbmcgui.Dialog().notification("ČRo", "Problém při načtení programu",
                                      xbmcgui.NOTIFICATION_ERROR, 4000)
        sys.exit()
    if "data" in data and len(data["data"]) > 0:
        lastitem = int(data["meta"]["count"]) - 1
        for item in data["data"]:
            mindate = parse_date(
                item["attributes"]["since"]).strftime("%d.%m.%Y")
        data = call_api(
            url="https://api.mujrozhlas.cz/schedule?filter[stations.id]=" +
            stationId + "&sort=since&page[limit]=1&page[offset]=" +
            str(lastitem))
        if "err" in data:
            xbmcgui.Dialog().notification("ČRo",
                                          "Problém při načtení programu",
                                          xbmcgui.NOTIFICATION_ERROR, 4000)
            sys.exit()
        if "data" in data and len(data["data"]) > 0:
            lastitem = data["meta"]["count"]
            for item in data["data"]:
                maxdate = parse_date(
                    item["attributes"]["since"]).strftime("%d.%m.%Y")
        return parse_datetime(mindate), parse_datetime(maxdate)
    else:
        xbmcgui.Dialog().notification("ČRo", "Problém při načtení programu",
                                      xbmcgui.NOTIFICATION_ERROR, 4000)
        sys.exit()
def list_shows_stations_shows(stationId, page, label):
    xbmcplugin.setPluginCategory(_handle, label)
    page = int(page)
    page_size = int(addon.getSetting("page_size"))
    station = get_station_from_stationId(stationId)
    data = call_api(url="https://api.mujrozhlas.cz/stations/" + stationId +
                    "/shows?page[limit]=" + str(page_size) + "&page[offset]=" +
                    str((page - 1) * page_size))
    if "err" in data:
        xbmcgui.Dialog().notification("ČRo", "Problém při získání pořadů",
                                      xbmcgui.NOTIFICATION_ERROR, 4000)
        sys.exit()
    if "data" in data and len(data["data"]) > 0:
        items_count = int(data["meta"]["count"])
        for show in data["data"]:
            cast = []
            list_item = xbmcgui.ListItem(label=show["attributes"]["title"])
            list_item.setArt({
                "thumb": show["attributes"]["asset"]["url"],
                "icon": show["attributes"]["asset"]["url"]
            })
            list_item.setInfo(
                "video", {
                    "title": show["attributes"]["title"],
                    "director":
                    [show["attributes"]["asset"]["credit"]["author"]],
                    "plot": show["attributes"]["description"],
                    "studio": station
                })
            if "participants" in show["relationships"] and len(
                    show["relationships"]["participants"]["data"]) > 0:
                for person in show["relationships"]["participants"]["data"]:
                    cast.append(get_person(person["id"]))
                list_item.setInfo("video", {"cast": cast})
            url = get_url(action='list_show',
                          showId=show["id"],
                          page=1,
                          label=encode(show["attributes"]["title"]))
            menus = [
                ("Přidat k oblíbeným pořadům",
                 "RunPlugin(plugin://plugin.audio.cro?action=add_favourites&showId="
                 + str(show["id"]) + "&others=0)"),
                ("Přidat k ostatním obl. pořadům",
                 "RunPlugin(plugin://plugin.audio.cro?action=add_favourites&showId="
                 + str(show["id"]) + "&others=1)")
            ]
            list_item.addContextMenuItems(menus)
            xbmcplugin.addDirectoryItem(_handle, url, list_item, True)
        if page * page_size <= items_count:
            list_item = xbmcgui.ListItem(label="Následující strana")
            url = get_url(action='list_shows_stations_shows',
                          stationId=stationId,
                          page=page + 1,
                          label=label)
            xbmcplugin.addDirectoryItem(_handle, url, list_item, True)
        xbmcplugin.endOfDirectory(_handle)
    else:
        xbmcgui.Dialog().notification("ČRo", "Nenalezen žádný pořad",
                                      xbmcgui.NOTIFICATION_WARNING, 4000)
        sys.exit()
Exemple #5
0
def list_topics(label):
    xbmcplugin.setPluginCategory(_handle, label)
    data = call_api(url="https://api.mujrozhlas.cz/topics")
    if "err" in data:
        xbmcgui.Dialog().notification("ČRo",
                                      "Problém při získání seznamu témat",
                                      xbmcgui.NOTIFICATION_ERROR, 4000)
        sys.exit()
    if "data" in data and len(data["data"]) > 0:
        for topic in data["data"]:
            if "attributes" in topic and "title" in topic[
                    "attributes"] and len(topic["attributes"]["title"]) > 0:
                topicId = topic["id"]
                list_item = xbmcgui.ListItem(
                    label=topic["attributes"]["title"])
                url = get_url(action='list_topic',
                              topicId=topicId,
                              label=label + " / " +
                              encode(topic["attributes"]["title"]))
                list_item.setArt({
                    "thumb": topic["attributes"]["asset"]["url"],
                    "icon": topic["attributes"]["asset"]["url"]
                })
                xbmcplugin.addDirectoryItem(_handle, url, list_item, True)
        xbmcplugin.endOfDirectory(_handle)
    else:
        xbmcgui.Dialog().notification("ČRo",
                                      "Problém při získání seznamu témat",
                                      xbmcgui.NOTIFICATION_ERROR, 4000)
        sys.exit()
Exemple #6
0
def get_show(showId):
    data = call_api(url = "https://api.mujrozhlas.cz/shows/" + showId)
    if "err" in data:
        xbmcgui.Dialog().notification("ČRo","Problém při získání dat o pořadu", xbmcgui.NOTIFICATION_ERROR, 4000)
        sys.exit()
    if "data" in data and len(data["data"]) > 0 and "attributes" in data["data"]:
        title = data["data"]["attributes"]["title"]
        img = data["data"]["attributes"]["asset"]["url"]                
        description = data["data"]["attributes"]["description"]
        shortDescription = data["data"]["attributes"]["shortDescription"]
        author = data["data"]["attributes"]["asset"]["credit"]["author"]
        source = data["data"]["attributes"]["asset"]["credit"]["source"]
        cast = []
        if "participants" in data["data"]["relationships"] and len(data["data"]["relationships"]["participants"]["data"]) > 0:
            for person in data["data"]["relationships"]["participants"]["data"]:
                    cast.append(get_person(person["id"]))

        if len(data["data"]["relationships"]["stations"]["data"]) > 0:
            station  = get_station_from_stationId(data["data"]["relationships"]["stations"]["data"][0]["id"])
        else:
            station = ""
        return { "id" : showId, "title" : title, "img" : img, "description" : description, "shortDescription" : shortDescription, "director" : author, "source" : source, "cast" : cast, "station" : station }
    else:
        xbmcgui.Dialog().notification("ČRo","Problém při získání dat o pořadu", xbmcgui.NOTIFICATION_ERROR, 4000)
        sys.exit()    
Exemple #7
0
def search_shows(shows, shows_ordered, attribute, query):
    data = call_api(url="https://api.mujrozhlas.cz/shows?filter[" + attribute +
                    "][like]=" + quote(query) + "&page[limit]=100")
    if "err" not in data and "data" in data and len(data["data"]) > 0:
        for item in data["data"]:
            if item["id"] not in shows.keys():
                show = get_show(item["id"])
                shows.update({show["id"]: show})
                shows_ordered.update({show["id"]: show["title"]})
    return shows, shows_ordered
Exemple #8
0
def get_widgets(topicId):
    widgets = []
    data = call_api(url="https://api.mujrozhlas.cz/topics/" + topicId)
    if "err" in data:
        xbmcgui.Dialog().notification("ČRo", "Problém při získání pořadů",
                                      xbmcgui.NOTIFICATION_ERROR, 4000)
        sys.exit()
    if "data" in data and len(data["data"]) > 0 and "attributes" in data[
            "data"] and "widgets" in data["data"]["attributes"]:
        for widget in data["data"]["attributes"]["widgets"]:
            if "title" in widget["attributes"] and len(
                    widget["attributes"]["title"]) > 0:
                widgets.append(widget["attributes"]["title"])
    return widgets
Exemple #9
0
def list_show(showId, page, label, mark_new = 0):
    page = int(page)
    page_size = int(addon.getSetting("page_size"))
    show = get_show(showId)
    xbmcplugin.setPluginCategory(_handle, label)    
    data = call_api(url = "https://api.mujrozhlas.cz/shows/" + showId + "/episodes?sort=-since&page[limit]=" + str(page_size) + "&page[offset]=" + str((page-1)*page_size))
    if "err" in data:
        xbmcgui.Dialog().notification("ČRo","Problém při získání pořadů", xbmcgui.NOTIFICATION_ERROR, 4000)
        sys.exit()
    if "data" in data and len(data["data"]) > 0:
        items_count = int(data["meta"]["count"])
        for episode in data["data"]:
            if "attributes" in episode and "title" in episode["attributes"] and len(episode["attributes"]["title"]) > 0:
                starttime =  parse_date(episode["attributes"]["since"])
                if "mirroredSerial" in episode["attributes"] and "totalParts" in episode["attributes"]["mirroredSerial"] and "part" in episode["attributes"]:
                    parts =  " (" + str(episode["attributes"]["part"]) + "/" + str(episode["attributes"]["mirroredSerial"]["totalParts"]) + ") "
                else:
                    parts = ""      
                title = episode["attributes"]["title"] + parts + " (" + starttime.strftime("%d.%m.%Y %H:%M") + ")"
                from libs.favourites import get_listened
                link = episode["attributes"]["audioLinks"][0]["url"]
                if int(mark_new) == 1 and not get_listened(episode["id"]):
                    list_item = xbmcgui.ListItem(label="* " + title)
                else:
                    list_item = xbmcgui.ListItem(label=title)                    
                list_item.setArt({ "thumb" : show["img"], "icon" : show["img"] })
                list_item.setInfo( "video", { "tvshowtitle" : show["title"], "title" : title, "aired" : starttime.strftime("%Y-%m-%d"), "director" : [show["director"]] , "plot" : show["description"], "studio" : show["station"] })
                if len(show["cast"]) > 0:
                    list_item.setInfo( "video", { "cast" : show["cast"] })                
                list_item.setProperty("IsPlayable", "true")
                list_item.setContentLookup(False)
                url = get_url(action='play', url = encode(link), showId = showId, episodeId = episode["id"], title = encode(title), img = show["img"])  
                if PY2:
                    xbmcplugin.addDirectoryItem(_handle, url, list_item, False)
                else:
                    xbmcplugin.addDirectoryItem(_handle, url, list_item, True)
        if page * page_size <= items_count:
            list_item = xbmcgui.ListItem(label="Následující strana")
            url = get_url(action='list_show', showId =  showId, page = page + 1, label = label, mark_new = mark_new)  
            xbmcplugin.addDirectoryItem(_handle, url, list_item, True)

        xbmcplugin.endOfDirectory(_handle, cacheToDisc = False)
    else:
        xbmcgui.Dialog().notification("ČRo","Problém při získání pořadů", xbmcgui.NOTIFICATION_ERROR, 4000)
        sys.exit()
Exemple #10
0
def search_episodes(shows, shows_ordered, attribute, query):
    data = call_api(url="https://api.mujrozhlas.cz/episodes?filter[" +
                    attribute + "][like]=" + quote(query) + "&page[limit]=100")
    if "err" not in data and "data" in data and len(data["data"]) > 0:
        for item in data["data"]:
            if item["type"] == "episode" or item["type"] == "serial":
                if item["relationships"]["show"]["data"][
                        "id"] not in shows.keys() and (
                            "audioLinks" not in item["attributes"]
                            or len(item["attributes"]["audioLinks"]) > 0):
                    show = get_show(
                        item["relationships"]["show"]["data"]["id"])
                    shows.update({show["id"]: show})
                    shows_ordered.update({show["id"]: show["title"]})
            if item["type"] == "show":
                if item["id"] not in shows.keys():
                    show = get_show(item["id"])
                    shows.update({show["id"]: show})
                    shows_ordered.update({show["id"]: show["title"]})
    return shows, shows_ordered
Exemple #11
0
def get_urls():
    urls = {}
    data = call_api(url="https://api.mujrozhlas.cz/stations")
    if "err" in data:
        xbmcgui.Dialog().notification("ČRo", "Problém při načtení streamu",
                                      xbmcgui.NOTIFICATION_ERROR, 4000)
        sys.exit()
    if "data" in data and len(data["data"]):
        for station in data["data"]:
            if "attributes" in station and "audioLinks" in station[
                    "attributes"] and len(
                        station["attributes"]["audioLinks"]) > 0:
                url = ""
                aac_urls = {}
                mp3_urls = {}
                for audiolink in station["attributes"]["audioLinks"]:
                    if audiolink["linkType"] == "directstream" and len(
                            url) == 0:
                        if audiolink["variant"] == 'aac':
                            aac_urls.update(
                                {audiolink["bitrate"]: audiolink["url"]})
                        if audiolink["variant"] == 'mp3':
                            mp3_urls.update(
                                {audiolink["bitrate"]: audiolink["url"]})
                    if audiolink["variant"] == "mp3" and audiolink[
                            "linkType"] == "directstream" and len(url) == 0:
                        url = audiolink["url"]
                if addon.getSetting("prefer_aac") == "true":
                    if len(aac_urls) > 0:
                        url = aac_urls[max(aac_urls.keys())]
                    elif len(mp3_urls):
                        url = mp3_urls[max(mp3_urls.keys())]
                else:
                    if len(mp3_urls) > 0:
                        url = mp3_urls[max(mp3_urls.keys())]
                    elif len(aac_urls):
                        url = aac_urls[max(aac_urls.keys())]
                if len(url) > 1:
                    urls.update({station["id"]: url})
    return urls
Exemple #12
0
def get_current_schedule():
    schedule = {}
    data = call_api(url="https://api.mujrozhlas.cz/schedule-current")
    if "err" in data:
        xbmcgui.Dialog().notification("ČRo", "Problém při načtení programu",
                                      xbmcgui.NOTIFICATION_ERROR, 4000)
        sys.exit()
    if "data" in data and len(data["data"]) > 0:
        for item in data["data"]:
            now = datetime.now()
            if now > parse_date(
                    item["attributes"]["since"]) and now < parse_date(
                        item["attributes"]["till"]):
                if "show" in item["relationships"]:
                    showId = item["relationships"]["show"]["data"]["id"]
                else:
                    showId = "N/A"

                schedule.update({
                    item["relationships"]["station"]["data"]["id"]: {
                        "showId":
                        showId,
                        "show":
                        item["attributes"]["mirroredShow"]["title"],
                        "title":
                        item["attributes"]["title"],
                        "start":
                        parse_date(
                            item["attributes"]["since"]).strftime("%H:%M"),
                        "end":
                        parse_date(
                            item["attributes"]["till"]).strftime("%H:%M")
                    }
                })
    else:
        xbmcgui.Dialog().notification("ČRo", "Problém při načtení programu",
                                      xbmcgui.NOTIFICATION_ERROR, 4000)
        sys.exit()
    return schedule
def get_unlistened_count(showId):
    items_count = 0
    new = 0
    err = 0
    data = call_api(url="https://api.mujrozhlas.cz/shows/" + showId +
                    "/episodes?sort=-since&page[limit]=1&page[offset]=0")
    if "err" in data:
        # xbmcgui.Dialog().notification("ČRo","Problém při získání pořadů", xbmcgui.NOTIFICATION_ERROR, 4000)
        return -1
    if "data" in data and len(data["data"]) > 0:
        items_count = int(data["meta"]["count"])

    open_db()
    listened_count = 0
    row = None
    for row in db.execute(
            'SELECT count(1) pocet FROM listened WHERE showId = ?',
        [str(showId)]):
        listened_count = int(row[0])
    close_db()

    new = items_count - listened_count
    return new
def get_stations(filtered=1):
    stations = {}
    stations_nums = {}
    max_num = 0

    not_found = 0
    valid_to = -1
    filename = get_userdata_dir() + "stations.txt"
    try:
        with codecs.open(filename, "r", encoding="utf-8") as file:
            for line in file:
                item = line[:-1]
                data = json.loads(item)
                stations = data["stations"]
                stations_nums_str = data["stations_nums"]
                for num in stations_nums_str.keys():
                    stations_nums.update({int(num): stations_nums_str[num]})
                valid_to = data["valid_to"]
    except IOError:
        not_found = 1
    max_num = len(stations_nums)
    if not_found == 1 or valid_to < int(time.time()):
        data = call_api(url="https://api.mujrozhlas.cz/stations")
        if "err" in data:
            xbmcgui.Dialog().notification("ČRo", "Problém při načtení stanic",
                                          xbmcgui.NOTIFICATION_ERROR, 4000)
            sys.exit()
        if "data" in data and len(data["data"]) > 0:
            for station in data["data"]:
                if station["attributes"]["shortTitle"] not in stations.keys():
                    max_num = max_num + 1
                    stations_nums.update(
                        {max_num: station["attributes"]["shortTitle"]})
                    if "url" in station["attributes"]["asset"]:
                        img = station["attributes"]["asset"]["url"]
                    else:
                        img = ""
                    stations.update({
                        station["attributes"]["shortTitle"]: {
                            "id": station["id"],
                            "title": station["attributes"]["shortTitle"],
                            "img": img,
                            "enabled": 1
                        }
                    })
            try:
                with codecs.open(filename, "w", encoding="utf-8") as file:
                    data = json.dumps({
                        "stations":
                        stations,
                        "stations_nums":
                        stations_nums,
                        "valid_to":
                        int(time.time()) + 60 * 60 * 24
                    })
                    file.write('%s\n' % data)
            except IOError:
                xbmcgui.Dialog().notification("ČRo",
                                              "Problém při uložení stanic",
                                              xbmcgui.NOTIFICATION_ERROR, 4000)
        else:
            xbmcgui.Dialog().notification("ČRo", "Problém při načtení stanic",
                                          xbmcgui.NOTIFICATION_ERROR, 4000)
            sys.exit()
    if int(filtered) == 1:
        for num in sorted(stations_nums.keys()):
            if int(stations[stations_nums[num]]["enabled"]) == 0:
                del stations[stations_nums[num]]
                del stations_nums[num]
    return stations, stations_nums
Exemple #15
0
def list_topic_recommended(topicId, filtr, label):
    xbmcplugin.setPluginCategory(_handle, label)
    data = call_api(url="https://api.mujrozhlas.cz/topics/" + topicId)
    if "err" in data:
        xbmcgui.Dialog().notification("ČRo", "Problém při získání pořadů",
                                      xbmcgui.NOTIFICATION_ERROR, 4000)
        sys.exit()
    if "data" in data and len(data["data"]) > 0 and "attributes" in data[
            "data"] and "widgets" in data["data"]["attributes"]:
        for widget in data["data"]["attributes"]["widgets"]:
            if "attributes" in widget and "title" in widget[
                    "attributes"] and encode(
                        widget["attributes"]["title"]) == filtr:
                if "items" in widget["attributes"]:
                    items = widget["attributes"]["items"]
                elif "entities" in widget["attributes"]:
                    items = widget["attributes"]["entities"]
                for item in items:
                    if "entity" in item and "type" in item["entity"]:
                        if item["entity"]["type"] == "show":
                            show = get_show(item["entity"]["id"])
                            list_item = xbmcgui.ListItem(label=show["title"])
                            list_item.setArt({
                                "thumb": show["img"],
                                "icon": show["img"]
                            })
                            list_item.setInfo(
                                "video", {
                                    "title": show["title"],
                                    "director": [show["director"]],
                                    "plot": show["description"],
                                    "studio": show["station"]
                                })
                            if len(show["cast"]) > 0:
                                list_item.setInfo("video",
                                                  {"cast": show["cast"]})
                            menus = [
                                ("Přidat k oblíbeným pořadům",
                                 "RunPlugin(plugin://plugin.audio.cro?action=add_favourites&showId="
                                 + str(show["id"]) + "&others=0)"),
                                ("Přidat k ostatním obl. pořadům",
                                 "RunPlugin(plugin://plugin.audio.cro?action=add_favourites&showId="
                                 + str(show["id"]) + "&others=1)")
                            ]
                            list_item.addContextMenuItems(menus)
                            url = get_url(action='list_show',
                                          showId=show["id"],
                                          page=1,
                                          label=encode(show["title"]))
                            xbmcplugin.addDirectoryItem(
                                _handle, url, list_item, True)
                        if item["entity"]["type"] == "episode":
                            show = get_show(item["entity"]["relationships"]
                                            ["show"]["data"]["id"])
                            starttime = parse_date(
                                item["entity"]["attributes"]["since"])
                            title = item["entity"]["attributes"][
                                "mirroredShow"]["title"] + " - " + item[
                                    "entity"]["attributes"][
                                        "title"] + " (" + starttime.strftime(
                                            "%d.%m.%Y %H:%M") + ")"
                            list_item = xbmcgui.ListItem(label=title)
                            url = item["entity"]["attributes"]["audioLinks"][
                                0]["url"]
                            list_item.setArt({
                                "thumb": show["img"],
                                "icon": show["img"]
                            })
                            list_item.setInfo(
                                "video", {
                                    "tvshowtitle": show["title"],
                                    "title": title,
                                    "aired": starttime.strftime("%Y-%m-%d"),
                                    "director": [show["director"]],
                                    "plot": show["description"],
                                    "studio": show["station"]
                                })
                            if len(show["cast"]) > 0:
                                list_item.setInfo("video",
                                                  {"cast": show["cast"]})
                            list_item.setProperty("IsPlayable", "true")
                            list_item.setContentLookup(False)
                            url = get_url(action='play',
                                          url=url,
                                          showId=show["id"],
                                          episodeId=item["entity"]["id"],
                                          title=encode(title),
                                          img=show["img"])
                            if PY2:
                                xbmcplugin.addDirectoryItem(
                                    _handle, url, list_item, False)
                            else:
                                xbmcplugin.addDirectoryItem(
                                    _handle, url, list_item, True)
                    if "type" in item and item["type"] == "episode":
                        show = get_show(
                            item["relationships"]["show"]["data"]["id"])
                        starttime = parse_date(item["attributes"]["since"])
                        title = item["attributes"]["mirroredShow"][
                            "title"] + " - " + item["attributes"][
                                "title"] + " (" + starttime.strftime(
                                    "%d.%m.%Y %H:%M") + ")"
                        url = item["attributes"]["audioLinks"][0]["url"]
                        list_item = xbmcgui.ListItem(label=title)
                        list_item.setArt({
                            "thumb": show["img"],
                            "icon": show["img"]
                        })
                        list_item.setInfo(
                            "video", {
                                "tvshowtitle": show["title"],
                                "title": title,
                                "aired": starttime.strftime("%Y-%m-%d"),
                                "director": [show["director"]],
                                "plot": show["description"],
                                "studio": show["station"]
                            })
                        if len(show["cast"]) > 0:
                            list_item.setInfo("video", {"cast": show["cast"]})
                        list_item.setProperty("IsPlayable", "true")
                        list_item.setContentLookup(False)
                        url = get_url(action='play',
                                      url=url,
                                      showId=show["id"],
                                      episodeId=item["id"],
                                      title=encode(title),
                                      img=show["img"])
                        if PY2:
                            xbmcplugin.addDirectoryItem(
                                _handle, url, list_item, False)
                        else:
                            xbmcplugin.addDirectoryItem(
                                _handle, url, list_item, True)
        xbmcplugin.endOfDirectory(_handle)
    else:
        xbmcgui.Dialog().notification("ČRo", "Problém při získání pořadů",
                                      xbmcgui.NOTIFICATION_ERROR, 4000)
        sys.exit()
Exemple #16
0
def list_topic(topicId, label):
    xbmcplugin.setPluginCategory(_handle, label)
    data = call_api(url="https://api.mujrozhlas.cz/topics/" + topicId +
                    "/episodes?page[limit]=100")
    if "err" in data:
        xbmcgui.Dialog().notification("ČRo", "Problém při získání pořadů",
                                      xbmcgui.NOTIFICATION_ERROR, 4000)
        sys.exit()
    if "data" in data and len(data["data"]) > 0:
        widgets = get_widgets(topicId)
        for widget in widgets:
            list_item = xbmcgui.ListItem(label=widget)
            list_item.setProperty("IsPlayable", "false")
            url = get_url(action='list_topic_recommended',
                          topicId=topicId,
                          filtr=encode(widget),
                          label=label + " / " + encode(widget))
            xbmcplugin.addDirectoryItem(_handle, url, list_item, True)

        shows = {}
        shows_added = []
        for episode in data["data"]:
            if "attributes" in episode and "title" in episode[
                    "attributes"] and len(episode["attributes"]["title"]) > 0:
                if episode["relationships"]["show"]["data"][
                        "id"] not in shows_added:
                    show = get_show(
                        episode["relationships"]["show"]["data"]["id"])
                    shows.update({show["title"]: show})
                    shows_added.append(show["id"])
        for key in sorted(shows.keys()):
            show = shows[key]
            list_item = xbmcgui.ListItem(label=show["title"])
            list_item.setArt({"thumb": show["img"], "icon": show["img"]})
            list_item.setInfo(
                "video", {
                    "title": show["title"],
                    "director": [show["director"]],
                    "plot": show["description"],
                    "studio": show["station"]
                })
            if len(show["cast"]) > 0:
                list_item.setInfo("video", {"cast": show["cast"]})
            menus = [
                ("Přidat k oblíbeným pořadům",
                 "RunPlugin(plugin://plugin.audio.cro?action=add_favourites&showId="
                 + str(show["id"]) + "&others=0)"),
                ("Přidat k ostatním obl. pořadům",
                 "RunPlugin(plugin://plugin.audio.cro?action=add_favourites&showId="
                 + str(show["id"]) + "&others=1)")
            ]
            list_item.addContextMenuItems(menus)
            url = get_url(action='list_show',
                          showId=show["id"],
                          page=1,
                          label=encode(show["title"]))
            list_item.setContentLookup(False)
            xbmcplugin.addDirectoryItem(_handle, url, list_item, True)
        xbmcplugin.endOfDirectory(_handle)
    else:
        xbmcgui.Dialog().notification("ČRo", "Problém při získání pořadů",
                                      xbmcgui.NOTIFICATION_ERROR, 4000)
        sys.exit()
def list_favourites_new(label):
    items = int(addon.getSetting("favourites_new_count"))
    xbmcplugin.setPluginCategory(_handle, label)
    favourites = get_favourites(others=0)
    episodes = {}
    episodes_ordered = {}
    for showId in favourites:
        show = favourites[showId]
        data = call_api(url="https://api.mujrozhlas.cz/shows/" + showId +
                        "/episodes?sort=-since&page[limit]=" + str(items))
        if "err" in data:
            xbmcgui.Dialog().notification(
                "ČRo", "Pořad " + show["title"] + " nebyl nalezený",
                xbmcgui.NOTIFICATION_ERROR, 4000)
            # sys.exit()
        if "data" in data and len(data["data"]) > 0:
            for episode in data["data"]:
                if "attributes" in episode and "title" in episode[
                        "attributes"] and len(
                            episode["attributes"]["title"]) > 0:
                    starttime = parse_date(episode["attributes"]["since"])
                    starttime_ts = time.mktime(starttime.timetuple())
                    episodes_ordered.update({episode["id"]: starttime_ts})
                    if "mirroredSerial" in episode[
                            "attributes"] and "totalParts" in episode[
                                "attributes"][
                                    "mirroredSerial"] and "part" in episode[
                                        "attributes"]:
                        parts = " (" + str(
                            episode["attributes"]["part"]) + "/" + str(
                                episode["attributes"]["mirroredSerial"]
                                ["totalParts"]) + ") "
                    else:
                        parts = ""
                    title = episode["attributes"][
                        "title"] + parts + " (" + starttime.strftime(
                            "%d.%m.%Y %H:%M") + ")"
                    link = episode["attributes"]["audioLinks"][0]["url"]
                    episodes.update({
                        episode["id"]: {
                            "showId": showId,
                            "link": link,
                            "img": show["img"],
                            "tvshowtitle": show["title"],
                            "title": title,
                            "aired": starttime.strftime("%Y-%m-%d"),
                            "director": [show["director"]],
                            "plot": show["description"],
                            "studio": show["station"]
                        }
                    })

    if len(episodes) > 0:
        for key in sorted(episodes_ordered,
                          key=episodes_ordered.get,
                          reverse=True):
            list_item = xbmcgui.ListItem(label=episodes[key]["title"])
            list_item.setArt({
                "thumb": episodes[key]["img"],
                "icon": episodes[key]["img"]
            })
            list_item.setInfo(
                "video", {
                    "tvshowtitle": episodes[key]["tvshowtitle"],
                    "title": episodes[key]["title"],
                    "aired": episodes[key]["aired"],
                    "director": episodes[key]["director"],
                    "plot": episodes[key]["plot"],
                    "studio": episodes[key]["studio"]
                })
            list_item.setProperty("IsPlayable", "true")
            list_item.setContentLookup(False)
            url = get_url(action='play',
                          url=encode(episodes[key]["link"]),
                          showId=episodes[key]["showId"],
                          episodeId=key,
                          title=encode(episodes[key]["title"]),
                          img=episodes[key]["img"])
            if PY2:
                xbmcplugin.addDirectoryItem(_handle, url, list_item, False)
            else:
                xbmcplugin.addDirectoryItem(_handle, url, list_item, True)
    xbmcplugin.endOfDirectory(_handle)