From 230ecf2b6b780c19d1030110f8902af9d3a26af8 Mon Sep 17 00:00:00 2001 From: SemvdH Date: Tue, 18 Nov 2025 21:08:11 +0100 Subject: [PATCH] added remove and copy button --- ac-server-scripts-api.py | 13 ++++++++----- ac_cars.py | 8 ++++---- ac_tracks.py | 8 ++++---- index.html | 30 +++++++++++++++++++++++++++--- 4 files changed, 43 insertions(+), 16 deletions(-) diff --git a/ac-server-scripts-api.py b/ac-server-scripts-api.py index 0eee436..7945fcf 100644 --- a/ac-server-scripts-api.py +++ b/ac-server-scripts-api.py @@ -207,11 +207,14 @@ def restart_ac_server() -> tuple[bool, str]: sysbus = dbus.SystemBus() systemd1 = sysbus.get_object('org.freedesktop.systemd1', '/org/freedesktop/systemd1') manager = dbus.Interface(systemd1, 'org.freedesktop.systemd1.Manager') - job = manager.RestartUnit('assetto-corsa-server.service', 'replace') - if job: - return True, "Successfully restarted assetto-corsa-server.service" - else: - return False, "Failed to restart assetto-corsa-server.service" + try: + job = manager.RestartUnit('assetto-corsa-server.service', 'replace') + if job: + return True, "Successfully restarted assetto-corsa-server.service" + else: + return False, "Failed to restart assetto-corsa-server.service" + except dbus.DBusException as e: + return False, f"Could not restart server: {str(e)}" server = HTTPServer(("0.0.0.0", 10303), Handler) print("Server running on port 10303") diff --git a/ac_cars.py b/ac_cars.py index 5bd4575..f8e6f2c 100644 --- a/ac_cars.py +++ b/ac_cars.py @@ -2,10 +2,10 @@ import os CONFIG_FILE = "server_cfg.ini" ENTRY_LIST_FILE = "entry_list.ini" -CONTENT_FOLDER = "/home/sem/assetto-corsa/content" -CONFIG_PATH = "/home/sem/assetto-corsa/cfg" -# CONTENT_FOLDER = "./content" -# CONFIG_PATH = "./cfg" +# CONTENT_FOLDER = "/home/sem/assetto-corsa/content" +# CONFIG_PATH = "/home/sem/assetto-corsa/cfg" +CONTENT_FOLDER = "./content" +CONFIG_PATH = "./cfg" CARS_FOLDER = os.path.join(CONTENT_FOLDER, "cars") diff --git a/ac_tracks.py b/ac_tracks.py index 07a4626..45dd23f 100644 --- a/ac_tracks.py +++ b/ac_tracks.py @@ -1,10 +1,10 @@ import os CONFIG_FILE = "server_cfg.ini" -CONTENT_FOLDER = "/home/sem/assetto-corsa/content" -CONFIG_PATH = "/home/sem/assetto-corsa/cfg" -# CONTENT_FOLDER = "./content" -# CONFIG_PATH = "./cfg" +# CONTENT_FOLDER = "/home/sem/assetto-corsa/content" +# CONFIG_PATH = "/home/sem/assetto-corsa/cfg" +CONTENT_FOLDER = "./content" +CONFIG_PATH = "./cfg" TRACKS_FOLDER = os.path.join(CONTENT_FOLDER, "tracks") diff --git a/index.html b/index.html index eab72b8..ed6bf41 100644 --- a/index.html +++ b/index.html @@ -135,7 +135,7 @@ }); } - async function addCar() { + async function addCar(preselectedCar = null, preselectedSkin = null) { const wrapper = document.createElement("div"); wrapper.style.marginTop = "12px"; wrapper.className = "car-block"; @@ -147,6 +147,18 @@ skinSelect.className = "skin-select"; skinSelect.style.marginLeft = "10px"; + const delBtn = document.createElement("button"); + delBtn.textContent = "Remove"; + delBtn.style.marginLeft = "10px"; + delBtn.onclick = () => wrapper.remove(); + + const copyBtn = document.createElement("button"); + copyBtn.textContent = "Copy"; + copyBtn.style.marginLeft = "10px"; + copyBtn.onclick = () => { + addCar(carSelect.value, skinSelect.value); + }; + const img = document.createElement("img"); img.className = "skin-preview"; img.style.display = "block"; @@ -155,6 +167,8 @@ wrapper.appendChild(carSelect); wrapper.appendChild(skinSelect); + wrapper.appendChild(copyBtn); + wrapper.appendChild(delBtn); wrapper.appendChild(img); carList.appendChild(wrapper); @@ -215,8 +229,18 @@ } }); - // immediately load skins for first car - loadSkins(cars[0].name); + if (preselectedCar) { + carSelect.value = preselectedCar; + loadSkins(preselectedCar); + if (preselectedSkin) { + skinSelect.value = preselectedSkin; + const car = cars.find(c => c.name === preselectedCar); + const cfg = car.skins.find(x => x.name === preselectedSkin); + updateImage(cfg ? cfg.image : ""); + } + } else { + loadSkins(cars[0].name); + } } addCarBtn.addEventListener("click", addCar);