summaryrefslogtreecommitdiff
path: root/lua
diff options
context:
space:
mode:
authorSam <github@samlord.co.uk>2025-02-03 20:13:23 +0000
committerSam <github@samlord.co.uk>2025-02-03 20:13:23 +0000
commit844b3f733ec30eff41c3b3d48c74561d7b11da8e (patch)
tree50aaf8978afad46abc9dfc31855fb2bd3f8c852b /lua
parent10ba00951be79d843c560e4199ac8325f3315f72 (diff)
downloadtangara-fw-844b3f733ec30eff41c3b3d48c74561d7b11da8e.tar.gz
Use Playlist subdirectory
Target /Playlists, display and browse sub directories and playlists within
Diffstat (limited to 'lua')
-rw-r--r--lua/main_menu.lua1
-rw-r--r--lua/playlist_browser.lua48
2 files changed, 36 insertions, 13 deletions
diff --git a/lua/main_menu.lua b/lua/main_menu.lua
index 80d5b599..c8edf766 100644
--- a/lua/main_menu.lua
+++ b/lua/main_menu.lua
@@ -135,6 +135,7 @@ return widgets.MenuScreen:new {
playlist_btn:onClicked(function()
backstack.push(require("playlist_browser"):new {
title = "Playlists",
+ iterator = filesystem.iterator("/Playlists")
})
end)
playlist_btn:add_style(styles.list_item)
diff --git a/lua/playlist_browser.lua b/lua/playlist_browser.lua
index d29899ad..4824b581 100644
--- a/lua/playlist_browser.lua
+++ b/lua/playlist_browser.lua
@@ -13,6 +13,7 @@ local theme = require("theme")
local playback = require("playback")
local queue = require("queue")
local table_iterator = require("table_iterator")
+local img = require("images")
return screen:new {
@@ -59,28 +60,49 @@ return screen:new {
}
end
- local playlists = {}
- -- Find playlists
- local fs_iter = filesystem.iterator("")
- for item in fs_iter do
+ local is_playlist = function(item)
+ return item:filepath():match("%.playlist$")
+ or item:filepath():match("%.m3u8?$")
+ end
+
+ local get_icon_func = function(item)
+ if item:is_directory() then
+ return img.files
+ else
+ return img.enqueue
+ end
+ end
+
+ local playlists_and_dirs = {};
+ for item in self.iterator do
if
- item:filepath():match("%.playlist$") or
- item:filepath():match("%.m3u8?$") then
- table.insert(playlists, item)
+ is_playlist(item) or
+ item:is_directory() then
+ table.insert(playlists_and_dirs, item)
end
end
- widgets.InfiniteList(self.root, table_iterator:create(playlists), {
+ widgets.InfiniteList(self.root, table_iterator:create(playlists_and_dirs), {
focus_first_item = true,
+ get_icon = get_icon_func,
callback = function(item)
return function()
- queue.open_playlist(item:filepath())
- playback.playing:set(true)
- backstack.push(playing:new())
+ if item:is_directory() then
+ backstack.push(
+ require("playlist_browser"):new {
+ title = self.title,
+ iterator = filesystem.iterator(item:filepath()),
+ breadcrumb = item:filepath()
+ })
+ elseif
+ is_playlist(item) then
+ -- TODO: playlist viewer
+ queue.open_playlist(item:filepath())
+ playback.playing:set(true)
+ backstack.push(playing:new())
+ end
end
end
})
end
}
-
-