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

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_())