The Opus package manager deletes the entire package directory on update (fs.delete(packageDir)) before re-downloading files. This wiped all config files (.manager_config, .client_config, etc.) that were stored inside packages/inventory-manager/. Fix: add _configPath() helper to every program that resolves config file paths to usr/config/inventory-manager/ when running under Opus, which lives outside the package directory and survives updates. Falls back to the local _path() for standalone (non-Opus) use. Updated files: - inventoryManager.lua, manager/config.lua, inventoryClient.lua, inventoryWebBridge.lua, dropperController.lua, craftingTurtle.lua - .package install script: saves configs to usr/config/inventory-manager/ - autorun/startup.lua: checks both persistent and package dirs - startup/client.lua: uses persistent dir for .client_setup/.dropper_config - web/server/Dockerfile: switch health check to wget (from prior fix)
100 lines
3.5 KiB
Plaintext
100 lines
3.5 KiB
Plaintext
{
|
|
title = "Inventory Manager",
|
|
description = "Automated inventory management system for CC:Tweaked. Tracks items across networked storage, crafting turtles, furnaces, and alerts. Includes web dashboard via bridge computer.",
|
|
repository = "gitea://git.spatulaa.com/MayaTheShy/Inventory-Manager-CC/main/",
|
|
exclude = {
|
|
"^web/", "^__tests__/", "^startup/",
|
|
"%.md$", "%.json$", "^%.git", "^LICENSE$", "^node_modules/",
|
|
"%.bak$", "^listDevicesByType%.lua$",
|
|
},
|
|
install = [[
|
|
local cfgDir = "usr/config/inventory-manager"
|
|
if not fs.isDir(cfgDir) then fs.makeDir(cfgDir) end
|
|
local function ask(prompt, default)
|
|
if default and #default > 0 then
|
|
write(prompt .. " [" .. default .. "]: ")
|
|
else
|
|
write(prompt .. ": ")
|
|
end
|
|
local val = read()
|
|
if not val or #val == 0 then return default end
|
|
return val
|
|
end
|
|
|
|
print("")
|
|
print("-- Inventory Manager Setup --")
|
|
print("")
|
|
print("Which role(s) will this computer run?")
|
|
print(" 1) Inventory Manager (main controller)")
|
|
print(" 2) Inventory Client (display-only)")
|
|
print(" 3) Web Bridge (HTTP forwarder)")
|
|
print(" 4) Skip setup")
|
|
print("")
|
|
write("Choice (1/2/3/4): ")
|
|
local choice = read()
|
|
|
|
if choice == "1" then
|
|
print("")
|
|
print("-- Manager Configuration --")
|
|
local monitorSide = ask("Monitor side", "left")
|
|
local smelterMonitorSide = ask("Smelter monitor side", "top")
|
|
local dropperName = ask("Dropper peripheral name", "minecraft:dropper_9")
|
|
local barrelName = ask("Barrel peripheral name", "minecraft:barrel_0")
|
|
local serverUrl = ask("Web server URL (blank to skip)", "")
|
|
|
|
local cfg = {
|
|
monitorSide = monitorSide,
|
|
smelterMonitorSide = smelterMonitorSide,
|
|
dropperName = dropperName,
|
|
barrelName = barrelName,
|
|
}
|
|
local f = fs.open(fs.combine(cfgDir, ".manager_config"), "w")
|
|
f.write(textutils.serialiseJSON(cfg))
|
|
f.close()
|
|
print("Saved manager config.")
|
|
|
|
if serverUrl and #serverUrl > 0 then
|
|
local bcfg = { serverUrl = serverUrl }
|
|
local bf = fs.open(fs.combine(cfgDir, ".webbridge_config"), "w")
|
|
bf.write(textutils.serialiseJSON(bcfg))
|
|
bf.close()
|
|
print("Saved web bridge config.")
|
|
end
|
|
|
|
elseif choice == "2" then
|
|
print("")
|
|
print("-- Client Configuration --")
|
|
local monitorSide = ask("Monitor side", "left")
|
|
local smelterMonitorSide = ask("Smelter monitor side", "top")
|
|
local dropperName = ask("Dropper peripheral name (blank if none)", "")
|
|
local barrelName = ask("Barrel peripheral name (blank if none)", "")
|
|
|
|
local cfg = {
|
|
monitorSide = monitorSide,
|
|
smelterMonitorSide = smelterMonitorSide,
|
|
}
|
|
if dropperName and #dropperName > 0 then cfg.dropperName = dropperName end
|
|
if barrelName and #barrelName > 0 then cfg.barrelName = barrelName end
|
|
|
|
local f = fs.open(fs.combine(cfgDir, ".client_config"), "w")
|
|
f.write(textutils.serialiseJSON(cfg))
|
|
f.close()
|
|
print("Saved client config.")
|
|
|
|
elseif choice == "3" then
|
|
print("")
|
|
print("-- Web Bridge Configuration --")
|
|
local serverUrl = ask("Web server URL", "http://localhost")
|
|
|
|
local cfg = { serverUrl = serverUrl }
|
|
local f = fs.open(fs.combine(cfgDir, ".webbridge_config"), "w")
|
|
f.write(textutils.serialiseJSON(cfg))
|
|
f.close()
|
|
print("Saved web bridge config.")
|
|
|
|
else
|
|
print("Skipped — edit config files manually later.")
|
|
end
|
|
]],
|
|
}
|