diff options
| author | jacqueline <me@jacqueline.id.au> | 2024-09-19 14:02:04 +1000 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2024-09-19 16:32:11 +1000 |
| commit | ade5e4bc08e1c9afb18da2d8b32761a1dd567c6c (patch) | |
| tree | 5f8c12f46cc7ee76f31dca2975d35cf1d1fe7d29 /src | |
| parent | ea9c7a0498dfbcf59614de87a51a26229fdfce5b (diff) | |
| download | tangara-fw-ade5e4bc08e1c9afb18da2d8b32761a1dd567c6c.tar.gz | |
Encode and decode MediaType in TrackData
Diffstat (limited to 'src')
| -rw-r--r-- | src/tangara/database/records.cpp | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/src/tangara/database/records.cpp b/src/tangara/database/records.cpp index 012cda64..b93ed149 100644 --- a/src/tangara/database/records.cpp +++ b/src/tangara/database/records.cpp @@ -94,6 +94,7 @@ auto EncodeDataValue(const TrackData& track) -> std::string { cppbor::Uint{track.modified_at.second}, tag_hashes, cppbor::Uint{track.last_position}, + cppbor::Uint{static_cast<unsigned int>(track.type)}, }; return val.toString(); } @@ -105,13 +106,13 @@ auto ParseDataValue(const leveldb::Slice& slice) -> std::shared_ptr<TrackData> { return nullptr; } auto vals = item->asArray(); - if (vals->size() != 8 || vals->get(0)->type() != cppbor::UINT || + if (vals->size() < 8 || vals->get(0)->type() != cppbor::UINT || vals->get(1)->type() != cppbor::TSTR || vals->get(2)->type() != cppbor::UINT || vals->get(3)->type() != cppbor::SIMPLE || vals->get(4)->type() != cppbor::UINT || vals->get(5)->type() != cppbor::UINT || - vals->get(6)->type() != cppbor::MAP || + vals->get(6)->type() != cppbor::MAP || vals->get(7)->type() != cppbor::UINT) { return {}; } @@ -132,6 +133,20 @@ auto ParseDataValue(const leveldb::Slice& slice) -> std::shared_ptr<TrackData> { res->last_position = vals->get(7)->asUint()->unsignedValue(); + if (vals->size() >= 9 && vals->get(8)->type() == cppbor::UINT) { + auto val = vals->get(8)->asUint()->unsignedValue(); + switch (val) { + case 1: + case 2: + case 3: + res->type = static_cast<MediaType>(val); + break; + case 0: + default: + res->type = MediaType::kUnknown; + } + } + return res; } |
