From 0086cb798c277b31587a92fff2901346a14493ba Mon Sep 17 00:00:00 2001 From: "Casper V. Kristensen" Date: Tue, 20 Sep 2022 23:07:40 +0200 Subject: [PATCH] Add TukUI AddOn provider --- wau/providers/__init__.py | 2 ++ wau/providers/tukui.py | 30 ++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100755 wau/providers/tukui.py diff --git a/wau/providers/__init__.py b/wau/providers/__init__.py index 45eec84..cabd028 100644 --- a/wau/providers/__init__.py +++ b/wau/providers/__init__.py @@ -2,6 +2,7 @@ from .base import Provider from .curseforge import CurseForge from .git import Git from .github import GitHub +from .tukui import TukUI from .web import Web from .wowinterface import WowInterface @@ -9,6 +10,7 @@ from .wowinterface import WowInterface PROVIDERS = { # in order of preference "curse": CurseForge, "wowinterface": WowInterface, + "tukui": TukUI, "github": GitHub, "git": Git, "web": Web diff --git a/wau/providers/tukui.py b/wau/providers/tukui.py new file mode 100755 index 0000000..2f2ddef --- /dev/null +++ b/wau/providers/tukui.py @@ -0,0 +1,30 @@ +import logging + +from .web import Web +from .. import http +from ..addons import Addon + +logger = logging.getLogger(__name__) + + +class TukUI(Web): + api_url = "https://www.tukui.org/api.php?classic-wotlk-addons" + + @classmethod + def is_supported(cls, url: str) -> bool: + return "tukui.org" in url + + @classmethod + def download(cls, addon: Addon, url: str = None) -> bool: + file_url = cls._get_file_url(addon) + return super().download(addon, url=file_url) + + @classmethod + def _get_file_url(self, addon: Addon) -> str: + logger.debug("Getting all AddOns info from TukUI") + # Find the given AddOn URL in the list of all TukUI AddOns + tukui_addons = http.open(self.api_url).json() + for tukui_addon in tukui_addons: + if tukui_addon["web_url"] == addon.url: + return tukui_addon["url"] + raise ValueError("AddOn not found in TukUI AddOns.")