示例#1
0
def get_request(url):
	try:
		try: response = session.get(url)
		except requests.exceptions.SSLError:
			response = session.get(url, verify=False)
	except requests.exceptions.ConnectionError:
		notification(message=32024)
		from resources.lib.modules import log_utils
		log_utils.error()
		return None
	try:
		if response.status_code in (200, 201): return response.json()
		elif response.status_code == 404:
			if getSetting('debug.level') == '1':
				from resources.lib.modules import log_utils
				log_utils.log('TMDb get_request() failed: (404:NOT FOUND) - URL: %s' % url, level=log_utils.LOGDEBUG)
			return '404:NOT FOUND'
		elif 'Retry-After' in response.headers: # API REQUESTS ARE BEING THROTTLED, INTRODUCE WAIT TIME (TMDb removed rate-limit on 12-6-20)
			throttleTime = response.headers['Retry-After']
			notification(message='TMDb Throttling Applied, Sleeping for %s seconds' % throttleTime)
			sleep((int(throttleTime) + 1) * 1000)
			return get_request(url)
		else:
			if getSetting('debug.level') == '1':
				from resources.lib.modules import log_utils
				log_utils.log('TMDb get_request() failed: URL: %s\n                       msg : TMDB Response: %s' % (url, response.text), __name__, log_utils.LOGDEBUG)
			return None
	except:
		from resources.lib.modules import log_utils
		log_utils.error()
		return None
示例#2
0
	def create_session_id(self):
		try:
			from resources.lib.modules.control import setSetting
			if getSetting('tmdb.username') == '' or getSetting('tmdb.password') == '': return notification(message='TMDb Account info missing', icon='ERROR')
			url = self.auth_base_link + '/token/new?api_key=%s' % API_key
			result = requests.get(url).json()
			token = result.get('request_token')
			url2 = self.auth_base_link + '/token/validate_with_login?api_key=%s' % API_key
			post2 = {"username": "******" % getSetting('tmdb.username'),
							"password": "******" % getSetting('tmdb.password'),
							"request_token": "%s" % token}
			result2 = requests.post(url2, data=post2).json()
			url3 = self.auth_base_link + '/session/new?api_key=%s' % API_key
			post3 = {"request_token": "%s" % token}
			result3 = requests.post(url3, data=post3).json()
			if result3.get('success') is True:
				session_id = result3.get('session_id')
				msg = '%s' % ('username ='******'\n password ='******'\n token = ' + token + '\n confirm?')
				if yesnoDialog(msg, '', ''):
					setSetting('tmdb.session_id', session_id)
					notification(message='TMDb Successfully Authorized')
				else: notification(message='TMDb Authorization Cancelled')
		except:
			from resources.lib.modules import log_utils
			log_utils.error()
示例#3
0
def get_request(url):
    try:
        try:
            result = session.get(url, headers=headers, timeout=5)
        except requests.exceptions.SSLError:
            result = session.get(url, headers=headers, verify=False)
    except requests.exceptions.ConnectionError:
        notification(message='FANART.TV server Problems')
        from resources.lib.modules import log_utils
        log_utils.error()
        return None
    if '200' in str(result):
        return result.json()
    elif 'Not found' in str(result.text):
        if getSetting('debug.level') != '1': return None
        from resources.lib.modules import log_utils
        log_utils.log('requests.get() failed - FANART.TV URL: %s (NOT FOUND)' %
                      url,
                      level=log_utils.LOGDEBUG)
    else:
        if getSetting('debug.level') != '1': return None
        from resources.lib.modules import log_utils
        from resources.lib.modules.client import parseDOM
        title = parseDOM(result.text, 'title')[0]
        log_utils.log('requests.get() failed - FANART.TV URL: %s (%s)' %
                      (url, title),
                      level=log_utils.LOGDEBUG)
示例#4
0
def get_request(url):
    try:
        try:
            result = session.get(url, headers=headers, timeout=5)
        except requests.exceptions.SSLError:
            result = session.get(url, headers=headers, verify=False)
    except requests.exceptions.ConnectionError:
        notification(message='FANART.TV Temporary Server Problems')
        from resources.lib.modules import log_utils
        log_utils.error()
        return None
    try:
        if result.status_code in (200, 201): return result.json()
        elif result.status_code == 404:
            if getSetting('debug.level') == '1':
                from resources.lib.modules import log_utils
                log_utils.log(
                    'FANART.TV get_request() failed: (404:NOT FOUND) - URL: %s'
                    % url,
                    level=log_utils.LOGDEBUG)
            return '404:NOT FOUND'
        else:
            if getSetting('debug.level') == '1':
                from resources.lib.modules import log_utils
                from resources.lib.modules.client import parseDOM
                title = parseDOM(result.text, 'title')[0]
                log_utils.log('FANART.TV get_request() failed - URL: %s (%s)' %
                              (url, title),
                              level=log_utils.LOGDEBUG)
            return None
    except:
        from resources.lib.modules import log_utils
        log_utils.error()
        return None
示例#5
0
def log(msg, caller=None, level=LOGINFO):
    debug_enabled = getSetting('debug.enabled') == 'true'
    if not debug_enabled: return
    debug_level = getSetting('debug.level')
    if level == LOGDEBUG and debug_level != '1': return
    debug_location = getSetting('debug.location')
    if isinstance(msg, int): msg = lang(msg)  # for strings.po translations
    try:
        if not msg.isprintable(
        ):  # ex. "\n" is not a printable character so returns False on those cases
            msg = '%s (NORMALIZED by log_utils.log())' % normalize(msg)
        if isinstance(msg, bytes):
            msg = '%s (ENCODED by log_utils.log())' % msg.decode(
                'utf-8', errors='replace')

        if caller is not None and level != LOGERROR:
            func = inspect.currentframe().f_back.f_code
            line_number = inspect.currentframe().f_back.f_lineno
            caller = "%s.%s()" % (caller, func.co_name)
            msg = 'From func name: %s Line # :%s\n                       msg : %s' % (
                caller, line_number, msg)
        elif caller is not None and level == LOGERROR:
            msg = 'From func name: %s.%s() Line # :%s\n                       msg : %s' % (
                caller[0], caller[1], caller[2], msg)

        if debug_location == '1':
            log_file = joinPath(LOGPATH, 'dg.log')
            if not existsPath(log_file):
                f = open(log_file, 'w')
                f.close()
            reverse_log = getSetting('debug.reversed') == 'true'
            if not reverse_log:
                with open(log_file, 'a', encoding='utf-8'
                          ) as f:  # with auto cleans up and closes
                    line = '[%s %s] %s: %s' % (
                        datetime.now().date(), str(datetime.now().time())[:8],
                        DEBUGPREFIX % debug_list[level], msg)
                    f.write(line.rstrip('\r\n') + '\n')
                    # f.writelines([line1, line2]) ## maybe an option for the 2 lines without using "\n"
            else:
                with open(log_file, 'r+', encoding='utf-8') as f:
                    line = '[%s %s] %s: %s' % (
                        datetime.now().date(), str(datetime.now().time())[:8],
                        DEBUGPREFIX % debug_list[level], msg)
                    log_file = f.read()
                    f.seek(0, 0)
                    f.write(line.rstrip('\r\n') + '\n' + log_file)
        else:
            import xbmc
            xbmc.log('%s: %s' % (DEBUGPREFIX % debug_list[level], msg), level)
    except Exception as e:
        import traceback
        traceback.print_exc()
        import xbmc
        xbmc.log(
            '[ plugin.video.dg ] log_utils.log() Logging Failure: %s' % (e),
            LOGERROR)
示例#6
0
def tmdb_sort():
	sort = int(getSetting('sort.movies.type'))
	tmdb_sort = 'original_order'
	if sort == 1: tmdb_sort = 'title'
	if sort in (2, 3): tmdb_sort = 'vote_average'
	if sort in (4, 5, 6): tmdb_sort = 'release_date' # primary_release_date
	tmdb_sort_order = '.asc' if int(getSetting('sort.movies.order')) == 0 else '.desc'
	sort_string = tmdb_sort + tmdb_sort_order
	return sort_string
示例#7
0
def enabledCheck(cloud_scraper):
	parent_dict = {'ad_cloud': 'alldebrid', 'pm_cloud': 'premiumize', 'rd_cloud': 'realdebrid'}
	try:
		parent_setting = parent_dict[cloud_scraper]
		if getSetting(parent_setting + '.enable') == 'true' and getSetting(cloud_scraper + '.enabled') == 'true': return True
		else: return False
	except:
		from resources.lib.modules import log_utils
		log_utils.error()
		return False
示例#8
0
	def __init__(self):
		self.list = []
		self.meta = []
		self.enable_fanarttv = getSetting('enable.fanarttv') == 'true'
		self.lang = apiLanguage()['tmdb']
		self.show_link = base_link + 'tv/%s?api_key=%s&language=%s&append_to_response=credits,content_ratings,external_ids,alternative_titles,videos' % ('%s', API_key, self.lang)
		# 'append_to_response=translations, aggregate_credits' (DO NOT USE, response data way to massive and bogs the response time)
		self.art_link = base_link + 'tv/%s/images?api_key=%s' % ('%s', API_key)
		self.tvdb_key = getSetting('tvdb.api.key')
		self.imdb_user = getSetting('imdb.user').replace('ur', '')
		self.user = str(self.imdb_user) + str(self.tvdb_key)
		self.date_time = datetime.now()
		self.today_date = (self.date_time).strftime('%Y-%m-%d')
示例#9
0
 def __init__(self):
     last = []
     self.count = 40
     self.list = []
     self.meta = []
     self.threads = []
     self.lang = apiLanguage()['tvdb']
     self.base_link = 'https://api.tvmaze.com'
     self.tvmaze_info_link = 'https://api.tvmaze.com/shows/%s?embed=cast'
     self.tvdb_key = getSetting('tvdb.api.key')
     self.imdb_user = getSetting('imdb.user').replace('ur', '')
     self.user = str(self.imdb_user) + str(self.tvdb_key)
     self.enable_fanarttv = getSetting('enable.fanarttv') == 'true'
示例#10
0
def setView(content, viewType):
    if content:
        control.content(int(sys.argv[1]), content)
    if control.getSetting('auto-view') == 'true':
        views = control.getSetting('viewType2')
        if views == '50' and control.getKodiVersion >= 17 and control.skin == 'skin.estuary':
            views = '55'
        if views == '500' and control.getKodiVersion >= 17 and control.skin == 'skin.estuary':
            views = '50'
        return control.execute("Container.SetViewMode(%s)" % views)
    else:
        views = control.getCurrentViewId()
        return control.execute("Container.SetViewMode(%s)" % views)
示例#11
0
 def __init__(self, *args, **kwargs):
     super(SourceResultsXML, self).__init__(self, args)
     self.window_id = 2000
     self.results = kwargs.get('results')
     self.uncached = kwargs.get('uncached')
     self.total_results = str(len(self.results))
     self.meta = kwargs.get('meta')
     self.info = None
     self.cm = None
     self.make_items()
     self.set_properties()
     self.dnlds_enabled = True if getSetting('downloads') == 'true' and (
         getSetting('movie.download.path') != ''
         or getSetting('tv.download.path') != '') else False
示例#12
0
	def revoke_session_id(self):
		try:
			from resources.lib.modules.control import setSetting
			if getSetting('tmdb.session_id') == '': return
			url = self.auth_base_link + '/session?api_key=%s' % API_key
			post = {"session_id": "%s" % getSetting('tmdb.session_id')}
			result = requests.delete(url, data=post).json()
			if result.get('success') is True:
				setSetting('tmdb.session_id', '')
				notification(message='TMDb session_id successfully deleted')
			else: notification(message='TMDb session_id deletion FAILED', icon='ERROR')
		except:
			from resources.lib.modules import log_utils
			log_utils.error()
示例#13
0
 def __init__(self, *args, **kwargs):
     super(PlayNextXML, self).__init__(self, args)
     self.window_id = 3011
     self.meta = kwargs.get('meta')
     self.playing_file = self.getPlayingFile()
     self.duration = self.getTotalTime() - self.getTime()
     self.default_action = int(getSetting('playnext.default.action'))
     self.closed = False
示例#14
0
 def kitsu_headers(self):
     token = control.getSetting("kitsu.token")
     headers = {
         'Content-Type': 'application/vnd.api+json',
         'Accept': 'application/vnd.api+json',
         'Authorization': "Bearer {}".format(token),
         }
     return headers
示例#15
0
	def __init__(self):
		self.list = []
		self.meta = []
		self.enable_fanarttv = getSetting('enable.fanarttv') == 'true'
		self.lang = apiLanguage()['tmdb']
		self.movie_link = base_link + 'movie/%s?api_key=%s&language=%s&append_to_response=credits,release_dates,videos,alternative_titles' % ('%s', API_key, self.lang)
		###  other "append_to_response" options external_ids,images,content_ratings, translations
		self.art_link = base_link + 'movie/%s/images?api_key=%s' % ('%s', API_key)
		self.external_ids = base_link + 'movie/%s/external_ids?api_key=%s' % ('%s', API_key)
		# self.user = str(self.imdb_user) + str(API_key)
		self.user = str(API_key)
示例#16
0
 def __init__(self, *args, **kwargs):
     super(TraktHiddenManagerXML, self).__init__(self, args)
     self.window_id = 2040
     self.results = kwargs.get('results')
     self.total_results = str(len(self.results))
     self.chosen_hide = []
     self.chosen_unhide = []
     self.hide_watched = getSetting(
         'trakt.HiddenManager.hideWatched') == 'true'
     self.make_items()
     self.set_properties()
     self.hasVideo = False
示例#17
0
    def kitsu_scrobbleAnime(self, kitsu_id, status):
        user_id = int(control.getSetting("kitsu.userid"))
        libraryEntry_url = 'https://kitsu.io/api/edge/library-entries/'
        libraryScrobble_url = libraryEntry_url + '?filter[animeId]=%s&filter[userId]=%d' %(kitsu_id, user_id)
        libraryScrobble_resp = requests.get(libraryScrobble_url).text
        item_dict = json.loads(libraryScrobble_resp)
        if len(item_dict['data']) == 0:
            data = status
            item_type = 'anime'
            final_dict = {
                    "data": {
                        "type": "libraryEntries",
                        "attributes": data,
                        "relationships":{
                            "user":{
                                "data":{
                                    "id": user_id,
                                    "type": "users"
                                }
                            },
                            "anime":{
                                "data":{
                                    "id": kitsu_id,
                                    "type": item_type
                                }
                            }
                        }
                    }
                }

            data = json.dumps(final_dict, separators=(',',':'))
            libraryEntry_post = requests.post(libraryEntry_url, headers=self.kitsu_headers(), data=data)
            if libraryEntry_post.status_code != 201:
                dialog = xbmcgui.Dialog()
                dialog.ok('Kitsu', 'Kitsu scrobble error. Unable to track episode. Try relogging in to resolve error.')
        else:
            _id = item_dict['data'][0]['id']
            final_dict = {
                'data': {
                    'id': _id,
                    'type': 'libraryEntries',
                    'attributes': status
                    }
                }

            data = json.dumps(final_dict, separators=(',',':'))
            libraryEntry_patch = requests.patch(libraryEntry_url + _id, headers=self.kitsu_headers(), data=data)
            if libraryEntry_patch.status_code != 200:
                dialog = xbmcgui.Dialog()
                dialog.ok('Kitsu', 'Kitsu scrobble error. Unable to track episode. Try relogging in to resolve error.')
示例#18
0
 def kitsu_login(self):
     try:
         token_url = 'https://kitsu.io/api/oauth/token'
         resp = requests.post(
             token_url,
             params={
                 "grant_type": "password",
                 "username": '******' % (control.getSetting("kitsu.email")),
                 "password": '******' % (control.getSetting("kitsu.password"))
             })
         token = json.loads(resp.text)['access_token']
         control.setSetting("kitsu.token", token)
         useridScrobble_resp = requests.get(
             'https://kitsu.io/api/edge/users?filter[self]=true',
             headers=self.kitsu_headers())
         userid = json.loads(useridScrobble_resp.text)['data'][0]['id']
         control.setSetting("kitsu.userid", userid)
         control.setSetting("kitsu.login_auth", 'Kitsu')
         dialog = xbmcgui.Dialog()
         dialog.ok('Kitsu', 'Login successful')
     except:
         dialog = xbmcgui.Dialog()
         dialog.ok('Kitsu', 'Login error. Incorrect email or password.')
示例#19
0
    def kitsu_scrobbleAnime(self, kitsu_id, status_data):
        user_id = int(control.getSetting("kitsu.userid"))
        libraryEntry_url = 'https://kitsu.io/api/edge/library-entries/'
        libraryScrobble_url = libraryEntry_url + '?filter[animeId]=%s&filter[userId]=%d' %(kitsu_id, user_id)
        libraryScrobble_resp = requests.get(libraryScrobble_url).text
        item_dict = json.loads(libraryScrobble_resp)
        if len(item_dict['data']) == 0:
            item_type = 'anime'
            final_dict = {
                    "data": {
                        "type": "libraryEntries",
                        "attributes": status_data,
                        "relationships":{
                            "user":{
                                "data":{
                                    "id": user_id,
                                    "type": "users"
                                }
                            },
                            "anime":{
                                "data":{
                                    "id": kitsu_id,
                                    "type": item_type
                                }
                            }
                        }
                    }
                }

            data = json.dumps(final_dict, separators=(',',':'))
            libraryEntry_post = requests.post(libraryEntry_url, headers=self.kitsu_headers(), data=data)
            if libraryEntry_post.status_code != 201:
                dialog = xbmcgui.Dialog()
                dialog.ok('Kitsu', 'Kitsu scrobble error. Unable to track episode. Try relogging in to resolve error.')
        else:
            _id = item_dict['data'][0]['id']
            final_dict = {
                'data': {
                    'id': _id,
                    'type': 'libraryEntries',
                    'attributes': status_data
                    }
                }

            data = json.dumps(final_dict, separators=(',',':'))
            libraryEntry_patch = requests.patch(libraryEntry_url + _id, headers=self.kitsu_headers(), data=data)
            if libraryEntry_patch.status_code != 200:
                dialog = xbmcgui.Dialog()
                dialog.ok('Kitsu', 'Kitsu scrobble error. Unable to track episode. Try relogging in to resolve error.')
示例#20
0
def getSeasonCount(imdb, season=None, season_special=False):
	if not imdb.startswith('tt'): return None
	try:
		if not traktIndicators: return None
		result = trakt.seasonCount(imdb=imdb)
		if not result: return None
		if not season: return result
		else:
			if getSetting('tv.specials') == 'true' and season_special: result = result[int(season)]
			else:
				if int(season) > len(result): return None
				result = result[int(season) - 1]
			return result
	except:
		from resources.lib.modules import log_utils
		log_utils.error()
		return None
示例#21
0
def colorString(text, color=None):
    try:
        text = text.encode('utf-8')
    except:
        try:
            text = bytes(text).decode('utf-8')
            text = str(text)
        except:
            pass
        pass
    if color is 'default' or color is '' or color is None:
        color = control.getSetting('my_ColorChoice')
        if color is '': color = 'none'
    try:
        return '[COLOR ' + str(color) + ']' + text + '[/COLOR]'
    except:
        return '[COLOR ' + str(color) + ']' + text + '[/COLOR]'
示例#22
0
def update(anidetails, id):
    anime_id = id
    episodenumber = anidetails[0]
    episodecount = anidetails[1]
    user_id = int(control.getSetting("kitsu.userid"))
    item_type = 'anime'
    if episodenumber < episodecount:
        update = ['current', episodenumber]
    else:
        update = ['completed', episodenumber]
    data = {'status': update[0], 'progress': update[1]}
    final_dict = {
        "data": {
            "type": "libraryEntries",
            "attributes": data,
            "relationships": {
                "user": {
                    "data": {
                        "id": user_id,
                        "type": "users"
                    }
                },
                "media": {
                    "data": {
                        "id": anime_id,
                        "kind": item_type
                    }
                }
            }
        }
    }
    data = json.dumps(final_dict, separators=(',', ':'))
    send = requests.post("https://kitsu.io/api/edge/library-entries",
                         headers=kitsu_headers(),
                         data=data)
    print send
    return True
示例#23
0
def update(anidetails, id):
    anime_id = id
    episodenumber = anidetails[0]
    episodecount = anidetails[1] 
    user_id = int(control.getSetting("kitsu.userid"))
    item_type = 'anime'	
    if episodenumber < episodecount:
        update = ['current', episodenumber]
    else:
        update = ['completed', episodenumber]    
    data = {'status': update[0],
            'progress': update[1]
            }			
    final_dict = {
        "data": {
            "type": "libraryEntries",
            "attributes": data,
            "relationships":{
                "user":{
                    "data":{
                        "id": user_id,
                        "type": "users"
                    }
                },
                "media":{
                    "data":{
                        "id": anime_id,
                        "kind": item_type
                        }
                    }
                }
            }
        }
    data = json.dumps(final_dict, separators=(',',':'))
    send = requests.post("https://kitsu.io/api/edge/library-entries", headers=kitsu_headers(), data=data)
    print send
    return True
示例#24
0
	def sources(self, data, hostDict):
		sources = []
		if not data: return sources
		try:
			title = data['tvshowtitle'] if 'tvshowtitle' in data else data['title']
			title = title.replace('&', 'and').replace('Special Victims Unit', 'SVU')
			aliases = data['aliases']
			episode_title = data['title'] if 'tvshowtitle' in data else None
			self.year = data['year']
			hdlr = 'S%02dE%02d' % (int(data['season']), int(data['episode'])) if 'tvshowtitle' in data else self.year
			self.season = str(data['season']) if 'tvshowtitle' in data else None
			self.episode = str(data['episode']) if 'tvshowtitle' in data else None
			query_list = self.episode_query_list() if 'tvshowtitle' in data else self.year_query_list()
			# log_utils.log('query_list = %s' % query_list)
			cloud_folders = realdebrid.RealDebrid().user_torrents()
			if not cloud_folders: return sources
			cloud_folders = [i for i in cloud_folders if i['status'] == 'downloaded']
			if not cloud_folders: return sources
			ignoreM2ts = getSetting('rd_cloud.ignore.m2ts') == 'true'
			extras_filter = cloud_utils.extras_filter()
		except:
			from resources.lib.modules import log_utils
			log_utils.error('RD_CLOUD: ')
			return sources

		for folder in cloud_folders:
			is_m2ts = False
			try:
				folder_name = folder.get('filename', '')
				if not cloud_utils.cloud_check_title(title, aliases, folder_name): continue
				id = folder.get('id', '')
				torrent_info = realdebrid.RealDebrid().torrent_info(id)
				folder_files = torrent_info['files']
				folder_files = [i for i in folder_files if i['selected'] == 1]
			except:
				from resources.lib.modules import log_utils
				log_utils.error('RD_CLOUD: ')
				return sources

			for file in folder_files:
				try:
					name = file.get('path').lstrip('/')
					rt = cloud_utils.release_title_format(name)
					if not name.lower().endswith(tuple(supported_video_extensions())): continue
					if any(value in rt for value in extras_filter): continue

					if name.endswith('m2ts'):
						if ignoreM2ts: continue
						name = folder_name
						rt = cloud_utils.release_title_format(name)
						if name in str(sources): continue
						if all(not bool(re.search(i, rt)) for i in query_list): continue  # check if this newly added causes any movie titles that do not have the year to get dropped
						is_m2ts = True
						largest = sorted(folder_files, key=lambda k: k['bytes'], reverse=True)[0]
						index_pos = folder_files.index(largest)
						size = largest['bytes']
						try: link = torrent_info['links'][index_pos]
						except: link = torrent_info['links'][0]
					else:
						if all(not bool(re.search(i, rt)) for i in query_list):
							if 'tvshowtitle' in data:
								season_folder_list = self.season_folder_list()
								nl = name.lower()
								if all(not bool(re.search(i, nl)) for i in season_folder_list): continue
								episode_list = self.episode_list()
								if all(not bool(re.search(i, rt)) for i in episode_list): continue
							else:
								if all(not bool(re.search(i, folder_name)) for i in query_list): continue
								name = folder_name
								if file.get('bytes') < 52428800: continue

						name = name.split('/')
						name = name[len(name)-1]
						index_pos = folder_files.index(file)
						link = torrent_info['links'][index_pos]
						size = file.get('bytes', '')

					name_info = fs_utils.info_from_name(name, title, self.year, hdlr, episode_title)
					hash = folder.get('hash', '')
					quality, info = fs_utils.get_release_quality(name_info, name)
					try:
						dsize, isize = fs_utils.convert_size(size, to='GB')
						info.insert(0, isize)
					except: dsize = 0
					if is_m2ts: info.append('M2TS')
					info = ' / '.join(info)

					sources.append({'provider': 'rd_cloud', 'source': 'cloud', 'debrid': 'Real-Debrid', 'seeders': '', 'hash': hash, 'name': name, 'name_info': name_info,
												'quality': quality, 'language': 'en', 'url': link, 'info': info, 'direct': True, 'debridonly': True, 'size': dsize})
				except:
					from resources.lib.modules import log_utils
					log_utils.error('RD_CLOUD: ')
					return sources
		return sources
示例#25
0
    def sources(self, data, hostDict):
        sources = []
        if not data: return sources
        try:
            title = data['tvshowtitle'] if 'tvshowtitle' in data else data[
                'title']
            title = title.replace('&', 'and').replace('Special Victims Unit',
                                                      'SVU')
            aliases = data['aliases']
            episode_title = data['title'] if 'tvshowtitle' in data else None
            self.year = data['year']
            hdlr = 'S%02dE%02d' % (int(data['season']), int(
                data['episode'])) if 'tvshowtitle' in data else self.year
            self.season = str(
                data['season']) if 'tvshowtitle' in data else None
            self.episode = str(
                data['episode']) if 'tvshowtitle' in data else None
            query_list = self.episode_query_list(
            ) if 'tvshowtitle' in data else self.year_query_list()
            # log_utils.log('query_list = %s' % query_list)
            cloud_files = premiumize.Premiumize().my_files_all()
            if not cloud_files: return sources
            cloud_files = [
                i for i in cloud_files if i['path'].lower().endswith(
                    tuple(supported_video_extensions()))
            ]  # this only lets folder names thru with known video extensions..?
            if not cloud_files: return sources
            ignoreM2ts = getSetting('pm_cloud.ignore.m2ts') == 'true'
            extras_filter = cloud_utils.extras_filter()
        except:
            from resources.lib.modules import log_utils
            log_utils.error('PM_CLOUD: ')
            return sources

        for item in cloud_files:
            is_m2ts = False
            try:
                name = item.get('name', '')
                invalids = ('.img', '.bin', '.dat', '.mpls', '.mpl', '.bdmv',
                            '.bdm', '.disc')
                if name.lower().endswith(invalids): continue

                path = item.get('path', '').lower()
                if not cloud_utils.cloud_check_title(title, aliases, path):
                    continue
                rt = cloud_utils.release_title_format(name)
                if any(value in rt for value in extras_filter): continue

                if name.endswith('m2ts'):
                    if ignoreM2ts: continue
                    name = item.get('path', '').split('/')[0]
                    if name in str(sources): continue
                    if all(not bool(re.search(i, rt)) for i in query_list):
                        continue  # check if this newly added causes any movie titles that do not have the year to get dropped
                    is_m2ts = True
                    m2ts_files = [
                        i for i in cloud_files if name in i.get('path')
                    ]
                    largest = sorted(m2ts_files,
                                     key=lambda k: k['size'],
                                     reverse=True)[0]
                    url_id = largest.get('id', '')
                    size = largest.get('size', '')
                else:
                    if all(not bool(re.search(i, rt)) for i in query_list):
                        if 'tvshowtitle' in data:
                            season_folder_list = self.season_folder_list()
                            if all(not bool(re.search(i, path))
                                   for i in season_folder_list):
                                continue
                            episode_list = self.episode_list()
                            if all(not bool(re.search(i, rt))
                                   for i in episode_list):
                                continue
                        else:
                            if all(not bool(re.search(i, path))
                                   for i in query_list):
                                continue
                            name = item.get('path', '').split('/')[0]
                            if item.get('size') < 52428800: continue
                    url_id = item.get('id', '')
                    size = item.get('size', '')

                name_info = fs_utils.info_from_name(name, title, self.year,
                                                    hdlr, episode_title)
                quality, info = fs_utils.get_release_quality(name_info, name)
                try:
                    dsize, isize = fs_utils.convert_size(size, to='GB')
                    info.insert(0, isize)
                except:
                    dsize = 0
                if is_m2ts: info.append('M2TS')
                info = ' | '.join(info)

                sources.append({
                    'provider': 'pm_cloud',
                    'source': 'cloud',
                    'debrid': 'Premiumize.me',
                    'seeders': '',
                    'hash': '',
                    'name': name,
                    'name_info': name_info,
                    'quality': quality,
                    'language': 'en',
                    'url': url_id,
                    'info': info,
                    'direct': True,
                    'debridonly': True,
                    'size': dsize
                })
            except:
                from resources.lib.modules import log_utils
                log_utils.error('PM_CLOUD: ')
                return sources
        return sources
示例#26
0
    def sources(self, data, hostDict):
        sources = []
        if not data: return sources
        try:
            title = data['tvshowtitle'] if 'tvshowtitle' in data else data[
                'title']
            title = title.replace('&', 'and').replace('Special Victims Unit',
                                                      'SVU')
            aliases = data['aliases']
            episode_title = data['title'] if 'tvshowtitle' in data else None
            self.year = data['year']
            hdlr = 'S%02dE%02d' % (int(data['season']), int(
                data['episode'])) if 'tvshowtitle' in data else self.year
            self.season = str(
                data['season']) if 'tvshowtitle' in data else None
            self.episode = str(
                data['episode']) if 'tvshowtitle' in data else None
            query_list = self.episode_query_list(
            ) if 'tvshowtitle' in data else self.year_query_list()
            # log_utils.log('query_list = %s' % query_list)
            try:
                cloud_folders = alldebrid.AllDebrid().user_cloud()['magnets']
            except:
                return sources
            if not cloud_folders: return sources
            cloud_folders = [i for i in cloud_folders if i['statusCode'] == 4]
            if not cloud_folders: return sources
            ignoreM2ts = getSetting('ad_cloud.ignore.m2ts') == 'true'
            extras_filter = cloud_utils.extras_filter()
        except:
            from resources.lib.modules import log_utils
            log_utils.error('AD_CLOUD: ')
            return sources

        for folder in cloud_folders:
            is_m2ts = False
            try:
                folder_name = folder.get('filename')
                if not cloud_utils.cloud_check_title(title, aliases,
                                                     folder_name):
                    continue
                files = folder.get('links', '')
                # files = [i for i in files if i['filename'].lower().endswith(tuple(supported_video_extensions()))]
                if not files: continue
            except:
                from resources.lib.modules import log_utils
                log_utils.error('AD_CLOUD: ')
                return sources

            for file in files:
                try:
                    name = file.get('filename', '')
                    if name.lower().endswith(invalid_extensions): continue
                    path = folder.get('filename', '').lower()
                    rt = cloud_utils.release_title_format(name)
                    if any(value in rt for value in extras_filter): continue

                    if '.m2ts' in str(file.get('files')):
                        if ignoreM2ts: continue
                        if name in str(sources): continue
                        if all(not bool(re.search(i, rt)) for i in query_list):
                            continue  # check if this newly added causes any movie titles that do not have the year to get dropped
                        is_m2ts = True
                        m2ts_files = [
                            i for i in files if name == i.get('filename')
                        ]
                        largest = sorted(m2ts_files,
                                         key=lambda k: k['size'],
                                         reverse=True)[0]
                        link = largest.get('link', '')
                        size = largest.get('size', '')
                    else:
                        if all(not bool(re.search(i, rt)) for i in query_list):
                            if 'tvshowtitle' in data:
                                season_folder_list = self.season_folder_list()
                                if all(not bool(re.search(i, path))
                                       for i in season_folder_list):
                                    continue
                                episode_list = self.episode_list()
                                if all(not bool(re.search(i, rt))
                                       for i in episode_list):
                                    continue
                            else:
                                if all(not bool(re.search(i, path))
                                       for i in query_list):
                                    continue
                                name = folder.get('filename', '')
                        link = file.get('link', '')
                        size = file.get('size', '')

                    name_info = fs_utils.info_from_name(
                        name, title, self.year, hdlr, episode_title)
                    hash = folder.get('hash', '')
                    seeders = folder.get('seeders', '')
                    quality, info = fs_utils.get_release_quality(
                        name_info, name)
                    try:
                        dsize, isize = fs_utils.convert_size(size, to='GB')
                        info.insert(0, isize)
                    except:
                        dsize = 0
                    if is_m2ts: info.append('M2TS')
                    info = ' / '.join(info)

                    sources.append({
                        'provider': 'ad_cloud',
                        'source': 'cloud',
                        'debrid': 'AllDebrid',
                        'seeders': seeders,
                        'hash': hash,
                        'name': name,
                        'name_info': name_info,
                        'quality': quality,
                        'language': 'en',
                        'url': link,
                        'info': info,
                        'direct': True,
                        'debridonly': True,
                        'size': dsize
                    })
                except:
                    from resources.lib.modules import log_utils
                    log_utils.error('AD_CLOUD: ')
                    return sources
        return sources
示例#27
0
def BUILDS():
    setView('addons', 'views')
    CreateDir('Kodi Version Check', 'url', 'getKodiVersion', MENU_ICON,
              MENU_FANART, 'Check My Kodi Version.')
    CreateDir('Current Profile Check', 'url', 'checkCurrentProfile', MENU_ICON,
              MENU_FANART, 'Check My Current Profile.')
    wizard1 = control.setting('enable_wiz1')
    if wizard1 != 'false':
        try:
            name = unicode(control.getSetting('name1'))
            url = unicode(control.getSetting('url1'))
            img = unicode(control.getSetting('img1'))
            fanart = unicode(control.getSetting('img1'))
            CreateDir('[Wizard] ' + name,
                      url,
                      'install_build',
                      img,
                      fanart,
                      'My Custom Build.',
                      isFolder=False)
        except:
            pass
    wizard2 = control.setting('enable_wiz2')
    if wizard2 != 'false':
        try:
            name = unicode(control.getSetting('name2'))
            url = unicode(control.getSetting('url2'))
            img = unicode(control.getSetting('img2'))
            fanart = unicode(control.getSetting('img2'))
            CreateDir('[Wizard] ' + name,
                      url,
                      'install_build',
                      img,
                      fanart,
                      'My Custom Build.',
                      isFolder=False)
        except:
            pass
    wizard3 = control.setting('enable_wiz3')
    if wizard3 != 'false':
        try:
            name = unicode(control.getSetting('name3'))
            url = unicode(control.getSetting('url3'))
            img = unicode(control.getSetting('img3'))
            fanart = unicode(control.getSetting('img3'))
            CreateDir('[Wizard] ' + name,
                      url,
                      'install_build',
                      img,
                      fanart,
                      'My Custom Build.',
                      isFolder=False)
        except:
            pass
    CreateDir('[I]Swap Skin[/I]', 'url', 'skinSWAP', MENU_ICON, MENU_FANART,
              'Swap to Default Skin.')
    CreateDir('[I]Force Close Kodi[/I]', 'url', 'Force_Close', MENU_ICON,
              MENU_FANART, 'Force Close Kodi.')
    CreateDir('[I]Reload Skin[/I]', 'url', 'reloadMySkin', MENU_ICON,
              MENU_FANART, 'Reload Current Skin.')
    CreateDir('[I]Reload Profile[/I]', 'url', 'reloadProfile', MENU_ICON,
              MENU_FANART, 'Reload My User Profile.')
    CreateDir('[I]Fresh Start[/I]', 'url', 'fresh_start', MENU_ICON,
              MENU_FANART, 'Wipe Kodi like a Factory Reset.')
    CreateDir('Wizard Settings', 'url', 'wizSettings', MENU_ICON, MENU_FANART,
              'Open up Wizard Settings.')
示例#28
0
 def kitsu_login(self):
     try:
         token_url = 'https://kitsu.io/api/oauth/token'
         resp = requests.post(token_url, params={"grant_type": "password", "username": '******' %(control.getSetting("kitsu.email")), "password": '******' %(control.getSetting("kitsu.password"))})
         token = json.loads(resp.text)['access_token']
         control.setSetting("kitsu.token", token)
         useridScrobble_resp = requests.get('https://kitsu.io/api/edge/users?filter[self]=true', headers=self.kitsu_headers())
         userid = json.loads(useridScrobble_resp.text)['data'][0]['id']
         control.setSetting("kitsu.userid", userid)
         control.setSetting("kitsu.login_auth", 'Kitsu')
         dialog = xbmcgui.Dialog()
         dialog.ok('Kitsu', 'Login successful')
     except:
         dialog = xbmcgui.Dialog()
         dialog.ok('Kitsu', 'Login error. Incorrect email or password.')
示例#29
0
    def run(self, anime_id, ep_id, url, synop, start_date, start_year, gen, epnum, epcount, eplink):
        control.sleep(200)

        self.anime_id = int(anime_id)
        self.episode_id = int(ep_id)

        item = control.item(path=url)

        try:
            c = cache.get(masterani.get_anime_details, 3, self.anime_id)

            ctype = c['type']
            ctype = 'movie' if int(ctype) is 2 else 'episode'

            tvshowtitle = c['title']
            poster = c['poster']
            coverlink = "http://cdn.masterani.me/poster/" + poster
            print coverlink

            item.setArt({'icon': coverlink, 'thumb': coverlink, 'poster': coverlink, 'tvshow.poster': coverlink, 'season.poster': coverlink})

            e = c['episodes'][self.episode_id]
            title = e['info']['title']
            season2options = [': Season 2', ' Season 2', ': 2nd Season', ': Second Season', ' 2nd Season', ' Second Season', ': Part 2', ' Part 2', ': Part II', ' Part II']
            season3options = [': Season 3', ' Season 3', ': 3rd Season', ': Third Season', ' 3rd Season', ' Third Season', ': Part 3', ' Part 3', ': Part III', ' Part III']
            season4options = [': Season 4', ' Season 4', ': 4th Season', ': Fourth Season', ' 4th Season', ' Fourth Season', ': Part 4', ' Part 4', ': Part IV', ' Part IV']
            season5options = [': Season 5', ' Season 5', ': 5th Season', ': Fifth Season', ' 5th Season', ' Fifth Season', ': Part 5', ' Part 5', ': Part V', ' Part V']
            season = 1
            for option in season2options:
                if option in tvshowtitle:
                    tvshowtitle = tvshowtitle.replace(option, "")
                    season = 2
            for option in season3options:
                if option in tvshowtitle:
                    tvshowtitle = tvshowtitle.replace(option, "")
                    season = 3
            for option in season4options:
                if option in tvshowtitle:
                    tvshowtitle = tvshowtitle.replace(option, "")
                    season = 4
            for option in season5options:
                if option in tvshowtitle:
                    tvshowtitle = tvshowtitle.replace(option, "")
                    season = 5
            episode = e['info']['episode']
            if ctype is 'video': title = c['title']
            if title is None: title = "Episode %s" % episode

            item.setInfo(type="video",
                         infoLabels={'tvshowtitle': title, 'title': tvshowtitle, 'episode': int(episode),
                                     'season': int(season), 'mediatype': ctype})
									 
            #year = e['info']['aired'].split("-", 1)[0]
            #plot = e['info']['description']

            if 'movie' in ctype:
                year = start_year
                plot = synop
                genre = gen
                item.setInfo(type="video",
                             infoLabels={'year': year, 'plot': plot, 'genre': genre})
            else:   
                year = e['info']['aired'].split("-", 1)[0]
                plot = e['info']['description']			
                item.setInfo(type="video",
                             infoLabels={'year': year, 'plot': plot, 'genre': gen})

        except:
            pass

        item.setProperty('Video', 'true')
        item.setProperty('IsPlayable', 'true')

        trackyesno = control.getSetting("track.yesno")
        tracktype = control.getSetting("track.type")

        if trackyesno == "true" and tracktype == 'Kitsu':
                kitsu.KitsuScrobbler().kitsu_initScrobble(tvshowtitle, start_date, epnum, epcount)
        else:
            pass

        self.play(url, item)

        self.playback_checker(self.anime_id, eplink)

        pass
示例#30
0
    def tvmaze_list(self, url):
        try:
            result = client.request(url)  # not json request
            next = ''
            if getSetting('tvshows.networks.view') == '0':
                result = client.parseDOM(result,
                                         'section',
                                         attrs={'id': 'this-seasons-shows'})
                items = client.parseDOM(result,
                                        'span',
                                        attrs={'class': 'title .*'})
                list_count = 60
            if getSetting('tvshows.networks.view') == '1':
                result = client.parseDOM(result, 'div', attrs={'id': 'w1'})
                items = client.parseDOM(result,
                                        'span',
                                        attrs={'class': 'title'})
                list_count = 25
                page = int(str(url.split('&page=', 1)[1]))
                next = '%s&page=%s' % (url.split('&page=', 1)[0], page + 1)
                last = []
                last = client.parseDOM(result,
                                       'li',
                                       attrs={'class': 'last disabled'})
                if last != []: next = ''
            items = [client.parseDOM(i, 'a', ret='href') for i in items]
            items = [i[0] for i in items if len(i) > 0]
            items = [
                re.findall(r'/(\d+)/', i) for i in items
            ]  #https://www.tvmaze.com/networks/645/tlc pulls tvmaze_id from link
            items = [i[0] for i in items if len(i) > 0]
            items = items[:list_count]
            sortList = items
        except:
            log_utils.error()
            return

        def items_list(tvmaze_id):
            # if i['metacache']: return # not possible with only a tvmaze_id
            try:
                values = {}
                values['next'] = next
                values['tvmaze'] = tvmaze_id
                url = self.tvmaze_info_link % tvmaze_id
                item = get_request(url)
                values['content'] = item.get('type', '').lower()
                values['mediatype'] = 'tvshow'
                values['title'] = item.get('name')
                values['originaltitle'] = values['title']
                values['tvshowtitle'] = values['title']
                values['premiered'] = str(item.get(
                    'premiered', '')) if item.get('premiered') else ''
                try:
                    values['year'] = values['premiered'][:4]
                except:
                    values['year'] = ''
                ids = item.get('externals')
                imdb = str(ids.get('imdb', '')) if ids.get('imdb') else ''
                tvdb = str(ids.get('thetvdb',
                                   '')) if ids.get('thetvdb') else ''
                tmdb = ''  # TVMaze does not have tmdb_id in api
                studio = item.get('network', {}) or item.get('webChannel', {})
                values['studio'] = studio.get('name', '')
                values['genre'] = []
                for i in item['genres']:
                    values['genre'].append(i.title())
                if values['genre'] == []: values['genre'] = 'NA'
                values['duration'] = int(item.get(
                    'runtime', '')) * 60 if item.get('runtime') else ''
                values['rating'] = str(item.get('rating').get(
                    'average',
                    '')) if item.get('rating').get('average') else ''
                values['plot'] = client.cleanHTML(item['summary'])
                values['status'] = item.get('status', '')
                values['castandart'] = []
                for person in item['_embedded']['cast']:
                    try:
                        values['castandart'].append({
                            'name':
                            person['person']['name'],
                            'role':
                            person['character']['name'],
                            'thumbnail':
                            (person['person']['image']['medium']
                             if person['person']['image']['medium'] else '')
                        })
                    except:
                        pass
                    if len(values['castandart']) == 150: break
                image = item.get('image', {}) or ''
                values['poster'] = image.get('original', '') if image else ''
                values['fanart'] = ''
                values['banner'] = ''
                values['mpaa'] = ''
                values['votes'] = ''
                try:
                    values['airday'] = item['schedule']['days'][0]
                except:
                    values['airday'] = ''
                values['airtime'] = item['schedule']['time'] or ''
                try:
                    values['airzone'] = item['network']['country']['timezone']
                except:
                    values['airzone'] = ''
                values['metacache'] = False

                #### -- Missing id's lookup -- ####
                if not tmdb and (imdb or tvdb):
                    try:
                        result = cache.get(tmdb_indexer.TVshows().IdLookup, 96,
                                           imdb, tvdb)
                        tmdb = str(result.get('id',
                                              '')) if result.get('id') else ''
                    except:
                        tmdb = ''
                if not imdb or not tmdb or not tvdb:
                    try:
                        trakt_ids = trakt.SearchTVShow(quote_plus(
                            values['tvshowtitle']),
                                                       values['year'],
                                                       full=False)
                        if not trakt_ids: raise Exception
                        ids = trakt_ids[0].get('show', {}).get('ids', {})
                        if not imdb:
                            imdb = str(ids.get('imdb',
                                               '')) if ids.get('imdb') else ''
                        if not tmdb:
                            tmdb = str(ids.get('tmdb',
                                               '')) if ids.get('tmdb') else ''
                        if not tvdb:
                            tvdb = str(ids.get('tvdb',
                                               '')) if ids.get('tvdb') else ''
                    except:
                        log_utils.error()
#################################
                if not tmdb:
                    return log_utils.log(
                        'tvshowtitle: (%s) missing tmdb_id: ids={imdb: %s, tmdb: %s, tvdb: %s}'
                        % (values['tvshowtitle'], imdb, tmdb, tvdb), __name__,
                        log_utils.LOGDEBUG
                    )  # log TMDb shows that they do not have
                # self.list = metacache.fetch(self.list, self.lang, self.user)
                # if self.list['metacache'] is True: raise Exception()

                showSeasons = cache.get(
                    tmdb_indexer.TVshows().get_showSeasons_meta, 96, tmdb)
                if not showSeasons: return
                showSeasons = dict(
                    (k, v) for k, v in iter(showSeasons.items())
                    if v is not None and v != ''
                )  # removes empty keys so .update() doesn't over-write good meta
                values.update(showSeasons)
                if not values.get('imdb'): values['imdb'] = imdb
                if not values.get('tmdb'): values['tmdb'] = tmdb
                if not values.get('tvdb'): values['tvdb'] = tvdb
                for k in ('seasons', ):
                    values.pop(
                        k, None
                    )  # pop() keys from showSeasons that are not needed anymore
                if self.enable_fanarttv:
                    extended_art = fanarttv_cache.get(fanarttv.get_tvshow_art,
                                                      168, tvdb)
                    if extended_art: values.update(extended_art)
                meta = {
                    'imdb': imdb,
                    'tmdb': tmdb,
                    'tvdb': tvdb,
                    'lang': self.lang,
                    'user': self.user,
                    'item': values
                }  # DO NOT move this after "values = dict()" below or it becomes the same object and "del meta['item']['next']" removes it from both
                values = dict((k, v) for k, v in iter(values.items())
                              if v is not None and v != '')
                self.list.append(values)
                if 'next' in meta.get('item'):
                    del meta['item']['next']  # next can not exist in metacache
                self.meta.append(meta)
                self.meta = [
                    i for i in self.meta if i.get('tmdb')
                ]  # without this ui removed missing tmdb but it still writes these cases to metacache?
                metacache.insert(self.meta)
            except:
                log_utils.error()

        try:
            threads = []
            append = threads.append
            for tvmaze_id in items:
                append(Thread(target=items_list, args=(tvmaze_id, )))
            [i.start() for i in threads]
            [i.join() for i in threads]
            sorted_list = []
            self.list = [
                i for i in self.list if i.get('tmdb') and i.get('tmdb') != '0'
            ]  # to rid missing tmdb_id's because season list can not load without
            for i in sortList:
                sorted_list += [
                    item for item in self.list if str(item['tvmaze']) == str(i)
                ]
            return sorted_list
        except:
            log_utils.error()
            return
示例#31
0
# -*- coding: UTF-8 -*-

import os
from pkgutil import walk_packages
from resources.lib.modules.control import setting as getSetting

debug_enabled = getSetting('debug.enabled') == 'true'


def cloudSources():
	try:
		sourceDict = []
		sourceFolderLocation = os.path.dirname(__file__)
		for loader, module_name, is_pkg in walk_packages([sourceFolderLocation]):
			if is_pkg: continue
			if 'cloud_utils' in module_name: continue
			if enabledCheck(module_name):
				try:
					module = loader.find_module(module_name).load_module(module_name)
					sourceDict.append((module_name, module.source()))
				except Exception as e:
					if debug_enabled:
						from resources.lib.modules import log_utils
						log_utils.log('Error: Loading cloud scraper module: "%s": %s' % (module_name, e), level=log_utils.LOGWARNING)
		return sourceDict
	except:
		from resources.lib.modules import log_utils
		log_utils.error()
		return []

def enabledCheck(cloud_scraper):
示例#32
0
# -*- coding: utf-8 -*-
"""
	Venom Add-on
"""

import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
from resources.lib.modules.control import setting as getSetting, apiLanguage, notification

headers = {'api-key': '9f846e7ec1ea94fad5d8a431d1d26b43'}
client_key = getSetting('fanart.tv.api.key')
if not client_key: client_key = 'cf0ebcc2f7b824bd04cf3a318f15c17d'
headers.update({'client-key': client_key})
base_url = "http://webservice.fanart.tv/v3/%s/%s"
lang = apiLanguage()['trakt']
error_codes = [
    '500 Internal Server Error', '502 Bad Gateway', '504 Gateway Timeout'
]
session = requests.Session()
retries = Retry(total=5,
                backoff_factor=0.1,
                status_forcelist=[500, 502, 503, 504])
session.mount('http://', HTTPAdapter(max_retries=retries))


def get_request(url):
    try:
        try:
            result = session.get(url, headers=headers, timeout=5)
        except requests.exceptions.SSLError:
示例#33
0
def syncMyAccounts(silent=False):
    try:
        all_acct = myaccounts.getAll()
        trakt_acct = all_acct.get('trakt')
        if getSetting('trakt.token') != trakt_acct.get('token'):
            trakt_username = trakt_acct.get('username')
            setSetting('trakt.username', trakt_username)
            if trakt_username != '': setSetting('trakt.isauthed', 'true')
            else: setSetting('trakt.isauthed', '')
            setSetting('trakt.expires', trakt_acct.get('expires'))
            setSetting('trakt.token', trakt_acct.get('token'))
            setSetting('trakt.refresh', trakt_acct.get('refresh'))

        ad_acct = all_acct.get('alldebrid')
        if getSetting('alldebrid.username') != ad_acct.get('username'):
            setSetting('alldebrid.token', ad_acct.get('token'))
            # if getSetting('alldebrid.token') == '': setSetting('alldebrid.enable', 'false')
            setSetting('alldebrid.username', ad_acct.get('username'))

        pm_acct = all_acct.get('premiumize')
        if getSetting('premiumize.username') != pm_acct.get('username'):
            setSetting('premiumize.token', pm_acct.get('token'))
            # if getSetting('premiumize.token') == '': setSetting('premiumize.enable', 'false')
            setSetting('premiumize.username', pm_acct.get('username'))

        rd_acct = all_acct.get(
            'realdebrid'
        )  # token refresh 1hr expiry, Venom handles this internally
        if getSetting('realdebrid.username') != rd_acct.get('username'):
            setSetting('realdebrid.token', rd_acct.get('token'))
            # if getSetting('realdebrid.token') == '': setSetting('realdebrid.enable', 'false')
            setSetting('realdebrid.username', rd_acct.get('username'))
            setSetting('realdebrid.client_id', rd_acct.get('client_id'))
            setSetting('realdebrid.refresh', rd_acct.get('refresh'))
            setSetting('realdebrid.secret', rd_acct.get('secret'))

        fanart_acct = all_acct.get('fanart_tv')
        if getSetting('fanart.tv.api.key') != fanart_acct.get('api_key'):
            setSetting('fanart.tv.api.key', fanart_acct.get('api_key'))

        tmdb_acct = all_acct.get('tmdb')
        if getSetting('tmdb.api.key') != tmdb_acct.get('api_key'):
            setSetting('tmdb.api.key', tmdb_acct.get('api_key'))
        if getSetting('tmdb.username') != tmdb_acct.get('username'):
            setSetting('tmdb.username', tmdb_acct.get('username'))
        if getSetting('tmdb.password') != tmdb_acct.get('password'):
            setSetting('tmdb.password', tmdb_acct.get('password'))
        if getSetting('tmdb.session_id') != tmdb_acct.get('session_id'):
            setSetting('tmdb.session_id', tmdb_acct.get('session_id'))

        tvdb_acct = all_acct.get('tvdb')
        if getSetting('tvdb.api.key') != tvdb_acct.get('api_key'):
            setSetting('tvdb.api.key', tvdb_acct.get('api_key'))

        imdb_acct = all_acct.get('imdb')
        if getSetting('imdb.user') != imdb_acct.get('user'):
            setSetting('imdb.user', imdb_acct.get('user'))

        fu_acct = all_acct.get('furk')
        if getSetting('furk.username') != fu_acct.get('username'):
            setSetting('furk.username', fu_acct.get('username'))
            setSetting('furk.password', fu_acct.get('password'))
        if getSetting('furk.api') != fu_acct.get('api_key'):
            setSetting('furk.api', fu_acct.get('api_key'))

        if not silent: notification(message=32114)
    except:
        from resources.lib.modules import log_utils
        log_utils.error()
示例#34
0
    def run(self, anime_id, ep_id, url, synop, start_date, start_year, gen,
            epnum, epcount, eplink):
        control.sleep(200)

        self.anime_id = int(anime_id)
        self.episode_id = int(ep_id)

        item = control.item(path=url)

        try:
            c = cache.get(masterani.get_anime_details, 3, self.anime_id)

            ctype = c['type']
            ctype = 'movie' if int(ctype) is 2 else 'episode'

            tvshowtitle = c['title']
            poster = c['poster']
            coverlink = "http://cdn.masterani.me/poster/" + poster
            print coverlink

            item.setArt({
                'icon': coverlink,
                'thumb': coverlink,
                'poster': coverlink,
                'tvshow.poster': coverlink,
                'season.poster': coverlink
            })

            e = c['episodes'][self.episode_id]
            title = e['info']['title']
            season2options = [
                ': Season 2', ' Season 2', ': 2nd Season', ': Second Season',
                ' 2nd Season', ' Second Season', ': Part 2', ' Part 2',
                ': Part II', ' Part II'
            ]
            season3options = [
                ': Season 3', ' Season 3', ': 3rd Season', ': Third Season',
                ' 3rd Season', ' Third Season', ': Part 3', ' Part 3',
                ': Part III', ' Part III'
            ]
            season4options = [
                ': Season 4', ' Season 4', ': 4th Season', ': Fourth Season',
                ' 4th Season', ' Fourth Season', ': Part 4', ' Part 4',
                ': Part IV', ' Part IV'
            ]
            season5options = [
                ': Season 5', ' Season 5', ': 5th Season', ': Fifth Season',
                ' 5th Season', ' Fifth Season', ': Part 5', ' Part 5',
                ': Part V', ' Part V'
            ]
            season = 1
            for option in season2options:
                if option in tvshowtitle:
                    tvshowtitle = tvshowtitle.replace(option, "")
                    season = 2
            for option in season3options:
                if option in tvshowtitle:
                    tvshowtitle = tvshowtitle.replace(option, "")
                    season = 3
            for option in season4options:
                if option in tvshowtitle:
                    tvshowtitle = tvshowtitle.replace(option, "")
                    season = 4
            for option in season5options:
                if option in tvshowtitle:
                    tvshowtitle = tvshowtitle.replace(option, "")
                    season = 5
            episode = e['info']['episode']
            if ctype is 'video': title = c['title']
            if title is None: title = "Episode %s" % episode

            item.setInfo(type="video",
                         infoLabels={
                             'tvshowtitle': title,
                             'title': tvshowtitle,
                             'episode': int(episode),
                             'season': int(season),
                             'mediatype': ctype
                         })

            #year = e['info']['aired'].split("-", 1)[0]
            #plot = e['info']['description']

            if 'movie' in ctype:
                year = start_year
                plot = synop
                genre = gen
                item.setInfo(type="video",
                             infoLabels={
                                 'year': year,
                                 'plot': plot,
                                 'genre': genre
                             })
            else:
                year = e['info']['aired'].split("-", 1)[0]
                plot = e['info']['description']
                item.setInfo(type="video",
                             infoLabels={
                                 'year': year,
                                 'plot': plot,
                                 'genre': gen
                             })

        except:
            pass

        item.setProperty('Video', 'true')
        item.setProperty('IsPlayable', 'true')

        trackyesno = control.getSetting("track.yesno")
        tracktype = control.getSetting("track.type")

        if trackyesno == "true" and tracktype == 'Kitsu':
            kitsu.KitsuScrobbler().kitsu_initScrobble(tvshowtitle, start_date,
                                                      epnum, epcount)
        else:
            pass

        self.play(url, item)

        self.playback_checker(self.anime_id, eplink)

        pass