""" 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.")