def resolve(self, url, resolver): if not self.started: self.start() u = None if 'plugin://' in url: if url.startswith('plugin://'): u = url elif url.startswith('['): argv = url[1:-1].split(' , ') u = (argv[2] if len(argv) > 2 and argv[2].startswith('plugin://') else None) elif self.urlresolver: loglevel = self.setloglevel(xbmc.LOGINFO) u = urlresolver.resolve(url) self.setloglevel(loglevel) if u: if 'plugin://' in u: pmsaddItem = __builtin__.pms.addItem pmsutil = __builtin__.pms.util def addItem(itemtype, name, argv, thumb=None, details=None, data=None): if type(argv).__name__ == 'list': argv = pms.flatten(argv) resolver.add(argv, name, thumb, details=details, data=data) __builtin__.pms.addItem = addItem def util(action, arg1=None, arg2=None): if action == PMS_SUBTITLE: resolver.sub = arg1.strip() return '' else: return pmsutil(action, arg1, arg2) __builtin__.pms.util = util xbmcinit.run_addon(u) __builtin__.pms.addItem = pmsaddItem __builtin__.pms.util = pmsutil else: details = {} url, headers = xbmc.split_url_headers(u) if headers: details['headers'] = headers resolver.add(url, details=details)
def setResolvedUrl(handle, succeeded, listitem, stack=-1): """Callback function to tell XBMC that the file plugin has been resolved to a url""" url = listitem.getProperty('path') if not succeeded or url is None or not (type(url) == str or type(url) == unicode): return details = {} url,headers = xbmc.split_url_headers(url) if headers: details['headers'] = headers if url.startswith('rtmp'): if using_librtmp(): url = librtmpify(url, listitem) else: args, sargs = rtmpsplit(url, listitem) url = "rtmpdump://rtmp2pms?" + urllib.urlencode(args) + (('&' + '&'.join(sargs)) if len(sargs) else '') elif url.startswith('plugin://'): xbmcinit.run_addon(url) return # see xbmc/filesystem/StackDirectory.cpp elif url.startswith('stack://'): ct = 0 for url in url[8:].split(' , '): listitem.setProperty('path', url.replace(',,', ',')) setResolvedUrl(handle, succeeded, listitem, ct) ct += 1 return mediatype, name, thumb, mediainfo = resolve(url, listitem) if mediainfo: details['media'] = mediainfo name = name + "" if stack < 1 else " %d" % stack data = listitem.stringify() if listitem else None pms.addItem(mediatype, pms.esc(name), url, thumb, details=details, data=data) print "*** setResolvedUrl ***" print "raw : %s" % listitem.getProperty('path') print "name: %s" % name print "type: %d" % mediatype print "url :",url print "details : %s" % details print "data : %s" % data
def resolve(self, url, resolver): if not self.started: self.start() u = None if 'plugin://' in url: if url.startswith('plugin://'): u = url elif url.startswith('['): argv = url[1:-1].split(' , ') u = (argv[2] if len(argv) > 2 and argv[2].startswith('plugin://') else None) elif self.urlresolver: loglevel = self.setloglevel(xbmc.LOGINFO) u = urlresolver.resolve(url) self.setloglevel(loglevel) if u: if 'plugin://' in u: pmsaddItem = __builtin__.pms.addItem pmsutil = __builtin__.pms.util def addItem(itemtype, name, argv, thumb=None, details=None, data=None): if type(argv).__name__ == 'list': argv = pms.flatten(argv) resolver.add(argv, name, thumb, details=details, data=data) __builtin__.pms.addItem = addItem def util(action, arg1=None, arg2=None): if action == PMS_SUBTITLE: resolver.sub = arg1.strip() return '' else: return pmsutil(action, arg1, arg2) __builtin__.pms.util = util xbmcinit.run_addon(u) __builtin__.pms.addItem = pmsaddItem __builtin__.pms.util = pmsutil else: details = {} url,headers = xbmc.split_url_headers(u) if headers: details['headers'] = headers resolver.add(url, details=details)