mirror of
https://github.com/kepler155c/opus
synced 2025-10-24 12:17:40 +00:00
Initial commit
This commit is contained in:
105
apps/Pim.lua
Normal file
105
apps/Pim.lua
Normal file
@@ -0,0 +1,105 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user