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)
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)
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()")
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))
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()")
def GetPlaylistIndex(iuuid, listFile): chList = common.ReadList(listFile) i = 0 for playlist in chList: if playlist["uuid"] == iuuid: return i i += 1
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()")
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()")
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()")
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
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()")
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()")
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()")
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))
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()")
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()")
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()")
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))
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()")
def lsDir(iuuid): chDirs = common.ReadList(vDirectoriesFile) for vdir in chDirs: if vdir["uuid"] == iuuid: return vdir["data"] return None
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)