diff src/General/scrobbler/queue.c @ 0:13389e613d67 trunk

[svn] - initial import of audacious-plugins tree (lots to do)
author nenolod
date Mon, 18 Sep 2006 01:11:49 -0700
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/General/scrobbler/queue.c	Mon Sep 18 01:11:49 2006 -0700
@@ -0,0 +1,159 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <curl/curl.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(TitleInput *tuple, int len)
+{
+	item_t *item;
+
+	item = malloc(sizeof(item_t));
+
+	item->artist = fmt_escape(tuple->performer);
+	item->title = fmt_escape(tuple->track_name);
+	item->utctime = fmt_escape(fmt_timestr(time(NULL), 1));
+	snprintf(item->len, sizeof(item->len), "%d", len);
+
+#ifdef NOTYET
+	if(tuple->mb == NULL)
+#endif
+		item->mb = fmt_escape("");
+#ifdef NOTYET
+	else
+		item->mb = fmt_escape((char*)tuple->mb);
+#endif
+
+	if(tuple->album_name == NULL)
+		item->album = fmt_escape("");
+	else
+		item->album = fmt_escape((char*)tuple->album_name);
+
+	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;
+}