示例#1
0
def Categories():
    AddDir("[B]{0}: {1}[/B] - {2} ".format(getLocaleString(30036), getLocaleString(30037) if makeGroups else getLocaleString(30038), getLocaleString(30039)), "setting", 50, os.path.join(iconsDir, "setting.png"), isFolder=False)
    AddDir("[COLOR white][B][{0}][/B][/COLOR]".format(getLocaleString(30003)), "favorites", 30, os.path.join(iconsDir, "bright_yellow_star.png"))
    AddDir("[COLOR yellow][B]{0}[/B][/COLOR]".format(getLocaleString(30001)), "newList", 20, os.path.join(iconsDir, "NewList.ico"), isFolder=False)
    AddDir("[COLOR yellow][B]{0}[/B][/COLOR]".format(getLocaleString(30040)), "newDirectory", 43, os.path.join(iconsDir, "New-folder.png"), isFolder=False)

    # Displaying virtual directories.
    vDirs = common.ReadList(vDirectoriesFile)
    y = 0
    for vDir in vDirs:
        dir_icon = vDir["icon"] if not vDir["icon"] == "" else os.path.join(iconsDir, "default-folder-image.png")
        AddDir("[COLOR green][B]{0}[/B][/COLOR]".format(vDir["name"]), "{0}".format(y), 44, dir_icon, uuid=vDir["uuid"], isFolder=True)
        y += 1
    
    ignored = []
    for vdir in vDirs:
        if len(vdir["data"]) > 0:
            ignored += vdir["data"]
    
    i = 0
    chList = common.ReadList(playlistsFile) 
    addList = []
    try:	
        for uitem in chList:
            if "uuid" in uitem and not uitem["uuid"] in ignored:
                addList.append(chList[i])
            i += 1
    except:
        addList = chList

    AddListItems(addList)
示例#2
0
def ShowDirectoryContents(directory_uuid):
    vDirs = common.ReadList(vDirectoriesFile)
    dirFiles = lsDir(directory_uuid)

    if dirFiles is None:
        return

    chList = common.ReadList(playlistsFile)
    lPlaylists = []

    for pUuid in dirFiles:
        for playlist in chList:
            if pUuid == playlist["uuid"]:
                lPlaylists.append(playlist)

    AddListItems(lPlaylists, addToVdir=False)
示例#3
0
def ListFavorites():
    AddDir("[COLOR yellow][B]{0}[/B][/COLOR]".format(getLocaleString(30013)), "favorites", 34, os.path.join(iconsDir, "bright_yellow_star.png"), isFolder=False)
    chList = common.ReadList(favoritesFile)
    i = 0
    for channel in chList:
        AddDir(channel["name"], channel["url"], 32, channel["image"], index=i, isFolder=False, IsPlayable=True)
        i += 1
def AddNewList():
    listName = GetKeyboardText(getLocaleString(30004)).strip()
    if len(listName) < 1:
        return
    listUrl = GetChoice(30002, 30005, 30006, 30016, 30017, fileType=1, fileMask='.plx|.m3u|.m3u8')
    if len(listUrl) < 1:
        return
    image = GetChoice(30022, 30022, 30022, 30024, 30025, 30021, fileType=2)
    logosUrl = '' if listUrl.endswith('.plx') else GetChoice(30018, 30019, 30020, 30019, 30020, 30021, fileType=0)
    if logosUrl.startswith('http') and not logosUrl.endswith('/'):
        logosUrl += '/'
    epgUrl = '' if listUrl.endswith('.plx') else GetChoice(30046, 30047, 30048, 30047, 30048, 30021, fileType=1, fileMask='.xml')
#    if epgUrl.startswith('http') and not epgUrl.endswith('/'):
#        epgUrl += '/'
    cacheInMinutes = GetNumFromUser(getLocaleString(30034), '0') if listUrl.startswith('http') else 0
    if cacheInMinutes is None:
        cacheInMinutes = 0
    chList = common.ReadList(playlistsFile)
    for item in chList:
        if item["url"].lower() == listUrl.lower():
            xbmc.executebuiltin('Notification({0}, "{1}" {2}, 5000, {3})'.format(AddonName, item["name"], getLocaleString(30007), icon))
            return
    chList.append({"name": listName, "url": listUrl, "image": image, "logos": logosUrl, "epg": epgUrl, "cache": cacheInMinutes, "uuid": str(random.uuid4())})
    if common.SaveList(playlistsFile, chList):
        xbmc.executebuiltin("Container.Refresh()")
示例#5
0
def AddFavorite(url):
    favoritesList = common.ReadList(favoritesFile)
    if any(u == url for u in favoritesList):
        return
    favoritesList.append(common.decode(url, "utf-8"))
    common.WriteList(favoritesFile, favoritesList)
    xbmc.executebuiltin("Notification({0}, {1}, 5000, {2})".format(
        AddonName, common.GetLocaleString(30028), icon))
示例#6
0
def RemoveFromFavourites(index):

    favList = common.ReadList(favoritesFile)
    if index < 0 or index >= len(favList):
        return
    del favList[index]
    common.SaveList(favoritesFile, favList)
    xbmc.executebuiltin("Container.Refresh()")
示例#7
0
def GetPlaylistIndex(iuuid, listFile):
    chList = common.ReadList(listFile)

    i = 0
    for playlist in chList:
        if playlist["uuid"] == iuuid:
            return i
        i += 1
示例#8
0
def AddToDirectory(playlist_uuid):
    # if vdir is none, ask to choose one
    vdirs = common.ReadList(vDirectoriesFile)
        
    dialog = xbmcgui.Dialog()
    svdir = dialog.select("Choose the directory were to attach this playlist", [item["name"] for item in vdirs])
    vdirs[svdir]["data"].append(playlist_uuid)
    common.SaveList(vDirectoriesFile, vdirs)
    xbmc.executebuiltin("Container.Refresh()")
示例#9
0
def RemoveFavortie(index):
    favoritesList = common.ReadList(favoritesFile)
    if index < 0 or index >= len(favoritesList):
        return
    favoritesList.remove(favoritesList[index])
    common.WriteList(favoritesFile, favoritesList)
    xbmc.executebuiltin("Notification({0}, {1}, 5000, {2})".format(
        AddonName, common.GetLocaleString(30029), icon))
    xbmc.executebuiltin("Container.Refresh()")
示例#10
0
def AddNewDirectory():
    dir_name = GetKeyboardText(getLocaleString(30040), "My new directory name")
    dir_icon = xbmcgui.Dialog().browse(1, getLocaleString(30042), 'files')
    
    if dir_name != "":
        vDirs = common.ReadList(vDirectoriesFile)
        vDirs.append({"name": dir_name, "data": [], "icon": dir_icon, "uuid": str(random.uuid4())})
        
        common.SaveList(vDirectoriesFile, vDirs)
        xbmc.executebuiltin("Container.Refresh()")
示例#11
0
def DeleteDirectory(iuuid, with_contents=False):
    vDirs = common.ReadList(vDirectoriesFile)
    y = 0
    for vdir in vDirs:
        if vdir["uuid"] == iuuid:
            if with_contents:
                contents = common.ReadList(playlistsFile)
                i = 0
                uuids = vdir["data"]
                uuids = [uuid4 for uuid4 in uuids]
                for content in contents:
                    if content["uuid"] in uuids:
                        del contents[i]
                    i += 1
                common.SaveList(playlistsFile, contents)
            del vDirs[y]
            common.SaveList(vDirectoriesFile, vDirs)
            xbmc.executebuiltin("Container.Refresh()")
        y += 1
示例#12
0
def ChangeCache(iuuid, listFile):
    index = GetPlaylistIndex(iuuid, listFile)
    chList = common.ReadList(listFile)
    defaultText = chList[index].get('cache', 0)
    cacheInMinutes = GetNumFromUser(getLocaleString(30034), str(defaultText)) if chList[index].get('url', '0').startswith('http') else 0
    if cacheInMinutes is None:
        return
    chList[index]['cache'] = cacheInMinutes
    if common.SaveList(listFile, chList):
        xbmc.executebuiltin("Container.Refresh()")
示例#13
0
def ChangeKey(iuuid, listFile, key, title, favourites=False):
    chList = common.ReadList(listFile)
    index = GetPlaylistIndex(iuuid, listFile) if not favourites else iuuid

    str = GetKeyboardText(getLocaleString(title), chList[index][key])
    if len(str) < 1:
        return

    chList[index][key] = str
    if common.SaveList(listFile, chList):
        xbmc.executebuiltin("Container.Refresh()")
示例#14
0
def ChangeChoice(iuuid, listFile, key, choiceTitle, fileTitle, urlTitle, choiceFile, choiceUrl, choiceNone=None, fileType=1, fileMask=None, favourites=False):
    index = GetPlaylistIndex(iuuid, listFile) if not favourites else iuuid
    chList = common.ReadList(listFile)
    defaultText = chList[index].get(key, "")
    str = GetChoice(choiceTitle, fileTitle, urlTitle, choiceFile, choiceUrl, choiceNone, fileType, fileMask, defaultText)
    if key == "url" and len(str) < 1:
        return
    elif key == "logos" and str.startswith('http') and not str.endswith('/'):
        str += '/'
    chList[index][key] = str
    if common.SaveList(listFile, chList):
        xbmc.executebuiltin("Container.Refresh()")
示例#15
0
def AddFavorites(url, iconimage, name):
    # Checking if url already in list.
    favList = common.ReadList(favoritesFile)
    for item in favList:
        if item["url"].lower() == url.lower():
            xbmc.executebuiltin("Notification({0}, '{1}' {2}, 5000, {3})".format(AddonName, name, getLocaleString(30011), icon))
            return
    
    chList = common.ReadList(tmpListFile)    
    for channel in chList:
        if channel["name"].lower() == name.lower():
            url = channel["url"]
            iconimage = channel["image"]
            break
    if not iconimage:
        iconimage = ""
        
    data = {"url": url, "image": iconimage, "name": name}
    favList.append(data)
    common.SaveList(favoritesFile, favList)
    xbmc.executebuiltin("Notification({0}, '{1}' {2}, 5000, {3})".format(AddonName, name, getLocaleString(30012), icon))
示例#16
0
def RemoveFromLists(iuuid, listFile):

    chList = common.ReadList(listFile)
    vDirsList = common.ReadList(vDirectoriesFile)

    i = 0
    for playlist in chList:
        if playlist["uuid"] == iuuid:
            del chList[i]
        i += 1

    # Removing from vdir lists.
    for vDir in vDirsList:
        i = 0
        for uuid4 in vDir["data"]:
            if iuuid in uuid4:
                del vDir["data"][i]
            i += 1

    common.SaveList(listFile, chList)
    common.SaveList(vDirectoriesFile, vDirsList)

    xbmc.executebuiltin("Container.Refresh()")
示例#17
0
def MoveInFavourites(index, step):
    
    theList = common.ReadList(favoritesFile)

    if index + step >= len(theList) or index + step < 0:
        return
    if step == 0:
        step = GetIndexFromUser(len(theList), index)
    
    if step < 0:
        tempList = theList[0:index + step] + [theList[index]] + theList[index + step:index] + theList[index + 1:]
    elif step > 0:
        tempList = theList[0:index] + theList[index +  1:index + 1 + step] + [theList[index]] + theList[index + 1 + step:]
    else:
        return
    common.SaveList(favoritesFile, tempList)
    xbmc.executebuiltin("Container.Refresh()")
示例#18
0
def AddNewFavorite():
    chName = GetKeyboardText(getLocaleString(30014))
    if len(chName) < 1:
        return
    chUrl = GetKeyboardText(getLocaleString(30015))
    if len(chUrl) < 1:
        return
    image = GetChoice(30023, 30023, 30023, 30024, 30025, 30021, fileType=2)
        
    favList = common.ReadList(favoritesFile)
    for item in favList:
        if item["url"].lower() == chUrl.lower():
            xbmc.executebuiltin("Notification({0}, '{1}' {2}, 5000, {3})".format(AddonName, chName, getLocaleString(30011), icon))
            return
            
    data = {"url": chUrl, "image": image, "name": chName}
    
    favList.append(data)
    if common.SaveList(favoritesFile, favList):
        xbmc.executebuiltin("Container.Refresh()")
示例#19
0
def MakeChannelsGuide():
	if Addon.getSetting("useIPTV") != 'true':
		return
	channelsList = ""
	programmeList = ""
	epgList = common.ReadList(common.epgFile)
	if len(epgList) == 0:
		return
	for key,val in common.items(epgList):
		chName = common.encode(key, "utf-8")
		channelsList += "\t<channel id=\"{0}\">\n\t\t<display-name>{1}</display-name>\n\t</channel>\n".format(common.EscapeXML(chName), chName)
		for programme in val:
			start = GetTZtime(programme["start"])
			end = GetTZtime(programme["end"])
			name = common.EscapeXML(common.encode(programme["name"], "utf-8")) if programme["name"] != None else ""
			description = common.EscapeXML(common.encode(programme["description"], "utf-8")) if programme["description"] != None else ""
			programmeList += "\t<programme start=\"{0}\" stop=\"{1}\" channel=\"{2}\">\n\t\t<title>{3}</title>\n\t\t<desc>{4}</desc>\n\t</programme>\n".format(start, end, common.EscapeXML(chName), name, description)
	xmlList = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<tv>\n{0}{1}</tv>".format(channelsList, programmeList)
	with io.open(xmlFile, 'w', encoding="utf-8") as f:
		f.write(common.uni_code(xmlList))
示例#20
0
def MoveInList(iuuid, step, listFile):
    def moveOnPlaylist(index, step, tList):
        tempList = None
        if index + step >= len(tList) or index + step < 0:
            return None

        if step == 0:
            step = GetIndexFromUser(len(tList), index)

        if step < 0:
            tempList = tList[0:index + step] + [
                tList[index]
            ] + tList[index + step:index] + tList[index + 1:]

        elif step > 0:
            tempList = tList[0:index] + tList[index + 1:index + 1 + step] + [
                tList[index]
            ] + tList[index + 1 + step:]

        else:
            return None

        return tempList

    theList = common.ReadList(listFile)

    # Checking that playlist is not in a directory.
    dir = False
    vdirs = common.ReadList(vDirectoriesFile)
    for vdir in vdirs:
        uuids4 = [uuid4 for uuid4 in vdir["data"]]
        if iuuid in uuids4:
            dir = vdir

    if not dir is False:
        # Moving two sides, directories and global list ( in case of directory removal )
        dirFiles = lsDir(dir["uuid"])

        ffiles = [tfile for tfile in theList if tfile["uuid"] in dirFiles]
        rfiles = [tfile for tfile in theList if tfile["uuid"] not in dirFiles]

        ffiles = moveOnPlaylist(dirFiles.index(iuuid), step, ffiles)

        if not ffiles is None:
            common.SaveList(listFile, rfiles + ffiles)

        # Movin it directory side.
        idx = vdirs.index(vdir)
        vdir["data"] = [item["uuid"] for item in ffiles]
        vdirs[idx] = vdir
        common.SaveList(vDirectoriesFile, vdirs)

    else:
        dirFiles = [item for data in vdirs for item in lsDir(data["uuid"])]
        dirItems = [
            playlist for playlist in common.ReadList(listFile)
            if playlist["uuid"] in dirFiles
        ]
        notDirFiles = [
            playlist for playlist in common.ReadList(listFile)
            if not playlist["uuid"] in dirFiles
        ]

        idx = 0
        for playlist in notDirFiles:
            if playlist["uuid"] == iuuid:
                break
            idx += 1

        ffiles = moveOnPlaylist(idx, step, notDirFiles)

        if not ffiles is None:
            common.SaveList(listFile, dirItems + ffiles)

    xbmc.executebuiltin("Container.Refresh()")
示例#21
0
def lsDir(iuuid):
    chDirs = common.ReadList(vDirectoriesFile)
    for vdir in chDirs:
        if vdir["uuid"] == iuuid:
            return vdir["data"]
    return None
示例#22
0
def ShowFavorties():
    if Addon.getSetting("showFavSort") == 'true':
        sortString = common.GetLocaleString(
            30036) if sortBy == 0 else common.GetLocaleString(30003)
        name = "{0}: {1}".format(common.GetLocaleString(30001), sortString)
        common.addDir(name,
                      "toggleSortingMethod",
                      15,
                      iconimage, {
                          "Title":
                          name,
                          "Plot":
                          "{0}[CR]{1}[CR]{2} / {3}".format(
                              name, common.GetLocaleString(30004),
                              common.GetLocaleString(30036),
                              common.GetLocaleString(30003))
                      },
                      isFolder=False)
    favoritesList = common.ReadList(favoritesFile)
    nowEPG = []
    items = []
    i = -1
    for favorite in favoritesList:
        i += 1
        u = common.encode(favorite, "utf-8")
        prms = dict(common.parse_qsl(u[u.find('?') + 1:]))
        url = common.unquote_plus(prms.get('url', ''))
        mode = int(prms.get('mode', '-1'))
        name = common.unquote_plus(prms.get('name', '')).replace('|||', '?')
        unColorName = common.GetUnColor(name)
        catName = common.unquote_plus(prms.get('catName',
                                               '')).replace('|||', '?')
        image = common.unquote_plus(prms.get('iconimage', ''))
        module = prms.get('module')
        moreData = common.unquote_plus(prms.get('moredata', ''))
        isFolder = prms.get('isFolder', 'False') == 'True'
        isPlayable = prms.get('isPlayable', 'False') == 'True'
        tvgID = prms.get('tvgID', '')
        contextMenu = [(common.GetLocaleString(30027),
                        'RunPlugin({0}?url={1}&mode=9)'.format(sys.argv[0],
                                                               i))]
        if sortBy == 0:
            contextMenu.append(
                (common.GetLocaleString(30031),
                 'RunPlugin({0}?mode=11&url={1}&moredata=-1)'.format(
                     sys.argv[0], i)))
            contextMenu.append(
                (common.GetLocaleString(30032),
                 'RunPlugin({0}?mode=11&url={1}&moredata=1)'.format(
                     sys.argv[0], i)))
            contextMenu.append(
                (common.GetLocaleString(30033),
                 'RunPlugin({0}?mode=11&url={1}&moredata=0)'.format(
                     sys.argv[0], i)))
        if tvgID != '':
            if nowEPG == []:
                nowEPG = epg.GetNowEPG()
            programs = nowEPG.get(tvgID, [])
            items.append((unColorName, common.GetUnColor(name), url, mode,
                          image, module, contextMenu, moreData, programs,
                          isFolder, isPlayable, True))
        else:
            moduleName = GetModuleName(module, mode, moreData, catName)
            if moduleName != '':
                name = '{0} - {1}'.format(
                    common.GetLabelColor(moduleName,
                                         keyColor='timesColor',
                                         bold=True), name)
            items.append(
                (unColorName, name, url, mode, image, module, contextMenu,
                 moreData, [], isFolder, isPlayable, False))
    if sortBy == 1:
        items = sorted(items, key=lambda items: items[0])
    for unColorName, name, url, mode, image, module, contextMenu, moreData, programs, isFolder, isPlayable, isLive in items:
        if isLive:
            LiveChannel(name,
                        url,
                        mode,
                        image,
                        module,
                        contextMenu=contextMenu,
                        bitrate=moreData,
                        programs=programs,
                        addFav=False)
        else:
            common.addDir(name,
                          url,
                          mode,
                          image,
                          infos={"Title": name},
                          contextMenu=contextMenu,
                          moreData=moreData,
                          module=module,
                          isFolder=isFolder,
                          isPlayable=isPlayable,
                          addFav=False)