"""
|
Fuehrt den automatischen Update-Check fuer alle dafuer markierten Tools aus -
|
unabhaengig davon, ob die Weboberffaeche (app.py) gerade laeuft.
|
|
Wird genutzt von:
|
- pruefe_updates.bat (manueller Lauf per Doppelklick)
|
- der Windows-Aufgabenplanung (taeglicher automatischer Lauf, siehe
|
automatisierung_einrichten.bat)
|
|
Nutzt dieselbe Datenbank und dieselbe Update-Logik (updater.py) wie die
|
Weboberflaeche, damit beide Wege konsistent bleiben.
|
"""
|
|
import os
|
import sqlite3
|
from datetime import datetime, date
|
|
import updater
|
|
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
|
DB_PATH = os.path.join(BASE_DIR, "data", "bibliothek.db")
|
|
|
def _verbindung():
|
conn = sqlite3.connect(DB_PATH)
|
conn.row_factory = sqlite3.Row
|
conn.execute("PRAGMA foreign_keys = ON")
|
return conn
|
|
|
def _heute_str():
|
return date.today().isoformat()
|
|
|
def _protokolliere_und_speichere(conn, sw_row, ergebnis):
|
conn.execute(
|
"""INSERT INTO update_log (software_id, zeitpunkt, alte_version, neue_version, erfolg, meldung)
|
VALUES (?, ?, ?, ?, ?, ?)""",
|
(
|
sw_row["id"],
|
datetime.now().isoformat(timespec="seconds"),
|
ergebnis.alte_version,
|
ergebnis.neue_version,
|
1 if ergebnis.erfolg else 0,
|
ergebnis.meldung,
|
),
|
)
|
if ergebnis.erfolg:
|
neue_version = ergebnis.neue_version or sw_row["version"]
|
conn.execute(
|
"UPDATE software SET version = ?, letzte_pruefung = ? WHERE id = ?",
|
(neue_version, _heute_str(), sw_row["id"]),
|
)
|
conn.commit()
|
|
|
def pruefe_alle_automatischen():
|
"""Prueft alle Tools mit aktivierter automatischer Aktualisierung.
|
Gibt eine Liste von (name, UpdateResult) zurueck."""
|
if not os.path.isfile(DB_PATH):
|
raise SystemExit(
|
f"Datenbank nicht gefunden unter {DB_PATH}. "
|
"Bitte zuerst einmal start.bat ausfuehren, damit sie angelegt wird."
|
)
|
|
conn = _verbindung()
|
tools = conn.execute(
|
"SELECT * FROM software WHERE auto_update = 1 AND update_quelle IS NOT NULL AND update_quelle != ''"
|
).fetchall()
|
|
ergebnisse = []
|
for sw in tools:
|
ergebnis = updater.pruefe_software(
|
sw["name"], sw["update_quelle"], sw["update_wert"], sw["version"], sw["installer_pfad"]
|
)
|
_protokolliere_und_speichere(conn, sw, ergebnis)
|
ergebnisse.append((sw["name"], ergebnis))
|
|
conn.close()
|
return ergebnisse
|
|
|
if __name__ == "__main__":
|
print("=" * 60)
|
print(f" Automatische Update-Pruefung - {datetime.now().strftime('%Y-%m-%d %H:%M')}")
|
print("=" * 60)
|
|
ergebnisse = pruefe_alle_automatischen()
|
|
if not ergebnisse:
|
print("Kein Tool hat die automatische Aktualisierung aktiviert.")
|
else:
|
for name, ergebnis in ergebnisse:
|
status = "OK " if ergebnis.erfolg else "FEHLER"
|
print(f" [{status}] {name}: {ergebnis.meldung}")
|
|
print("=" * 60)
|
print(" Fertig. Details stehen auch im Update-Protokoll jedes Tools in der Weboberflaeche.")
|