/[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 1630 by torben, Sun Nov 27 11:05:43 2011 UTC revision 1830 by torben, Sun Aug 19 20:41:20 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          l = len(m)          msg = msg.strip()
89          for name,url in m:  
90                  listitem = xbmcgui.ListItem(label = name, iconImage = 'DefaultFolder.png', thumbnailImage = 'DefaultFolder.png')          if msg != "":
91                  u = sys.argv[0] + "?mode=1&name=" + urllib.quote_plus(name) + "&url=" + urllib.quote_plus(url)                  dialog = xbmcgui.Dialog()              
92                  ok = xbmcplugin.addDirectoryItem(handle = int(sys.argv[1]), url = u, listitem = listitem, isFolder = True, totalItems = l)                  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)        
108    
109          link = open_url(url)          link = open_url(url)
110          ty=re.compile('<meta type=\'(.+?)\'').findall(link)          doc = parseString(link)
111          print '[TOD]'+str(ty[0])          ty = doc.getElementsByTagName("meta")[0].getAttribute("type")
112          m=re.compile('<title>(.+?)</title><url>(.+?)</url><cover>(.+?)</cover>').findall(link)          print '[TODIC]'+str(ty)
113          l=len(m)  
114          for name,url,thumb in m:          if ty == 'clipList':
115                  if ty[0] == 'clipList':                  mode = '50'
116                          mode = '50'                  folder = False
117                          folder = False          else:
118                  else:                  mode = '1'
119                          mode = '2'                  folder = True
120                          folder = True  
121                            
122                  listitem = xbmcgui.ListItem(label = name, iconImage = 'DefaultFolder.png', thumbnailImage = thumb)          entries = doc.getElementsByTagName("entry")
123                  u = sys.argv[0] + "?mode=" + urllib.quote_plus(mode) + "&name=" + urllib.quote_plus(name) + "&url=" + urllib.quote_plus(url)          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                    if playcount == '':
133                            playcount = '0'
134                    playcount = int(playcount)
135    
136                    name = name.encode('latin-1')
137                    description = description.encode('latin-1')
138    
139    ##              print "name:" + name
140    #               print "url:" + url
141    #               print "thumb:" + thumb
142    #               print "description:" + description
143    
144    
145                    listitem = xbmcgui.ListItem(label = name, label2='test', iconImage = 'DefaultFolder.png', thumbnailImage = thumb)
146                    listitem.setProperty('Fanart_Image', fanartImage)
147                    if mode == '50':
148                            infoLabels = {}
149                            infoLabels['title'] = name
150                            infoLabels['plot'] = description
151                            infoLabels['playcount'] = playcount
152                            listitem.setInfo('video', infoLabels)
153    
154                    u = sys.argv[0] + "?mode=" + urllib.quote(mode) + "&name=" + urllib.quote(name) + "&url=" + urllib.quote(url)
155                  ok = xbmcplugin.addDirectoryItem(handle = int(sys.argv[1]), url = u, listitem = listitem, isFolder = folder, totalItems = l)                  ok = xbmcplugin.addDirectoryItem(handle = int(sys.argv[1]), url = u, listitem = listitem, isFolder = folder, totalItems = l)
         xbmcplugin.endOfDirectory(int(sys.argv[1]))  
156    
157  def buildSubList(url,title):          if (endlist == True):  
158          print '[TODIC]:'+str(url)                  xbmcplugin.endOfDirectory(int(sys.argv[1]))
159          link = open_url(url)  
         m=re.compile('<title>(.+?)</title><url>(.+?)</url><cover>(.+?)</cover>').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]))  
160    
161    
162    
163  def play_video(url, name):  def play_video(url, name):
164          link = open_url(url)          xml = open_url(url)
165          match=re.compile('<url>(.+?)</url>').findall(link)  
166          url = match[0]          doc = parseString(xml)
167            url = getText( doc.getElementsByTagName("url") )
168    
169          print '[TODIC]:'+str(url)          print '[TODIC]:'+str(url)
170          image = xbmc.getInfoImage( 'ListItem.Thumb' )          image = xbmc.getInfoImage( 'ListItem.Thumb' )
171          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')  
172          listitem.setInfo( type = "Video", infoLabels={ "Title": name } )          listitem.setInfo( type = "Video", infoLabels={ "Title": name } )
173          xbmc.Player(xbmc.PLAYER_CORE_AUTO).play(str(url), listitem)  
174          xbmc.sleep(200)          player = TodicPlayer(xbmc.PLAYER_CORE_AUTO)
175            player.play(str(url), listitem)
176    #       player.callbackLoop()
177    
178    
179    
180    def search():
181            search = getUserInput("Todic Søgning")
182    
183            if (search != None and search != ""):
184                    url = __backend__ + "&action=search&search=" + urllib.quote_plus(search)
185    
186                    #print "[TODIC] Search start: " + search
187                    #print "[TODIC] Search url: " + url
188    
189                    buildList(url, "søgning")
190    
191            
192    
193    
194                    
195    #=================================== Tool Box =======================================
196    # shows a more userfriendly notification
197    def showMessage(heading, message):
198            duration = 15*1000
199            xbmc.executebuiltin('XBMC.Notification("%s", "%s", %s)' % ( heading, message, duration) )
200    
201    
202    # raise a keyboard for user input
203    def getUserInput(title = "Input", default="", hidden=False):
204            result = None
205    
206            # Fix for when this functions is called with default=None
207            if not default:
208                    default = ""
209                            
210            keyboard = xbmc.Keyboard(default, title)
211            keyboard.setHiddenInput(hidden)
212            keyboard.doModal()
213                    
214            if keyboard.isConfirmed():
215                    result = keyboard.getText()
216                    
217            return result
218    
219    
220  def get_params():  def get_params():
# Line 98  def get_params(): Line 234  def get_params():
234                                  param[splitparams[0]]=splitparams[1]                                                                      param[splitparams[0]]=splitparams[1]                                    
235          return param          return param
236    
 params = get_params()  
 url = None  
 name = None  
 mode = None  
237    
238  params = get_params()  params = get_params()
239  url = None  url = None
# Line 121  try: Line 253  try:
253  except:  except:
254          pass          pass
255    
256    if url == 'refresh':
257            xbmc.output("[tvserver] Container.Refresh")
258            xbmc.executebuiltin("Container.Refresh")
259            
260    
261  if mode == None:  elif mode == None:
262          #build main menu          #build main menu
263          rootMenu()          rootMenu()
264                
# Line 130  elif mode == 1: Line 266  elif mode == 1:
266          #build list of movie starting letters          #build list of movie starting letters
267          buildList(url, name)          buildList(url, name)
268    
269  elif mode == 2:  elif mode == 10:
270          #build list of series                  search()
271          buildSubList(url, name)          
272    
273  elif mode == 50:  elif mode == 50:
274          play_video(url, name)          play_video(url, name)
275    
276    
277    
 xbmcplugin.endOfDirectory(int(sys.argv[1]))  
278    

Legend:
Removed from v.1630  
changed lines
  Added in v.1830

  ViewVC Help
Powered by ViewVC 1.1.20