From 5d97c84d104a2d1d7998b57bbdf9ad5d8267816f Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Sat, 22 Mar 2014 23:02:04 -0400 Subject: [PATCH] tagdb: Begin the Track class I properly initialize variables, and I created supporting databases that will be used to look up artist, album, genre and library information. Signed-off-by: Anna Schumaker --- DESIGN | 4 +-- include/tags.h | 51 ++++++++++++++++++++++++++++++++++++ lib/tags.cpp | 63 +++++++++++++++++++++++++++++++++++++++++++++ tests/Music/1.ogg | Bin 0 -> 4146 bytes tests/src/tags.cpp | 30 ++++++++++++++++++++- tests/tag_db | 2 ++ 6 files changed, 147 insertions(+), 3 deletions(-) create mode 100644 tests/Music/1.ogg diff --git a/DESIGN b/DESIGN index 7d813719..8122a01c 100644 --- a/DESIGN +++ b/DESIGN @@ -796,14 +796,14 @@ Track Tag: std :: string length_str; Track(); - Track(Library *, const std::string &); + Track(const std::string &, Library *); const std::string primary_key(); void read(File &); void write(File &); void tag(); const std::string path(); - bool less_than(Track *rhs, sort_t field); + bool less_than(Track *, sort_t); }; - File Format: diff --git a/include/tags.h b/include/tags.h index 1aba8396..c9175eee 100644 --- a/include/tags.h +++ b/include/tags.h @@ -7,6 +7,19 @@ #include +enum sort_t { + SORT_ARTIST, + SORT_ALBUM, + SORT_COUNT, + SORT_GENRE, + SORT_LENGTH, + SORT_PLAYED, + SORT_TITLE, + SORT_TRACK, + SORT_YEAR, +}; + + class Artist : public DatabaseEntry { public: std::string name; @@ -60,4 +73,42 @@ public: void write(File &); }; + +class Track : public DatabaseEntry { +public: + Library *library; + Artist *artist; + Album *album; + Genre *genre; + + unsigned int track; + unsigned int length; + unsigned int play_count; + unsigned int last_year; + unsigned int last_month; + unsigned int last_day; + + std :: string title; + std :: string title_lower; + std :: string filepath; + std :: string length_str; + + Track(); + Track(const std::string &, Library *); + const std::string primary_key(); + void read(File &); + void write(File &); + + void tag(); + const std::string path(); + bool less_than(Track *, sort_t); +}; + + +namespace tagdb { + + Library *add_library(const std::string &); + +} + #endif /* OCARINA_TAGS_H */ diff --git a/lib/tags.cpp b/lib/tags.cpp index b80b3f6d..c5d43711 100644 --- a/lib/tags.cpp +++ b/lib/tags.cpp @@ -8,6 +8,12 @@ #include +Database artist_db("artist.db", true); +Database album_db("album.db", true); +Database genre_db("genre.db", true); +Database library_db("library.db", true); + + /** * * Artist tag @@ -135,3 +141,60 @@ void Library :: write(File &f) { f << enabled << " " << root_path; } + + + +/** + * + * Track tag + * + */ + +Track :: Track() {} + +Track :: Track(const std::string &f, Library *l) + : library(l), play_count(0), last_year(0), last_month(0), last_day(0), + filepath(f.substr(l->root_path.size() + 1)) +{ +} + +const std::string Track :: primary_key() +{ + return path(); +} + +void Track :: read(File &f) +{ +} + +void Track :: write(File &f) +{ +} + +void Track :: tag() +{ +} + +const std::string Track :: path() +{ + return library->root_path + "/" + filepath; +} + +bool Track :: less_than(Track *rhs, sort_t field) +{ + return false; +} + + + +/** + * + * Tagdb functions + * + */ + +Library *tagdb :: add_library(const std::string &filepath) +{ + Database::iterator it = library_db.insert(Library(filepath)); + return &(*it); +} diff --git a/tests/Music/1.ogg b/tests/Music/1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..b869165de0c947d841019a3a1d094276ba720af7 GIT binary patch literal 4146 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 literal 0 HcmV?d00001 diff --git a/tests/src/tags.cpp b/tests/src/tags.cpp index e330a6d2..9dfcf266 100644 --- a/tests/src/tags.cpp +++ b/tests/src/tags.cpp @@ -42,6 +42,7 @@ void load_tag(const std::string &file, T &tag) f.close(); } + void artist_test_tags(Artist &artist) { test_results(artist.name == "Artist Name", __LINE__); @@ -59,6 +60,7 @@ void artist_test() artist_test_tags(artist2); } + void album_test_tags(Album &album) { test_results(album.name == "Album Name", __LINE__); @@ -77,6 +79,7 @@ void album_test() album_test_tags(album2); } + void genre_test_tags(Genre &genre) { test_results(genre.name == "Genre Name", __LINE__); @@ -94,6 +97,7 @@ void genre_test() genre_test_tags(genre2); } + void library_test_tags(Library &library) { test_results(library.root_path == "/home/user/Music", __LINE__); @@ -113,11 +117,32 @@ void library_test() library_test_tags(library2); } + +void track_test_tags(Track &track) +{ + test_results(track.filepath == "1.ogg", __LINE__); + test_results(track.path() == "Music/1.ogg", __LINE__); + test_results(track.primary_key() == "Music/1.ogg", __LINE__); + test_results(track.play_count == 0, __LINE__); + test_results(track.last_year == 0, __LINE__); + test_results(track.last_month == 0, __LINE__); + test_results(track.last_day == 0, __LINE__); +} + +void track_test() +{ + Library *library = tagdb :: add_library("Music"); + Track track("Music/1.ogg", library); + + track_test_tags(track); +} + + int main(int argc, char **argv) { char c; - while ((c = getopt(argc, argv, "aAgl")) != -1) { + while ((c = getopt(argc, argv, "aAglt")) != -1) { switch (c) { case 'a': artist_test(); @@ -131,6 +156,9 @@ int main(int argc, char **argv) case 'l': library_test(); break; + case 't': + track_test(); + break; } } diff --git a/tests/tag_db b/tests/tag_db index 007945b9..ffe5cd54 100755 --- a/tests/tag_db +++ b/tests/tag_db @@ -16,3 +16,5 @@ echo test_tag "Genre" "-g" echo test_tag "Library" "-l" +echo +test_tag "Track" "-t"