117 lines
2.2 KiB
Lua
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 /data/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
|