Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- component = require("component")
- ae2 = component.me_interface
- term = require("term")
- items = {length=0}
- item_completions = {}
- filter = nil
- if not term.isAvailable() then return end
- function doCompletions(line)
- local matches = {}
- for k,v in pairs(completions) do
- if string.find(v, line) == 1 then
- table.insert(matches, v)
- end
- end
- return matches
- end
- function refreshNetwork()
- local all_items = ae2.getAvailableItems()
- items = {}
- local filtered = 0
- completions = {
- "list",
- "quit",
- "refresh",
- "filter "
- }
- local i = 0
- while(all_items[i+1]) do
- i = i + 1
- --if filter then
- --term.write(tostring(items[i].fingerprint.id) .. " - " .. filter .. " - " .. tostring(string.find(items[i].fingerprint.id, filter)) .. "\n")
- --end
- if (not filter) or string.find(tostring(all_items[i].fingerprint.id), filter) then
- filtered = filtered + 1
- table.insert(item_completions, all_items[i].fingerprint.id .. "/" .. all_items[i].fingerprint.dmg)
- table.insert(items, all_items[i])
- end
- end
- -- items["length"] = filtered
- term.write(filtered .. " items found.\n")
- end
- completion = {}
- function completion.array_to_table(t, ret_val)
- local ret = {}
- local i = 0
- while(t[i])
- do
- ret_val[t[i]] = ret_val
- end
- end
- function completion.do_completion(line, pos, menu)
- local ret = {}
- end
- function item_completion_list(ret_val)
- return completion.array_to_table(item_completions, ret_val)
- end
- main_menu = {
- "list" = true,
- "quit" = true,
- "refresh" = true,
- "filter" = true,
- "item" = item_completion_list(true)
- }
- function main_menu_completion(line, pos)
- return completion.do_completion(line, pos, main_menu)
- end
- menu = {}
- function menu.quit(next)
- term.write("Bye!\n")
- return true
- end
- function menu.refresh(next)
- refreshNetwork()
- return false
- end
- function list(start, theend)
- if theend == 0 then theend = #items end
- if theend < 0 then theend = start - theend end
- for i = start, theend do
- term.write("#" .. i .. " " .. items[i].fingerprint.id .. "/" .. items[i].fingerprint.dmg .. " " .. items[i].size .. "\n")
- end
- term.write(start .. " - " .. theend .. " of " .. #items .. "\n")
- return false
- end
- function menu.list(next)
- local start = next()
- if start then start = tonumber(start) end
- if not start then start = 1 end
- list(start,-20)
- return false
- end
- function dump_table(t, indent)
- local k, v
- for k, v in pairs(t) do
- term.write(indent .. k)
- if type(v) == "table" then
- term.write(":\n")
- dump_table(v, indent .. "\t")
- elseif type(v) == "function" then
- term.write(" = function()\n")
- else
- term.write(" = " .. tostring(v) .. "\n")
- end
- end
- end
- function find_item(id, dmg)
- local k, v
- for k, v in pairs(items) do
- if v.fingerprint.id == id and v.fingerprint.dmg == dmg then return v end
- end
- return nil
- end
- function menu.item(next)
- local id, dmg = string.match(next(), "(.+)/(%d+)")
- if dmg then dmg = tonumber(dmg) end
- if not (id and dmg) then
- term.write("Don't understand that.")
- return false
- end
- local item_detail = ae2.getItemDetail({id=id, dmg=dmg}).all()
- local item = find_item(id, dmg)
- if not item_detail then
- term.write("I could not find that.")
- return false
- end
- item_detail.is_craftable = item.is_craftable
- item_detail.is_fluid = item.is_fluid
- item_detail.is_item = item.is_item
- dump_table(item_detail, "")
- return false
- end
- function menu.filter(next)
- local f = next()
- if not f then
- term.write("Filter Cleared.\n")
- end
- filter = f
- refreshNetwork()
- return false
- end
- refreshNetwork()
- quitting = false
- while not quitting do
- term.write("/> ")
- line = term.read({}, false, doCompletions)
- term.write("\n")
- next = string.gmatch(line, "%S+")
- cmd = next()
- if type(menu[cmd]) == "function" then
- if menu[cmd](next) then quitting = true end
- elseif type(menu[cmd]) == "table" then
- assert(false, "Table handling in menus not implemented.")
- else
- term.write("Huh?\n")
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement