From faddb229fcf1417dd283ae43fb26fbf5b3ceaf19 Mon Sep 17 00:00:00 2001 From: jacqueline Date: Tue, 24 Sep 2024 15:24:16 +1000 Subject: Record play_count in TrackData, incrementing it when tracks finish --- src/tangara/database/records.cpp | 5 +++++ src/tangara/database/track.cpp | 1 + src/tangara/database/track.hpp | 5 ++++- 3 files changed, 10 insertions(+), 1 deletion(-) (limited to 'src/tangara/database') diff --git a/src/tangara/database/records.cpp b/src/tangara/database/records.cpp index b93ed149..addcc13d 100644 --- a/src/tangara/database/records.cpp +++ b/src/tangara/database/records.cpp @@ -95,6 +95,7 @@ auto EncodeDataValue(const TrackData& track) -> std::string { tag_hashes, cppbor::Uint{track.last_position}, cppbor::Uint{static_cast(track.type)}, + cppbor::Uint{track.play_count}, }; return val.toString(); } @@ -147,6 +148,10 @@ auto ParseDataValue(const leveldb::Slice& slice) -> std::shared_ptr { } } + if (vals->size() >= 10 && vals->get(9)->type() == cppbor::UINT) { + res->play_count = vals->get(9)->asUint()->unsignedValue(); + } + return res; } diff --git a/src/tangara/database/track.cpp b/src/tangara/database/track.cpp index 51d50a38..49babb6a 100644 --- a/src/tangara/database/track.cpp +++ b/src/tangara/database/track.cpp @@ -302,6 +302,7 @@ auto database::TrackData::clone() const -> std::shared_ptr { data->is_tombstoned = is_tombstoned; data->modified_at = modified_at; data->last_position = last_position; + data->play_count = play_count; data->type = type; return data; } diff --git a/src/tangara/database/track.hpp b/src/tangara/database/track.hpp index 71f40910..65c5cfec 100644 --- a/src/tangara/database/track.hpp +++ b/src/tangara/database/track.hpp @@ -177,7 +177,9 @@ struct TrackData { individual_tag_hashes(&memory::kSpiRamResource), is_tombstoned(false), modified_at(), - last_position(0) {} + last_position(0), + play_count(0), + type(MediaType::kUnknown) {} TrackId id; std::pmr::string filepath; @@ -186,6 +188,7 @@ struct TrackData { bool is_tombstoned; std::pair modified_at; uint32_t last_position; + uint32_t play_count; MediaType type; TrackData(const TrackData&& other) = delete; -- cgit v1.2.3