tools

various tools I have been using throughout the years
Log | Files | Refs | README | LICENSE

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 }