import sys from PyQt5 import QtWidgets, uic, QtGui import toml import os import shutil import subprocess from urllib.request import urlopen import re def get_public_ip(): data = str(urlopen('http://checkip.dyndns.com/').read()) return re.compile(r'Address: (\d+.\d+.\d+.\d+)').search(data).group(1) def read_datei(datei): with open(os.path.join(CONFIG["pfad_cloud"], datei)) as file: inhalt = file.read() inhalt = inhalt.strip() return inhalt class EmpyrionLauncher(QtWidgets.QDialog): def __init__(self, parent=None): super().__init__(parent) uidatei = os.path.join(PFAD, "empyrion_launcher.ui") self.ui = uic.loadUi(uidatei, self) self.text_status_pfade = None self.status_pfade = False self.spiel_aktiv = True # Slots # Buttons Tag Launcher self.ui.button_beenden.clicked.connect(self.on_beenden) # Buttons Tab Einstellungen self.ui.button_ok.clicked.connect(self.on_ok) self.ui.button_abbrechen.clicked.connect(self.on_abbrechen) # Inlines ausfüllen self.on_abbrechen() self.cloud_lokal_verschieben() def on_spiel_starten(self): dateiname = os.path.join(CONFIG["pfad_cloud"], "aktiv_{}".format(CONFIG["username"])) with open(dateiname, "w") as file: file.write(f"{get_public_ip()}") subprocess.call(CONFIG["pfad_game"]) os.remove(dateiname) def on_beenden(self): self.close() def on_ok(self): CONFIG["username"] = self.ui.username.text() CONFIG["pfad_lokal"] = self.ui.pfad_lokal.text() CONFIG["pfad_cloud"] = self.ui.pfad_cloud.text() CONFIG["pfad_game"] = self.ui.pfad_game.text() CONFIG["savegame"] = self.ui.savegame.text() ausgabe = {"config": CONFIG} with open(DATEITOML, "w") as file: file.write(toml.dumps(ausgabe)) self.check_pfad() "{} - gespeichert".format(self.text_status_pfade) self.label_status_pfade.setText("{} - gespeichert".format(self.text_status_pfade)) def on_abbrechen(self): self.ui.username.setText(CONFIG["username"]) self.ui.pfad_lokal.setText(CONFIG["pfad_lokal"]) self.ui.pfad_cloud.setText(CONFIG["pfad_cloud"]) self.ui.pfad_game.setText(CONFIG["pfad_game"]) self.ui.savegame.setText(CONFIG["savegame"]) self.label_status_pfade.setText(self.text_status_pfade) def cloud_lokal_verschieben(self): datei = "" self.check_pfad() if self.status_pfade: ordnerinhalt = os.listdir(CONFIG["pfad_cloud"]) self.spiel_aktiv = True for ordner in ordnerinhalt: if ordner.startswith(CONFIG["savegame"]): self.spiel_aktiv = False quelle = os.path.join(CONFIG["pfad_cloud"], ordner) shutil.move(quelle, CONFIG["pfad_lokal"]) if self.spiel_aktiv: user = "unbekannt" for datei in ordnerinhalt: if datei.startswith("aktiv"): user = datei.split("_")[1] self.label_spiel_aktiv.setText("Spiel schon aktiv von {} \n IP: {}".format(user, read_datei(datei))) else: self.label_spiel_aktiv.setText("Kein Spiel aktiv") self.ui.button_spiel_starten.clicked.connect(self.on_spiel_starten) def lokal_cloud_verschieben(self): self.check_pfad() if self.status_pfade: ordnerinhalt = os.listdir(CONFIG["pfad_lokal"]) for ordner in ordnerinhalt: if ordner.startswith(CONFIG["savegame"]): quelle = os.path.join(CONFIG["pfad_lokal"], ordner) shutil.move(quelle, CONFIG["pfad_cloud"]) def check_pfad(self): self.status_pfade = False pfad_lokal = os.path.isdir(CONFIG["pfad_lokal"]) pfad_cloud = os.path.isdir(CONFIG["pfad_cloud"]) pfad_game = os.path.isfile(CONFIG["pfad_game"]) textausgabe = "" if not pfad_lokal: textausgabe = "{}Pfad Lokal, ".format(textausgabe) if not pfad_cloud: textausgabe = "{}Pfad Cloud, ".format(textausgabe) if not pfad_game: textausgabe = "{}Pfad Game, ".format(textausgabe) if not pfad_lokal or not pfad_cloud or not pfad_game: textausgabe = "{} existiert nicht".format(textausgabe) else: textausgabe = "Alle Pfade ok!" self.status_pfade = True self.text_status_pfade = textausgabe self.ui.label_status_pfade.setText(self.text_status_pfade) def closeEvent(self, a0: QtGui.QCloseEvent): self.lokal_cloud_verschieben() PFAD = os.path.abspath(os.path.dirname(__file__)) DATEITOML = os.path.join(PFAD, "config.toml") with open(DATEITOML) as file: CONFIG = toml.loads(file.read())["config"] app = QtWidgets.QApplication(sys.argv) dialog = EmpyrionLauncher() dialog.setWindowTitle("Empyrion Launcher") dialog.show() sys.exit(app.exec_())