def fillPlugins(cType="video"): utils.addon_log("fillPlugins, type = " + cType) json_query = ( '{"jsonrpc":"2.0","method":"Addons.GetAddons","params":{"type":"xbmc.addon.%s","properties":["name","path","thumbnail","description","fanart","summary"]}, "id": 1 }' % cType ) json_detail = jsonUtils.sendJSON(json_query) detail = re.compile("{(.*?)}", re.DOTALL).findall(json_detail) for f in detail: names = re.search('"name" *: *"(.*?)",', f) paths = re.search('"addonid" *: *"(.*?)",', f) thumbnails = re.search('"thumbnail" *: *"(.*?)",', f) fanarts = re.search('"fanart" *: *"(.*?)",', f) descriptions = re.search('"description" *: *"(.*?)",', f) if not descriptions: descriptions = re.search('"summary" *: *"(.*?)",', f) if descriptions: description = stringUtils.cleanLabels(descriptions.group(1)) else: description = "" if names and paths: name = stringUtils.cleanLabels(names.group(1)) path = paths.group(1) if cType == "video" and path.startswith("plugin.video") and not path.startswith("plugin.video.osmosis"): thumbnail = thumbnails.group(1) # stringUtils.removeNonAscii(thumbnails.group(1)) fanart = fanarts.group(1) # stringUtils.removeNonAscii(fanarts.group(1)) guiTools.addDir(name, "plugin://" + path, 101, thumbnail, fanart, description, cType, "date", "credits") elif cType == "audio" and path.startswith("plugin.audio") and not path.startswith("plugin.video.osmosis"): thumbnail = thumbnails.group(1) # stringUtils.removeNonAscii(thumbnails.group(1)) fanart = fanarts.group(1) # stringUtils.removeNonAscii(fanarts.group(1)) guiTools.addDir(name, "plugin://" + path, 101, thumbnail, fanart, description, cType, "date", "credits")
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 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 addMovies(contentList, strm_name='', strm_type='Other'): movieList = [] pagesDone = 0 file = '' j = 100 / (len(contentList) * int(PAGINGMovies)) while pagesDone < int(PAGINGMovies): if not contentList[0] == "palyableSingleMedia": for detailInfo in contentList: 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) 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: label = str( utils.multiple_reSub(label.strip(), dictReplacements)) thisDialog.dialogeBG.update( j, ADDON_NAME + ": Writing File: ", " Video: " + label) movieList.append([ os.path.join(strm_type), str( utils.multiple_reSub( label.strip(), dictReplacements)), link ]) j = j + 100 / (len(contentList) * int(PAGINGMovies)) except IOError as (errno, strerror): print("I/O error({0}): {1}").format(errno, strerror) except ValueError: print("No valid integer in line.") except:
def addMovies(contentList, strm_name='', strm_type='Other', provider="n.a"): movieList = [] pagesDone = 0 file = '' filetype = '' j = len(contentList) * int(PAGINGMovies) / 100 if len(contentList) == 0: return while pagesDone < int(PAGINGMovies): if not contentList[0] == "palyableSingleMedia": for detailInfo in contentList: file = detailInfo.get('file').replace( "\\\\", "\\") if detailInfo.get('file', None) is not None else None filetype = detailInfo.get('filetype', None) label = detailInfo.get('label').strip() if detailInfo.get( 'label', None) is not None else None imdbnumber = detailInfo.get('imdbnumber').strip( ) if detailInfo.get('imdbnumber', None) is not None else None try: if label and strm_name: label = stringUtils.cleanLabels(label) if HIDE_tile_in_OV == "true" and label.find( "[OV]") > -1: get_title_with_OV = False else: get_title_with_OV = True provider = getProvider(file) thisDialog.dialogeBG.update( j, ADDON_NAME + ": Getting Movies: ", " Video: " + label) if filetype is not None and filetype == 'file' and get_title_with_OV == True: m_path = stringUtils.getMovieStrmPath( strm_type, strm_name, label) m_title = stringUtils.getStrmname(label) movieList.append({ 'path': m_path, 'title': m_title, 'url': file, 'provider': provider, 'imdbnumber': imdbnumber }) 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:
def fillPlugins(cType='video'): utils.addon_log('fillPlugins, type = ' + cType) json_query = ( '{"jsonrpc":"2.0","method":"Addons.GetAddons","params":{"type":"xbmc.addon.%s","properties":["name","path","thumbnail","description","fanart","summary"]}, "id": 1 }' % cType) json_detail = jsonUtils.sendJSON(json_query) detail = re.compile("{(.*?)}", re.DOTALL).findall(json_detail) for f in detail: names = re.search('"name" *: *"(.*?)",', f) paths = re.search('"addonid" *: *"(.*?)",', f) thumbnails = re.search('"thumbnail" *: *"(.*?)",', f) fanarts = re.search('"fanart" *: *"(.*?)",', f) descriptions = re.search('"description" *: *"(.*?)",', f) if not descriptions: descriptions = re.search('"summary" *: *"(.*?)",', f) if descriptions: description = stringUtils.cleanLabels(descriptions.group(1)) else: description = '' if names and paths: name = stringUtils.cleanLabels(names.group(1)) path = paths.group(1) if cType == 'video' and path.startswith( 'plugin.video' ) and not path.startswith('plugin.video.osmosis'): thumbnail = thumbnails.group( 1) #stringUtils.removeNonAscii(thumbnails.group(1)) fanart = fanarts.group( 1) #stringUtils.removeNonAscii(fanarts.group(1)) guiTools.addDir(name, 'plugin://' + path, 101, thumbnail, fanart, description, cType, 'date', 'credits') elif cType == 'audio' and path.startswith( 'plugin.audio' ) and not path.startswith('plugin.video.osmosis'): thumbnail = thumbnails.group( 1) #stringUtils.removeNonAscii(thumbnails.group(1)) fanart = fanarts.group( 1) #stringUtils.removeNonAscii(fanarts.group(1)) guiTools.addDir(name, 'plugin://' + path, 101, thumbnail, fanart, description, cType, 'date', 'credits')
def addDir(name, url, mode, art, plot, genre, date, credits, showcontext=False): utils.addon_log('addDir') u = "%s?url=%s&name=%s&fanart=%s" % (sys.argv[0], urllib.quote_plus(stringUtils.uni(url)), urllib.quote_plus(stringUtils.cleanLabels(stringUtils.uni(name))), urllib.quote_plus(art.get('fanart', ''))) contextMenu = [] thumbArt = art.get('thumb', None) if thumbArt == None: thumbArt = art.get('fanart', None) liz = xbmcgui.ListItem(name, iconImage=thumbArt, thumbnailImage=thumbArt) liz.setInfo(type="Video", infoLabels={ "Title": name, "Plot": plot, "Genre": genre, "dateadded": date, "credits": credits }) liz.setArt(art) contextMenu.append(('Create Strms', 'XBMC.RunPlugin(%s&mode=%d)' % (u, 200))) liz.addContextMenuItems(contextMenu) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url='%s&mode=%d' % (u, mode), listitem=liz, isFolder=True)
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 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:
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 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 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, '', '', '')
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 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
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 addLink(name, url, mode, art, plot, genre, date, showcontext, playlist, regexs, total, setCookie=""): utils.addon_log('addLink') u = "%s?url=%s&name=%s&fanart=%s" % (sys.argv[0], urllib.quote_plus(stringUtils.uni(url)), urllib.quote_plus(stringUtils.cleanLabels(stringUtils.uni(name))), urllib.quote_plus(art.get('fanart', ''))) contextMenu = [] thumbArt = art.get('thumb', None) if thumbArt == None: thumbArt = art.get('fanart', None) liz = xbmcgui.ListItem(name, iconImage=thumbArt, thumbnailImage=thumbArt) liz.setInfo(type="Video", infoLabels={ "Title": name, "Plot": plot, "Genre": genre, "dateadded": date }) liz.setArt(art) liz.setProperty('IsPlayable', 'true') contextMenu.append(('Create Strm', 'XBMC.RunPlugin(%s&mode=%d&filetype=file)' % (u, 200))) liz.addContextMenuItems(contextMenu) xbmcplugin.setContent(int(sys.argv[1]), 'movies') xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url='%s&mode=%d' % (u, mode), listitem=liz, totalItems=total)
def addAlbum(contentList, strm_name='', strm_type='Other', PAGINGalbums="1"): albumList = [] pagesDone = 0 file = '' j = 100 / (len(contentList) * int(PAGINGalbums)) while pagesDone < int(PAGINGalbums): if not contentList[0] == "palyableSingleMedia": albumThumbnails = re.search('"thumbnail" *: *"(.*?)",', str(contentList)) if albumThumbnails: aThumb = urlUtils.stripUnquoteURL(albumThumbnails.group(1)) for detailInfo in contentList: 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) tracks = re.search('"track" *: *(.*?),', detailInfo) durations = re.search('"duration" *: *"(.*?)",', 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 thumbnails: thumb = urlUtils.stripUnquoteURL( thumbnails.group(1)) else: thumb = "" if label and strm_name: label = str( utils.multiple_reSub(label.strip(), dictReplacements)) if tracks: track = tracks.group(1) try: album = re.search('"album" *: *"(.*?)",', detailInfo).group(1).strip() try: artist = utils.multiple_reSub( re.search('"artist" *: *"(.*?)",', detailInfo).group(1).strip(), dictReplacements) except: artist = utils.multiple_reSub( re.search('"artist"*:*."(.*?)".,', detailInfo).group(1).strip(), dictReplacements) pass titl = utils.multiple_reSub( re.search('"title" *: *(.*?),', detailInfo).group(1).strip(), dictReplacements) types = utils.multiple_reSub( re.search('"type" *: *(.*?),', detailInfo).group(1).strip(), dictReplacements) filename = utils.multiple_reSub( str(label).strip(), dictReplacements) except: filename = utils.multiple_reSub( str(label).strip(), dictReplacements) pass thisDialog.dialogeBG.update( j, ADDON_NAME + ": Writing File: ", " Title: " + label) path = os.path.join(strm_type, artist.strip(), album.strip()) if album and artist and label and path and link and track: albumList.append([ path, label.strip(), link, album, artist, track, 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:
def addMovies(contentList, strm_name='', strm_type='Other', provider="n.a"): movieList = [] listName = strm_name pagesDone = 0 file = '' filetype = '' j = len(contentList) * int(PAGINGMovies) / 100 while pagesDone < int(PAGINGMovies): if not contentList[0] == "palyableSingleMedia": for detailInfo in contentList: 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) provGeneral = re.search( '%s(.*)' "\\/\\?" '' % (r"plugin://plugin.video."), detailInfo) provXST = re.search('%s(.*)' "\&function" '' % (r"site="), detailInfo) try: if filetypes and labels and files: filetype = filetypes.group(1) label = (stringUtils.cleanLabels(labels.group(1))) file = (files.group(1).replace("\\\\", "\\")) if provGeneral: listName = provGeneral.group(1) if provXST: listName = listName + ": " + provXST.group(1) if fanarts: fanart = fanarts.group(1) else: fanart = '' link = file if label and strm_name: label = str( stringUtils.cleanByDictReplacements( label.strip())) thisDialog.dialogeBG.update( j, ADDON_NAME + ": Gettin Movies: ", " Video: " + label) if filetype == 'file': movieList.append([ os.path.join( strm_type, strm_name.strip().replace( '++RenamedTitle++', '')), str( stringUtils.cleanByDictReplacements( label.strip())), link, listName ]) 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: