Skip to content

Commit d2b9b67

Browse files
authored
ETS2 Save Editor v0.8 – Update UI, Better Logs, Shortcuts & Stability Improvements
🚀 ETS2 Save Editor – Alex Edition v0.8 Version 0.8 bringt wichtige Verbesserungen an Stabilität, Benutzerführung, Update-System, Logs, Sprachen und UI-Verhalten. Der Fokus dieser Version liegt darauf, das Tool zuverlässiger, verständlicher und langfristig besser wartbar zu machen. ✨ Highlights 🔄 Neue Update-UI als eigenes Modal Die Update-Oberfläche wurde vollständig als eigenes Modal umgesetzt. Betroffene Dateien: src/pages/save-editor/index.html src/styles.css src/js/updater.js main.js musste dafür nicht angepasst werden, da die vorhandenen Hooks bereits existierten: checkUpdaterOnStartup(...) manualUpdateCheck(...) Diese zeigen jetzt wieder korrekt auf eine echte Updater-Datei. Der neue Update-Flow ist technisch sauber getrennt in: Check → Download → Install → Relaunch Die Implementierung nutzt die vorhandene Tauri-v2-Runtime: window.TAURI.updater window.TAURI.process Die neue Update-UI zeigt jetzt: aktuelle Versionsdaten verfügbare Update-Version Release Notes erkannte Downloadgröße Fortschrittsbalken Prozentanzeige geladene MB Statusmeldungen für Check, Download, Installation und Relaunch Zusätzlich wurden Guards eingebaut, damit Checks, Downloads oder Installationen nicht mehrfach gleichzeitig gestartet werden können. Während Download und Installation bleibt das Modal kontrolliert geöffnet. Die Option „Later“ wird während kritischer Update-Schritte gesperrt. Fehler werden im Modal sowie per Toast ausgegeben, ohne die App zum Absturz zu bringen. 🧾 Verbesserte User Logs Die User-Logs wurden deutlich verbessert und an mehreren wichtigen Stellen erweitert. Neue Logpunkte wurden unter anderem eingebaut für: Update-Check gestartet Update verfügbar / nicht verfügbar Download-Fortschritt Download abgeschlossen Installation gestartet Installationsfehler Relaunch gestartet relevante Statusmeldungen für User und Debugging Ziel ist, dass Nutzer besser verstehen, was gerade passiert, und dass Fehlerberichte deutlich einfacher nachvollziehbar werden. 🛠️ Developer Tools Toggle Ein neuer Developer Tools Toggle wurde ergänzt. Damit können Entwickler- und Debug-Funktionen gezielter sichtbar gemacht oder ausgeblendet werden. Das sorgt für eine aufgeräumtere Oberfläche für normale Nutzer, ohne wichtige technische Werkzeuge für Entwicklung und Fehleranalyse zu entfernen. 📈 Level Modal – Scroll Fix Das Level Modal wurde überarbeitet und ein Scroll-Problem behoben. Dadurch bleibt das Modal besser nutzbar, wenn Inhalte größer werden oder das Fenster kleiner skaliert ist. Besonders bei nicht maximierten Fenstern verbessert das die Bedienbarkeit deutlich. 🌍 Sprach-Update / Locale Update Die Sprachdateien wurden erweitert und fehlende Attribute ergänzt. Aktualisierte Locale-Dateien: src-tauri/locales/en.json src-tauri/locales/de.json src-tauri/locales/es.json src-tauri/locales/fr.json src-tauri/locales/it.json src-tauri/locales/pl.json Damit sind neue UI-Texte, Update-Meldungen und Statusausgaben jetzt in allen unterstützten Sprachen vorbereitet. ♻️ Reset Values hinzugefügt Eine erste Version von Reset Values wurde integriert. Damit können bestimmte Werte wieder zurückgesetzt werden. Die Funktion ist aktuell eingebaut, muss in kommenden Versionen aber noch weiter verbessert und erweitert werden. Geplant für spätere Versionen: bessere Auswahl einzelner Reset-Bereiche klarere Bestätigungsdialoge bessere Sicherheitsabfragen verständlichere User-Hinweise eventuell Preview vor dem Zurücksetzen ⌨️ Keyboard Shortcuts F1 – F4 Neue Tastaturkürzel wurden ergänzt, um schneller zwischen wichtigen Bereichen zu wechseln. Aktuelle Shortcuts: F1 → Truck F2 → Trailer F3 → Profile F4 → Settings Das verbessert die Bedienbarkeit, besonders für Power-User und häufige Nutzung. 🧩 UI- und Modal-Verbesserungen Mehrere UI-Bereiche wurden aufgeräumt und stabilisiert. Verbessert wurden unter anderem: Modal-Verhalten Scroll-Verhalten responsive Darstellung bessere Trennung von normalen User-Bereichen und Developer-Funktionen sauberere Struktur für größere Tool-Bereiche bessere Vorbereitung für künftige eigene Seiten und größere Module Besonders größere Bereiche wie Recovery, Health, Backups und Diagnose sollen dadurch langfristig übersichtlicher werden und nicht mehr die Hauptoberfläche überladen. 🔒 Vorbereitung für Auto-Backup & Restore Die Version 0.8 bereitet wichtige Strukturen für ein zuverlässigeres Backup- und Restore-System vor. Ziel des Systems: automatischer Snapshot vor kritischen Änderungen Versionsliste für Backups Wiederherstellung mit einem Klick bessere Sicherheit vor fehlerhaften Änderungen spätere Diff-Vorschau zwischen aktuellem Save und Backup Beispiele für künftige Backup-Namen: vor Level-Edit vor Mod-Wechsel vor Profiländerung Das Feature ist ein wichtiger Schritt, um mehr Vertrauen bei täglichen Änderungen am Savegame zu schaffen. 🚨 Save Health Monitor – Verbesserungen & Vorbereitung Der Save Health Monitor wurde weiter vorbereitet und strukturell verbessert. Geplante beziehungsweise vorbereitete Prüfbereiche: fehlende Mods kaputte Referenzen fehlerhafte Truck-/Trailer-/Accessory-Verweise inkonsistente XP- und Level-Werte potenziell riskante Savegame-Zustände Das Ziel bleibt ein verständliches Ampelsystem: Clean Risky Broken Dadurch soll der Nutzer vor dem Spielstart erkennen können, ob ein Savegame sauber, riskant oder beschädigt ist. 🧪 Mod Conflict Diagnostics / Error Reports Die Diagnose-Funktionen wurden weiter verbessert und robuster gedacht. Fokus dieser Version: verständlichere Fehlertexte bessere Ausgabe für User stabileres Verhalten bei problematischen Dateien keine Tool-Abstürze bei Analysefehlern Vorbereitung für Copy-/Export-Reports bessere Trennung zwischen User-Logs und technischen Debug-Informationen Langfristiges Ziel ist ein Mod-Conflict-System, das Crash-Logs und auffällige Fehlerzeilen erkennt und dem Nutzer konkrete Hinweise gibt, ohne dass das Tool selbst instabil wird. 🧊 Freeze- und Stabilitätsverbesserungen Es wurden weitere Ursachen für mögliche UI-Freezes untersucht und berücksichtigt. Besonders relevant war das Scannen großer Mod-Ordner. Dafür wurden Verbesserungen und Schutzmechanismen vorbereitet, unter anderem: kein Blockieren der UI durch lange Dateioperationen Guards gegen parallele Scan-Prozesse bessere Trennung zwischen schnellen Checks und tieferen Analysen langfristige Vorbereitung für manuelle Deep-Scans bessere Fehlerbehandlung bei problematischen Mod-Dateien 🧹 Technische Änderungen Neue Datei src/js/updater.js Geänderte Bereiche src/pages/save-editor/index.html src/styles.css src-tauri/locales/en.json src-tauri/locales/de.json src-tauri/locales/es.json src-tauri/locales/fr.json src-tauri/locales/it.json src-tauri/locales/pl.json Validierung Für die neue Updater-Datei wurde ein Syntax-Check ausgeführt: node --check src/js/updater.js Der Check lief erfolgreich durch. ⚠️ Bekannte Einschränkungen Ein echter Update-Lauf wurde noch nicht live getestet. Nicht ausgeführt wurden bisher: cargo tauri dev echter Download-Test echter Installations-Test echter Relaunch-Test gegen verfügbaren Update-Feed Der komplette Pfad sollte deshalb noch einmal live mit einem verfügbaren Update-Feed getestet werden: Check → Download → Install → Relaunch ✅ Zusammenfassung Version 0.8 ist ein wichtiger Stabilitäts- und Struktur-Release. Die Version verbessert vor allem die Grundlage für kommende Features, macht die App nutzerfreundlicher und bringt das Update-System, Logging, Sprachen und UI-Verhalten auf einen deutlich besseren Stand. Wichtige Punkte dieser Version: neue eigene Update-UI als Modal sauberer Update-Flow mit Fortschrittsanzeige bessere User Logs Developer Tools Toggle Level Modal Scroll Fix neue Keyboard Shortcuts Sprachdateien erweitert Reset Values integriert Vorbereitung für Auto-Backup & Restore Vorbereitung für Save Health Monitor bessere Diagnose- und Error-Report-Struktur mehr Stabilität bei großen oder problematischen Save-/Mod-Daten
2 parents 025cefd + 5a2def0 commit d2b9b67

85 files changed

Lines changed: 31233 additions & 3234 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

ets2-tool/career_en_dump.json

Lines changed: 438 additions & 0 deletions
Large diffs are not rendered by default.

ets2-tool/career_mode_en_dump.json

Lines changed: 277 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,277 @@
1+
{
2+
"title": "Career Mode Dashboard",
3+
"kicker": "Career Mode",
4+
"refresh": "Refresh",
5+
"open_launcher": "Open Launcher",
6+
"active_game": "Active Game",
7+
"data_source": "Data Source",
8+
"source_live": "Live Data",
9+
"source_mock": "Mock / Placeholder",
10+
"vtc_context_user": "Current User",
11+
"vtc_context_profile": "Active Profile",
12+
"vtc_context_save": "Active Save",
13+
"vtc_context_session": "Save Session",
14+
"vtc_context_no_profile": "No profile linked",
15+
"vtc_context_no_save": "No save selected",
16+
"vtc_context_status_linked": "Session linked",
17+
"vtc_context_status_inferred": "Session inferred",
18+
"vtc_context_status_profile_only": "Profile detected, save pending",
19+
"vtc_context_status_missing": "No live save context",
20+
"online": "Online",
21+
"offline": "Offline",
22+
"dashboard_summary": "Core company metrics, profile context and latest activity.",
23+
"drivers": "Driver Status",
24+
"last_trip": "Last Trip",
25+
"quick_overview": "Quick Overview",
26+
"latest_jobs": "Latest Jobs",
27+
"members_summary": "Driver roster with role and operational state.",
28+
"member_assign_user_id": "Assign by User ID",
29+
"assign_role": "Assign Role",
30+
"member_name": "Name",
31+
"member_role": "Role",
32+
"member_joined": "Joined",
33+
"member_actions": "Actions",
34+
"member_status": "Status",
35+
"member_location": "Location",
36+
"orders_summary": "Active dispatch jobs and completed records.",
37+
"finance_summary": "Income, operating costs and estimated value impact.",
38+
"finance_metric": "Metric",
39+
"finance_value": "Value",
40+
"fleet_summary": "Truck and trailer overview with condition and mileage.",
41+
"fleet_type": "Type",
42+
"fleet_name": "Asset",
43+
"fleet_condition": "Condition",
44+
"fleet_distance": "Distance",
45+
"company_summary": "Company profile and VTC identity settings.",
46+
"company_name": "Company name",
47+
"company_location": "Location",
48+
"company_language": "Language",
49+
"company_game": "Game",
50+
"company_logo": "Logo URL/Path",
51+
"company_header": "Header URL/Path",
52+
"company_slogan": "Slogan",
53+
"company_accent": "Accent color",
54+
"company_description": "Description",
55+
"company_public_visibility": "Public visibility",
56+
"save_company_profile": "Save Company Profile",
57+
"company_default_role": "Default member role",
58+
"company_allow_join_requests": "Allow public join requests",
59+
"company_dispatcher_manage_jobs": "Dispatcher can manage jobs",
60+
"company_show_trainee": "Show trainees in roster",
61+
"company_allow_custom_profiles": "Allow member custom profiles",
62+
"save_company_settings": "Save Company Settings",
63+
"company_live_desc": "Company profile is loaded from live backend data.",
64+
"company_mock_desc": "Placeholder profile for upcoming VTC metadata binding.",
65+
"statistics_summary": "Operational totals and trend placeholders for future charts.",
66+
"statistics_chart": "Chart Placeholder",
67+
"settings_summary": "Career-specific options and future API/sync preparation.",
68+
"user_username": "Username",
69+
"update_username": "Update Username",
70+
"username_cooldown_hint": "Username cooldown",
71+
"user_language": "Language",
72+
"user_preferred_game": "Preferred game",
73+
"user_avatar": "Avatar URL/Path",
74+
"user_visibility": "Profile visibility",
75+
"user_bio": "Bio",
76+
"user_theme": "Theme preference",
77+
"user_notifications": "Notifications enabled",
78+
"save_user_settings": "Save User Settings",
79+
"setting_telemetry_enabled": "Telemetry enabled",
80+
"setting_local_stats_tracking": "Local stats tracking",
81+
"setting_auto_job_logging": "Auto job logging",
82+
"setting_auto_finance_tracking": "Auto finance tracking",
83+
"setting_metric_units": "Use metric units",
84+
"setting_24h_time": "Use 24h time",
85+
"setting_autosave_career_data": "Autosave career data",
86+
"setting_auto_refresh": "Auto refresh dashboard",
87+
"setting_show_mock": "Allow mock fallback",
88+
"setting_prepare_sync": "Prepare API/Sync hooks",
89+
"save_career_settings": "Save Career Settings",
90+
"apply_role": "Apply",
91+
"error_prefix": "Error",
92+
"user_saved": "User settings saved.",
93+
"company_saved": "Company profile saved.",
94+
"company_settings_saved": "Company settings saved.",
95+
"career_settings_saved": "Career settings saved.",
96+
"member_role_saved": "Member role updated.",
97+
"settings_note": "API, sync and telemetry configuration hooks are prepared as placeholders.",
98+
"dispatcher": {
99+
"nav_title": "Dispatcher",
100+
"summary": "Market, offers, active assignments, company relationships and job history.",
101+
"kpi_open_jobs": "Open Market Jobs",
102+
"kpi_active_jobs": "Active Jobs",
103+
"kpi_open_offers": "Open Offers",
104+
"kpi_contracts": "Accepted Contracts",
105+
"generation_save": "Linked Save",
106+
"generation_next": "Next Market Refresh",
107+
"generation_interval": "Generation Interval",
108+
"generation_pool": "Max Open Jobs",
109+
"generation_generate_now": "Generate Now",
110+
"generation_cleanup": "Cleanup",
111+
"generation_interval_short": "Interval",
112+
"generation_pool_short": "Pool",
113+
"generation_open_short": "Open",
114+
"tabs": {
115+
"market": "Market",
116+
"offers": "Offers",
117+
"active": "Active",
118+
"contacts": "Company Contacts",
119+
"history": "History"
120+
},
121+
"filter_search": "Search",
122+
"filter_job_type": "Job Type",
123+
"filter_country": "Country",
124+
"filter_sort": "Sort",
125+
"filter_any": "Any",
126+
"sort_newest": "Newest",
127+
"sort_best_reward": "Best Reward",
128+
"sort_best_rate": "Best EUR/km",
129+
"sort_shortest": "Shortest Distance",
130+
"sort_urgency": "Highest Urgency",
131+
"apply_filters": "Apply",
132+
"reset_filters": "Reset",
133+
"detail_title": "Job Details",
134+
"detail_source": "Source",
135+
"detail_vtc_company": "VTC Company",
136+
"detail_ingame_host": "Ingame Host",
137+
"detail_host_city": "Host City",
138+
"detail_target_company": "Target Company",
139+
"detail_offer_location": "Offer Location",
140+
"detail_requested_cargo": "Requested Cargo",
141+
"detail_resolved_cargo": "Resolved ETS2 Cargo",
142+
"detail_cargo_resolution_mode": "Cargo Resolution Mode",
143+
"detail_cargo_valid_snapshot": "Cargo Valid for Snapshot",
144+
"detail_snapshot_session": "Snapshot Session",
145+
"detail_snapshot_counts": "Snapshot Counts",
146+
"detail_snapshot_db_path": "Snapshot DB Path",
147+
"detail_payment_tier": "Payment Tier",
148+
"detail_reputation": "Reputation",
149+
"detail_profit": "Profit Est.",
150+
"detail_duration": "Est. Duration",
151+
"detail_expiry": "Expires In",
152+
"detail_save": "Save Link",
153+
"detail_save_linked": "Save Linked",
154+
"detail_active_save": "Active Save",
155+
"detail_active_session": "Active Session",
156+
"detail_route_reference": "Route Ref",
157+
"detail_ets2_link": "ETS2 Link",
158+
"detail_last_error_code": "Last Error Code",
159+
"detail_last_error_message": "Last Error Message",
160+
"detail_live_progress": "Live Progress",
161+
"action_guide_title": "Action Guide",
162+
"write_report_title": "Last Write Output",
163+
"db_diagnostics_title": "SQLite Diagnostics",
164+
"load_hint": "Job written to quicksave. Load this exact quicksave in ETS2 to apply the new offer: {path}",
165+
"load_hint_generic": "Job written to quicksave. Load the exact quicksave in ETS2 to apply the new offer.",
166+
"load_path_warning": "Warning: {warning}",
167+
"offer_location_hint": "This injected offer is attached to host depot {depot}.",
168+
"hint_accept": "Accept Job: Dispatcher-only state change.",
169+
"hint_assign": "Inject into Active Save: runs Assign -> Prepare -> Write in one action.",
170+
"hint_prepare": "Prepare ETS2: internal metadata phase before write.",
171+
"hint_write": "Only Write modifies game.sii / quicksave.",
172+
"hint_synced": "Mark Synced: updates tool sync status only.",
173+
"use_autosave_fallback": "Use autosave fallback if quicksave is missing",
174+
"require_quicksave": "Please create a quicksave in-game (F5)",
175+
"accept_job": "Accept Job",
176+
"prepare_ets_link": "Prepare ETS Link",
177+
"retry_prepare_ets_link": "Retry Prepare ETS Link",
178+
"write_to_quicksave": "Write to Quicksave",
179+
"mark_synced": "Mark Synced",
180+
"offer_company": "Company ID",
181+
"offer_job_type": "Requested Job Type",
182+
"offer_rate": "Rate (EUR/km)",
183+
"offer_region": "Region / Country",
184+
"offer_equipment": "Equipment",
185+
"offer_scope": "Scope",
186+
"offer_note": "Note",
187+
"send_offer": "Send Offer",
188+
"col_job_id": "Job ID",
189+
"col_offer_id": "Offer ID",
190+
"col_company": "Company",
191+
"col_type": "Type",
192+
"col_route": "Route",
193+
"col_distance": "Distance",
194+
"col_rate": "EUR/km",
195+
"col_reward": "Reward",
196+
"col_status": "Status",
197+
"col_actions": "Actions",
198+
"col_progress": "Progress",
199+
"col_payment_tier": "Payment Tier",
200+
"col_reputation": "Reputation",
201+
"col_success_rate": "Success",
202+
"col_completed": "Completed",
203+
"col_failed": "Failed",
204+
"history_completed": "Completed",
205+
"history_failed": "Failed",
206+
"history_revenue": "Revenue",
207+
"history_avg_rate": "Avg EUR/km",
208+
"badge_generated": "Generated",
209+
"badge_offer": "Offer",
210+
"badge_contract": "Contract",
211+
"badge_imported": "Imported",
212+
"badge_active": "Active",
213+
"badge_pending": "Pending",
214+
"badge_requires_load": "Requires Load",
215+
"badge_synced": "Synced to ETS2",
216+
"badge_completed": "Completed",
217+
"badge_error": "Error",
218+
"badge_pending_route": "Pending Route",
219+
"badge_save_linked": "Save-linked",
220+
"no_save_link": "No save linked",
221+
"unsynced": "Not synced",
222+
"expired": "Expired",
223+
"assign_to_active_save": "Load into Active Save",
224+
"inject_active_save": "Inject into Active Save",
225+
"already_injected": "Already Injected",
226+
"toast_job_accepted": "Dispatcher job accepted.",
227+
"toast_job_assigned": "Dispatcher job assigned to the active save.",
228+
"toast_assign_prepare_complete": "Dispatcher job assigned and ETS link prepared.",
229+
"toast_jobs_generated": "Universal jobs generated.",
230+
"toast_cleanup_complete": "Expired dispatcher jobs cleaned up.",
231+
"toast_link_prepared": "ETS job link prepared.",
232+
"toast_quicksave_load_required": "Quicksave written. Load the quicksave in-game.",
233+
"toast_job_synced": "Dispatcher job marked as synced to ETS2.",
234+
"toast_job_cancelled": "Dispatcher job cancelled.",
235+
"toast_offer_sent": "Offer sent.",
236+
"action_accept": "Accept",
237+
"action_reject": "Reject",
238+
"action_cancel": "Cancel",
239+
"cancel_job": "Cancel Job"
240+
},
241+
"errors": {
242+
"unknown": "Operation failed.",
243+
"username_already_taken": "Username is already taken.",
244+
"username_change_cooldown_active": "Username can only be changed every 14 days.",
245+
"user_not_found": "User not found.",
246+
"company_not_found": "Company not found.",
247+
"user_already_in_company": "User is already in a company.",
248+
"member_not_found": "Member not found.",
249+
"invalid_role": "Invalid role.",
250+
"not_allowed": "You are not allowed to perform this action.",
251+
"company_name_already_taken": "Company name is already taken.",
252+
"invalid_game": "Invalid game value.",
253+
"invalid_username": "Invalid username.",
254+
"company_name_required": "Company name is required.",
255+
"company_location_required": "Company location is required.",
256+
"company_language_required": "Company language is required.",
257+
"dispatcher_job_not_open": "Dispatcher job is no longer open.",
258+
"dispatcher_job_expired": "Dispatcher job has expired.",
259+
"dispatcher_active_job_exists": "You already have an active dispatcher job.",
260+
"dispatcher_equipment_requirement_not_met": "Required equipment is not available.",
261+
"dispatcher_reputation_requirement_not_met": "Reputation requirement is not met.",
262+
"dispatcher_offer_company_required": "Company ID is required for the offer.",
263+
"dispatcher_offer_not_cancellable": "This offer cannot be cancelled.",
264+
"dispatcher_offer_not_countered": "This offer has no active counter offer.",
265+
"dispatcher_job_not_cancellable": "This job cannot be cancelled.",
266+
"dispatcher_save_context_missing": "A save context is required for dispatcher market actions.",
267+
"dispatcher_job_not_generated": "This dispatcher job is not a generated market job.",
268+
"no_active_save": "No active save is loaded.",
269+
"dispatcher_job_not_found": "Dispatcher job was not found.",
270+
"job_already_assigned": "Dispatcher job is already assigned to the active save.",
271+
"invalid_job_status": "Dispatcher job status does not allow this action.",
272+
"save_context_unavailable": "Active save context is currently unavailable.",
273+
"decode_failed": "Save decoding failed. Check the diagnostics for the detected signature and required source files.",
274+
"company_has_no_job_offers": "The selected host depot has no available job offers. Refresh the ETS2 economy and save again.",
275+
"company_has_no_job_offers_in_city": "No depot in the selected city currently has job offers. Refresh the ETS2 economy and save again."
276+
}
277+
}

0 commit comments

Comments
 (0)