Genre: Add functions for looking up or creating Genre tags
The genre_db should really be controlled from within the Genre tag, so this patch adds functions to find or create Genre tags to the tags namespace. Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
parent
7d3e9a3d28
commit
8545837672
|
@ -12,7 +12,6 @@
|
||||||
#include <taglib/tag.h>
|
#include <taglib/tag.h>
|
||||||
#include <taglib/fileref.h>
|
#include <taglib/fileref.h>
|
||||||
|
|
||||||
Database<Genre> genre_db("genre.db", true);
|
|
||||||
Database<Library> library_db("library.db", true);
|
Database<Library> library_db("library.db", true);
|
||||||
Database<Track> track_db("track.db", false);
|
Database<Track> track_db("track.db", false);
|
||||||
|
|
||||||
|
@ -58,7 +57,7 @@ void Track :: read(File &f)
|
||||||
library = library_db.at(library_id);
|
library = library_db.at(library_id);
|
||||||
artist = tags :: get_artist(artist_id);
|
artist = tags :: get_artist(artist_id);
|
||||||
album = tags :: get_album(album_id);
|
album = tags :: get_album(album_id);
|
||||||
genre = genre_db.at(genre_id);
|
genre = tags :: get_genre(genre_id);
|
||||||
|
|
||||||
title_lower = filter :: add(title, index());
|
title_lower = filter :: add(title, index());
|
||||||
filter :: add(artist->name(), index());
|
filter :: add(artist->name(), index());
|
||||||
|
@ -120,7 +119,7 @@ bool Track :: tag()
|
||||||
|
|
||||||
artist = tags :: get_artist(format_tag(tag->artist()));
|
artist = tags :: get_artist(format_tag(tag->artist()));
|
||||||
album = tags :: get_album(format_tag(tag->album()), tag->year());
|
album = tags :: get_album(format_tag(tag->album()), tag->year());
|
||||||
genre = find_or_insert(Genre(format_tag(tag->genre())), genre_db);
|
genre = tags :: get_genre(format_tag(tag->genre()));
|
||||||
track = tag->track();
|
track = tag->track();
|
||||||
length = audio->length();
|
length = audio->length();
|
||||||
title = format_tag(tag->title());
|
title = format_tag(tag->title());
|
||||||
|
@ -219,7 +218,6 @@ int Track :: less_than(Track *rhs, sort_t field)
|
||||||
void tagdb :: init()
|
void tagdb :: init()
|
||||||
{
|
{
|
||||||
tags :: init();
|
tags :: init();
|
||||||
genre_db.load();
|
|
||||||
library_db.load();
|
library_db.load();
|
||||||
track_db.load();
|
track_db.load();
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,9 +4,32 @@
|
||||||
*/
|
*/
|
||||||
#include <core/tags/genre.h>
|
#include <core/tags/genre.h>
|
||||||
|
|
||||||
|
|
||||||
|
static Database<Genre> genre_db("genre.db", true);
|
||||||
|
|
||||||
|
|
||||||
Genre :: Genre() : GenericTag() {}
|
Genre :: Genre() : GenericTag() {}
|
||||||
|
|
||||||
Genre :: Genre(const std::string &name)
|
Genre :: Genre(const std::string &name)
|
||||||
: GenericTag(name)
|
: GenericTag(name)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void tags :: init_genre_db()
|
||||||
|
{
|
||||||
|
genre_db.load();
|
||||||
|
}
|
||||||
|
|
||||||
|
Genre *tags :: get_genre(const std::string &name)
|
||||||
|
{
|
||||||
|
Genre *ret = genre_db.find(name);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
return genre_db.insert(Genre(name));
|
||||||
|
}
|
||||||
|
|
||||||
|
Genre *tags :: get_genre(const unsigned int index)
|
||||||
|
{
|
||||||
|
return genre_db.at(index);
|
||||||
|
}
|
||||||
|
|
|
@ -4,10 +4,12 @@
|
||||||
*/
|
*/
|
||||||
#include <core/tags/album.h>
|
#include <core/tags/album.h>
|
||||||
#include <core/tags/artist.h>
|
#include <core/tags/artist.h>
|
||||||
|
#include <core/tags/genre.h>
|
||||||
#include <core/tags/tags.h>
|
#include <core/tags/tags.h>
|
||||||
|
|
||||||
void tags :: init()
|
void tags :: init()
|
||||||
{
|
{
|
||||||
tags :: init_album_db();
|
tags :: init_album_db();
|
||||||
tags :: init_artist_db();
|
tags :: init_artist_db();
|
||||||
|
tags :: init_genre_db();
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,4 +23,30 @@ public:
|
||||||
Genre(const std::string &);
|
Genre(const std::string &);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
namespace tags
|
||||||
|
{
|
||||||
|
|
||||||
|
/** Called to read the genre_db from disk. */
|
||||||
|
void init_genre_db();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called to look up a Genre tag by name. If no existing
|
||||||
|
* tag is found a new one will be created and returned to
|
||||||
|
* the caller.
|
||||||
|
*
|
||||||
|
* @param name The name of the genre.
|
||||||
|
* @return A matching Genre tag.
|
||||||
|
*/
|
||||||
|
Genre *get_genre(const std::string &);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called to look up a Genre tag by tag index.
|
||||||
|
*
|
||||||
|
* @param index The index of the Genre tag.
|
||||||
|
* @return A matching Genre tag or NULL.
|
||||||
|
*/
|
||||||
|
Genre *get_genre(const unsigned int);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* OCARINA_CORE_TAGS_GENRE_H */
|
#endif /* OCARINA_CORE_TAGS_GENRE_H */
|
||||||
|
|
|
@ -18,8 +18,26 @@ static void test_artist_tag()
|
||||||
test_equal(genre.primary_key(), (std::string)"Video Game Music");
|
test_equal(genre.primary_key(), (std::string)"Video Game Music");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_genere_tag_lookup()
|
||||||
|
{
|
||||||
|
Database<Genre> genre_db("genre.db", false);
|
||||||
|
Genre *genre = tags :: get_genre("Video Game Music");
|
||||||
|
|
||||||
|
test_equal(genre->name(), (std::string)"Video Game Music");
|
||||||
|
test_equal(genre->lowercase(), (std::string)"video game music");
|
||||||
|
test_equal(genre->primary_key(), (std::string)"Video Game Music");
|
||||||
|
|
||||||
|
test_equal(tags :: get_genre("Video Game Music"), genre);
|
||||||
|
test_equal(tags :: get_genre(0), genre);
|
||||||
|
test_equal(tags :: get_genre(1), (Genre *)NULL);
|
||||||
|
|
||||||
|
genre_db.load();
|
||||||
|
test_equal(genre_db.size(), (unsigned)1);
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
run_test("Genre Tag Test", test_artist_tag);
|
run_test("Genre Tag Test", test_artist_tag);
|
||||||
|
run_test("Genre Tag Lookup Test", test_genere_tag_lookup);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue