cc-libs/packages/trapos-music/programs/music.lua
2026-06-20 12:00:30 +02:00

117 lines
2.2 KiB
Lua

local createVersion = require('/apis/libversion');
local command = ...;
local function printUsage()
print('music usage:');
print();
print('\t\t\tmusic');
print('\t\t\tmusic version');
print('\t\t\tmusic help');
end
if command == 'version' or command == '-version' or command == '--version' then
print('v' .. createVersion().forSelf());
return;
end
if command == 'help' or command == '-help' or command == '--help' then
printUsage();
return;
end
if command ~= nil and command ~= '' then
printUsage();
return;
end
local createMusic = require('/apis/libmusic');
local music = createMusic();
local tracks = music.listTracks();
if #tracks == 0 then
print('No music found in /musics');
return;
end
if not peripheral.find('speaker') then
print('No speaker attached');
return;
end
local createEventLoop = require('/apis/eventloop');
local createTui = require('/apis/libtui');
local eventloop = createEventLoop();
local ui = createTui(eventloop);
local Text = ui.Text;
local Button = ui.Button;
local Box = ui.Box;
local List = ui.List;
local selected = nil;
local function Header()
return Box({
direction = 'row',
bgColor = colors.gray,
children = {
Text('Music', {
flex = 1,
color = colors.white,
bgColor = colors.gray,
}),
Button('X', {
color = colors.white,
bgColor = colors.red,
onClick = function(tui)
tui.exitUI('cancel');
end,
}),
},
});
end
local function TrackList()
local items = {};
for _, track in ipairs(tracks) do
items[#items + 1] = Button(track.name, {
onClick = function(tui)
selected = track;
tui.exitUI('play');
end,
});
end
return List({
gap = 1,
padding = 1,
children = items,
});
end
local function App()
return Box({
direction = 'column',
children = {
Header(),
Box({
flex = 1,
border = true,
title = 'Choose a track',
children = {
TrackList(),
},
}),
},
});
end
ui.render(App);
if selected then
print('Playing ' .. selected.name .. '...');
music.play(selected.path);
print('Done.');
end