2025-04-29 17:35:21 +02:00
|
|
|
|
#
|
|
|
|
|
|
# Erminig - Recupération de la dernière version d'un soft sur page Sourceforge
|
|
|
|
|
|
# Copyright (C) 2025 L0m1g
|
|
|
|
|
|
# Sous licence DOUARN - Voir le fichier LICENCE pour les détails
|
|
|
|
|
|
#
|
|
|
|
|
|
# Ce fichier fait partie du projet Erminig.
|
|
|
|
|
|
# Libre comme l’air, stable comme un menhir, et salé comme le beurre.
|
|
|
|
|
|
#
|
|
|
|
|
|
|
2025-04-29 17:15:19 +02:00
|
|
|
|
import re
|
|
|
|
|
|
import requests
|
|
|
|
|
|
import xml.etree.ElementTree as ET
|
|
|
|
|
|
from erminig.controllers.evezh.abstract import UpstreamSource
|
2025-05-03 18:33:53 +02:00
|
|
|
|
from erminig.core.retry import retry_on_failure
|
2025-04-29 17:15:19 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class SourceForgeRSS(UpstreamSource):
|
|
|
|
|
|
|
|
|
|
|
|
@retry_on_failure()
|
|
|
|
|
|
def get_latest(self):
|
|
|
|
|
|
rss_url = self.config["sourceforge"]
|
|
|
|
|
|
r = requests.get(rss_url, timeout=10)
|
|
|
|
|
|
r.raise_for_status()
|
|
|
|
|
|
root = ET.fromstring(r.text)
|
|
|
|
|
|
items = root.findall(".//item")
|
|
|
|
|
|
|
|
|
|
|
|
versions = []
|
|
|
|
|
|
for item in items:
|
|
|
|
|
|
title = item.findtext("title") or ""
|
|
|
|
|
|
match = re.search(r"([0-9]+\.[0-9]+(?:\.[0-9]+)?)", title)
|
|
|
|
|
|
if match:
|
|
|
|
|
|
version = match.group(1)
|
|
|
|
|
|
link = item.findtext("link")
|
|
|
|
|
|
versions.append((version, link))
|
|
|
|
|
|
|
|
|
|
|
|
if not versions:
|
|
|
|
|
|
print(f"[{self.name}] Aucune version trouvée via RSS.")
|
|
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
|
|
latest = sorted(versions, key=lambda x: list(map(int, x[0].split("."))))[-1]
|
|
|
|
|
|
print(latest[1])
|
|
|
|
|
|
return {"name": self.name, "version": latest[0], "url": latest[1]}
|