mirror of
https://github.com/DragoonAethis/itch-dl.git
synced 2025-02-01 22:32:37 +01:00
816a4d7399
Warns about various small code smells and odd issues we can catch early. Nothing here should change the program behavior directly.
58 lines
1.5 KiB
Python
58 lines
1.5 KiB
Python
import logging
|
|
from typing import Dict, List, Tuple
|
|
|
|
from .api import ItchApiClient
|
|
|
|
KEYS_CACHED: bool = False
|
|
DOWNLOAD_KEYS: Dict[int, str] = {}
|
|
GAME_URLS: List[str] = []
|
|
|
|
|
|
def load_keys_and_urls(client: ItchApiClient) -> None:
|
|
global KEYS_CACHED # noqa: PLW0603 (whatever, I'll move all this to a class one day)
|
|
logging.info("Fetching all download keys...")
|
|
page = 1
|
|
|
|
while True:
|
|
logging.info("Downloading page %d (found %d keys total)", page, len(DOWNLOAD_KEYS))
|
|
r = client.get("/profile/owned-keys", data={"page": page}, timeout=15)
|
|
if not r.ok:
|
|
break
|
|
|
|
data = r.json()
|
|
if "owned_keys" not in data:
|
|
break # Assuming we're out of keys already...
|
|
|
|
for key in data["owned_keys"]:
|
|
DOWNLOAD_KEYS[key["game_id"]] = key["id"]
|
|
GAME_URLS.append(key["game"]["url"])
|
|
|
|
if len(data["owned_keys"]) == data["per_page"]:
|
|
page += 1
|
|
else:
|
|
break
|
|
|
|
logging.info("Fetched %d download keys.", len(DOWNLOAD_KEYS))
|
|
KEYS_CACHED = True
|
|
|
|
|
|
def get_owned_keys(client: ItchApiClient) -> Tuple[Dict[int, str], List[str]]:
|
|
if not KEYS_CACHED:
|
|
load_keys_and_urls(client)
|
|
|
|
return DOWNLOAD_KEYS, GAME_URLS
|
|
|
|
|
|
def get_download_keys(client: ItchApiClient) -> Dict[int, str]:
|
|
if not KEYS_CACHED:
|
|
load_keys_and_urls(client)
|
|
|
|
return DOWNLOAD_KEYS
|
|
|
|
|
|
def get_owned_games(client: ItchApiClient) -> List[str]:
|
|
if not KEYS_CACHED:
|
|
load_keys_and_urls(client)
|
|
|
|
return GAME_URLS
|