diff options
Diffstat (limited to 'plmeta.c')
-rw-r--r-- | plmeta.c | 55 |
1 files changed, 44 insertions, 11 deletions
@@ -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; +} |