import time from due.html.utilities import page from due.html.anime import anime_to_html from due.html.manga import manga_to_html from due.anilist.collection import create_collection from due.anilist.utilities import last_activity, user_id, user_name_to_id from flask import make_response, redirect, request, Blueprint import json import os import datetime bp = Blueprint("index", __name__) @bp.route("/") def user(username): return home(username) @bp.route("/", defaults={"username": None}) def home(username): response = make_response("") disable_manga = True if request.args.get("show_manga") is not None: disable_manga = False if request.args.get("hide_message") is not None: if request.cookies.get("hide_message") is None: response = redirect("/") response.set_cookie("hide_message", "1") if request.args.get("toggle_missing") is not None: response = redirect( f"/{'?show_manga' if request.args.get('show_manga') is not None else ''}" ) if request.cookies.get("show_missing") is None: response.set_cookie("show_missing", "1") else: response.delete_cookie("show_missing") # print( # requests.post( # "https://anilist.co/api/v2/oauth/token", # data={ # "grant_type": "refresh_token", # "client_id": os.getenv("ANILIST_CLIENT_ID"), # "client_secret": os.getenv("ANILIST_CLIENT_SECRET"), # "refresh_token": json.loads(request.cookies.get("anilist"))[ # "refresh_token" # ], # }, # ).json() # ) if request.cookies.get("anilist"): anilist = json.loads(request.cookies.get("anilist")) if user_id(anilist) == -1: response = redirect("/") response.delete_cookie("anilist") return response start = time.time() (current_anime, name) = create_collection( anilist, "ANIME", request.args.get("username") or username ) print(name, flush=True) releasing_anime = [ media for media in current_anime if media["media"]["status"] == "RELEASING" ] releasing_outdated_anime = [ media for media in releasing_anime if media["media"]["type"] == "ANIME" and int( ( {"episode": 0} if media["media"]["nextAiringEpisode"] is None else media["media"]["nextAiringEpisode"] )["episode"] ) - 1 != int((media["media"]["mediaListEntry"] or {"progress": 0})["progress"]) ] (anime_html, anime_length) = anime_to_html(releasing_outdated_anime) anime_time = time.time() - start start = time.time() manga_body = 'Show manga' if not disable_manga: (current_manga, _) = create_collection( anilist, "MANGA", request.args.get("username") ) releasing_manga = [ media for media in current_manga if media["media"]["status"] == "RELEASING" and media["media"]["format"] != "NOVEL" ] releasing_outdated_manga = [ media for media in releasing_manga if media["media"]["type"] == "MANGA" and int( (media["media"]["mediaListEntry"] or {"progress": 0})["progress"] ) >= 1 # Useful when testing ] (manga_html, manga_length) = manga_to_html( releasing_outdated_manga, request.cookies.get("show_missing") ) manga_time = time.time() - start manga_body = f"""

Manga [{manga_length}] {round(manga_time, 2)}s {manga_html}
""" response.set_data( page( f"""Log out from AniList ({name}) {"

You don't have any new activity statuses from the past day! Create one to keep your streak!

" if datetime.datetime.fromtimestamp(last_activity(user_name_to_id(name))).date() != datetime.datetime.now(datetime.timezone.utc).date() else "

"}""", f"""{'Hide' if request.cookies.get('show_missing') else 'Show'} unresolved

Anime [{anime_length}] {round(anime_time, 2)}s {anime_html}
{manga_body}""", ) ) else: response.set_data( page( f"""Log in with AniList
""", "Please log in to view due media.", ) ) return response