Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions nix_update/version/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
from .rubygems import fetch_rubygem_versions
from .savannah import fetch_savannah_versions
from .sourcehut import fetch_sourcehut_snapshots, fetch_sourcehut_versions
from .sparkle import fetch_sparkle_versions
from .version import Version, VersionPreference


Expand Down Expand Up @@ -71,6 +72,7 @@ def __call__(
fetch_rubygem_versions,
fetch_savannah_versions,
fetch_sourcehut_versions,
fetch_sparkle_versions,
fetch_bitbucket_versions,
# all entries below perform requests to check if the target url is of that type
fetch_gitea_versions,
Expand Down
32 changes: 32 additions & 0 deletions nix_update/version/sparkle.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
from __future__ import annotations

import xml.etree.ElementTree as ET
from typing import TYPE_CHECKING

from nix_update.utils import info

from .http import DEFAULT_TIMEOUT, urlopen

if TYPE_CHECKING:
from urllib.parse import ParseResult

from .version import Version


def fetch_sparkle_versions(url: ParseResult) -> list[Version]:
# https://fork.dev/update/feed-stable.xml
# if the URL isn't an xml document, it can't be sparkle
if not url.path.endswith(".xml"):
return []

with urlopen(url.geturl(), timeout=DEFAULT_TIMEOUT) as resp:
xml = resp.read()
info(f"xml: {xml}")
tree = ET.fromstring(xml)

# tree.findall("enclosure").sort(key=lambda enc: enc.attrib["sparkle:version"])
versions = tree.findall(".//channel/item/enclosure")
info(versions)
# for enclosure in tree.findall("enclosure"):

return [versions[0].attrib["sparkle:version"]]
Loading