/[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 1633 by torben, Sun Nov 27 13:03:36 2011 UTC revision 1917 by torben, Fri Jan 18 11:36:20 2013 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    datapath = xbmc.translatePath('special://profile/addon_data/plugin.video.todic/')
28    
29    
30    class TodicPlayer(xbmc.Player):
31            def __init__(self, *args, **kwargs):
32                    #xbmc.Player.__init__(selv,*args,**kwargs)
33                    xbmc.Player.__init__(self, xbmc.PLAYER_CORE_MPLAYER )
34                    self.stopped = False
35                    self.started = False
36                    print "[TodicPlayer] init"
37    
38    #       @catchall      
39            def onPlayBackStarted(self):
40                    self.started = True
41                    print "[TodicPlayer] : started"
42    #               super.onPlayBackStarted()
43    
44            def onPlayBackStopped(self):
45                    self.stopped = True
46                    print "[TodicPlayer] : stopped"
47    
48            def onPlayBackEnded(self):
49                    self.stopped = True
50                    print "[TodicPlayer] : ended"
51    
52            def callbackLoop(self):
53                    print "[Todic] startLoop"
54                    while (self.stopped == False):
55                            if (self.started == True ):
56                                    print "[todic] " + str(self.getTime())
57                            xbmc.sleep(5000)
58                            
59    
60    def getText2(nodelist):
61            rc = []
62            for node in nodelist:
63                    if node.nodeType == node.TEXT_NODE:
64                            rc.append(node.data)
65                    else:
66                            rc.append( getText(node.childNodes) )
67            return ''.join(rc)
68    
69    def getText(nodelist):
70            if nodelist.length == 0:
71                    return ''
72            else:
73                    if nodelist[0].childNodes.length == 0:
74                            return ''
75                    else:
76                            return nodelist[0].childNodes[0].nodeValue
77    
78    def SaveFile(path, data):
79            file = open(path,'w')
80            file.write(data)
81            file.close()
82    
83    
84  def open_url(url):  def open_url(url):
85          req = urllib2.Request(url)          req = urllib2.Request(url)
# Line 25  def open_url(url): Line 89  def open_url(url):
89          return data          return data
90    
91  def rootMenu():  def rootMenu():
         link = open_url(__backend__)  
         m=re.compile('<title>(.+?)</title><url>(.+?)</url>').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)  
92    
93          xbmcplugin.endOfDirectory(int(sys.argv[1]))          msg = open_url(__backend__ + "&action=messages")
94            msg = msg.strip()
95    
96            if msg != "":
97                    dialog = xbmcgui.Dialog()              
98                    dialog.ok('XBMC Todic', msg)
99    
100            buildList(__backend__, "", False) # call default list
101    
102            # Adde xtra items to root menu
103            listitem = xbmcgui.ListItem(label = "Søg film ...", iconImage = 'DefaultFolder.png', thumbnailImage = 'DefaultFolder.png')
104            listitem.setProperty('Fanart_Image', fanartImage)
105    
106            u = sys.argv[0] + "?mode=10&name="
107            ok = xbmcplugin.addDirectoryItem(handle = int(sys.argv[1]), url = u, listitem = listitem, isFolder = True)
108    
 def buildList(url,title):  
         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)  
         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)  
109          xbmcplugin.endOfDirectory(int(sys.argv[1]))          xbmcplugin.endOfDirectory(int(sys.argv[1]))
110    
111  def buildSubList(url,title):  
112    def buildList(url,title, endlist=True):
113          print '[TODIC]:'+str(url)          print '[TODIC]:'+str(url)
114    
115          link = open_url(url)          link = open_url(url)
116          m=re.compile('<title>(.+?)</title><url>(.+?)</url><cover>(.+?)</cover>').findall(link)          doc = parseString(link)
117          l = len(m)          ty = doc.getElementsByTagName("meta")[0].getAttribute("type")
118          for name,url,thumb in m:          print '[TODIC]'+str(ty)
119                  listitem = xbmcgui.ListItem(label = name, iconImage = 'DefaultFolder.png', thumbnailImage = thumb)  
120                  u = sys.argv[0] + "?mode=50&name=" + urllib.quote_plus(name) + "&url=" + urllib.quote_plus(url)          if ty == 'clipList':
121                  ok = xbmcplugin.addDirectoryItem(handle = int(sys.argv[1]), url = u, listitem = listitem, isFolder = False, totalItems = l)                  mode = '50'
122          xbmcplugin.endOfDirectory(int(sys.argv[1]))                  folder = False
123            else:
124                    mode = '1'
125                    folder = True
126    
127    
128            entries = doc.getElementsByTagName("entry")
129            l=len(entries)
130            description = ''
131            for entry in entries:
132                    name =  getText( entry.getElementsByTagName("title") )
133                    url =  getText( entry.getElementsByTagName("url") )
134                    thumb = getText( entry.getElementsByTagName("cover") )
135                    description = getText( entry.getElementsByTagName("description") )
136                    playcount = getText( entry.getElementsByTagName("playcount") )
137    
138                    if playcount == '':
139                            playcount = '0'
140                    playcount = int(playcount)
141    
142                    name = name.encode('latin-1')
143                    description = description.encode('latin-1')
144    
145    ##              print "name:" + name
146    #               print "url:" + url
147    #               print "thumb:" + thumb
148    #               print "description:" + description
149    
150    
151                    listitem = xbmcgui.ListItem(label = name, label2='test', iconImage = 'DefaultFolder.png', thumbnailImage = thumb)
152                    listitem.setProperty('Fanart_Image', fanartImage)
153                    if mode == '50':
154                            infoLabels = {}
155                            infoLabels['title'] = name
156                            infoLabels['plot'] = description
157                            infoLabels['playcount'] = playcount
158                            listitem.setInfo('video', infoLabels)
159    
160                    u = sys.argv[0] + "?mode=" + urllib.quote(mode) + "&name=" + urllib.quote(name) + "&url=" + urllib.quote(url)
161                    ok = xbmcplugin.addDirectoryItem(handle = int(sys.argv[1]), url = u, listitem = listitem, isFolder = folder, totalItems = l)
162    
163            if (endlist == True):  
164                    xbmcplugin.endOfDirectory(int(sys.argv[1]))
165    
166    
167    
168    
169  def play_video(url, name):  def play_video(url, name):
170          link = open_url(url)          xml = open_url(url)
171          match=re.compile('<url>(.+?)</url>').findall(link)          print 'TODIC url: ' + str(url)
172          url = match[0]          print 'TODIC xml: '+ xml
173          print '[TODIC]:'+str(url)  
174            doc = parseString(xml)
175            url = getText( doc.getElementsByTagName("url") )
176    
177            subtitleurl = getText( doc.getElementsByTagName("subtitles") )
178            subtitlesfile = os.path.join(datapath,'temp.srt')
179    
180            #if old srt file exists delete it first
181            if os.path.isfile(subtitlesfile):
182                    os.unlink(subtitlesfile)
183    
184            print '[TODIC] subs: '+str(subtitleurl)
185            if len(subtitleurl) > 0:
186                    subtitles = open_url(subtitleurl)
187                    SaveFile(subtitlesfile, subtitles)
188                    print 'TODIC downloaded subtitles'
189    
190    
191    
192          image = xbmc.getInfoImage( 'ListItem.Thumb' )          image = xbmc.getInfoImage( 'ListItem.Thumb' )
193          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')  
194          listitem.setInfo( type = "Video", infoLabels={ "Title": name } )          listitem.setInfo( type = "Video", infoLabels={ "Title": name } )
195          xbmc.Player(xbmc.PLAYER_CORE_AUTO).play(str(url), listitem)  
196          xbmc.sleep(200)          player = TodicPlayer(xbmc.PLAYER_CORE_AUTO)
197            player.play(str(url), listitem)
198    
199            #kan ikke loade subtitles hvis foerend playeren koerer
200            count = 0
201            while not xbmc.Player().isPlaying():
202                    xbmc.sleep(500)
203                    count += 1
204                    if count > 10:
205                            break
206    
207    
208            if xbmc.Player().isPlaying():
209                    if os.path.isfile(subtitlesfile):
210                            player.setSubtitles(subtitlesfile)
211                            print 'TODIC started subtitles'
212                    else:
213                            player.disableSubtitles()
214    
215    #       player.callbackLoop()
216    
217    
218    
219  def search():  def search():
220          search = getUserInput("Todic Søgning")          search = getUserInput("Todic Søgning")
221    
222          url = __backend__ + "&action=search&search=" + urllib.quote_plus(search)          if (search != None and search != ""):
223                    url = __backend__ + "&action=search&search=" + urllib.quote_plus(search)
224    
225          #print "[TODIC] Search start: " + search                  #print "[TODIC] Search start: " + search
226          #print "[TODIC] Search url: " + url                  #print "[TODIC] Search url: " + url
227    
228          buildSubList(url, "søgning")                  buildList(url, "søgning")
229    
230                    
231    
# Line 141  def get_params(): Line 273  def get_params():
273                                  param[splitparams[0]]=splitparams[1]                                                                      param[splitparams[0]]=splitparams[1]                                    
274          return param          return param
275    
 params = get_params()  
 url = None  
 name = None  
 mode = None  
276    
277  params = get_params()  params = get_params()
278  url = None  url = None
# Line 164  try: Line 292  try:
292  except:  except:
293          pass          pass
294    
295    if url == 'refresh':
296            xbmc.output("[tvserver] Container.Refresh")
297            xbmc.executebuiltin("Container.Refresh")
298            
299    
300  if mode == None:  elif mode == None:
301          #build main menu          #build main menu
302          rootMenu()          rootMenu()
303                
# Line 173  elif mode == 1: Line 305  elif mode == 1:
305          #build list of movie starting letters          #build list of movie starting letters
306          buildList(url, name)          buildList(url, name)
307    
 elif mode == 2:  
         #build list of series          
         buildSubList(url, name)  
   
308  elif mode == 10:  elif mode == 10:
309          search()          search()
310                    
# Line 186  elif mode == 50: Line 314  elif mode == 50:
314    
315    
316    
 # xbmcplugin.endOfDirectory(int(sys.argv[1]))  
317    

Legend:
Removed from v.1633  
changed lines
  Added in v.1917

  ViewVC Help
Powered by ViewVC 1.1.20