# # 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. # import re import requests import xml.etree.ElementTree as ET from erminig.controllers.evezh.abstract import UpstreamSource from erminig.system.retry import retry_on_failure 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]}