xmms2 patch
authorBrenden Matthews <brenden1@rty.ca>
Sat, 25 Mar 2006 21:21:07 +0000 (21:21 +0000)
committerBrenden Matthews <brenden1@rty.ca>
Sat, 25 Mar 2006 21:21:07 +0000 (21:21 +0000)
git-svn-id: https://conky.svn.sourceforge.net/svnroot/conky/trunk/conky1@612 7f574dfc-610e-0410-a909-a81674777703

AUTHORS
ChangeLog
configure.in
src/Makefile.am
src/common.c
src/conky.c
src/conky.h

diff --git a/AUTHORS b/AUTHORS
index e84e3cc..18e578e 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -100,6 +100,9 @@ J
 killfire
   fs_used_perc and fs_bar_free patch
 
+Lassi Selander <sleipner at users dot sourceforge dot net>
+  XMMS2 patch
+
 Lauri Hakkarainen <b10nik at users dot sourceforge dot net>
   Some translating, web and other stuff
 
index e5e1be1..53532d6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 # $Id$
 
+2006-03-25
+       * Added XMMS2 patch 1456203 from Lassi Selander
+
 2006-03-21
        * Fixed ${top(_mem)} related code on FreeBSD (with help of Petr
        Holub <hopet@users.sourceforge.net>)
index c113643..abfb029 100644 (file)
@@ -305,6 +305,22 @@ if test x$want_mpd = xyes; then
 fi
 
 dnl
+dnl XMMS2
+dnl
+
+want_xmms2=no
+AC_ARG_ENABLE(xmms2,
+[  --enable-xmms2            enable if you want XMMS2 support [[default=no]]],
+  [want_xmms2="$enableval"])
+
+AM_CONDITIONAL(BUILD_XMMS2, test x$want_xmms2 = xyes)
+if test x$want_xmms2 = xyes; then
+  CFLAGS="$CFLAGS `pkg-config --cflags xmms2-client`"
+  LIBS="$LIBS `pkg-config --libs xmms2-client`"
+  AC_DEFINE(XMMS2, 1, [Define if you want XMMS2 support])
+fi
+
+dnl
 dnl PORT_MONITORS
 dnl
 
index 828422b..8c2e43a 100644 (file)
@@ -28,6 +28,10 @@ if BUILD_MPD
 mpd = mpd.c libmpdclient.c
 endif
 
+if BUILD_XMMS2
+xmms2 = xmms2.c
+endif
+
 if BUILD_LINUX
 linux = linux.c top.c
 PTHREAD_LIBS =  -lpthread
@@ -58,9 +62,9 @@ if BUILD_X11
 x11 = x11.c
 endif
 
-conky_SOURCES = common.c fs.c $(linux) mail.c mixer.c $(seti) $(mpd) $(solaris) $(freebsd) $(netbsd) $(port_monitors) conky.c conky.h $(x11) $(mldonkey) remoted.c remoted.h remotec.c remotec.h $(xmms) $(bmpx)
+conky_SOURCES = common.c fs.c $(linux) mail.c mixer.c $(seti) $(mpd) $(xmms2) $(solaris) $(freebsd) $(netbsd) $(port_monitors) conky.c conky.h $(x11) $(mldonkey) remoted.c remoted.h remotec.c remotec.h $(xmms) $(bmpx)
 
 AM_LDFLAGS = $(X11_LIBS) $(XFT_LIBS) $(CAIRO_LIBS) $(PTHREAD_LIBS) -lm
 
 EXTRA_DIST = seti.c linux.c solaris.c freebsd.c netbsd.c mpd.c libmpdclient.c \
-libmpdclient.h top.h mldonkey.c ftp.c ftp.h x11.c
+libmpdclient.h xmms2.c top.h mldonkey.c ftp.c ftp.h x11.c
index 66ad431..73a269c 100644 (file)
@@ -226,6 +226,12 @@ void update_stuff()
        if (NEED(INFO_MPD))
                update_mpd();
 #endif
+
+#ifdef XMMS2
+       if (NEED(INFO_XMMS2))
+               update_xmms2();
+#endif
+
 #if defined(XMMS) || defined(BMP) || defined(AUDACIOUS) || defined(INFOPIPE)
        if (NEED(INFO_XMMS))
                update_xmms();
index 8fc66b1..ff08b34 100644 (file)
@@ -290,6 +290,10 @@ static char original_text[] =
     "${color grey}MPD: $mpd_status $mpd_artist - $mpd_title from $mpd_album at $mpd_vol\n"
     "Bitrate: $mpd_bitrate\n" "Progress: $mpd_bar\n"
 #endif
+#ifdef XMMS2
+    "${color grey}XMMS2: $xmms2_status $xmms2_artist - $xmms2_title from $xmms2_album\n"
+    "Progress: $xmms2_bar\n"
+#endif
     "${color grey}Name         PID     CPU%    MEM%\n"
     " ${color lightgrey} ${top name 1} ${top pid 1} ${top cpu 1} ${top mem 1}\n"
     " ${color lightgrey} ${top name 2} ${top pid 2} ${top cpu 2} ${top mem 2}\n"
@@ -892,6 +896,24 @@ enum text_object_type {
        OBJ_mpd_percent,
        OBJ_mpd_smart,
 #endif
+#ifdef XMMS2
+       OBJ_xmms2_title,
+       OBJ_xmms2_artist,
+       OBJ_xmms2_album,
+//     OBJ_xmms2_random,
+//     OBJ_xmms2_repeat,
+//     OBJ_xmms2_vol,
+//     OBJ_xmms2_bitrate,
+       OBJ_xmms2_status,
+       OBJ_xmms2_bar,
+       OBJ_xmms2_elapsed,
+       OBJ_xmms2_length,
+       OBJ_xmms2_track,
+//     OBJ_xmms2_name,
+       OBJ_xmms2_file,
+       OBJ_xmms2_percent,
+//     OBJ_xmms2_smart,
+#endif
 #if defined(XMMS) || defined(BMP) || defined(AUDACIOUS) || defined(INFOPIPE)
        OBJ_xmms_status,
        OBJ_xmms_title,
@@ -1199,6 +1221,58 @@ static void free_text_objects(unsigned int count, struct text_object *objs)
                                break;
                        case OBJ_mpd_host:
 #endif
+#ifdef XMMS2
+                       case OBJ_xmms2_title:
+                               if (info.xmms2.title) {
+                                       free(info.xmms2.title);
+                                       info.xmms2.title = 0;
+                               }
+                               break;
+                       case OBJ_xmms2_artist:
+                               if (info.xmms2.artist) {
+                                       free(info.xmms2.artist);
+                                       info.xmms2.artist = 0;
+                               }
+                               break;
+                       case OBJ_xmms2_album:
+                               if (info.xmms2.album) {
+                                       free(info.xmms2.album);
+                                       info.xmms2.album = 0;
+                               }
+                               break;
+                       case OBJ_xmms2_track:
+                               if (info.xmms2.track) {
+                                       free(info.xmms2.track);
+                                       info.xmms2.track = 0;
+                               }
+                               break;
+                       case OBJ_xmms2_file:
+                               if (info.xmms2.file) {
+                                       free(info.xmms2.file);
+                                       info.xmms2.file = 0;
+                               }
+                               break;
+                       case OBJ_xmms2_status:
+                               if (info.xmms2.status) {
+                                       free(info.xmms2.status);
+                                       info.xmms2.status = 0;
+                               }
+                               break;
+       /*              case OBJ_xmms2_smart:
+                               if (info.xmms2.artist) {
+                                       free(info.xmms2.artist);
+                                       info.xmms2.artist = 0;
+                               }
+                               if (info.xmms2.title) {
+                                       free(info.xmms2.title);
+                                       info.xmms2.title = 0;
+                               }
+                               if (info.xmms2.file) {
+                                       free(info.xmms2.file);
+                                       info.xmms2.file = 0;
+                               }
+                               break;*/
+#endif
 #ifdef BMPX
                        case OBJ_bmpx_title:
                        case OBJ_bmpx_artist:
@@ -1914,6 +1988,21 @@ static struct text_object *construct_text_object(const char *s, const char *arg,
                (void) scan_bar(arg, &obj->data.pair.a, &obj->data.pair.b);
                END OBJ(mpd_smart, INFO_MPD) END
 #endif
+#ifdef XMMS2
+               OBJ(xmms2_artist, INFO_XMMS2)
+               END OBJ(xmms2_title, INFO_XMMS2)
+               END OBJ(xmms2_length, INFO_XMMS2)
+               END OBJ(xmms2_track, INFO_XMMS2)
+               END OBJ(xmms2_file, INFO_XMMS2)
+               END OBJ(xmms2_album, INFO_XMMS2)
+               END OBJ(xmms2_status, INFO_XMMS2)
+               END OBJ(xmms2_elapsed, INFO_XMMS2)
+               END OBJ(xmms2_length, INFO_XMMS2)
+               END OBJ(xmms2_percent, INFO_XMMS2)
+               END OBJ(xmms2_bar, INFO_XMMS2)
+               (void) scan_bar(arg, &obj->data.pair.a, &obj->data.pair.b);
+               END
+#endif
 #if defined(XMMS) || defined(BMP) || defined(AUDACIOUS) || defined(INFOPIPE)
                OBJ(xmms_status, INFO_XMMS) END
                OBJ(xmms_title, INFO_XMMS) END
@@ -3209,6 +3298,47 @@ static void generate_text_internal(char *p, int p_max_size, struct text_object *
                                }
                        }
 #endif
+#ifdef XMMS2
+                       OBJ(xmms2_title) {
+                               snprintf(p, p_max_size, "%s", cur->xmms2.title);
+                       }
+                       OBJ(xmms2_artist) {
+                               snprintf(p, p_max_size, "%s", cur->xmms2.artist);
+                       }
+                       OBJ(xmms2_album) {
+                               snprintf(p, p_max_size, "%s", cur->xmms2.album);
+                       }
+                       OBJ(xmms2_track) {
+                               snprintf(p, p_max_size, "%i", cur->xmms2.track);
+                       }
+                       OBJ(xmms2_file) {
+                               snprintf(p, p_max_size, "%s", cur->xmms2.file);
+                       }
+                       OBJ(xmms2_status) {                     
+                               snprintf(p, p_max_size, "%s", cur->xmms2.status);
+                       }
+                       OBJ(xmms2_elapsed) {
+                               int tmp = cur->xmms2.elapsed;
+                               snprintf(p, p_max_size, "%02d:%02d", 
+                                   tmp / 60000, (tmp / 1000) % 60);
+                       }
+                       OBJ(xmms2_length) {
+                               int tmp = cur->xmms2.length;
+                               snprintf(p, p_max_size, "%02d:%02d", 
+                                   tmp / 60000, (tmp / 1000) % 60);
+                       }
+                       OBJ(xmms2_percent) {
+                               snprintf(p, p_max_size, "%2.0f",
+                                        cur->xmms2.progress * 100);
+                       }
+                       OBJ(xmms2_bar) {
+                               new_bar(p, obj->data.pair.a,
+                                       obj->data.pair.b,
+                                       (int) (cur->xmms2.progress *
+                                              255.0f));
+                       }
+                       
+#endif
 #if defined(XMMS) || defined(BMP) || defined(AUDACIOUS) || defined(INFOPIPE)
                        OBJ(xmms_status) {
                            snprintf(p, p_max_size, "%s", cur->xmms.items[XMMS_STATUS]);
@@ -4840,6 +4970,17 @@ static void set_default_configurations(void)
        info.mpd.name = NULL;
        info.mpd.file = NULL;
 #endif
+#ifdef XMMS2
+       info.xmms2.status = NULL;
+       info.xmms2.artist = NULL;
+       info.xmms2.album = NULL;
+       info.xmms2.title = NULL;
+//     info.xmms2.random = NULL;
+//     info.xmms2.track = NULL;
+//     info.xmms2.name = NULL;
+       info.xmms2.file = NULL;
+//     info.xmms2.connection = NULL;
+#endif
        use_spacer = 0;
 #ifdef X11
        out_to_console = 0;
index 077d490..8b6551e 100644 (file)
 #include "xmms.h"
 #endif
 
+#ifdef XMMS2
+#include <xmmsclient/xmmsclient.h>
+#endif
+
 #define TOP_CPU 1
 #define TOP_NAME 2
 #define TOP_PID 3
@@ -125,6 +129,25 @@ struct mpd_s {
 };
 #endif
 
+#ifdef XMMS2
+struct xmms2_s {
+       char *title;
+       char *artist;
+       char *album;
+       char *status;
+//     char *random;
+//     char *repeat;
+//     char *name;
+       char *file;
+//     int volume;
+       float progress;
+       int track;
+//     int bitrate;
+       unsigned int length;
+       unsigned int elapsed;
+};
+#endif
+
 #if defined(XMMS) || defined(BMP) || defined(AUDACIOUS) || defined(INFOPIPE)
 struct xmms_s {
        unsigned int project_mask;
@@ -193,6 +216,9 @@ enum {
 #ifdef BMPX
        INFO_BMPX = 24,
 #endif
+#ifdef XMMS2
+       INFO_XMMS2 = 25,
+#endif
 };
 
 
@@ -236,6 +262,13 @@ struct information {
        struct mpd_s mpd;
        mpd_Connection *conn;
 #endif
+#ifdef XMMS2
+       struct xmms2_s xmms2;
+       int xmms2_conn_state;
+       xmms_socket_t xmms2_fd; 
+       fd_set xmms2_fdset;
+       xmmsc_connection_t *xmms2_conn;
+#endif
 #if defined(XMMS) || defined(BMP) || defined(AUDACIOUS) || defined(INFOPIPE)
        struct xmms_s xmms;
 #endif
@@ -478,12 +511,17 @@ char *get_apm_adapter(void);
 char *get_apm_battery_life(void);
 char *get_apm_battery_time(void);
 #endif
-/* in mpd.c */
 
+/* in mpd.c */
 #ifdef MPD
 void update_mpd();
 #endif
 
+/* in xmm2.c */
+#ifdef XMMS2
+void update_xmms2();
+#endif
+
 #ifdef MLDONKEY
 /* in mldonkey.c */
 typedef long long int64;