The branch, eden has been updated via 2efad295f63077542f6eccf6b8b7fdb11854f24a (commit) via 65f460e1ee0a9820792fbc71fb2fe2dadadcb4a5 (commit) from f04c6f5f85225f33888268fc9a4b7ddf550f26af (commit)
- Log ----------------------------------------------------------------- http://xbmc.git.sourceforge.net/git/gitweb.cgi?p=xbmc/scripts;a=commit;h=2efad295f63077542f6eccf6b8b7fdb11854f24a commit 2efad295f63077542f6eccf6b8b7fdb11854f24a Author: Martijn Kaijser <mcm.kaij...@gmail.com> Date: Tue Aug 7 22:11:42 2012 +0200 [script.watchlist] -v0.1.15 diff --git a/script.watchlist/addon.xml b/script.watchlist/addon.xml index de5c4c9..670915e 100644 --- a/script.watchlist/addon.xml +++ b/script.watchlist/addon.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<addon id="script.watchlist" name="Watchlist" version="0.1.13" provider-name="ronie, `Black"> +<addon id="script.watchlist" name="Watchlist" version="0.1.15" provider-name="ronie, `Black"> <requires> <import addon="xbmc.python" version="2.0"/> <import addon="script.module.simplejson" version="2.0.10"/> diff --git a/script.watchlist/changelog.txt b/script.watchlist/changelog.txt index 4a60d7e..d118b65 100644 --- a/script.watchlist/changelog.txt +++ b/script.watchlist/changelog.txt @@ -1,3 +1,9 @@ +v0.1.15 +- fixed up the case for TV episodes where you have more than 1 file for a given season/episode of a TV show (thx jparyani) + +v0.1.14 +- fixed script error on empty library + v0.1.13 - fixed use title instead of label diff --git a/script.watchlist/default.py b/script.watchlist/default.py index 944e128..0d3b35d 100644 --- a/script.watchlist/default.py +++ b/script.watchlist/default.py @@ -76,7 +76,7 @@ class Main: json_query = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method": "VideoLibrary.GetMovies", "params": {"properties": ["title", "resume", "genre", "studio", "tagline", "runtime", "fanart", "thumbnail", "file", "plot", "plotoutline", "year", "lastplayed", "rating"]}, "id": 1}') json_query = unicode(json_query, 'utf-8', errors='ignore') json_response = simplejson.loads(json_query) - if json_response['result'].has_key('movies'): + if json_response.has_key('result') and json_response['result'].has_key('movies'): for item in json_response['result']['movies']: self.movieList.append(item) if item['resume']['position'] > 0: @@ -114,29 +114,29 @@ class Main: json_query = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method": "VideoLibrary.GetEpisodes", "params": {"properties": ["title", "playcount", "plot", "season", "episode", "showtitle", "thumbnail", "file", "lastplayed", "rating"], "sort": {"method": "episode"} }, "id": 1}' ) json_query = unicode(json_query, 'utf-8', errors='ignore') json_response = simplejson.loads(json_query) - if json_response['result'].has_key('episodes'): + if json_response.has_key('result') and json_response['result'].has_key('episodes'): json_response = json_response['result']['episodes'] # our list is sorted by episode number, secondary we sort by tvshow title (itertools.groupy needs contiguous items) and split it into seperate lists for each tvshow episodes = [list(group) for key,group in itertools.groupby(sorted(json_response, key=itemgetter('showtitle')), key=itemgetter('showtitle'))] - # fetch all tvshows, sorted by title - json_query = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method": "VideoLibrary.GetTVShows", "params": {"properties": ["title", "studio", "thumbnail", "fanart"], "sort": {"method": "title"}}, "id": 1}') - json_query = unicode(json_query, 'utf-8', errors='ignore') - json_response = simplejson.loads(json_query) - if json_response['result'].has_key('tvshows'): - for count, tvshow in enumerate(json_response['result']['tvshows']): - item = [tvshow['tvshowid'], tvshow['thumbnail'], tvshow['studio'], tvshow['title'], tvshow['fanart'], []] - for episodelist in episodes: - if episodelist[0]['showtitle'] == item[3]: - item[5] = episodelist - break - self.tvshows.append(item) + # fetch all tvshows, sorted by title + json_query = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method": "VideoLibrary.GetTVShows", "params": {"properties": ["title", "studio", "thumbnail", "fanart"], "sort": {"method": "title"}}, "id": 1}') + json_query = unicode(json_query, 'utf-8', errors='ignore') + json_response = simplejson.loads(json_query) + if json_response.has_key('result') and json_response['result'].has_key('tvshows'): + for count, tvshow in enumerate(json_response['result']['tvshows']): + item = [tvshow['tvshowid'], tvshow['thumbnail'], tvshow['studio'], tvshow['title'], tvshow['fanart'], []] + for episodelist in episodes: + if episodelist[0]['showtitle'] == item[3]: + item[5] = episodelist + break + self.tvshows.append(item) log("tv show list: %s items" % len(self.tvshows)) def _fetch_seasonthumb( self, tvshowid, seasonnumber ): json_query = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method": "VideoLibrary.GetSeasons", "params": {"properties": ["season", "thumbnail"], "tvshowid":%s }, "id": 1}' % tvshowid) json_query = unicode(json_query, 'utf-8', errors='ignore') json_response = simplejson.loads(json_query) - if json_response['result'].has_key('seasons'): + if json_response.has_key('result') and json_response['result'].has_key('seasons'): for item in json_response['result']['seasons']: season = "%.2d" % float(item['season']) if season == seasonnumber: @@ -147,8 +147,12 @@ class Main: self.episodes = [] for tvshow in self.tvshows: lastplayed = "" - for item in tvshow[5]: - playcount = item['playcount'] + episode_sorter = lambda item: (int(item['season']), int(item['episode'])) + for key, group in itertools.groupby(sorted(tvshow[5], key=episode_sorter), episode_sorter): + playcount = 0 + for item in sorted(group, key=lambda x: (x['lastplayed'], x['episodeid'])): + # sort first by lastplayed, so we're certain to always get the latest played item upon final iteration of the loop. Then sort by episodeid, mainly for the case where lastplayed is empty for all items, and we want the latest episodeid to be the one chosen (higher episodeid equals being added later to xbmc) + playcount += int(item['playcount']) if playcount != 0: # this episode has been watched, record play date (we need it for sorting the final list) and continue to next episode lastplayed = item['lastplayed'] @@ -209,7 +213,7 @@ class Main: json_query = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method": "AudioLibrary.GetSongs", "params": {"properties": ["playcount", "albumid"], "sort": { "method": "album" } }, "id": 1}') json_query = unicode(json_query, 'utf-8', errors='ignore') json_response = simplejson.loads(json_query) - if (json_response['result'] != None) and (json_response['result'].has_key('songs')): + if json_response.has_key('result') and (json_response['result'] != None) and (json_response['result'].has_key('songs')): for item in json_response['result']['songs']: albumid = item['albumid'] if albumid != '': @@ -238,7 +242,7 @@ class Main: json_query = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method": "AudioLibrary.GetAlbumDetails", "params": {"properties": ["title", "description", "albumlabel", "artist", "genre", "year", "thumbnail", "fanart", "rating"], "albumid":%s }, "id": 1}' % albumid[0]) json_query = unicode(json_query, 'utf-8', errors='ignore') json_response = simplejson.loads(json_query) - if json_response['result'].has_key('albumdetails'): + if json_response.has_key('result') and json_response['result'].has_key('albumdetails'): item = json_response['result']['albumdetails'] description = item['description'] album = item['title'] @@ -265,7 +269,7 @@ class Main: playlist = xbmc.PlayList(0) # clear the playlist playlist.clear() - if json_response['result'].has_key('songs'): + if json_response.has_key('result') and json_response['result'].has_key('songs'): for item in json_response['result']['songs']: song = item['file'] fanart = item['fanart'] http://xbmc.git.sourceforge.net/git/gitweb.cgi?p=xbmc/scripts;a=commit;h=65f460e1ee0a9820792fbc71fb2fe2dadadcb4a5 commit 65f460e1ee0a9820792fbc71fb2fe2dadadcb4a5 Author: Martijn Kaijser <mcm.kaij...@gmail.com> Date: Tue Aug 7 22:09:54 2012 +0200 [script.randomitems] -v3.1.3 diff --git a/script.randomitems/README.txt b/script.randomitems/README.txt index 5e71d5d..5091756 100644 --- a/script.randomitems/README.txt +++ b/script.randomitems/README.txt @@ -88,5 +88,6 @@ Labels: For more inforamtion and help please check: +http://wiki.xbmc.org/index.php?title=Add-on:Random_Items_script -http://forum.xbmc.org/showthread.php?t=55907 +http://forum.xbmc.org/showthread.php?tid=79378 diff --git a/script.randomitems/RandomItems.py b/script.randomitems/RandomItems.py index 4800718..b4d2263 100644 --- a/script.randomitems/RandomItems.py +++ b/script.randomitems/RandomItems.py @@ -88,7 +88,7 @@ class Main: json_query = unicode(json_query, 'utf-8', errors='ignore') # separate the records json_response = simplejson.loads(json_query) - if (json_response['result'] != None) and (json_response['result'].has_key('movies')): + if json_response.has_key('result') and (json_response['result'].has_key('movies')): json_response = json_response['result']['movies'] # get total value total = str( len( json_response ) ) @@ -137,7 +137,7 @@ class Main: json_query = unicode(json_query, 'utf-8', errors='ignore') # separate the records json_response = simplejson.loads(json_query) - if (json_response['result'] != None) and (json_response['result'].has_key('episodes')): + if json_response.has_key('result') and (json_response['result'].has_key('episodes')): json_response = json_response['result']['episodes'] # get total value total = str( len( json_response ) ) @@ -187,7 +187,7 @@ class Main: json_query = unicode(json_query, 'utf-8', errors='ignore') # separate the records json_response = simplejson.loads(json_query) - if (json_response['result'] != None) and (json_response['result'].has_key('musicvideos')): + if json_response.has_key('result') and (json_response['result'].has_key('musicvideos')): json_response = json_response['result']['musicvideos'] # get total value total = str( len( json_response ) ) @@ -233,7 +233,8 @@ class Main: json_query = unicode(json_query, 'utf-8', errors='ignore') # separate the records json_response = simplejson.loads(json_query) - if (json_response['result'] != None) and (json_response['result'].has_key('albums')): + + if json_response.has_key('result') and (json_response['result'].has_key('albums')): json_response = json_response['result']['albums'] # get total value total = str( len( json_response ) ) @@ -274,7 +275,8 @@ class Main: json_query = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method": "AudioLibrary.GetArtists", "params": {"properties": ["genre", "description", "fanart", "thumbnail"], "sort": { "method": "label" } }, "id": 1}') json_query = unicode(json_query, 'utf-8', errors='ignore') json_response = simplejson.loads(json_query) - if (json_response['result'] != None) and (json_response['result'].has_key('artists')): + + if json_response.has_key('result') and (json_response['result'].has_key('artists')): json_response = json_response['result']['artists'] # get total value total = str( len( json_response ) ) @@ -311,7 +313,7 @@ class Main: json_query = unicode(json_query, 'utf-8', errors='ignore') # separate the records json_response = simplejson.loads(json_query) - if (json_response['result'] != None) and (json_response['result'].has_key('songs')): + if json_response.has_key('result') and (json_response['result'].has_key('songs')): json_response = json_response['result']['songs'] # get total value total = str( len( json_response ) ) @@ -364,7 +366,11 @@ class Main: addonfile = os.path.join(addonpath, item, 'addon.xml') if os.path.exists(addonfile): # find addon id - addonfilecontents = xmltree.parse(addonfile).getroot() + try: + addonfilecontents = xmltree.parse(addonfile).getroot() + except: + # don't error on invalid addon.xml files + continue for element in addonfilecontents.getiterator(): if element.tag == "addon": addonid = element.attrib.get('id') @@ -412,7 +418,7 @@ class Main: # separate the records json_response = simplejson.loads(json_query) # enumerate thru our records - if (json_response['result'] != None) and (json_response['result'].has_key('songs')): + if json_response.has_key('result') and (json_response['result'].has_key('songs')): for item in json_response['result']['songs']: song = item['file'] fanart = item['fanart'] diff --git a/script.randomitems/addon.xml b/script.randomitems/addon.xml index 8b28e69..aadf4a2 100644 --- a/script.randomitems/addon.xml +++ b/script.randomitems/addon.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<addon id="script.randomitems" name="Random Items script" version="3.1.1" provider-name="Hitcher, ronie, phil65"> +<addon id="script.randomitems" name="Random Items script" version="3.1.3" provider-name="Hitcher, ronie, phil65"> <requires> <import addon="xbmc.python" version="2.0"/> <import addon="script.module.elementtree" version="1.2.7"/> diff --git a/script.randomitems/changelog.txt b/script.randomitems/changelog.txt index 35b74f8..c336d25 100644 --- a/script.randomitems/changelog.txt +++ b/script.randomitems/changelog.txt @@ -1,3 +1,9 @@ +v3.1.3 +- don't error on invalid addon.xml files + +v3.1.2 +- fixed script error on empty library + v3.1.1 - added "RandomArtist.%d.Genre" ----------------------------------------------------------------------- Summary of changes: script.randomitems/README.txt | 3 +- script.randomitems/RandomItems.py | 22 +++++++++++------ script.randomitems/addon.xml | 2 +- script.randomitems/changelog.txt | 6 +++++ script.watchlist/addon.xml | 2 +- script.watchlist/changelog.txt | 6 +++++ script.watchlist/default.py | 44 ++++++++++++++++++++---------------- 7 files changed, 54 insertions(+), 31 deletions(-) hooks/post-receive -- Scripts ------------------------------------------------------------------------------ Live Security Virtual Conference Exclusive live event will cover all the ways today's security and threat landscape has changed and how IT managers can respond. Discussions will include endpoint security, mobile security and the latest in malware threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ _______________________________________________ Xbmc-addons mailing list Xbmc-addons@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/xbmc-addons