def getTVShowFromList(showList, strm_name='', strm_type='Other'): pagesDone = 0 file = '' while pagesDone < int(PAGINGTVshows): strm_type = strm_type.replace('Shows-Collection', 'TV-Shows') try: for detailInfo in showList: detailInfo = stringUtils.removeHTMLTAGS(detailInfo) filetypes = re.search('"filetype" *: *"(.*?)",', detailInfo) if filetypes: filetype = filetypes.group(1) files = re.search('"file" *: *"(.*?)",', detailInfo) episodes = re.search('"episode" *: *(.*?),', detailInfo) seasons = re.search('"season" *: *(.*?),', detailInfo) showtitles = re.search('"showtitle" *: *"(.*?)",', detailInfo) labels = re.search('"label" *: *"(.*?)",', detailInfo) if labels: label = str(labels.group(1).lstrip().rstrip()) else: label = "None" if showtitles: showtitle = str(showtitles.group(1).lstrip().rstrip()) else: label = "None" if not fileSys.isInMediaList( label, strm_type ) and label != "" and label != ">>>" and label != "None" and files.group( 1).find("playMode=play") == "-1": fileSys.writeMediaList( files.group(1).lstrip().rstrip(), label, strm_type) if files and filetype != 'file' and label != ">>>": addTVShows(stringUtils.uni( jsonUtils.requestList(files.group(1), 'video')), strm_name="", strm_type=strm_type) else: if showtitles and seasons == "-1" and episodes == "-1": xbmc.executebuiltin( 'Notification(%s, %s, %d, %s)' % (ADDON_NAME, "ShowsList", 1000, "")) getEpisodes( stringUtils.uni( jsonUtils.requestList( files.group(1), 'video')), strm_name.strip(), strm_type) except IOError as (errno, strerror): print("I/O error({0}): {1}").format(errno, strerror) except ValueError: print("No valid integer in line.")
def update(strm_name, url, media_type, thelist): plex_details = jsonUtils.requestList("plugin://plugin.video.plexbmc", media_type).get('files', []) for plex_detail in plex_details: if strm_name.replace('++RenamedTitle++', '') == stringUtils.cleanLabels( plex_detail['label']): serverurl = plex_detail['file'] if url != serverurl: for entry in thelist: if entry.split("|")[1] == strm_name: newentry = '|'.join([ entry.split("|")[0], entry.split("|")[1].decode("utf-8"), serverurl ]) + '\n' thelist = stringUtils.replaceStringElem( thelist, entry, newentry) thefile = xbmc.translatePath( os.path.join(profile, 'MediaList.xml')) with open(thefile.decode("utf-8"), 'w') as output_file: for linje in thelist: if not linje.startswith('\n'): output_file.write( linje.strip().encode('utf-8') + '\n') else: output_file.write(linje.strip()) return serverurl else: break return url
def getTVShowFromList(showList, strm_name='', strm_type='Other', pagesDone=0): dirList = [] episodesList = [] while pagesDone < int(PAGINGTVshows): strm_type = strm_type.replace('Shows-Collection', 'TV-Shows') try: for detailInfo in showList: filetype = detailInfo.get('filetype', None) file = detailInfo.get('file', None) episode = detailInfo.get('episode', -1) season = detailInfo.get('season', -1) if filetype is not None: if filetype == 'directory': dirList.append(jsonUtils.requestList(file, 'video').get('files', [])) continue elif season > -1 and episode > -1 and filetype == 'file': episodesList.append(detailInfo) step = float(100.0 / len(episodesList) if len(episodesList) > 0 else 1) if pagesDone == 0: thisDialog.dialogeBG.update(int(step), "Initialisation of TV-Shows: " + stringUtils.getStrmname(strm_name)) else: thisDialog.dialogeBG.update(int(step), "Page: " + str(pagesDone) + " " + stringUtils.getStrmname(strm_name)) for index, episode in enumerate(episodesList): pagesDone = getEpisode(episode, strm_name, strm_type, pagesDone=pagesDone) thisDialog.dialogeBG.update(int(step * (index + 1))) except IOError as (errno, strerror): print ("I/O error({0}): {1}").format(errno, strerror) except ValueError: print ("No valid integer in line.")
def update(strm_name, url, media_type, thelist): plex_details = stringUtils.uni( jsonUtils.requestList("plugin://plugin.video.plexbmc", media_type)) for plex_detail in plex_details: plex_detail = stringUtils.removeHTMLTAGS(plex_detail) label = re.search('"label" *: *"(.*?)",', plex_detail) if label and strm_name.replace( '++RenamedTitle++', '') == stringUtils.cleanByDictReplacements( label.group(1)): serverurl = re.search('"file" *: *"(.*?)",', plex_detail).group(1) if url != serverurl: for entry in thelist: if entry.split("|")[1] == strm_name: newentry = '|'.join([ entry.split("|")[0], entry.split("|")[1].decode("utf-8"), serverurl ]) + '\n' thelist = stringUtils.replaceStringElem( thelist, entry, newentry) thefile = xbmc.translatePath( os.path.join(profile, 'MediaList.xml')) with open(thefile.decode("utf-8"), 'w') as output_file: for linje in thelist: if not linje.startswith('\n'): output_file.write( linje.strip().encode('utf-8') + '\n') else: output_file.write(linje.strip()) break url = serverurl return url
def addTVShows(contentList, strm_name='', strm_type='Other'): showsList = [] showtitle = strm_name pagesDone = 0 sectiveContent = contentList # while pagesDone < int(PAGINGTVshows): j = 100 / len(contentList) for detailInfo in contentList: detailInfo = stringUtils.removeHTMLTAGS(detailInfo) filetypes = re.search('"filetype" *: *"(.*?)",', detailInfo) showtitles = re.search('"showtitle" *: *"(.*?)",', detailInfo) if showtitles: showtitle = showtitles.group(1) try: if filetypes: filetype = filetypes.group(1) files = re.search('"file" *: *"(.*?)",', detailInfo) if filetype != 'file': getEpisodes( stringUtils.uni( jsonUtils.requestList(files.group(1), 'video')), strm_name.strip(), strm_type, j) else: getEpisodes(detailInfo, strm_name, strm_type, j) thisDialog.dialogeBG.update(j, showtitle) j = j + 100 / len(contentList) except IOError as (errno, strerror): print("I/O error({0}): {1}").format(errno, strerror) except ValueError: print("No valid integer in line.")
def update(strm_name, url, media_type, thelist): plex_details = jsonUtils.requestList("plugin://plugin.video.plexbmc", media_type).get('files', []) for plex_detail in plex_details: if stringUtils.getStrmname(strm_name) == stringUtils.cleanLabels( plex_detail['label']): serverurl = plex_detail['file'] if url != serverurl: for entry in thelist: splits = entry.split("|") if splits[1] == strm_name: splits[2] = serverurl newentry = '|'.join(splits) thelist = stringUtils.replaceStringElem( thelist, entry, newentry) thefile = xbmc.translatePath( os.path.join(addon.getSetting('MediaList_LOC'), 'MediaList.xml')) output_file = xbmcvfs.File(thefile.decode("utf-8"), 'w') for index, linje in enumerate(thelist): output_file.write( ('%s\n' if index < len(thelist) - 1 else '%s') % linje.strip().encode('utf-8')) return serverurl else: break return url
def addTVShows(contentList, strm_name="", strm_type="Other"): showsList = [] showtitle = strm_name pagesDone = 0 sectiveContent = contentList # while pagesDone < int(PAGINGTVshows): for detailInfo in contentList: filetypes = re.search('"filetype" *: *"(.*?)",', detailInfo) if filetypes: filetype = filetypes.group(1) files = re.search('"file" *: *"(.*?)",', detailInfo) if filetype != "file": getEpisodes(stringUtils.uni(jsonUtils.requestList(files.group(1), "video")), strm_name, strm_type) else: getEpisodes(detailInfo, strm_name, strm_type) # pagesDone += 1 # # if filetype != 'file' and pagesDone < int(PAGINGMovies) and is_multi: # contentList = stringUtils.uni(jsonUtils.requestList(files.group(1), 'video')) # else: # pagesDone = int(PAGINGMovies) return showsList
def getTVShowFromList(showList, strm_name="", strm_type="Other"): strm_type = strm_type.replace("Shows-Collection", "TV-Shows") for detailInfo in showList: filetypes = re.search('"filetype" *: *"(.*?)",', detailInfo) if filetypes: filetype = filetypes.group(1) files = re.search('"file" *: *"(.*?)",', detailInfo) episodes = re.search('"episode" *: *(.*?),', detailInfo) seasons = re.search('"season" *: *(.*?),', detailInfo) showtitles = re.search('"showtitle" *: *"(.*?)",', detailInfo) if filetype != "file": if showtitles and seasons == "-1" and episodes == "-1": getEpisodes(stringUtils.uni(jsonUtils.requestList(files.group(1), "video")), strm_name, strm_type) else: addTVShows( stringUtils.uni(jsonUtils.requestList(files.group(1), "video")), strm_name="", strm_type=strm_type, )
def addTVShowsSST(contentList, strm_name='', strm_type='Other'): showsList = [] showtitle = strm_name pagesDone = 0 sectiveContent = contentList # while pagesDone < int(PAGINGTVshows): for detailInfo in contentList: detailInfo = stringUtils.removeHTMLTAGS(detailInfo) filetypes = re.search('"filetype" *: *"(.*?)",', detailInfo) try: if filetypes: filetype = filetypes.group(1) files = re.search('"file" *: *"(.*?)",', detailInfo) if filetype != 'file': contentListSub = stringUtils.uni( jsonUtils.requestList(files.group(1), 'video')) for detailInfo in contentListSub: while filetype != "file": detailInfo = stringUtils.removeHTMLTAGS(detailInfo) filetypes = re.search('"filetype" *: *"(.*?)",', detailInfo) if filetype != 'file': detailInfo = stringUtils.uni( jsonUtils.requestList( files.group(1), 'video')) else: getEpisodes(stringUtils.uni(detailInfo), strm_name.strip(), strm_type) getEpisodes(stringUtils.uni(detailInfo), strm_name.strip(), strm_type) except IOError as (errno, strerror): print("I/O error({0}): {1}").format(errno, strerror) except ValueError: print("No valid integer in line.")
def addAlbum(contentList, strm_name='', strm_type='Other', PAGINGalbums="1"): albumList = [] dirList = [] pagesDone = 0 file = '' filetype = '' j = 100 / (len(contentList) * int(PAGINGalbums)) if len(contentList) > 0 else 1 if len(contentList) == 0: return contentList while pagesDone < int(PAGINGalbums): if not contentList[0] == "palyableSingleMedia": artThumb = contentList[0].get('art', {}) aThumb = urlUtils.stripUnquoteURL(artThumb.get('thumb', '')) for index, detailInfo in enumerate(contentList): art = detailInfo.get('art',{}) file = detailInfo['file'].replace("\\\\", "\\").encode('utf-8') filetype = detailInfo['filetype'] label = stringUtils.cleanLabels(detailInfo['label'].strip()) thumb = art.get('thumb','') fanart = art.get('fanart','') description = detailInfo.get('description', '') track = detailInfo.get('track', 0) if detailInfo.get('track', 0) > 0 else index + 1 duration = detailInfo.get('duration', 0) if duration == 0: duration = 200 try: if filetype == 'directory': dirList.append(jsonUtils.requestList(file, 'music').get('files', [])) continue if addon.getSetting('Link_Type') == '0': link = sys.argv[0] + "?url=" + urllib.quote_plus(file) + "&mode=" + str(10) + "&name=" + urllib.quote_plus(label) + "&fanart=" + urllib.quote_plus(fanart) else: link = file try: album = detailInfo['album'].strip() artist = stringUtils.cleanByDictReplacements(", ".join(artist.strip() for artist in detailInfo['artist']) if isinstance(detailInfo['artist'], (list, tuple)) else detailInfo['artist'].strip()) artistList = [] #Check for Various Artists for i, sArtist in enumerate(contentList): artistList.append(sArtist.get('artist')) if len(artistList) > 1: try: if artistList[0] != artistList[1] and artistList[1] != artistList[2]: artist = 'Various Artists' except IndexError: if artistList[0] != artistList[1]: artist = 'Various Artists' title = stringUtils.cleanByDictReplacements(detailInfo['title'].strip()) type = stringUtils.cleanByDictReplacements(detailInfo['type'].strip()) filename = stringUtils.cleanByDictReplacements(label.strip()) except: filename = stringUtils.cleanByDictReplacements(label.strip()) pass thisDialog.dialogeBG.update(j, ADDON_NAME + ": Writing File: ", " Title: " + label) path = os.path.join(strm_type, artist, strm_name.replace('++RenamedTitle++', '')) if album and artist and label and path and link and track: albumList.append([path, label, link, album, artist, track, duration, thumb]) j = j + 100 / (len(contentList) * int(PAGINGalbums)) except IOError as (errno, strerror): print ("I/O error({0}): {1}").format(errno, strerror) except ValueError: print ("No valid integer in line.") except:
m_title = stringUtils.cleanByDictReplacements(stringUtils.getStrmname(label)) movieList.append({'path': m_path, 'title': m_title, 'url': file, 'provider': provider}) j = j + len(contentList) * int(PAGINGMovies) / 100 except IOError as (errno, strerror): print ("I/O error({0}): {1}").format(errno, strerror) except ValueError: print ("No valid integer in line.") except: guiTools.infoDialog("Unexpected error: " + str(sys.exc_info()[1])+ (". See your Kodi.log!")) utils.addon_log(("Unexpected error: ") + str(sys.exc_info()[1])) print ("Unexpected error:"), sys.exc_info()[0] raise pagesDone += 1 if filetype != '' and filetype != 'file' and pagesDone < int(PAGINGMovies): contentList = jsonUtils.requestList(file, 'video').get('files', []) else: pagesDone = int(PAGINGMovies) else: provider = getProvider(contentList[1]) m_path = stringUtils.getMovieStrmPath(strm_type, strm_name) m_title = stringUtils.cleanByDictReplacements(stringUtils.getStrmname(strm_name)) movieList.append({'path': m_path, 'title': m_title, 'url': contentList[1], 'provider': provider}) pagesDone = int(PAGINGMovies) return movieList def getProvider(entry): provider = None provGeneral = re.search('%s([^\/\?]*)' % ("plugin:\/\/"), entry) provXST = re.search('%s(.*)'"\&function"'' % (r"site="), entry)
def getTVShowFromList(showList, strm_name='', strm_type='Other', pagesDone=0): dirList = [] episodesList = [] while pagesDone < int(PAGINGTVshows): strm_type = strm_type.replace('Shows-Collection', 'TV-Shows') try: for detailInfo in showList: filetype = detailInfo.get('filetype', None) file = detailInfo.get('file', None) if filetype: if filetype == 'directory': dirList.append( jsonUtils.requestList(file, 'video').get('files', [])) continue elif filetype == 'file': if detailInfo.get('season', -1) == -1 or detailInfo.get( 'episode', -1) == -1: showtitle = detailInfo.get('showtitle') episodetitle = detailInfo.get('title') if showtitle and showtitle != '' and episodetitle and episodetitle != '': lang = None if strm_type.lower().find('other') == -1: lang = strm_type[strm_type.find('(') + 1:strm_type.find(')')] data = tvdb.getEpisodeByName( showtitle, episodetitle, lang) if data: detailInfo['season'] = data.get('season') detailInfo['episode'] = data.get('episode') if detailInfo.get('season', -1) > -1 and detailInfo.get( 'episode', -1) > -1: if NOE0_STRMS_EXPORT == "false" or detailInfo.get( 'episode') > 0: episodesList.append(detailInfo) step = float(100.0 / len(episodesList) if len(episodesList) > 0 else 1) if pagesDone == 0: thisDialog.dialogeBG.update( int(step), "Initialisation of TV-Shows: " + stringUtils.getStrmname(strm_name)) else: thisDialog.dialogeBG.update( int(step), "Page: %d %s" % (pagesDone, stringUtils.getStrmname(strm_name))) for index, episode in enumerate(episodesList): pagesDone = getEpisode(episode, strm_name, strm_type, pagesDone=pagesDone) thisDialog.dialogeBG.update(int(step * (index + 1))) except: guiTools.infoDialog("Unexpected error: " + str(sys.exc_info()[1]) + (". See your Kodi.log!")) utils.addon_log(("Unexpected error: ") + str(sys.exc_info()[1])) print("Unexpected error:"), sys.exc_info()[0] raise pagesDone += 1 episodesList = [] showList = [] if pagesDone < int(PAGINGTVshows) and len(dirList) > 0: showList = [item for sublist in dirList for item in sublist] dirList = []
def getEpisodes(episodesListRaw, strm_name, strm_type, j=0): episodesList = [] typeChange = [] try: if type(episodesListRaw) is unicode: typeChange.append(episodesListRaw) episodesListRaw = typeChange for detailInfo in episodesListRaw: detailInfo = stringUtils.removeHTMLTAGS(detailInfo) files = re.search('"file" *: *"(.*?)",', detailInfo) filetypes = re.search('"filetype" *: *"(.*?)",', detailInfo) labels = re.search('"label" *: *"(.*?)",', detailInfo) thumbnails = re.search('"thumbnail" *: *"(.*?)",', detailInfo) fanarts = re.search('"fanart" *: *"(.*?)",', detailInfo) descriptions = re.search('"description" *: *"(.*?)",', detailInfo) episodes = re.search('"episode" *: *(.*?),', detailInfo) seasons = re.search('"season" *: *(.*?),', detailInfo) showtitles = re.search('"showtitle" *: *"(.*?)",', detailInfo) if filetypes: if filetypes.group(1) == 'directory': contentList = stringUtils.uni( jsonUtils.requestList(files.group(1), 'video')) continue if showtitles and seasons and episodes: filetype = filetypes.group(1) label = (stringUtils.cleanLabels(labels.group(1))) file = (files.group(1).replace("\\\\", "\\")) strm_name = str( utils.multiple_reSub(strm_name.strip(), dictReplacements)) showtitle = utils.multiple_reSub((showtitles.group(1)), dictReplacements) season = (utils.multiple_reSub( (seasons.group(1)).replace("-", ""), dictReplacements)) episode = (utils.multiple_reSub( (episodes.group(1)).replace("-", ""), dictReplacements)) episodesHDF = re.search('Folge.(\\d+)&', file) if file.find("hdfilme") != "-1" and episodesHDF: episode = re.search('Folge.(\\d+)&', file).group(1) if not descriptions: description = '' else: description = stringUtils.cleanLabels( descriptions.group(1)) if fanarts: fanart = fanarts.group(1) else: fanart = '' if addon.getSetting('Link_Type') == '0': link = sys.argv[0] + "?url=" + urllib.quote_plus( file ) + "&mode=" + str(10) + "&name=" + urllib.quote_plus( label) + "&fanart=" + urllib.quote_plus(fanart) else: link = file # if strm_name.find("++RenamedTitle++") != -1: showtitle = strm_name.strip().replace( '++RenamedTitle++', '') if showtitle != "" and strm_type != "": episodesList.append([ os.path.join( xbmc.translatePath(strm_type + "//" + (utils.multiple_reSub( showtitle.strip(), dictReplacements)))), str('s' + season), str('e' + episode), link ]) except IOError as (errno, strerror): print("I/O error({0}): {1}").format(errno, strerror)
def fillPluginItems( url, media_type="video", file_type=False, strm=False, strm_name="", strm_type="Other", showtitle="None" ): utils.addon_log("fillPluginItems") if not file_type: detail = stringUtils.uni(jsonUtils.requestList(url, media_type)) listLength = len(detail) else: detail = stringUtils.uni(jsonUtils.requestItem(url, media_type)) if strm_type.find("Cinema") != -1: addMovies(detail, strm_name, strm_type) return if strm_type.find("TV-Show") != -1: addTVShows(detail, strm_name, strm_type) return if strm_type.find("Shows-Collection") != -1: getTVShowFromList(detail, strm_name, strm_type) return # if strm_type.find('YouTube') != -1: # # video = pafy.new(url) # bestaudio = video.getbestaudio() # bestaudio.bitrate #get bit rate # bestaudio.extension #extension of audio fileurl # # bestaudio.url #get url # # #download if you want # bestaudio.download() # return for f in detail: files = re.search('"file" *: *"(.*?)",', f) filetypes = re.search('"filetype" *: *"(.*?)",', f) labels = re.search('"label" *: *"(.*?)",', f) thumbnails = re.search('"thumbnail" *: *"(.*?)",', f) fanarts = re.search('"fanart" *: *"(.*?)",', f) descriptions = re.search('"description" *: *"(.*?)",', f) if filetypes and labels and files: filetype = filetypes.group(1) label = stringUtils.cleanLabels(labels.group(1)) file = files.group(1).replace("\\\\", "\\") strm_name = str(utils.multiple_reSub(strm_name.rstrip(), dictReplacements)) if not descriptions: description = "" else: description = stringUtils.cleanLabels(descriptions.group(1)) thumbnail = thumbnails.group(1) # stringUtils.removeNonAscii(thumbnails.group(1)) fanart = fanarts.group(1) # stringUtils.removeNonAscii(fanarts.group(1)) if addon.getSetting("Link_Type") == "0": link = ( sys.argv[0] + "?url=" + urllib.quote_plus(file) + "&mode=" + str(10) + "&name=" + urllib.quote_plus(label) + "&fanart=" + urllib.quote_plus(fanart) ) else: link = file if strm_type.find("TV(") != -1: path = os.path.join(strm_type, strm_name) filename = str(label) if strm_type.find("Movie") != -1: path = os.path.join(strm_type, strm_name) filename = str(label) if strm_type in ["Audio-Album"]: path = os.path.join(strm_type, strm_name) try: album = re.search('"album" *: *"(.*?)",', f).group(1) try: artist = re.search('"artist" *: *"(.*?)",', f).group(1) except: artist = re.search('"artist"*:*."(.*?)".,', f).group(1) pass titl = re.search('"title" *: *(.*?),', f).group(1) types = re.search('"type" *: *(.*?),', f).group(1) filename = str(strm_name + " - " + label) except: filename = str(strm_name + " - " + label) if strm_type in ["Audio-Single"]: path = os.path.join("Singles", str(strm_name)) try: album = re.search('"album" *: *"(.*?)",', f).group(1) try: artist = re.search('"artist" *: *"(.*?)",', f).group(1) except: artist = re.search('"artist"*:*."(.*?)".,', f).group(1) pass titl = re.search('"title" *: *(.*?),', f).group(1) types = re.search('"type" *: *(.*?),', f).group(1) filename = str(strm_name + " - " + label) except: filename = str(strm_name + " - " + label) if strm_type in ["Other"]: path = os.path.join("Other", strm_name) filename = str(strm_name + " - " + label) if filetype == "file": if strm: if strm_type == "Audio-Album": utils.addon_log(str(path + " " + filename)) utils.createSongNFO( stringUtils.cleanStrms((path.rstrip("."))), stringUtils.cleanStrms(filename.rstrip(".")), strm_ty=strm_type, artists=artist, albums=album, titls=titl, typese=types, ) # xbmc.executebuiltin('Notification(%s, %s, %d, %s)'%(path + " - " + filename, " writing...",5000,"")) fileSys.writeSTRM( stringUtils.cleanStrms((path.rstrip("."))), stringUtils.cleanStrms(filename.rstrip(".")), link ) else: guiTools.addLink( label, file, 10, thumbnail, fanart, description, "", "", "", None, "", total=len(detail) ) # xbmc.executebuiltin("Container.SetViewMode(500)") else: if strm: fillPluginItems(file, media_type, file_type, strm, label, strm_type) else: guiTools.addDir(label, file, 101, thumbnail, fanart, description, "", "", "")
def fillPluginItems(url, media_type='video', file_type=False, strm=False, strm_name='', strm_type='Other', showtitle='None'): initialize_DialogBG("Updating", "Getting content..") thisDialog.dialogeBG.update(0, ADDON_NAME + ": Getting: ", strm_name.replace('++RenamedTitle++', '')) utils.addon_log('fillPluginItems') detail = [] if url.find("playMode=play") == -1: if not file_type: detail = stringUtils.uni(jsonUtils.requestList(url, media_type)) listLength = len(detail) else: detail = stringUtils.uni(jsonUtils.requestItem(url, media_type)) else: detail.append("palyableSingleMedia") detail.append(url) thisDialog.dialogeBG.close() thisDialog.dialogeBG = None if strm_type.find('Cinema') != -1 or strm_type.find('YouTube') != -1: try: initialize_DialogBG("Movie", "Adding") addMovies(detail, strm_name, strm_type) thisDialog.dialogeBG.close() thisDialog.dialogeBG = None return except: thisDialog.dialogeBG.close() thisDialog.dialogeBG = None guiTools.infoDialog("Unexpected error: " + str(sys.exc_info()[1]) + (". Se your Kodi.log!")) utils.addon_log(("Unexpected error: ") + str(sys.exc_info()[1])) print("Unexpected error:"), sys.exc_info()[0] raise if strm_type.find('TVShows sub structures') != -1: try: initialize_DialogBG("TV-Show SST", "Adding") addTVShowsSST(detail, strm_name, strm_type) thisDialog.dialogeBG.close() thisDialog.dialogeBG = None return except: thisDialog.dialogeBG.close() thisDialog.dialogeBG = None guiTools.infoDialog("Unexpected error: " + str(sys.exc_info()[1]) + (". Se your Kodi.log!")) utils.addon_log(("Unexpected error: ") + str(sys.exc_info()[1])) print("Unexpected error:"), sys.exc_info()[0] raise if strm_type.find('TV-Show') != -1: try: initialize_DialogBG("TV-Show", "Adding") addTVShows(detail, strm_name, strm_type) thisDialog.dialogeBG.close() thisDialog.dialogeBG = None return except: thisDialog.dialogeBG.close() thisDialog.dialogeBG = None guiTools.infoDialog("Unexpected error: " + str(sys.exc_info()[1]) + (". Se your Kodi.log!")) utils.addon_log(("Unexpected error: ") + str(sys.exc_info()[1])) print("Unexpected error:"), sys.exc_info()[0] raise if strm_type.find('Shows-Collection') != -1: try: initialize_DialogBG("Shows-Collection", "Adding") getTVShowFromList(detail, strm_name, strm_type) thisDialog.dialogeBG.close() thisDialog.dialogeBG = None return except: thisDialog.dialogeBG.close() thisDialog.dialogeBG = None guiTools.infoDialog("Unexpected error: " + str(sys.exc_info()[1]) + (". Se your Kodi.log!")) utils.addon_log(("Unexpected error: ") + str(sys.exc_info()[1])) print("Unexpected error:"), sys.exc_info()[0] raise if strm_type.find('Album') != -1: try: initialize_DialogBG("Album", "Adding") addAlbum(detail, strm_name, strm_type) thisDialog.dialogeBG.close() thisDialog.dialogeBG = None return except: thisDialog.dialogeBG.close() thisDialog.dialogeBG = None guiTools.infoDialog("Unexpected error: " + str(sys.exc_info()[1]) + (". Se your Kodi.log!")) utils.addon_log(("Unexpected error: ") + str(sys.exc_info()[1])) print("Unexpected error:"), sys.exc_info()[0] raise # if strm_type.find('YouTube') != -1: # # video = pafy.new(url) # bestaudio = video.getbestaudio() # bestaudio.bitrate #get bit rate # bestaudio.extension #extension of audio fileurl # # bestaudio.url #get url # # #download if you want # bestaudio.download() # return for f in detail: files = re.search('"file" *: *"(.*?)",', f) filetypes = re.search('"filetype" *: *"(.*?)",', f) labels = re.search('"label" *: *"(.*?)",', f) thumbnails = re.search('"thumbnail" *: *"(.*?)",', f) fanarts = re.search('"fanart" *: *"(.*?)",', f) descriptions = re.search('"description" *: *"(.*?)",', f) tracks = re.search('"track" *: *(.*?),', f) durations = re.search('"duration" *: *"(.*?)",', f) if filetypes and labels and files: filetype = filetypes.group(1) label = (stringUtils.cleanLabels(labels.group(1))) file = (files.group(1).replace("\\\\", "\\")) strm_name = str( utils.multiple_reSub(strm_name.strip(), dictReplacements)) if not descriptions: description = '' else: description = stringUtils.cleanLabels(descriptions.group(1)) thumbnail = thumbnails.group( 1) #stringUtils.removeNonAscii(thumbnails.group(1)) fanart = fanarts.group( 1) #stringUtils.removeNonAscii(fanarts.group(1)) if addon.getSetting('Link_Type') == '0': link = sys.argv[0] + "?url=" + urllib.quote_plus( file) + "&mode=" + str(10) + "&name=" + urllib.quote_plus( label) + "&fanart=" + urllib.quote_plus(fanart) else: link = file if strm_type in ['Audio-Single']: path = os.path.join('Singles', str(strm_name)) try: album = re.search('"album" *: *"(.*?)",', f).group(1).strip() try: artist = re.search('"artist" *: *"(.*?)",', f).group(1).strip() except: artist = re.search('"artist"*:*."(.*?)".,', f).group(1).strip() pass titl = re.search('"title" *: *(.*?),', f).group(1).strip() types = re.search('"type" *: *(.*?),', f).group(1).strip() filename = str(strm_name + ' - ' + label).strip() except: filename = str(strm_name + ' - ' + label).strip() if strm_type.find('Audio-Album') != -1: path = os.path.join(strm_type, strm_name) if tracks: track = tracks.group(1) try: album = re.search('"album" *: *"(.*?)",', f).group(1).strip() try: artist = utils.multiple_reSub( re.search('"artist" *: *"(.*?)",', f).group(1).strip(), dictReplacements) except: artist = utils.multiple_reSub( re.search('"artist"*:*."(.*?)".,', f).group(1).strip(), dictReplacements) pass titl = utils.multiple_reSub( re.search('"title" *: *(.*?),', f).group(1).strip(), dictReplacements) types = utils.multiple_reSub( re.search('"type" *: *(.*?),', f).group(1).strip(), dictReplacements) filename = utils.multiple_reSub( str(label).strip(), dictReplacements) except: filename = utils.multiple_reSub( str(label).strip(), dictReplacements) if strm_type in ['Other']: path = os.path.join('Other', strm_name) filename = str(strm_name + ' - ' + label) if filetype == 'file': if strm: if strm_type.find('Audio-Albums') != -1: utils.addon_log(str(path + ' ' + filename)) #utils.createSongNFO(stringUtils.cleanStrms((path.rstrip("."))), stringUtils.cleanStrms(filename.rstrip(".")), strm_ty=strm_type, artists=artist,albums=album , titls=titl, typese=types) kodiDB.musicDatabase(album, artist, label, path, link, track) # xbmc.executebuiltin('Notification(%s, %s, %d, %s)'%(path + " - " + filename, " writing...",5000,"")) fileSys.writeSTRM( stringUtils.cleanStrms((path.rstrip("."))), stringUtils.cleanStrms(filename.rstrip(".")), link) else: guiTools.addLink(label, file, 10, thumbnail, fanart, description, '', '', '', None, '', total=len(detail)) # xbmc.executebuiltin("Container.SetViewMode(500)") else: if strm: fillPluginItems(file, media_type, file_type, strm, label, strm_type) else: guiTools.addDir(label, file, 101, thumbnail, fanart, description, '', '', '')
print("I/O error({0}): {1}").format(errno, strerror) except ValueError: print("No valid integer in line.") except: thisDialog.dialogeBG.close() guiTools.infoDialog("Unexpected error: " + str(sys.exc_info()[1]) + (". Se your Kodi.log!")) utils.addon_log(("Unexpected error: ") + str(sys.exc_info()[1])) print("Unexpected error:"), sys.exc_info()[0] raise pagesDone += 1 if filetype != 'file' and pagesDone < int(PAGINGalbums): contentList = stringUtils.uni( jsonUtils.requestList(file, 'video')) else: pagesDone = int(PAGINGalbums) if False: try: urlUtils.downloadThumb( aThumb, album, os.path.join(STRM_LOC, strm_type, artist)) except: pass else: albumList.append([ os.path.join(strm_type, strm_name.strip().replace('++RenamedTitle++', ''), label.strip()), str(utils.multiple_reSub(label.strip(), dictReplacements)),
def getEpisodes(episodesListRaw, strm_name, strm_type): episodesList = [] typeChange = [] try: if type(episodesListRaw) is unicode: typeChange.append(episodesListRaw) episodesListRaw = typeChange for detailInfo in episodesListRaw: files = re.search('"file" *: *"(.*?)",', detailInfo) filetypes = re.search('"filetype" *: *"(.*?)",', detailInfo) labels = re.search('"label" *: *"(.*?)",', detailInfo) thumbnails = re.search('"thumbnail" *: *"(.*?)",', detailInfo) fanarts = re.search('"fanart" *: *"(.*?)",', detailInfo) descriptions = re.search('"description" *: *"(.*?)",', detailInfo) episodes = re.search('"episode" *: *(.*?),', detailInfo) seasons = re.search('"season" *: *(.*?),', detailInfo) showtitles = re.search('"showtitle" *: *"(.*?)",', detailInfo) if filetypes: if re.search('"filetype" *: *"(.*?)",', detailInfo).group(1) == "directory": contentList = stringUtils.uni(jsonUtils.requestList(files.group(1), "video")) continue if showtitles and seasons and episodes: filetype = filetypes.group(1) label = stringUtils.cleanLabels(labels.group(1)) file = files.group(1).replace("\\\\", "\\") strm_name = str(utils.multiple_reSub(strm_name.rstrip(), dictReplacements)) showtitle = utils.multiple_reSub((showtitles.group(1)), dictReplacements) season = utils.multiple_reSub((seasons.group(1)).replace("-", ""), dictReplacements) episode = utils.multiple_reSub((episodes.group(1)).replace("-", ""), dictReplacements) if not descriptions: description = "" else: description = stringUtils.cleanLabels(descriptions.group(1)) if fanarts: fanart = fanarts.group(1) else: fanart = "" if addon.getSetting("Link_Type") == "0": link = ( sys.argv[0] + "?url=" + urllib.quote_plus(file) + "&mode=" + str(10) + "&name=" + urllib.quote_plus(label) + "&fanart=" + urllib.quote_plus(fanart) ) else: link = file # if showtitle.find('10-8:') != -1: # x= showtitle episodesList.append( [ os.path.join( xbmc.translatePath( strm_type + "//" + (utils.multiple_reSub(showtitle, dictReplacements)) ) ), str("s" + season), str("e" + episode), link, ] ) except IOError as (errno, strerror): print "I/O error({0}): {1}".format(errno, strerror)
def fillPluginItems(url, media_type='video', file_type=False, strm=False, strm_name='', strm_type='Other', showtitle='None'): initialize_DialogBG("Updating", "Getting content..") thisDialog.dialogeBG.update(0, ADDON_NAME + ": Getting: ", stringUtils.getStrmname(strm_name)) utils.addon_log('fillPluginItems') details = [] if url.find("playMode=play") == -1: if not file_type: details = jsonUtils.requestList(url, media_type).get('files', []) else: details = jsonUtils.requestItem(url, media_type).get('files', []) else: details.append("palyableSingleMedia") details.append(url) thisDialog.dialogeBG.close() thisDialog.dialogeBG = None if strm_type.find('Cinema') != -1 or strm_type.find('YouTube') != -1 or strm_type.find('Movies') != -1: try: initialize_DialogBG("Movie", "Adding") movieList = addMovies(details, strm_name, strm_type) dbMovList = kodiDB.writeMovie(movieList) j = 100 / len(dbMovList) if len(dbMovList) > 0 else 1 # Write strms for all values in movieList for entry in dbMovList: thisDialog.dialogeBG.update(j, ADDON_NAME + ": Writing Movies: ", " Video: " + entry.get('title')) fileSys.writeSTRM(stringUtils.cleanStrms(entry.get('path')), stringUtils.cleanStrms(entry.get('title')) , "plugin://plugin.video.osmosix/?url=plugin&mode=10&mediaType=movie&id=" + str(entry.get('movieID')) + "|" + entry.get('title')) j = j + 100 / len(movieList) thisDialog.dialogeBG.close() thisDialog.dialogeBG = None return except: thisDialog.dialogeBG.close() thisDialog.dialogeBG = None guiTools.infoDialog("Unexpected error: " + str(sys.exc_info()[1])+ (". See your Kodi.log!")) utils.addon_log(("Unexpected error: ") + str(sys.exc_info()[1])) print ("Unexpected error:"), sys.exc_info()[0] raise if strm_type.find('TV-Show') != -1 or strm_type.find('Shows-Collection') != -1: try: initialize_DialogBG("Adding TV-Shows", "working..") getTVShowFromList(details, strm_name, strm_type) thisDialog.dialogeBG.close() thisDialog.dialogeBG = None return except: thisDialog.dialogeBG.close() thisDialog.dialogeBG = None guiTools.infoDialog("Unexpected error: " + str(sys.exc_info()[1])+ (". See your Kodi.log!")) utils.addon_log(("Unexpected error: ") + str(sys.exc_info()[1])) print ("Unexpected error:"), sys.exc_info()[0] raise if strm_type.find('Album') != -1 : try: initialize_DialogBG("Album", "Adding") addAlbum(details, strm_name, strm_type) thisDialog.dialogeBG.close() thisDialog.dialogeBG = None return except: thisDialog.dialogeBG.close() thisDialog.dialogeBG = None guiTools.infoDialog("Unexpected error: " + str(sys.exc_info()[1])+ (". See your Kodi.log!")) utils.addon_log(("Unexpected error: ") + str(sys.exc_info()[1])) print ("Unexpected error:"), sys.exc_info()[0] raise for detail in details: filetype = detail['filetype'] label = stringUtils.cleanLabels(detail['label']) file = detail['file'].replace("\\\\", "\\") strm_name = str(stringUtils.cleanByDictReplacements(strm_name.strip())) plot = stringUtils.cleanLabels(detail.get('plot','')) art = detail.get('art',{}) if addon.getSetting('Link_Type') == '0': link = sys.argv[0] + "?url=" +urllib.quote_plus(stringUtils.uni(file)) + "&mode=" + str(10) + "&name=" +urllib.quote_plus(stringUtils.uni(label)) + "&fanart=" + urllib.quote_plus(art.get('fanart','')) else: link = file if strm_type == 'Audio-Single': path = os.path.join('Singles', str(strm_name)) try: album = detail['album'].strip() artist = stringUtils.cleanByDictReplacements(", ".join(artist.strip() for artist in detailInfo['artist']) if isinstance(detailInfo['artist'], (list, tuple)) else detailInfo['artist'].strip()) title = detail['title'].strip() type = detail['type'].strip() filename = str(strm_name + ' - ' + label).strip() except: filename = str(strm_name + ' - ' + label).strip() if strm_type.find('Audio-Album') != -1: path = os.path.join(strm_type, strm_name) track = detail.get('track', 0) try: album = detail['album'].strip() artist = stringUtils.cleanByDictReplacements(", ".join(artist.strip() for artist in detailInfo['artist']) if isinstance(detailInfo['artist'], (list, tuple)) else detailInfo['artist'].strip()) title = stringUtils.cleanByDictReplacements(detail['title'].strip()) type = stringUtils.cleanByDictReplacements(detail['type'].strip()) filename = stringUtils.cleanByDictReplacements(label.strip()) except: filename = stringUtils.cleanByDictReplacements(label.strip()) if strm_type in ['Other']: path = os.path.join('Other', strm_name) filename = str(strm_name + ' - ' + label) if filetype == 'file': if strm: if strm_type.find('Audio-Albums') != -1: kodiDB.musicDatabase(album, artist, label, path, link, track) fileSys.writeSTRM(stringUtils.cleanStrms((path.rstrip("."))), stringUtils.cleanStrms(filename.rstrip(".")) , link) else: guiTools.addLink(label, file, 10, art, plot, '', '', '', None, '', total=len(details)) else: if strm: fillPluginItems(file, media_type, file_type, strm, label, strm_type) else: guiTools.addDir(label, file, 101, art, plot, '', '', '')
def getEpisodes(episodesListRaw, strm_name, strm_type, j=0, pagesDone=0): episodesList = [] typeChange = [] try: if type(episodesListRaw) is unicode: typeChange.append(episodesListRaw) episodesListRaw = typeChange for detailInfo in episodesListRaw: utils.addon_log("detailInfo: " + detailInfo) detailInfo = stringUtils.removeHTMLTAGS(detailInfo) files = re.search('"file" *: *"(.*?)",', detailInfo) filetypes = re.search('"filetype" *: *"(.*?)",', detailInfo) labels = re.search('"label" *: *"(.*?)",', detailInfo) thumbnails = re.search('"thumbnail" *: *"(.*?)",', detailInfo) fanarts = re.search('"fanart" *: *"(.*?)",', detailInfo) descriptions = re.search('"description" *: *"(.*?)",', detailInfo) episodes = re.search('"episode" *: *(.*?),', detailInfo) seasons = re.search('"season" *: *(.*?),', detailInfo) showtitles = re.search('"showtitle" *: *"(.*?)",', detailInfo) provGeneral = re.search( '%s(.*)' "\\/\\?" '' % (r"plugin://plugin.video."), detailInfo) provXST = re.search('%s(.*)' "\&function" '' % (r"site="), detailInfo) listName = strm_name if filetypes: if provGeneral: listName = provGeneral.group(1) if provXST: listName = listName + ": " + provXST.group(1) if filetypes.group(1) == 'directory': contentList = stringUtils.uni( jsonUtils.requestList(files.group(1), 'video')) continue if showtitles and seasons and episodes: filetype = filetypes.group(1) label = (stringUtils.cleanLabels(labels.group(1))) file = (files.group(1).replace("\\\\", "\\")) strm_name = str( stringUtils.cleanByDictReplacements(strm_name.strip())) showtitle = stringUtils.cleanByDictReplacements( (showtitles.group(1))) season = stringUtils.cleanByDictReplacements( seasons.group(1).replace("-", "")) episode = stringUtils.cleanByDictReplacements( episodes.group(1).replace("-", "")) episodesHDF = re.search('Folge.(\\d+)&', file) if file.find("hdfilme") != "-1" and episodesHDF: episode = re.search('Folge.(\\d+)&', file).group(1) if not descriptions: description = '' else: description = stringUtils.cleanLabels( descriptions.group(1)) if fanarts: fanart = fanarts.group(1) else: fanart = '' if strm_name.find("++RenamedTitle++") != -1: showtitle = strm_name.strip().replace( '++RenamedTitle++', '') if showtitle != "" and strm_type != "": episodesList.append([ strm_type, str('s' + season), str('e' + episode), file, stringUtils.cleanByDictReplacements( showtitle.strip()), listName ]) except IOError as (errno, strerror): print("I/O error({0}): {1}").format(errno, strerror)
def addMovies(contentList, strm_name="", strm_type="Other"): movieList = [] pagesDone = 0 file = "" while pagesDone < int(PAGINGMovies): for detailInfo in contentList: files = re.search('"file" *: *"(.*?)",', detailInfo) filetypes = re.search('"filetype" *: *"(.*?)",', detailInfo) labels = re.search('"label" *: *"(.*?)",', detailInfo) thumbnails = re.search('"thumbnail" *: *"(.*?)",', detailInfo) fanarts = re.search('"fanart" *: *"(.*?)",', detailInfo) descriptions = re.search('"description" *: *"(.*?)",', detailInfo) try: if filetypes and labels and files: filetype = filetypes.group(1) label = stringUtils.cleanLabels(labels.group(1)) file = files.group(1).replace("\\\\", "\\") if fanarts: fanart = fanarts.group(1) else: fanart = "" if addon.getSetting("Link_Type") == "0": link = ( sys.argv[0] + "?url=" + urllib.quote_plus(file) + "&mode=" + str(10) + "&name=" + urllib.quote_plus(label) + "&fanart=" + urllib.quote_plus(fanart) ) else: link = file if label and strm_name and label: label = str(utils.multiple_reSub(label.rstrip(), dictReplacements)) movieList.append( [ os.path.join(strm_type, strm_name, label), str(utils.multiple_reSub(label.rstrip(), dictReplacements)), link, ] ) except: pass pagesDone += 1 if filetype != "file" and pagesDone < int(PAGINGMovies): contentList = stringUtils.uni(jsonUtils.requestList(file, "video")) else: pagesDone = int(PAGINGMovies) # Write strms for all values in movieList for i in movieList: # path,name,url(+name) fileSys.writeSTRM( stringUtils.cleanStrms((i[0].rstrip("."))), stringUtils.cleanStrms(i[1].rstrip(".")), i[2] + "|" + i[1] ) return movieList