Mercurial > audlegacy-plugins
diff src/scrobbler/scrobbler.c @ 344:03c1ae10bc8d trunk
[svn] - Merge audacious-scrobbler III, new features include:
+ Gerpok support
+ Better queue management
author | nenolod |
---|---|
date | Fri, 08 Dec 2006 19:31:43 -0800 |
parents | 3da1b8942b8b |
children | 314b7ac7f771 |
line wrap: on
line diff
--- a/src/scrobbler/scrobbler.c Fri Dec 08 17:52:54 2006 -0800 +++ b/src/scrobbler/scrobbler.c Fri Dec 08 19:31:43 2006 -0800 @@ -7,11 +7,13 @@ #include <stdio.h> #include "fmt.h" #include "md5.h" -#include "queue.h" #include "scrobbler.h" #include "config.h" +#include "settings.h" #include <glib.h> +#include <audacious/titlestring.h> + #define SCROBBLER_HS_URL "http://post.audioscrobbler.com" #define SCROBBLER_CLI_ID "aud" #define SCROBBLER_HS_WAIT 1800 @@ -45,6 +47,179 @@ static void dump_queue(); +/**** Queue stuff ****/ + +#define I_ARTIST(i) i->artist +#define I_TITLE(i) i->title +#define I_TIME(i) i->utctime +#define I_LEN(i) i->len +#define I_MB(i) i->mb +#define I_ALBUM(i) i->album + +typedef struct { + char *artist, + *title, + *mb, + *album, + *utctime, + len[16]; + int numtries; + void *next; +} item_t; + +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); +} + +static 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; + } +} + +static 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; +} + +static item_t *q_peek(void) +{ + if (q_nitems == 0) + return NULL; + return q_queue; +} + +static 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; +} + +static 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; +} + +static void q_free(void) +{ + while (q_get()); +} + +static int q_len(void) +{ + return q_nitems; +} + /* Error functions */ static void sc_throw_error(char *errortxt)