mirror of
https://github.com/kepler155c/opus
synced 2024-12-28 01:20:27 +00:00
106 lines
2.1 KiB
Lua
106 lines
2.1 KiB
Lua
|
require = requireInjector(getfenv(1))
|
||
|
local Event = require('event')
|
||
|
local UI = require('ui')
|
||
|
local Config = require('config')
|
||
|
|
||
|
multishell.setTitle(multishell.getCurrent(), 'PIM')
|
||
|
|
||
|
local inventory = { }
|
||
|
local mode = 'sync'
|
||
|
|
||
|
if not device.pim then
|
||
|
error('PIM not attached')
|
||
|
end
|
||
|
|
||
|
local page = UI.Page({
|
||
|
menu = UI.Menu({
|
||
|
centered = true,
|
||
|
y = 2,
|
||
|
menuItems = {
|
||
|
{ prompt = 'Learn', event = 'learn', help = '' },
|
||
|
},
|
||
|
}),
|
||
|
statusBar = UI.StatusBar({
|
||
|
columns = {
|
||
|
{ 'Status', 'status', UI.term.width - 7 },
|
||
|
{ 'Mode', 'mode', 7 }
|
||
|
}
|
||
|
}),
|
||
|
accelerators = {
|
||
|
q = 'quit',
|
||
|
},
|
||
|
})
|
||
|
|
||
|
local function learn()
|
||
|
if device.pim.getInventorySize() > 0 then
|
||
|
local stacks = device.pim.getAllStacks(false)
|
||
|
Config.update('pim', stacks)
|
||
|
mode = 'sync'
|
||
|
page.statusBar:setValue('status', 'Learned inventory')
|
||
|
end
|
||
|
page.statusBar:setValue('mode', mode)
|
||
|
page.statusBar:draw()
|
||
|
end
|
||
|
|
||
|
function page:eventHandler(event)
|
||
|
|
||
|
if event.type == 'learn' then
|
||
|
mode = 'learn'
|
||
|
learn()
|
||
|
elseif event.type == 'quit' then
|
||
|
Event.exitPullEvents()
|
||
|
end
|
||
|
|
||
|
return UI.Page.eventHandler(self, event)
|
||
|
end
|
||
|
|
||
|
local function inInventory(s)
|
||
|
for _,i in pairs(inventory) do
|
||
|
if i.id == s.id then
|
||
|
return true
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local function pimWatcher()
|
||
|
local playerOn = false
|
||
|
|
||
|
while true do
|
||
|
if device.pim.getInventorySize() > 0 and not playerOn then
|
||
|
playerOn = true
|
||
|
|
||
|
if mode == 'learn' then
|
||
|
learn()
|
||
|
|
||
|
else
|
||
|
local stacks = device.pim.getAllStacks(false)
|
||
|
for k,stack in pairs(stacks) do
|
||
|
if not inInventory(stack) then
|
||
|
device.pim.pushItem('down', k, stack.qty)
|
||
|
end
|
||
|
end
|
||
|
page.statusBar:setValue('status', 'Synchronized')
|
||
|
page.statusBar:draw()
|
||
|
end
|
||
|
|
||
|
elseif device.pim.getInventorySize() == 0 and playerOn then
|
||
|
page.statusBar:setValue('status', 'No player')
|
||
|
page.statusBar:draw()
|
||
|
playerOn = false
|
||
|
end
|
||
|
os.sleep(1)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
Config.load('pim', inventory)
|
||
|
|
||
|
if Util.empty(inventory) then
|
||
|
mode = 'learn'
|
||
|
end
|
||
|
page.statusBar:setValue('mode', mode)
|
||
|
|
||
|
UI:setPage(page)
|
||
|
|
||
|
Event.pullEvents(pimWatcher)
|
||
|
UI.term:reset()
|