diff --git a/lib/libtags/id3v2.c b/lib/libtags/id3v2.c index 0e8ddb11..eced01f8 100644 --- a/lib/libtags/id3v2.c +++ b/lib/libtags/id3v2.c @@ -68,6 +68,8 @@ v2cb(Tagctx *ctx, char *k, char *v) return 0; }else if(strcmp(k-1, "COM") == 0 || strcmp(k-1, "COMM") == 0){ txtcb(ctx, Tcomment, k-1, v); + }else if(strcmp(k, "POS") == 0){ + txtcb(ctx, Tdisc, k-1, v); }else if(strcmp(k, "XXX") == 0){ k = v; v += strlen(v) + 1; diff --git a/lib/libtags/tags.h b/lib/libtags/tags.h index d9da6c2e..b2aa2dfb 100644 --- a/lib/libtags/tags.h +++ b/lib/libtags/tags.h @@ -16,6 +16,7 @@ enum Ttitle, Tdate, /* "2014", "2015/02/01", but the year goes first */ Ttrack, /* "1", "01", "1/4", but the track number goes first */ + Tdisc, Talbumgain, Talbumpeak, Ttrackgain, diff --git a/lib/libtags/vorbis.c b/lib/libtags/vorbis.c index bea70aaf..d6219a24 100644 --- a/lib/libtags/vorbis.c +++ b/lib/libtags/vorbis.c @@ -14,6 +14,7 @@ static const struct { {"artists", Tmultiartists}, {"albumartist", Talbumartist}, {"tracknumber", Ttrack}, + {"discnumber", Tdisc}, {"date", Tdate}, {"replaygain_track_peak", Ttrackpeak}, {"replaygain_track_gain", Ttrackgain}, diff --git a/lua/browser.lua b/lua/browser.lua index 2a024fc5..264db0c5 100644 --- a/lua/browser.lua +++ b/lua/browser.lua @@ -118,6 +118,7 @@ return screen:new { end widgets.InfiniteList(self.root, self.iterator, { + focus_first_item = true, get_icon = get_icon_func, callback = function(item) return function() diff --git a/lua/file_browser.lua b/lua/file_browser.lua index a85c2ba2..98261d55 100644 --- a/lua/file_browser.lua +++ b/lua/file_browser.lua @@ -59,6 +59,7 @@ return screen:new { end widgets.InfiniteList(self.root, self.iterator, { + focus_first_item = true, callback = function(item) return function() local is_dir = item:is_directory() diff --git a/lua/widgets.lua b/lua/widgets.lua index 5e18809b..0aac7705 100644 --- a/lua/widgets.lua +++ b/lua/widgets.lua @@ -306,10 +306,11 @@ function widgets.InfiniteList(parent, iterator, opts) fwd_iterator:prev() end - local function add_item(item, index) + local function add_item(item, index, item_opts) if not item then return end + item_opts = item_opts or {} local this_item = index local add_to_top = false if this_item < first_index then @@ -325,6 +326,9 @@ function widgets.InfiniteList(parent, iterator, opts) if add_to_top then btn:move_to_index(0) end + if item_opts.focus then + btn:focus() + end -- opts.callback should take an item and return a function matching the arg of onClicked if opts.callback then btn:onClicked(opts.callback(item)) @@ -361,7 +365,7 @@ function widgets.InfiniteList(parent, iterator, opts) if not val then break end - add_item(val, idx) + add_item(val, idx, { focus = (opts.focus_first_item and idx == 0) }) end return infinite_list diff --git a/src/drivers/nvs.cpp b/src/drivers/nvs.cpp index 6c916e60..6f0d874e 100644 --- a/src/drivers/nvs.cpp +++ b/src/drivers/nvs.cpp @@ -172,9 +172,7 @@ auto Setting>::store( } template <> -auto Setting::store( - nvs_handle_t nvs, - std::string v) -> void { +auto Setting::store(nvs_handle_t nvs, std::string v) -> void { cppbor::Tstr cbor{v}; auto encoded = cbor.encode(); nvs_set_blob(nvs, name_, encoded.data(), encoded.size()); @@ -295,6 +293,7 @@ auto NvsStorage::Read() -> void { display_rows_.read(handle_); haptic_motor_type_.read(handle_); lra_calibration_.read(handle_); + fast_charge_.read(handle_); brightness_.read(handle_); sensitivity_.read(handle_); amp_max_vol_.read(handle_); @@ -317,6 +316,7 @@ auto NvsStorage::Write() -> bool { display_rows_.write(handle_); haptic_motor_type_.write(handle_); lra_calibration_.write(handle_); + fast_charge_.write(handle_); brightness_.write(handle_); sensitivity_.write(handle_); amp_max_vol_.write(handle_); diff --git a/src/tangara/database/tag_parser.cpp b/src/tangara/database/tag_parser.cpp index 59bd8f13..6c95d496 100644 --- a/src/tangara/database/tag_parser.cpp +++ b/src/tangara/database/tag_parser.cpp @@ -41,6 +41,8 @@ static auto convert_tag(int tag) -> std::optional { return Tag::kAlbum; case Ttrack: return Tag::kTrack; + case Tdisc: + return Tag::kDisc; case Tgenre: return Tag::kGenres; default: