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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1678 - (hide annotations) (download) (as text)
Mon Jan 23 17:31:45 2012 UTC (12 years, 4 months ago) by torben
File MIME type: text/x-python
File size: 6189 byte(s)
switch to xml based parser
1 torben 1678
2 torben 1677 # This Python file uses the following encoding: utf-8
3    
4 torben 1629 '''
5     Todic plugin for XBMC
6     Version 0.0.2
7     '''
8    
9     import sys
10     import cgi as urlparse
11 torben 1648 import os
12 torben 1629
13 torben 1648
14 torben 1629 import xbmc
15     import xbmcaddon
16     import xbmcgui
17     import xbmcplugin
18     import urllib
19 torben 1678 import urllib2
20 torben 1629
21 torben 1678 from xml.dom.minidom import parseString
22    
23 torben 1629 __addon__ = xbmcaddon.Addon(id='plugin.video.todic')
24     __key__ = __addon__.getSetting('xbmckey').lower()
25     __backend__ = "http://todic.dk/xbmc.php?xbmckey=" + __key__
26 torben 1648 fanartImage = os.path.join(__addon__.getAddonInfo('path'), 'fanart.jpg')
27 torben 1629
28 torben 1676
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 torben 1678 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 torben 1676
68 torben 1678 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 torben 1676
77 torben 1678
78 torben 1629 def open_url(url):
79     req = urllib2.Request(url)
80     content = urllib2.urlopen(req)
81     data = content.read()
82     content.close()
83     return data
84    
85     def rootMenu():
86 torben 1648
87 torben 1659 buildList(__backend__, "", False) # call default list
88 torben 1631
89 torben 1649 # Adde xtra items to root menu
90 torben 1640 listitem = xbmcgui.ListItem(label = "Søg film ...", iconImage = 'DefaultFolder.png', thumbnailImage = 'DefaultFolder.png')
91 torben 1648 listitem.setProperty('Fanart_Image', fanartImage)
92    
93 torben 1649 u = sys.argv[0] + "?mode=10&name="
94     ok = xbmcplugin.addDirectoryItem(handle = int(sys.argv[1]), url = u, listitem = listitem, isFolder = True)
95 torben 1631
96 torben 1629 xbmcplugin.endOfDirectory(int(sys.argv[1]))
97    
98    
99 torben 1659 def buildList(url,title, endlist=True):
100 torben 1629 print '[TODIC]:'+str(url)
101 torben 1678
102 torben 1629 link = open_url(url)
103 torben 1678 doc = parseString(link)
104     ty = doc.getElementsByTagName("meta")[0].getAttribute("type")
105     print '[TODIC]'+str(ty)
106 torben 1646
107 torben 1678 if ty == 'clipList':
108 torben 1646 mode = '50'
109     folder = False
110     else:
111     mode = '1'
112     folder = True
113    
114 torben 1678 entries = doc.getElementsByTagName("entry")
115     l=len(entries)
116     description = ''
117     for entry in entries:
118     name = getText( entry.getElementsByTagName("title") )
119     url = getText( entry.getElementsByTagName("url") )
120     thumb = getText( entry.getElementsByTagName("cover") )
121     description = getText( entry.getElementsByTagName("description") )
122 torben 1647
123 torben 1678 name = name.encode('latin-1')
124     description = description.encode('latin-1')
125    
126     ## print "name:" + name
127     # print "url:" + url
128     # print "thumb:" + thumb
129     # print "description:" + description
130    
131    
132 torben 1647 listitem = xbmcgui.ListItem(label = name, label2='test', iconImage = 'DefaultFolder.png', thumbnailImage = thumb)
133 torben 1648 listitem.setProperty('Fanart_Image', fanartImage)
134 torben 1650 if mode == '50':
135     infoLabels = {}
136     infoLabels['title'] = name
137     infoLabels['plot'] = description
138     listitem.setInfo('video', infoLabels)
139 torben 1648
140 torben 1678 u = sys.argv[0] + "?mode=" + urllib.quote(mode) + "&name=" + urllib.quote(name) + "&url=" + urllib.quote(url)
141 torben 1630 ok = xbmcplugin.addDirectoryItem(handle = int(sys.argv[1]), url = u, listitem = listitem, isFolder = folder, totalItems = l)
142 torben 1629
143 torben 1659 if (endlist == True):
144     xbmcplugin.endOfDirectory(int(sys.argv[1]))
145 torben 1629
146    
147    
148 torben 1659
149 torben 1629 def play_video(url, name):
150 torben 1678 xml = open_url(url)
151    
152     doc = parseString(xml)
153     url = getText( doc.getElementsByTagName("url") )
154    
155 torben 1629 print '[TODIC]:'+str(url)
156     image = xbmc.getInfoImage( 'ListItem.Thumb' )
157     listitem = xbmcgui.ListItem(label = name , iconImage = 'DefaultVideo.png', thumbnailImage = image)
158     listitem.setInfo( type = "Video", infoLabels={ "Title": name } )
159    
160 torben 1676 player = TodicPlayer(xbmc.PLAYER_CORE_AUTO)
161     player.play(str(url), listitem)
162 torben 1678 # player.callbackLoop()
163 torben 1676
164    
165    
166 torben 1631 def search():
167     search = getUserInput("Todic Søgning")
168 torben 1629
169 torben 1634 if (search != None and search != ""):
170     url = __backend__ + "&action=search&search=" + urllib.quote_plus(search)
171 torben 1631
172 torben 1634 #print "[TODIC] Search start: " + search
173     #print "[TODIC] Search url: " + url
174 torben 1631
175 torben 1646 buildList(url, "søgning")
176 torben 1631
177    
178    
179    
180    
181     #=================================== Tool Box =======================================
182     # shows a more userfriendly notification
183     def showMessage(heading, message):
184     duration = 15*1000
185     xbmc.executebuiltin('XBMC.Notification("%s", "%s", %s)' % ( heading, message, duration) )
186    
187    
188     # raise a keyboard for user input
189     def getUserInput(title = "Input", default="", hidden=False):
190     result = None
191    
192     # Fix for when this functions is called with default=None
193     if not default:
194     default = ""
195    
196     keyboard = xbmc.Keyboard(default, title)
197     keyboard.setHiddenInput(hidden)
198     keyboard.doModal()
199    
200     if keyboard.isConfirmed():
201     result = keyboard.getText()
202    
203     return result
204    
205    
206 torben 1629 def get_params():
207     param=[]
208     paramstring=sys.argv[2]
209     if len(paramstring)>=2:
210     params=sys.argv[2]
211     cleanedparams=params.replace('?','')
212     if (params[len(params)-1]=='/'):
213     params=params[0:len(params)-2]
214     pairsofparams=cleanedparams.split('&')
215     param={}
216     for i in range(len(pairsofparams)):
217     splitparams={}
218     splitparams=pairsofparams[i].split('=')
219     if (len(splitparams))==2:
220     param[splitparams[0]]=splitparams[1]
221     return param
222    
223     params = get_params()
224     url = None
225     name = None
226     mode = None
227    
228     params = get_params()
229     url = None
230     name = None
231     mode = None
232    
233     try:
234     url = urllib.unquote_plus(params["url"])
235     except:
236     pass
237     try:
238     name = urllib.unquote_plus(params["name"])
239     except:
240     pass
241     try:
242     mode = int(params["mode"])
243     except:
244     pass
245    
246    
247     if mode == None:
248     #build main menu
249     rootMenu()
250    
251     elif mode == 1:
252     #build list of movie starting letters
253     buildList(url, name)
254    
255 torben 1631 elif mode == 10:
256     search()
257    
258    
259 torben 1629 elif mode == 50:
260     play_video(url, name)

  ViewVC Help
Powered by ViewVC 1.1.20