summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--plugins/dumb/cdumb.c71
1 files changed, 54 insertions, 17 deletions
diff --git a/plugins/dumb/cdumb.c b/plugins/dumb/cdumb.c
index 0c16f1d1..5b665f9b 100644
--- a/plugins/dumb/cdumb.c
+++ b/plugins/dumb/cdumb.c
@@ -719,23 +719,8 @@ convstr (const char* str, int sz, char *out, int out_sz) {
return NULL;
}
-static DB_playItem_t *
-cdumb_insert (DB_playItem_t *after, const char *fname) {
- const char *ext = fname + strlen (fname) - 1;
- while (*ext != '.' && ext > fname) {
- ext--;
- }
- ext++;
- int start_order = 0;
- int is_it;
- int is_dos;
- const char *ftype;
- DUH* duh = open_module(fname, ext, &start_order, &is_it, &is_dos, &ftype);
- if (!duh) {
- return NULL;
- }
- DB_playItem_t *it = deadbeef->pl_item_alloc_init (fname, plugin.plugin.id);
- DUMB_IT_SIGDATA * itsd = duh_get_it_sigdata(duh);
+static void
+read_metadata_internal (DB_playItem_t *it, DUMB_IT_SIGDATA *itsd) {
char temp[2048];
if (itsd->name[0]) {
@@ -776,6 +761,57 @@ cdumb_insert (DB_playItem_t *after, const char *fname) {
deadbeef->pl_add_meta (it, ":MOD_PATTERNS", s);
snprintf (s, sizeof (s), "%d", itsd->n_pchannels);
deadbeef->pl_add_meta (it, ":MOD_CHANNELS", s);
+}
+
+static int
+cdumb_read_metadata (DB_playItem_t *it) {
+ const char *fname = deadbeef->pl_find_meta (it, ":URI");
+ const char *ext = strrchr (fname, '.');
+ if (ext) {
+ ext++;
+ }
+ else {
+ ext = "";
+ }
+ int start_order = 0;
+ int is_it;
+ int is_dos;
+ const char *ftype;
+ DUH* duh = open_module(fname, ext, &start_order, &is_it, &is_dos, &ftype);
+ if (!duh) {
+ unload_duh (duh);
+ return -1;
+ }
+ DUMB_IT_SIGDATA * itsd = duh_get_it_sigdata(duh);
+
+ deadbeef->pl_delete_all_meta (it);
+ read_metadata_internal (it, itsd);
+ unload_duh (duh);
+ return 0;
+}
+
+static DB_playItem_t *
+cdumb_insert (DB_playItem_t *after, const char *fname) {
+ const char *ext = strrchr (fname, '.');
+ if (ext) {
+ ext++;
+ }
+ else {
+ ext = "";
+ }
+ int start_order = 0;
+ int is_it;
+ int is_dos;
+ const char *ftype;
+ DUH* duh = open_module(fname, ext, &start_order, &is_it, &is_dos, &ftype);
+ if (!duh) {
+ return NULL;
+ }
+ DB_playItem_t *it = deadbeef->pl_item_alloc_init (fname, plugin.plugin.id);
+ DUMB_IT_SIGDATA * itsd = duh_get_it_sigdata(duh);
+
+ read_metadata_internal (it, itsd);
+
dumb_it_do_initial_runthrough (duh);
deadbeef->pl_set_item_duration (it, duh_get_length (duh)/65536.0f);
it->filetype = ftype;
@@ -880,6 +916,7 @@ static DB_decoder_t plugin = {
.read = cdumb_read,
.seek = cdumb_seek,
.insert = cdumb_insert,
+ .read_metadata = cdumb_read_metadata,
.exts = exts,
.filetypes = filetypes
};