X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=afs.c;h=0c615747435657b65ec5302192561fd902c84348;hp=4bc7871cac868a45a2d487cdf5761d9509f19bfa;hb=134e02f7e90d37a3056198d8ba374e0271415d15;hpb=586e2d24be69bc0aca8ad6c2033a4f4d193f5372 diff --git a/afs.c b/afs.c index 4bc7871c..0c615747 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) @@ -1031,7 +1033,7 @@ out: exit(EXIT_FAILURE); } -static int create_tables_callback(int fd, const struct osl_object *query) +static int com_init_callback(int fd, const struct osl_object *query) { uint32_t table_mask = *(uint32_t *)query->data; int i, ret; @@ -1052,16 +1054,18 @@ static int create_tables_callback(int fd, const struct osl_object *query) if (!t->create) continue; ret = t->create(database_dir); - if (ret < 0) + if (ret < 0) { + para_printf(&pb, "cannot create table %s\n", t->name); goto out; + } para_printf(&pb, "successfully created %s table\n", t->name); } ret = open_afs_tables(); -out: if (ret < 0) - para_printf(&pb, "%s\n", para_strerror(-ret)); + para_printf(&pb, "cannot open afs tables\n"); +out: flush_and_free_pb(&pb); - return 0; + return ret; } int com_init(struct command_context *cc) @@ -1089,7 +1093,7 @@ int com_init(struct command_context *cc) return -E_BAD_TABLE_NAME; } } - return send_callback_request(create_tables_callback, &query, + return send_callback_request(com_init_callback, &query, afs_cb_result_handler, cc); }