mirror of
https://github.com/ShadowKatStudios/OC-Minitel.git
synced 2024-11-23 02:28:05 +11:00
added an FRequest browser for KittenOS NEO I guess
This commit is contained in:
parent
b3848e6886
commit
1c8f5f75bf
205
FRequest/KittenOS/apps/app-frequest.lua
Normal file
205
FRequest/KittenOS/apps/app-frequest.lua
Normal file
@ -0,0 +1,205 @@
|
||||
local event = require("event")(neo)
|
||||
local neoux = require("neoux")(event, neo)
|
||||
local minitel = neo.requireAccess("x.svc.minitel","minitel daemon access")
|
||||
local computer = neo.requireAccess("k.computer","pushing packets")
|
||||
local net = require("net")(event,computer,minitel)
|
||||
|
||||
local tb = {}
|
||||
|
||||
local rtext = "FRequest Browser v2\nAlt-hjkl to resize\n^J and ^K to scroll"
|
||||
local url = ""
|
||||
local blines, dlines = {}, {}
|
||||
local bbuttons, dbuttons = {}, {}
|
||||
local wwidth, wheight = 30,10
|
||||
local hheight = 2
|
||||
local cscroll = 1
|
||||
local minwidth, minheight = 16, 8
|
||||
local ctrl, alt = false, false
|
||||
|
||||
function tb.fget(host,port,path)
|
||||
local socket = net.open(host,port)
|
||||
socket:write("t"..path.."\n")
|
||||
local c
|
||||
repeat
|
||||
c = socket:read(1)
|
||||
event.pull()
|
||||
until c ~= ""
|
||||
local buffer = ""
|
||||
repeat
|
||||
l = socket:read(1024)
|
||||
buffer=buffer..l
|
||||
event.sleepTo(os.uptime()+1)
|
||||
until socket.state == "closed" and l == ""
|
||||
if c == "n" then
|
||||
return path..": Not found."
|
||||
elseif c == "f" then
|
||||
return "Failure: "..buffer
|
||||
elseif c == "d" then
|
||||
local t = {}
|
||||
for s in buffer:gmatch("[^\r?\n]+") do
|
||||
t[#t+1] = s
|
||||
end
|
||||
return t
|
||||
end
|
||||
return buffer
|
||||
end
|
||||
|
||||
function tb.parseURL(url)
|
||||
local hp, path = url:match("(.-)(/.+)")
|
||||
hp, path = hp or url, path or "/"
|
||||
local host, port = hp:match("(.+):(.+)")
|
||||
host, port = host or hp, port or 70
|
||||
return host, port, path
|
||||
end
|
||||
|
||||
function tb.loadpage()
|
||||
if url:sub(-1) == "/" then
|
||||
url = url:sub(1,-2)
|
||||
end
|
||||
local host, port, path = tb.parseURL(url)
|
||||
local page = tb.fget(host, port, path)
|
||||
if type(page) == "string" then
|
||||
rtext = page
|
||||
bbuttons = {}
|
||||
elseif type(page) == "table" then
|
||||
rtext = "Index of "..path
|
||||
bbuttons = page
|
||||
end
|
||||
cscroll = 1
|
||||
tb.format()
|
||||
tb.redraw()
|
||||
end
|
||||
|
||||
-- UI stuff
|
||||
|
||||
function tb.mkbutton(name,x,y)
|
||||
x = x or 1
|
||||
return neoux.tcbutton(x,y,name,function(w)
|
||||
if name:sub(-1) == "/" then
|
||||
name = name:sub(1,-2)
|
||||
end
|
||||
url = url .."/".. name
|
||||
tb.loadpage()
|
||||
end)
|
||||
end
|
||||
|
||||
function tb.format()
|
||||
blines = neoux.fmtText(rtext, wwidth)
|
||||
dlines = {}
|
||||
for i = cscroll, cscroll + wheight do
|
||||
dlines[#dlines+1] = blines[i]
|
||||
end
|
||||
dbuttons = {}
|
||||
for i = cscroll, cscroll + wheight do
|
||||
dbuttons[#dbuttons+1] = bbuttons[i]
|
||||
end
|
||||
end
|
||||
|
||||
function tb.genwindow()
|
||||
local r1,r2,r2o,r2l = 1,2,1,wwidth
|
||||
fillh = 0
|
||||
hheight = 2
|
||||
if wwidth > 25 then
|
||||
r2 = 1
|
||||
r2o = 7
|
||||
r2l = wwidth - 6
|
||||
hheight = 1
|
||||
end
|
||||
tb.format()
|
||||
local wtab = {
|
||||
neoux.tcbutton(1,r1,unicode.char(8593),tb.bup),
|
||||
neoux.tcbutton(4,r1,unicode.char(9661),tb.bsave),
|
||||
--neoux.tcbutton(wwidth-2,r1,unicode.char(9711),tb.breload)
|
||||
neoux.tcfield(r2o,r2,r2l-3,tb.furl),
|
||||
neoux.tcbutton(r2o+r2l-3,r2,unicode.char(9655),tb.loadpage),
|
||||
neoux.tcrawview(1,hheight+1,dlines,wwidth)
|
||||
}
|
||||
for k,v in pairs(dbuttons) do
|
||||
wtab[#wtab+1] = tb.mkbutton(v,1,hheight+1+k)
|
||||
end
|
||||
return wtab
|
||||
end
|
||||
|
||||
-- button callbacks
|
||||
|
||||
function tb.bup(w)
|
||||
local tURL = {}
|
||||
for s in url:gmatch("[^/]+") do
|
||||
tURL[#tURL+1] = s
|
||||
end
|
||||
if #tURL > 1 then
|
||||
tURL[#tURL] = nil
|
||||
end
|
||||
url = ""
|
||||
for k,v in ipairs(tURL) do
|
||||
url = url .. "/" .. v
|
||||
end
|
||||
url=url:sub(2)
|
||||
tb.breload()
|
||||
end
|
||||
|
||||
function tb.breload(w)
|
||||
tb.loadpage()
|
||||
tb.redraw()
|
||||
end
|
||||
|
||||
function tb.bsave()
|
||||
local f = neoux.fileDialog(true)
|
||||
if f then
|
||||
f.write(rtext.."\n")
|
||||
for k,v in pairs(bbuttons) do
|
||||
f.write(v.."\n")
|
||||
end
|
||||
f.close()
|
||||
end
|
||||
end
|
||||
|
||||
function tb.furl(nv)
|
||||
if not nv then return url end
|
||||
url = nv
|
||||
end
|
||||
|
||||
tb.window = neoux.create(wwidth, wheight, "FGet", neoux.tcwindow(wwidth,wheight,tb.genwindow(),function (w) w.close() done = true end, 0xFFFFFF, 0))
|
||||
|
||||
function tb.redraw()
|
||||
for i = 1, 2 do -- I'm a bad person.
|
||||
tb.window.reset(wwidth, wheight, "FGet", neoux.tcwindow(wwidth,wheight,tb.genwindow(),function (w) w.close() done = true end, 0xFFFFFF, 0))
|
||||
end
|
||||
end
|
||||
|
||||
while not done do
|
||||
local et, _, et2, k1, k2 = event.pull()
|
||||
if et == "x.neo.pub.window" and et2 == "key" then
|
||||
if k1 == 0 and k2 == 56 then -- alt pressed
|
||||
alt = not alt
|
||||
elseif k1 == 0 and k2 == 157 then -- ctrl pressed
|
||||
ctrl = not ctrl
|
||||
elseif alt and k1 == 104 and k2 == 35 then -- alt-h, reduce width
|
||||
wwidth = wwidth - 1
|
||||
if wwidth < minwidth then
|
||||
wwidth = minwidth
|
||||
end
|
||||
tb.redraw()
|
||||
elseif alt and k1 == 106 and k2 == 36 then -- alt-j, increase height
|
||||
wheight = wheight + 1
|
||||
tb.redraw()
|
||||
elseif alt and k1 == 107 and k2 == 37 then -- alt-k, decrease height
|
||||
wheight = wheight - 1
|
||||
if wheight < minheight then
|
||||
wheight = minheight
|
||||
end
|
||||
tb.redraw()
|
||||
elseif alt and k1 == 108 and k2 == 38 then -- alt-l, increase width
|
||||
wwidth = wwidth + 1
|
||||
tb.redraw()
|
||||
elseif k1 == 10 and k2 == 36 then -- ctrl-j, scroll down
|
||||
cscroll = cscroll + 1
|
||||
if cscroll > #blines+#bbuttons then cscroll = #tlines end
|
||||
tb.redraw()
|
||||
elseif k1 == 11 and k2 == 37 then -- ctrl-k scroll up
|
||||
cscroll = cscroll - 1
|
||||
if cscroll < 1 then cscroll = 1 end
|
||||
tb.redraw()
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue
Block a user