Encode and decode MediaType in TrackData

custom
jacqueline 7 months ago
parent ea9c7a0498
commit ade5e4bc08
  1. 17
      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,7 +106,7 @@ 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 ||
@ -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;
}

Loading…
Cancel
Save