int cmd_replaygain(int argc, char **argv, struct mpd_connection *connection) { /* libmpdclient 2.0 doesn't support these commands yet, we have to roll our own with mpd_send_command() */ if (mpd_connection_cmp_server_version(connection, 0, 16, 0) < 0) fprintf(stderr, "warning: MPD 0.16 required for this command\n"); if (argc == 0) { struct mpd_pair *pair; mpd_send_command(connection, "replay_gain_status", NULL); while ((pair = mpd_recv_pair(connection)) != NULL) { printf("%s: %s\n", pair->name, pair->value); mpd_return_pair(connection, pair); } my_finishCommand(connection); } else { mpd_send_command(connection, "replay_gain_mode", argv[0], NULL); my_finishCommand(connection); } return 0; }
static int do_search ( int argc, char ** argv, mpd_Connection * conn, int exact ) { Constraint *constraints; int numconstraints; int i; if (argc % 2 != 0) DIE("arguments must be pairs of search types and queries\n"); numconstraints = get_constraints(argc, argv, &constraints); if (numconstraints < 0) return -1; mpd_startSearch(conn, exact); for (i = 0; i < numconstraints; i++) { mpd_addConstraintSearch(conn, constraints[i].type, charset_to_utf8(constraints[i].query)); } free(constraints); mpd_commitSearch(conn); printErrorAndExit(conn); print_filenames(conn); my_finishCommand(conn); return 0; }
void songlist_update(void) { struct mpd_song *song; if (!mpd_send_list_queue_meta(conn)) printErrorAndExit(conn); int i = 0; while ((song = mpd_recv_song(conn)) != NULL && i < MAX_SONGLIST_STORE_LENGTH) { pretty_copy(songlist->meta[i].title, get_song_tag(song, MPD_TAG_TITLE), 512, -1); pretty_copy(songlist->meta[i].pretty_title, get_song_tag(song, MPD_TAG_TITLE), 128, 26); pretty_copy(songlist->meta[i].artist, get_song_tag(song, MPD_TAG_ARTIST), 128, 14); pretty_copy(songlist->meta[i].album, get_song_tag(song, MPD_TAG_ALBUM), 128, -1); songlist->meta[i].id = i + 1; ++i; mpd_song_free(song); } songlist->length = i; my_finishCommand(conn); }
int cmd_tab ( int argc, char ** argv, struct mpd_connection *conn ) { struct mpd_song *song; char empty[] = ""; char *dir = empty; char *tmp = NULL; if (argc == 1) { if (strrchr(argv[0], '/')) { dir = strdup(argv[0]); if (!dir) return 0; tmp = strrchr(dir, '/'); if (tmp) *tmp = '\0'; // XXX: It's unpossible for tmp to be NULL. } } if (!mpd_send_list_all(conn, dir)) printErrorAndExit(conn); if (*dir) free(dir); while ((song = mpd_recv_song(conn)) != NULL) { if (argc != 1 || strncmp(mpd_song_get_uri(song), argv[0], strlen(argv[0])) == 0) printf("%s\n", charset_from_utf8(mpd_song_get_uri(song))); mpd_song_free(song); } my_finishCommand(conn); return 0; }
int cmd_volume ( int argc, char ** argv, mpd_Connection * conn ) { struct int_value_change ch; if(argc==1) { if(!parse_int_value_change(argv[0], &ch)) DIE("\"%s\" is not an integer\n", argv[0]); } else { mpd_Status *status; status = getStatus(conn); printf("volume:%3i%c \n",status->volume,'%'); mpd_freeStatus(status); return 0; } if (ch.is_relative) mpd_sendVolumeCommand(conn,ch.value); else mpd_sendSetvolCommand(conn,ch.value); my_finishCommand(conn); return 1; }
int cmd_ls ( int argc, char ** argv, mpd_Connection * conn ) { mpd_InfoEntity * entity; const char *ls; int i = 0; if (argc > 0) ls = charset_to_utf8(argv[i]); else ls = strdup(""); do { mpd_sendLsInfoCommand(conn,ls); printErrorAndExit(conn); while((entity = mpd_getNextInfoEntity(conn))) { if(entity->type==MPD_INFO_ENTITY_TYPE_DIRECTORY) { mpd_Directory * dir = entity->info.directory; printf("%s\n", charset_from_utf8(dir->path)); } else if(entity->type==MPD_INFO_ENTITY_TYPE_SONG) { struct mpd_song *song = entity->info.song; printf("%s\n", charset_from_utf8(song->file)); } mpd_freeInfoEntity(entity); } my_finishCommand(conn); } while (++i < argc && (ls = charset_to_utf8(argv[i])) != NULL); return 0; }
int cmd_lstab ( int argc, char ** argv, mpd_Connection * conn ) { mpd_InfoEntity * entity; mpd_Directory * dir; mpd_sendListallCommand(conn,""); printErrorAndExit(conn); while((entity = mpd_getNextInfoEntity(conn))) { if(entity->type==MPD_INFO_ENTITY_TYPE_DIRECTORY) { dir = entity->info.directory; if(argc==1) { if(strncmp(dir->path,argv[0], strlen(argv[0]))==0) { printf("%s\n", charset_from_utf8(dir->path)); } } } mpd_freeInfoEntity(entity); } my_finishCommand(conn); return 0; }
int cmd_lsplaylists ( int argc, char ** argv, mpd_Connection * conn ) { mpd_InfoEntity * entity; const char * ls = ""; int i = 0; if(argc>0) ls = charset_to_utf8(argv[i]); do { mpd_sendLsInfoCommand(conn,ls); printErrorAndExit(conn); while((entity = mpd_getNextInfoEntity(conn))) { if(entity->type== MPD_INFO_ENTITY_TYPE_PLAYLISTFILE) { mpd_PlaylistFile * pl = entity->info.playlistFile; printf("%s\n", charset_from_utf8(pl->path)); } mpd_freeInfoEntity(entity); } my_finishCommand(conn); } while (++i < argc && (ls = charset_to_utf8(argv[i])) != NULL); return 0; }
int cmd_playlist(mpd_unused int argc, mpd_unused char **argv, mpd_Connection *conn) { mpd_InfoEntity * entity; mpd_Status * status; int count = 0; mpd_sendStatusCommand(conn); printErrorAndExit(conn); status = mpd_getStatus(conn); printErrorAndExit(conn); mpd_finishCommand(conn); mpd_sendPlaylistInfoCommand(conn,-1); printErrorAndExit(conn); while((entity = mpd_getNextInfoEntity(conn))) { if(entity->type==MPD_INFO_ENTITY_TYPE_SONG) { struct mpd_song *song = entity->info.song; printf("%s%i) ", (status->song == count)?">":" ", 1+count); pretty_print_song(song); printf("\n"); count++; } mpd_freeInfoEntity(entity); } my_finishCommand(conn); mpd_freeStatus(status); return 0; }
static unsigned match_outputs(struct mpd_connection *conn, char **names, char **names_end, unsigned **ids_end) { unsigned max = 0, *id = *ids_end; mpd_send_outputs(conn); struct mpd_output *output; while ((output = mpd_recv_output(conn)) != NULL) { const char *name = mpd_output_get_name(output); max = mpd_output_get_id(output); for (char **n = names; n != names_end; ++n) { if (!strcmp(*n, name)) { *id = max; ++id; *n = *names; ++names; break; } } mpd_output_free(output); } my_finishCommand(conn); for (char **n = names; n != names_end; ++n) { fprintf(stderr, "%s: no such output\n", *n); } *ids_end = id; return max; }
int cmd_tab ( int argc, char ** argv, mpd_Connection * conn ) { mpd_InfoEntity * entity; struct mpd_song *song; mpd_sendListallCommand(conn,""); printErrorAndExit(conn); while((entity = mpd_getNextInfoEntity(conn))) { if(entity->type==MPD_INFO_ENTITY_TYPE_SONG) { song = entity->info.song; if(argc==1) { if(strncmp(song->file,argv[0], strlen(argv[0]))==0) { printf("%s\n", charset_from_utf8(song->file)); } } else printf("%s\n", charset_from_utf8(song->file)); } mpd_freeInfoEntity(entity); } my_finishCommand(conn); return 0; }
int cmd_play ( int argc, char ** argv, mpd_Connection * conn ) { int song; int i; if(0==argc) song = MPD_PLAY_AT_BEGINNING; else { mpd_Status *status; for(i=0;i<argc-1;i++) printf("skipping: %s\n",argv[i]); if(!parse_songnum(argv[i], &song)) DIE("error parsing song numbers from: %s\n",argv[i]); song--; /* This is necessary, otherwise mpc will output the wrong playlist number */ status = getStatus(conn); i = status->playlistLength; mpd_freeStatus(status); if(song >= i) DIE("song number greater than playlist length.\n"); } mpd_sendPlayCommand(conn,song); my_finishCommand(conn); return 1; }
int cmd_listall(int argc, char **argv, struct mpd_connection *conn) { const char * listall = ""; int i = 0; if (argc > 0) listall = charset_to_utf8(argv[i]); do { char *tmp = strdup(listall); strip_trailing_slash(tmp); if (options.custom_format) { if (!mpd_send_list_all_meta(conn, tmp)) printErrorAndExit(conn); print_entity_list(conn, MPD_ENTITY_TYPE_UNKNOWN); } else { if (!mpd_send_list_all(conn, tmp)) printErrorAndExit(conn); print_filenames(conn); } my_finishCommand(conn); free(tmp); } while (++i < argc && (listall = charset_to_utf8(argv[i])) != NULL); return 0; }
int cmd_list(int argc, char **argv, struct mpd_connection *conn) { enum mpd_tag_type type = get_search_type(argv[0]); if (type == MPD_TAG_UNKNOWN) return -1; --argc; ++argv; mpd_search_db_tags(conn, type); if (argc > 0 && !add_constraints(argc, argv, conn)) return -1; if (!mpd_search_commit(conn)) printErrorAndExit(conn); struct mpd_pair *pair; while ((pair = mpd_recv_pair_tag(conn, type)) != NULL) { printf("%s\n", charset_from_utf8(pair->value)); mpd_return_pair(conn, pair); } my_finishCommand(conn); return 0; }
int cmd_loadtab ( int argc, char ** argv, mpd_Connection * conn ) { mpd_InfoEntity * entity; char * sp; mpd_PlaylistFile * pl; mpd_sendLsInfoCommand(conn,""); printErrorAndExit(conn); while((entity = mpd_getNextInfoEntity(conn))) { if(entity->type==MPD_INFO_ENTITY_TYPE_PLAYLISTFILE) { pl = entity->info.playlistFile; sp = pl->path; while((sp = strchr(sp,' '))) *sp = '_'; if(argc==1) { if(strncmp(pl->path,argv[0], strlen(argv[0]))==0) { printf("%s\n", charset_from_utf8(pl->path)); } } } mpd_freeInfoEntity(entity); } my_finishCommand(conn); return 0; }
int cmd_pause(mpd_unused int argc, mpd_unused char **argv, mpd_Connection *conn) { mpd_sendPauseCommand(conn,1); my_finishCommand(conn); return 1; }
int cmd_pause(mpd_unused int argc, mpd_unused char **argv, struct mpd_connection *conn) { mpd_send_pause(conn, true); my_finishCommand(conn); return 1; }
int cmd_load ( int argc, char ** argv, mpd_Connection * conn ) { int i; char * sp; char * dp; mpd_InfoEntity * entity; mpd_PlaylistFile * pl; for(i=0;i<argc;i++) { sp = argv[i]; while((sp = strchr(sp,' '))) *sp = '_'; } mpd_sendLsInfoCommand(conn,""); printErrorAndExit(conn); while((entity = mpd_getNextInfoEntity(conn))) { if(entity->type==MPD_INFO_ENTITY_TYPE_PLAYLISTFILE) { pl = entity->info.playlistFile; dp = sp = strdup(charset_from_utf8(pl->path)); while((sp = strchr(sp,' '))) *sp = '_'; for(i=0;i<argc;i++) { if(strcmp(dp,argv[i])==0) strcpy(argv[i], charset_from_utf8(pl->path)); } free(dp); mpd_freeInfoEntity(entity); } } my_finishCommand(conn); mpd_sendCommandListBegin(conn); printErrorAndExit(conn); for(i=0;i<argc;i++) { printf("loading: %s\n",argv[i]); mpd_sendLoadCommand(conn,charset_to_utf8(argv[i])); printErrorAndExit(conn); } mpd_sendCommandListEnd(conn); my_finishCommand(conn); return 0; }
int cmd_findadd(int argc, char **argv, struct mpd_connection *conn) { mpd_search_add_db_songs(conn, true); if (!add_constraints(argc, argv, conn)) return -1; if (!mpd_search_commit(conn)) printErrorAndExit(conn); my_finishCommand(conn); return 0; }
int cmd_load ( int argc, char ** argv, struct mpd_connection *conn ) { if (!mpd_command_list_begin(conn, false)) printErrorAndExit(conn); for (int i = 0; i < argc; ++i) { printf("loading: %s\n",argv[i]); mpd_send_load(conn, charset_to_utf8(argv[i])); } mpd_command_list_end(conn); my_finishCommand(conn); return 0; }
int cmd_list ( int argc, char ** argv, mpd_Connection * conn ) { Constraint *constraints; int numconstraints = 0; int type; int i; char *tag; type = get_search_type(argv[0]); if (type < 0) return -1; argc -= 1; argv += 1; if (argc > 0) { if (argc % 2 != 0) { DIE("arguments must be a tag type and " "optional pairs of search types and queries\n"); } numconstraints = get_constraints(argc, argv, &constraints); if (numconstraints < 0) return -1; } mpd_startFieldSearch(conn, type); if (argc > 0) { for (i = 0; i < numconstraints; i++) { mpd_addConstraintSearch(conn, constraints[i].type, charset_to_utf8(constraints[i].query)); } free(constraints); } mpd_commitSearch(conn); printErrorAndExit(conn); while ((tag = mpd_getNextTag(conn, type))) { printErrorAndExit(conn); printf("%s\n", charset_from_utf8(tag)); free(tag); } my_finishCommand(conn); return 0; }
int cmd_replaygain(int argc, char **argv, struct mpd_connection *connection) { /* libmpdclient 2.0 doesn't support these commands yet, we have to roll our own with mpd_send_command() */ if (argc == 0) { mpd_send_command(connection, "replay_gain_status", NULL); struct mpd_pair *pair; while ((pair = mpd_recv_pair(connection)) != NULL) { printf("%s: %s\n", pair->name, pair->value); mpd_return_pair(connection, pair); } my_finishCommand(connection); } else { mpd_send_command(connection, "replay_gain_mode", argv[0], NULL); my_finishCommand(connection); } return 0; }
static int do_search(int argc, char ** argv, struct mpd_connection *conn, bool exact) { mpd_search_db_songs(conn, exact); if (!add_constraints(argc, argv, conn)) return -1; if (!mpd_search_commit(conn)) printErrorAndExit(conn); print_entity_list(conn, MPD_ENTITY_TYPE_SONG); my_finishCommand(conn); return 0; }
static int do_search ( int argc, char ** argv, struct mpd_connection *conn, int exact ) { mpd_search_db_songs(conn, exact); if (!add_constraints(argc, argv, conn)) return -1; if (!mpd_search_commit(conn)) printErrorAndExit(conn); print_filenames(conn); my_finishCommand(conn); return 0; }
int cmd_playlist(mpd_unused int argc, mpd_unused char **argv, struct mpd_connection *conn) { struct mpd_song *song; if (!mpd_send_list_queue_meta(conn)) printErrorAndExit(conn); while ((song = mpd_recv_song(conn)) != NULL) { pretty_print_song(song); mpd_song_free(song); printf("\n"); } my_finishCommand(conn); return 0; }
int cmd_add (int argc, char ** argv, mpd_Connection * conn ) { int i; mpd_sendCommandListBegin(conn); printErrorAndExit(conn); for(i=0;i<argc;i++) { printf("adding: %s\n", argv[i]); mpd_sendAddCommand(conn, charset_to_utf8(argv[i])); printErrorAndExit(conn); } mpd_sendCommandListEnd(conn); my_finishCommand(conn); return 0; }
static int ls_entity(int argc, char **argv, struct mpd_connection *conn, enum mpd_entity_type type) { const char *ls = ""; int i = 0; if (argc > 0) ls = charset_to_utf8(argv[i]); do { if (!mpd_send_list_meta(conn, ls)) printErrorAndExit(conn); print_entity_list(conn, type); my_finishCommand(conn); } while (++i < argc && (ls = charset_to_utf8(argv[i])) != NULL); return 0; }
int cmd_mixrampdb ( int argc, char ** argv, struct mpd_connection *conn ) { if(argc==1) { float db; if(!parse_float(argv[0], &db)) DIE("\"%s\" is not a floating point number\n",argv[0]); mpd_run_mixrampdb(conn, db); my_finishCommand(conn); } else { struct mpd_status *status = getStatus(conn); printf("mixrampdb: %f\n", mpd_status_get_mixrampdb(status)); mpd_status_free(status); } return 0; }
int cmd_listall ( int argc, char ** argv, mpd_Connection * conn ) { const char * listall = ""; int i=0; if (argc > 0) listall = charset_to_utf8(argv[i]); do { mpd_sendListallCommand(conn,listall); printErrorAndExit(conn); print_filenames(conn); my_finishCommand(conn); } while (++i < argc && (listall = charset_to_utf8(argv[i])) != NULL); return 0; }
int cmd_consume ( int argc, char ** argv, mpd_Connection * conn ) { int mode; if(argc==1) { mode = get_boolean(argv[0]); if (mode < 0) return -1; } else { mpd_Status * status; status = getStatus(conn); mode = !status->consume; mpd_freeStatus(status); } mpd_sendConsumeCommand(conn,mode); my_finishCommand(conn); return 1; }