mpd_edit_queue.c (1348B)
1 #define _POSIX_C_SOURCE 200809L 2 3 #include "mpd_common.h" 4 5 #include <limits.h> 6 #include <string.h> 7 8 static void usage(FILE *file, const char *program) { 9 fprintf(file, "Usage: %s [--force]\n", program); 10 } 11 12 int main(int argc, char **argv) { 13 bool force = false; 14 for (int i = 1; i < argc; i++) { 15 if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "--help") == 0) { 16 usage(stdout, argv[0]); 17 return 0; 18 } 19 if (strcmp(argv[i], "--force") == 0) { 20 force = true; 21 } else { 22 usage(stderr, argv[0]); 23 return 2; 24 } 25 } 26 27 struct mt_strvec tracks; 28 mt_strvec_init(&tracks); 29 struct mpd_connection *connection = mt_connect(); 30 if (connection == NULL) 31 return 1; 32 33 struct mt_player_state state; 34 bool ok = mt_get_player_state(connection, &state); 35 unsigned version = UINT_MAX; 36 if (ok) { 37 version = state.queue_version; 38 mt_player_state_clear(&state); 39 ok = mt_read_queue(connection, &tracks); 40 } 41 mpd_connection_free(connection); 42 43 if (ok) 44 ok = mt_edit_lines(&tracks); 45 if (ok) { 46 connection = mt_connect(); 47 if (connection == NULL) 48 ok = false; 49 else { 50 ok = mt_replace_queue(connection, &tracks, version, force); 51 mpd_connection_free(connection); 52 } 53 } 54 if (ok) 55 printf("Queue updated successfully.\n"); 56 mt_strvec_clear(&tracks); 57 return ok ? 0 : 1; 58 }