/[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 1829 - (hide 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 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 1799 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 torben 1659 buildList(__backend__, "", False) # call default list
95 torben 1631
96 torben 1649 # Adde xtra items to root menu
97 torben 1640 listitem = xbmcgui.ListItem(label = "Søg film ...", iconImage = 'DefaultFolder.png', thumbnailImage = 'DefaultFolder.png')
98 torben 1648 listitem.setProperty('Fanart_Image', fanartImage)
99    
100 torben 1649 u = sys.argv[0] + "?mode=10&name="
101     ok = xbmcplugin.addDirectoryItem(handle = int(sys.argv[1]), url = u, listitem = listitem, isFolder = True)
102 torben 1631
103 torben 1629 xbmcplugin.endOfDirectory(int(sys.argv[1]))
104    
105    
106 torben 1659 def buildList(url,title, endlist=True):
107 torben 1629 print '[TODIC]:'+str(url)
108 torben 1678
109 torben 1629 link = open_url(url)
110 torben 1678 doc = parseString(link)
111     ty = doc.getElementsByTagName("meta")[0].getAttribute("type")
112     print '[TODIC]'+str(ty)
113 torben 1646
114 torben 1678 if ty == 'clipList':
115 torben 1646 mode = '50'
116     folder = False
117     else:
118     mode = '1'
119     folder = True
120    
121 torben 1829
122 torben 1678 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 torben 1829 playcount = getText( entry.getElementsByTagName("playcount") )
131 torben 1647
132 torben 1678 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 torben 1647 listitem = xbmcgui.ListItem(label = name, label2='test', iconImage = 'DefaultFolder.png', thumbnailImage = thumb)
142 torben 1648 listitem.setProperty('Fanart_Image', fanartImage)
143 torben 1650 if mode == '50':
144     infoLabels = {}
145     infoLabels['title'] = name
146 torben 1829 infoLabels['plot'] = description
147     infoLabels['playcount'] = playcount
148 torben 1650 listitem.setInfo('video', infoLabels)
149 torben 1648
150 torben 1678 u = sys.argv[0] + "?mode=" + urllib.quote(mode) + "&name=" + urllib.quote(name) + "&url=" + urllib.quote(url)
151 torben 1630 ok = xbmcplugin.addDirectoryItem(handle = int(sys.argv[1]), url = u, listitem = listitem, isFolder = folder, totalItems = l)
152 torben 1629
153 torben 1659 if (endlist == True):
154     xbmcplugin.endOfDirectory(int(sys.argv[1]))
155 torben 1629
156    
157    
158 torben 1659
159 torben 1629 def play_video(url, name):
160 torben 1678 xml = open_url(url)
161    
162     doc = parseString(xml)
163     url = getText( doc.getElementsByTagName("url") )
164    
165 torben 1629 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 torben 1676 player = TodicPlayer(xbmc.PLAYER_CORE_AUTO)
171     player.play(str(url), listitem)
172 torben 1678 # player.callbackLoop()
173 torben 1676
174    
175    
176 torben 1631 def search():
177     search = getUserInput("Todic Søgning")
178 torben 1629
179 torben 1634 if (search != None and search != ""):
180     url = __backend__ + "&action=search&search=" + urllib.quote_plus(search)
181 torben 1631
182 torben 1634 #print "[TODIC] Search start: " + search
183     #print "[TODIC] Search url: " + url
184 torben 1631
185 torben 1646 buildList(url, "søgning")
186 torben 1631
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 torben 1629 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 torben 1814 if url == 'refresh':
253     xbmc.output("[tvserver] Container.Refresh")
254     xbmc.executebuiltin("Container.Refresh")
255    
256 torben 1629
257 torben 1814 elif mode == None:
258 torben 1629 #build main menu
259     rootMenu()
260    
261     elif mode == 1:
262     #build list of movie starting letters
263     buildList(url, name)
264    
265 torben 1631 elif mode == 10:
266     search()
267    
268    
269 torben 1629 elif mode == 50:
270     play_video(url, name)

  ViewVC Help
Powered by ViewVC 1.1.20