diff --git a/default.py b/default.py index c0be3f6..47e5678 100644 --- a/default.py +++ b/default.py @@ -32,8 +32,14 @@ maxFileAge = maxFileAge * 60 mediatype = addon.getSetting("mediatype") # show only official, fanmade or all videos? videoselection = str(addon.getSetting("videoselection")).lower() -# despite this selection show all in similar playlists and more from? -relatedselection = str(addon.getSetting("relatedselection")).lower() +if videoselection != "2": + # videoselection is set to official or fanmade + # despite this selection show all in similar playlists and more from? + relatedselection = str(addon.getSetting("relatedselection")).lower() +else: + # if videoselection is set to show all videos relatedselection should + # also be true if the setting was set to false beforehand + relatedselection = "true" playLocalFile = str(addon.getSetting("playLocalFile")).lower() filesinlists = int(addon.getSetting("filesinlists")) useYTDL = addon.getSetting("useytdl") @@ -502,12 +508,14 @@ def sortArtists(channel=""): for artist in channels: if artist in [unidecode(name.upper()) for name in entry['artists']]: if entry not in result: - if videoselection == "0": - if "true" in entry['official'].lower(): - result.append(entry) - elif videoselection == "1": - if "false" in entry['official'].lower(): - result.append(entry) + # limit selection based on videoselection setting if show all isn't activated + if relatedselection != "true" and videoselection != "2": + if videoselection == "0": + if "true" in entry['official'].lower(): + result.append(entry) + elif videoselection == "1": + if "false" in entry['official'].lower(): + result.append(entry) else: result.append(entry) # show artist @@ -539,21 +547,17 @@ def sortTitlesBy(limit, sort, start): start = int(start) end = start + filesinlists nextstart = end + 1 - fanart = getFanart(channel) + # limit selection if "all" isn't activated in videoselection + if videoselection != "2" and channel != "related" and channel != "relartists": + data = limitselection(data) + # limit to hits if hit != "" and hit == "true": for entry in data: if entry['hit'] == "true": - if videoselection == "0": - if "true" in entry['official']: - result.append(entry) - elif videoselection == "1": - if "false" in entry['official']: - result.append(entry) - elif videoselection == "2": - result.append(entry) + result.append(entry) data = result result = [] @@ -562,14 +566,7 @@ def sortTitlesBy(limit, sort, start): for entry in data: # played often at provider if int(entry['pcount']) >= pcounthigh: - if videoselection == "0": - if "true" in entry['official']: - result.append(entry) - elif videoselection == "1": - if "false" in entry['official']: - result.append(entry) - elif videoselection == "2": - result.append(entry) + result.append(entry) data = result result = [] @@ -577,14 +574,7 @@ def sortTitlesBy(limit, sort, start): if mycount != "" and mycount == "acount" and sort != "count": for entry in data: if int(entry['acount']) >= acounthigh: - if videoselection == "0": - if "true" in entry['official']: - result.append(entry) - elif videoselection == "1": - if "false" in entry['official']: - result.append(entry) - elif videoselection == "2": - result.append(entry) + result.append(entry) data = result result = [] @@ -592,14 +582,7 @@ def sortTitlesBy(limit, sort, start): if mycount != "" and mycount == "comments" and sort != "count": for entry in data: if int(entry['comments']) >= ccounthigh: - if videoselection == "0": - if "true" in entry['official']: - result.append(entry) - elif videoselection == "1": - if "false" in entry['official']: - result.append(entry) - elif videoselection == "2": - result.append(entry) + result.append(entry) data = result result = [] @@ -607,15 +590,7 @@ def sortTitlesBy(limit, sort, start): if mycount != "" and mycount == "likes" and sort != "count": for entry in data: if int(entry['likes']) >= likecounthigh: - if videoselection == "0": - if "true" in entry['official']: - result.append(entry) - elif videoselection == "1": - if "false" in entry['official']: - result.append(entry) - elif videoselection == "2": - result.append(entry) -# xbmc.log(msg=str(entry['pcount']), level=xbmc.LOGNOTICE) + result.append(entry) data = result result = [] @@ -623,14 +598,7 @@ def sortTitlesBy(limit, sort, start): if mycount != "" and mycount == "dislikes" and sort != "count": for entry in data: if int(entry['dislikes']) >= dislikecounthigh: - if videoselection == "0": - if "true" in entry['official']: - result.append(entry) - elif videoselection == "1": - if "false" in entry['official']: - result.append(entry) - elif videoselection == "2": - result.append(entry) + result.append(entry) data = result result = [] @@ -638,14 +606,7 @@ def sortTitlesBy(limit, sort, start): if mycount != "" and mycount == "controversial": for entry in data: if int(entry['controversial']) == int(1): - if videoselection == "0": - if "true" in entry['official']: - result.append(entry) - elif videoselection == "1": - if "false" in entry['official']: - result.append(entry) - elif videoselection == "2": - result.append(entry) + result.append(entry) data = result result = [] @@ -653,14 +614,7 @@ def sortTitlesBy(limit, sort, start): if channel != "" and channel != "all" and channel != "year" and channel != "related": for entry in data: if entry['style'] == channel: - if videoselection == "0": - if "true" in entry['official']: - result.append(entry) - elif videoselection == "1": - if "false" in entry['official']: - result.append(entry) - elif videoselection == "2": - result.append(entry) + result.append(entry) # or limit to last year # hm, either style or year, not both? elif channel != "" and channel == "year": @@ -674,14 +628,7 @@ def sortTitlesBy(limit, sort, start): import time dateadded = datetime.fromtimestamp(time.mktime(time.strptime(entry['dateadded'], '%Y-%m-%d %H:%M:%S'))) if dateadded >= lastyear: - if videoselection == "0": - if "true" in entry['official']: - result.append(entry) - elif videoselection == "1": - if "false" in entry['official']: - result.append(entry) - elif videoselection == "2": - result.append(entry) + result.append(entry) # related tracks (generated with musly) elif channel != "" and channel == "related": start = str(start) @@ -692,7 +639,6 @@ def sortTitlesBy(limit, sort, start): slugs.extend(entry['slug'].split(", ")) # and add all related slugs slugs.extend(entry['related'].split(", ")) - #xbmc.log(msg=str(slugs), level=xbmc.LOGNOTICE) for entry in data: # add all related slugs if entry['slug'] in slugs: @@ -701,15 +647,7 @@ def sortTitlesBy(limit, sort, start): # main slug will be filtered out. # In this case we add it again later, after sorting the result if not filter(lambda result: result['title'] == entry['title'], result): - if videoselection != "2" and relatedselection != "true": - if videoselection == "0": - if "true" in entry['official']: - result.append(entry) - elif videoselection == "1": - if "false" in entry['official']: - result.append(entry) - else: - result.append(entry) + result.append(entry) # slugs are sorted newest first because that's how they occur in the json # so we have to sort the result to the order in related aka the musly order (with prepended main slug) order_dict = {slug: index for index, slug in enumerate(slugs)} @@ -722,6 +660,9 @@ def sortTitlesBy(limit, sort, start): for entry in data: if entry['slug'] == start: result.insert(0, entry) + if relatedselection != "true": + result = limitselection(result) + maximum = len(result) # related is a list with max 21 entries, so we have to set start always to 0 start = 0 @@ -738,29 +679,17 @@ def sortTitlesBy(limit, sort, start): xbmc.log(msg=str(artists), level=xbmc.LOGNOTICE) # add all entries with artist in artists if entry['artists'] in artists: - if videoselection != "2" and relatedselection != "true": - if videoselection == "0": - if "true" in entry['official']: - result.append(entry) - elif videoselection == "1": - if "false" in entry['official']: - result.append(entry) - else: - result.append(entry) + result.append(entry) + xbmc.log(msg=str(results), level=xbmc.LOGNOTICE) + if relatedselection != "true": + result = limitselection(result) start = 0 - # unfiltered sorted lists (by date and by numbers. But NOT controversial, which is a fixed list) + # sorted lists (by date and by numbers. But NOT controversial, which is a fixed list) else: for entry in data: - if videoselection == "0": - if "true" in entry['official']: - result.append(entry) - elif videoselection == "1": - if "false" in entry['official']: - result.append(entry) - elif videoselection == "2": - result.append(entry) - + result.append(entry) + if sort != "" and sort == "random": random.shuffle(result) result = result[:filesinlists] @@ -930,6 +859,19 @@ def getFanart(channel): fanart = icon return fanart +def limitselection(data): + xbmc.log(msg="limit by videoselection", level=xbmc.DEBUG) + result = [] + for entry in data: + if videoselection == "0": + if "true" in entry['official']: + result.append(entry) + elif videoselection == "1": + if "false" in entry['official']: + result.append(entry) + elif videoselection == "2": + result.append(entry) + return result def addDir(name, url, mode, iconimage, total=0): u = sys.argv[0] + "?url=" + urllib.quote_plus(url.encode('utf-8')) + "&mode=" + str(mode)