diff --git a/nvchecker_source/sparkle.py b/nvchecker_source/sparkle.py index 33bd61f..c4dbed5 100644 --- a/nvchecker_source/sparkle.py +++ b/nvchecker_source/sparkle.py @@ -6,13 +6,32 @@ from xml.etree import ElementTree from nvchecker.api import session +NAMESPACE = "http://www.andymatuschak.org/xml-namespaces/sparkle" + + async def get_version(name, conf, *, cache, **kwargs): - sparkle = conf['sparkle'] - return await cache.get(sparkle, get_version_impl) + sparkle = conf["sparkle"] + return await cache.get(sparkle, get_version_impl) + async def get_version_impl(sparkle): - res = await session.get(sparkle) - root = ElementTree.fromstring(res.body) - version = root.find('./channel/item[1]/{http://www.andymatuschak.org/xml-namespaces/sparkle}version') + res = await session.get(sparkle) + root = ElementTree.fromstring(res.body) + item = root.find("./channel/item[1]/enclosure") - return version.text + version_string = item.get(f"{{{NAMESPACE}}}shortVersionString") + build_number = item.get(f"{{{NAMESPACE}}}version") + + if (version_string and version_string.isdigit()) and ( + build_number and not build_number.isdigit() + ): + version_string, build_number = build_number, version_string + + version = [] + + if version_string: + version.append(version_string) + if build_number and (build_number not in version): + version.append(build_number) + + return "-".join(version) if version else None