Add packaging dependency and fallback version compare
This commit is contained in:
@@ -7,7 +7,11 @@ Prüft auf Updates über Gitea API
|
||||
import urllib.request
|
||||
import json
|
||||
from pathlib import Path
|
||||
from packaging import version as pkg_version
|
||||
|
||||
try:
|
||||
from packaging import version as pkg_version
|
||||
except Exception: # pragma: no cover - packaging may be missing in user envs
|
||||
pkg_version = None
|
||||
|
||||
# Gitea-Konfiguration
|
||||
GITEA_URL = "https://git.file-archive.de"
|
||||
@@ -81,14 +85,53 @@ def check_for_updates():
|
||||
|
||||
try:
|
||||
# Vergleiche Versionen
|
||||
if pkg_version.parse(latest) > pkg_version.parse(current):
|
||||
return True, latest, url
|
||||
if pkg_version is not None:
|
||||
if pkg_version.parse(latest) > pkg_version.parse(current):
|
||||
return True, latest, url
|
||||
else:
|
||||
if _simple_version_compare(latest, current) > 0:
|
||||
return True, latest, url
|
||||
except Exception as e:
|
||||
print(f"Warnung: Versionenvergleich fehlgeschlagen: {e}")
|
||||
|
||||
return False, None, None
|
||||
|
||||
|
||||
def _simple_version_compare(left, right):
|
||||
"""
|
||||
Fallback-Versionsvergleich ohne externe Abhaengigkeiten.
|
||||
Gibt 1 zurueck wenn left > right, -1 wenn left < right, sonst 0.
|
||||
"""
|
||||
def to_parts(value):
|
||||
parts = []
|
||||
for item in value.replace("v", "").split("."):
|
||||
try:
|
||||
parts.append(int(item))
|
||||
except ValueError:
|
||||
parts.append(item)
|
||||
return parts
|
||||
|
||||
left_parts = to_parts(left)
|
||||
right_parts = to_parts(right)
|
||||
max_len = max(len(left_parts), len(right_parts))
|
||||
|
||||
for i in range(max_len):
|
||||
l_val = left_parts[i] if i < len(left_parts) else 0
|
||||
r_val = right_parts[i] if i < len(right_parts) else 0
|
||||
if l_val == r_val:
|
||||
continue
|
||||
try:
|
||||
return 1 if l_val > r_val else -1
|
||||
except TypeError:
|
||||
l_str = str(l_val)
|
||||
r_str = str(r_val)
|
||||
if l_str == r_str:
|
||||
continue
|
||||
return 1 if l_str > r_str else -1
|
||||
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
# Test
|
||||
current = get_current_version()
|
||||
|
||||
Reference in New Issue
Block a user