Initial commit
Dieser Commit ist enthalten in:
202
main.py
Normale Datei
202
main.py
Normale Datei
@ -0,0 +1,202 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Metadaten-Crawler Launcher
|
||||
==========================
|
||||
Startet die Metadaten-Crawler Electron-Anwendung.
|
||||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
import subprocess
|
||||
import platform
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
class MetadatenCrawlerLauncher:
|
||||
def __init__(self):
|
||||
self.app_dir = Path(__file__).parent.absolute()
|
||||
self.system = platform.system()
|
||||
|
||||
def check_node_installed(self):
|
||||
"""Prüft ob Node.js installiert ist"""
|
||||
try:
|
||||
result = subprocess.run(['node', '--version'],
|
||||
capture_output=True,
|
||||
text=True)
|
||||
if result.returncode == 0:
|
||||
print(f"✓ Node.js gefunden: {result.stdout.strip()}")
|
||||
return True
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
|
||||
print("✗ Node.js ist nicht installiert!")
|
||||
print(" Bitte installieren Sie Node.js von: https://nodejs.org/")
|
||||
return False
|
||||
|
||||
def check_dependencies(self):
|
||||
"""Prüft ob npm Pakete installiert sind"""
|
||||
node_modules = self.app_dir / 'node_modules'
|
||||
if not node_modules.exists():
|
||||
print("⚠ Dependencies nicht gefunden. Installiere npm Pakete...")
|
||||
return self.install_dependencies()
|
||||
print("✓ Dependencies gefunden")
|
||||
return True
|
||||
|
||||
def install_dependencies(self):
|
||||
"""Installiert npm Dependencies"""
|
||||
try:
|
||||
print(" Führe 'npm install' aus...")
|
||||
result = subprocess.run(['npm', 'install'],
|
||||
cwd=self.app_dir,
|
||||
capture_output=True,
|
||||
text=True)
|
||||
if result.returncode == 0:
|
||||
print("✓ Dependencies erfolgreich installiert")
|
||||
return True
|
||||
else:
|
||||
print(f"✗ Fehler bei der Installation: {result.stderr}")
|
||||
return False
|
||||
except Exception as e:
|
||||
print(f"✗ Fehler: {str(e)}")
|
||||
return False
|
||||
|
||||
def check_executable(self):
|
||||
"""Prüft ob eine ausführbare Datei existiert"""
|
||||
if self.system == "Windows":
|
||||
exe_path = self.app_dir / 'dist' / 'Metadaten-Crawler.exe'
|
||||
if exe_path.exists():
|
||||
return str(exe_path)
|
||||
elif self.system == "Darwin": # macOS
|
||||
app_path = self.app_dir / 'dist' / 'Metadaten-Crawler.app'
|
||||
if app_path.exists():
|
||||
return str(app_path)
|
||||
elif self.system == "Linux":
|
||||
app_path = self.app_dir / 'dist' / 'Metadaten-Crawler'
|
||||
if app_path.exists():
|
||||
return str(app_path)
|
||||
return None
|
||||
|
||||
def start_development(self):
|
||||
"""Startet die Anwendung im Entwicklungsmodus"""
|
||||
print("\n🚀 Starte Metadaten-Crawler im Entwicklungsmodus...")
|
||||
try:
|
||||
subprocess.run(['npm', 'start'], cwd=self.app_dir)
|
||||
except KeyboardInterrupt:
|
||||
print("\n\nAnwendung beendet.")
|
||||
except Exception as e:
|
||||
print(f"✗ Fehler beim Starten: {str(e)}")
|
||||
return False
|
||||
return True
|
||||
|
||||
def start_executable(self, exe_path):
|
||||
"""Startet die kompilierte Anwendung"""
|
||||
print(f"\n🚀 Starte Metadaten-Crawler von: {exe_path}")
|
||||
try:
|
||||
if self.system == "Windows":
|
||||
subprocess.run([exe_path])
|
||||
elif self.system == "Darwin":
|
||||
subprocess.run(['open', exe_path])
|
||||
else:
|
||||
subprocess.run([exe_path])
|
||||
except Exception as e:
|
||||
print(f"✗ Fehler beim Starten: {str(e)}")
|
||||
return False
|
||||
return True
|
||||
|
||||
def build_application(self):
|
||||
"""Baut die Anwendung"""
|
||||
print("\n🔨 Baue Metadaten-Crawler...")
|
||||
try:
|
||||
if self.system == "Windows":
|
||||
cmd = ['npm', 'run', 'build-win']
|
||||
elif self.system == "Darwin":
|
||||
cmd = ['npm', 'run', 'build-mac']
|
||||
else:
|
||||
cmd = ['npm', 'run', 'build-linux']
|
||||
|
||||
result = subprocess.run(cmd, cwd=self.app_dir)
|
||||
if result.returncode == 0:
|
||||
print("✓ Build erfolgreich abgeschlossen")
|
||||
return True
|
||||
else:
|
||||
print("✗ Build fehlgeschlagen")
|
||||
return False
|
||||
except Exception as e:
|
||||
print(f"✗ Fehler beim Build: {str(e)}")
|
||||
return False
|
||||
|
||||
def run(self):
|
||||
"""Hauptmethode zum Starten der Anwendung"""
|
||||
print("=" * 50)
|
||||
print(" Metadaten-Crawler Launcher")
|
||||
print("=" * 50)
|
||||
print(f"System: {self.system}")
|
||||
print(f"Arbeitsverzeichnis: {self.app_dir}")
|
||||
print()
|
||||
|
||||
# Prüfe Node.js
|
||||
if not self.check_node_installed():
|
||||
return False
|
||||
|
||||
# Prüfe Dependencies
|
||||
if not self.check_dependencies():
|
||||
return False
|
||||
|
||||
# Prüfe ob ausführbare Datei existiert
|
||||
exe_path = self.check_executable()
|
||||
|
||||
if len(sys.argv) > 1:
|
||||
# Command line arguments
|
||||
if sys.argv[1] == '--dev':
|
||||
return self.start_development()
|
||||
elif sys.argv[1] == '--build':
|
||||
return self.build_application()
|
||||
elif sys.argv[1] == '--exe' and exe_path:
|
||||
return self.start_executable(exe_path)
|
||||
|
||||
# Interaktives Menü
|
||||
print("\nWas möchten Sie tun?")
|
||||
print("1. Entwicklungsmodus starten (npm start)")
|
||||
if exe_path:
|
||||
print("2. Kompilierte Anwendung starten")
|
||||
print("3. Anwendung neu bauen")
|
||||
else:
|
||||
print("2. Anwendung bauen (erstellt .exe)")
|
||||
print("0. Beenden")
|
||||
|
||||
while True:
|
||||
try:
|
||||
choice = input("\nIhre Wahl: ").strip()
|
||||
|
||||
if choice == '0':
|
||||
print("Auf Wiedersehen!")
|
||||
return True
|
||||
elif choice == '1':
|
||||
return self.start_development()
|
||||
elif choice == '2':
|
||||
if exe_path:
|
||||
return self.start_executable(exe_path)
|
||||
else:
|
||||
if self.build_application():
|
||||
exe_path = self.check_executable()
|
||||
if exe_path:
|
||||
print("\n✓ Build erfolgreich! Möchten Sie die Anwendung starten? (j/n)")
|
||||
if input().lower() == 'j':
|
||||
return self.start_executable(exe_path)
|
||||
elif choice == '3' and exe_path:
|
||||
return self.build_application()
|
||||
else:
|
||||
print("Ungültige Eingabe. Bitte erneut versuchen.")
|
||||
except KeyboardInterrupt:
|
||||
print("\n\nProgramm beendet.")
|
||||
return True
|
||||
|
||||
|
||||
def main():
|
||||
"""Hauptfunktion"""
|
||||
launcher = MetadatenCrawlerLauncher()
|
||||
launcher.run()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren