mirror of
https://github.com/DragoonAethis/itch-dl.git
synced 2024-12-21 02:21:52 +01:00
Add Support for "Collections"
This commit is contained in:
parent
6e7de8b5dc
commit
269688afae
@ -8,7 +8,7 @@ from bs4 import BeautifulSoup
|
|||||||
|
|
||||||
from .api import ItchApiClient
|
from .api import ItchApiClient
|
||||||
from .utils import ItchDownloadError, get_int_after_marker_in_json
|
from .utils import ItchDownloadError, get_int_after_marker_in_json
|
||||||
from .consts import ITCH_BASE, ITCH_URL, ITCH_BROWSER_TYPES
|
from .consts import ITCH_API, ITCH_BASE, ITCH_URL, ITCH_BROWSER_TYPES
|
||||||
from .config import Settings
|
from .config import Settings
|
||||||
from .keys import get_owned_games
|
from .keys import get_owned_games
|
||||||
|
|
||||||
@ -84,6 +84,38 @@ def get_jobs_for_browse_url(url: str, client: ItchApiClient) -> List[str]:
|
|||||||
return list(found_urls)
|
return list(found_urls)
|
||||||
|
|
||||||
|
|
||||||
|
def get_jobs_for_collection_json(url: str, client: ItchApiClient) -> dict:
|
||||||
|
page = 1
|
||||||
|
found_urls: Set[str] = set()
|
||||||
|
|
||||||
|
while True:
|
||||||
|
logging.info(f"Downloading page {page} (found {len(found_urls)} URLs total)")
|
||||||
|
r = client.get(url, data={"page": page}, timeout=15)
|
||||||
|
if not r.ok:
|
||||||
|
logging.info("Collection page %d returned %d %s, finished.",
|
||||||
|
page, r.status_code, r.reason)
|
||||||
|
break
|
||||||
|
|
||||||
|
data = r.json()
|
||||||
|
|
||||||
|
if len(data["collection_games"]) < 1:
|
||||||
|
logging.info("No more items, finished.")
|
||||||
|
break
|
||||||
|
|
||||||
|
for item in data["collection_games"]:
|
||||||
|
found_urls.add(item["game"]["url"])
|
||||||
|
|
||||||
|
if len(data["collection_games"]) == data["per_page"]:
|
||||||
|
page += 1
|
||||||
|
else:
|
||||||
|
break
|
||||||
|
|
||||||
|
if len(found_urls) == 0:
|
||||||
|
raise ItchDownloadError("No game URLs found to download.")
|
||||||
|
|
||||||
|
return list(found_urls)
|
||||||
|
|
||||||
|
|
||||||
def get_jobs_for_itch_url(url: str, client: ItchApiClient) -> List[str]:
|
def get_jobs_for_itch_url(url: str, client: ItchApiClient) -> List[str]:
|
||||||
if url.startswith("http://"):
|
if url.startswith("http://"):
|
||||||
logging.info("HTTP link provided, upgrading to HTTPS")
|
logging.info("HTTP link provided, upgrading to HTTPS")
|
||||||
@ -136,6 +168,11 @@ def get_jobs_for_itch_url(url: str, client: ItchApiClient) -> List[str]:
|
|||||||
elif site == "my-purchases": # User Purchased Games
|
elif site == "my-purchases": # User Purchased Games
|
||||||
return get_owned_games(client)
|
return get_owned_games(client)
|
||||||
|
|
||||||
|
elif site == "c": # Collections
|
||||||
|
collection_id = url_path_parts[1]
|
||||||
|
clean_collection_url = f"{ITCH_API}/collections/{collection_id}/collection-games"
|
||||||
|
return get_jobs_for_collection_json(clean_collection_url, client)
|
||||||
|
|
||||||
# Something else?
|
# Something else?
|
||||||
raise NotImplementedError(f"itch-dl does not understand \"{site}\" URLs. Please file a new issue.")
|
raise NotImplementedError(f"itch-dl does not understand \"{site}\" URLs. Please file a new issue.")
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user