90 lines
2.3 KiB
Lua
90 lines
2.3 KiB
Lua
local diskDrive = peripheral.find("drive")
|
|
local monitor = require("monitor-driver")
|
|
local function getFilePath()
|
|
if diskDrive and diskDrive.isDiskPresent() then
|
|
local path = diskDrive.getMountPath()
|
|
if path then
|
|
return fs.combine(path, "data.tbl")
|
|
end
|
|
end
|
|
return nil
|
|
end
|
|
|
|
local function loadData()
|
|
local path = getFilePath()
|
|
if path and fs.exists(path) then
|
|
local file = fs.open(path, "r")
|
|
local content = file.readAll()
|
|
file.close()
|
|
local parsed
|
|
if content then
|
|
parsed = textutils.unserialize(content)
|
|
end
|
|
return parsed or {}
|
|
end
|
|
return {}
|
|
end
|
|
|
|
local function saveData(data)
|
|
local path = getFilePath()
|
|
if path then
|
|
local file = fs.open(path, "w")
|
|
file.write(textutils.serialize(data))
|
|
file.close()
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
local function generateGuid()
|
|
local template ='xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'
|
|
return string.gsub(template, '[xy]', function (c)
|
|
local v = (c == 'x') and math.random(0, 0xf) or math.random(8, 0xb)
|
|
return string.format('%x', v)
|
|
end)
|
|
end
|
|
|
|
local function getValue(key)
|
|
local data = loadData()
|
|
for _, item in ipairs(data) do
|
|
if item.Key == key then
|
|
return item.Value
|
|
end
|
|
end
|
|
return nil
|
|
end
|
|
|
|
local function updateValue(key, value)
|
|
local data = loadData()
|
|
for _, item in ipairs(data) do
|
|
if item.Key == key then
|
|
item.Value = value
|
|
saveData(data)
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
local function writeValue(key, value)
|
|
local data = loadData()
|
|
local guid = generateGuid()
|
|
table.insert(data, { GeneratedGuid = guid, Key = key, Value = value })
|
|
saveData(data)
|
|
return guid
|
|
end
|
|
|
|
local function initialize()
|
|
monitor.writeLine("Initializing Data Storage...")
|
|
if diskDrive and diskDrive.isDiskPresent() then
|
|
monitor.writeLine("Disk detected. Initializing data storage.")
|
|
local path = getFilePath()
|
|
if path and not fs.exists(path) then
|
|
saveData({})
|
|
end
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
return { getValue = getValue, updateValue = updateValue, writeValue = writeValue, initialize = initialize } |