From a074213b7ca8448eff07ef3cbc7579505652a37b Mon Sep 17 00:00:00 2001 From: "kepler155c@gmail.com" Date: Sat, 15 Apr 2017 11:38:08 -0400 Subject: [PATCH] storage activity for refined storage --- apps/storageActivity.lua | 26 +++++---- sys/apis/refinedProvider.lua | 108 +++++++++++++++++++++++++++++++++++ 2 files changed, 124 insertions(+), 10 deletions(-) create mode 100644 sys/apis/refinedProvider.lua diff --git a/apps/storageActivity.lua b/apps/storageActivity.lua index eae286a..7f46a02 100644 --- a/apps/storageActivity.lua +++ b/apps/storageActivity.lua @@ -1,15 +1,20 @@ require = requireInjector(getfenv(1)) local Event = require('event') local UI = require('ui') -local Peripheral = require('peripheral') +local RefinedProvider = require('refinedProvider') +local MEProvider = require('meProvider') if not device.monitor then error('Monitor not found') end -local me = Peripheral.getByMethod('getAvailableItems') -if not me then - error("No ME peripheral attached") +local storage = RefinedProvider() +if not storage:isValid() then + storage = MEProvider() +end + +if not storage:isValid() then + error('Not connected to a storage device') end local monitor = UI.Device({ @@ -118,7 +123,7 @@ function changedPage:eventHandler(event) end function changedPage:refresh() - local t = me.getAvailableItems('all') + local t = storage:listItems('all') if not t or Util.empty(t) then self:clear() @@ -127,11 +132,12 @@ function changedPage:refresh() end for k,v in pairs(t) do - v.id = v.item.id - v.dmg = v.item.dmg - v.name = safeString(v.item.display_name) - v.qty = v.size - end + --v.id = v.id + --v.dmg = v.dmg + v.name = safeString(v.display_name) + t[k] = Util.shallowCopy(v) + --v.qty = v.qty + end if not self.lastItems then self.lastItems = t diff --git a/sys/apis/refinedProvider.lua b/sys/apis/refinedProvider.lua new file mode 100644 index 0000000..77b867f --- /dev/null +++ b/sys/apis/refinedProvider.lua @@ -0,0 +1,108 @@ +local class = require('class') +local Peripheral = require('peripheral') + +local RefinedProvider = class() + +function RefinedProvider:init(args) + + local defaults = { + cache = { }, + items = { }, + name = 'refinedStorage', + } + Util.merge(self, defaults) + Util.merge(self, args) + + self.controller = Peripheral.getByType('refinedstorage:controller') +end + +function RefinedProvider:isValid() + return not not self.controller +end + +function RefinedProvider:getCachedItemDetails(item) + local key = table.concat({ item.name, item.damage, item.nbtHash }, ':') + + local detail = self.cache[key] + if not detail then + detail = self.controller.findItem(item) + if detail then + Util.merge(detail, detail.getMetadata()) + if detail.displayName then + if detail.maxDamage and detail.maxDamage > 0 and detail.damage > 0 then + detail.displayName = detail.displayName .. ' (damaged)' + end + detail.lname = detail.displayName:lower() + + -- backwards capability + detail.dmg = detail.damage + detail.id = detail.name + detail.qty = detail.count + detail.display_name = detail.displayName + + self.cache[key] = detail + end + end + end + return detail +end + +function RefinedProvider:listItems() + local items = { } + local list + + pcall(function() + list = self.controller.listAvailableItems() + end) + + if list then + for _,v in pairs(list) do + local item = self:getCachedItemDetails(v) + if item then + item.count = v.count + item.qty = v.count + table.insert(items, item) + end + end + end + + return items +end + +function RefinedProvider:getItemInfo(fingerprint) + + local key = table.concat({ fingerprint.name, fingerprint.damage, fingerprint.nbtHash }, ':') + + local item = self.cache[key] + if not item then + return self:getCachedItemDetails(fingerprint) + end + + local detail = self.controller.findItem(item) + if detail then + item.count = detail.count + item.qty = detail.count + return item + end +end + +function RefinedProvider:craft(id, dmg, qty) + return false +end + +function RefinedProvider:craftItems(items) + return false +end + +function RefinedProvider:provide(item, qty, slot) +end + +function RefinedProvider:extract(slot, qty) +-- self.controller.pushItems(self.direction, slot, qty) +end + +function RefinedProvider:insert(slot, qty) +-- self.controller.pullItems(self.direction, slot, qty) +end + +return RefinedProvider