The branch, eden-pre has been updated
       via  0bc3e337789fda732090e7d387a7c37169e6ea48 (commit)
      from  bb71cfeae8f9c6bc72c06312b8412deca042387a (commit)

- Log -----------------------------------------------------------------
http://xbmc.git.sourceforge.net/git/gitweb.cgi?p=xbmc/scripts;a=commit;h=0bc3e337789fda732090e7d387a7c37169e6ea48

commit 0bc3e337789fda732090e7d387a7c37169e6ea48
Author: ronie <[email protected]>
Date:   Fri Nov 18 21:56:05 2011 +0100

    [script.tv.show.next.aired] -v4.1.4
    
    added library path property

diff --git a/script.tv.show.next.aired/README.txt 
b/script.tv.show.next.aired/README.txt
index cfe6ec7..05753d4 100644
--- a/script.tv.show.next.aired/README.txt
+++ b/script.tv.show.next.aired/README.txt
@@ -6,7 +6,45 @@ I) Startup.xml:
 RunScript(script.tv.show.next.aired,silent=True)
 
 the script will scan your library and tries to fetch next aired info for every 
show.
-there's no need to specify an alarm, the script will set one internally, it 
runs every 20 hours.
+there's no need to specify an alarm, the script will set one internally, it 
runs every day at midnight.
+
+for shows that are airing today, the script will set the window properties 
listed below.
+
+Window(Home).Property(NextAired.%d.*):
+Label              (tv show name)
+Thumb              (tv show icon)
+AirTime                    (eg. 'Thursday at 09:00 pm')
+Path               (tv show path)
+Library                    (eg. videodb://2/2/1/)
+Status             (eg. 'Returning Series'/'Final Season'/'New Series')
+Network                    (name of the tv network that's airing the show)
+Started                    (airdate of the first episode, eg. 'Sep/24/2007')
+Classification     (type of show, ex. 'Animation'/'Documentary')
+Genre              (genre of the show)
+Premiered          (year the first episode was aired, eg. '1999')
+Country                    (production country of the tv show, eg. 'USA')
+Runtime                    (duration of the episode in minutes)
+Fanart             (tv show fanart)
+Today              (will return 'True' if the show is aired today, otherwise 
'False')
+NextDate           (date the next episode will be aired)
+NextTitle          (name of the next episode)
+NextNumber         (season/episode number of the next episode, eg. '04x01')
+NextEpisodeNumber   (episode number of the next episode, eg. '04')
+NextSeasonNumber    (season number of the next episode, eg. '01')
+LatestDate         (date the last episode was aired)
+LatestTitle        (name of the last episode)
+LatestNumber       (season/episode number of the last episode)
+LatestEpisodeNumber (episode number of the last episode)
+LatestSeasonNumber  (season number of the last episode)
+AirDay             (day of the week the show is aired, eg 'Tuesday')
+ShortTime          (time the show is aired, eg. '08:00 pm')
+
+---
+
+Window(Home).Property(NextAired.*):
+Total              (number of running shows)
+TodayTotal         (number of shows aired today)
+TodayShow          (list of shows aired today)
 
 
 
@@ -14,43 +52,17 @@ II) MyVideoNav.xml:
 RunScript(script.tv.show.next.aired,backend=True)
 
 the script will run in the background and provide next aired info for the 
focussed listitem.
-the following infolabels are available:
+the infolabels listed above are available, using this format:
 
 Window(Home).Property(NextAired.*)
 
-Label          (tv show name)
-Thumb          (tv show icon)
-AirTime                (eg. 'Thursday at 09:00 pm')
-Path           (tv show path)
-Status         (eg. 'Returning Series'/'Final Season'/'New Series')
-Network                (name of the tv network that's airing the show)
-Started                (airdate of the first episode, eg. 'Sep/24/2007')
-Classification (type of show, ex. 'Animation'/'Documentary')
-Genre          (genre of the show)
-Premiered      (year the first episode was aired, eg. '1999')
-Country                (production country of the tv show, eg. 'USA')
-Runtime                (duration of the episode in minutes)
-Fanart         (tv show fanart)
-Today          (will return 'True' if the show is aired today, otherwise 
'False')
-NextDate       (date the next episode will be aired)
-NextTitle      (name of the next episode)
-NextNumber     (season/episode number of the next episode, eg. '04x01')
-LatestDate     (date the last episode was aired)
-LatestTitle    (name of the last episode)
-LatestNumber   (season/episode number of the last episode)
-AirDay         (day of the week the show is aired, eg 'Tuesday')
-ShortTime      (time the show is aired, eg. '08:00 pm')
----
-Total          (number of running shows)
-TodayTotal     (number of shows aired today)
-TodayShow      (list of shows aired today)
 
 use !IsEmpty(Window(Home).Property(NextAired.NextDate)) as a visible condition!
 
 
 example code:
 <control type="group">
-       <visible>!IsEmpty(Window(Home).Property(NextAired.Label))</visible>
+       <visible>!IsEmpty(Window(Home).Property(NextAired.NextDate))</visible>
        <control type="label">
                <posx>0</posx>
                <posy>0</posy>
@@ -103,3 +115,8 @@ Window(home).Property(TVGuide.PreviewThumbs)                
(1=user selected to show 16:9 show
 
 all other id's and properties in the default script window are optional and 
not required by the script.
 
+
+
+IV) force an update of the nextaired database, this will rescan your tv shows 
and re-scrape all nextaired info:
+RunScript(script.tv.show.next.aired,force=True)
+the force update option is also available in the addon settings.
diff --git a/script.tv.show.next.aired/addon.xml 
b/script.tv.show.next.aired/addon.xml
index b80091e..09ec17b 100644
--- a/script.tv.show.next.aired/addon.xml
+++ b/script.tv.show.next.aired/addon.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <addon id="script.tv.show.next.aired"
        name="TV Show - Next Aired"
-       version="4.1.1"
+       version="4.1.4"
        provider-name="Ppic, Frost, ronie, `Black">
   <requires>
     <import addon="xbmc.python" version="2.0"/>
+    <import addon="script.module.simplejson" version="2.0.10"/>
   </requires>
   <extension point="xbmc.python.script"
              library="default.py">
diff --git a/script.tv.show.next.aired/changelog.txt 
b/script.tv.show.next.aired/changelog.txt
index 7f20338..45ac018 100644
--- a/script.tv.show.next.aired/changelog.txt
+++ b/script.tv.show.next.aired/changelog.txt
@@ -1,3 +1,15 @@
+v4.1.4
+- added library path property
+- use simplejson instead of regex
+
+v4.1.3
+- fixed issue when no airday is provided
+- added NextEpisodeNumber, NextSeasonNumber, LatestEpisodeNumber, 
LatestSeasonNumber
+
+v4.1.2
+- automatically update the database every day at midnight
+- NextAired.%d.Foo now only sets properties for shows airing today
+
 v4.1.1
 - update readme
 
diff --git a/script.tv.show.next.aired/default.py 
b/script.tv.show.next.aired/default.py
index a8ee2f5..dfa46ae 100644
--- a/script.tv.show.next.aired/default.py
+++ b/script.tv.show.next.aired/default.py
@@ -1,9 +1,11 @@
-import os, sys, re, time, socket, urllib
+from time import strptime, time, mktime
+import os, sys, re, socket, urllib, locale, simplejson
 from traceback import print_exc
 from datetime import datetime, date, timedelta, tzinfo
 from dateutil import tz
-from time import mktime
-import xbmc, xbmcgui, xbmcaddon, xbmcvfs, locale
+import xbmc, xbmcgui, xbmcaddon, xbmcvfs
+# http://mail.python.org/pipermail/python-list/2009-June/596197.html
+import _strptime
 
 __addon__     = xbmcaddon.Addon()
 __settings__  = xbmcaddon.Addon( "script.tv.show.next.aired" )
@@ -67,13 +69,22 @@ class NextAired:
             __settings__.setSetting ( id = "AddonVersion", value = "%s" % 
__version__ )
             self.FORCEUPDATE = True
         if self.BACKEND:
-            self.run_daemon()
+            self.run_backend()
         else:
             self.update_data()
             if self.SILENT == "":
                 self.show_gui()
             else:
-                self._set_alarm()
+                oldweekday = date.today().weekday()
+                while (not xbmc.abortRequested):
+                    xbmc.sleep(1000)
+                    newweekday = date.today().weekday()
+                    if newweekday != oldweekday:
+                        oldweekday = newweekday
+                        self.FORCEUPDATE = True
+                        log( "### it's midnight, force update" )
+                        self.update_data()
+                self.close("xbmc is closing, stop script")
 
     def _parse_argv( self ):
         try:
@@ -90,10 +101,10 @@ class NextAired:
         dbfile = os.path.join( DATA_PATH , "next_aired.db" )
         if xbmcvfs.exists(dbfile):
             if self.FORCEUPDATE:
-                log( "### scanning was previously canceled, rescanning..." )
+                log( "### update forced, rescanning..." )
                 __settings__.setSetting(id="ForceUpdate", value="false")
                 self.scan_info()
-            elif time.time() - os.path.getmtime(dbfile) > 86400:
+            elif time() - os.path.getmtime(dbfile) > 86400:
                 log( "### db more than 24h old, rescanning..." )
                 self.scan_info()
             else: 
@@ -143,6 +154,7 @@ class NextAired:
             current_show["path"] = show[1]
             current_show["thumbnail"] = show[2]
             current_show["fanart"] = show[3]
+            current_show["dbid"] = show[4]
             self.get_show_info( current_show )
             self.update_show_datetime( current_show )
             log( current_show )
@@ -157,29 +169,17 @@ class NextAired:
 
     def listing(self):
         json_query = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method": 
"VideoLibrary.GetTVShows", "params": {"properties": ["file", "thumbnail", 
"fanart"], "sort": { "method": "label" } }, "id": 1}')
-        json_response = re.compile( "{(.*?)}", re.DOTALL ).findall(json_query)
+        json_response = simplejson.loads(json_query)
         log("### %s" % json_response)
         self.TVlist = []
-        for tvshowitem in json_response:
-            findtvshowname = re.search( '"label": ?"(.*?)",["\n]', tvshowitem )
-            if findtvshowname:
-                tvshowname = ( findtvshowname.group(1) )
-                findpath = re.search( '"file": ?"(.*?)",["\n]', tvshowitem )
-                if findpath:
-                    path = (findpath.group(1))
-                else:
-                    path = ''
-                findthumbnail = re.search( '"thumbnail": ?"(.*?)",["\n]', 
tvshowitem )
-                if findthumbnail:
-                    thumbnail = (findthumbnail.group(1))
-                else:
-                    thumbnail = ''
-                findfanart = re.search( '"fanart": ?"(.*?)",["\n]', tvshowitem 
)
-                if findfanart:
-                    fanart = (findfanart.group(1))
-                else:
-                    fanart = ""
-                self.TVlist.append( ( tvshowname , path, thumbnail, fanart ) )
+        if json_response['result'].has_key('tvshows'):
+            for item in json_response['result']['tvshows']:
+                tvshowname = item['label']
+                path = item['file']
+                thumbnail = item['thumbnail']
+                fanart = item['fanart']
+                dbid = 'videodb://2/2/' + str(item['tvshowid']) + '/'
+                self.TVlist.append( ( tvshowname , path, thumbnail, fanart, 
dbid ) )
         log( "### list: %s" % self.TVlist )
         return self.TVlist
 
@@ -194,7 +194,7 @@ class NextAired:
         if result:
             for item in result:
                 current_show[item[0].replace("<pre>" , "")] = item[1]
-                
+
     def update_show_datetime(self, current_show):
         nextdate = current_show.get( "RFC3339" , "" )
         process = True
@@ -220,7 +220,7 @@ class NextAired:
             except:
                 log( "### error splitting next date (2)" )
             timeoffset = timedelta( hours = offset * int( timezone[0] ), 
minutes = offset * int ( timezone[1] ) )
-            date = datetime.fromtimestamp( mktime( time.strptime( strdate, 
'%Y-%m-%dT%H:%M:%S' ) ) )
+            date = datetime.fromtimestamp( mktime( strptime( strdate, 
'%Y-%m-%dT%H:%M:%S' ) ) )
             date = date.replace(tzinfo=tz.tzoffset(None, ( offset * 3600 * 
int( timezone[0] ) ) + ( offset * 60 * int ( timezone[1] ) )))
             log( '### nextdate %s' % date.isoformat() )
             datelocal = date.astimezone(tz.tzlocal())
@@ -238,8 +238,9 @@ class NextAired:
                 except:
                     log( "### error splitting airtime" )
                 for count, day in enumerate (airdays):
-                    index = self.days.index(day)
-                    airdays[count] = self.days[index + weekdaydiff]
+                    if day in self.days:
+                        index = self.days.index(day)
+                        airdays[count] = self.days[index + weekdaydiff]
                 airday = ', '.join(airdays)
             if self.ampm:
                 current_show["Airtime"] = airday + " at " + 
datelocal.strftime('%I:%M %p')
@@ -257,6 +258,8 @@ class NextAired:
     def check_today_show(self):
         self.todayshow = 0
         self.todaylist = []
+        self.date = date.today()
+        self.datestr = str(self.date)
         log( self.datestr )
         for show in self.nextlist:
             log( "################" )
@@ -265,7 +268,6 @@ class NextAired:
                 self.todayshow = self.todayshow + 1
                 self.todaylist.append(show.get("localname"))
                 log( "TODAY" )
-                show["Today"] = "True"
             log( "### %s" % show.get("Next Episode", "")  )
             log( "### %s" % show.get("RFC3339", "no rfc") )
             log( str(show.get("RFC3339", "")[:10]) )
@@ -301,6 +303,15 @@ class NextAired:
         self.WINDOW.setProperty("NextAired.Total" , str(len(self.nextlist)))
         self.WINDOW.setProperty("NextAired.TodayTotal" , str(self.todayshow))
         self.WINDOW.setProperty("NextAired.TodayShow" , 
str(self.todaylist).strip("[]"))
+        for count in range( len(self.nextlist) ):
+            self.WINDOW.clearProperty("NextAired.%d.Label" % ( count + 1, ))
+        self.count = 0
+        for current_show in self.nextlist:
+            if current_show.get("RFC3339" , "" )[:10] == self.datestr:
+                self.count += 1
+                self.set_labels('windowpropertytoday', current_show)
+
+    def show_gui(self):
         for count in range(0, 7):
             if count - self.weekday == 0:
                 self.WINDOW.setProperty("NextAired.TodayDate", 
self.date.strftime('%x'))
@@ -308,53 +319,11 @@ class NextAired:
             elif count - self.weekday > 0:
                 self.WINDOW.setProperty("NextAired.%d.Date" % ( count + 1 ), ( 
self.date + timedelta( days = ( count - self.weekday ) ) ).strftime('%x'))
             else:
-                self.WINDOW.setProperty("NextAired.%d.Date" % ( count + 1 ), ( 
self.date + timedelta( days = ( ( 7 - self.weekday ) + count ) ) 
).strftime('%x'))        
-        # DEPRECATED
-        for count in range( len(self.nextlist) ):
-            self.WINDOW.clearProperty("NextAired.%d.ShowTitle" % ( count + 1, 
))
-        for count, current_show in enumerate( self.nextlist ):
-            self.WINDOW.setProperty("NextAired.%d.Today" % ( count + 1, ), 
current_show.get( "Today" , "False"))
-            self.WINDOW.setProperty("NextAired.%d.ShowTitle" % ( count + 1, ), 
current_show.get( "localname", ""))
-            self.WINDOW.setProperty("NextAired.%d.NextDate" % ( count + 1, ), 
current_show.get( "NextDate", ""))
-            self.WINDOW.setProperty("NextAired.%d.NextTitle" % ( count + 1, ), 
current_show.get( "NextTitle", ""))
-            self.WINDOW.setProperty("NextAired.%d.NextNumber" % ( count + 1, 
), current_show.get( "NextNumber", ""))
-            try:
-                latest = current_show.get("Latest Episode","").split("^")
-                latest.extend(['',''])
-                self.WINDOW.setProperty("NextAired.%d.LatestDate" % ( count + 
1, ), latest[2] or "")
-                self.WINDOW.setProperty("NextAired.%d.LatestTitle" % ( count + 
1, ), latest[1] or "")
-                self.WINDOW.setProperty("NextAired.%d.LatestNumber" % ( count 
+ 1, ), latest[0] or "")
-            except:
-                print_exc()
-            self.WINDOW.setProperty("NextAired.%d.Airtime" % ( count + 1, ), 
current_show.get("Airtime", "")) 
-            self.WINDOW.setProperty("NextAired.%d.Showpath" % ( count + 1, ), 
current_show.get("path", ""))
-            self.WINDOW.setProperty("NextAired.%d.Status" % ( count + 1, ), 
current_show.get("Status", ""))
-            self.WINDOW.setProperty("NextAired.%d.ep_img" % ( count + 1, ), 
current_show.get("ep_img", ""))
-            self.WINDOW.setProperty("NextAired.%d.Network" % ( count + 1, ), 
current_show.get("Network", ""))
-            self.WINDOW.setProperty("NextAired.%d.Started" % ( count + 1, ), 
current_show.get("Started", ""))
-            self.WINDOW.setProperty("NextAired.%d.Classification" % ( count + 
1, ), current_show.get("Classification", ""))
-            self.WINDOW.setProperty("NextAired.%d.Genres" % ( count + 1, ), 
current_show.get("Genres", ""))
-            self.WINDOW.setProperty("NextAired.%d.Premiered" % ( count + 1, ), 
current_show.get("Premiered", ""))
-            self.WINDOW.setProperty("NextAired.%d.Country" % ( count + 1, ), 
current_show.get("Country", ""))
-            self.WINDOW.setProperty("NextAired.%d.Runtime" % ( count + 1, ), 
current_show.get("Runtime", ""))
-            self.WINDOW.setProperty("NextAired.%d.Fanart" % ( count + 1, ), 
current_show.get("Fanart", ""))
-            try:
-                airday, shortime = current_show.get("Airtime", "  at  " 
).split(" at ")
-                self.WINDOW.setProperty("NextAired.%d.airday" % ( count + 1, 
), airday)
-                self.WINDOW.setProperty("NextAired.%d.shortime" % ( count + 1, 
), shortime)
-            except:
-                log( "### %s" % current_show.get("Airtime", "  at  "))
-
-    def show_gui(self):
+                self.WINDOW.setProperty("NextAired.%d.Date" % ( count + 1 ), ( 
self.date + timedelta( days = ( ( 7 - self.weekday ) + count ) ) 
).strftime('%x'))
         import next_aired_dialog
         next_aired_dialog.MyDialog(self.nextlist, self.set_labels)
 
-    def _set_alarm( self ):
-        log( "### Alarm enabled" )
-        command = "XBMC.RunScript(%s,silent=True)" % ( os.path.join( __cwd__, 
__file__ ) )
-        xbmc.executebuiltin( "AlarmClock(NextAired,%s,1200,true)" % command )
-
-    def run_daemon(self):
+    def run_backend(self):
         self._stop = False
         self.previousitem = ''
         self.complete_show_data = self.get_list("next_aired.db")
@@ -375,10 +344,13 @@ class NextAired:
                 self.WINDOW.clearProperty("NextAired.Label")
                 self._stop = True
 
-    def set_labels(self, label, item, return_items = False ):
-        if label == "windowproperty":
+    def set_labels(self, infolabel, item, return_items = False ):
+        if (infolabel == 'windowproperty') or (infolabel == 
'windowpropertytoday'):
             label = xbmcgui.Window( 10000 )
-            prefix = 'NextAired.'
+            if infolabel == "windowproperty":
+                prefix = 'NextAired.'
+            else:
+                prefix = 'NextAired.' + str(self.count) + '.'
             label.setProperty(prefix + "Label", item.get("localname", ""))
             label.setProperty(prefix + "Thumb", item.get("ep_img", ""))
         else:
@@ -388,6 +360,7 @@ class NextAired:
             label.setThumbnailImage(item.get("ep_img", ""))
         label.setProperty(prefix + "AirTime", item.get("Airtime", ""))
         label.setProperty(prefix + "Path", item.get("path", ""))
+        label.setProperty(prefix + "Library", item.get("dbid", ""))
         label.setProperty(prefix + "Status", item.get("Status", ""))
         label.setProperty(prefix + "Network", item.get("Network", ""))
         label.setProperty(prefix + "Started", item.get("Started", ""))
@@ -404,11 +377,19 @@ class NextAired:
         label.setProperty(prefix + "NextDate", item.get("NextDate", ""))
         label.setProperty(prefix + "NextTitle", item.get("NextTitle", ""))
         label.setProperty(prefix + "NextNumber", item.get("NextNumber", ""))
+        nextnumber = item.get("NextNumber","").split("x")
+        nextnumber.extend([''])
+        label.setProperty(prefix + "NextEpisodeNumber", nextnumber[1])
+        label.setProperty(prefix + "NextSeasonNumber", nextnumber[0])
         latest = item.get("Latest Episode","").split("^")
         latest.extend(['',''])
         label.setProperty(prefix + "LatestDate", latest[2])
         label.setProperty(prefix + "LatestTitle", latest[1])
         label.setProperty(prefix + "LatestNumber", latest[0])
+        latestnumber = latest[0].split("x")
+        latestnumber.extend([''])
+        label.setProperty(prefix + "LatestEpisodeNumber", latestnumber[1])
+        label.setProperty(prefix + "LatestSeasonNumber", latestnumber[0])
         daytime = item.get("Airtime","").split(" at ")
         daytime.extend([''])
         label.setProperty(prefix + "AirDay", daytime[0])

-----------------------------------------------------------------------

Summary of changes:
 script.tv.show.next.aired/README.txt    |   75 ++++++++++-------
 script.tv.show.next.aired/addon.xml     |    3 +-
 script.tv.show.next.aired/changelog.txt |   12 +++
 script.tv.show.next.aired/default.py    |  141 +++++++++++++-----------------
 4 files changed, 121 insertions(+), 110 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

Reply via email to