fix(gui): Start starter altid (kørende AD-traktor stoppes og startes på run'et), Stop-knap kun for runs vi har startet, sprungne traktorer med årsag i status/log, kapacitet <100 l = ingen vogn, ASCII-tegn (v1.12.2.0)

This commit is contained in:
2026-09-23 11:18:55 +02:00
parent 2d6e6dd7bf
commit 2ff8e46306
7 changed files with 89 additions and 33 deletions
+24 -10
View File
@@ -7,6 +7,7 @@ SmartPickupFrame = {}
SmartPickupFrame._mt = Class(SmartPickupFrame, TabbedMenuFrameElement)
SmartPickupFrame.REFRESH_INTERVAL_MS = 1000
SmartPickupFrame.STATUS_OVERRIDE_TICKS = 6
SmartPickupFrame.LOG_PREFIX = "ADSmartPickup: "
SmartPickupFrame.STATE_OFF, SmartPickupFrame.STATE_ON = 1, 2
SmartPickupFrame.TAB_OVERVIEW, SmartPickupFrame.TAB_SUPPLY, SmartPickupFrame.TAB_OUTBOUND, SmartPickupFrame.TAB_STORAGE = 1, 2, 3, 4
@@ -475,9 +476,9 @@ function SmartPickupFrame:describeVehicle(adEnv, run, vehicle, isInRun)
end
end
if validation.ok then
table.insert(parts, "✔")
table.insert(parts, "OK")
else
table.insert(parts, "✖ " .. self.i18n:getText("spu_reason_" .. tostring(validation.reason)))
table.insert(parts, "X " .. self.i18n:getText("spu_reason_" .. tostring(validation.reason)))
end
return table.concat(parts, " — ")
end
@@ -687,8 +688,8 @@ function SmartPickupFrame:refreshLive()
self:refreshNeedsRows(adEnv, run)
end
local status = ADRunsController.getRunStatus(adEnv, run)
isRunning = status.running > 0
local text = isRunning and string.format(self.i18n:getText("spu_status_running"), status.running, status.total)
isRunning = status.isRunning == true
local text = status.running > 0 and string.format(self.i18n:getText("spu_status_running"), status.running, status.total)
or string.format(self.i18n:getText("spu_status_stopped"), status.total)
self:setStatusText(self.statusOverride or text)
for option, data in pairs(self.rowData) do
@@ -701,9 +702,12 @@ function SmartPickupFrame:refreshLive()
else
self:setStatusText(self.statusOverride or self.i18n:getText("spu_noRuns"))
end
-- Engangsbesked ("Startet 2, sprunget over 1", "flyttet fra ..."): vist nu, ryddet her,
-- så næste opdatering om et sekund viser den levende status igen.
self.statusOverride = nil
-- Engangsbesked ("Startet 2, sprunget over 1: …", "flyttet fra ..."): står i
-- STATUS_OVERRIDE_TICKS opdateringer (sekunder), så man når at læse hvorfor.
self.statusOverrideTicks = (self.statusOverrideTicks or 0) - 1
if self.statusOverrideTicks <= 0 then
self.statusOverride = nil
end
self.startButtonInfo.text = self.i18n:getText(isRunning and "spu_button_stop" or "spu_button_start")
self.startButtonInfo.disabled = run == nil
self.renameButtonInfo.disabled = run == nil
@@ -758,6 +762,7 @@ function SmartPickupFrame:onClickVehicle(state, element)
if previousRunId ~= nil then
local previous = ADRuns.getRun(ADRunsController.store, previousRunId)
frame.statusOverride = string.format(frame.i18n:getText("spu_movedFrom"), previous ~= nil and previous.name or tostring(previousRunId))
frame.statusOverrideTicks = SmartPickupFrame.STATUS_OVERRIDE_TICKS
end
else
ADRunsController.unassignVehicle(data.vehicle)
@@ -772,15 +777,24 @@ function SmartPickupFrame:onClickStartStop()
self:safe(function(frame)
local adEnv, run = frame.getAdEnv(), frame:getRun()
if adEnv == nil or run == nil then return end
if ADRunsController.getRunStatus(adEnv, run).running > 0 then
if ADRunsController.getRunStatus(adEnv, run).isRunning then
ADRunsController.stopRun(adEnv, run.id)
frame.statusOverride = nil
else
local started, skipped = 0, 0
local started, skipped, reasons = 0, 0, {}
for _, result in ipairs(ADRunsController.startRun(adEnv, run.id)) do
if result.ok then started = started + 1 else skipped = skipped + 1 end
if result.ok then
started = started + 1
else
skipped = skipped + 1
table.insert(reasons, string.format("%s: %s", tostring(result.vehicle:getName()), frame.i18n:getText("spu_reason_" .. tostring(result.reason))))
end
end
frame.statusOverride = string.format(frame.i18n:getText("spu_status_started"), started, skipped)
if #reasons > 0 then
frame.statusOverride = frame.statusOverride .. " — " .. table.concat(reasons, "; ")
end
frame.statusOverrideTicks = SmartPickupFrame.STATUS_OVERRIDE_TICKS
end
ADRunsController.save()
frame:requestRebuild()