The branch, eden-pre has been updated
via 1f6990dd9a2c42d465a71557e6c7525fae06eb01 (commit)
from b78542eec4253b3e9f6db7a9386253bed0b28a6c (commit)
- Log -----------------------------------------------------------------
http://xbmc.git.sourceforge.net/git/gitweb.cgi?p=xbmc/scripts;a=commit;h=1f6990dd9a2c42d465a71557e6c7525fae06eb01
commit 1f6990dd9a2c42d465a71557e6c7525fae06eb01
Author: ronie <[email protected]>
Date: Sat Nov 5 23:00:30 2011 +0100
[script.randomitems] -v3.0.4
add support for musicvideos
diff --git a/script.randomitems/README.txt b/script.randomitems/README.txt
index 39b5f56..8d47f8b 100644
--- a/script.randomitems/README.txt
+++ b/script.randomitems/README.txt
@@ -18,6 +18,7 @@ Labels:
"RandomMovie.%d.Title"
"RandomMovie.%d.Rating"
"RandomMovie.%d.Year"
+"RandomMovie.%d.Plot"
"RandomMovie.%d.RunningTime"
"RandomMovie.%d.Path"
"RandomMovie.%d.Trailer"
@@ -30,12 +31,23 @@ Labels:
"RandomEpisode.%d.EpisodeNo"
"RandomEpisode.%d.EpisodeSeason"
"RandomEpisode.%d.EpisodeNumber"
+"RandomEpisode.%d.Plot"
"RandomEpisode.%d.Rating"
"RandomEpisode.%d.Path"
"RandomEpisode.%d.Fanart"
"RandomEpisode.%d.Thumb"
"RandomEpisode.Count"
+"RandomMusicVideo.%d.Title"
+"RandomMusicVideo.%d.Year"
+"RandomMusicVideo.%d.Plot"
+"RandomMusicVideo.%d.RunningTime"
+"RandomMusicVideo.%d.Path"
+"RandomMusicVideo.%d.Artist"
+"RandomMusicVideo.%d.Fanart"
+"RandomMusicVideo.%d.Thumb"
+"RandomMusicVideo.Count"
+
"RandomAlbum.%d.Title"
"RandomAlbum.%d.Year"
"RandomAlbum.%d.Artist"
@@ -60,6 +72,7 @@ Labels:
"RandomAddon.%d.Summary"
"RandomAddon.%d.Version"
"RandomAddon.%d.Path"
+"RandomAddon.%d.Type"
"RandomAddon.%d.Fanart"
"RandomAddon.%d.Thumb"
"RandomAddon.Count"
diff --git a/script.randomitems/RandomItems.py
b/script.randomitems/RandomItems.py
index cc136b5..77d407a 100644
--- a/script.randomitems/RandomItems.py
+++ b/script.randomitems/RandomItems.py
@@ -6,7 +6,7 @@
import xbmc, xbmcgui, xbmcaddon
import re, sys, os, random
-import xml.dom.minidom
+from elementtree import ElementTree as xmltree
__addon__ = xbmcaddon.Addon()
__addonid__ = __addon__.getAddonInfo('id')
@@ -24,16 +24,18 @@ class Main:
# reset totals property for visible condition
self.WINDOW.clearProperty( "RandomMovie.Count" )
self.WINDOW.clearProperty( "RandomEpisode.Count" )
+ self.WINDOW.clearProperty( "RandomMusicVideo.Count" )
self.WINDOW.clearProperty( "RandomSong.Count" )
self.WINDOW.clearProperty( "RandomAlbum.Count" )
self.WINDOW.clearProperty( "RandomAddon.Count" )
# we clear title for visible condition
for count in range( self.LIMIT ):
- self.WINDOW.clearProperty( "RandomMovie.%d.Title" % ( count ) )
- self.WINDOW.clearProperty( "RandomEpisode.%d.Title" % ( count ) )
- self.WINDOW.clearProperty( "RandomSong.%d.Title" % ( count ) )
- self.WINDOW.clearProperty( "RandomAlbum.%d.Title" % ( count ) )
- self.WINDOW.clearProperty( "RandomAddon.%d.Name" % ( count ) )
+ 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 ) )
def _parse_argv( self ):
try:
@@ -70,6 +72,7 @@ class Main:
# fetch media info
self._fetch_movie_info()
self._fetch_episode_info()
+ self._fetch_musicvideo_info()
self._fetch_album_info()
self._fetch_song_info()
self._fetch_addon_info()
@@ -200,12 +203,12 @@ class Main:
showtitle = ''
findseason = re.search( '"season": ?(.*?),"', item )
if findseason:
- season = findseason.group(1)
+ season = "%.2d" % float( findseason.group(1) )
else:
season = ''
findepisode = re.search( '"episode": ?(.*?),"', item )
if findepisode:
- episode = findepisode.group(1)
+ episode = "%.2d" % float( findepisode.group(1) )
else:
episode = ''
findrating = re.search( '"rating": ?(.*?),"', item )
@@ -247,6 +250,84 @@ class Main:
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:
+ 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 )
+
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}')
@@ -412,17 +493,19 @@ class Main:
addonfile = os.path.join(addonpath, item, 'addon.xml')
if os.path.exists(addonfile):
# find addon id
- addonfilecontents = xml.dom.minidom.parse(addonfile)
- for addonentry in
addonfilecontents.getElementsByTagName("addon"):
- addonid = addonentry.getAttribute("id")
+ addonfilecontents = xmltree.parse(addonfile).getroot()
+ for element in addonfilecontents.getiterator():
+ if element.tag == "addon":
+ addonid = element.attrib.get('id')
+ elif element.tag == "provides":
+ addonprovides = element.text
# find plugins and scripts
try:
addontype =
xbmcaddon.Addon(id=addonid).getAddonInfo('type')
if (addontype == 'xbmc.python.script') or (addontype
== 'xbmc.python.pluginsource'):
- addonlist.append(addonid)
+ addonlist.append( (addonid, addonprovides) )
except:
pass
- addonfilecontents.unlink()
# get total value
total = str( len( addonlist ) )
# count thru our addons
@@ -437,13 +520,14 @@ class Main:
# remove the item from our list
addonlist.remove(addonid)
# set properties
- self.WINDOW.setProperty( "RandomAddon.%d.Name" % ( count ),
xbmcaddon.Addon(id=addonid).getAddonInfo('name') )
- self.WINDOW.setProperty( "RandomAddon.%d.Author" % ( count ),
xbmcaddon.Addon(id=addonid).getAddonInfo('author') )
- self.WINDOW.setProperty( "RandomAddon.%d.Summary" % ( count ),
xbmcaddon.Addon(id=addonid).getAddonInfo('summary') )
- self.WINDOW.setProperty( "RandomAddon.%d.Version" % ( count ),
xbmcaddon.Addon(id=addonid).getAddonInfo('version') )
- self.WINDOW.setProperty( "RandomAddon.%d.Path" % ( count ),
xbmcaddon.Addon(id=addonid).getAddonInfo('id') )
- self.WINDOW.setProperty( "RandomAddon.%d.Fanart" % ( count ),
xbmcaddon.Addon(id=addonid).getAddonInfo('fanart') )
- self.WINDOW.setProperty( "RandomAddon.%d.Thumb" % ( count ),
xbmcaddon.Addon(id=addonid).getAddonInfo('icon') )
+ 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 )
def _Play_Album( self, ID ):
diff --git a/script.randomitems/addon.xml b/script.randomitems/addon.xml
index bfd6e4c..4f8562e 100644
--- a/script.randomitems/addon.xml
+++ b/script.randomitems/addon.xml
@@ -1,7 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<addon id="script.randomitems" name="Random Items script" version="3.0.3"
provider-name="Hitcher, ronie">
+<addon id="script.randomitems" name="Random Items script" version="3.0.4"
provider-name="Hitcher, ronie">
<requires>
<import addon="xbmc.python" version="2.0"/>
+ <import addon="script.module.elementtree" version="1.2.7"/>
</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 2790e39..7103623 100644
--- a/script.randomitems/changelog.txt
+++ b/script.randomitems/changelog.txt
@@ -1,3 +1,8 @@
+v 3.0.4:
+- add support for music videos
+- added addon type property
+- return two digit values for episode and season numbers
+
v 3.0.3:
- adjusted to latest json-rpc changes
- fixed json query when compactoutput was set to false
-----------------------------------------------------------------------
Summary of changes:
script.randomitems/README.txt | 13 ++++
script.randomitems/RandomItems.py | 124 +++++++++++++++++++++++++++++++------
script.randomitems/addon.xml | 3 +-
script.randomitems/changelog.txt | 5 ++
4 files changed, 124 insertions(+), 21 deletions(-)
hooks/post-receive
--
Scripts
------------------------------------------------------------------------------
RSA(R) Conference 2012
Save $700 by Nov 18
Register now
http://p.sf.net/sfu/rsa-sfdev2dev1
_______________________________________________
Xbmc-addons mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/xbmc-addons