summaryrefslogtreecommitdiff
path: root/plmeta.c
diff options
context:
space:
mode:
Diffstat (limited to 'plmeta.c')
-rw-r--r--plmeta.c55
1 files changed, 44 insertions, 11 deletions
diff --git a/plmeta.c b/plmeta.c
index cf17f341..9e00d1f9 100644
--- a/plmeta.c
+++ b/plmeta.c
@@ -28,6 +28,9 @@
void
pl_add_meta (playItem_t *it, const char *key, const char *value) {
+ if (!value || !*value) {
+ return;
+ }
LOCK;
// check if it's already set
DB_metaInfo_t *normaltail = NULL;
@@ -54,10 +57,6 @@ pl_add_meta (playItem_t *it, const char *key, const char *value) {
}
// add
char str[256];
- if (!value || !*value) {
- UNLOCK;
- return;
- }
m = malloc (sizeof (DB_metaInfo_t));
memset (m, 0, sizeof (DB_metaInfo_t));
m->key = metacache_add_string (key);
@@ -190,14 +189,13 @@ pl_delete_meta (playItem_t *it, const char *key) {
const char *
pl_find_meta (playItem_t *it, const char *key) {
- pl_lock ();
+ pl_ensure_lock ();
DB_metaInfo_t *m = it->meta;
if (key && key[0] == ':') {
// try to find an override
while (m) {
if (m->key[0] == '!' && !strcasecmp (key+1, m->key+1)) {
- pl_unlock ();
return m->value;
}
m = m->next;
@@ -207,27 +205,23 @@ pl_find_meta (playItem_t *it, const char *key) {
m = it->meta;
while (m) {
if (!strcasecmp (key, m->key)) {
- pl_unlock ();
return m->value;
}
m = m->next;
}
- pl_unlock ();
return NULL;
}
const char *
pl_find_meta_raw (playItem_t *it, const char *key) {
- pl_lock ();
+ pl_ensure_lock ();
DB_metaInfo_t *m = it->meta;
while (m) {
if (!strcasecmp (key, m->key)) {
- pl_unlock ();
return m->value;
}
m = m->next;
}
- pl_unlock ();
return NULL;
}
@@ -301,5 +295,44 @@ pl_delete_all_meta (playItem_t *it) {
}
m = next;
}
+ uint32_t f = pl_get_item_flags (it);
+ f &= ~DDB_TAG_MASK;
+ pl_set_item_flags (it, f);
UNLOCK;
}
+
+int
+pl_get_meta (playItem_t *it, const char *key, char *val, int size) {
+ *val = 0;
+ pl_lock ();
+ const char *v = pl_find_meta (it, key);
+ if (!v) {
+ pl_unlock ();
+ return 0;
+ }
+ strncpy (val, v, size);
+ pl_unlock ();
+ return 1;
+}
+
+int
+pl_get_meta_raw (playItem_t *it, const char *key, char *val, int size) {
+ *val = 0;
+ pl_lock ();
+ const char *v = pl_find_meta_raw (it, key);
+ if (!v) {
+ pl_unlock ();
+ return 0;
+ }
+ strncpy (val, v, size);
+ pl_unlock ();
+ return 1;
+}
+
+int
+pl_meta_exists (playItem_t *it, const char *key) {
+ pl_lock ();
+ const char *v = pl_find_meta (it, key);
+ pl_unlock ();
+ return v ? 1 : 0;
+}