diff options
Diffstat (limited to 'lua/track_info.lua')
| -rw-r--r-- | lua/track_info.lua | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/lua/track_info.lua b/lua/track_info.lua new file mode 100644 index 00000000..4018f246 --- /dev/null +++ b/lua/track_info.lua @@ -0,0 +1,85 @@ +local backstack = require("backstack") +local font = require("font") +local lvgl = require("lvgl") +local playback = require("playback") +local screen = require("screen") +local widgets = require("widgets") + +return screen:new { + create_ui = function(self) + self.root = lvgl.Object(nil, { + flex = { + flex_direction = "column", + flex_wrap = "wrap", + justify_content = "center", + align_items = "center", + align_content = "center", + }, + w = lvgl.HOR_RES(), + h = lvgl.VER_RES(), + }) + self.root:center() + + self.status_bar = widgets.StatusBar(self, { + back_cb = backstack.pop, + transparent_bg = true, + }) + + local info = lvgl.List(self.root, { + w = lvgl.PCT(100), + h = lvgl.PCT(100), + flex_grow = 1, + }) + + -- Use buttons so we can scroll through the list, and labels so we can + -- change the text as the track changes. + local label = function(text) + local b = info:add_btn(nil, "") + local ret = b:Label { + w = lvgl.PCT(100), + h = lvgl.SIZE_CONTENT, + text = text, + text_font = font.fusion_10, + text_align = 1, -- left + } + return ret + end + + local album_artist = label("Loading...") + local genre = label("") + local disc = label("") + local tracknum = label("") + local encoding = label("") + local sample_rate = label("") + local num_channels = label("") + local bits_per_sample = label("") + local path = label("") + + self.bindings = self.bindings + { + playback.track:bind(function(track) + if not track then + return + end + + -- Genres are stored in a table of (genre, bool) pairs + local function genres(tbl) + local all = {} + for item,_ in pairs(tbl) do + table.insert(all, item) + end + return table.concat(all, ", ") + end + + album_artist:set { text = "Album artist: " .. (track.album_artist or "") } + genre:set { text = "Genre: " .. (track.genre and genres(track.genre) or "") } + disc:set { text = "Disc: " .. (track.disc or "") } + tracknum:set { text = "Track: " .. (track.track or "") } + encoding:set { text = "Encoding: " .. (track.encoding or "") } + sample_rate:set { text = "Sample rate: " .. (track.sample_rate or "") } + num_channels:set { text = "Channels: " .. (track.num_channels or "") } + bits_per_sample:set { text = "Bits per sample: " .. (track.bits_per_sample or "") } + path:set { text = "Path: " .. (track.uri or "") } + end), + } + end, +} |
