core/tags/library: Replace std::string with gchar *
Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
parent
5cc4efb6ac
commit
62fd782710
|
@ -165,7 +165,7 @@ struct library *collection :: add(const std::string &dir)
|
||||||
if (g_file_test(dir.c_str(), G_FILE_TEST_IS_DIR) == false)
|
if (g_file_test(dir.c_str(), G_FILE_TEST_IS_DIR) == false)
|
||||||
return library;
|
return library;
|
||||||
|
|
||||||
library = library_find(dir);
|
library = library_find(dir.c_str());
|
||||||
if (library)
|
if (library)
|
||||||
update(library);
|
update(library);
|
||||||
return library;
|
return library;
|
||||||
|
|
|
@ -6,15 +6,21 @@
|
||||||
|
|
||||||
static struct database library_db;
|
static struct database library_db;
|
||||||
|
|
||||||
static struct db_entry *library_alloc(const gchar *path)
|
static struct library *__library_alloc(gchar *path, bool enabled)
|
||||||
{
|
{
|
||||||
struct library *library = new struct library;
|
struct library *library = new struct library;
|
||||||
|
|
||||||
dbe_init(&library->li_dbe, library);
|
dbe_init(&library->li_dbe, library);
|
||||||
library->li_size = 0;
|
library->li_size = 0;
|
||||||
library->li_enabled = true;
|
library->li_enabled = enabled;
|
||||||
library->li_path = path;
|
library->li_path = path;
|
||||||
return &library->li_dbe;
|
|
||||||
|
return library;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct db_entry *library_alloc(const gchar *path)
|
||||||
|
{
|
||||||
|
return &__library_alloc(g_strdup(path), true)->li_dbe;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void library_free(struct db_entry *dbe)
|
static void library_free(struct db_entry *dbe)
|
||||||
|
@ -24,32 +30,22 @@ static void library_free(struct db_entry *dbe)
|
||||||
|
|
||||||
static gchar *library_key(struct db_entry *dbe)
|
static gchar *library_key(struct db_entry *dbe)
|
||||||
{
|
{
|
||||||
return g_strdup_printf(LIBRARY(dbe)->li_path.c_str());
|
return LIBRARY(dbe)->li_path;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct db_entry *library_read(struct file *file)
|
static struct db_entry *library_read(struct file *file)
|
||||||
{
|
{
|
||||||
struct library *library = new struct library;
|
|
||||||
gchar *path;
|
|
||||||
int enabled;
|
int enabled;
|
||||||
|
gchar *path;
|
||||||
|
|
||||||
dbe_init(&library->li_dbe, library);
|
file_readf(file, "%d %m[^\n]", &enabled, &path);
|
||||||
library->li_size = 0;
|
return &__library_alloc(path, enabled)->li_dbe;
|
||||||
|
|
||||||
file_readf(file, "%d\n", &enabled);
|
|
||||||
library->li_enabled = enabled;
|
|
||||||
|
|
||||||
path = file_readl(file);
|
|
||||||
library->li_path = path;
|
|
||||||
|
|
||||||
g_free(path);
|
|
||||||
return &library->li_dbe;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void library_write(struct file *file, struct db_entry *dbe)
|
static void library_write(struct file *file, struct db_entry *dbe)
|
||||||
{
|
{
|
||||||
file_writef(file, "%d %s", LIBRARY(dbe)->li_enabled,
|
file_writef(file, "%d %s", LIBRARY(dbe)->li_enabled,
|
||||||
LIBRARY(dbe)->li_path.c_str());
|
LIBRARY(dbe)->li_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -79,9 +75,9 @@ const struct database *library_db_get()
|
||||||
return &library_db;
|
return &library_db;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct library *library_find(const std::string &path)
|
struct library *library_find(const gchar *path)
|
||||||
{
|
{
|
||||||
return LIBRARY(db_find(&library_db, path.c_str()));
|
return LIBRARY(db_find(&library_db, path));
|
||||||
}
|
}
|
||||||
|
|
||||||
struct library *library_get(const unsigned int index)
|
struct library *library_get(const unsigned int index)
|
||||||
|
@ -101,9 +97,9 @@ void library_set_enabled(struct library *library, bool enabled)
|
||||||
db_save(&library_db);
|
db_save(&library_db);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string library_file(struct library *library, const std::string &path)
|
gchar *library_file(struct library *library, const gchar *path)
|
||||||
{
|
{
|
||||||
return library->li_path + "/" + path;
|
return g_strdup_printf("%s/%s", library->li_path, path);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_TESTING
|
#ifdef CONFIG_TESTING
|
||||||
|
|
|
@ -33,15 +33,14 @@ struct db_entry *track_alloc(const gchar *key)
|
||||||
unsigned int lib_id;
|
unsigned int lib_id;
|
||||||
TagLib_File *file;
|
TagLib_File *file;
|
||||||
TagLib_Tag *tag;
|
TagLib_Tag *tag;
|
||||||
std::string full;
|
char *fullpath, *path, *lower;
|
||||||
char *path, *lower;
|
|
||||||
|
|
||||||
sscanf(key, "%u/%m[^\n]", &lib_id, &path);
|
sscanf(key, "%u/%m[^\n]", &lib_id, &path);
|
||||||
library = library_get(lib_id);
|
library = library_get(lib_id);
|
||||||
full = library_file(library, path);
|
fullpath = library_file(library, path);
|
||||||
file = taglib_file_new(full.c_str());
|
file = taglib_file_new(fullpath);
|
||||||
if (!file || !taglib_file_is_valid(file)) {
|
if (!file || !taglib_file_is_valid(file)) {
|
||||||
printf("WARNING: Could not read tags for: %s\n", full.c_str());
|
printf("WARNING: Could not read tags for: %s\n", fullpath);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -68,6 +67,7 @@ struct db_entry *track_alloc(const gchar *key)
|
||||||
taglib_file_free(file);
|
taglib_file_free(file);
|
||||||
g_free(lower);
|
g_free(lower);
|
||||||
out:
|
out:
|
||||||
|
g_free(fullpath);
|
||||||
g_free(path);
|
g_free(path);
|
||||||
return track;
|
return track;
|
||||||
}
|
}
|
||||||
|
@ -174,7 +174,7 @@ const struct database *track_db_get()
|
||||||
|
|
||||||
struct track *track_add(struct library *library, const std::string &filepath)
|
struct track *track_add(struct library *library, const std::string &filepath)
|
||||||
{
|
{
|
||||||
std::string path = filepath.substr(library->li_path.size() + 1);
|
std::string path = filepath.substr(strlen(library->li_path) + 1);
|
||||||
gchar *key = __track_key(library, path);
|
gchar *key = __track_key(library, path);
|
||||||
struct track *track = NULL;
|
struct track *track = NULL;
|
||||||
|
|
||||||
|
@ -213,9 +213,14 @@ int track_compare(struct track *lhs, struct track *rhs)
|
||||||
|
|
||||||
const std::string track_path(struct track *track)
|
const std::string track_path(struct track *track)
|
||||||
{
|
{
|
||||||
if (track->tr_library)
|
std::string ret = "";
|
||||||
return library_file(track->tr_library, track->tr_path);
|
|
||||||
return "";
|
if (track->tr_library) {
|
||||||
|
gchar *g_ret = library_file(track->tr_library, track->tr_path.c_str());
|
||||||
|
ret = g_ret;
|
||||||
|
g_free(g_ret);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void track_played(struct track *track)
|
void track_played(struct track *track)
|
||||||
|
|
|
@ -23,7 +23,7 @@ extern "C" {
|
||||||
struct library {
|
struct library {
|
||||||
unsigned int li_size; /* This library's track count. */
|
unsigned int li_size; /* This library's track count. */
|
||||||
bool li_enabled;/* True if this library is enabled. */
|
bool li_enabled;/* True if this library is enabled. */
|
||||||
std::string li_path; /* This library's root path. */
|
gchar *li_path; /* This library's root path. */
|
||||||
struct db_entry li_dbe;
|
struct db_entry li_dbe;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ void library_db_deinit();
|
||||||
const struct database *library_db_get();
|
const struct database *library_db_get();
|
||||||
|
|
||||||
/* Called to find a library tag by library path. */
|
/* Called to find a library tag by library path. */
|
||||||
struct library *library_find(const std::string &);
|
struct library *library_find(const gchar *);
|
||||||
|
|
||||||
/* Called to get a library tag with a specific index. */
|
/* Called to get a library tag with a specific index. */
|
||||||
struct library *library_get(const unsigned int);
|
struct library *library_get(const unsigned int);
|
||||||
|
@ -51,8 +51,11 @@ void library_remove(struct library *);
|
||||||
/* Called to configure if the library tag is enabled. */
|
/* Called to configure if the library tag is enabled. */
|
||||||
void library_set_enabled(struct library *, bool);
|
void library_set_enabled(struct library *, bool);
|
||||||
|
|
||||||
/* Called to find the full path of files under the library directory. */
|
/*
|
||||||
std::string library_file(struct library *, const std::string &);
|
* Called to find the full path of files under the library directory.
|
||||||
|
* This function allocates a new string that MUST be freed with g_free().
|
||||||
|
*/
|
||||||
|
gchar *library_file(struct library *, const gchar *);
|
||||||
|
|
||||||
#ifdef CONFIG_TESTING
|
#ifdef CONFIG_TESTING
|
||||||
const struct db_ops *test_library_ops();
|
const struct db_ops *test_library_ops();
|
||||||
|
|
|
@ -9,7 +9,7 @@ static void test_verify_zelda(struct library *library)
|
||||||
const struct db_ops *library_ops = test_library_ops();
|
const struct db_ops *library_ops = test_library_ops();
|
||||||
test_equal(library->li_enabled, true);
|
test_equal(library->li_enabled, true);
|
||||||
test_equal(library->li_size, 0);
|
test_equal(library->li_size, 0);
|
||||||
test_str_equal(library_ops->dbe_key(&library->li_dbe), "/home/Zelda/Music");
|
test_equal(library_ops->dbe_key(&library->li_dbe), "/home/Zelda/Music");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_verify_link(struct library *library)
|
static void test_verify_link(struct library *library)
|
||||||
|
@ -17,7 +17,7 @@ static void test_verify_link(struct library *library)
|
||||||
const struct db_ops *library_ops = test_library_ops();
|
const struct db_ops *library_ops = test_library_ops();
|
||||||
test_equal(library->li_enabled, false);
|
test_equal(library->li_enabled, false);
|
||||||
test_equal(library->li_size, 0);
|
test_equal(library->li_size, 0);
|
||||||
test_str_equal(library_ops->dbe_key(&library->li_dbe), "/home/Link/Music");
|
test_equal(library_ops->dbe_key(&library->li_dbe), "/home/Link/Music");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_library()
|
static void test_library()
|
||||||
|
@ -46,14 +46,20 @@ static void test_library()
|
||||||
file_open(&f, OPEN_READ);
|
file_open(&f, OPEN_READ);
|
||||||
library = LIBRARY(library_ops->dbe_read(&f));
|
library = LIBRARY(library_ops->dbe_read(&f));
|
||||||
test_verify_link(library);
|
test_verify_link(library);
|
||||||
test_equal(library_file(library, "navi.mp3"), "/home/Link/Music/navi.mp3");
|
test_str_equal(library_file(library, "navi.mp3"),
|
||||||
|
"/home/Link/Music/navi.mp3");
|
||||||
|
g_free(library->li_path);
|
||||||
library_ops->dbe_free(&library->li_dbe);
|
library_ops->dbe_free(&library->li_dbe);
|
||||||
|
|
||||||
library = LIBRARY(library_ops->dbe_read(&f));
|
library = LIBRARY(library_ops->dbe_read(&f));
|
||||||
file_close(&f);
|
file_close(&f);
|
||||||
test_verify_zelda(library);
|
test_verify_zelda(library);
|
||||||
test_equal(library_file(library, "impa.ogg"), "/home/Zelda/Music/impa.ogg");
|
test_str_equal(library_file(library, "impa.ogg"),
|
||||||
|
"/home/Zelda/Music/impa.ogg");
|
||||||
|
|
||||||
|
g_free(link->li_path);
|
||||||
|
g_free(zelda->li_path);
|
||||||
|
g_free(library->li_path);
|
||||||
library_ops->dbe_free(&link->li_dbe);
|
library_ops->dbe_free(&link->li_dbe);
|
||||||
library_ops->dbe_free(&zelda->li_dbe);
|
library_ops->dbe_free(&zelda->li_dbe);
|
||||||
library_ops->dbe_free(&library->li_dbe);
|
library_ops->dbe_free(&library->li_dbe);
|
||||||
|
|
Loading…
Reference in New Issue