diff --git a/sys/etc/fstab b/sys/etc/fstab index 6514f50..60fb9e1 100644 --- a/sys/etc/fstab +++ b/sys/etc/fstab @@ -3,3 +3,4 @@ sys/apps/update.lua urlfs http://pastebin.com/raw/UzGHLbNC sys/apps/Enchat.lua urlfs https://raw.githubusercontent.com/LDDestroier/enchat/master/enchat3.lua sys/apps/cloud.lua urlfs https://cloud-catcher.squiddev.cc/cloud.lua sys/apps/nfttrans.lua urlfs https://pastebin.com/raw/e8XrzeDY +rom/modules/main/opus linkfs sys/modules/opus \ No newline at end of file diff --git a/sys/init/3.modules.lua b/sys/init/3.modules.lua index c80bcc7..3d585c0 100644 --- a/sys/init/3.modules.lua +++ b/sys/init/3.modules.lua @@ -11,15 +11,22 @@ local containers = { local cache = { } +-- manipulators will throw an error on listModules +-- if the user has logged off local function getModules(dev, side) local list = { } - if dev and dev.listModules then - for _, module in pairs(dev.listModules()) do - list[module] = Util.shallowCopy(dev) - list[module].name = module - list[module].type = module - list[module].side = side + local s, m = pcall(function() + if dev and dev.listModules then + for _, module in pairs(dev.listModules()) do + list[module] = Util.shallowCopy(dev) + list[module].name = module + list[module].type = module + list[module].side = side + end end + end) + if not s and m then + _G._syslog(m) end return list end @@ -39,20 +46,27 @@ local function addDevice(dev, args, doQueue) if doQueue then os.queueEvent('device_attach', name) end - return device[name] end +-- directly access the peripheral as the methods in getInventory, etc. +-- can become invalid without any way to tell local function damnManipulator(container, method, args, doQueue) - local dev = addDevice(container[method](), args) - for k,v in pairs(dev) do - if type(v) == 'function' then + local dev = { } + local methods = { + 'drop', 'getDocs', 'getItem', 'getItemMeta', 'getTransferLocations', + 'list', 'pullItems', 'pushItems', 'size', 'suck', + } + -- the user might not be logged in when the compputer is started + -- and there's no way to know when they have logged in. + -- these methods will error if the user is not logged in + if container[method] then + for _,k in pairs(methods) do dev[k] = function(...) return device[container.name][method]()[k](...) end end - end - if doQueue then - os.queueEvent('device_attach', args.name) + + addDevice(dev, args, doQueue) end end @@ -66,32 +80,29 @@ local function addContainer(v, doQueue) end if v.getName then - pcall(function() + local s, m = pcall(function() local name = v.getName() if name then - if v.getInventory then - damnManipulator(v, 'getInventory', { - name = name .. ':inventory', - type = 'inventory', - side = v.side - }, doQueue) - end - if v.getEquipment then - damnManipulator(v, 'getEquipment', { - name = name .. ':equipment', - type = 'equipment', - side = v.side - }, doQueue) - end - if v.getEnder then - damnManipulator(v, 'getEnder', { - name = name .. ':enderChest', - type = 'enderChest', - side = v.side - }, doQueue) - end + damnManipulator(v, 'getInventory', { + name = name .. ':inventory', + type = 'inventory', + side = v.side + }, doQueue) + damnManipulator(v, 'getEquipment', { + name = name .. ':equipment', + type = 'equipment', + side = v.side + }, doQueue) + damnManipulator(v, 'getEnder', { + name = name .. ':enderChest', + type = 'enderChest', + side = v.side + }, doQueue) end end) + if not s and m then + _G._syslog(m) + end end end @@ -113,9 +124,11 @@ kernel.hook('device_attach', function(_, eventData) -- a module is removed if cache[name] then device[name] = cache[name] - -- TODO: cannot simply merge - need to remove - -- all functions then merge - Util.merge(device[name], dev) + for k,v in pairs(device[name]) do + if type(v) == 'function' then + device[name][k] = nil + end + end else cache[name] = dev end diff --git a/sys/init/3.sys.lua b/sys/init/3.sys.lua index ce04901..7e18d18 100644 --- a/sys/init/3.sys.lua +++ b/sys/init/3.sys.lua @@ -1,4 +1,3 @@ local fs = _G.fs -fs.mount('rom/modules/main/opus', 'linkfs', 'sys/modules/opus') fs.loadTab('sys/etc/fstab') diff --git a/sys/init/4.label.lua b/sys/init/4.label.lua index 0a34862..dfdb89c 100644 --- a/sys/init/4.label.lua +++ b/sys/init/4.label.lua @@ -1,14 +1,22 @@ -local os = _G.os +local os = _G.os +local peripheral = _G.peripheral -- Default label if not os.getComputerLabel() then local id = os.getComputerID() + if _G.turtle then os.setComputerLabel('turtle_' .. id) + elseif _G.pocket then os.setComputerLabel('pocket_' .. id) + elseif _G.commands then os.setComputerLabel('command_' .. id) + + elseif peripheral.find('neuralInterface') then + os.setComputerLabel('neural_' .. id) + else os.setComputerLabel('computer_' .. id) end