From 9b9b312a2e90fc2752fff4d56de775e1c4aefeb8 Mon Sep 17 00:00:00 2001 From: Guillaume ARM Date: Fri, 24 May 2024 02:07:21 +0200 Subject: [PATCH] feat(inferium-gui): list available seeds and prepare initial countersMap --- inferium-gui.lua | 46 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/inferium-gui.lua b/inferium-gui.lua index c923a33..e52b37c 100644 --- a/inferium-gui.lua +++ b/inferium-gui.lua @@ -60,6 +60,20 @@ local function getCountersSelectorConfig(counterMax) return config end +local function fetchAvailableSeeds(serverName) + local availableSeeds, errMessage = net.sendQuery(serverName, { type = 'list-seeds' }) + + if errMessage then + error('fetchAvailableSeeds error: ' .. errMessage, 0) + end + + if not availableSeeds then + error('no available seeds', 0) + end + + return availableSeeds +end + local function fetchAllHarvesters(serverName) local harvesters, listErrMessage = net.sendQuery(serverName, { type = 'list-harvesters' }) @@ -116,6 +130,31 @@ local function getCountersMapFromIndexed(countersMapIndexed) return countersMap end +local function mergeCountersMap(countersMapLeft, countersMapRight) + local indexed = {} + + for _, counterPayload in pairs(countersMapLeft) do + indexed[counterPayload.name] = counterPayload.count + end + + for _, counterPayload in pairs(countersMapRight) do + indexed[counterPayload.name] = counterPayload.count + end + + return getCountersMapFromIndexed(indexed) +end + +local function getInitialCountersMap(availableSeeds) + local result = {} + for k, seedName in pairs(availableSeeds) do + result[k] = { + name = parseSeedName(seedName), + count = 0 + } + end + return result +end + local function createCountersMap(harvesters) local countersMapIndexed = {} @@ -201,12 +240,17 @@ end local function main(serverName) net.openRednet() -- TODO: handle closeRednet properly + + print('> fetching available seeds from ' .. serverName) + local availableSeeds = fetchAvailableSeeds(serverName) + print('> ' .. utils.sizeof(availableSeeds) .. ' available seeds fetched') + print('> fetching all configs from ' .. serverName) local harvesters = fetchAllHarvesters(serverName) print('> ' .. utils.sizeof(harvesters) .. ' harvesters fetched') local maxCounter = getMaxCounter(harvesters) - local countersMap = createCountersMap(harvesters) + local countersMap = mergeCountersMap(getInitialCountersMap(availableSeeds), createCountersMap(harvesters)) local countersMapResult = CountersSelector(countersMap, getCountersSelectorConfig(maxCounter)) if not countersMapResult then