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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1678 - (show annotations) (download) (as text)
Mon Jan 23 17:31:45 2012 UTC (12 years, 3 months ago) by torben
File MIME type: text/x-python
File size: 6189 byte(s)
switch to xml based parser
1
2 # This Python file uses the following encoding: utf-8
3
4 '''
5 Todic plugin for XBMC
6 Version 0.0.2
7 '''
8
9 import sys
10 import cgi as urlparse
11 import os
12
13
14 import xbmc
15 import xbmcaddon
16 import xbmcgui
17 import xbmcplugin
18 import urllib
19 import urllib2
20
21 from xml.dom.minidom import parseString
22
23 __addon__ = xbmcaddon.Addon(id='plugin.video.todic')
24 __key__ = __addon__.getSetting('xbmckey').lower()
25 __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):
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
87 buildList(__backend__, "", False) # call default list
88
89 # Adde xtra items to root menu
90 listitem = xbmcgui.ListItem(label = "Søg film ...", iconImage = 'DefaultFolder.png', thumbnailImage = 'DefaultFolder.png')
91 listitem.setProperty('Fanart_Image', fanartImage)
92
93 u = sys.argv[0] + "?mode=10&name="
94 ok = xbmcplugin.addDirectoryItem(handle = int(sys.argv[1]), url = u, listitem = listitem, isFolder = True)
95
96 xbmcplugin.endOfDirectory(int(sys.argv[1]))
97
98
99 def buildList(url,title, endlist=True):
100 print '[TODIC]:'+str(url)
101
102 link = open_url(url)
103 doc = parseString(link)
104 ty = doc.getElementsByTagName("meta")[0].getAttribute("type")
105 print '[TODIC]'+str(ty)
106
107 if ty == 'clipList':
108 mode = '50'
109 folder = False
110 else:
111 mode = '1'
112 folder = True
113
114 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
123 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 listitem = xbmcgui.ListItem(label = name, label2='test', iconImage = 'DefaultFolder.png', thumbnailImage = thumb)
133 listitem.setProperty('Fanart_Image', fanartImage)
134 if mode == '50':
135 infoLabels = {}
136 infoLabels['title'] = name
137 infoLabels['plot'] = description
138 listitem.setInfo('video', infoLabels)
139
140 u = sys.argv[0] + "?mode=" + urllib.quote(mode) + "&name=" + urllib.quote(name) + "&url=" + urllib.quote(url)
141 ok = xbmcplugin.addDirectoryItem(handle = int(sys.argv[1]), url = u, listitem = listitem, isFolder = folder, totalItems = l)
142
143 if (endlist == True):
144 xbmcplugin.endOfDirectory(int(sys.argv[1]))
145
146
147
148
149 def play_video(url, name):
150 xml = open_url(url)
151
152 doc = parseString(xml)
153 url = getText( doc.getElementsByTagName("url") )
154
155 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 player = TodicPlayer(xbmc.PLAYER_CORE_AUTO)
161 player.play(str(url), listitem)
162 # player.callbackLoop()
163
164
165
166 def search():
167 search = getUserInput("Todic Søgning")
168
169 if (search != None and search != ""):
170 url = __backend__ + "&action=search&search=" + urllib.quote_plus(search)
171
172 #print "[TODIC] Search start: " + search
173 #print "[TODIC] Search url: " + url
174
175 buildList(url, "søgning")
176
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 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 elif mode == 10:
256 search()
257
258
259 elif mode == 50:
260 play_video(url, name)

  ViewVC Help
Powered by ViewVC 1.1.20