--- misc/xbmc/plugin.video.todic/default.py 2011/11/28 19:02:04 1640 +++ misc/xbmc/plugin.video.todic/default.py 2012/07/24 18:21:04 1814 @@ -1,3 +1,6 @@ + +# This Python file uses the following encoding: utf-8 + ''' Todic plugin for XBMC Version 0.0.2 @@ -5,17 +8,72 @@ 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') + + +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 open_url(url): req = urllib2.Request(url) @@ -25,65 +83,92 @@ 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) + 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') - 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) + 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) xbmcplugin.endOfDirectory(int(sys.argv[1])) -def buildList(url,title): +def buildList(url,title, endlist=True): 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) + 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") ) + + 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 + 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) - xbmcplugin.endOfDirectory(int(sys.argv[1])) -def buildSubList(url,title): - 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])) + 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] + xml = open_url(url) + + doc = parseString(xml) + url = getText( doc.getElementsByTagName("url") ) + print '[TODIC]:'+str(url) 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) +# player.callbackLoop() + + def search(): search = getUserInput("Todic Søgning") @@ -94,7 +179,7 @@ #print "[TODIC] Search start: " + search #print "[TODIC] Search url: " + url - buildSubList(url, "søgning") + buildList(url, "søgning") @@ -142,10 +227,6 @@ param[splitparams[0]]=splitparams[1] return param -params = get_params() -url = None -name = None -mode = None params = get_params() url = None @@ -165,8 +246,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() @@ -174,10 +259,6 @@ #build list of movie starting letters buildList(url, name) -elif mode == 2: - #build list of series - buildSubList(url, name) - elif mode == 10: search() @@ -187,5 +268,4 @@ -# xbmcplugin.endOfDirectory(int(sys.argv[1]))