summaryrefslogtreecommitdiff
path: root/playlist.c
diff options
context:
space:
mode:
authorGravatar waker <wakeroid@gmail.com>2011-03-09 14:00:48 +0100
committerGravatar waker <wakeroid@gmail.com>2011-03-09 14:00:48 +0100
commit298961916acac828df8de8ac740eacc2df0a5e40 (patch)
tree991dcf38fbe67150580c6b0fe6d0e9ab92644f4d /playlist.c
parent2d0b00f6bbd326790c053961ccec07106cb172c7 (diff)
few fixes/improvements to metadata editor and related plugin APIs
Diffstat (limited to 'playlist.c')
-rw-r--r--playlist.c50
1 files changed, 47 insertions, 3 deletions
diff --git a/playlist.c b/playlist.c
index fc7fb6ee..74dcd1bb 100644
--- a/playlist.c
+++ b/playlist.c
@@ -1987,8 +1987,8 @@ pl_replace_meta (playItem_t *it, const char *key, const char *value) {
m = m->next;
}
if (m) {
- metacache_remove_string (m->value);//free (m->value);
- m->value = metacache_add_string (value);//strdup (value);
+ metacache_remove_string (m->value);
+ m->value = metacache_add_string (value);
UNLOCK;
return;
}
@@ -2012,6 +2012,28 @@ pl_set_meta_float (playItem_t *it, const char *key, float value) {
pl_replace_meta (it, key, s);
}
+void
+pl_delete_meta (playItem_t *it, const char *key) {
+ DB_metaInfo_t *prev = NULL;
+ DB_metaInfo_t *m = it->meta;
+ while (m) {
+ if (!strcasecmp (key, m->key)) {
+ if (prev) {
+ prev->next = m->next;
+ }
+ else {
+ it->meta = m->next;
+ }
+ metacache_remove_string (m->key);
+ metacache_remove_string (m->value);
+ free (m);
+ break;
+ }
+ prev = m;
+ m = m->next;
+ }
+}
+
const char *
pl_find_meta (playItem_t *it, const char *key) {
DB_metaInfo_t *m = it->meta;
@@ -2037,10 +2059,32 @@ pl_find_meta_float (playItem_t *it, const char *key, float def) {
}
DB_metaInfo_t *
-pl_get_metadata (playItem_t *it) {
+pl_get_metadata_head (playItem_t *it) {
return it->meta;
}
+void
+pl_delete_metadata (playItem_t *it, DB_metaInfo_t *meta) {
+ DB_metaInfo_t *prev = NULL;
+ DB_metaInfo_t *m = it->meta;
+ while (m) {
+ if (m == meta) {
+ if (prev) {
+ prev->next = m->next;
+ }
+ else {
+ it->meta = m->next;
+ }
+ metacache_remove_string (m->key);
+ metacache_remove_string (m->value);
+ free (m);
+ break;
+ }
+ prev = m;
+ m = m->next;
+ }
+}
+
int
pl_delete_selected (void) {
GLOBAL_LOCK;