[Goodies-commits] r1879 - xfce4-mpc-plugin/trunk/panel-plugin
Landry Breuil
landry at xfce.org
Thu Aug 10 23:12:49 CEST 2006
Author: landry
Date: 2006-08-10 21:12:48 +0000 (Thu, 10 Aug 2006)
New Revision: 1879
Modified:
xfce4-mpc-plugin/trunk/panel-plugin/xfce4-mpc-plugin.c
xfce4-mpc-plugin/trunk/panel-plugin/xfce4-mpc-plugin.h
Log:
- WIP on 'plain-old-c-socket-interface' with mpd
- holidays \o/
Modified: xfce4-mpc-plugin/trunk/panel-plugin/xfce4-mpc-plugin.c
===================================================================
--- xfce4-mpc-plugin/trunk/panel-plugin/xfce4-mpc-plugin.c 2006-08-10 18:33:06 UTC (rev 1878)
+++ xfce4-mpc-plugin/trunk/panel-plugin/xfce4-mpc-plugin.c 2006-08-10 21:12:48 UTC (rev 1879)
@@ -61,6 +61,7 @@
return mo;
}
+
void mpd_free(MpdObj* mo)
{
DBG("!");
@@ -71,6 +72,7 @@
g_free(mo->pass);
g_free(mo);
}
+
void mpd_connect(MpdObj* mo)
{
struct hostent* remote_he;
@@ -179,12 +181,98 @@
return mo->curvol;
}
-void mpd_status_set_volume(MpdObj* mo, int newvol)
+void mpd_wait_for_OK(MpdObj *mo)
{
+ struct timeval tv;
+ char *temp;
+ int err,nbread;
+ err = nbread = 0;
+ fd_set fds;
+
DBG("!");
+
+ while(!(temp = strstr(mo->buffer,"\n")))
+ {
+ tv.tv_sec = 2;
+ tv.tv_usec = 0;
+ FD_ZERO(&fds);
+ FD_SET(mo->socket,&fds);
+ if((err = select(mo->socket+1,&fds,NULL,NULL,&tv)) == 1)
+ {
+ if ((nbread = recv(mo->socket,&(mo->buffer[mo->buflen]), MAXBUFLEN-mo->buflen,0)) <= 0)
+ {
+ mo->error = MPD_ERROR_NORESPONSE;
+ DBG("ERROR @recv(), err=%s",strerror(errno));
+ return;
+ }
+ mo->buflen+=nbread;
+ mo->buffer[mo->buflen] = '\0';
+ }
+ else if(err < 0)
+ {
+ if (errno == EINTR)
+ continue;
+ mo->error = MPD_ERROR_CONNPORT;
+ DBG("ERROR @select(), err=%s",strerror(errno));
+ return;
+ }
+ else
+ {
+ mo->error = MPD_ERROR_NORESPONSE;
+ DBG("ERROR @select(), timeoute'ed -> err=%s",strerror(errno));
+ return;
+ }
+ }
+
+ DBG("Received \"%s\"",mo->buffer);
+
+ if (strcmp(mo->buffer,"OK\n") != 0)
+ {
+ mo->error = MPD_NOTOK;
+ DBG("ERROR : did not received OK");
+ return;
+ }
+
+ DBG("Received OK from mpd \\o/");
+
+ *temp = '\0';
+ strcpy(mo->buffer, temp+1);
+}
+
+int mpd_send_single_cmd(MpdObj*mo, char* cmd)
+{
+ int nbwri = 0;
+
/* write setvol 'newvol' to socket */
+ if (mo->socket)
+ {
+ DBG("Sending \"%s\"",cmd);
+ if ((nbwri = send(mo->socket, cmd, strlen(cmd), 0)) <= 0)
+ {
+ mo->error = MPD_ERROR_SENDING;
+ DBG("ERROR @send(), err=%s",strerror(errno));
+ return MPD_FAILED;
+ }
+ DBG("Sent %d bytes",nbwri);
+ /* wait for OK */
+ mpd_wait_for_OK(mo);
+ }
+ else
+ {
+ mo->error = MPD_ERROR_NOSOCK;
+ DBG("ERROR : socket == NULL ?");
+ return MPD_FAILED;
+ }
+ return MPD_OK;
}
+void mpd_status_set_volume(MpdObj* mo, int newvol)
+{
+ char outbuf[15];
+ sprintf(outbuf,"setvol %d\n",newvol);
+ mpd_send_single_cmd(mo,outbuf);
+}
+
int mpd_status_update(MpdObj* mo)
{
DBG("!");
@@ -210,11 +298,39 @@
return mo->status;
}
-int mpd_player_prev(MpdObj* mo){return MPD_OK;}
-int mpd_player_next(MpdObj* mo){return MPD_OK;}
-int mpd_player_stop(MpdObj* mo){return MPD_OK;}
-int mpd_player_pause(MpdObj* mo){return MPD_OK;}
+int mpd_player_prev(MpdObj* mo)
+{
+ DBG("!");
+ return mpd_send_single_cmd(mo,"previous\n");
+}
+int mpd_player_next(MpdObj* mo)
+{
+ DBG("!");
+ return mpd_send_single_cmd(mo,"next\n");
+}
+
+int mpd_player_stop(MpdObj* mo)
+{
+ DBG("!");
+ return mpd_send_single_cmd(mo,"stop\n");
+}
+
+int mpd_player_pause(MpdObj* mo)
+{
+ DBG("!");
+ if (mo->status != MPD_PLAYER_PLAY)
+ return mpd_send_single_cmd(mo,"pause 0\n");
+ else
+ return mpd_send_single_cmd(mo,"pause 1\n");
+}
+
+int mpd_player_play(MpdObj* mo)
+{
+ DBG("!");
+ return mpd_send_single_cmd(mo,"play\n");
+}
+
int mpd_check_error(MpdObj* mo)
{
DBG("! return %d",mo->error);
@@ -222,6 +338,8 @@
}
void mpd_send_password(MpdObj* mo){}
+
+
void mpd_set_hostname(MpdObj* mo, char* host)
{
DBG("! new hostname=%s",host);
Modified: xfce4-mpc-plugin/trunk/panel-plugin/xfce4-mpc-plugin.h
===================================================================
--- xfce4-mpc-plugin/trunk/panel-plugin/xfce4-mpc-plugin.h 2006-08-10 18:33:06 UTC (rev 1878)
+++ xfce4-mpc-plugin/trunk/panel-plugin/xfce4-mpc-plugin.h 2006-08-10 21:12:48 UTC (rev 1879)
@@ -33,16 +33,20 @@
#define MPD_PLAYER_PLAY 2
#define MPD_PLAYER_PAUSE 3
#define MPD_OK 0
+#define MPD_FAILED 1
+#define MPD_NOTOK 2
#define MPD_WELCOME_MESSAGE "OK MPD "
#define MAXBUFLEN 1000
-#define MPD_ERROR_NOSOCK 9
-#define MPD_ERROR_TIMEOUT 10 /* timeout trying to talk to mpd */
-#define MPD_ERROR_SYSTEM 11 /* system error */
-#define MPD_ERROR_UNKHOST 12 /* unknown host */
-#define MPD_ERROR_CONNPORT 13 /* problems connecting to port on host */
-#define MPD_ERROR_NOTMPD 14 /* mpd not running on port at host */
+#define MPD_ERROR_NOSOCK 9
+#define MPD_ERROR_TIMEOUT 10 /* timeout trying to talk to mpd */
+#define MPD_ERROR_SYSTEM 11 /* system error */
+#define MPD_ERROR_UNKHOST 12 /* unknown host */
+#define MPD_ERROR_CONNPORT 13 /* problems connecting to port on host */
+#define MPD_ERROR_NOTMPD 14 /* mpd not running on port at host */
#define MPD_ERROR_NORESPONSE 15 /* no response on attempting to connect */
+#define MPD_ERROR_SENDING 16 /* error sending command */
+
typedef struct {
gchar* host;
int port;
More information about the Goodies-commits
mailing list