The branch, eden-pre has been updated
via fb6bf5f40a4cc7cd8a4ed6f3577d73ebc2598a7d (commit)
from 5b01bd31b55f30e1f628ad2ba0782711e7348303 (commit)
- Log -----------------------------------------------------------------
http://xbmc.git.sourceforge.net/git/gitweb.cgi?p=xbmc/scripts;a=commit;h=fb6bf5f40a4cc7cd8a4ed6f3577d73ebc2598a7d
commit fb6bf5f40a4cc7cd8a4ed6f3577d73ebc2598a7d
Author: ronie <[email protected]>
Date: Sun Dec 4 01:29:26 2011 +0100
[script.randomitems] -v3.0.6
use simplejson instead of regex
diff --git a/script.randomitems/RandomItems.py
b/script.randomitems/RandomItems.py
index 77d407a..a00b1ed 100644
--- a/script.randomitems/RandomItems.py
+++ b/script.randomitems/RandomItems.py
@@ -5,15 +5,15 @@
# * ppic, Hitcher & ronie for the updates
import xbmc, xbmcgui, xbmcaddon
-import re, sys, os, random
+import re, sys, os, random, simplejson
from elementtree import ElementTree as xmltree
-__addon__ = xbmcaddon.Addon()
-__addonid__ = __addon__.getAddonInfo('id')
+__addon__ = xbmcaddon.Addon()
+__addonid__ = __addon__.getAddonInfo('id')
__addonversion__ = __addon__.getAddonInfo('version')
def log(txt):
- message = 'script.randomitems: %s' % txt
+ message = '%s: %s' % (__addonid__,txt)
xbmc.log(msg=message, level=xbmc.LOGDEBUG)
class Main:
@@ -30,12 +30,12 @@ class Main:
self.WINDOW.clearProperty( "RandomAddon.Count" )
# we clear title for visible condition
for count in range( self.LIMIT ):
- self.WINDOW.clearProperty( "RandomMovie.%d.Title" % ( count + 1 ) )
- self.WINDOW.clearProperty( "RandomEpisode.%d.Title" % ( count + 1
) )
+ self.WINDOW.clearProperty( "RandomMovie.%d.Title" % ( count +
1 ) )
+ self.WINDOW.clearProperty( "RandomEpisode.%d.Title" % ( count +
1 ) )
self.WINDOW.clearProperty( "RandomMusicVideo.%d.Title" % ( count +
1 ) )
- self.WINDOW.clearProperty( "RandomSong.%d.Title" % ( count + 1 ) )
- self.WINDOW.clearProperty( "RandomAlbum.%d.Title" % ( count + 1 ) )
- self.WINDOW.clearProperty( "RandomAddon.%d.Name" % ( count + 1 ) )
+ self.WINDOW.clearProperty( "RandomSong.%d.Title" % ( count +
1 ) )
+ self.WINDOW.clearProperty( "RandomAlbum.%d.Title" % ( count +
1 ) )
+ self.WINDOW.clearProperty( "RandomAddon.%d.Name" % ( count +
1 ) )
def _parse_argv( self ):
try:
@@ -81,404 +81,228 @@ class Main:
# query the database
json_query = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method":
"VideoLibrary.GetMovies", "params": {"properties": ["playcount", "year",
"plot", "runtime", "fanart", "thumbnail", "file", "trailer", "rating"] }, "id":
1}')
# separate the records
- json_response = re.compile( "{(.*?)}", re.DOTALL ).findall(json_query)
- json_response.pop(0)
- # get total value
- total = str( len( json_response ) )
- # enumerate thru our records
- count = 0
- while count < self.LIMIT:
- count += 1
- # check if we don't run out of items before LIMIT is reached
- if len( json_response ) == 0:
- return
- # select a random item
- item = random.choice( json_response )
- # remove the item from our list
- json_response.remove( item )
- # find values
- if self.UNPLAYED == "True":
- findplaycount = re.search( '"playcount": ?(.*?),"', item )
- if findplaycount:
- playcount = findplaycount.group(1)
- if int( playcount ) > 0:
+ json_response = simplejson.loads(json_query)
+ if (json_response['result'] != None) and
(json_response['result'].has_key('movies')):
+ json_response = json_response['result']['movies']
+ # get total value
+ total = str( len( json_response ) )
+ # enumerate thru our records
+ count = 0
+ while count < self.LIMIT:
+ count += 1
+ # check if we don't run out of items before LIMIT is reached
+ if len( json_response ) == 0:
+ return
+ # select a random item
+ item = random.choice( json_response )
+ # remove the item from our list
+ json_response.remove( item )
+ # find values
+ if self.UNPLAYED == "True":
+ playcount = item['playcount']
+ if playcount > 0:
count = count - 1
continue
- findtitle = re.search( '"label": ?"(.*?)",["\n]', item )
- if findtitle:
- title = findtitle.group(1)
- else:
- title = ''
- findrating = re.search( '"rating": ?(.*?),"', item )
- if findrating:
- rating = '%.1f' % float( findrating.group(1) )
- else:
- rating = ''
- findyear = re.search( '"year": ?(.*)', item )
- if findyear:
- year = findyear.group(1)
- else:
- year = ''
- findplot = re.search( '"plot": ?"(.*?)",["\n]', item )
- if findplot:
- plot = findplot.group(1)
- else:
- plot = ''
- findrunningtime = re.search( '"runtime": ?"(.*?)",["\n]', item )
- if findrunningtime:
- runningtime = findrunningtime.group(1)
- else:
- runningtime = ''
- findpath = re.search( '"file": ?"(.*?)",["\n]', item )
- if findpath:
- path = findpath.group(1)
- else:
- path = ''
- findtrailer = re.search( '"trailer": ?"(.*?)",["\n]', item )
- if findtrailer:
- trailer = findtrailer.group(1)
- if self.PLAY_TRAILER == "True":
- path = trailer
- else:
- trailer = ''
- findfanart = re.search( '"fanart": ?"(.*?)",["\n]', item )
- if findfanart:
- fanart = findfanart.group(1)
- else:
- fanart = ''
- findthumb = re.search( '"thumbnail": ?"(.*?)",["\n]', item )
- if findthumb:
- thumb = findthumb.group(1)
- else:
- thumb = ''
- # set our properties
- self.WINDOW.setProperty( "RandomMovie.%d.Title" % ( count ), title
)
- self.WINDOW.setProperty( "RandomMovie.%d.Rating" % ( count ),
rating )
- self.WINDOW.setProperty( "RandomMovie.%d.Year" % ( count ), year)
- self.WINDOW.setProperty( "RandomMovie.%d.Plot" % ( count ), plot )
- self.WINDOW.setProperty( "RandomMovie.%d.RunningTime" % ( count ),
runningtime )
- self.WINDOW.setProperty( "RandomMovie.%d.Path" % ( count ), path )
- self.WINDOW.setProperty( "RandomMovie.%d.Trailer" % ( count ),
trailer )
- self.WINDOW.setProperty( "RandomMovie.%d.Fanart" % ( count ),
fanart )
- self.WINDOW.setProperty( "RandomMovie.%d.Thumb" % ( count ), thumb
)
- self.WINDOW.setProperty( "RandomMovie.Count", total )
+ title = item['label']
+ rating = str(round(float(item['rating']),1))
+ year = str(item['year'])
+ plot = item['plot']
+ runtime = item['runtime']
+ path = item['file']
+ thumb = item['thumbnail']
+ trailer = item['trailer']
+ fanart = item['fanart']
+ # set our properties
+ self.WINDOW.setProperty( "RandomMovie.%d.Title" % (
count ), title )
+ self.WINDOW.setProperty( "RandomMovie.%d.Rating" % (
count ), rating )
+ self.WINDOW.setProperty( "RandomMovie.%d.Year" % (
count ), year)
+ self.WINDOW.setProperty( "RandomMovie.%d.Plot" % (
count ), plot )
+ self.WINDOW.setProperty( "RandomMovie.%d.RunningTime" % (
count ), runtime )
+ self.WINDOW.setProperty( "RandomMovie.%d.Path" % (
count ), path )
+ self.WINDOW.setProperty( "RandomMovie.%d.Trailer" % (
count ), trailer )
+ self.WINDOW.setProperty( "RandomMovie.%d.Fanart" % (
count ), fanart )
+ self.WINDOW.setProperty( "RandomMovie.%d.Thumb" % (
count ), thumb )
+ self.WINDOW.setProperty( "RandomMovie.Count" , total )
def _fetch_episode_info( self ):
# query the database
tvshowid = 2
json_query = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method":
"VideoLibrary.GetEpisodes", "params": { "properties": ["playcount", "season",
"episode", "showtitle", "plot", "fanart", "thumbnail", "file", "rating"] },
"id": 1}')
# separate the records
- json_response = re.compile( "{(.*?)}", re.DOTALL ).findall(json_query)
- json_response.pop(0)
- # get total value
- total = str( len( json_response ) )
- # enumerate thru our records
- count = 0
- while count < self.LIMIT:
- count += 1
- # check if we don't run out of items before LIMIT is reached
- if len( json_response ) == 0:
- return
- # select a random item
- item = random.choice( json_response )
- # remove the item from our list
- json_response.remove( item )
- # find values
- if self.UNPLAYED == "True":
- findplaycount = re.search( '"playcount": ?(.*?),"', item )
- if findplaycount:
- playcount = findplaycount.group(1)
- if int( playcount ) > 0:
+ json_response = simplejson.loads(json_query)
+ if (json_response['result'] != None) and
(json_response['result'].has_key('episodes')):
+ json_response = json_response['result']['episodes']
+ # get total value
+ total = str( len( json_response ) )
+ # enumerate thru our records
+ count = 0
+ while count < self.LIMIT:
+ count += 1
+ # check if we don't run out of items before LIMIT is reached
+ if len( json_response ) == 0:
+ return
+ # select a random item
+ item = random.choice( json_response )
+ # remove the item from our list
+ json_response.remove( item )
+ # find values
+ if self.UNPLAYED == "True":
+ playcount = item['playcount']
+ if playcount > 0:
count = count - 1
- continue
- findtitle = re.search( '"label": ?"(.*?)",["\n]', item )
- if findtitle:
- title = findtitle.group(1)
- else:
- title = ''
- findshowtitle = re.search( '"showtitle": ?"(.*?)",["\n]', item )
- if findshowtitle:
- showtitle = findshowtitle.group(1)
- else:
- showtitle = ''
- findseason = re.search( '"season": ?(.*?),"', item )
- if findseason:
- season = "%.2d" % float( findseason.group(1) )
- else:
- season = ''
- findepisode = re.search( '"episode": ?(.*?),"', item )
- if findepisode:
- episode = "%.2d" % float( findepisode.group(1) )
- else:
- episode = ''
- findrating = re.search( '"rating": ?(.*?),"', item )
- if findrating:
- rating = "%.1f" % float( findrating.group(1) )
- else:
- rating = ''
- findplot = re.search( '"plot": ?"(.*?)",["\n]', item )
- if findplot:
- plot = findplot.group(1)
- else:
- plot = ''
- findpath = re.search( '"file": ?"(.*?)",["\n]', item )
- if findpath:
- path = findpath.group(1)
- else:
- path = ''
- findfanart = re.search( '"fanart": ?"(.*?)",["\n]', item )
- if findfanart:
- fanart = findfanart.group(1)
- else:
- fanart = ''
- findthumb = re.search( '"thumbnail": ?"(.*?)"', item )
- if findthumb:
- thumb = findthumb.group(1)
- else:
- thumb = ''
- episodeno = "s%se%s" % ( season, episode, )
- # set our properties
- self.WINDOW.setProperty( "RandomEpisode.%d.ShowTitle" % ( count ),
showtitle )
- self.WINDOW.setProperty( "RandomEpisode.%d.EpisodeTitle" % ( count
), title )
- self.WINDOW.setProperty( "RandomEpisode.%d.EpisodeNo" % ( count ),
episodeno )
- self.WINDOW.setProperty( "RandomEpisode.%d.EpisodeSeason" % (
count ), season )
- self.WINDOW.setProperty( "RandomEpisode.%d.EpisodeNumber" % (
count ), episode )
- self.WINDOW.setProperty( "RandomEpisode.%d.Rating" % ( count ),
rating )
- self.WINDOW.setProperty( "RandomEpisode.%d.Plot" % ( count ), plot
)
- self.WINDOW.setProperty( "RandomEpisode.%d.Path" % ( count ), path
)
- self.WINDOW.setProperty( "RandomEpisode.%d.Fanart" % ( count ),
fanart )
- self.WINDOW.setProperty( "RandomEpisode.%d.Thumb" % ( count ),
thumb )
- self.WINDOW.setProperty( "RandomEpisode.Count", total )
+ continue
+ title = item['label']
+ showtitle = item['showtitle']
+ season = "%.2d" % float(item['season'])
+ episode = "%.2d" % float(item['episode'])
+ rating = str(round(float(item['rating']),1))
+ plot = item['plot']
+ path = item['file']
+ thumb = item['thumbnail']
+ fanart = item['fanart']
+ episodeno = "s%se%s" % ( season, episode, )
+ # set our properties
+ self.WINDOW.setProperty( "RandomEpisode.%d.ShowTitle" % (
count ), showtitle )
+ self.WINDOW.setProperty( "RandomEpisode.%d.EpisodeTitle" % (
count ), title )
+ self.WINDOW.setProperty( "RandomEpisode.%d.EpisodeNo" % (
count ), episodeno )
+ self.WINDOW.setProperty( "RandomEpisode.%d.EpisodeSeason" % (
count ), season )
+ self.WINDOW.setProperty( "RandomEpisode.%d.EpisodeNumber" % (
count ), episode )
+ self.WINDOW.setProperty( "RandomEpisode.%d.Rating" % (
count ), rating )
+ self.WINDOW.setProperty( "RandomEpisode.%d.Plot" % (
count ), plot )
+ self.WINDOW.setProperty( "RandomEpisode.%d.Path" % (
count ), path )
+ self.WINDOW.setProperty( "RandomEpisode.%d.Fanart" % (
count ), fanart )
+ self.WINDOW.setProperty( "RandomEpisode.%d.Thumb" % (
count ), thumb )
+ self.WINDOW.setProperty( "RandomEpisode.Count" ,
total )
def _fetch_musicvideo_info( self ):
# query the database
json_query = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method":
"VideoLibrary.GetMusicVideos", "params": {"properties": ["artist", "playcount",
"year", "plot", "runtime", "fanart", "thumbnail", "file"] }, "id": 1}')
# separate the records
- json_response = re.compile( "{(.*?)}", re.DOTALL ).findall(json_query)
- json_response.pop(0)
- # get total value
- total = str( len( json_response ) )
- # enumerate thru our records
- count = 0
- while count < self.LIMIT:
- count += 1
- # check if we don't run out of items before LIMIT is reached
- if len( json_response ) == 0:
- return
- # select a random item
- item = random.choice( json_response )
- # remove the item from our list
- json_response.remove( item )
- # find values
- if self.UNPLAYED == "True":
- findplaycount = re.search( '"playcount": ?(.*?),"', item )
- if findplaycount:
- playcount = findplaycount.group(1)
- if int( playcount ) > 0:
+ json_response = simplejson.loads(json_query)
+ if (json_response['result'] != None) and
(json_response['result'].has_key('musicvideos')):
+ json_response = json_response['result']['musicvideos']
+ # get total value
+ total = str( len( json_response ) )
+ # enumerate thru our records
+ count = 0
+ while count < self.LIMIT:
+ count += 1
+ # check if we don't run out of items before LIMIT is reached
+ if len( json_response ) == 0:
+ return
+ # select a random item
+ item = random.choice( json_response )
+ # remove the item from our list
+ json_response.remove( item )
+ # find values
+ if self.UNPLAYED == "True":
+ playcount = item['playcount']
+ if playcount > 0:
count = count - 1
- continue
- findtitle = re.search( '"label": ?"(.*?)",["\n]', item )
- if findtitle:
- title = findtitle.group(1)
- else:
- title = ''
- findyear = re.search( '"year": ?(.*)', item )
- if findyear:
- year = findyear.group(1)
- else:
- year = ''
- findplot = re.search( '"plot": ?"(.*?)",["\n]', item )
- if findplot:
- plot = findplot.group(1)
- else:
- plot = ''
- findrunningtime = re.search( '"runtime": ?"(.*?)",["\n]', item )
- if findrunningtime:
- runningtime = findrunningtime.group(1)
- else:
- runningtime = ''
- findpath = re.search( '"file": ?"(.*?)",["\n]', item )
- if findpath:
- path = findpath.group(1)
- else:
- path = ''
- findartist = re.search( '"artist": ?"(.*?)",["\n]', item )
- if findartist:
- artist = findartist.group(1)
- else:
- artist = ''
- findfanart = re.search( '"fanart": ?"(.*?)",["\n]', item )
- if findfanart:
- fanart = findfanart.group(1)
- else:
- fanart = ''
- findthumb = re.search( '"thumbnail": ?"(.*?)",["\n]', item )
- if findthumb:
- thumb = findthumb.group(1)
- else:
- thumb = ''
- # set our properties
- self.WINDOW.setProperty( "RandomMusicVideo.%d.Title" % ( count ),
title )
- self.WINDOW.setProperty( "RandomMusicVideo.%d.Year" % ( count ),
year)
- self.WINDOW.setProperty( "RandomMusicVideo.%d.Plot" % ( count ),
plot )
- self.WINDOW.setProperty( "RandomMusicVideo.%d.RunningTime" % (
count ), runningtime )
- self.WINDOW.setProperty( "RandomMusicVideo.%d.Path" % ( count ),
path )
- self.WINDOW.setProperty( "RandomMusicVideo.%d.Fanart" % ( count ),
fanart )
- self.WINDOW.setProperty( "RandomMusicVideo.%d.Artist" % ( count ),
artist )
- self.WINDOW.setProperty( "RandomMusicVideo.%d.Thumb" % ( count ),
thumb )
- self.WINDOW.setProperty( "RandomMusicVideo.Count", total )
+ continue
+ title = item['label']
+ year = str(item['year'])
+ plot = item['plot']
+ runtime = item['runtime']
+ path = item['file']
+ artist = item['artist']
+ thumb = item['thumbnail']
+ fanart = item['fanart']
+ # set our properties
+ self.WINDOW.setProperty( "RandomMusicVideo.%d.Title" % (
count ), title )
+ self.WINDOW.setProperty( "RandomMusicVideo.%d.Year" % (
count ), year)
+ self.WINDOW.setProperty( "RandomMusicVideo.%d.Plot" % (
count ), plot )
+ self.WINDOW.setProperty( "RandomMusicVideo.%d.RunningTime" % (
count ), runtime )
+ self.WINDOW.setProperty( "RandomMusicVideo.%d.Path" % (
count ), path )
+ self.WINDOW.setProperty( "RandomMusicVideo.%d.Fanart" % (
count ), fanart )
+ self.WINDOW.setProperty( "RandomMusicVideo.%d.Artist" % (
count ), artist )
+ self.WINDOW.setProperty( "RandomMusicVideo.%d.Thumb" % (
count ), thumb )
+ self.WINDOW.setProperty( "RandomMusicVideo.Count" ,
total )
def _fetch_album_info( self ):
# query the database
json_query = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method":
"AudioLibrary.GetAlbums", "params": {"properties": ["artist", "year",
"thumbnail", "fanart", "rating"] }, "id": 1}')
# separate the records
- json_response = re.compile( "{(.*?)}", re.DOTALL ).findall(json_query)
- json_response.pop(0)
- # get total value
- total = str( len( json_response ) )
- # enumerate thru our records
- count = 0
- while count < self.LIMIT:
- count += 1
- # check if we don't run out of items before LIMIT is reached
- if len( json_response ) == 0:
- return
- # select a random item
- item = random.choice( json_response )
- # remove the item from our list
- json_response.remove( item )
- # find values
-# if self.UNPLAYED == "True":
-# findplaycount = re.search( '"playcount": ?(.*?),"', item )
-# if findplaycount:
-# playcount = findplaycount.group(1)
-# if int( playcount ) > 0:
-# count = count - 1
-# continue
- findtitle = re.search( '"label": ?"(.*?)",["\n]', item )
- if findtitle:
- title = findtitle.group(1)
- else:
- title = ''
- findrating = re.search( '"rating": ?(.*?),"', item )
- if findrating:
- rating = findrating.group(1)
+ json_response = simplejson.loads(json_query)
+ if (json_response['result'] != None) and
(json_response['result'].has_key('albums')):
+ json_response = json_response['result']['albums']
+ # get total value
+ total = str( len( json_response ) )
+ # enumerate thru our records
+ count = 0
+ while count < self.LIMIT:
+ count += 1
+ # check if we don't run out of items before LIMIT is reached
+ if len( json_response ) == 0:
+ return
+ # select a random item
+ item = random.choice( json_response )
+ # remove the item from our list
+ json_response.remove( item )
+ # find values
+ title = item['label']
+ rating = str(item['rating'])
if rating == '48':
- rating = ''
- else:
- rating = ''
- findyear = re.search( '"year": ?(.*)', item )
- if findyear:
- year = findyear.group(1)
- else:
- year = ''
- findartist = re.search( '"artist": ?"(.*?)",["\n]', item )
- if findartist:
- artist = findartist.group(1)
- else:
- artist = ''
- findpath = re.search( '"albumid": ?(.*?),"', item )
- if findpath:
- path = 'XBMC.RunScript(' + __addonid__ + ',albumid=' +
findpath.group(1) + ')'
- else:
- path = ''
- findfanart = re.search( '"fanart": ?"(.*?)",["\n]', item )
- if findfanart:
- fanart = findfanart.group(1)
- else:
- fanart = ''
- findthumb = re.search( '"thumbnail": ?"(.*?)",["\n]', item )
- if findthumb:
- thumb = findthumb.group(1)
- else:
- thumb = ''
- # set our properties
- self.WINDOW.setProperty( "RandomAlbum.%d.Title" % ( count ), title
)
- self.WINDOW.setProperty( "RandomAlbum.%d.Rating" % ( count ),
rating )
- self.WINDOW.setProperty( "RandomAlbum.%d.Year" % ( count ), year )
- self.WINDOW.setProperty( "RandomAlbum.%d.Artist" % ( count ),
artist )
- self.WINDOW.setProperty( "RandomAlbum.%d.Path" % ( count ), path )
- self.WINDOW.setProperty( "RandomAlbum.%d.Fanart" % ( count ),
fanart )
- self.WINDOW.setProperty( "RandomAlbum.%d.Thumb" % ( count ), thumb
)
- self.WINDOW.setProperty( "RandomAlbum.Count", total )
+ rating = ""
+ year = str(item['year'])
+ artist = item['artist']
+ path = 'XBMC.RunScript(' + __addonid__ + ',albumid=' +
str(item['albumid']) + ')'
+ fanart = item['fanart']
+ thumb = item['thumbnail']
+ # set our properties
+ self.WINDOW.setProperty( "RandomAlbum.%d.Title" % ( count ),
title )
+ self.WINDOW.setProperty( "RandomAlbum.%d.Rating" % ( count ),
rating )
+ self.WINDOW.setProperty( "RandomAlbum.%d.Year" % ( count ),
year )
+ self.WINDOW.setProperty( "RandomAlbum.%d.Artist" % ( count ),
artist )
+ self.WINDOW.setProperty( "RandomAlbum.%d.Path" % ( count ),
path )
+ self.WINDOW.setProperty( "RandomAlbum.%d.Fanart" % ( count ),
fanart )
+ self.WINDOW.setProperty( "RandomAlbum.%d.Thumb" % ( count ),
thumb )
+ self.WINDOW.setProperty( "RandomAlbum.Count" , total )
def _fetch_song_info( self ):
# query the database
json_query = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method":
"AudioLibrary.GetSongs", "params": {"properties": ["playcount", "artist",
"album", "year", "file", "thumbnail", "fanart", "rating"] }, "id": 1}')
# separate the records
- json_response = re.compile( "{(.*?)}", re.DOTALL ).findall(json_query)
- json_response.pop(0)
- # get total value
- total = str( len( json_response ) )
- # enumerate thru our records
- count = 0
- while count < self.LIMIT:
- count += 1
- # check if we don't run out of items before LIMIT is reached
- if len( json_response ) == 0:
- return
- # select a random item
- item = random.choice( json_response )
- # remove the item from our list
- json_response.remove( item )
- # find values
- if self.UNPLAYED == "True":
- findplaycount = re.search( '"playcount": ?(.*?),"', item )
- if findplaycount:
- playcount = findplaycount.group(1)
- if int( playcount ) > 0:
+ json_response = simplejson.loads(json_query)
+ if (json_response['result'] != None) and
(json_response['result'].has_key('songs')):
+ json_response = json_response['result']['songs']
+ # get total value
+ total = str( len( json_response ) )
+ # enumerate thru our records
+ count = 0
+ while count < self.LIMIT:
+ count += 1
+ # check if we don't run out of items before LIMIT is reached
+ if len( json_response ) == 0:
+ return
+ # select a random item
+ item = random.choice( json_response )
+ # remove the item from our list
+ json_response.remove( item )
+ # find values
+ if self.UNPLAYED == "True":
+ playcount = item['playcount']
+ if playcount > 0:
count = count - 1
- continue
- findtitle = re.search( '"label": ?"(.*?)",["\n]', item )
- if findtitle:
- title = findtitle.group(1)
- else:
- title = ''
- findrating = re.search( '"rating": ?(.*?),"', item )
- if findrating:
- rating = str( int( findrating.group(1) ) - 48)
- else:
- rating = ''
- findyear = re.search( '"year": ?(.*)', item )
- if findyear:
- year = findyear.group(1)
- else:
- year = ''
- findartist = re.search( '"artist": ?"(.*?)",["\n]', item )
- if findartist:
- artist = findartist.group(1)
- else:
- artist = ''
- findalbum = re.search( '"album": ?"(.*?)",["\n]', item )
- if findalbum:
- album = findalbum.group(1)
- else:
- album = ''
- findpath = re.search( '"file": ?"(.*?)",["\n]', item )
- if findpath:
- path = findpath.group(1)
- else:
- path = ''
- findfanart = re.search( '"fanart": ?"(.*?)",["\n]', item )
- if findfanart:
- fanart = findfanart.group(1)
- else:
- fanart = ''
- findthumb = re.search( '"thumbnail": ?"(.*?)",["\n]', item )
- if findthumb:
- thumb = findthumb.group(1)
- else:
- thumb = ''
- # set our properties
- self.WINDOW.setProperty( "RandomSong.%d.Title" % ( count ), title )
- self.WINDOW.setProperty( "RandomSong.%d.Rating" % ( count ),
rating )
- self.WINDOW.setProperty( "RandomSong.%d.Year" % ( count ), year )
- self.WINDOW.setProperty( "RandomSong.%d.Artist" % ( count ),
artist )
- self.WINDOW.setProperty( "RandomSong.%d.Album" % ( count ), album )
- self.WINDOW.setProperty( "RandomSong.%d.Path" % ( count ), path )
- self.WINDOW.setProperty( "RandomSong.%d.Fanart" % ( count ),
fanart )
- self.WINDOW.setProperty( "RandomSong.%d.Thumb" % ( count ), thumb )
- self.WINDOW.setProperty( "RandomSong.Count", total )
+ continue
+ title = item['label']
+ rating = str(int(item['rating'])-48)
+ year = str(item['year'])
+ artist = item['artist']
+ album = item['album']
+ path = item['file']
+ fanart = item['fanart']
+ thumb = item['thumbnail']
+ # set our properties
+ self.WINDOW.setProperty( "RandomSong.%d.Title" % ( count ),
title )
+ self.WINDOW.setProperty( "RandomSong.%d.Rating" % ( count ),
rating )
+ self.WINDOW.setProperty( "RandomSong.%d.Year" % ( count ),
year )
+ self.WINDOW.setProperty( "RandomSong.%d.Artist" % ( count ),
artist )
+ self.WINDOW.setProperty( "RandomSong.%d.Album" % ( count ),
album )
+ self.WINDOW.setProperty( "RandomSong.%d.Path" % ( count ),
path )
+ self.WINDOW.setProperty( "RandomSong.%d.Fanart" % ( count ),
fanart )
+ self.WINDOW.setProperty( "RandomSong.%d.Thumb" % ( count ),
thumb )
+ self.WINDOW.setProperty( "RandomSong.Count" , total )
def _fetch_addon_info( self ):
# initialize our list
@@ -520,45 +344,33 @@ class Main:
# remove the item from our list
addonlist.remove(addonid)
# set properties
- self.WINDOW.setProperty( "RandomAddon.%d.Name" % ( count ),
xbmcaddon.Addon(id=addonid[0]).getAddonInfo('name') )
- self.WINDOW.setProperty( "RandomAddon.%d.Author" % ( count ),
xbmcaddon.Addon(id=addonid[0]).getAddonInfo('author') )
+ self.WINDOW.setProperty( "RandomAddon.%d.Name" % ( count ),
xbmcaddon.Addon(id=addonid[0]).getAddonInfo('name') )
+ self.WINDOW.setProperty( "RandomAddon.%d.Author" % ( count ),
xbmcaddon.Addon(id=addonid[0]).getAddonInfo('author') )
self.WINDOW.setProperty( "RandomAddon.%d.Summary" % ( count ),
xbmcaddon.Addon(id=addonid[0]).getAddonInfo('summary') )
self.WINDOW.setProperty( "RandomAddon.%d.Version" % ( count ),
xbmcaddon.Addon(id=addonid[0]).getAddonInfo('version') )
- self.WINDOW.setProperty( "RandomAddon.%d.Path" % ( count ),
xbmcaddon.Addon(id=addonid[0]).getAddonInfo('id') )
- self.WINDOW.setProperty( "RandomAddon.%d.Fanart" % ( count ),
xbmcaddon.Addon(id=addonid[0]).getAddonInfo('fanart') )
- self.WINDOW.setProperty( "RandomAddon.%d.Thumb" % ( count ),
xbmcaddon.Addon(id=addonid[0]).getAddonInfo('icon') )
- self.WINDOW.setProperty( "RandomAddon.%d.Type" % ( count ),
addonid[1] )
- self.WINDOW.setProperty( "RandomAddon.Count", total )
+ self.WINDOW.setProperty( "RandomAddon.%d.Path" % ( count ),
xbmcaddon.Addon(id=addonid[0]).getAddonInfo('id') )
+ self.WINDOW.setProperty( "RandomAddon.%d.Fanart" % ( count ),
xbmcaddon.Addon(id=addonid[0]).getAddonInfo('fanart') )
+ self.WINDOW.setProperty( "RandomAddon.%d.Thumb" % ( count ),
xbmcaddon.Addon(id=addonid[0]).getAddonInfo('icon') )
+ self.WINDOW.setProperty( "RandomAddon.%d.Type" % ( count ),
addonid[1] )
+ self.WINDOW.setProperty( "RandomAddon.Count" , total )
def _Play_Album( self, ID ):
- # query the database
- json_query = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method":
"AudioLibrary.GetSongs", "params": {"properties": ["file", "fanart"],
"albumid":%s }, "id": 1}' % ID)
- # separate the records
- json_response = re.compile( "{(.*?)}", re.DOTALL ).findall(json_query)
- json_response.pop(0)
# create a playlist
playlist = xbmc.PlayList(0)
# clear the playlist
playlist.clear()
+ # query the database
+ json_query = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method":
"AudioLibrary.GetSongs", "params": {"properties": ["file", "fanart"],
"albumid":%s }, "id": 1}' % ID)
+ # separate the records
+ json_response = simplejson.loads(json_query)
# enumerate thru our records
- for item in json_response:
- # find values
- findsongpath = re.search( '"file": ?"(.*?)",["\n]label"', item )
- if findsongpath:
- song = findsongpath.group(1)
- else:
- song = ''
- findfanart = re.search( '"fanart": ?"(.*?)",["\n]file"', item )
- if findfanart:
- fanart = findfanart.group(1)
- else:
- fanart = ''
- # create playlist item
- listitem = xbmcgui.ListItem()
- # add fanart image to the playlist item
- listitem.setProperty( "fanart_image", fanart )
- # add item to the playlist
- playlist.add( url=song, listitem=listitem )
+ if (json_response['result'] != None) and
(json_response['result'].has_key('songs')):
+ for item in json_response['result']['songs']:
+ song = item['file']
+ fanart = item['fanart']
+ listitem = xbmcgui.ListItem()
+ listitem.setProperty( "fanart_image", fanart )
+ playlist.add( url=song, listitem=listitem )
# play the playlist
xbmc.Player().play( playlist )
diff --git a/script.randomitems/addon.xml b/script.randomitems/addon.xml
index 4f8562e..1f047fa 100644
--- a/script.randomitems/addon.xml
+++ b/script.randomitems/addon.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<addon id="script.randomitems" name="Random Items script" version="3.0.4"
provider-name="Hitcher, ronie">
+<addon id="script.randomitems" name="Random Items script" version="3.0.6"
provider-name="Hitcher, ronie">
<requires>
<import addon="xbmc.python" version="2.0"/>
<import addon="script.module.elementtree" version="1.2.7"/>
+ <import addon="script.module.simplejson" version="2.0.10"/>
</requires>
<extension point="xbmc.python.library" library="RandomItems.py" />
<extension point="xbmc.addon.metadata">
diff --git a/script.randomitems/changelog.txt b/script.randomitems/changelog.txt
index 7103623..299a4be 100644
--- a/script.randomitems/changelog.txt
+++ b/script.randomitems/changelog.txt
@@ -1,3 +1,9 @@
+v3.0.6
+- use simplejson instead of regex
+
+v3.0.5
+- clean plot
+
v 3.0.4:
- add support for music videos
- added addon type property
-----------------------------------------------------------------------
Summary of changes:
script.randomitems/RandomItems.py | 632 +++++++++++++------------------------
script.randomitems/addon.xml | 3 +-
script.randomitems/changelog.txt | 6 +
3 files changed, 230 insertions(+), 411 deletions(-)
hooks/post-receive
--
Scripts
------------------------------------------------------------------------------
All the data continuously generated in your IT infrastructure
contains a definitive record of customers, application performance,
security threats, fraudulent activity, and more. Splunk takes this
data and makes sense of it. IT sense. And common sense.
http://p.sf.net/sfu/splunk-novd2d
_______________________________________________
Xbmc-addons mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/xbmc-addons