mirror of
https://github.com/Llewellynvdm/conky.git
synced 2024-12-25 04:06:03 +00:00
xmms work continued
git-svn-id: https://conky.svn.sourceforge.net/svnroot/conky/trunk/conky@488 7f574dfc-610e-0410-a909-a81674777703
This commit is contained in:
parent
6d24365953
commit
896a5ce701
38
configure.in
38
configure.in
@ -85,48 +85,42 @@ dnl XMMS_SUPPORT
|
||||
dnl
|
||||
|
||||
xmms_support=none
|
||||
AC_ARG_ENABLE(xmms-support,
|
||||
[ --enable-xmms-support[[=project]]
|
||||
Specify the XMMS-related Project:
|
||||
none: none [[default]]
|
||||
xmms: XMMS (version 1) Support
|
||||
bmp: Beep Media Player (not BMPx) Support
|
||||
audacious: Audacious (version >= 0.1) Media Player Support
|
||||
infopipe: XMMS/BMP InfoPipe (version 1.3) Plugin Support ],
|
||||
AC_ARG_ENABLE(xmms,
|
||||
[ --enable-xmms[[=project]] none,xmms,bmp,audacious,infopipe [[default=none]]],
|
||||
[xmms_support="$enableval"])
|
||||
|
||||
case x$xmms_support in
|
||||
xnone|xyes|xno)
|
||||
;;
|
||||
xxmms)
|
||||
AC_DEFINE(XMMS_H, 1, [Define for XMMS support])
|
||||
AC_DEFINE(XMMS, 1, [Define for XMMS Version 1 support])
|
||||
echo "Sorry, xmms isn't supported yet"
|
||||
exit -1
|
||||
;;
|
||||
xbmp)
|
||||
PKG_CHECK_MODULES([BMP], [bmp], [])
|
||||
CFLAGS="$CFLAGS $BMP_CFLAGS"
|
||||
LIBS="$LIBS $BMP_LIBS"
|
||||
AC_DEFINE(BMP_H, 1, [Define for BMP support])
|
||||
PKG_CHECK_MODULES([XMMS], [bmp], [])
|
||||
CFLAGS="$CFLAGS $XMMS_CFLAGS"
|
||||
LIBS="$LIBS $XMMS_LIBS"
|
||||
AC_DEFINE(BMP, 1, [Define for BMP support])
|
||||
;;
|
||||
xaudacious)
|
||||
PKG_CHECK_MODULES([AUDACIOUS], [audacious >= 0.1])
|
||||
CFLAGS="$CFLAGS $AUDACIOUS_CFLAGS"
|
||||
LIBS="$LIBS $AUDACIOUS_LIBS"
|
||||
AC_DEFINE(AUDACIOUS_H, 1, [Define for Audacious support])
|
||||
PKG_CHECK_MODULES([XMMS], [audacious >= 0.1])
|
||||
CFLAGS="$CFLAGS $XMMS_CFLAGS"
|
||||
LIBS="$LIBS $XMMS_LIBS"
|
||||
AC_DEFINE(AUDACIOUS, 1, [Define for Audacious support])
|
||||
;;
|
||||
xinfopipe)
|
||||
AC_DEFINE(INFOPIPE_H, 1, [Define for XMMS/BMP InfoPipe support])
|
||||
AC_DEFINE(INFOPIPE, 1, [Define for XMMS/BMP InfoPipe support])
|
||||
;;
|
||||
*)
|
||||
echo "Error: invalid xmms-status specified: $xmms_support"
|
||||
echo "Error: invalid xmms support specified: $xmms_support"
|
||||
exit -1
|
||||
;;
|
||||
esac
|
||||
AM_CONDITIONAL(BUILD_XMMS, test x$xmms_support = xxmms)
|
||||
AM_CONDITIONAL(BUILD_XMMS_BMP, test x$xmms_support = xbmp)
|
||||
AM_CONDITIONAL(BUILD_XMMS_AUDACIOUS, test x$xmms_support = xaudacious)
|
||||
AM_CONDITIONAL(BUILD_XMMS_INFOPIPE, test x$xmms_support = xinfopipe)
|
||||
AM_CONDITIONAL(BUILD_BMP, test x$xmms_support = xbmp)
|
||||
AM_CONDITIONAL(BUILD_AUDACIOUS, test x$xmms_support = xaudacious)
|
||||
AM_CONDITIONAL(BUILD_INFOPIPE, test x$xmms_support = xinfopipe)
|
||||
|
||||
dnl
|
||||
dnl BMPx
|
||||
|
@ -4,15 +4,15 @@ if BUILD_XMMS
|
||||
xmms = xmms.c xmms.h
|
||||
endif
|
||||
|
||||
if BUILD_XMMS_BMP
|
||||
if BUILD_BMP
|
||||
xmms = xmms.c xmms.h
|
||||
endif
|
||||
|
||||
if BUILD_XMMS_AUDACIOUS
|
||||
if BUILD_AUDACIOUS
|
||||
xmms = xmms.c xmms.h
|
||||
endif
|
||||
|
||||
if BUILD_XMMS_INFOPIPE
|
||||
if BUILD_INFOPIPE
|
||||
xmms = xmms.c xmms.h
|
||||
endif
|
||||
|
||||
|
@ -226,7 +226,7 @@ void update_stuff()
|
||||
if (NEED(INFO_MPD))
|
||||
update_mpd();
|
||||
#endif
|
||||
#if defined(XMMS_H) || defined(BMP_H) || defined(AUDACIOUS_H) || defined(INFOPIPE_H)
|
||||
#if defined(XMMS) || defined(BMP) || defined(AUDACIOUS) || defined(INFOPIPE)
|
||||
if (NEED(INFO_XMMS))
|
||||
update_xmms();
|
||||
#endif
|
||||
|
10
src/conky.c
10
src/conky.c
@ -892,7 +892,7 @@ enum text_object_type {
|
||||
OBJ_mpd_track,
|
||||
OBJ_mpd_percent,
|
||||
#endif
|
||||
#if defined(XMMS_H) || defined(BMP_H) || defined(AUDACIOUS_H) || defined(INFOPIPE_H)
|
||||
#if defined(XMMS) || defined(BMP) || defined(AUDACIOUS) || defined(INFOPIPE)
|
||||
OBJ_xmms_status,
|
||||
OBJ_xmms_title,
|
||||
OBJ_xmms_length,
|
||||
@ -1809,7 +1809,7 @@ int a = stippled_borders, b = 1;
|
||||
(void) scan_bar(arg, &obj->data.pair.a, &obj->data.pair.b);
|
||||
END
|
||||
#endif
|
||||
#if defined(XMMS_H) || defined(BMP_H) || defined(AUDACIOUS_H) || defined(INFOPIPE_H)
|
||||
#if defined(XMMS) || defined(BMP) || defined(AUDACIOUS) || defined(INFOPIPE)
|
||||
OBJ(xmms_status, INFO_XMMS) END
|
||||
OBJ(xmms_title, INFO_XMMS) END
|
||||
OBJ(xmms_length, INFO_XMMS) END
|
||||
@ -3101,7 +3101,7 @@ static void generate_text_internal(char *p, int p_max_size, struct text_object *
|
||||
255.0f));
|
||||
}
|
||||
#endif
|
||||
#if defined(XMMS_H) || defined(BMP_H) || defined(AUDACIOUS_H) || defined(INFOPIPE_H)
|
||||
#if defined(XMMS) || defined(BMP) || defined(AUDACIOUS) || defined(INFOPIPE)
|
||||
OBJ(xmms_status) {
|
||||
snprintf(p, p_max_size, "%s", cur->xmms.items[XMMS_STATUS]);
|
||||
}
|
||||
@ -5485,7 +5485,7 @@ int main(int argc, char **argv)
|
||||
ERR("error setting signal handler: %s", strerror(errno) );
|
||||
}
|
||||
|
||||
#if defined(XMMS_H) || defined(BMP_H) || defined(AUDACIOUS_H) || defined(INFOPIPE_H)
|
||||
#if defined(XMMS) || defined(BMP) || defined(AUDACIOUS) || defined(INFOPIPE)
|
||||
/* joinable thread for xmms activity */
|
||||
pthread_attr_init(&info.xmms.thread_attr);
|
||||
pthread_attr_setdetachstate(&info.xmms.thread_attr, PTHREAD_CREATE_JOINABLE);
|
||||
@ -5504,7 +5504,7 @@ int main(int argc, char **argv)
|
||||
|
||||
main_loop();
|
||||
|
||||
#if defined(XMMS_H) || defined(BMP_H) || defined(AUDACIOUS_H) || defined(INFOPIPE_H)
|
||||
#if defined(XMMS) || defined(BMP) || defined(AUDACIOUS) || defined(INFOPIPE)
|
||||
/* signal xmms worker thread to terminate */
|
||||
pthread_mutex_lock(&info.xmms.runnable_mutex);
|
||||
info.xmms.runnable=0;
|
||||
|
@ -9,7 +9,7 @@
|
||||
#ifndef _conky_h_
|
||||
#define _conky_h_
|
||||
|
||||
#if defined(XMMS_H) || defined(BMP_H) || defined(AUDACIOUS_H) || defined(INFOPIPE_H)
|
||||
#if defined(XMMS) || defined(BMP) || defined(AUDACIOUS) || defined(INFOPIPE)
|
||||
#include <pthread.h>
|
||||
#endif
|
||||
#if defined(HAS_MCHECK_H)
|
||||
@ -127,7 +127,7 @@ struct mpd_s {
|
||||
};
|
||||
#endif
|
||||
|
||||
#if defined(XMMS_H) || defined(BMP_H) || defined(AUDACIOUS_H) || defined(INFOPIPE_H)
|
||||
#if defined(XMMS) || defined(BMP) || defined(AUDACIOUS) || defined(INFOPIPE)
|
||||
#include "xmms.h"
|
||||
struct xmms_s {
|
||||
xmms_t items; /* e.g. items[XMMS_STATUS] yields char[] */
|
||||
@ -188,7 +188,7 @@ enum {
|
||||
#ifdef TCP_PORT_MONITOR
|
||||
INFO_TCP_PORT_MONITOR = 22,
|
||||
#endif
|
||||
#if defined(XMMS_H) || defined(BMP_H) || defined(AUDACIOUS_H) || defined(INFOPIPE_H)
|
||||
#if defined(XMMS) || defined(BMP) || defined(AUDACIOUS) || defined(INFOPIPE)
|
||||
INFO_XMMS = 23,
|
||||
#endif
|
||||
#ifdef BMPX
|
||||
@ -237,7 +237,7 @@ struct information {
|
||||
struct mpd_s mpd;
|
||||
mpd_Connection *conn;
|
||||
#endif
|
||||
#if defined(XMMS_H) || defined(BMP_H) || defined(AUDACIOUS_H) || defined(INFOPIPE_H)
|
||||
#if defined(XMMS) || defined(BMP) || defined(AUDACIOUS) || defined(INFOPIPE)
|
||||
struct xmms_s xmms;
|
||||
#endif
|
||||
#ifdef BMPX
|
||||
|
149
src/infopipe.c
149
src/infopipe.c
@ -1,149 +0,0 @@
|
||||
/* -------------------------------------------------------------------------
|
||||
* infopipe.c: conky support for XMMS/BMP InfoPipe plugin
|
||||
*
|
||||
* http://www.beastwithin.org/users/wwwwolf/code/xmms/infopipe.html
|
||||
*
|
||||
* Copyright (C) 2005 Philip Kovacs kovacsp3@comcast.net
|
||||
*
|
||||
* Based on original ideas and code graciously presented by:
|
||||
* Ulrich Jansen - ulrich( dot )jansen( at )rwth-aachen.de
|
||||
*
|
||||
* $Id$
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* --------------------------------------------------------------------------- */
|
||||
|
||||
#include <pthread.h>
|
||||
#include <sys/select.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/types.h>
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "infopipe.h"
|
||||
#include "conky.h"
|
||||
|
||||
/* access to this item array is synchronized with mutexes */
|
||||
static infopipe_t g_items;
|
||||
|
||||
/* ----------------------------------------
|
||||
* Conky update function for InfoPipe data.
|
||||
* ---------------------------------------- */
|
||||
void update_infopipe(void)
|
||||
{
|
||||
/*
|
||||
The worker thread is updating the g_items array asynchronously to the main
|
||||
conky thread. We merely copy the g_items array into the main thread's info
|
||||
structure when the main thread's update cycle fires. Note that using the
|
||||
mutexes here makes it easier since we won't have to do any sync in conky.c.
|
||||
*/
|
||||
pthread_mutex_lock(&info.infopipe.item_mutex);
|
||||
memcpy(&info.infopipe.items,g_items,sizeof(g_items));
|
||||
pthread_mutex_unlock(&info.infopipe.item_mutex);
|
||||
}
|
||||
|
||||
|
||||
/* --------------------------------------------------
|
||||
* Worker thread function for InfoPipe data sampling.
|
||||
* -------------------------------------------------- */
|
||||
void *infopipe_thread_func(void *pvoid)
|
||||
{
|
||||
int i,rc,fd,runnable;
|
||||
fd_set readset;
|
||||
struct timeval tm;
|
||||
static char buf[2048]; /* should equal or exceed sizeof(infopipe_t) */
|
||||
static infopipe_t items;
|
||||
char *pbuf,c;
|
||||
|
||||
pvoid=(void*)pvoid; /* useless cast to avoid unused var warning */
|
||||
|
||||
/* Grab the runnable signal. Should be non-zero here or we do nothing. */
|
||||
pthread_mutex_lock(&info.infopipe.runnable_mutex);
|
||||
runnable=info.infopipe.runnable;
|
||||
pthread_mutex_unlock(&info.infopipe.runnable_mutex );
|
||||
|
||||
/* Loop until the main thread sets the runnable signal to 0. */
|
||||
while(runnable) {
|
||||
|
||||
for (;;) { /* convenience loop so we can break below */
|
||||
|
||||
memset(buf,0,sizeof(buf));
|
||||
|
||||
if ((fd=open(INFOPIPE_NAMED_PIPE, O_RDONLY | O_NONBLOCK)) < 0) {
|
||||
/* InfoPipe is not running */
|
||||
memset(items,0,sizeof(items));
|
||||
strcpy(items[INFOPIPE_STATUS],"Not running");
|
||||
break;
|
||||
}
|
||||
|
||||
FD_ZERO(&readset);
|
||||
FD_SET(fd,&readset);
|
||||
|
||||
/* On Linux, select() reduces the timer by the amount of time not slept,
|
||||
* so we must reset the timer with each loop. */
|
||||
tm.tv_sec=1;
|
||||
tm.tv_usec=0;
|
||||
rc=select(fd+1,&readset,NULL,NULL,&tm);
|
||||
|
||||
if (rc == -1) {
|
||||
/* -- debug --
|
||||
perror("infopipe select()");
|
||||
*/
|
||||
}
|
||||
else if (rc && FD_ISSET(fd,&readset)) { /* ready to read */
|
||||
|
||||
if (read(fd,buf,sizeof(buf)) > 0) { /* buf has data */
|
||||
|
||||
pbuf=buf;
|
||||
for (i=0;i<14;i++) {
|
||||
/* 14 lines of key: value pairs presented in a known order */
|
||||
if ( sscanf(pbuf,"%*[^:]: %[^\n]",items[i]) == EOF )
|
||||
break;
|
||||
while((c = *pbuf++) && (c != '\n'));
|
||||
}
|
||||
|
||||
/* -- debug --
|
||||
for(i=0;i<14;i++)
|
||||
printf("%s\n",items[i]);
|
||||
*/
|
||||
}
|
||||
}
|
||||
else {
|
||||
/* -- debug --
|
||||
printf("no infopipe data\n");
|
||||
*/
|
||||
}
|
||||
|
||||
close(fd);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
/* Deliver the refreshed items array to g_items. */
|
||||
pthread_mutex_lock(&info.infopipe.item_mutex);
|
||||
memcpy(&g_items,items,sizeof(items));
|
||||
pthread_mutex_unlock(&info.infopipe.item_mutex);
|
||||
|
||||
/* Grab the runnable signal for next loop. */
|
||||
pthread_mutex_lock(&info.infopipe.runnable_mutex);
|
||||
runnable=info.infopipe.runnable;
|
||||
pthread_mutex_unlock(&info.infopipe.runnable_mutex);
|
||||
|
||||
sleep(1);
|
||||
}
|
||||
|
||||
pthread_exit(NULL);
|
||||
}
|
@ -1,61 +0,0 @@
|
||||
/* -------------------------------------------------------------------------
|
||||
* infopipe.h: conky support for XMMS/BMP InfoPipe plugin
|
||||
*
|
||||
* InfoPipe: http://www.beastwithin.org/users/wwwwolf/code/xmms/infopipe.html
|
||||
*
|
||||
* Copyright (C) 2005 Philip Kovacs kovacsp3@comcast.net
|
||||
*
|
||||
* Based on original ideas and code graciously presented by:
|
||||
* Ulrich Jansen - ulrich( dot )jansen( at )rwth-aachen.de
|
||||
*
|
||||
* $Id$
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* --------------------------------------------------------------------------- */
|
||||
|
||||
#ifndef INFOPIPE_H
|
||||
#define INFOPIPE_H
|
||||
|
||||
/* The named pipe created by the infopipe plugin (actually a symlink) */
|
||||
#define INFOPIPE_NAMED_PIPE "/tmp/xmms-info"
|
||||
|
||||
/* 14 keys comprise the output of the infopipe plugin. */
|
||||
enum _infopipe_keys {
|
||||
INFOPIPE_PROTOCOL,
|
||||
INFOPIPE_VERSION,
|
||||
INFOPIPE_STATUS,
|
||||
INFOPIPE_PLAYLIST_TUNES,
|
||||
INFOPIPE_PLAYLIST_CURRTUNE,
|
||||
INFOPIPE_USEC_POSITION,
|
||||
INFOPIPE_POSITION,
|
||||
INFOPIPE_USEC_TIME,
|
||||
INFOPIPE_TIME,
|
||||
INFOPIPE_BITRATE,
|
||||
INFOPIPE_FREQUENCY,
|
||||
INFOPIPE_CHANNELS,
|
||||
INFOPIPE_TITLE,
|
||||
INFOPIPE_FILE
|
||||
};
|
||||
|
||||
/* 14 slots for the infopipe values */
|
||||
typedef char infopipe_t[14][128];
|
||||
|
||||
/* Service routine for the conky main thread */
|
||||
void update_infopipe(void);
|
||||
|
||||
/* Thread function */
|
||||
void *infopipe_thread_func(void *);
|
||||
|
||||
#endif
|
80
src/xmms.c
80
src/xmms.c
@ -25,22 +25,45 @@
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#if defined(XMMS_H)
|
||||
#include "config.h"
|
||||
#include "conky.h"
|
||||
#include "xmms.h"
|
||||
|
||||
#if defined(XMMS)
|
||||
#include <xmms/xmmsctrl.h>
|
||||
#elif defined(BMP_H)
|
||||
|
||||
#elif defined(BMP)
|
||||
#include <bmp/beepctrl.h>
|
||||
#elif defined(AUDACIOUS_H)
|
||||
|
||||
#elif defined(AUDACIOUS)
|
||||
#include <audacious/beepctrl.h>
|
||||
#elif defined(INFOPIPE_H)
|
||||
|
||||
#elif defined(INFOPIPE)
|
||||
#include <sys/select.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/types.h>
|
||||
#include <fcntl.h>
|
||||
#define INFOPIPE_NAMED_PIPE "/tmp/xmms-info"
|
||||
#endif
|
||||
|
||||
#include "xmms.h"
|
||||
#include "conky.h"
|
||||
#define INFOPIPE_NAMED_PIPE "/tmp/xmms-info"
|
||||
|
||||
/* 14 keys comprise the output of the infopipe plugin. */
|
||||
enum _infopipe_keys {
|
||||
INFOPIPE_PROTOCOL=0,
|
||||
INFOPIPE_VERSION,
|
||||
INFOPIPE_STATUS,
|
||||
INFOPIPE_PLAYLIST_TUNES,
|
||||
INFOPIPE_PLAYLIST_CURRTUNE,
|
||||
INFOPIPE_USEC_POSITION,
|
||||
INFOPIPE_POSITION,
|
||||
INFOPIPE_USEC_TIME,
|
||||
INFOPIPE_TIME,
|
||||
INFOPIPE_BITRATE,
|
||||
INFOPIPE_FREQUENCY,
|
||||
INFOPIPE_CHANNELS,
|
||||
INFOPIPE_TITLE,
|
||||
INFOPIPE_FILE
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
/* access to this item array is synchronized with mutexes */
|
||||
@ -63,7 +86,7 @@ void update_xmms(void)
|
||||
}
|
||||
|
||||
|
||||
#if defined(XMMS_H) || defined(BMP_H) || defined(AUDACIOUS_H)
|
||||
#if defined(XMMS) || defined(BMP) || defined(AUDACIOUS)
|
||||
/* ------------------------------------------------------------
|
||||
* Worker thread function for XMMS/BMP/Audacious data sampling.
|
||||
* ------------------------------------------------------------ */
|
||||
@ -168,7 +191,7 @@ void *xmms_thread_func(void *pvoid)
|
||||
pthread_exit(NULL);
|
||||
}
|
||||
|
||||
#elif defined(INFOPIPE_H)
|
||||
#elif defined(INFOPIPE)
|
||||
/* --------------------------------------------------
|
||||
* Worker thread function for InfoPipe data sampling.
|
||||
* -------------------------------------------------- */
|
||||
@ -177,16 +200,16 @@ void *xmms_thread_func(void *pvoid)
|
||||
int i,rc,fd,runnable;
|
||||
fd_set readset;
|
||||
struct timeval tm;
|
||||
static char buf[2048]; /* should equal or exceed sizeof(infopipe_t) */
|
||||
static char buf[2048],line[128];
|
||||
static xmms_t items;
|
||||
char *pbuf,c;
|
||||
|
||||
pvoid=(void*)pvoid; /* useless cast to avoid unused var warning */
|
||||
|
||||
/* Grab the runnable signal. Should be non-zero here or we do nothing. */
|
||||
pthread_mutex_lock(&info.infopipe.runnable_mutex);
|
||||
runnable=info.infopipe.runnable;
|
||||
pthread_mutex_unlock(&info.infopipe.runnable_mutex );
|
||||
pthread_mutex_lock(&info.xmms.runnable_mutex);
|
||||
runnable=info.xmms.runnable;
|
||||
pthread_mutex_unlock(&info.xmms.runnable_mutex );
|
||||
|
||||
/* Loop until the main thread sets the runnable signal to 0. */
|
||||
while(runnable) {
|
||||
@ -226,6 +249,25 @@ void *xmms_thread_func(void *pvoid)
|
||||
if ( sscanf(pbuf,"%*[^:]: %[^\n]",items[i]) == EOF )
|
||||
break;
|
||||
while((c = *pbuf++) && (c != '\n'));
|
||||
|
||||
switch(i) {
|
||||
case INFOPIPE_PROTOCOL:
|
||||
case INFOPIPE_VERSION:
|
||||
case INFOPIPE_STATUS:
|
||||
case INFOPIPE_PLAYLIST_TUNES:
|
||||
case INFOPIPE_PLAYLIST_CURRTUNE:
|
||||
case INFOPIPE_USEC_POSITION:
|
||||
case INFOPIPE_POSITION:
|
||||
case INFOPIPE_USEC_TIME:
|
||||
case INFOPIPE_TIME:
|
||||
case INFOPIPE_BITRATE:
|
||||
case INFOPIPE_FREQUENCY:
|
||||
case INFOPIPE_CHANNELS:
|
||||
case INFOPIPE_TITLE:
|
||||
case INFOPIPE_FILE:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* -- debug --
|
||||
@ -246,14 +288,14 @@ void *xmms_thread_func(void *pvoid)
|
||||
}
|
||||
|
||||
/* Deliver the refreshed items array to g_items. */
|
||||
pthread_mutex_lock(&info.infopipe.item_mutex);
|
||||
pthread_mutex_lock(&info.xmms.item_mutex);
|
||||
memcpy(&g_items,items,sizeof(items));
|
||||
pthread_mutex_unlock(&info.infopipe.item_mutex);
|
||||
pthread_mutex_unlock(&info.xmms.item_mutex);
|
||||
|
||||
/* Grab the runnable signal for next loop. */
|
||||
pthread_mutex_lock(&info.infopipe.runnable_mutex);
|
||||
runnable=info.infopipe.runnable;
|
||||
pthread_mutex_unlock(&info.infopipe.runnable_mutex);
|
||||
pthread_mutex_lock(&info.xmms.runnable_mutex);
|
||||
runnable=info.xmms.runnable;
|
||||
pthread_mutex_unlock(&info.xmms.runnable_mutex);
|
||||
|
||||
sleep(1);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user