--- misc/xbmc/plugin.video.todic/default.py 2011/11/27 13:03:36 1633
+++ misc/xbmc/plugin.video.todic/default.py 2013/01/17 18:44:47 1914
@@ -1,3 +1,6 @@
+
+# This Python file uses the following encoding: utf-8
+
'''
Todic plugin for XBMC
Version 0.0.2
@@ -5,17 +8,78 @@
import sys
import cgi as urlparse
+import os
+
import xbmc
import xbmcaddon
import xbmcgui
import xbmcplugin
import urllib
-import urllib2, re
+import urllib2
+
+from xml.dom.minidom import parseString
__addon__ = xbmcaddon.Addon(id='plugin.video.todic')
__key__ = __addon__.getSetting('xbmckey').lower()
__backend__ = "http://todic.dk/xbmc.php?xbmckey=" + __key__
+fanartImage = os.path.join(__addon__.getAddonInfo('path'), 'fanart.jpg')
+datapath = xbmc.translatePath('special://profile/addon_data/plugin.video.todic/')
+
+
+class TodicPlayer(xbmc.Player):
+ def __init__(self, *args, **kwargs):
+ #xbmc.Player.__init__(selv,*args,**kwargs)
+ xbmc.Player.__init__(self, xbmc.PLAYER_CORE_MPLAYER )
+ self.stopped = False
+ self.started = False
+ print "[TodicPlayer] init"
+
+# @catchall
+ def onPlayBackStarted(self):
+ self.started = True
+ print "[TodicPlayer] : started"
+# super.onPlayBackStarted()
+
+ def onPlayBackStopped(self):
+ self.stopped = True
+ print "[TodicPlayer] : stopped"
+
+ def onPlayBackEnded(self):
+ self.stopped = True
+ print "[TodicPlayer] : ended"
+
+ def callbackLoop(self):
+ print "[Todic] startLoop"
+ while (self.stopped == False):
+ if (self.started == True ):
+ print "[todic] " + str(self.getTime())
+ xbmc.sleep(5000)
+
+
+def getText2(nodelist):
+ rc = []
+ for node in nodelist:
+ if node.nodeType == node.TEXT_NODE:
+ rc.append(node.data)
+ else:
+ rc.append( getText(node.childNodes) )
+ return ''.join(rc)
+
+def getText(nodelist):
+ if nodelist.length == 0:
+ return ''
+ else:
+ if nodelist[0].childNodes.length == 0:
+ return ''
+ else:
+ return nodelist[0].childNodes[0].nodeValue
+
+def SaveFile(path, data):
+ file = open(path,'w')
+ file.write(data)
+ file.close()
+
def open_url(url):
req = urllib2.Request(url)
@@ -25,75 +89,137 @@
return data
def rootMenu():
- link = open_url(__backend__)
- m=re.compile('
(.+?)(.+?)').findall(link)
- l = len(m)
- for name,url in m:
- listitem = xbmcgui.ListItem(label = name, iconImage = 'DefaultFolder.png', thumbnailImage = 'DefaultFolder.png')
- u = sys.argv[0] + "?mode=1&name=" + urllib.quote_plus(name) + "&url=" + urllib.quote_plus(url)
- ok = xbmcplugin.addDirectoryItem(handle = int(sys.argv[1]), url = u, listitem = listitem, isFolder = True, totalItems = l)
-
- listitem = xbmcgui.ListItem(label = "Søg ...", iconImage = 'DefaultFolder.png', thumbnailImage = 'DefaultFolder.png')
- u = sys.argv[0] + "?mode=10&name=" + urllib.quote_plus(name)
- ok = xbmcplugin.addDirectoryItem(handle = int(sys.argv[1]), url = u, listitem = listitem, isFolder = True, totalItems = l)
- xbmcplugin.endOfDirectory(int(sys.argv[1]))
+ msg = open_url(__backend__ + "&action=messages")
+ msg = msg.strip()
+ if msg != "":
+ dialog = xbmcgui.Dialog()
+ dialog.ok('XBMC Todic', msg)
+
+ buildList(__backend__, "", False) # call default list
+
+ # Adde xtra items to root menu
+ listitem = xbmcgui.ListItem(label = "Søg film ...", iconImage = 'DefaultFolder.png', thumbnailImage = 'DefaultFolder.png')
+ listitem.setProperty('Fanart_Image', fanartImage)
+
+ u = sys.argv[0] + "?mode=10&name="
+ ok = xbmcplugin.addDirectoryItem(handle = int(sys.argv[1]), url = u, listitem = listitem, isFolder = True)
-def buildList(url,title):
- print '[TODIC]:'+str(url)
- link = open_url(url)
- ty=re.compile('(.+?)(.+?)(.+?)').findall(link)
- l=len(m)
- for name,url,thumb in m:
- if ty[0] == 'clipList':
- mode = '50'
- folder = False
- else:
- mode = '2'
- folder = True
-
- listitem = xbmcgui.ListItem(label = name, iconImage = 'DefaultFolder.png', thumbnailImage = thumb)
- u = sys.argv[0] + "?mode=" + urllib.quote_plus(mode) + "&name=" + urllib.quote_plus(name) + "&url=" + urllib.quote_plus(url)
- ok = xbmcplugin.addDirectoryItem(handle = int(sys.argv[1]), url = u, listitem = listitem, isFolder = folder, totalItems = l)
xbmcplugin.endOfDirectory(int(sys.argv[1]))
-def buildSubList(url,title):
+
+def buildList(url,title, endlist=True):
print '[TODIC]:'+str(url)
+
link = open_url(url)
- m=re.compile('(.+?)(.+?)(.+?)').findall(link)
- l = len(m)
- for name,url,thumb in m:
- listitem = xbmcgui.ListItem(label = name, iconImage = 'DefaultFolder.png', thumbnailImage = thumb)
- u = sys.argv[0] + "?mode=50&name=" + urllib.quote_plus(name) + "&url=" + urllib.quote_plus(url)
- ok = xbmcplugin.addDirectoryItem(handle = int(sys.argv[1]), url = u, listitem = listitem, isFolder = False, totalItems = l)
- xbmcplugin.endOfDirectory(int(sys.argv[1]))
+ doc = parseString(link)
+ ty = doc.getElementsByTagName("meta")[0].getAttribute("type")
+ print '[TODIC]'+str(ty)
+
+ if ty == 'clipList':
+ mode = '50'
+ folder = False
+ else:
+ mode = '1'
+ folder = True
+
+
+ entries = doc.getElementsByTagName("entry")
+ l=len(entries)
+ description = ''
+ for entry in entries:
+ name = getText( entry.getElementsByTagName("title") )
+ url = getText( entry.getElementsByTagName("url") )
+ thumb = getText( entry.getElementsByTagName("cover") )
+ description = getText( entry.getElementsByTagName("description") )
+ playcount = getText( entry.getElementsByTagName("playcount") )
+
+ if playcount == '':
+ playcount = '0'
+ playcount = int(playcount)
+
+ name = name.encode('latin-1')
+ description = description.encode('latin-1')
+
+## print "name:" + name
+# print "url:" + url
+# print "thumb:" + thumb
+# print "description:" + description
+
+
+ listitem = xbmcgui.ListItem(label = name, label2='test', iconImage = 'DefaultFolder.png', thumbnailImage = thumb)
+ listitem.setProperty('Fanart_Image', fanartImage)
+ if mode == '50':
+ infoLabels = {}
+ infoLabels['title'] = name
+ infoLabels['plot'] = description
+ infoLabels['playcount'] = playcount
+ listitem.setInfo('video', infoLabels)
+
+ u = sys.argv[0] + "?mode=" + urllib.quote(mode) + "&name=" + urllib.quote(name) + "&url=" + urllib.quote(url)
+ ok = xbmcplugin.addDirectoryItem(handle = int(sys.argv[1]), url = u, listitem = listitem, isFolder = folder, totalItems = l)
+
+ if (endlist == True):
+ xbmcplugin.endOfDirectory(int(sys.argv[1]))
+
def play_video(url, name):
- link = open_url(url)
- match=re.compile('(.+?)').findall(link)
- url = match[0]
- print '[TODIC]:'+str(url)
+ xml = open_url(url)
+ print 'TODIC url: ' + str(url)
+ print 'TODIC xml: '+ xml
+
+ doc = parseString(xml)
+ url = getText( doc.getElementsByTagName("url") )
+
+ subtitleurl = getText( doc.getElementsByTagName("subtitles") )
+ subtitlesfile = os.path.join(datapath,'temp.srt')
+
+ print '[TODIC] subs: '+str(subtitleurl)
+ if len(subtitleurl) > 0:
+ subtitles = open_url(subtitleurl)
+ SaveFile(subtitlesfile, subtitles)
+ print 'TODIC downloaded subtitles'
+
+
+
image = xbmc.getInfoImage( 'ListItem.Thumb' )
listitem = xbmcgui.ListItem(label = name , iconImage = 'DefaultVideo.png', thumbnailImage = image)
-# listitem = xbmcgui.ListItem(label = name , iconImage = 'DefaultVideo.png', thumbnailImage = 'DefaultVideo.png')
listitem.setInfo( type = "Video", infoLabels={ "Title": name } )
- xbmc.Player(xbmc.PLAYER_CORE_AUTO).play(str(url), listitem)
- xbmc.sleep(200)
+
+ player = TodicPlayer(xbmc.PLAYER_CORE_AUTO)
+ player.play(str(url), listitem)
+
+ #kan ikke loade subtitles hvis foerend playeren koerer
+ count = 0
+ while not xbmc.Player().isPlaying():
+ xbmc.sleep(500)
+ count += 1
+ if count > 10:
+ break
+
+
+ if xbmc.Player().isPlaying():
+ if os.path.isfile(subtitlesfile):
+ player.setSubtitles(subtitlesfile)
+ print 'TODIC started subtitles'
+
+# player.callbackLoop()
+
+
def search():
search = getUserInput("Todic Søgning")
- url = __backend__ + "&action=search&search=" + urllib.quote_plus(search)
+ if (search != None and search != ""):
+ url = __backend__ + "&action=search&search=" + urllib.quote_plus(search)
- #print "[TODIC] Search start: " + search
- #print "[TODIC] Search url: " + url
+ #print "[TODIC] Search start: " + search
+ #print "[TODIC] Search url: " + url
- buildSubList(url, "søgning")
+ buildList(url, "søgning")
@@ -141,10 +267,6 @@
param[splitparams[0]]=splitparams[1]
return param
-params = get_params()
-url = None
-name = None
-mode = None
params = get_params()
url = None
@@ -164,8 +286,12 @@
except:
pass
+if url == 'refresh':
+ xbmc.output("[tvserver] Container.Refresh")
+ xbmc.executebuiltin("Container.Refresh")
+
-if mode == None:
+elif mode == None:
#build main menu
rootMenu()
@@ -173,10 +299,6 @@
#build list of movie starting letters
buildList(url, name)
-elif mode == 2:
- #build list of series
- buildSubList(url, name)
-
elif mode == 10:
search()
@@ -186,5 +308,4 @@
-# xbmcplugin.endOfDirectory(int(sys.argv[1]))