/[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 1921 - (show annotations) (download) (as text)
Wed Jan 30 07:26:42 2013 UTC (11 years, 3 months ago) by torben
File MIME type: text/x-python
File size: 7504 byte(s)
remove json dependency and bump version number
1
2 # This Python file uses the following encoding: utf-8
3
4 '''
5 Todic plugin for XBMC
6 Version 0.0.7
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 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):
85 req = urllib2.Request(url)
86 content = urllib2.urlopen(req)
87 data = content.read()
88 content.close()
89 return data
90
91 def rootMenu():
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')
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
109 xbmcplugin.endOfDirectory(int(sys.argv[1]))
110
111
112 def buildList(url,title, endlist=True):
113 print '[TODIC]:'+str(url)
114
115 link = open_url(url)
116 doc = parseString(link)
117 ty = doc.getElementsByTagName("meta")[0].getAttribute("type")
118 print '[TODIC]'+str(ty)
119
120 if ty == 'clipList':
121 mode = '50'
122 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):
170 xml = open_url(url)
171 print 'TODIC url: ' + str(url)
172 print 'TODIC xml: '+ xml
173
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' )
193 listitem = xbmcgui.ListItem(label = name , iconImage = 'DefaultVideo.png', thumbnailImage = image)
194 listitem.setInfo( type = "Video", infoLabels={ "Title": name } )
195
196 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():
220 search = getUserInput("Todic Søgning")
221
222 if (search != None and search != ""):
223 url = __backend__ + "&action=search&search=" + urllib.quote_plus(search)
224
225 #print "[TODIC] Search start: " + search
226 #print "[TODIC] Search url: " + url
227
228 buildList(url, "søgning")
229
230
231
232
233
234 #=================================== Tool Box =======================================
235 # shows a more userfriendly notification
236 def showMessage(heading, message):
237 duration = 15*1000
238 xbmc.executebuiltin('XBMC.Notification("%s", "%s", %s)' % ( heading, message, duration) )
239
240
241 # raise a keyboard for user input
242 def getUserInput(title = "Input", default="", hidden=False):
243 result = None
244
245 # Fix for when this functions is called with default=None
246 if not default:
247 default = ""
248
249 keyboard = xbmc.Keyboard(default, title)
250 keyboard.setHiddenInput(hidden)
251 keyboard.doModal()
252
253 if keyboard.isConfirmed():
254 result = keyboard.getText()
255
256 return result
257
258
259 def get_params():
260 param=[]
261 paramstring=sys.argv[2]
262 if len(paramstring)>=2:
263 params=sys.argv[2]
264 cleanedparams=params.replace('?','')
265 if (params[len(params)-1]=='/'):
266 params=params[0:len(params)-2]
267 pairsofparams=cleanedparams.split('&')
268 param={}
269 for i in range(len(pairsofparams)):
270 splitparams={}
271 splitparams=pairsofparams[i].split('=')
272 if (len(splitparams))==2:
273 param[splitparams[0]]=splitparams[1]
274 return param
275
276
277 params = get_params()
278 url = None
279 name = None
280 mode = None
281
282 try:
283 url = urllib.unquote_plus(params["url"])
284 except:
285 pass
286 try:
287 name = urllib.unquote_plus(params["name"])
288 except:
289 pass
290 try:
291 mode = int(params["mode"])
292 except:
293 pass
294
295 if url == 'refresh':
296 xbmc.output("[tvserver] Container.Refresh")
297 xbmc.executebuiltin("Container.Refresh")
298
299
300 elif mode == None:
301 #build main menu
302 rootMenu()
303
304 elif mode == 1:
305 #build list of movie starting letters
306 buildList(url, name)
307
308 elif mode == 10:
309 search()
310
311
312 elif mode == 50:
313 play_video(url, name)

  ViewVC Help
Powered by ViewVC 1.1.20