-- startup.lua for Inventory Manager computer -- Auto-updates from git then launches inventoryManager.lua local REPO_RAW = "https://git.spatulaa.com/MayaTheShy/Inventory-Manager-CC/raw/branch/main" -- Files to download (destination -> repo path) local FILES = { ["inventoryManager.lua"] = "inventoryManager.lua", ["manager/config.lua"] = "manager/config.lua", ["manager/state.lua"] = "manager/state.lua", ["manager/operations.lua"] = "manager/operations.lua", ["manager/display.lua"] = "manager/display.lua", ["lib/log.lua"] = "lib/log.lua", ["lib/ui.lua"] = "lib/ui.lua", ["data/smeltable.lua"] = "data/smeltable.lua", ["data/fuel.lua"] = "data/fuel.lua", ["data/compostable.lua"] = "data/compostable.lua", ["data/craftable.lua"] = "data/craftable.lua", ["data/alerts.lua"] = "data/alerts.lua", } ------------------------------------------------- local function ensureDir(filePath) local dir = filePath:match("^(.+)/") if dir and not fs.isDir(dir) then fs.makeDir(dir) end end local function download(remotePath, localPath) local url = REPO_RAW .. "/" .. remotePath local response = http.get(url) if response then ensureDir(localPath) local f = fs.open(localPath, "w") f.write(response.readAll()) f.close() response.close() return true end return false end ------------------------------------------------- term.clear() term.setCursorPos(1, 1) print("==================================") print(" Inventory Manager - Startup") print(" Computer ID: " .. os.getComputerID()) print("==================================") print("") -- Update files local updated, failed = 0, 0 for localPath, remotePath in pairs(FILES) do write(" " .. localPath .. " ... ") if download(remotePath, localPath) then print("OK") updated = updated + 1 else print("FAIL") failed = failed + 1 end end print("") if failed > 0 then print(string.format("Updated %d files, %d failed.", updated, failed)) print("Continuing with existing files...") else print(string.format("All %d files up to date.", updated)) end print("") print("Starting inventoryManager...") sleep(1) -- Reboot listener: reboots this computer when the manager sends -- a reboot command to itself (target = "all" or "manager") local SYSTEM_CHANNEL = 4205 local ROLE = "manager" local function rebootListener() local m = peripheral.find("modem") if not m then return end m.open(SYSTEM_CHANNEL) while true do local _, _, channel, _, message = os.pullEvent("modem_message") if channel == SYSTEM_CHANNEL and type(message) == "table" and message.type == "reboot" then local target = message.target or "all" if target == "all" or target == ROLE or target == tostring(os.getComputerID()) then print("[SYSTEM] Reboot command received. Rebooting...") sleep(0.5) os.reboot() end end end end parallel.waitForAny( function() shell.run("inventoryManager.lua") end, rebootListener )