You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
137 lines
5.0 KiB
Python
137 lines
5.0 KiB
Python
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_())
|