mirror of
https://github.com/kepler155c/opus
synced 2024-11-05 08:26:16 +00:00
108 lines
2.1 KiB
Lua
108 lines
2.1 KiB
Lua
requireInjector(getfenv(1))
|
|
|
|
local Config = require('config')
|
|
local Event = require('event')
|
|
local UI = require('ui')
|
|
local Util = require('util')
|
|
|
|
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()
|