/[projects]/misc/xbmc/plugin.video.todic/default.py
ViewVC logotype

Diff of /misc/xbmc/plugin.video.todic/default.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1629 by torben, Sun Nov 27 11:01:27 2011 UTC revision 1829 by torben, Sun Aug 19 17:22:41 2012 UTC
# Line 1  Line 1 
1    
2    # This Python file uses the following encoding: utf-8
3    
4  '''  '''
5      Todic plugin for XBMC      Todic plugin for XBMC
6      Version 0.0.2      Version 0.0.2
# Line 5  Line 8 
8    
9  import sys  import sys
10  import cgi as urlparse  import cgi as urlparse
11    import os
12    
13    
14  import xbmc  import xbmc
15  import xbmcaddon  import xbmcaddon
16  import xbmcgui  import xbmcgui
17  import xbmcplugin  import xbmcplugin
18  import urllib  import urllib
19  import urllib2, re  import urllib2
20    
21    from xml.dom.minidom import parseString
22    
23  __addon__ = xbmcaddon.Addon(id='plugin.video.todic')  __addon__ = xbmcaddon.Addon(id='plugin.video.todic')
24  __key__ = __addon__.getSetting('xbmckey').lower()  __key__ = __addon__.getSetting('xbmckey').lower()
25  __backend__ = "http://todic.dk/xbmc.php?xbmckey=" + __key__  __backend__ = "http://todic.dk/xbmc.php?xbmckey=" + __key__
26    fanartImage = os.path.join(__addon__.getAddonInfo('path'), 'fanart.jpg')
27    
28    
29    class TodicPlayer(xbmc.Player):
30            def __init__(self, *args, **kwargs):
31                    #xbmc.Player.__init__(selv,*args,**kwargs)
32                    xbmc.Player.__init__(self, xbmc.PLAYER_CORE_MPLAYER )
33                    self.stopped = False
34                    self.started = False
35                    print "[TodicPlayer] init"
36    
37    #       @catchall      
38            def onPlayBackStarted(self):
39                    self.started = True
40                    print "[TodicPlayer] : started"
41    #               super.onPlayBackStarted()
42    
43            def onPlayBackStopped(self):
44                    self.stopped = True
45                    print "[TodicPlayer] : stopped"
46    
47            def onPlayBackEnded(self):
48                    self.stopped = True
49                    print "[TodicPlayer] : ended"
50    
51            def callbackLoop(self):
52                    print "[Todic] startLoop"
53                    while (self.stopped == False):
54                            if (self.started == True ):
55                                    print "[todic] " + str(self.getTime())
56                            xbmc.sleep(5000)
57                            
58    
59    def getText2(nodelist):
60            rc = []
61            for node in nodelist:
62                    if node.nodeType == node.TEXT_NODE:
63                            rc.append(node.data)
64                    else:
65                            rc.append( getText(node.childNodes) )
66            return ''.join(rc)
67    
68    def getText(nodelist):
69            if nodelist.length == 0:
70                    return ''
71            else:
72                    if nodelist[0].childNodes.length == 0:
73                            return ''
74                    else:
75                            return nodelist[0].childNodes[0].nodeValue
76    
77    
78  def open_url(url):  def open_url(url):
79          req = urllib2.Request(url)          req = urllib2.Request(url)
# Line 25  def open_url(url): Line 83  def open_url(url):
83          return data          return data
84    
85  def rootMenu():  def rootMenu():
86          link = open_url(__backend__)  
87          m=re.compile('<title>(.+?)</title><url>(.+?)</url>').findall(link)          msg = open_url(__backend__ + "&action=messages")
88          for name,url in m:          msg = msg.strip()
89                  listitem = xbmcgui.ListItem(label = name, iconImage = 'DefaultFolder.png', thumbnailImage = 'DefaultFolder.png')  
90                  u = sys.argv[0] + "?mode=1&name=" + urllib.quote_plus(name) + "&url=" + urllib.quote_plus(url)          if msg != "":
91                  ok = xbmcplugin.addDirectoryItem(handle = int(sys.argv[1]), url = u, listitem = listitem, isFolder = True)                  dialog = xbmcgui.Dialog()              
92                    dialog.ok('XBMC Todic', msg)
93    
94            buildList(__backend__, "", False) # call default list
95    
96            # Adde xtra items to root menu
97            listitem = xbmcgui.ListItem(label = "Søg film ...", iconImage = 'DefaultFolder.png', thumbnailImage = 'DefaultFolder.png')
98            listitem.setProperty('Fanart_Image', fanartImage)
99    
100            u = sys.argv[0] + "?mode=10&name="
101            ok = xbmcplugin.addDirectoryItem(handle = int(sys.argv[1]), url = u, listitem = listitem, isFolder = True)
102    
103          xbmcplugin.endOfDirectory(int(sys.argv[1]))          xbmcplugin.endOfDirectory(int(sys.argv[1]))
104    
105    
106  def buildList(url,title):  def buildList(url,title, endlist=True):
107          print '[TODIC]:'+str(url)                  print '[TODIC]:'+str(url)        
         link = open_url(url)  
         ty=re.compile('<meta type=\'(.+?)\'').findall(link)  
         print '[TOD]'+str(ty[0])  
         m=re.compile('<title>(.+?)</title><url>(.+?)</url><cover>(.+?)</cover>').findall(link)  
         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)  
         xbmcplugin.endOfDirectory(int(sys.argv[1]))  
108    
 def buildSubList(url,title):  
         print '[TODIC]:'+str(url)  
109          link = open_url(url)          link = open_url(url)
110          m=re.compile('<title>(.+?)</title><url>(.+?)</url><cover>(.+?)</cover>').findall(link)          doc = parseString(link)
111          for name,url,thumb in m:          ty = doc.getElementsByTagName("meta")[0].getAttribute("type")
112                  listitem = xbmcgui.ListItem(label = name, iconImage = 'DefaultFolder.png', thumbnailImage = thumb)          print '[TODIC]'+str(ty)
113                  u = sys.argv[0] + "?mode=50&name=" + urllib.quote_plus(name) + "&url=" + urllib.quote_plus(url)  
114                  ok = xbmcplugin.addDirectoryItem(handle = int(sys.argv[1]), url = u, listitem = listitem, isFolder = False)          if ty == 'clipList':
115          xbmcplugin.endOfDirectory(int(sys.argv[1]))                  mode = '50'
116                    folder = False
117            else:
118                    mode = '1'
119                    folder = True
120    
121    
122            entries = doc.getElementsByTagName("entry")
123            l=len(entries)
124            description = ''
125            for entry in entries:
126                    name =  getText( entry.getElementsByTagName("title") )
127                    url =  getText( entry.getElementsByTagName("url") )
128                    thumb = getText( entry.getElementsByTagName("cover") )
129                    description = getText( entry.getElementsByTagName("description") )
130                    playcount = getText( entry.getElementsByTagName("playcount") )
131    
132                    name = name.encode('latin-1')
133                    description = description.encode('latin-1')
134    
135    ##              print "name:" + name
136    #               print "url:" + url
137    #               print "thumb:" + thumb
138    #               print "description:" + description
139    
140    
141                    listitem = xbmcgui.ListItem(label = name, label2='test', iconImage = 'DefaultFolder.png', thumbnailImage = thumb)
142                    listitem.setProperty('Fanart_Image', fanartImage)
143                    if mode == '50':
144                            infoLabels = {}
145                            infoLabels['title'] = name
146                            infoLabels['plot'] = description
147                            infoLabels['playcount'] = playcount
148                            listitem.setInfo('video', infoLabels)
149    
150                    u = sys.argv[0] + "?mode=" + urllib.quote(mode) + "&name=" + urllib.quote(name) + "&url=" + urllib.quote(url)
151                    ok = xbmcplugin.addDirectoryItem(handle = int(sys.argv[1]), url = u, listitem = listitem, isFolder = folder, totalItems = l)
152    
153            if (endlist == True):  
154                    xbmcplugin.endOfDirectory(int(sys.argv[1]))
155    
156    
157    
158    
159  def play_video(url, name):  def play_video(url, name):
160          link = open_url(url)          xml = open_url(url)
161          match=re.compile('<url>(.+?)</url>').findall(link)  
162          url = match[0]          doc = parseString(xml)
163            url = getText( doc.getElementsByTagName("url") )
164    
165          print '[TODIC]:'+str(url)          print '[TODIC]:'+str(url)
166          image = xbmc.getInfoImage( 'ListItem.Thumb' )          image = xbmc.getInfoImage( 'ListItem.Thumb' )
167          listitem = xbmcgui.ListItem(label = name , iconImage = 'DefaultVideo.png', thumbnailImage = image)          listitem = xbmcgui.ListItem(label = name , iconImage = 'DefaultVideo.png', thumbnailImage = image)
 #       listitem = xbmcgui.ListItem(label = name , iconImage = 'DefaultVideo.png', thumbnailImage = 'DefaultVideo.png')  
168          listitem.setInfo( type = "Video", infoLabels={ "Title": name } )          listitem.setInfo( type = "Video", infoLabels={ "Title": name } )
169          xbmc.Player(xbmc.PLAYER_CORE_AUTO).play(str(url), listitem)  
170          xbmc.sleep(200)          player = TodicPlayer(xbmc.PLAYER_CORE_AUTO)
171            player.play(str(url), listitem)
172    #       player.callbackLoop()
173    
174    
175    
176    def search():
177            search = getUserInput("Todic Søgning")
178    
179            if (search != None and search != ""):
180                    url = __backend__ + "&action=search&search=" + urllib.quote_plus(search)
181    
182                    #print "[TODIC] Search start: " + search
183                    #print "[TODIC] Search url: " + url
184    
185                    buildList(url, "søgning")
186    
187            
188    
189    
190                    
191    #=================================== Tool Box =======================================
192    # shows a more userfriendly notification
193    def showMessage(heading, message):
194            duration = 15*1000
195            xbmc.executebuiltin('XBMC.Notification("%s", "%s", %s)' % ( heading, message, duration) )
196    
197    
198    # raise a keyboard for user input
199    def getUserInput(title = "Input", default="", hidden=False):
200            result = None
201    
202            # Fix for when this functions is called with default=None
203            if not default:
204                    default = ""
205                            
206            keyboard = xbmc.Keyboard(default, title)
207            keyboard.setHiddenInput(hidden)
208            keyboard.doModal()
209                    
210            if keyboard.isConfirmed():
211                    result = keyboard.getText()
212                    
213            return result
214    
215    
216  def get_params():  def get_params():
# Line 95  def get_params(): Line 230  def get_params():
230                                  param[splitparams[0]]=splitparams[1]                                                                      param[splitparams[0]]=splitparams[1]                                    
231          return param          return param
232    
 params = get_params()  
 url = None  
 name = None  
 mode = None  
233    
234  params = get_params()  params = get_params()
235  url = None  url = None
# Line 118  try: Line 249  try:
249  except:  except:
250          pass          pass
251    
252    if url == 'refresh':
253            xbmc.output("[tvserver] Container.Refresh")
254            xbmc.executebuiltin("Container.Refresh")
255            
256    
257  if mode == None:  elif mode == None:
258          #build main menu          #build main menu
259          rootMenu()          rootMenu()
260                
# Line 127  elif mode == 1: Line 262  elif mode == 1:
262          #build list of movie starting letters          #build list of movie starting letters
263          buildList(url, name)          buildList(url, name)
264    
265  elif mode == 2:  elif mode == 10:
266          #build list of series                  search()
267          buildSubList(url, name)          
268    
269  elif mode == 50:  elif mode == 50:
270          play_video(url, name)          play_video(url, name)
271    
272    
273    
 xbmcplugin.endOfDirectory(int(sys.argv[1]))  
274    

Legend:
Removed from v.1629  
changed lines
  Added in v.1829

  ViewVC Help
Powered by ViewVC 1.1.20