2014-11-09 10:18:09 -05:00
|
|
|
/**
|
|
|
|
* Copyright 2014 (c) Anna Schumaker.
|
|
|
|
*/
|
2015-10-23 09:04:23 -04:00
|
|
|
extern "C" {
|
|
|
|
#include <core/string.h>
|
|
|
|
}
|
2014-11-09 10:18:09 -05:00
|
|
|
#include <core/tags/genre.h>
|
|
|
|
|
2014-11-16 15:15:32 -05:00
|
|
|
|
2015-10-23 08:19:26 -04:00
|
|
|
static database<struct genre> genre_db;
|
2014-11-16 15:15:32 -05:00
|
|
|
|
2015-10-23 09:04:23 -04:00
|
|
|
genre :: genre() {}
|
2014-11-09 10:18:09 -05:00
|
|
|
|
2015-11-02 16:59:55 -05:00
|
|
|
static struct db_entry *genre_alloc(const gchar *name)
|
2014-11-09 10:18:09 -05:00
|
|
|
{
|
2015-11-02 16:59:55 -05:00
|
|
|
struct genre *genre = new struct genre;
|
|
|
|
gchar *lower = string_lowercase(name);
|
2015-10-23 09:04:23 -04:00
|
|
|
|
2015-11-02 16:59:55 -05:00
|
|
|
genre->ge_name = name;
|
|
|
|
genre->ge_lower = lower;
|
2015-10-23 09:04:23 -04:00
|
|
|
|
|
|
|
g_free(lower);
|
2015-11-02 16:59:55 -05:00
|
|
|
return genre;
|
2015-10-23 09:04:23 -04:00
|
|
|
}
|
|
|
|
|
2015-09-30 09:15:15 -04:00
|
|
|
static void genre_free(struct db_entry *dbe)
|
|
|
|
{
|
|
|
|
delete (struct genre *)dbe;
|
|
|
|
}
|
|
|
|
|
2015-10-23 09:04:23 -04:00
|
|
|
const std::string genre :: primary_key() const
|
|
|
|
{
|
|
|
|
return ge_name;
|
2014-11-09 10:18:09 -05:00
|
|
|
}
|
2014-11-16 15:15:32 -05:00
|
|
|
|
2015-09-22 09:24:19 -04:00
|
|
|
static struct db_entry *genre_read(struct file *file)
|
2015-10-23 09:04:23 -04:00
|
|
|
{
|
2015-09-22 09:24:19 -04:00
|
|
|
gchar *name = file_readl(file);
|
|
|
|
struct genre *genre = (struct genre *)genre_alloc(name);
|
2015-10-23 09:04:23 -04:00
|
|
|
g_free(name);
|
2015-09-22 09:24:19 -04:00
|
|
|
return genre;
|
2015-10-23 09:04:23 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
void genre :: write(file &file)
|
|
|
|
{
|
|
|
|
file_writef(&file, "%s", ge_name.c_str());
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2015-11-03 10:39:06 -05:00
|
|
|
static const struct db_ops genre_ops = {
|
2015-11-02 16:59:55 -05:00
|
|
|
genre_alloc,
|
2015-09-30 09:15:15 -04:00
|
|
|
genre_free,
|
2015-09-22 09:24:19 -04:00
|
|
|
genre_read,
|
2015-10-05 20:12:32 -04:00
|
|
|
NULL,
|
2015-11-03 10:39:06 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
|
2015-09-28 08:18:39 -04:00
|
|
|
void genre_db_init()
|
2014-11-16 15:15:32 -05:00
|
|
|
{
|
2015-11-03 10:39:06 -05:00
|
|
|
db_init(&genre_db, "genre.db", true, &genre_ops);
|
2015-09-17 08:12:25 -04:00
|
|
|
db_load(&genre_db);
|
2014-11-16 15:15:32 -05:00
|
|
|
}
|
|
|
|
|
2015-09-28 08:18:39 -04:00
|
|
|
void genre_db_deinit()
|
|
|
|
{
|
|
|
|
db_deinit(&genre_db);
|
|
|
|
}
|
|
|
|
|
2015-09-28 08:22:51 -04:00
|
|
|
struct genre *genre_find(const std::string &name)
|
2014-11-16 15:15:32 -05:00
|
|
|
{
|
2015-10-20 10:10:26 -04:00
|
|
|
return db_find(&genre_db, name.c_str());
|
2014-11-16 15:15:32 -05:00
|
|
|
}
|
|
|
|
|
2015-09-28 08:25:15 -04:00
|
|
|
struct genre *genre_get(const unsigned int index)
|
2014-11-16 15:15:32 -05:00
|
|
|
{
|
2015-10-20 08:19:47 -04:00
|
|
|
return db_at(&genre_db, index);
|
2014-11-16 15:15:32 -05:00
|
|
|
}
|
2015-10-23 09:04:23 -04:00
|
|
|
|
|
|
|
int genre_compare(struct genre *lhs, struct genre *rhs)
|
|
|
|
{
|
|
|
|
return string_compare(lhs->ge_lower.c_str(), rhs->ge_lower.c_str());
|
|
|
|
}
|
2015-11-03 10:39:06 -05:00
|
|
|
|
|
|
|
#ifdef CONFIG_TESTING
|
|
|
|
const struct db_ops *test_genre_ops() { return &genre_ops; }
|
|
|
|
#endif /* CONFIG_TESTING */
|