Code

lyrics/leoslyrics: don't print backtrace on HTTP failure
[ncmpc.git] / src / mpdclient.c
index 0a93bc9a4bd40a3dcda2e519b465459114a09eb3..7bf29ea921e20dbda7aae906e7754aaf979e1f20 100644 (file)
@@ -1,5 +1,5 @@
 /* ncmpc (Ncurses MPD Client)
- * (c) 2004-2009 The Music Player Daemon Project
+ * (c) 2004-2010 The Music Player Daemon Project
  * Project homepage: http://musicpd.org
 
  * This program is free software; you can redistribute it and/or modify
@@ -177,7 +177,6 @@ bool
 mpdclient_update(struct mpdclient *c)
 {
        struct mpd_connection *connection = mpdclient_get_connection(c);
-       bool retval;
 
        c->volume = -1;
 
@@ -216,23 +215,26 @@ mpdclient_update(struct mpdclient *c)
 
        /* check if the playlist needs an update */
        if (c->playlist.version != mpd_status_get_queue_version(c->status)) {
+               bool retval;
+
                if (c->source == NULL)
-                       c->events |= MPD_IDLE_PLAYLIST;
+                       c->events |= MPD_IDLE_QUEUE;
 
                if (!playlist_is_empty(&c->playlist))
                        retval = mpdclient_playlist_update_changes(c);
                else
                        retval = mpdclient_playlist_update(c);
-       } else
-               retval = true;
+               if (!retval)
+                       return false;
+       }
 
        /* update the current song */
-       if (!c->song || mpd_status_get_song_id(c->status)) {
+       if (!c->song || mpd_status_get_song_id(c->status) >= 0) {
                c->song = playlist_get_song(&c->playlist,
                                            mpd_status_get_song_pos(c->status));
        }
 
-       return retval;
+       return true;
 }
 
 struct mpd_connection *
@@ -284,15 +286,12 @@ mpdclient_cmd_crop(struct mpdclient *c)
        struct mpd_connection *connection;
        int length, current;
 
-       if (c->status == NULL)
+       if (!mpdclient_is_playing(c))
                return false;
 
        length = mpd_status_get_queue_length(c->status);
        current = mpd_status_get_song_pos(c->status);
-       if (current < 0 ||
-           (mpd_status_get_state(c->status) != MPD_STATE_PLAY &&
-            mpd_status_get_state(c->status) != MPD_STATE_PAUSE) ||
-           mpd_status_get_queue_length(c->status) < 2)
+       if (current < 0 || mpd_status_get_queue_length(c->status) < 2)
                return true;
 
        connection = mpdclient_get_connection(c);
@@ -338,10 +337,6 @@ mpdclient_cmd_clear(struct mpdclient *c)
        if (status == NULL)
                return false;
 
-       if (c->status != NULL)
-               mpd_status_free(c->status);
-       c->status = status;
-
        if (!mpd_response_finish(connection))
                return mpdclient_handle_error(c);
 
@@ -446,7 +441,7 @@ mpdclient_cmd_add(struct mpdclient *c, const struct mpd_song *song)
            !mpd_response_next(connection))
                return mpdclient_handle_error(c);
 
-       c->events |= MPD_IDLE_PLAYLIST;
+       c->events |= MPD_IDLE_QUEUE;
 
        status = mpdclient_recv_status(c);
        if (status == NULL)
@@ -505,7 +500,7 @@ mpdclient_cmd_delete(struct mpdclient *c, gint idx)
            !mpd_command_list_end(connection))
                return mpdclient_handle_error(c);
 
-       c->events |= MPD_IDLE_PLAYLIST;
+       c->events |= MPD_IDLE_QUEUE;
 
        status = mpdclient_recv_status(c);
        if (status == NULL)
@@ -587,7 +582,7 @@ mpdclient_cmd_delete_range(struct mpdclient *c, unsigned start, unsigned end)
            !mpd_command_list_end(connection))
                return mpdclient_handle_error(c);
 
-       c->events |= MPD_IDLE_PLAYLIST;
+       c->events |= MPD_IDLE_QUEUE;
 
        status = mpdclient_recv_status(c);
        if (status == NULL)