Mercurial > audlegacy
diff Plugins/General/scrobbler/queue.c @ 688:cc1969408403 trunk
[svn] - add scrobbler support
author | nenolod |
---|---|
date | Sat, 25 Feb 2006 12:11:20 -0800 |
parents | |
children | 99382cddf771 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Plugins/General/scrobbler/queue.c Sat Feb 25 12:11:20 2006 -0800 @@ -0,0 +1,153 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <curl/curl.h> +#include "tags/include/tags.h" +#include "queue.h" +#include "fmt.h" + +static item_t *q_queue = NULL; +static item_t *q_queue_last = NULL; +static int q_nitems; + +static void q_item_free(item_t *item) +{ + if (item == NULL) + return; + curl_free(item->artist); + curl_free(item->title); + curl_free(item->utctime); + curl_free(item->mb); + curl_free(item->album); + free(item); +} + +void q_put(metatag_t *meta, int len) +{ + item_t *item; + + item = malloc(sizeof(item_t)); + item->artist = fmt_escape(meta->artist); + item->title = fmt_escape(meta->title); + item->utctime = fmt_escape(fmt_timestr(time(NULL), 1)); + snprintf(item->len, sizeof(item->len), "%d", len); + if(meta->mb == NULL) + item->mb = fmt_escape(""); + else + item->mb = fmt_escape(meta->mb); + if(meta->album == NULL) + item->album = fmt_escape(""); + else + item->album = fmt_escape(meta->album); + + q_nitems++; + + item->next = NULL; + + if(q_queue_last == NULL) + q_queue = q_queue_last = item; + else + { + q_queue_last->next = item; + q_queue_last = item; + } +} + +item_t *q_put2(char *artist, char *title, char *len, char *time, + char *album, char *mb) +{ + char *temp = NULL; + item_t *item; + + item = calloc(1, sizeof(item_t)); + temp = fmt_unescape(artist); + item->artist = fmt_escape(temp); + curl_free(temp); + temp = fmt_unescape(title); + item->title = fmt_escape(temp); + curl_free(temp); + memcpy(item->len, len, sizeof(len)); + temp = fmt_unescape(time); + item->utctime = fmt_escape(temp); + curl_free(temp); + temp = fmt_unescape(album); + item->album = fmt_escape(temp); + curl_free(temp); + temp = fmt_unescape(mb); + item->mb = fmt_escape(temp); + curl_free(temp); + + q_nitems++; + + item->next = NULL; + if(q_queue_last == NULL) + q_queue = q_queue_last = item; + else + { + q_queue_last->next = item; + q_queue_last = item; + } + + return item; +} + +item_t *q_peek(void) +{ + if (q_nitems == 0) + return NULL; + return q_queue; +} + +item_t *q_peekall(int rewind) +{ + static item_t *citem = NULL; + item_t *temp_item; + + if (rewind) { + citem = q_queue; + return NULL; + } + + temp_item = citem; + + if(citem != NULL) + citem = citem->next; + + return temp_item; +} + +int q_get(void) +{ + item_t *item; + + if (q_nitems == 0) + return 0; + + item = q_queue; + + if(item == NULL) + return 0; + + q_nitems--; + q_queue = q_queue->next; + + q_item_free(item); + + if (q_nitems == 0) + { + q_queue_last = NULL; + return 0; + } + + return -1; +} + +void q_free(void) +{ + while (q_get()); +} + +int q_len(void) +{ + return q_nitems; +}