summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: d9ca969)
raw | patch | inline | side by side (parent: d9ca969)
author | Kalle Wallin <kaw@linux.se> | |
Fri, 19 Mar 2004 14:18:06 +0000 (14:18 +0000) | ||
committer | Kalle Wallin <kaw@linux.se> | |
Fri, 19 Mar 2004 14:18:06 +0000 (14:18 +0000) |
libmpdclient.c | patch | blob | history | |
libmpdclient.h | patch | blob | history |
diff --git a/libmpdclient.c b/libmpdclient.c
index e3f3b950109070e5c9f0816bb093863f2c00d7b6..a58ca06e0cdd3a1992e0de86a189fa6934dd360d 100644 (file)
--- a/libmpdclient.c
+++ b/libmpdclient.c
/* libmpdclient
- * (c)2002 by Warren Dukes (shank@mercury.chem.pitt.edu)
+ * (c)2003-2004 by Warren Dukes (shank@mercury.chem.pitt.edu)
* This project's homepage is: http://www.musicpd.org
*
* This library is free software; you can redistribute it and/or
void mpd_setConnectionTimeout(mpd_Connection * connection, float timeout) {
connection->timeout.tv_sec = (int)timeout;
- connection->timeout.tv_usec = (int)((timeout -
- connection->timeout.tv_sec)/1e+6+0.5);
+ connection->timeout.tv_usec = (int)(timeout*1e6 -
+ connection->timeout.tv_sec*1000000+0.5);
}
mpd_Connection * mpd_newConnection(const char * host, int port, float timeout) {
@@ -243,7 +243,8 @@ mpd_Connection * mpd_newConnection(const char * host, int port, float timeout) {
if(readed<=0) {
snprintf(connection->errorStr,MPD_BUFFER_MAX_LENGTH,
"problems getting a response from"
- " \"%s\" on port %i",host,port);
+ " \"%s\" on port %i",host,
+ port);
connection->error = MPD_ERROR_NORESPONSE;
return connection;
}
status->elapsedTime = 0;
status->totalTime = 0;
status->bitRate = 0;
+ status->sampleRate = 0;
+ status->bits = 0;
+ status->channels = 0;
+ status->crossfade = -1;
status->error = NULL;
mpd_getNextReturnElement(connection);
else if(strcmp(re->name,"error")==0) {
status->error = strdup(re->value);
}
+ else if(strcmp(re->name,"xfade")==0) {
+ status->crossfade = atoi(re->value);
+ }
+ else if(strcmp(re->name,"audio")==0) {
+ char * tok;
+ char * copy;
+ copy = strdup(re->value);
+ status->sampleRate = atoi(strtok_r(copy,":",&tok));
+ status->bits = atoi(strtok_r(NULL,":",&tok));
+ status->channels = atoi(strtok_r(NULL,"",&tok));
+ free(copy);
+ }
mpd_getNextReturnElement(connection);
if(connection->error) {
free(status);
}
+mpd_Stats * mpd_getStats(mpd_Connection * connection) {
+ mpd_Stats * stats;
+
+ mpd_executeCommand(connection,"stats\n");
+
+ if(connection->error) return NULL;
+
+ stats = malloc(sizeof(mpd_Stats));
+ stats->numberOfArtists = 0;
+ stats->numberOfAlbums = 0;
+ stats->numberOfSongs = 0;
+ stats->uptime = 0;
+ stats->dbUpdateTime = 0;
+
+ mpd_getNextReturnElement(connection);
+ if(connection->error) {
+ free(stats);
+ return NULL;
+ }
+ while(connection->returnElement) {
+ mpd_ReturnElement * re = connection->returnElement;
+ if(strcmp(re->name,"artists")==0) {
+ stats->numberOfArtists = atoi(re->value);
+ }
+ else if(strcmp(re->name,"albums")==0) {
+ stats->numberOfAlbums = atoi(re->value);
+ }
+ else if(strcmp(re->name,"songs")==0) {
+ stats->numberOfSongs = atoi(re->value);
+ }
+ else if(strcmp(re->name,"uptime")==0) {
+ stats->uptime = strtol(re->value,NULL,10);
+ }
+ else if(strcmp(re->name,"db_update")==0) {
+ stats->dbUpdateTime = strtol(re->value,NULL,10);
+ }
+
+ mpd_getNextReturnElement(connection);
+ if(connection->error) {
+ free(stats);
+ return NULL;
+ }
+ }
+
+ if(connection->error) {
+ free(stats);
+ return NULL;
+ }
+
+ return stats;
+}
+
+void mpd_freeStats(mpd_Stats * stats) {
+ free(stats);
+}
+
void mpd_initSong(mpd_Song * song) {
song->file = NULL;
song->artist = NULL;
free(string);
}
+void mpd_sendSetvolCommand(mpd_Connection * connection, int volumeChange) {
+ char * string = malloc(strlen("setvol")+25);
+ sprintf(string,"setvol \"%i\"\n",volumeChange);
+ mpd_executeCommand(connection,string);
+ free(string);
+}
+
void mpd_sendVolumeCommand(mpd_Connection * connection, int volumeChange) {
char * string = malloc(strlen("volume")+25);
sprintf(string,"volume \"%i\"\n",volumeChange);
free(string);
}
+void mpd_sendCrossfadeCommand(mpd_Connection * connection, int seconds) {
+ char * string = malloc(strlen("crossfade")+25);
+ sprintf(string,"crossfade \"%i\"\n",seconds);
+ mpd_executeCommand(connection,string);
+ free(string);
+}
+
+void mpd_sendPasswordCommand(mpd_Connection * connection, const char * pass) {
+ char * sPass = mpd_sanitizeArg(pass);
+ char * string = malloc(strlen("password")+strlen(sPass)+5);
+ sprintf(string,"password \"%s\"\n",sPass);
+ mpd_executeCommand(connection,string);
+ free(string);
+ free(sPass);
+}
+
void mpd_sendCommandListBegin(mpd_Connection * connection) {
if(connection->commandList) {
strcpy(connection->errorStr,"already in command list mode");
diff --git a/libmpdclient.h b/libmpdclient.h
index 0ea84b1ac474a274f85e620e6d76773d59dad3ce..217203021a2461b73801a089c62622c2db50b828 100644 (file)
--- a/libmpdclient.h
+++ b/libmpdclient.h
/* libmpdclient
- * (c)2002 by Warren Dukes (shank@mercury.chem.pitt.edu)
+ * (c)2003-2004 by Warren Dukes (shank@mercury.chem.pitt.edu)
* This project's homepage is: http://www.musicpd.org
*
* This library is free software; you can redistribute it and/or
long long playlist;
/* use with MPD_STATUS_STATE_* to determine state of player */
int state;
+ /* crossfade setting in seconds */
+ int crossfade;
/* if in PLAY or PAUSE state, this is the number of the currently
* playing song in the playlist, beginning with 0
*/
int totalTime;
/* current bit rate in kbs */
int bitRate;
+ /* audio sample rate */
+ unsigned int sampleRate;
+ /* audio bits */
+ int bits;
+ /* audio channels */
+ int channels;
/* error */
char * error;
} mpd_Status;
*/
void mpd_freeStatus(mpd_Status * status);
+typedef struct _mpd_Stats {
+ int numberOfArtists;
+ int numberOfAlbums;
+ int numberOfSongs;
+ unsigned long uptime;
+ unsigned long dbUpdateTime;
+ unsigned long playTime;
+ unsigned long dbPlayTime;
+} mpd_Stats;
+
+mpd_Stats * mpd_getStats(mpd_Connection * connection);
+
+void mpd_freeStats(mpd_Stats * stats);
+
/* SONG STUFF */
#define MPD_SONG_NO_TIME -1
void mpd_sendRandomCommand(mpd_Connection * connection, int randomMode);
+void mpd_sendSetvolCommand(mpd_Connection * connection, int volumeChange);
+
+/* WARNING: don't use volume command, its depreacted */
void mpd_sendVolumeCommand(mpd_Connection * connection, int volumeChange);
+void mpd_sendCrossfadeCommand(mpd_Connection * connection, int seconds);
+
+int mpd_getCrossfade(mpd_Connection * connection);
+
void mpd_sendUpdateCommand(mpd_Connection * connection);
+void mpd_sendPasswordCommand(mpd_Connection * connection, const char * pass);
+
/* after executing a command, when your done with it to get its status
* (you want to check connection->error for an error)
*/