From ff94d6c4e5c2700f7741ad292b0e2b7d99bbc78e Mon Sep 17 00:00:00 2001 From: x3 <1+x3@noreply.git.sysdaemon.xyz> Date: Mon, 21 Sep 2026 11:09:15 +0000 Subject: [PATCH] Upload files to "/" --- Bildschirmfoto vom 2026-09-21 13-08-17.png | Bin 0 -> 59393 bytes beammp-gui.py | 856 +++++++++++++++++++++ 2 files changed, 856 insertions(+) create mode 100644 Bildschirmfoto vom 2026-09-21 13-08-17.png create mode 100644 beammp-gui.py diff --git a/Bildschirmfoto vom 2026-09-21 13-08-17.png b/Bildschirmfoto vom 2026-09-21 13-08-17.png new file mode 100644 index 0000000000000000000000000000000000000000..8698bc0e6ba7fa8f5967749ee55a01a8dac36aea GIT binary patch literal 59393 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�uZ;HNokbbpP|CWk*>+0FL{xLo@$~Yt$m`dy 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 0: + c = text[i] + if in_str: + if esc: + esc = False + elif c == "\\": + esc = True + elif c == '"': + in_str = False + else: + if c == '"': + in_str = True + elif c == "{": + depth += 1 + elif c == "}": + depth -= 1 + if depth == 0: + break + i += 1 + if depth != 0: + raise ValueError("config.vdf Klammern unausgeglichen") + text = text[:i] + "\n" + block + "\n\t\t\t\t" + text[i:] + backup = config_vdf_path + ".beammp-gui.bak" + shutil.copy2(config_vdf_path, backup) + with open(config_vdf_path, "w") as f: + f.write(text) + return backup + + +def remove_compat_mapping(config_vdf_path, unsigned_id): + """Entfernt Proton-Mapping wieder (Wrapper läuft nativ). Gibt True zurück wenn etwas entfernt wurde.""" + with open(config_vdf_path, errors="replace") as f: + text = f.read() + key = str(unsigned_id) + pat = re.compile(r'\s*"' + re.escape(key) + r'"\s*\{\s*"name"\s*"[^"]*"\s*"config"\s*"[^"]*"\s*"priority"\s*"[^"]*"\s*\}', re.DOTALL) + if not pat.search(text): + return False + text = pat.sub("", text, count=1) + backup = config_vdf_path + ".beammp-gui.bak" + shutil.copy2(config_vdf_path, backup) + with open(config_vdf_path, "w") as f: + f.write(text) + return True + + +# -------------------------------------------------------------------------- +# Download / Installation +# -------------------------------------------------------------------------- + +def download_file(url, dest, log, progress_cb=None): + req = urllib.request.Request(url, headers={"User-Agent": "beammp-gui/1.0"}) + with urllib.request.urlopen(req, timeout=120) as resp: + total = int(resp.headers.get("Content-Length") or 0) + got = 0 + chunk = 1024 * 256 + with open(dest, "wb") as f: + while True: + buf = resp.read(chunk) + if not buf: + break + f.write(buf) + got += len(buf) + if progress_cb: + GLib.idle_add(progress_cb, got, total) + return dest + + +def official_launcher_dest(prefix): + """Offizieller Ablageort im Prefix (wie Windows %AppData%).""" + return os.path.join(prefix, "drive_c", "users", "steamuser", + "AppData", "Roaming", "BeamMP-Launcher", "BeamMP-Launcher.exe") + + +# -------------------------------------------------------------------------- +# GUI +# -------------------------------------------------------------------------- + +class MainWindow(Gtk.ApplicationWindow): + def __init__(self, app): + super().__init__(application=app, title="BeamMP für BeamNG (Proton) – Setup") + self.set_default_size(760, 660) + self.set_border_width(10) + self.config = self._load_config() + self.beamng = None + self._build_ui() + GLib.idle_add(self.refresh) + + # -- config -- + def _load_config(self): + try: + if os.path.isfile(CONFIG_FILE): + with open(CONFIG_FILE) as f: + return json.load(f) + except Exception: + pass + return {} + + def _save_config(self): + try: + self.config.update({ + "launcher_path": self.ent_launcher.get_text(), + "steam_name": self.ent_name.get_text(), + "proton": self.cmb_proton.get_active_text() or "", + }) + os.makedirs(os.path.dirname(CONFIG_FILE), exist_ok=True) + with open(CONFIG_FILE, "w") as f: + json.dump(self.config, f, indent=2) + except Exception: + pass + + # -- UI -- + def _build_ui(self): + vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=8) + self.add(vbox) + + # Status + fr = Gtk.Frame(label=" Erkennung ") + vbox.pack_start(fr, False, False, 0) + sb = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=2) + sb.set_border_width(6) + fr.add(sb) + self.lbl_steam = Gtk.Label(xalign=0, selectable=True) + self.lbl_beamng = Gtk.Label(xalign=0, selectable=True) + self.lbl_prefix = Gtk.Label(xalign=0, selectable=True) + self.lbl_proton = Gtk.Label(xalign=0, selectable=True) + for lab in (self.lbl_steam, self.lbl_beamng, self.lbl_prefix, self.lbl_proton): + lab.set_line_wrap(True) + sb.pack_start(lab, False, False, 1) + + # Einstellungen + fr2 = Gtk.Frame(label=" Einstellungen ") + vbox.pack_start(fr2, False, False, 0) + grid = Gtk.Grid(column_spacing=8, row_spacing=6) + grid.set_border_width(8) + fr2.add(grid) + + grid.attach(Gtk.Label(label="BeamMP-Launcher (.exe):", xalign=0), 0, 0, 1, 1) + self.ent_launcher = Gtk.Entry(hexpand=True) + self.ent_launcher.set_text(self.config.get("launcher_path", + os.path.expanduser("~/Downloads/BeamMP-Launcher.exe"))) + self.ent_launcher.set_tooltip_text("Pfad zur heruntergeladenen BeamMP-Launcher.exe") + grid.attach(self.ent_launcher, 1, 0, 1, 1) + hb = Gtk.Box(spacing=4) + b_dl = Gtk.Button(label="Herunterladen") + b_dl.connect("clicked", self.on_download) + b_br = Gtk.Button(label="...") + b_br.set_size_request(36, -1) + b_br.connect("clicked", self.on_browse_exe) + hb.pack_start(b_dl, False, False, 0) + hb.pack_start(b_br, False, False, 0) + grid.attach(hb, 2, 0, 1, 1) + + grid.attach(Gtk.Label(label="Proton-Version:", xalign=0), 0, 1, 1, 1) + self.cmb_proton = Gtk.ComboBoxText(hexpand=True) + grid.attach(self.cmb_proton, 1, 1, 1, 1) + b_rf = Gtk.Button(label="Aktualisieren") + b_rf.connect("clicked", lambda *_: self.refresh()) + grid.attach(b_rf, 2, 1, 1, 1) + + grid.attach(Gtk.Label(label="Name in Steam:", xalign=0), 0, 2, 1, 1) + self.ent_name = Gtk.Entry(hexpand=True) + self.ent_name.set_text(self.config.get("steam_name", "BeamMP")) + grid.attach(self.ent_name, 1, 2, 2, 1) + + self.progress = Gtk.ProgressBar(show_text=True) + self.progress.set_text("bereit") + grid.attach(self.progress, 0, 3, 3, 1) + + # Aktionen + fr3 = Gtk.Frame(label=" Aktionen (Reihenfolge einhalten) ") + vbox.pack_start(fr3, False, False, 0) + hbox = Gtk.Box(spacing=6) + hbox.set_border_width(8) + fr3.add(hbox) + b1 = Gtk.Button(label="1. Im Prefix installieren") + b1.get_style_context().add_class("suggested-action") + b1.connect("clicked", self.on_install) + b2 = Gtk.Button(label="2. Zu Steam hinzufügen") + b2.get_style_context().add_class("suggested-action") + b2.connect("clicked", self.on_add_steam) + b_all = Gtk.Button(label="Alles nacheinander") + b_all.connect("clicked", self.on_all) + for b in (b1, b2, b_all): + hbox.pack_start(b, True, True, 0) + + # Log + fr4 = Gtk.Frame(label=" Log ") + vbox.pack_start(fr4, True, True, 0) + sw = Gtk.ScrolledWindow() + sw.set_min_content_height(220) + fr4.add(sw) + self.log_buf = Gtk.TextBuffer() + self.log_view = Gtk.TextView(buffer=self.log_buf) + self.log_view.set_editable(False) + self.log_view.set_monospace(True) + self.log_view.set_wrap_mode(Gtk.WrapMode.WORD_CHAR) + sw.add(self.log_view) + self.show_all() + + # -- helpers -- + def log(self, msg): + def do(): + it = self.log_buf.get_end_iter() + self.log_buf.insert(it, f"[{time.strftime('%H:%M:%S')}] {msg}\n") + mark = self.log_buf.create_mark(None, self.log_buf.get_end_iter(), False) + self.log_view.scroll_mark_onscreen(mark) + GLib.idle_add(do) + print(msg, flush=True) + + def refresh(self): + steam = find_steam_root() + if steam: + self.lbl_steam.set_markup(f'Steam: OK {GLib.markup_escape_text(steam)}') + else: + self.lbl_steam.set_markup('Steam: nicht gefunden') + + self.beamng = find_beamng() + if self.beamng: + self.lbl_beamng.set_markup(f'BeamNG: OK {GLib.markup_escape_text(self.beamng["game_dir"])}') + pfx = self.beamng["prefix"] + if os.path.isdir(os.path.join(pfx, "drive_c")): + self.lbl_prefix.set_markup(f'Prefix (284160): OK {GLib.markup_escape_text(pfx)}') + else: + self.lbl_prefix.set_markup(f'Prefix (284160): noch nicht von Steam erstellt – bitte BeamNG einmal starten {GLib.markup_escape_text(pfx)}') + else: + self.lbl_beamng.set_markup('BeamNG: nicht gefunden (AppID 284160 – bitte in Steam installieren)') + self.lbl_prefix.set_markup('Prefix: –') + + pvs = find_proton_versions() + self.cmb_proton.remove_all() + if pvs: + self.lbl_proton.set_markup(f'Proton: {len(pvs)} gefunden') + for name, _pb, _td in pvs: + self.cmb_proton.append_text(name) + saved = self.config.get("proton", "") + names = [n for n, _, _ in pvs] + self.cmb_proton.set_active(names.index(saved) if saved in names else 0) + else: + self.lbl_proton.set_markup('Proton: keins gefunden – bitte z.B. Proton 9 in Steam installieren') + + def _selected_proton(self): + name = self.cmb_proton.get_active_text() + if not name: + return None + for n, pb, td in find_proton_versions(): + if n == name: + return (n, pb, td) + return None + + # -- Aktionen -- + def on_browse_exe(self, _): + dlg = Gtk.FileChooserDialog(title="BeamMP-Launcher.exe wählen", + action=Gtk.FileChooserAction.OPEN) + dlg.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL) + dlg.add_button(Gtk.STOCK_OPEN, Gtk.ResponseType.OK) + flt = Gtk.FileFilter() + flt.set_name("Windows-Executables") + flt.add_pattern("*.exe") + dlg.add_filter(flt) + if dlg.run() == Gtk.ResponseType.OK: + self.ent_launcher.set_text(dlg.get_filename()) + dlg.destroy() + + def on_download(self, _): + dest = self.ent_launcher.get_text().strip() or os.path.expanduser("~/Downloads/BeamMP-Launcher.exe") + if os.path.isdir(dest): + dest = os.path.join(dest, "BeamMP-Launcher.exe") + os.makedirs(os.path.dirname(dest) or ".", exist_ok=True) + self.ent_launcher.set_text(dest) + self._save_config() + self.log(f"Download von {BEAMMP_EXE_URL} nach {dest} …") + + def work(): + try: + def prog(got, total): + if total: + self.progress.set_fraction(min(got / total, 1.0)) + self.progress.set_text(f"{got//1024//1024} / {total//1024//1024} MB") + return False + try: + download_file(BEAMMP_EXE_URL, dest, self.log, prog) + except Exception as e1: + self.log(f"Primär-URL fehlgeschlagen ({e1}), versuche Fallback …") + download_file(BEAMMP_FALLBACK_URL, dest + ".zip", self.log, prog) + self.log(f"Fallback-ZIP gespeichert. Bitte BeamMP-Launcher.exe daraus entpacken. ({dest}.zip)") + return + size = os.path.getsize(dest) + if size < 1_000_000: + # evtl. HTML-Fehlerseite + with open(dest, "rb") as f: + head = f.read(200) + if b" Launcher-Fehler Code 7. + wrapper = os.path.join(os.path.expanduser("~/scripts"), WRAPPER_NAME) + with open(wrapper, "w") as f: + f.write("#!/bin/bash\n") + f.write("# BeamMP im BeamNG-Protonprefix (284160) starten. Wird vom GUI-Skript erzeugt.\n") + f.write("# Steam-Shortcut zeigt auf DIESE Datei (nativ, KEIN Proton-Compat erzwingen).\n") + f.write(f'export STEAM_COMPAT_DATA_PATH="{compatdata}"\n') + f.write(f'export STEAM_COMPAT_CLIENT_INSTALL_PATH="{steam}"\n') + f.write(f'export STEAM_COMPAT_INSTALL_PATH="{game_dir}"\n') + f.write(f'cd "{game_dir}"\n') + f.write(f'exec "{proton_bin}" run "{exe_linux}"\n') + os.chmod(wrapper, 0o755) + self.log(f"Wrapper-Skript: {wrapper}") + + appid = steam_shortcut_appid(wrapper, name) + unsigned = appid & 0xFFFFFFFF + # Alte AppID (direkte Exe) zum Aufräumen des stale Compat-Mappings + old_appid = steam_shortcut_appid(exe_linux, name) + old_unsigned = old_appid & 0xFFFFFFFF + self.log(f"Shortcut-AppID: {appid} (unsigned {unsigned})") + + for uid in sorted(os.listdir(os.path.join(steam, "userdata"))): + cfg = os.path.join(steam, "userdata", uid, "config") + if not os.path.isdir(cfg): + continue + vdf = os.path.join(cfg, "shortcuts.vdf") + if os.path.isfile(vdf): + shutil.copy2(vdf, vdf + ".beammp-gui.bak") + try: + top, keys = read_shortcuts_vdf(vdf) if os.path.isfile(vdf) else ({}, []) + except Exception as e: + self.log(f"{vdf} konnte nicht gelesen werden ({e}) – lege neu an.") + top, keys = {}, [] + # Duplikat? (gleicher Name, alte direkte Exe oder Wrapper) + dup_key = None + for k, entry in top.items(): + if entry.get("AppName") == name or entry.get("Exe") in (exe_linux, wrapper): + dup_key = k + break + entry = { + "appid": appid, + "AppName": name, + "Exe": wrapper, + "StartDir": startdir, + "icon": "", + "ShortcutPath": "", + "LaunchOptions": "", + "IsHidden": 0, + "AllowDesktopConfig": 1, + "AllowOverlay": 1, + "OpenVR": 0, + "Devkit": 0, + "DevkitGameID": "", + "DevkitOverrideAppID": 0, + "LastPlayTime": int(time.time()), + "FlatpakAppID": "", + "tags": {}, + } + if dup_key is not None: + # Felder aktualisieren, LastPlayTime behalten falls neuer=0 + old = top[dup_key] + old.update(entry) + old["appid"] = appid + self.log(f"Eintrag '{name}' aktualisiert (User {uid}).") + else: + new_index = str(max([int(k) for k in top.keys()] + [-1]) + 1) + top[new_index] = entry + keys = sorted(top.keys(), key=int) + self.log(f"Eintrag '{name}' neu erstellt (User {uid}, Index {new_index}).") + write_shortcuts_vdf(vdf, top, keys) + self.log(f"shortcuts.vdf geschrieben: {vdf}") + + # Wrapper läuft NATIV (ruft selbst proton auf) -> KEIN Proton-Compat + # für den Shortcut erzwingen, sonst läuft der Wrapper doppelt unter Proton. + # Altes Mapping der direkten Exe ebenfalls entfernen. + config_vdf = os.path.join(steam, "config", "config.vdf") + if os.path.isfile(config_vdf): + try: + for uid_num in {unsigned, old_unsigned}: + if remove_compat_mapping(config_vdf, uid_num): + self.log(f"CompatToolMapping für {uid_num} entfernt (nativer Wrapper).") + self.log("Wichtig: In Steam bei BeamMP unter Eigenschaften → Kompatibilität " + "KEIN Häkchen setzen (nativ über Wrapper).") + except Exception as e: + self.log(f"Hinweis: CompatMapping-Aufräumen fehlgeschlagen ({e}).") + else: + self.log(f"Hinweis: {config_vdf} nicht gefunden.") + self.log("Fertig! Steam neu starten – BeamMP erscheint in der Bibliothek.") + self.log("Tipp: Falls Launcher Code 7 meldet, BeamNG einmal normal starten (erzeugt BeamNG.drive.ini).") + except Exception as e: + import traceback + self.log(f"FEHLER beim Steam-Eintrag: {e}") + self.log(traceback.format_exc(limit=3).replace(chr(10), " | ")) + + def on_all(self, _): + self.log("Führe Schritt 1 aus, Schritt 2 bitte nach Abschluss von 1 klicken.") + self.on_install(_) + + +class App(Gtk.Application): + def __init__(self): + super().__init__(application_id="com.beammp.gui") + self.win = None + + def do_activate(self): + if not self.win: + self.win = MainWindow(self) + self.win.show_all() + self.win.present() + + +def main(): + if "--detect" in sys.argv: + # Headless-Diagnose für Tests + print("steam:", find_steam_root()) + print("libs:", parse_libraryfolders(find_steam_root() or "")) + print("beamng:", find_beamng()) + print("proton:", [(n, pb) for n, pb, _ in find_proton_versions()]) + return + app = App() + app.run() + + +if __name__ == "__main__": + main()