diff --git a/milo/MiloRemote.lua b/milo/MiloRemote.lua index da8fc79..e7245fa 100644 --- a/milo/MiloRemote.lua +++ b/milo/MiloRemote.lua @@ -106,6 +106,7 @@ local page = UI.Page { q = 'quit', }, displayMode = 0, + items = { }, } local function filterItems(t, filter, displayMode) @@ -137,7 +138,6 @@ end function page:sendRequest(data) local response -debug(data) sync(self, function() self:sync() local msg @@ -146,6 +146,7 @@ debug(data) self:setStatus('connecting ...') socket, msg = Socket.connect(options.server.value, 4242) if socket then + self:setStatus('connected ...') socket:write(options.user.value) end end @@ -163,8 +164,11 @@ debug(data) end end self:setStatus(msg or 'Failed to connect') + Event.onTimeout(2, function() + self:setStatus('') + end) end) -debug('got response') + return response end @@ -196,28 +200,32 @@ function page:eventHandler(event) if item then self:setStatus('requesting 1 ...') local response = self:sendRequest({ request = 'transfer', item = item, count = 1 }) - item.count = response.count - self.grid:draw() + if response then + item.count = response.count + self.grid:draw() + end end elseif event.type == 'eject_stack' then local item = self.grid:getSelected() if item then self:setStatus('requesting stack ...') - -- TODO: send a stack request - have server figure out stack size - local response = self:sendRequest({ request = 'transfer', item = item, count = 64 }) - item.count = response.count - self.grid:draw() + local response = self:sendRequest({ request = 'transfer', item = item, count = 'stack' }) + if response then + item.count = response.count + self.grid:draw() + end end elseif event.type == 'eject_all' then local item = self.grid:getSelected() if item then self:setStatus('requesting all ...') - -- TODO: let server figure out count - local response = self:sendRequest({ request = 'transfer', item = item, count = item.count }) - item.count = response.count - self.grid:draw() + local response = self:sendRequest({ request = 'transfer', item = item, count = 'all' }) + if response then + item.count = response.count + self.grid:draw() + end end elseif event.type == 'eject_specified' then @@ -235,10 +243,10 @@ function page:eventHandler(event) end elseif event.type == 'refresh' then + self:setFocus(self.statusBar.filter) self:setStatus('updating ...') self:refresh() self.grid:draw() - self:setFocus(self.statusBar.filter) elseif event.type == 'toggle_display' then local values = { @@ -268,9 +276,13 @@ function page:eventHandler(event) end function page:enable() - self:refresh() self:setFocus(self.statusBar.filter) UI.Page.enable(self) + Event.onTimeout(.1, function() + self:refresh() + self.grid:draw() + self:sync() + end) end function page:refresh() diff --git a/milo/apis/milo.lua b/milo/apis/milo.lua index a8b9e9f..be44c09 100644 --- a/milo/apis/milo.lua +++ b/milo/apis/milo.lua @@ -151,6 +151,10 @@ function Milo:xxx(item, count) end function Milo:provideItem(item, count, callback) + if count <= 0 then + return 0 + end + local current = Milo:getItem(Milo:listItems(), item) or { count = 0 } local toCraft = count - math.min(current.count, count) diff --git a/milo/plugins/remote.lua b/milo/plugins/remote.lua index c30a651..d15df2b 100644 --- a/milo/plugins/remote.lua +++ b/milo/plugins/remote.lua @@ -1,4 +1,5 @@ local Event = require('event') +local itemDB = require('itemDB') local Milo = require('milo') local Socket = require('socket') @@ -59,7 +60,16 @@ debug('remote: ' .. data.request) Milo:clearGrid() elseif data.request == 'transfer' then - local count = Milo:provideItem(data.item, data.count, function(amount, currentCount) + local count = data.count + + if count == 'stack' then + count = itemDB:getMaxCount(data.item) + elseif count == 'all' then + local item = Milo:getItem(Milo:listItems(), data.item) + count = item and item.count or 0 + end + + local provided = Milo:provideItem(data.item, count, function(amount, currentCount) amount = context.storage:export( context.localName, nil, @@ -75,7 +85,7 @@ debug('remote: ' .. data.request) return currentCount - amount end) - socket:write({ count = count }) + socket:write({ count = provided }) end until not socket.connected