/[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 1640 by torben, Mon Nov 28 19:02:04 2011 UTC revision 1914 by torben, Thu Jan 17 18:44:47 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)  
92    
93            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')          listitem = xbmcgui.ListItem(label = "Søg film ...", iconImage = 'DefaultFolder.png', thumbnailImage = 'DefaultFolder.png')
104          u = sys.argv[0] + "?mode=10&name=" + urllib.quote_plus(name)          listitem.setProperty('Fanart_Image', fanartImage)
105          ok = xbmcplugin.addDirectoryItem(handle = int(sys.argv[1]), url = u, listitem = listitem, isFolder = True, totalItems = l)  
106            u = sys.argv[0] + "?mode=10&name="
107            ok = xbmcplugin.addDirectoryItem(handle = int(sys.argv[1]), url = u, listitem = listitem, isFolder = True)
108    
109          xbmcplugin.endOfDirectory(int(sys.argv[1]))          xbmcplugin.endOfDirectory(int(sys.argv[1]))
110    
111    
112  def buildList(url,title):  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          ty=re.compile('<meta type=\'(.+?)\'').findall(link)          doc = parseString(link)
117          print '[TOD]'+str(ty[0])          ty = doc.getElementsByTagName("meta")[0].getAttribute("type")
118          m=re.compile('<title>(.+?)</title><url>(.+?)</url><cover>(.+?)</cover>').findall(link)          print '[TODIC]'+str(ty)
119          l=len(m)  
120          for name,url,thumb in m:          if ty == 'clipList':
121                  if ty[0] == 'clipList':                  mode = '50'
122                          mode = '50'                  folder = False
123                          folder = False          else:
124                  else:                  mode = '1'
125                          mode = '2'                  folder = True
126                          folder = True  
127                            
128                  listitem = xbmcgui.ListItem(label = name, iconImage = 'DefaultFolder.png', thumbnailImage = thumb)          entries = doc.getElementsByTagName("entry")
129                  u = sys.argv[0] + "?mode=" + urllib.quote_plus(mode) + "&name=" + urllib.quote_plus(name) + "&url=" + urllib.quote_plus(url)          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)                  ok = xbmcplugin.addDirectoryItem(handle = int(sys.argv[1]), url = u, listitem = listitem, isFolder = folder, totalItems = l)
         xbmcplugin.endOfDirectory(int(sys.argv[1]))  
162    
163  def buildSubList(url,title):          if (endlist == True):  
164          print '[TODIC]:'+str(url)                  xbmcplugin.endOfDirectory(int(sys.argv[1]))
165          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]))  
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            print '[TODIC] subs: '+str(subtitleurl)
181            if len(subtitleurl) > 0:
182                    subtitles = open_url(subtitleurl)
183                    SaveFile(subtitlesfile, subtitles)
184                    print 'TODIC downloaded subtitles'
185    
186    
187    
188          image = xbmc.getInfoImage( 'ListItem.Thumb' )          image = xbmc.getInfoImage( 'ListItem.Thumb' )
189          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')  
190          listitem.setInfo( type = "Video", infoLabels={ "Title": name } )          listitem.setInfo( type = "Video", infoLabels={ "Title": name } )
191          xbmc.Player(xbmc.PLAYER_CORE_AUTO).play(str(url), listitem)  
192          xbmc.sleep(200)          player = TodicPlayer(xbmc.PLAYER_CORE_AUTO)
193            player.play(str(url), listitem)
194    
195            #kan ikke loade subtitles hvis foerend playeren koerer
196            count = 0
197            while not xbmc.Player().isPlaying():
198                    xbmc.sleep(500)
199                    count += 1
200                    if count > 10:
201                            break
202    
203    
204            if xbmc.Player().isPlaying():
205                    if os.path.isfile(subtitlesfile):
206                            player.setSubtitles(subtitlesfile)
207                            print 'TODIC started subtitles'
208    
209    #       player.callbackLoop()
210    
211    
212    
213  def search():  def search():
214          search = getUserInput("Todic Søgning")          search = getUserInput("Todic Søgning")
# Line 94  def search(): Line 219  def search():
219                  #print "[TODIC] Search start: " + search                  #print "[TODIC] Search start: " + search
220                  #print "[TODIC] Search url: " + url                  #print "[TODIC] Search url: " + url
221    
222                  buildSubList(url, "søgning")                  buildList(url, "søgning")
223    
224                    
225    
# Line 142  def get_params(): Line 267  def get_params():
267                                  param[splitparams[0]]=splitparams[1]                                                                      param[splitparams[0]]=splitparams[1]                                    
268          return param          return param
269    
 params = get_params()  
 url = None  
 name = None  
 mode = None  
270    
271  params = get_params()  params = get_params()
272  url = None  url = None
# Line 165  try: Line 286  try:
286  except:  except:
287          pass          pass
288    
289    if url == 'refresh':
290            xbmc.output("[tvserver] Container.Refresh")
291            xbmc.executebuiltin("Container.Refresh")
292            
293    
294  if mode == None:  elif mode == None:
295          #build main menu          #build main menu
296          rootMenu()          rootMenu()
297                
# Line 174  elif mode == 1: Line 299  elif mode == 1:
299          #build list of movie starting letters          #build list of movie starting letters
300          buildList(url, name)          buildList(url, name)
301    
 elif mode == 2:  
         #build list of series          
         buildSubList(url, name)  
   
302  elif mode == 10:  elif mode == 10:
303          search()          search()
304                    
# Line 187  elif mode == 50: Line 308  elif mode == 50:
308    
309    
310    
 # xbmcplugin.endOfDirectory(int(sys.argv[1]))  
311    

Legend:
Removed from v.1640  
changed lines
  Added in v.1914

  ViewVC Help
Powered by ViewVC 1.1.20