X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=afs.c;h=a5ec7b2f7cafc1ef37edfdc767e342d3d7769f4e;hb=b605df7dcee2c6e642a141aea24e643eb6ca34ec;hp=4bc7871cac868a45a2d487cdf5761d9509f19bfa;hpb=586e2d24be69bc0aca8ad6c2033a4f4d193f5372;p=paraslash.git diff --git a/afs.c b/afs.c index 4bc7871c..a5ec7b2f 100644 --- a/afs.c +++ b/afs.c @@ -501,6 +501,7 @@ static int activate_mood_or_playlist(char *arg, int *num_admissible) enum play_mode mode; int ret; + PARA_INFO_LOG("new playlist: %s\n", arg); if (!arg) { ret = change_current_mood(NULL); /* always successful */ mode = PLAY_MODE_MOOD; @@ -602,31 +603,32 @@ static int com_select_callback(int fd, const struct osl_object *query) ret = clear_score_table(); if (ret < 0) { - para_printf(&pb, "%s\n", para_strerror(-ret)); - goto out; + para_printf(&pb, "could not clear score table: %s\n", + para_strerror(-ret)); + return ret; } if (current_play_mode == PLAY_MODE_MOOD) close_current_mood(); else playlist_close(); ret = activate_mood_or_playlist(arg, &num_admissible); - if (ret < 0) { - para_printf(&pb, "%s\nswitching back to %s\n", - para_strerror(-ret), current_mop? - current_mop : "dummy"); - ret = activate_mood_or_playlist(current_mop, &num_admissible); - if (ret < 0) { - para_printf(&pb, "failed (%s), switching to dummy\n", - para_strerror(-ret)); - activate_mood_or_playlist(NULL, &num_admissible); - } - } else - para_printf(&pb, "activated %s (%d admissible files)\n", - current_mop? current_mop : "dummy mood", - num_admissible); + if (ret >= 0) + goto out; + para_printf(&pb, "could not activate %s: %s\n" + "switching back to %s\n", + arg, para_strerror(-ret), current_mop? current_mop : "dummy"); + /* ignore subsequent errors (but log them) */ + ret = activate_mood_or_playlist(current_mop, &num_admissible); + if (ret >= 0) + goto out; + para_printf(&pb, "could not activate %s: %s\nswitching to dummy\n", + current_mop, para_strerror(-ret)); + activate_mood_or_playlist(NULL, &num_admissible); out: + para_printf(&pb, "activated %s (%d admissible files)\n", + current_mop? current_mop : "dummy mood", num_admissible); flush_and_free_pb(&pb); - return 0; + return ret; } int com_select(struct command_context *cc)