def get_trakt_id(title, item_type, year=None): required_type = 'show' if item_type == 'episode' else 'movie' global trakt_cache if not trakt_cache: trakt_cache = read_json(TRAKT_CACHE_PATH) or {'movie': {}, 'show': {}} trakt_id = trakt_cache[required_type].get(title) if trakt_id: return trakt_id logger.debug(f'Searching trakt: Title: "{title}", Year: {year}') results = search(title, [required_type], year) if results is None: # Connection error return 0 # Dont store in cache elif results == [] or results[0]['score'] < 5: # Weak or no match msg = f'Trakt search yielded no results for the {required_type}, {title}' msg += f", Year: {year}" * bool(year) logger.warning(msg) notify(msg) trakt_id = -1 else: trakt_id = results[0][required_type]['ids']['trakt'] trakt_cache[required_type][title] = trakt_id logger.debug(f'Trakt ID: {trakt_id}') write_json(trakt_cache, TRAKT_CACHE_PATH) return trakt_id
def get_token(**kwargs): token = kwargs.get("token") or read_json(PLEX_TOKEN_PATH).get("token") if not token: logger.info("Retrieving plex token") token = plex_token_auth(kwargs["login"], kwargs["password"]) if token: write_json({"token": token}, PLEX_TOKEN_PATH) logger.info(f"Saved plex token to {PLEX_TOKEN_PATH}") return token
def get_access_token(): global token_data if not token_data: logger.info("Access token not found in config. " "Initiating device authentication.") token_data = device_auth() write_json(token_data, TRAKT_TOKEN_PATH) elif token_data['created_at'] + token_data['expires_in'] - \ time.time() < 86400: logger.info("Access token about to expire. Refreshing.") token_data = refresh_token(token_data) write_json(token_data, TRAKT_TOKEN_PATH) if not token_data: logger.error("Unable to get access token. " f"Try deleting {TRAKT_TOKEN_PATH!s} and retry.") notify("Failed to authorize application.", stdout=True) sys.exit(1) return token_data['access_token']
def get_token(): global token_data if not token_data: logger.info("Retrieving plex token") login = input("Plex login ID: ") pwd = getpass() resp = plex_token_auth(login, pwd) if resp.ok: token_data = {"token": resp.json()["user"]["authToken"]} write_json(token_data, PLEX_TOKEN_PATH) logger.info(f"Saved plex token to {PLEX_TOKEN_PATH}") elif resp is not None: print(resp.json().get("error", resp.text)) return None else: logger.error("Unable to get access token. " f"Try deleting {PLEX_TOKEN_PATH!s} and retry.") return None return token_data['token']
def get_trakt_id(title, item_type, year=None): required_type = 'show' if item_type == 'episode' else 'movie' global trakt_cache if not trakt_cache: trakt_cache = read_json(TRAKT_CACHE_PATH) or {'movie': {}, 'show': {}} key = f"{title}{year or ''}" trakt_id = trakt_cache[required_type].get(key) if trakt_id: return trakt_id logger.debug( f'Searching trakt: Title: "{title}"{year and f", Year: {year}" or ""}') results = search(title, [required_type], year) if results == [] and year is not None: # no match, possibly a mismatch in year metadata msg = ( f'Trakt search yielded no results for the {required_type}, {title}, ' f'Year: {year}. Retrying search without filtering by year.') logger.warning(msg) notify(msg, category="trakt") results = search(title, [required_type]) # retry without 'year' if results is None: # Connection error return 0 # Dont store in cache elif results == [] or results[0]['score'] < 5: # Weak or no match msg = f'Trakt search yielded no results for the {required_type}, {title}' msg += f", Year: {year}" * bool(year) logger.warning(msg) notify(msg, category="trakt") trakt_id = -1 else: trakt_id = results[0][required_type]['ids']['trakt'] trakt_cache[required_type][key] = trakt_id logger.debug(f'Trakt ID: {trakt_id}') write_json(trakt_cache, TRAKT_CACHE_PATH) return trakt_id
def get_trakt_id(title, item_type): required_type = 'show' if item_type == 'episode' else 'movie' logger.debug('Searching cache.') trakt_id = trakt_cache[required_type].get(title) if trakt_id: return trakt_id logger.debug('Searching trakt.') results = search(title, [required_type]) if results is None: # Connection error return 0 # Dont store in cache elif results == [] or results[0]['score'] < 5: # Weak or no match logger.warning('Trakt search yielded no results.') notify('Trakt search yielded no results for ' + title) trakt_id = -1 else: trakt_id = results[0][required_type]['ids']['trakt'] trakt_cache[required_type][title] = trakt_id logger.debug(f'Trakt ID: {trakt_id}') write_json(trakt_cache, TRAKT_CACHE_PATH) return trakt_id
def save_backlog(self): write_json(self.backlog, self.BACKLOG_PATH)
def token_data(self, value): if value is None: return self._token_data = value write_json(self._token_data, self.TRAKT_TOKEN_PATH)