db_plugin: add method get_song()
New db_get_song() implementation.
This commit is contained in:
parent
b4430839a3
commit
2fe1b5034d
@ -104,8 +104,7 @@ db_get_song(const char *file)
|
|||||||
if (db == NULL)
|
if (db == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
struct directory *music_root = db_get_root();
|
return db_plugin_get_song(db, file, NULL);
|
||||||
return directory_lookup_song(music_root, file);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "simple_db_plugin.h"
|
#include "simple_db_plugin.h"
|
||||||
#include "db_internal.h"
|
#include "db_internal.h"
|
||||||
|
#include "db_error.h"
|
||||||
#include "db_save.h"
|
#include "db_save.h"
|
||||||
#include "conf.h"
|
#include "conf.h"
|
||||||
#include "glib_compat.h"
|
#include "glib_compat.h"
|
||||||
@ -214,12 +215,28 @@ simple_db_close(struct db *_db)
|
|||||||
directory_free(db->root);
|
directory_free(db->root);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct song *
|
||||||
|
simple_db_get_song(struct db *_db, const char *uri, GError **error_r)
|
||||||
|
{
|
||||||
|
struct simple_db *db = (struct simple_db *)_db;
|
||||||
|
|
||||||
|
assert(db->root != NULL);
|
||||||
|
|
||||||
|
struct song *song = directory_lookup_song(db->root, uri);
|
||||||
|
if (song == NULL)
|
||||||
|
g_set_error(error_r, db_quark(), DB_NOT_FOUND,
|
||||||
|
"No such song: %s", uri);
|
||||||
|
|
||||||
|
return song;
|
||||||
|
}
|
||||||
|
|
||||||
const struct db_plugin simple_db_plugin = {
|
const struct db_plugin simple_db_plugin = {
|
||||||
.name = "simple",
|
.name = "simple",
|
||||||
.init = simple_db_init,
|
.init = simple_db_init,
|
||||||
.finish = simple_db_finish,
|
.finish = simple_db_finish,
|
||||||
.open = simple_db_open,
|
.open = simple_db_open,
|
||||||
.close = simple_db_close,
|
.close = simple_db_close,
|
||||||
|
.get_song = simple_db_get_song,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct directory *
|
struct directory *
|
||||||
|
@ -58,6 +58,15 @@ struct db_plugin {
|
|||||||
* Close the database, free allocated memory.
|
* Close the database, free allocated memory.
|
||||||
*/
|
*/
|
||||||
void (*close)(struct db *db);
|
void (*close)(struct db *db);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Look up a song (including tag data) in the database.
|
||||||
|
*
|
||||||
|
* @param the URI of the song within the music directory
|
||||||
|
* (UTF-8)
|
||||||
|
*/
|
||||||
|
struct song *(*get_song)(struct db *db, const char *uri,
|
||||||
|
GError **error_r);
|
||||||
};
|
};
|
||||||
|
|
||||||
G_GNUC_MALLOC
|
G_GNUC_MALLOC
|
||||||
@ -68,6 +77,7 @@ db_plugin_new(const struct db_plugin *plugin, const struct config_param *param,
|
|||||||
assert(plugin != NULL);
|
assert(plugin != NULL);
|
||||||
assert(plugin->init != NULL);
|
assert(plugin->init != NULL);
|
||||||
assert(plugin->finish != NULL);
|
assert(plugin->finish != NULL);
|
||||||
|
assert(plugin->get_song != NULL);
|
||||||
assert(error_r == NULL || *error_r == NULL);
|
assert(error_r == NULL || *error_r == NULL);
|
||||||
|
|
||||||
struct db *db = plugin->init(param, error_r);
|
struct db *db = plugin->init(param, error_r);
|
||||||
@ -108,4 +118,15 @@ db_plugin_close(struct db *db)
|
|||||||
db->plugin->close(db);
|
db->plugin->close(db);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline struct song *
|
||||||
|
db_plugin_get_song(struct db *db, const char *uri, GError **error_r)
|
||||||
|
{
|
||||||
|
assert(db != NULL);
|
||||||
|
assert(db->plugin != NULL);
|
||||||
|
assert(db->plugin->get_song != NULL);
|
||||||
|
assert(uri != NULL);
|
||||||
|
|
||||||
|
return db->plugin->get_song(db, uri, error_r);
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user