summaryrefslogtreecommitdiff
path: root/src/database/include/track.hpp
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-09-28 08:29:55 +1000
committerjacqueline <me@jacqueline.id.au>2023-09-28 08:29:55 +1000
commitf09ba5ffd53bf7d28e0dc516c00a8f69ca7efae9 (patch)
treeaffce5567186d8944686afd824bf4ee4f7ee4d2d /src/database/include/track.hpp
parentf168bfab7698f28492c7693263525945a26cbcc8 (diff)
downloadtangara-fw-f09ba5ffd53bf7d28e0dc516c00a8f69ca7efae9.tar.gz
Use bindey for databinding instead of hand rolling ui updates
Diffstat (limited to 'src/database/include/track.hpp')
-rw-r--r--src/database/include/track.hpp43
1 files changed, 23 insertions, 20 deletions
diff --git a/src/database/include/track.hpp b/src/database/include/track.hpp
index 1c11ddea..3c7b20fa 100644
--- a/src/database/include/track.hpp
+++ b/src/database/include/track.hpp
@@ -61,12 +61,17 @@ enum class Tag {
*/
class TrackTags {
public:
- auto encoding() const -> Container { return encoding_; };
- auto encoding(Container e) -> void { encoding_ = e; };
-
TrackTags()
: encoding_(Container::kUnsupported), tags_(&memory::kSpiRamResource) {}
+ TrackTags(const TrackTags& other) = delete;
+ TrackTags& operator=(TrackTags& other) = delete;
+
+ bool operator==(const TrackTags&) const = default;
+
+ auto encoding() const -> Container { return encoding_; };
+ auto encoding(Container e) -> void { encoding_ = e; };
+
std::optional<int> channels;
std::optional<int> sample_rate;
std::optional<int> bits_per_sample;
@@ -85,10 +90,6 @@ class TrackTags {
*/
auto Hash() const -> uint64_t;
- bool operator==(const TrackTags&) const = default;
- TrackTags& operator=(const TrackTags&) = default;
- TrackTags(const TrackTags&) = default;
-
private:
Container encoding_;
std::pmr::unordered_map<Tag, std::pmr::string> tags_;
@@ -139,6 +140,11 @@ class TrackData {
play_count_(play_count),
is_tombstoned_(is_tombstoned) {}
+ TrackData(TrackData&& other) = delete;
+ TrackData& operator=(TrackData& other) = delete;
+
+ bool operator==(const TrackData&) const = default;
+
auto id() const -> TrackId { return id_; }
auto filepath() const -> std::pmr::string { return filepath_; }
auto play_count() const -> uint32_t { return play_count_; }
@@ -158,8 +164,6 @@ class TrackData {
* new location.
*/
auto Exhume(const std::pmr::string& new_path) const -> TrackData;
-
- bool operator==(const TrackData&) const = default;
};
/*
@@ -172,23 +176,22 @@ class TrackData {
*/
class Track {
public:
- Track(const TrackData& data, const TrackTags& tags)
+ Track(std::shared_ptr<TrackData>& data, std::shared_ptr<TrackTags> tags)
: data_(data), tags_(tags) {}
- Track(const Track& other) = default;
- auto data() const -> const TrackData& { return data_; }
- auto tags() const -> const TrackTags& { return tags_; }
-
- auto TitleOrFilename() const -> std::pmr::string;
+ Track(Track& other) = delete;
+ Track& operator=(Track& other) = delete;
bool operator==(const Track&) const = default;
- Track operator=(const Track& other) const { return Track(other); }
+
+ auto data() const -> const TrackData& { return *data_; }
+ auto tags() const -> const TrackTags& { return *tags_; }
+
+ auto TitleOrFilename() const -> std::pmr::string;
private:
- const TrackData data_;
- const TrackTags tags_;
+ std::shared_ptr<TrackData> data_;
+ std::shared_ptr<TrackTags> tags_;
};
-void swap(Track& first, Track& second);
-
} // namespace database