return -2;
}
+static void
+_ctxt_init(struct lms_context *ctxt, const lms_t *lms, const struct db *db)
+{
+ ctxt->db = db->handle;
+}
+
static int _parser_del_int(lms_t *lms, int i);
static int
_parsers_setup(lms_t *lms, struct db *db)
{
+ struct lms_context ctxt;
int i;
+ _ctxt_init(&ctxt, lms, db);
+
for (i = 0; i < lms->n_parsers; i++) {
lms_plugin_t *plugin;
int r;
plugin = lms->parsers[i].plugin;
- r = plugin->setup(plugin, db->handle);
+ r = plugin->setup(plugin, &ctxt);
if (r != 0) {
fprintf(stderr, "ERROR: parser \"%s\" failed to setup: %d.\n",
plugin->name, r);
- plugin->finish(plugin, db->handle);
+ plugin->finish(plugin, &ctxt);
_parser_del_int(lms, i);
i--; /* cancel i++ */
}
static int
_parsers_start(lms_t *lms, struct db *db)
{
+ struct lms_context ctxt;
int i;
+ _ctxt_init(&ctxt, lms, db);
+
for (i = 0; i < lms->n_parsers; i++) {
lms_plugin_t *plugin;
int r;
plugin = lms->parsers[i].plugin;
- r = plugin->start(plugin, db->handle);
+ r = plugin->start(plugin, &ctxt);
if (r != 0) {
fprintf(stderr, "ERROR: parser \"%s\" failed to start: %d.\n",
plugin->name, r);
- plugin->finish(plugin, db->handle);
+ plugin->finish(plugin, &ctxt);
_parser_del_int(lms, i);
i--; /* cancel i++ */
}
static int
_parsers_finish(lms_t *lms, struct db *db)
{
+ struct lms_context ctxt;
int i;
+ _ctxt_init(&ctxt, lms, db);
+
for (i = 0; i < lms->n_parsers; i++) {
lms_plugin_t *plugin;
int r;
plugin = lms->parsers[i].plugin;
- r = plugin->finish(plugin, db->handle);
+ r = plugin->finish(plugin, &ctxt);
if (r != 0)
fprintf(stderr, "ERROR: parser \"%s\" failed to finish: %d.\n",
plugin->name, r);
static int
_parsers_run(lms_t *lms, struct db *db, void **parser_match, struct lms_file_info *finfo)
{
+ struct lms_context ctxt;
int i, failed, available;
+ _ctxt_init(&ctxt, lms, db);
+
failed = 0;
available = 0;
for (i = 0; i < lms->n_parsers; i++) {
int r;
available++;
- r = plugin->parse(plugin, db->handle, finfo, parser_match[i]);
+ r = plugin->parse(plugin, &ctxt, finfo, parser_match[i]);
if (r != 0)
failed++;
}
size_t size; /**< file size in bytes */
};
+ struct lms_context {
+ sqlite3 *db;
+ };
+
typedef void *(*lms_plugin_match_fn_t)(lms_plugin_t *p, const char *path, int len, int base);
- typedef int (*lms_plugin_parse_fn_t)(lms_plugin_t *p, sqlite3 *db, const struct lms_file_info *finfo, void *match);
+ typedef int (*lms_plugin_parse_fn_t)(lms_plugin_t *p, struct lms_context *ctxt, const struct lms_file_info *finfo, void *match);
typedef int (*lms_plugin_close_fn_t)(lms_plugin_t *p);
- typedef int (*lms_plugin_setup_fn_t)(lms_plugin_t *p, sqlite3 *db);
- typedef int (*lms_plugin_start_fn_t)(lms_plugin_t *p, sqlite3 *db);
- typedef int (*lms_plugin_finish_fn_t)(lms_plugin_t *p, sqlite3 *db);
+ typedef int (*lms_plugin_setup_fn_t)(lms_plugin_t *p, struct lms_context *ctxt);
+ typedef int (*lms_plugin_start_fn_t)(lms_plugin_t *p, struct lms_context *ctxt);
+ typedef int (*lms_plugin_finish_fn_t)(lms_plugin_t *p, struct lms_context *ctxt);
struct lms_plugin {
const char *name;
}
static int
-_parse(struct plugin *plugin, sqlite3 *db, const struct lms_file_info *finfo, void *match)
+_parse(struct plugin *plugin, struct lms_context *ctxt, const struct lms_file_info *finfo, void *match)
{
write(plugin->fd, finfo->path, finfo->path_len);
write(plugin->fd, "\n", 1);
}
static int
-_setup(struct plugin *plugin, sqlite3 *db)
+_setup(struct plugin *plugin, struct lms_context *ctxt)
{
return 0;
}
static int
-_start(struct plugin *plugin, sqlite3 *db)
+_start(struct plugin *plugin, struct lms_context *ctxt)
{
char logfile[PATH_MAX];
}
static int
-_finish(struct plugin *plugin, sqlite3 *db)
+_finish(struct plugin *plugin, struct lms_context *ctxt)
{
if (close(plugin->fd) != 0)
perror("close");
}
static int
-_parse(struct plugin *plugin, sqlite3 *db, const struct lms_file_info *finfo, void *match)
+_parse(struct plugin *plugin, struct lms_context *ctxt, const struct lms_file_info *finfo, void *match)
{
struct lms_audio_info info = {0};
ID3_Tag tag;
}
static int
-_setup(struct plugin *plugin, sqlite3 *db)
+_setup(struct plugin *plugin, struct lms_context *ctxt)
{
- plugin->audio_db = lms_db_audio_new(db);
+ plugin->audio_db = lms_db_audio_new(ctxt->db);
if (!plugin->audio_db)
return -1;
}
static int
-_start(struct plugin *plugin, sqlite3 *db)
+_start(struct plugin *plugin, struct lms_context *ctxt)
{
return lms_db_audio_start(plugin->audio_db);
}
static int
-_finish(struct plugin *plugin, sqlite3 *db)
+_finish(struct plugin *plugin, struct lms_context *ctxt)
{
if (plugin->audio_db)
return lms_db_audio_free(plugin->audio_db);
}
static int
-_parse(struct plugin *plugin, sqlite3 *db, const struct lms_file_info *finfo, void *match)
+_parse(struct plugin *plugin, struct lms_context *ctxt, const struct lms_file_info *finfo, void *match)
{
struct lms_image_info info = {0};
int fd, type, len, r;
}
static int
-_setup(struct plugin *plugin, sqlite3 *db)
+_setup(struct plugin *plugin, struct lms_context *ctxt)
{
- plugin->img_db = lms_db_image_new(db);
+ plugin->img_db = lms_db_image_new(ctxt->db);
if (!plugin->img_db)
return -1;
}
static int
-_start(struct plugin *plugin, sqlite3 *db)
+_start(struct plugin *plugin, struct lms_context *ctxt)
{
return lms_db_image_start(plugin->img_db);
}
static int
-_finish(struct plugin *plugin, sqlite3 *db)
+_finish(struct plugin *plugin, struct lms_context *ctxt)
{
if (plugin->img_db)
return lms_db_image_free(plugin->img_db);
}
static int
-_parse(struct plugin *plugin, sqlite3 *db, const struct lms_file_info *finfo, void *match)
+_parse(struct plugin *plugin, struct lms_context *ctxt, const struct lms_file_info *finfo, void *match)
{
struct lms_playlist_info info = {0};
int fd, r, ext_idx;
}
static int
-_setup(struct plugin *plugin, sqlite3 *db)
+_setup(struct plugin *plugin, struct lms_context *ctxt)
{
- plugin->playlist_db = lms_db_playlist_new(db);
+ plugin->playlist_db = lms_db_playlist_new(ctxt->db);
if (!plugin->playlist_db)
return -1;
}
static int
-_start(struct plugin *plugin, sqlite3 *db)
+_start(struct plugin *plugin, struct lms_context *ctxt)
{
return lms_db_playlist_start(plugin->playlist_db);
}
static int
-_finish(struct plugin *plugin, sqlite3 *db)
+_finish(struct plugin *plugin, struct lms_context *ctxt)
{
if (plugin->playlist_db)
return lms_db_playlist_free(plugin->playlist_db);
}
static int
-_parse(struct plugin *plugin, sqlite3 *db, const struct lms_file_info *finfo, void *match)
+_parse(struct plugin *plugin, struct lms_context *ctxt, const struct lms_file_info *finfo, void *match)
{
struct lms_playlist_info info = {0};
int fd, r, ext_idx;
}
static int
-_setup(struct plugin *plugin, sqlite3 *db)
+_setup(struct plugin *plugin, struct lms_context *ctxt)
{
- plugin->playlist_db = lms_db_playlist_new(db);
+ plugin->playlist_db = lms_db_playlist_new(ctxt->db);
if (!plugin->playlist_db)
return -1;
}
static int
-_start(struct plugin *plugin, sqlite3 *db)
+_start(struct plugin *plugin, struct lms_context *ctxt)
{
return lms_db_playlist_start(plugin->playlist_db);
}
static int
-_finish(struct plugin *plugin, sqlite3 *db)
+_finish(struct plugin *plugin, struct lms_context *ctxt)
{
if (plugin->playlist_db)
return lms_db_playlist_free(plugin->playlist_db);
}
static int
-_parse(struct plugin *plugin, sqlite3 *db, const struct lms_file_info *finfo, void *match)
+_parse(struct plugin *plugin, struct lms_context *ctxt, const struct lms_file_info *finfo, void *match)
{
struct lms_video_info info = {0};
int r, ext_idx;
}
static int
-_setup(struct plugin *plugin, sqlite3 *db)
+_setup(struct plugin *plugin, struct lms_context *ctxt)
{
- plugin->video_db = lms_db_video_new(db);
+ plugin->video_db = lms_db_video_new(ctxt->db);
if (!plugin->video_db)
return -1;
}
static int
-_start(struct plugin *plugin, sqlite3 *db)
+_start(struct plugin *plugin, struct lms_context *ctxt)
{
return lms_db_video_start(plugin->video_db);
}
static int
-_finish(struct plugin *plugin, sqlite3 *db)
+_finish(struct plugin *plugin, struct lms_context *ctxt)
{
if (plugin->video_db)
return lms_db_video_free(plugin->video_db);