示例#1
0
    def resolve_url(self, raw_url):
        resolved_url = ''
        host = self.get_domain_from_url(raw_url)
        if host not in self.get_domains(): return ''
        from commoncore.dispatcher import WeightedDispatcher
        dispatcher = WeightedDispatcher()

        @dispatcher.register(kodi.get_setting('premiumize_priority', ADDON_ID),
                             [raw_url])
        def pm_resolver(raw_url):
            if host not in self.premiumize_hosts: return ''
            try:
                response = premiumize.get_download(raw_url)
                return response['result']['location']
            except:
                return ''

        @dispatcher.register(kodi.get_setting('realdebrid_priority', ADDON_ID),
                             [raw_url])
        def rd_resolver(raw_url):
            if host not in self.realdebrid_hosts: return ''
            try:
                return realdebrid.resolve_url(raw_url)
            except:
                return ''

        kodi.open_busy_dialog()
        try:
            resolved_url = dispatcher.run()
        except:
            kodi.close_busy_dialog()
        kodi.close_busy_dialog()
        return resolved_url
示例#2
0
class PremiumizeScraper(PremiumScraper):
    valid = kodi.get_setting('premiumize_enable',
                             ADDON_ID) == 'true' and kodi.get_setting(
                                 'premiumize_username', ADDON_ID) != ''
    '''def __init__(self):
		self._make_media_object = self.make_media_object
		def make_media_object(obj):
			media = self._make_media_object(obj)
			media['premium'] = 'PM'
			return media
		self.make_media_object = make_media_object'''
    def verify_result(self, result):
        if result[0]['host'] not in self.domains: return
        media = self.make_media_object(result[0])
        self.verified_results.append(media)

    def get_domains(self):
        self.domains = premiumize.get_hosts()

    def resolve_url(self, raw_url):
        response = premiumize.get_download(raw_url)
        try:
            return response['result']['location']
        except:
            return ''
示例#3
0
	def resolve_url(self, raw_url):
		host = self.get_domain_from_url(raw_url)
		if host not in self.domains: return ''
		resolvers = []
		def pm_resolver(raw_url):
			if host not in self.premiumize_hosts: return ''
			try:
				response = premiumize.get_download(raw_url)
				return response['result']['location']
			except:
				return ''

		resolvers.append([kodi.get_setting('premiumize_priority', ADDON_ID), pm_resolver])
		
		def rd_resolver(raw_url):
			if host not in self.realdebrid_hosts: return ''
			try:
				return realdebrid.resolve_url(raw_url)
			except:
				return ''
		
		resolvers.append([kodi.get_setting('realdebrid_priority', ADDON_ID), rd_resolver])
		resolvers.sort(key=lambda x: x[0], reverse=True)
		for r in resolvers:
			r = r[1]
			resolved_url = r(raw_url)
			if resolved_url: return resolved_url
		
		return ''
示例#4
0
    def check_hashes(self, hashes):
        results = {'realdebrid': {}, "premiumize": {}}
        if kodi.get_setting('realdebrid_enable', ADDON_ID) == 'true':
            results['realdebrid'] = realdebrid.check_hashes(hashes)

        if kodi.get_setting('premiumize_enable', ADDON_ID) == 'true':
            results['premiumize'] = premiumize.check_hashes(hashes)
        return results
示例#5
0
	def get_user_agent(self):
		user_agent = kodi.get_setting('user_agent')
		try: agent_refresh_time = int(kodi.get_setting('agent_refresh_time'))
		except: agent_refresh_time = 0
		if not user_agent or agent_refresh_time < (time.time() - (7 * 24 * 60 * 60)):
			user_agent = self.generate_user_agent()
			kodi.set_setting('user_agent', user_agent)
			kodi.set_setting('agent_refresh_time', str(int(time.time())))
		return user_agent
示例#6
0
 def __init__(self):
     self.dsn = {
         "database": kodi.get_setting('database_mysql_name'),
         "host": kodi.get_setting('database_mysql_host'),
         "port": int(kodi.get_setting('database_mysql_port')),
         "user": kodi.get_setting('database_mysql_user'),
         "password": kodi.get_setting('database_mysql_pass'),
         "buffered": True
     }
     self.connect()
示例#7
0
class PremiumScraper(BaseScraper):
	valid = kodi.get_setting('premiumize_enable', ADDON_ID) == 'true' and kodi.get_setting('premiumize_username', ADDON_ID) != '' or kodi.get_setting('realdebrid_enable', ADDON_ID) == 'true' and kodi.get_setting('realdebrid_token', ADDON_ID) != ''
	
	def get_domains(self):
		self.realdebrid_hosts = realdebrid.get_hosts()
		self.premiumize_hosts = premiumize.get_hosts()
		self.domains = list(set(self.realdebrid_hosts + self.premiumize_hosts))
		return self.domains
	
	def verify_result(self, result):
		if result[0]['host'] not in self.domains: return
		media = self.make_media_object(result[0])
		self.verified_results.append(media)
		
	def verify_results(self, processor, results):
		self.get_domains()
		for result in results:
			if isinstance(result, list):
				for r in result:
					self.verify_result(processor(r))
			else:
				self.verify_result(processor(result))
		
		return (self.name, self.verified_results)	
	
	def resolve_url(self, raw_url):
		host = self.get_domain_from_url(raw_url)
		if host not in self.domains: return ''
		resolvers = []
		def pm_resolver(raw_url):
			if host not in self.premiumize_hosts: return ''
			try:
				response = premiumize.get_download(raw_url)
				return response['result']['location']
			except:
				return ''

		resolvers.append([kodi.get_setting('premiumize_priority', ADDON_ID), pm_resolver])
		
		def rd_resolver(raw_url):
			if host not in self.realdebrid_hosts: return ''
			try:
				return realdebrid.resolve_url(raw_url)
			except:
				return ''
		
		resolvers.append([kodi.get_setting('realdebrid_priority', ADDON_ID), rd_resolver])
		resolvers.sort(key=lambda x: x[0], reverse=True)
		for r in resolvers:
			r = r[1]
			resolved_url = r(raw_url)
			if resolved_url: return resolved_url
		
		return ''
示例#8
0
    def get_domains(self):
        if kodi.get_setting('realdebrid_enable', ADDON_ID) == 'true':
            self.realdebrid_hosts = realdebrid.get_hosts()
        else:
            self.realdebrid_hosts = []

        if kodi.get_setting('premiumize_enable', ADDON_ID) == 'true':
            self.premiumize_hosts = premiumize.get_hosts()
        else:
            self.premiumize_hosts = []

        self.domains = list(set(self.realdebrid_hosts + self.premiumize_hosts))
        return self.domains
示例#9
0
class RealDebridScraper(PremiumScraper):
	valid = kodi.get_setting('realdebrid_enable', ADDON_ID) == 'true' and kodi.get_setting('realdebrid_token', ADDON_ID) != ''
	def get_domains(self):
		self.domains = realdebrid.get_hosts()
	
	def __init__(self):
		self._make_media_object = self.make_media_object
		def make_media_object(obj):
			media = self._make_media_object(obj)
			media['premium'] = 'RD'
			return media
		self.make_media_object = make_media_object
	
	def resolve_url(self, raw_url):
		return realdebrid.resolve_url(raw_url)
示例#10
0
 def verify_hash(self, hash):
     if kodi.get_setting('realdebrid_enable', ADDON_ID) == 'true':
         try:
             if self.verified_hashes['realdebrid'][hash]['rd'] != []:
                 return True
         except:
             pass
     if kodi.get_setting('premiumize_enable', ADDON_ID) == 'true':
         try:
             if self.verified_hashes['premiumize']['hashes'][hash][
                     'status'] == 'finished':
                 return True
         except:
             pass
     return False
示例#11
0
 def __init__(self, *args, **kwargs):
     self.ftp_root = kodi.vfs.translate_path(
         kodi.get_setting('root_directory'))
     self.ftp_log = kodi.vfs.join(kodi.get_profile(), "pyftpd.log")
     self.cert_file = vfs.join(kodi.get_profile(), "pyftpd.pem")
     if not vfs.exists(self.cert_file):
         vfs.cp(vfs.join(kodi.get_path(), "pyftpd.pem"), self.cert_file)
示例#12
0
    def get_season_art(self, tvdb_id):
        result = {}

        def sort_art(record):
            return record['ratingsInfo']['average']

        try:
            uri = "/series/%s/images/query" % tvdb_id
            response = self.request(uri,
                                    query={"keyType": "season"},
                                    auth=True,
                                    cache_limit=EXPIRE_TIMES.WEEK)
            if kodi.get_setting('enable_fanart_debug') == "true":
                kodi.log(response)
            data = sorted(response['data'],
                          reverse=True,
                          key=lambda k: sort_art(k))
            for d in data:
                s = int(d["subKey"])
                if s == 0: continue
                img = "http://thetvdb.com/banners/" + d["fileName"]
                result[s] = img
        except:
            pass
        return result
示例#13
0
def refresh_token():
	url = 'https://api.real-debrid.com/oauth/v2/token'
	data = {'client_id': kodi.get_setting('realdebrid_client_id', addon_id='script.module.scrapecore'), 'client_secret': kodi.get_setting('realdebrid_client_secret', addon_id='script.module.scrapecore'), 'code': kodi.get_setting('realdebrid_refresh_token', addon_id='script.module.scrapecore'), 'grant_type': 'http://oauth.net/grant_type/device/1.0'}
	response = session.post(url, data=data)
	response.json()
	if 'access_token' in response:
		kodi.set_setting('realdebrid_token', response['access_token'], addon_id='script.module.scrapecore')
	return response		
示例#14
0
def show_about():
	if kodi.get_setting('disable_about') == 'true': return
	interval = int(kodi.get_setting('last_about'))
	if interval == 0:
		interval = 5
		try:
			import xbmc
			KODI_LANGUAGE = xbmc.getLanguage()
		except:
			KODI_LANGUAGE = 'English'
		path = kodi.vfs.join(kodi.get_path(), 'resources/language/%s/github_help.txt', KODI_LANGUAGE)
		if not kodi.vfs.exists(path):
			path = kodi.vfs.join(kodi.get_path(), 'resources/language/English/github_help.txt')
		text = kodi.vfs.read_file(path)
		kodi.dialog_textbox('GitHub Browser Instructions', text)
	else:
		interval -= 1	
	kodi.set_setting('last_about', interval)
示例#15
0
def show_about():
	if kodi.get_setting('disable_about') == 'true': return
	interval = int(kodi.get_setting('last_about'))
	if interval == 0:
		interval = 5
		try:
			import xbmc
			KODI_LANGUAGE = xbmc.getLanguage()
		except:
			KODI_LANGUAGE = 'English'
		path = kodi.vfs.join(kodi.get_path(), 'resources/language/%s/github_help.txt', KODI_LANGUAGE)
		if not kodi.vfs.exists(path):
			path = kodi.vfs.join(kodi.get_path(), 'resources/language/English/github_help.txt')
		text = kodi.vfs.read_file(path)
		kodi.dialog_textbox('GitHub Browser Instructions', text)
	else:
		interval -= 1	
	kodi.set_setting('last_about', interval)
示例#16
0
def settings_menu():
    menu = kodi.ContextMenu()
    menu.add(
        'Set Default View', {
            "mode": "set_default_view",
            "api": {
                "name": "kodi",
                "method": "set_default_view",
                "args": ("list", )
            }
        })
    kodi.add_menu_item(
        {'mode': 'realdebrid_menu'}, {'title': "RealDebrid"},
        icon='realdebrid.png',
        visible=kodi.get_setting('realdebrid_enable',
                                 'script.module.scrapecore') == 'true')
    kodi.add_menu_item(
        {'mode': 'premiumize_menu'}, {'title': "Premiumize Cloud"},
        icon='cloud.png',
        visible=kodi.get_setting('premiumize_enable',
                                 'script.module.scrapecore') == 'true')
    kodi.add_menu_item(
        {
            'mode': 'scrapecore_settings',
            "api": {
                "name": "kodi",
                "method": "open_settings",
                "args": ("script.module.scrapecore", )
            }
        }, {'title': "ScrapeCore Settings"},
        icon='settings.png')
    kodi.add_menu_item(
        {
            'mode': 'open_settings',
            'addon_id': 'service.fanart.proxy'
        }, {'title': "Fanart Proxy Settings"},
        icon='settings.png',
        visible=kodi.has_addon('service.fanart.proxy'))
    kodi.add_menu_item({'mode': 'commoncore_settings'},
                       {'title': "CommonCore Settings"},
                       icon='settings.png')
    kodi.add_menu_item({'mode': 'addon_settings'}, {'title': "Addon Settings"},
                       icon='settings.png')
    kodi.eod(DEFAULT_VIEWS.LIST)
示例#17
0
def scraper_list():
    for s in scrapecore.get_scrapers():
        if kodi.get_setting(s['service'] + '_enable') == 'true':
            title = format_color(s['name'], 'green')
        else:
            title = format_color(s['name'], 'maroon')
        kodi.add_menu_item({
            'mode': 'toggle_scraper',
            "service": s['service']
        }, {'title': title},
                           icon='')
    kodi.eod()
示例#18
0
 def get_person_art(self, tmdb_id):
     try:
         uri = "/person/%s" % tmdb_id
         response = self.request(uri)
         if kodi.get_setting('enable_fanart_debug') == "true":
             kodi.log(response)
         if 'profile_path' in response and response[
                 'profile_path'] is not None:
             return "http://image.tmdb.org/t/p/w500%s" % response[
                 'profile_path']
     except:
         return False
示例#19
0
 def get_episode_art(self, tmdb_id, tvdb_id, imdb_id, season, episode):
     try:
         uri = "/tv/%s/season/%s/episode/%s/images" % (tmdb_id, season,
                                                       episode)
         response = self.request(uri, cache_limit=EXPIRE_TIMES.DAY)
         if kodi.get_setting('enable_fanart_debug') == "true":
             kodi.log(response)
         if response and 'stills' in response and response['stills']:
             return "http://image.tmdb.org/t/p/w500%s" % response['stills'][
                 0]['file_path']
     except:
         return False
示例#20
0
def refresh_token():
    url = 'https://api.real-debrid.com/oauth/v2/token'
    data = {
        'client_id':
        kodi.get_setting('realdebrid_client_id',
                         addon_id='script.module.scrapecore'),
        'client_secret':
        kodi.get_setting('realdebrid_client_secret',
                         addon_id='script.module.scrapecore'),
        'code':
        kodi.get_setting('realdebrid_refresh_token',
                         addon_id='script.module.scrapecore'),
        'grant_type':
        'http://oauth.net/grant_type/device/1.0'
    }
    response = session.post(url, data=data)
    response.json()
    if 'access_token' in response:
        kodi.set_setting('realdebrid_token',
                         response['access_token'],
                         addon_id='script.module.scrapecore')
    return response
示例#21
0
 def get_episode_art(self, tmdb_id, tvdb_id, imdb_id, season, episode):
     try:
         uri = '/episodes/%s' % tvdb_id
         response = self.request(uri,
                                 auth=True,
                                 cache_limit=EXPIRE_TIMES.DAY)
         if kodi.get_setting('enable_fanart_debug') == "true":
             kodi.log(response)
         if response and 'data' in response and response['data']['filename']:
             return 'http://thetvdb.com/banners/_cache/' + response['data'][
                 'filename']
     except:
         return False
示例#22
0
 def __init__(self, supported_scrapers, load_list=None, ignore_list=[]):
     # Verify each scraper is enabled removing ignored
     # We generate the list of active scrapers
     # Each scraper is given the abort event. This can be respected in the individual scraper.
     # However if ignored, the thread will be allowed to continue and its results ignored
     for s in supported_scrapers:
         s.abort_event = self.abort_event
         if s.service in ignore_list: continue
         if type(load_list) is list and s.service not in load_list: continue
         if kodi.get_setting(s.service + '_enable',
                             addon_id=ADDON_ID) == 'true' and s.valid:
             self.active_scrapers[s.service] = s
     self.count = len(self.active_scrapers)
示例#23
0
        def premiumize_resolver(raw_url):
            resolved_url = ''
            if kodi.get_setting('premiumize_enable', ADDON_ID) != 'true':
                return resolved_url
            attempt = 0
            attempts = 5
            try:
                response = premiumize.create_transfer(raw_url)
                id = response['id']
            except:
                premiumize.clear_transfers()
                response = premiumize.create_transfer(raw_url)
                id = response['id']
            try:
                while attempt < attempts:
                    folder_id = False
                    file_id = False
                    target_folder_id = False
                    kodi.log("Resolve Attempt %s" % attempt)
                    temp = premiumize.list_transfers()
                    for t in temp['transfers']:
                        if t['id'] == id and t['status'] == 'finished':
                            if 'target_folder_id' in t:
                                target_folder_id = t['target_folder_id']
                            if 'folder_id' in t: folder_id = t['folder_id']
                            if 'file_id' in t: file_id = t['file_id']
                            break
                    if file_id:
                        response = premiumize.item_details(file_id)
                        resolved_url = response['stream_link']
                        kodi.set_property('Playback.Resolver', 'premiumize')
                        kodi.set_property('Playback.ID', file_id)
                        return resolved_url
                    if folder_id:
                        response = premiumize.list_folder(folder_id)
                        resolved_url = premiumize.get_folder_stream(response)
                        kodi.set_property('Playback.Resolver', 'premiumize')
                        kodi.set_property('Playback.ID', folder_id)
                        return resolved_url
                    if target_folder_id:
                        response = premiumize.list_folder(target_folder_id)
                        resolved_url = premiumize.get_folder_stream(response)
                        kodi.set_property('Playback.Resolver', 'premiumize')
                        kodi.set_property('Playback.ID', target_folder_id)
                        return resolved_url

                    attempt += 1
                    kodi.sleep(150)
            except:
                pass
            return resolved_url
示例#24
0
    def start(self):
        class Monitor(xbmc.Monitor):
            def onSettingsChanged(self):
                pass

        monitor = Monitor()
        kodi.log("Service Starting...")
        self.clear_art()
        if kodi.get_setting('enable_fanart_proxy') == 'true':
            CONTROL_PORT = int(kodi.get_setting('control_port'))
            if kodi.get_setting('network_bind') == 'Localhost':
                address = "127.0.0.1"
            else:
                address = "0.0.0.0"
            CONTROL_PROTO = kodi.get_setting('control_protocol')
            kodi.log("Launching Fanart WebInterface on: %s://%s:%s" %
                     (CONTROL_PROTO, address, CONTROL_PORT))
            kodi.log("Verify at: %s://%s:%s/api/up" %
                     (CONTROL_PROTO, address, CONTROL_PORT))
            try:
                if CONTROL_PROTO == 'https':
                    from commoncore.webservice import HttpsServer
                    certfile = kodi.vfs.join(kodi.get_path(),
                                             "resources/server.pem")
                    self.httpd = HttpsServer(address, CONTROL_PORT, certfile,
                                             RequestHandler)
                    self.webserver = Thread(target=self.httpd.serve_forever)
                else:
                    from commoncore.webservice import HttpServer
                    self.httpd = HttpServer(address, CONTROL_PORT,
                                            RequestHandler)
                    self.webserver = Thread(target=self.httpd.serve_forever)
            except Exception, e:
                kodi.log(e)
                kodi.raise_error("Service Error: ", str(e))
                sys.exit()

            self.webserver.start()
示例#25
0
 def get_movie_art(self, tmdb_id, imdb_id):
     result = {"fanart": "", "poster": ""}
     try:
         response = self.request('/api',
                                 data={
                                     "id": imdb_id,
                                     "key": IMDB_KEY
                                 })
         if kodi.get_setting('enable_fanart_debug') == "true":
             kodi.log(response)
         result['poster'] = response['poster'].split('._')[0]
     except:
         pass
     return result
示例#26
0
 def get_show_art(self, tmdb_id, tvdb_id, imdb_id):
     result = {"fanart": "", "poster": ""}
     try:
         response = self.request('/',
                                 query={
                                     "i": imdb_id,
                                     "apikey": OIMDB_KEY
                                 })
         if kodi.get_setting('enable_fanart_debug') == "true":
             kodi.log(response)
         result['poster'] = response['Poster'].split('._')[0]
     except:
         pass
     return result
示例#27
0
    def start(self):
        class Monitor(xbmc.Monitor):
            def onSettingsChanged(self):
                pass

        monitor = Monitor()
        kodi.log("Service Starting...")
        authorizer = DummyAuthorizer()
        authorizer.add_user(kodi.get_setting('ftp_user'),
                            kodi.get_setting('ftp_pass'),
                            self.ftp_root,
                            perm='elradfmwMT')
        if kodi.get_setting('use_ssl') == 'true':
            from pyftpdlib.handlers import TLS_FTPHandler as handler
            handler.certfile = self.cert_file
        else:
            from pyftpdlib.handlers import FTPHandler as handler

        handler.banner = "PyFTPd ready."
        handler.authorizer = authorizer
        address = ('', kodi.get_setting('server_port'))
        import logging
        logging.basicConfig(filename=self.ftp_log, level=logging.INFO)
        self.ftpd = ThreadedFTPServer(address, handler)
        self.ftpd.max_cons = 256
        self.ftpd.max_cons_per_ip = 5
        self.server = Thread(target=self.ftpd.serve_forever)
        self.server.start()

        if is_depricated:
            while not xbmc.abortRequested:
                xbmc.sleep(1000)
        else:
            while not monitor.abortRequested():
                xbmc.sleep(1000)

        self.shutdown()
示例#28
0
    def get_show_art(self, tmdb_id, tvdb_id, imdb_id):
        result = {"fanart": "", "poster": ""}

        def sort_art(record):
            return record['ratingsInfo']['average']

        uri = "/series/%s/images/query" % tvdb_id
        try:
            response = self.request(uri,
                                    query={"keyType": "fanart"},
                                    auth=True,
                                    cache_limit=EXPIRE_TIMES.WEEK)
            if kodi.get_setting('enable_fanart_debug') == "true":
                kodi.log(response)
            data = sorted(response['data'],
                          reverse=True,
                          key=lambda k: sort_art(k))
            result[
                "fanart"] = "http://thetvdb.com/banners/" + data[0]['fileName']
        except:
            pass
        try:
            response = self.request(uri,
                                    query={"keyType": "poster"},
                                    auth=True,
                                    cache_limit=EXPIRE_TIMES.WEEK)
            if kodi.get_setting('enable_fanart_debug') == "true":
                kodi.log(response)
            data = sorted(response['data'],
                          reverse=True,
                          key=lambda k: sort_art(k))
            result[
                "poster"] = "http://thetvdb.com/banners/" + data[0]['fileName']
        except:
            pass
        return result
示例#29
0
	def build_url(self, uri, query, append_base):
		if append_base:
			url = self.base_url + uri
		token = kodi.get_setting('access_token')
		if token:
			if query is None:
				query = {"access_token": token}
			else:
				query["access_token"] = token
		if query is not None:
			query = urllib.urlencode(query)
			for r in [('%3A', ":"), ("%2B", "+")]:
				f,t = r
				query = query.replace(f,t)
			url += '?' + query
		return url
示例#30
0
 def build_url(self, uri, query, append_base):
     if append_base:
         url = self.base_url + uri
     token = kodi.get_setting('access_token')
     if token:
         if query is None:
             query = {"access_token": token}
         else:
             query["access_token"] = token
     if query is not None:
         query = urllib.urlencode(query)
         for r in [('%3A', ":"), ("%2B", "+")]:
             f, t = r
             query = query.replace(f, t)
         url += '?' + query
     return url
示例#31
0
 def do_Response(self,
                 content={
                     'status': 200,
                     'message': 'success'
                 },
                 content_type='application/json',
                 response_code=200):
     self.generate_response_headers(content_type=content_type)
     self.send_all_headers(response_code)
     if content_type == 'application/json':
         content['host'] = HOST_ADDRESS
         content['debug'] = kodi.get_setting(
             'enable_fanart_debug') == 'true'
         content = json.dumps(content)
     self.wfile.write(content)
     self.wfile.flush()
     self.wfile.close()
示例#32
0
 def get_season_art(self, tvdb_id):
     result = {}
     uri = '/tv/%s' % tvdb_id
     try:
         response = self.request(uri, cache_limit=EXPIRE_TIMES.WEEK)
         if kodi.get_setting('enable_fanart_debug') == "true":
             kodi.log(response)
     except:
         return result
     try:
         for poster in response['seasonposter']:
             if poster['lang'] != 'en' or int(poster['season']) in result:
                 continue
             result[int(poster['season'])] = poster['url']
     except:
         pass
     return result
示例#33
0
 def get_episode_art(self, tmdb_id, tvdb_id, imdb_id, season, episode):
     try:
         tvmaze_id = self.lookup_id(imdb_id)
         if not tvmaze_id: return False
         uri = "/shows/%s/episodes" % tvmaze_id
         response = self.request(uri,
                                 query={"specials": 0},
                                 cache_limit=EXPIRE_TIMES.DAY)
         if kodi.get_setting('enable_fanart_debug') == "true":
             kodi.log(response)
         season = int(season)
         episode = int(season)
         for e in response:
             if e['season'] == season and e['number'] == episode:
                 if e['image'] is not None:
                     return e['image']['original']
     except:
         return False
示例#34
0
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.

	You should have received a copy of the GNU General Public License
	along with this program.  If not, see <http://www.gnu.org/licenses/>.
*'''

import re
import json
import requests
from commoncore import kodi

vfs = kodi.vfs
try:
	myth_host = kodi.get_setting('host', 'pvr.mythtv')
	myth_port = kodi.get_setting('wsport', 'pvr.mythtv')
except:
	myth_host = ''
	myth_port = ''
	
_base_url = 'http://%s:%s' % (myth_host, myth_port)
session = requests.Session()

def process_response(response, return_type='xml'):
	if return_type == 'json':
		return json.loads(response)
	elif return_type == 'xml':
		import xml.etree.ElementTree as ET
		if type(response) == unicode:
			response = response.encode("utf-8", errors="ignore")
示例#35
0
	def authorize(self):
		self.headers = {"Authorization": "Bearer %s" % kodi.get_setting('realdebrid_token', addon_id='script.module.scrapecore')}
示例#36
0
	def build_dependency_list(self, addon_id, url, full_name, master):
		#if test in ['xbmc.python', 'xbmc.gui'] or kodi.get_condition_visiblity('System.HasAddon(%s)' % addon_id) == 1: return True
		if addon_id in self.installed_list: 
			kodi.log('Dependency is already installed: %s' % addon_id)
			return True
		user, repo = full_name.split("/")
		kodi.log('Finding dependencies for: %s' % addon_id)
		if master:
			self.sources[addon_id] = {"type": SOURCES.REPO, "url": url, "user": user, "repo": repo, "version": ""}
			xml_str = github.find_xml(full_name)
			self.sources[addon_id]['version'] = github.get_version_by_xml(BeautifulSoup(xml_str))
		else:
			version = downloader.download(url, addon_id, self._destination, True, self.quiet)
			src_file = kodi.vfs.join("special://home/addons", addon_id)
			kodi.vfs.join(src_file, "addon.xml")
			xml = kodi.vfs.read_file(kodi.vfs.join(src_file, "addon.xml"), soup=True)
			self.save_source(addon_id, {"type": SOURCES.ZIP, "url": url, "user": user, "repo": repo, "version": version})
			
		for dep in xml.findAll('import'):
			test = dep['addon']
			try:
				if dep['optional'].lower() == 'true': 
					if kodi.get_setting('install_optional') == 'false': 
						continue
					elif kodi.get_setting('prompt_optional') == "true":
						c = kodi.dialog_confirm("Install Optional Dependency", dep['name'], dep['addon'])
						if not c: continue
			except:
				pass
			if test in ['xbmc.python', 'xbmc.gui'] or kodi.get_condition_visiblity('System.HasAddon(%s)' % test) == 1 or test in self.installed_list:
				kodi.log('Dependency is already installed: %s' % test)
				continue
			self.required_addons += [test]
			if test not in self.available_addons: 
				self.unmet_addons += [test]
			else:
				self.sources[test] = {"type": SOURCES.DEFAULT, "url": self.source_table[test]}
				kodi.log("%s dependency met in %s" % (test, self.source_table[test]))
		
		def user_resolver(user, unmet):
			dep_url, dep_filename, dep_full_name, version = github.find_zip(user, unmet)
			if dep_url:
				kodi.log("%s found in %s repo" % (unmet, user))
				self.met_addons.append(unmet)
				user, repo = dep_full_name.split("/")
				self.sources[unmet] = {"type": SOURCES.ZIP, "url": dep_url, "user": user, "repo": repo, "version": ""}
				kodi.log("%s dependency met in %s" % (unmet, dep_url))
				return True
			return False
		
		def	github_resolver(unmet):
			results = github.web_search(unmet)
			c = kodi.dialog_select("GitHub Search Results for %s" % unmet, [r['full_name'] for r in results['items']])
			if c is not False:
				dep = results['items'][c]
				dep_url = url = "https://github.com/%s/archive/master.zip" % (dep['full_name'])
				self.met_addons.append(unmet)
				dep_filename = "%s.zip" % unmet
				self.sources[unmet] = {"type": SOURCES.REPO, "url": dep_url, "user": user, "repo": repo, "version": ""}
				kodi.log("%s dependency met in %s" % (unmet, dep_url))
				self.install_addon(unmet, dep_url, dep['full_name'], master=True)
				
				return True
			return False	
		
		for unmet in self.unmet_addons:
			# Now attempt to locate dependencies from available sources
			# The addons that can be found in any enabled repos will be installed at the end.
			
			# check if this exists in users root repo
			if kodi.get_setting('source_user') == 'true':
				if user_resolver(user, unmet): continue
			
			# check if this exists in tva root repo
			if kodi.get_setting('source_tva') == 'true':
				if user_resolver(tva_user, unmet): continue
			
			# check if this exists on github
			if kodi.get_setting('source_github') == 'true':
				if github_resolver(unmet): continue
			
		self.unmet_addons = list(set(self.unmet_addons) - set(self.met_addons))
		if len(self.unmet_addons):
			self.install_error = True
			if not self.quiet:
				kodi.close_busy_dialog()
				kodi.raise_error("", "Unmet Dependencies:", "See log or install manually", ','.join(self.unmet_addons))
			kodi.log("Unmet Dependencies for addon install: %s" % addon_id)  # % self.addon_id)
			kodi.log(','.join(self.unmet_addons))
		self.completed.append(addon_id)	
示例#37
0
def settings_menu():
	kodi.add_menu_item({'mode': 'update_addons'}, {'title': "Check for Updates [COLOR red](Advanced)[/COLOR]"}, icon='update.png', visible=kodi.get_setting('enable_updates') == 'true')
	kodi.add_menu_item({'mode': 'addon_settings'}, {'title': "Addon Settings"}, icon='settings.png')
	kodi.eod()
示例#38
0
	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.

	You should have received a copy of the GNU General Public License
	along with this program.  If not, see <http://www.gnu.org/licenses/>.
*'''

import urllib
import traceback
from commoncore import kodi
from commoncore.baseapi import DB_CACHABLE_API as BASE_API, EXPIRE_TIMES

try:
	_username = kodi.get_setting('premiumize_username', 'script.module.scrapecore')
	_password = kodi.get_setting('premiumize_password', 'script.module.scrapecore')
except:
	_username = ''
	_password = ''

class PremiumizeAPI_V1(BASE_API):
	'''
	errors to be expected: 
	* 400 (no valid link) 
	* 401 (login failed) 
	* 402 (payment required - the download would be possible, but the account is not premium) 
	* 403 (forbidden) * 404 (file not found - the file has been deleted by a 3rd party provider) 
	* 428 (hoster currently not available. ) 
	* 502 (unkonwn technical error (most likely from a 3rd party provieder - retry after some minutes, we recomend 3 minutes)) 
	* 503 (temporary technical error, maintenance - retry after some minutes, we recomend 3 minutes), 
示例#39
0
PERIOD_OPTIONS = ["weekly" , "monthly" , "yearly" , "all"]
MEDIA_TYPES = ["movie" , "show" , "episode" , "person" , "list"]
ID_TYPES = ["trakt" , "imdb" , "tmdb" , "tvdb" , "tvrage"]
COMMON_FILTERS = ["query", "years", "genres", "languages", "countries", "runtimes", "ratings"]
MOVIE_FILTERS = COMMON_FILTERS + ["certifications"]
SHOW_FILTERS = COMMON_FILTERS + ["certifications", "networks", "status"]
SHOW_STATUS = ["returning series", "in production", "planned", "canceled", "ended"]
DAYS_TO_GET = 21
SHOW_GENRES = [(u'Action', u'action'), (u'Adventure', u'adventure'), (u'Animation', u'animation'), (u'Anime', u'anime'), (u'Biography', u'biography'), (u'Children', u'children'), (u'Comedy', u'comedy'), (u'Crime', u'crime'), (u'Disaster', u'disaster'), (u'Documentary', u'documentary'), (u'Drama', u'drama'), (u'Eastern', u'eastern'), (u'Family', u'family'), (u'Fantasy', u'fantasy'), (u'Game Show', u'game-show'), (u'History', u'history'), (u'Holiday', u'holiday'), (u'Home And Garden', u'home-and-garden'), (u'Horror', u'horror'), (u'Mini Series', u'mini-series'), (u'Music', u'music'), (u'Musical', u'musical'), (u'Mystery', u'mystery'), (u'News', u'news'),(u'Reality', u'reality'), (u'Romance', u'romance'), (u'Science Fiction', u'science-fiction'), (u'Short', u'short'), (u'Soap', u'soap'), (u'Sports', u'sports'), (u'Superhero', u'superhero'), (u'Suspense', u'suspense'), (u'Talk Show', u'talk-show'), (u'Thriller', u'thriller'), (u'War', u'war'), (u'Western', u'western')]
MOVIE_GENRES = [(u'Action', u'action'), (u'Adventure', u'adventure'), (u'Animation', u'animation'), (u'Anime', u'anime'), (u'Comedy', u'comedy'), (u'Crime', u'crime'), (u'Disaster', u'disaster'), (u'Documentary', u'documentary'), (u'Drama', u'drama'), (u'Eastern', u'eastern'), (u'Family', u'family'), (u'Fan Film', u'fan-film'), (u'Fantasy', u'fantasy'), (u'Film Noir', u'film-noir'), (u'History', u'history'), (u'Holiday', u'holiday'), (u'Horror', u'horror'), (u'Indie', u'indie'), (u'Music', u'music'), (u'Musical', u'musical'), (u'Mystery', u'mystery'), (u'Road', u'road'), (u'Romance', u'romance'), (u'Science Fiction', u'science-fiction'), (u'Short', u'short'), (u'Sports', u'sports'), (u'Superhero', u'superhero'), (u'Suspense', u'suspense'), (u'Thriller', u'thriller'), (u'Tv Movie', u'tv-movie'), (u'War', u'war'), (u'Western', u'western')]
class TraktException(Exception):
	pass
CLIENT_ID = "d4161a7a106424551add171e5470112e4afdaf2438e6ef2fe0548edc75924868"
try:
	AUTH_TOKEN = json.loads(kodi.get_setting('authorization', 'script.trakt'))['access_token']
except:
	AUTH_TOKEN = '' #raise TraktException("Addon: script.trakt required.")


def to_slug(username):
	username = username.strip()
	username = username.lower()
	username = re.sub('[^a-z0-9_]', '-', username)
	username = re.sub('--+', '-', username)
	return username

DB_TYPE = 'MySQL' if kodi.get_setting('database_type') == '1' else 'SQLite'

if DB_TYPE == 'MySQL':
	from commoncore.baseapi import MYSQL_CACHABLE_API, EXPIRE_TIMES