1
0
Fork 0

Added progressbar

This commit is contained in:
Casey 2023-10-17 19:54:57 +03:00
parent 0e047a5b35
commit caa1b5a84f
Signed by: hkc
GPG Key ID: F0F6CFE11CDB0960
1 changed files with 47 additions and 11 deletions

View File

@ -7,8 +7,11 @@ end
local running = true local running = true
term.clear()
local screen_w, screen_h = term.getSize()
local table_of_contents = {} local table_of_contents = {}
local function read32() local function read32()
local v = 0 local v = 0
for i = 1, 4 do for i = 1, 4 do
@ -24,23 +27,56 @@ local function bytes2time(b)
return string.format("%dm, %ds", math.floor(s / 60), s % 60) return string.format("%dm, %ds", math.floor(s / 60), s % 60)
end end
term.clear() local function textProgress(p, c1, c2, fmt, ...)
local screen_w, screen_h = term.getSize() local tw = term.getSize()
local str = string.format(fmt, ...)
local w1 = math.ceil(p * tw)
local w2 = tw - w1
local bg = term.getBackgroundColor()
term.setBackgroundColor(c1)
term.write(str:sub(1, w1))
local rem = w1 - #str
if rem > 0 then
term.write(string.rep(" ", rem))
end
term.setBackgroundColor(c2)
term.write(str:sub(w1 + 1, w1 + w2))
rem = math.min(tw - #str, w2)
if rem > 0 then
term.write(string.rep(" ", rem))
end
term.setBackgroundColor(bg)
end
parallel.waitForAll( parallel.waitForAll(
function() function()
while running do while running do
for i = 1, math.min(screen_h - 1, 48) do if drive.isReady() then
local pos, size = drive.getPosition(), drive.getSize()
for i = 1, math.min(screen_h - 2, 48) do
term.setCursorPos(1, i) term.setCursorPos(1, i)
term.clearLine() term.clearLine()
local song = table_of_contents[i] local song = table_of_contents[i]
if song then if song then
term.write(string.format("#%2d %9s %s", i, bytes2time(song.length), song.title)) local is_playing = pos >= song.offset and pos < song.ending
local s = string.format("#%2d %9s %s", i, bytes2time(song.length), song.title)
if is_playing then
local p = (pos - song.offset) / song.length
textProgress(p, colors.lime, colors.lightGray, s)
else
term.setBackgroundColor(i % 2 == 0 and colors.gray or colors.black)
term.write(s)
end
end end
end end
term.setCursorPos(1, screen_h) term.setCursorPos(1, screen_h)
term.clearLine() textProgress(pos / size, colors.red, colors.gray, "%8d / %8d [%s]", pos, size, drive.getState())
term.write(string.format("%s - %d", drive.getState(), drive.getPosition())) end
os.sleep(0.1) os.sleep(0.1)
end end
end, end,