Files

58 lines
2.7 KiB
Python

# -*- coding: utf-8 -*-
"""Утилиты для работы с модпаками Modrinth/CurseForge."""
import os
from . import curseforge, modrinth
def install_pack_mrpack_url(game_dir, url, log=None, progress=None, cancel=None):
"""Скачивает и ставит .mrpack по URL."""
from . import mrpack as mrpack_mod
filename = url.rsplit("/", 1)[-1] or "pack.mrpack"
return mrpack_mod.install_from_url(game_dir, url, log=log, progress=progress,
cancel=cancel, filename_hint=filename)
def install_pack_modrinth(project_id, game_dir, version=None, game_version="",
loader="", log=None, progress=None, cancel=None):
"""Устанавливает сборку Modrinth по project_id (slug или id).
Возвращает (id_версии, скачано_файлов).
"""
from . import mrpack as mrpack_mod
vs = modrinth.get_modpack_versions(project_id, game_version=game_version,
loader=loader)
if not vs:
raise RuntimeError("Нет версий сборки Modrinth")
v = version if version else vs[0]
if isinstance(v, str):
v = next((x for x in vs if x["id"] == v or x["filename"] == v), vs[0])
url = v.get("url") or ""
if not url:
raise RuntimeError("У версии сборки нет ссылки на файл")
filename = v.get("filename") or "pack.mrpack"
return mrpack_mod.install_from_url(game_dir, url, log=log, progress=progress,
cancel=cancel, filename_hint=filename)
def install_pack_curseforge(mod_id, file_id, game_dir, log=None, progress=None,
cancel=None):
"""Устанавливает сборку CurseForge (mod_id + file_id)."""
from . import cfpack
info = curseforge.get_file(mod_id, file_id)
url = info.get("download_url") or ""
if not url:
raise RuntimeError("Не удалось получить ссылку на загрузку CurseForge")
filename = info.get("file_name") or ("pack-%s.zip" % mod_id)
return cfpack.install_from_url(game_dir, url, log=log, progress=progress,
cancel=cancel, filename_hint=filename)
def install_pack_curseforge_url(game_dir, url, log=None, progress=None,
cancel=None):
"""Устанавливает сборку CurseForge по прямой ссылке на zip."""
from . import cfpack
filename = os.path.basename(url.split("?")[0]) or "pack.zip"
return cfpack.install_from_url(game_dir, url, log=log, progress=progress,
cancel=cancel, filename_hint=filename)