/[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 1829 - (show annotations) (download) (as text)
Sun Aug 19 17:22:41 2012 UTC (11 years, 9 months ago) by torben
File MIME type: text/x-python
File size: 6495 byte(s)
add playcount option to dirlist if it was in xml
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 msg = open_url(__backend__ + "&action=messages")
88 msg = msg.strip()
89
90 if msg != "":
91 dialog = xbmcgui.Dialog()
92 dialog.ok('XBMC Todic', msg)
93
94 buildList(__backend__, "", False) # call default list
95
96 # Adde xtra items to root menu
97 listitem = xbmcgui.ListItem(label = "Søg film ...", iconImage = 'DefaultFolder.png', thumbnailImage = 'DefaultFolder.png')
98 listitem.setProperty('Fanart_Image', fanartImage)
99
100 u = sys.argv[0] + "?mode=10&name="
101 ok = xbmcplugin.addDirectoryItem(handle = int(sys.argv[1]), url = u, listitem = listitem, isFolder = True)
102
103 xbmcplugin.endOfDirectory(int(sys.argv[1]))
104
105
106 def buildList(url,title, endlist=True):
107 print '[TODIC]:'+str(url)
108
109 link = open_url(url)
110 doc = parseString(link)
111 ty = doc.getElementsByTagName("meta")[0].getAttribute("type")
112 print '[TODIC]'+str(ty)
113
114 if ty == 'clipList':
115 mode = '50'
116 folder = False
117 else:
118 mode = '1'
119 folder = True
120
121
122 entries = doc.getElementsByTagName("entry")
123 l=len(entries)
124 description = ''
125 for entry in entries:
126 name = getText( entry.getElementsByTagName("title") )
127 url = getText( entry.getElementsByTagName("url") )
128 thumb = getText( entry.getElementsByTagName("cover") )
129 description = getText( entry.getElementsByTagName("description") )
130 playcount = getText( entry.getElementsByTagName("playcount") )
131
132 name = name.encode('latin-1')
133 description = description.encode('latin-1')
134
135 ## print "name:" + name
136 # print "url:" + url
137 # print "thumb:" + thumb
138 # print "description:" + description
139
140
141 listitem = xbmcgui.ListItem(label = name, label2='test', iconImage = 'DefaultFolder.png', thumbnailImage = thumb)
142 listitem.setProperty('Fanart_Image', fanartImage)
143 if mode == '50':
144 infoLabels = {}
145 infoLabels['title'] = name
146 infoLabels['plot'] = description
147 infoLabels['playcount'] = playcount
148 listitem.setInfo('video', infoLabels)
149
150 u = sys.argv[0] + "?mode=" + urllib.quote(mode) + "&name=" + urllib.quote(name) + "&url=" + urllib.quote(url)
151 ok = xbmcplugin.addDirectoryItem(handle = int(sys.argv[1]), url = u, listitem = listitem, isFolder = folder, totalItems = l)
152
153 if (endlist == True):
154 xbmcplugin.endOfDirectory(int(sys.argv[1]))
155
156
157
158
159 def play_video(url, name):
160 xml = open_url(url)
161
162 doc = parseString(xml)
163 url = getText( doc.getElementsByTagName("url") )
164
165 print '[TODIC]:'+str(url)
166 image = xbmc.getInfoImage( 'ListItem.Thumb' )
167 listitem = xbmcgui.ListItem(label = name , iconImage = 'DefaultVideo.png', thumbnailImage = image)
168 listitem.setInfo( type = "Video", infoLabels={ "Title": name } )
169
170 player = TodicPlayer(xbmc.PLAYER_CORE_AUTO)
171 player.play(str(url), listitem)
172 # player.callbackLoop()
173
174
175
176 def search():
177 search = getUserInput("Todic Søgning")
178
179 if (search != None and search != ""):
180 url = __backend__ + "&action=search&search=" + urllib.quote_plus(search)
181
182 #print "[TODIC] Search start: " + search
183 #print "[TODIC] Search url: " + url
184
185 buildList(url, "søgning")
186
187
188
189
190
191 #=================================== Tool Box =======================================
192 # shows a more userfriendly notification
193 def showMessage(heading, message):
194 duration = 15*1000
195 xbmc.executebuiltin('XBMC.Notification("%s", "%s", %s)' % ( heading, message, duration) )
196
197
198 # raise a keyboard for user input
199 def getUserInput(title = "Input", default="", hidden=False):
200 result = None
201
202 # Fix for when this functions is called with default=None
203 if not default:
204 default = ""
205
206 keyboard = xbmc.Keyboard(default, title)
207 keyboard.setHiddenInput(hidden)
208 keyboard.doModal()
209
210 if keyboard.isConfirmed():
211 result = keyboard.getText()
212
213 return result
214
215
216 def get_params():
217 param=[]
218 paramstring=sys.argv[2]
219 if len(paramstring)>=2:
220 params=sys.argv[2]
221 cleanedparams=params.replace('?','')
222 if (params[len(params)-1]=='/'):
223 params=params[0:len(params)-2]
224 pairsofparams=cleanedparams.split('&')
225 param={}
226 for i in range(len(pairsofparams)):
227 splitparams={}
228 splitparams=pairsofparams[i].split('=')
229 if (len(splitparams))==2:
230 param[splitparams[0]]=splitparams[1]
231 return param
232
233
234 params = get_params()
235 url = None
236 name = None
237 mode = None
238
239 try:
240 url = urllib.unquote_plus(params["url"])
241 except:
242 pass
243 try:
244 name = urllib.unquote_plus(params["name"])
245 except:
246 pass
247 try:
248 mode = int(params["mode"])
249 except:
250 pass
251
252 if url == 'refresh':
253 xbmc.output("[tvserver] Container.Refresh")
254 xbmc.executebuiltin("Container.Refresh")
255
256
257 elif mode == None:
258 #build main menu
259 rootMenu()
260
261 elif mode == 1:
262 #build list of movie starting letters
263 buildList(url, name)
264
265 elif mode == 10:
266 search()
267
268
269 elif mode == 50:
270 play_video(url, name)

  ViewVC Help
Powered by ViewVC 1.1.20