Commit 404fa899 authored by Max Kellermann's avatar Max Kellermann

tag_id3: export tag_id3_load()

parent 89377556
...@@ -541,30 +541,42 @@ tag_id3_riff_aiff_load(FILE *file) ...@@ -541,30 +541,42 @@ tag_id3_riff_aiff_load(FILE *file)
return tag; return tag;
} }
bool struct id3_tag *
tag_id3_scan(const char *path_fs, tag_id3_load(const char *path_fs, GError **error_r)
const struct tag_handler *handler, void *handler_ctx)
{ {
struct id3_tag *tag; FILE *file = fopen(path_fs, "rb");
FILE *stream; if (file == NULL) {
g_set_error(error_r, g_file_error_quark(), errno,
"Failed to open file %s: %s",
path_fs, g_strerror(errno));
return NULL;
}
stream = fopen(path_fs, "rb"); struct id3_tag *tag = tag_id3_find_from_beginning(file);
if (!stream) { if (tag == NULL) {
g_debug("tag_id3_load: Failed to open file: '%s', %s", tag = tag_id3_riff_aiff_load(file);
path_fs, g_strerror(errno)); if (tag == NULL)
return false; tag = tag_id3_find_from_end(file);
} }
tag = tag_id3_find_from_beginning(stream); fclose(file);
if (tag == NULL) return tag;
tag = tag_id3_riff_aiff_load(stream); }
if (!tag)
tag = tag_id3_find_from_end(stream);
fclose(stream); bool
tag_id3_scan(const char *path_fs,
const struct tag_handler *handler, void *handler_ctx)
{
GError *error = NULL;
struct id3_tag *tag = tag_id3_load(path_fs, &error);
if (tag == NULL) {
if (error != NULL) {
g_warning("%s", error->message);
g_error_free(error);
}
if (!tag)
return false; return false;
}
scan_id3_tag(tag, handler, handler_ctx); scan_id3_tag(tag, handler, handler_ctx);
id3_tag_delete(tag); id3_tag_delete(tag);
......
...@@ -22,6 +22,8 @@ ...@@ -22,6 +22,8 @@
#include "check.h" #include "check.h"
#include <glib.h>
#include <stdbool.h> #include <stdbool.h>
struct tag_handler; struct tag_handler;
...@@ -36,9 +38,17 @@ tag_id3_scan(const char *path_fs, ...@@ -36,9 +38,17 @@ tag_id3_scan(const char *path_fs,
struct id3_tag; struct id3_tag;
struct tag *tag_id3_import(struct id3_tag *); struct tag *tag_id3_import(struct id3_tag *);
#else /**
* Loads the ID3 tags from the file into a libid3tag object. The
* return value must be freed with id3_tag_delete().
*
* @return NULL on error or if no ID3 tag was found in the file (no
* GError will be set)
*/
struct id3_tag *
tag_id3_load(const char *path_fs, GError **error_r);
#include <glib.h> #else
static inline bool static inline bool
tag_id3_scan(G_GNUC_UNUSED const char *path_fs, tag_id3_scan(G_GNUC_UNUSED const char *path_fs,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment