[Musicpd-dev-team] mpdscribble for win32?
Hi, folks. I've just started at a new job and have been given a Windows box. I've managed to get MPD and a couple of clients running (which is going to make my life much more comfortable) but I can't find a win32 binary for mpdscribble. I'm not up to compiling it myself (in a Windows environment, anyway), so does anyone know of an existing binary, or is anyone willing to do me a favour and produce one? I can offer a small bounty if that swings it. Thanks. --bart -- Try before you buy = See our experts in action! The most comprehensive online learning library for Microsoft developers is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3, Metro Style Apps, more. Free future releases when you subscribe now! http://p.sf.net/sfu/learndevnow-dev2 ___ Musicpd-dev-team mailing list Musicpd-dev-team@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/musicpd-dev-team
Re: [Musicpd-dev-team] mpdscribble for win32?
On Mon, Feb 6, 2012 at 11:18 AM, Bart Nagel b...@tremby.net wrote: Hi, folks. I've just started at a new job and have been given a Windows box. I've managed to get MPD and a couple of clients running (which is going to make my life much more comfortable) but I can't find a win32 binary for mpdscribble. I'm not up to compiling it myself (in a Windows environment, anyway), so does anyone know of an existing binary, or is anyone willing to do me a favour and produce one? I can offer a small bounty if that swings it. I will tonight. No bounty, it works oob with my scripts. -- avuton -- Fortes fortuna adiuvat -- Try before you buy = See our experts in action! The most comprehensive online learning library for Microsoft developers is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3, Metro Style Apps, more. Free future releases when you subscribe now! http://p.sf.net/sfu/learndevnow-dev2 ___ Musicpd-dev-team mailing list Musicpd-dev-team@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/musicpd-dev-team
Re: [Musicpd-dev-team] mpdscribble for win32?
At 2012-02-06 13:11:36 -0800, Avuton Olrich wrote: On Mon, Feb 6, 2012 at 11:18 AM, Bart Nagel b...@tremby.net wrote: Hi, folks. I've just started at a new job and have been given a Windows box. I've managed to get MPD and a couple of clients running (which is going to make my life much more comfortable) but I can't find a win32 binary for mpdscribble. I'm not up to compiling it myself (in a Windows environment, anyway), so does anyone know of an existing binary, or is anyone willing to do me a favour and produce one? I can offer a small bounty if that swings it. I will tonight. No bounty, it works oob with my scripts. Thanks very much! -- Try before you buy = See our experts in action! The most comprehensive online learning library for Microsoft developers is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3, Metro Style Apps, more. Free future releases when you subscribe now! http://p.sf.net/sfu/learndevnow-dev2 ___ Musicpd-dev-team mailing list Musicpd-dev-team@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/musicpd-dev-team
Re: [Musicpd-dev-team] mpdscribble for win32?
On Mon, Feb 6, 2012 at 1:13 PM, Bart Nagel b...@tremby.net wrote: At 2012-02-06 13:11:36 -0800, Avuton Olrich wrote: On Mon, Feb 6, 2012 at 11:18 AM, Bart Nagel b...@tremby.net wrote: Hi, folks. I've just started at a new job and have been given a Windows box. I've managed to get MPD and a couple of clients running (which is going to make my life much more comfortable) but I can't find a win32 binary for mpdscribble. I'm not up to compiling it myself (in a Windows environment, anyway), so does anyone know of an existing binary, or is anyone willing to do me a favour and produce one? I can offer a small bounty if that swings it. I will tonight. No bounty, it works oob with my scripts. Thanks very much! I didn't test it, but last time I tested it, it was fine. If you run into any issues, feel free to shoot me an email. http://sourceforge.net/projects/musicpd/files/mpdscribble/0.22/mpdscribble-0.22-win32.zip/download -- avuton -- Fortes fortuna adiuvat -- Keep Your Developer Skills Current with LearnDevNow! The most comprehensive online learning library for Microsoft developers is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3, Metro Style Apps, more. Free future releases when you subscribe now! http://p.sf.net/sfu/learndevnow-d2d ___ Musicpd-dev-team mailing list Musicpd-dev-team@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/musicpd-dev-team
Re: [Musicpd-dev-team] mpdscribble for win32?
At 2012-02-06 18:01:10 -0800, Avuton Olrich wrote: On Mon, Feb 6, 2012 at 1:13 PM, Bart Nagel b...@tremby.net wrote: At 2012-02-06 13:11:36 -0800, Avuton Olrich wrote: On Mon, Feb 6, 2012 at 11:18 AM, Bart Nagel b...@tremby.net wrote: Hi, folks. I've just started at a new job and have been given a Windows box. I've managed to get MPD and a couple of clients running (which is going to make my life much more comfortable) but I can't find a win32 binary for mpdscribble. I'm not up to compiling it myself (in a Windows environment, anyway), so does anyone know of an existing binary, or is anyone willing to do me a favour and produce one? I can offer a small bounty if that swings it. I will tonight. No bounty, it works oob with my scripts. Thanks very much! I didn't test it, but last time I tested it, it was fine. If you run into any issues, feel free to shoot me an email. http://sourceforge.net/projects/musicpd/files/mpdscribble/0.22/mpdscribble-0.22-win32.zip/download That's working. Thanks! --bart -- Keep Your Developer Skills Current with LearnDevNow! The most comprehensive online learning library for Microsoft developers is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3, Metro Style Apps, more. Free future releases when you subscribe now! http://p.sf.net/sfu/learndevnow-d2d ___ Musicpd-dev-team mailing list Musicpd-dev-team@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/musicpd-dev-team
Re: [Musicpd-dev-team] mpdscribble
Somebody claiming to be Max Kellermann wrote: On 2009/04/07 19:01, Stephen Paul Weber singpol...@singpolyma.net wrote: Attached please find 5 patch files, each the output of a git show for 5 commits that progressively implement this feature :) Found a major problem: conn.c does not deal with more than one connection at a time. There's the global variable g, which needs to be converted to a parameter, so we have a per-server conn object. Result: mpdscribble: src/conn.c:89: conn_initiate: Assertion `!g.pending' failed. Attached is a patch to deal with that :) -- Stephen Paul Weber, @singpolyma Please see http://singpolyma.net for how I prefer to be contacted. nerve perfume pogo. commit 7c960b224524ee6471faf8f146fbf1dec3dae352 Author: Stephen Paul Weber singpol...@singpolyma.net Date: Wed Apr 8 17:15:28 2009 -0400 Get rid of globals for conn.c diff --git a/src/as.c b/src/as.c index 629d351..d87bae0 100644 --- a/src/as.c +++ b/src/as.c @@ -413,7 +413,7 @@ static void as_handshake(struct config_as_host *as_host) // notice (handshake url:\n%s, url); - if (!conn_initiate(url-str, as_handshake_callback, NULL, as_host)) { + if (!conn_initiate(url-str, as_handshake_callback, NULL, as_host, as_host-conn)) { g_warning(something went wrong when trying to connect, probably a bug\n); @@ -472,7 +472,7 @@ as_send_now_playing(const char *artist, const char *track, g_message(sending 'now playing' notification to '%s'\n, as_host-url); if (!conn_initiate(as_host-g_nowplay_url, as_submit_callback, - post_data-str, as_host)) { + post_data-str, as_host, as_host-conn)) { g_warning(failed to POST to %s\n, as_host-g_nowplay_url); as_host-g_state = AS_READY; @@ -559,7 +559,7 @@ static void as_submit(struct config_as_host *as_host) g_submit_pending = count; if (!conn_initiate(as_host-g_submit_url, as_submit_callback, - post_data-str, as_host)) { + post_data-str, as_host, as_host-conn)) { g_warning(something went wrong when trying to connect, probably a bug\n); @@ -635,9 +635,8 @@ void as_init(void) g_message(loaded %i song%s from cache\n, queue_length, queue_length == 1 ? : s); - conn_setup(); - do { + current_host-conn = conn_setup(); current_host-g_session = NULL; current_host-g_nowplay_url = NULL; current_host-g_submit_url = NULL; @@ -695,6 +694,4 @@ void as_cleanup(void) g_queue_foreach(queue, free_queue_song, NULL); g_queue_free(queue); - - conn_cleanup(); } diff --git a/src/conn.c b/src/conn.c index 6214d82..56cbff4 100644 --- a/src/conn.c +++ b/src/conn.c @@ -21,29 +21,13 @@ #include conn.h #include file.h #include as.h -#include config.h - -#include libsoup/soup-uri.h -#include libsoup/soup-session-async.h #include assert.h #include stdlib.h #include stdio.h #include string.h -struct global { - SoupSession *session; - char *base; - bool pending; - callback_t *callback; -#ifdef HAVE_SOUP_24 - SoupURI *proxy; -#else - SoupUri *proxy; -#endif -}; - -static struct global g; +int g_thread_done = 0; static void #ifdef HAVE_SOUP_24 @@ -53,51 +37,62 @@ conn_callback(G_GNUC_UNUSED SoupSession * session, conn_callback(SoupMessage * msg, gpointer data) #endif { - assert(g.pending); + struct global *g = data; + assert(g-pending); - g.pending = false; + g-pending = false; /* NOTE: does not support redirects */ if (SOUP_STATUS_IS_SUCCESSFUL(msg-status_code)) { #ifdef HAVE_SOUP_24 - g.callback(msg-response_body-length, - msg-response_body-data, data); + g-callback(msg-response_body-length, + msg-response_body-data, g-data); #else - g.callback(msg-response.length, msg-response.body, data); + g-callback(msg-response.length, msg-response.body, g-data); #endif } else - g.callback(0, NULL, data); + g-callback(0, NULL, g-data); } -void conn_setup(void) +struct global *conn_setup(void) { - g_type_init(); - g_thread_init(NULL); - g.pending = false; + if(!g_thread_done) { + g_type_init(); + g_thread_init(NULL); + g_thread_done = 1; + } + + struct global *g = malloc(sizeof *g); + + g-pending = false; if (file_config.proxy != NULL) - g.proxy = soup_uri_new(file_config.proxy); + g-proxy = soup_uri_new(file_config.proxy); else - g.proxy = NULL; + g-proxy = NULL; + + return g; } int -conn_initiate(char *url, callback_t * callback, char *post_data, void *data) +conn_initiate(char *url, callback_t * callback, char *post_data, void *data, struct global *g) { SoupMessage *msg; - assert(!g.pending); + assert(!g-pending); + + g-data = data; - g.callback = callback; + g-callback = callback; - g.base = url; + g-base = url; - g.session = - soup_session_async_new_with_options(SOUP_SESSION_PROXY_URI, g.proxy, + g-session = + soup_session_async_new_with_options(SOUP_SESSION_PROXY_URI, g-proxy, NULL); if (post_data) { - msg = soup_message_new(SOUP_METHOD_POST, g.base); + msg = soup_message_new(SOUP_METHOD_POST, g-base); #ifdef HAVE_SOUP_24
Re: [Musicpd-dev-team] mpdscribble
Somebody claiming to be Max Kellermann wrote: On 2009/04/07 01:39, Stephen Paul Weber singpol...@singpolyma.net wrote: Yes, this is exactly the functionality I had in mind :) Be sure that old configuration files continue to work. Attached please find 5 patch files, each the output of a git show for 5 commits that progressively implement this feature :) -- Stephen Paul Weber, @singpolyma Please see http://singpolyma.net for how I prefer to be contacted. nerve perfume pogo. commit 4134470abcc4d23e6c971056826036461882c4eb Author: Stephen Paul Weber singpol...@singpolyma.net Date: Tue Apr 7 10:52:34 2009 -0400 Don't assume last.fm AS_HOST + config parsing In fact, don't assume global state for username/password either. A lot of changes to as.c, conn.c, conn.h just to allow a pointer to a struct containing the state instead of assuming global. This patch still just uses the first as_host from the list. file.h and file.c have been modified to actually parse the new config file format and create a linked list of as_hosts. There is a memory leak in the config parser: the linked list is not freed. Since we need it all in memory until shutting down, this is likely not a problem, but a comment reminder has been added. diff --git a/src/as.c b/src/as.c index 545189c..c2fe75d 100644 --- a/src/as.c +++ b/src/as.c @@ -45,8 +45,6 @@ #define MAX_VAR_SIZE 8192 #define MAX_TIMESTAMP_SIZE 64 -#define AS_HOST http://post.audioscrobbler.com/; - /* don't submit more than this amount of songs in a batch. */ #define MAX_SUBMIT_COUNT 10 @@ -128,13 +126,13 @@ add_var_i(GString * s, const char *key, signed char idx, const char *val) } static void -as_schedule_handshake(void); +as_schedule_handshake(struct config_as_host *as_host); static void -as_submit(void); +as_submit(struct config_as_host *as_host); static void -as_schedule_submit(void); +as_schedule_submit(struct config_as_host *as_host); static void as_increase_interval(void) { @@ -217,7 +215,7 @@ static void as_song_cleanup(struct song *s, int free_struct) free(s); } -static void as_handshake_callback(size_t length, const char *response) +static void as_handshake_callback(size_t length, const char *response, void *as_host) { as_handshaking state = AS_COMMAND; char *newline; @@ -230,7 +228,7 @@ static void as_handshake_callback(size_t length, const char *response) if (!length) { g_warning(handshake timed out\n); as_increase_interval(); - as_schedule_handshake(); + as_schedule_handshake(as_host); return; } @@ -242,7 +240,7 @@ static void as_handshake_callback(size_t length, const char *response) if (!ret) { g_free(next); as_increase_interval(); -as_schedule_handshake(); +as_schedule_handshake(as_host); return; } @@ -268,7 +266,7 @@ static void as_handshake_callback(size_t length, const char *response) /* handshake was successful: see if we have songs to submit */ - as_submit(); + as_submit(as_host); return; } @@ -279,7 +277,7 @@ static void as_handshake_callback(size_t length, const char *response) } as_increase_interval(); - as_schedule_handshake(); + as_schedule_handshake(as_host); } static void as_queue_remove_oldest(unsigned count) @@ -292,7 +290,7 @@ static void as_queue_remove_oldest(unsigned count) } } -static void as_submit_callback(size_t length, const char *response) +static void as_submit_callback(size_t length, const char *response, void *as_host) { char *newline; @@ -303,7 +301,7 @@ static void as_submit_callback(size_t length, const char *response) g_submit_pending = 0; g_warning(submit timed out\n); as_increase_interval(); - as_schedule_submit(); + as_schedule_submit(as_host); return; } @@ -329,15 +327,15 @@ static void as_submit_callback(size_t length, const char *response) /* submit the next chunk (if there is some left) */ - as_submit(); + as_submit(as_host); break; case AS_SUBMIT_FAILED: as_increase_interval(); - as_schedule_submit(); + as_schedule_submit(as_host); break; case AS_SUBMIT_HANDSHAKE: g_state = AS_NOTHING; - as_schedule_handshake(); + as_schedule_handshake(as_host); break; } } @@ -403,7 +401,7 @@ static char *as_md5(const char *password, const char *timestamp) return result; } -static void as_handshake(void) +static void as_handshake(struct config_as_host *as_host) { GString *url; char *timestr, *md5; @@ -411,15 +409,15 @@ static void as_handshake(void) g_state = AS_HANDSHAKING; timestr = as_timestamp(); - md5 = as_md5(file_config.password, timestr); + md5 = as_md5(as_host-password, timestr); /* construct the handshake url. */ - url = g_string_new(AS_HOST); + url = g_string_new(as_host-url); first_var(url, hs, true); add_var(url, p, 1.2); add_var(url, c, AS_CLIENT_ID); add_var(url, v, AS_CLIENT_VERSION); - add_var(url, u, file_config.username); + add_var(url, u,
Re: [Musicpd-dev-team] mpdscribble
On 2009/04/06 20:17, Stephen Paul Weber singpol...@singpolyma.net wrote: More and more web services are starting to implement the audioscrobbler API (jamendo.com, libre.fm). I would like to scrobble all my mpd listens to multiple of these services with mpdscribble. As it is, I can change the host in the config, which works, but then I can only switch providers, I cannot use more than one. So you have multiple MPD installations, and you want to scrobble all of them? Looking at the source it seems this would not be too difficult to implement. I may be able to figure it out (though I'm not familiar with glib), but thought I would ask the list first to see if someone has a better idea about this. Sure this is possible, but it will make the code more complex and less readable. I'm not sure if this is a good idea. Why not run a separate mpdscribble on each MPD server? Max -- This SF.net email is sponsored by: High Quality Requirements in a Collaborative Environment. Download a free trial of Rational Requirements Composer Now! http://p.sf.net/sfu/www-ibm-com ___ Musicpd-dev-team mailing list Musicpd-dev-team@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/musicpd-dev-team
Re: [Musicpd-dev-team] mpdscribble
I think the idea was to send the audioscrobbler data to multiple servers, not to connect to multiple instances of mpd - this got confused by the use of the word host in the sample config. I think the idea would be more something like this (using similar format to mpdconf): scrobbleserver { server = jamendo.com user = ... password = ... } scrobbleserver { ... } ...other mpdscribble options... Obviously the format of the config can be changed. Is this the functionality you had in mind? Jeffrey On Mon, Apr 6, 2009 at 2:44 PM, Max Kellermann m...@duempel.org wrote: On 2009/04/06 20:17, Stephen Paul Weber singpol...@singpolyma.net wrote: More and more web services are starting to implement the audioscrobbler API (jamendo.com, libre.fm). I would like to scrobble all my mpd listens to multiple of these services with mpdscribble. As it is, I can change the host in the config, which works, but then I can only switch providers, I cannot use more than one. So you have multiple MPD installations, and you want to scrobble all of them? Looking at the source it seems this would not be too difficult to implement. I may be able to figure it out (though I'm not familiar with glib), but thought I would ask the list first to see if someone has a better idea about this. Sure this is possible, but it will make the code more complex and less readable. I'm not sure if this is a good idea. Why not run a separate mpdscribble on each MPD server? Max -- This SF.net email is sponsored by: High Quality Requirements in a Collaborative Environment. Download a free trial of Rational Requirements Composer Now! http://p.sf.net/sfu/www-ibm-com ___ Musicpd-dev-team mailing list Musicpd-dev-team@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/musicpd-dev-team -- This SF.net email is sponsored by: High Quality Requirements in a Collaborative Environment. Download a free trial of Rational Requirements Composer Now! http://p.sf.net/sfu/www-ibm-com___ Musicpd-dev-team mailing list Musicpd-dev-team@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/musicpd-dev-team
Re: [Musicpd-dev-team] mpdscribble
On 2009/04/07 01:39, Stephen Paul Weber singpol...@singpolyma.net wrote: Yes, this is exactly the functionality I had in mind :) OK, understand. While I'm not interested in that feature, I understand others are, and I'd be willing to merge that. Give the configuration file format a good thought when you hack on that: currently, mpdscribble uses GKeyFile to parse the configuration file in .INI style. The parser invocation contains a hack, because historically, there is no section name in the file. We could say that users who want to use multiple scrobbler servers have to explicitly add the section name. What you could do now is make one INI section per scrobbling server. Example: [mpdscribble] log=syslog host=localhost scrobblers=foo bar [foo] username=foo password=secret server=http://foo.fm [bar] username=bar password=secret server=http://bar.fm Be sure that old configuration files continue to work. Max -- This SF.net email is sponsored by: High Quality Requirements in a Collaborative Environment. Download a free trial of Rational Requirements Composer Now! http://p.sf.net/sfu/www-ibm-com ___ Musicpd-dev-team mailing list Musicpd-dev-team@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/musicpd-dev-team
[Musicpd-dev-team] mpdscribble-0.14 released
This release has the normal bugfixes, cleans up the source code to be much more readable, supports MPD's idle command, uses more glib code, logs to syslog, resubmits now playing after re-handshake and much more. Pick it up at: http://downloads.sourceforge.net/musicpd/mpdscribble-0.14.tar.bz2 Report bugs at: http://musicpd.org/mantis/ -- Avuton Olrich (7): Move source and header files under the src/ directory. Make a proper doc/ directory Add the makefile template Update COPYING Add setup.sh to the EXTRA_DIST so it gets distributed with the tarball. Fix distcheck by giving the leading directory for libmpdclient's header when it is included. mpdscribble version 0.14 Max Kellermann (78): configure.ac: set version number to 0.14~git .gitignore update reindent all files as: converted runtime checks to assertions as: use unsigned integers as: don't allocate empty strings as: reset interval after successful submit as: don't duplicate twice in as_handshake_callback() as: return from as_handshake_callback() on success as: reset interval after handshake response was parsed completely as: removed AS_SUBMIT_NOP as: don't reset g_state in as_parse_submit_response() as: set state NOTHING/READY at the beginning of function as: make as_parse_handshake_response() return a bool as: abort earlier on handshake error as: pass length to as_parse_submit_response() as: parse only the first submit response line use GLib's main loop conn: don't parse URI with soup_uri_new() submit song when stopped removed the submitted variable file: make the logfile unbuffered splitted the timer_mpd_update() function moved timer_mpd_update() to lmc.c lmc: use a second-granularity timer lmc: reconnect with a separate timer libmpdclient: don't clear notify_cb before mpd_readChanges() lmc: support MPD's idle command lmc: replace '||' with '' in libmpdclient error check as: reuse as_submit_callback() for now playing moved journal code to journal.c journal: renamed functions from file/cache to journal journal: return from journal_read() if file cannot be read journal: read and parse line by line journal: parse without regular expressions journal: close the journal file after reading lmc: replace '||' with '' in libmpdclient error check journal: journal_read() returns void, journal_write() returns bool journal: convert file_saved_count to a boolean flag as: use GQueue for the submit queue journal: commit song on the next artist line journal: append to queue instead of as_songchange() lmc: free current_song on shutdown as: resubmit now playing after re-handshake NEWS: added missing 0.14 changes main: moved code to setup_signals() main: set up signal handlers with sigaction() ignore SIGPIPE misc: removed now() log: new logging subsystem based on GLib logging use GLib logging as: fall back to libgcrypt for MD5 hashing as: use soup_uri_encode() on GLib 2.16 lmc: check if g_timeout_add_seconds() is available Makefile.am: no recursive makefiles Makefile.am: added sparse-check target lmc: use NULL instead of 0 for pointers log: moved file_open_logfile() from file.c libmpdclient: removed example.c log: moved code to log_init_file() log: added support for syslog close stdin close stdout and stderr file: removed file_open_logfile() prototype file: make file_expand_tilde() static file: moved macros from header to file.c file: moved code to cmdline.c file: moved code to load_config_file() file: missing config file is a fatal error file: parse command line arguments before config file cmdline: use GLib's command line parser as: fixed GLib version check for GLib = 3.0 cmdline: exit(0) after --version cmdline: don't print AS client id in --version doc: added a sample mpdscribble.conf added new INSTALL file with compiling instructions deleted setup.sh README: miscellaneous updates, new formatting -- avuton -- | (\_/) This is Bunny. Copy and paste Bunny | (='.'=) into your signature to help him gain | ()_() world domination. -- ___ Musicpd-dev-team mailing list Musicpd-dev-team@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/musicpd-dev-team
[Musicpd-dev-team] mpdscribble v0.13 released
Hi, after I have taken over the mpdscribble project last week, I have merged lots of patches which were floating around the internet, and I have created a bunch of new ones. The most important change is the adoption of the last.fm protocol 1.2 (now playing support), thanks to Christoph Leuzinger for the patch. Here's the full changelog: mpdscribble 0.13 - 2008-12-19 * libmpdclient update from upstream: - suport for Unix domain sockets - try all IP addresses from the resolver, resulting in better IPv6 support - smaller buffers, less memory usage * support the Last.fm Submissions Protocol v1.2 - including support for 'now playing' - submit songs when they are finished - ignore seeking - now really support crossfading - support streaming * HTTP proxy support * support for libsoup 2.4 * fixed several crash bugs * fixed gcc warnings Grab it at sourceforge: http://downloads.sourceforge.net/musicpd/mpdscribble-0.13.tar.gz http://downloads.sourceforge.net/musicpd/mpdscribble-0.13.tar.bz2 If you find a bug, please submit a bug report: http://www.musicpd.org/mantis Happy scrobbling! Max -- ___ Musicpd-dev-team mailing list Musicpd-dev-team@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/musicpd-dev-team