示例#1
0
	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[1] if len(argv) > 1 and argv[1].startswith('plugin://') else None)
		else:
			u = urlresolver.resolve(url)
		if u:
			if 'plugin://' in u:
				pmsaddItem = __builtin__.pms.addItem
				pmsutil = __builtin__.pms.util
				def addItem(itemtype, name, argv, thumb=None, mediainfo=None, data=None):
					if type(argv).__name__ == 'list':
						argv = jumpy.flatten(argv)
					resolver.add(argv, name, thumb)
				__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:
				resolver.add(u)
示例#2
0
    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)
示例#3
0
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
示例#4
0
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
    media = getMediaType(listitem)

    if '|' in url:
        url, headers = url.split('|')

    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)
    name = name + "" if stack < 1 else " %d" % stack

    pms.addItem(mediatype, pms.esc(name), url, thumb, mediainfo)
    print "*** setResolvedUrl ***"
    print "raw : %s" % listitem.getProperty('path')
    print "name: %s" % name
    print "type: %d" % mediatype
    print "url :", url
示例#5
0
	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)