Experimental RSS code.
authorRoman Bogorodskiy <mirrorbox@users.sourceforge.net>
Sun, 6 May 2007 12:17:13 +0000 (12:17 +0000)
committerRoman Bogorodskiy <mirrorbox@users.sourceforge.net>
Sun, 6 May 2007 12:17:13 +0000 (12:17 +0000)
git-svn-id: https://conky.svn.sourceforge.net/svnroot/conky/trunk/conky1@864 7f574dfc-610e-0410-a909-a81674777703

configure.ac.in
src/Makefile.am
src/conky.c
src/conky.h

index af8bb32..8a14c4f 100644 (file)
@@ -179,6 +179,22 @@ if test x$want_xmms2 = xyes; then
     AC_DEFINE(XMMS2, 1, [Define if you want XMMS2 support])
 fi
 
+dnl
+dnl RSS
+dnl
+
+AC_ARG_ENABLE([rss],
+             AC_HELP_STRING([--enable-rss], [enable if you want rss support (requires libmrss) @<:@default=no@:>@]),
+             [want_rss="$enableval"], [want_rss=no])
+#
+AM_CONDITIONAL(BUILD_RSS, test x$want_rss = xyes)
+if test x$want_rss = xyes; then
+       WANT_GLIB=yes
+       PKG_CHECK_MODULES([MRSS], [mrss])
+       CFLAGS="$CFLAGS $MRSS_CFLAGS"
+       LIBS="$LIBS $MRSS_LIBS"
+       AC_DEFINE(RSS, 1, [Define if you want rss support])
+fi
 
 dnl
 dnl IMLIB2
@@ -218,10 +234,8 @@ if test x$want_portmon = xyes; then
         if test "x$PORT_MONITORS_MISSING" = xyes; then
               AC_MSG_ERROR([missing a needed network header for port monitoring])
         fi
-      PKG_CHECK_MODULES([GLIB], [glib-2.0])
-      CFLAGS="$CFLAGS $GLIB_CFLAGS"
-      LIBS="$LIBS $GLIB_LIBS"
-        AC_DEFINE(TCP_PORT_MONITOR, 1, [Define if you want tcp port monitoring support])
+       WANT_GLIB=yes
+       AC_DEFINE(TCP_PORT_MONITOR, 1, [Define if you want tcp port monitoring support])
   fi
 fi
 
@@ -356,6 +370,15 @@ if test x$want_xft = "xyes"; then
     fi
 fi
 
+dnl
+dnl GLIB
+dnl
+
+if test x$WANT_GLIB = xyes; then
+       PKG_CHECK_MODULES([GLIB], [glib-2.0])
+        CFLAGS="$CFLAGS $GLIB_CFLAGS"
+       LIBS="$LIBS $GLIB_LIBS"
+fi
 
 dnl
 dnl KVM
@@ -519,4 +542,5 @@ $PACKAGE $VERSION configured successfully:
  * general:
   hddtemp:          $want_hddtemp
   portmon:          $want_portmon  
+  RSS:             $want_rss
 EOF
index 72b323a..c13e4e5 100644 (file)
@@ -51,6 +51,10 @@ if BUILD_HDDTEMP
 hddtemp = hddtemp.c
 endif
 
+if BUILD_RSS
+rss = rss.c
+endif
+
 conky_SOURCES =                \
        $(audacious)            \
        $(bmpx)                 \
@@ -67,6 +71,7 @@ conky_SOURCES =               \
        $(netbsd)               \
        $(openbsd)              \
        $(port_monitors)        \
+       $(rss)                  \
        $(solaris)              \
        timed_thread.c          \
        timed_thread.h          \
index c9073b5..0c0d200 100644 (file)
@@ -93,6 +93,9 @@ static void print_version()
 #ifdef TCP_PORT_MONITOR
        "  * portmon\n"
 #endif /* TCP_PORT_MONITOR */
+#ifdef RSS
+       "  * rss\n"
+#endif
        "\n");  
 
        exit(0);
@@ -1163,6 +1166,9 @@ enum text_object_type {
        OBJ_bmpx_uri,
        OBJ_bmpx_bitrate,
 #endif
+#ifdef RSS
+       OBJ_rss,
+#endif
 #ifdef TCP_PORT_MONITOR
        OBJ_tcp_portmon,
 #endif
@@ -1277,6 +1283,12 @@ struct text_object {
                        char *dev;
                } hddtemp; /* 2 */
 #endif
+#ifdef RSS
+               struct {
+                       char *uri;
+                       int count;
+               } rss;
+#endif
        } data;
 };
 
@@ -2031,6 +2043,10 @@ static void free_text_objects(unsigned int count, struct text_object *objs)
                        case OBJ_bmpx_uri:
                        case OBJ_bmpx_bitrate:
 #endif
+#ifdef RSS
+                       case OBJ_rss:
+                               free(objs[i].data.rss.uri);
+#endif
                        case OBJ_pre_exec:
                        case OBJ_battery:
                                free(objs[i].data.s);
@@ -3100,6 +3116,21 @@ static struct text_object *construct_text_object(const char *s, const char *arg,
                memset(&(info.bmpx), 0, sizeof(struct bmpx_s));
        END
 #endif
+#ifdef RSS
+       OBJ(rss, 0) 
+               if (arg) {
+                       int argc, count;
+                       char *uri = (char *)malloc(64 * sizeof(char *));
+
+                       argc = sscanf(arg, "%63s %d", uri, &count);
+                       printf("argc: %d, uri: %s, count: %d\n", argc, uri, count);
+                       obj->data.rss.uri = uri;
+                       obj->data.rss.count = count;
+               } else
+                       CRIT_ERR("rss: needs arguments");
+
+       END
+#endif
 #ifdef HDDTEMP
        OBJ(hddtemp, 0)
                if (!arg || scan_hddtemp(arg, &obj->data.hddtemp.dev, 
@@ -4254,6 +4285,30 @@ static void generate_text_internal(char *p, int p_max_size, struct text_object *
                        OBJ(hr) {
                                new_hr(p, obj->data.i);
                        }
+#ifdef RSS
+                       OBJ(rss) {
+                               GList *walk = NULL;
+                               GList *list = NULL;
+                               char *titles = malloc(1024*sizeof(char *));
+
+                               memset(titles, 0, sizeof(titles));
+                               list = get_rss_info(obj->data.rss.uri, obj->data.rss.count);
+                               
+                               for (walk = g_list_first(list); walk != NULL; walk = g_list_next(walk)) {
+                                       snprintf(titles, 1023, "%s%s\n", titles, (char *)walk->data);
+                                       free(walk->data);
+                               }
+
+                               /* we don't need last \n */
+                               titles[strlen(titles)-2] = '\0';
+                       
+                               snprintf(p, p_max_size, "%s", titles);
+
+                               free(titles);
+                               g_list_free(walk);
+                               g_list_free(list);              
+                       }
+#endif
 #ifdef HDDTEMP
                        OBJ(hddtemp) {
                                char *temp;
index 32d3262..8512c4a 100644 (file)
 #include <xmmsclient/xmmsclient.h>
 #endif
 
+#ifdef RSS
+#include <glib.h>
+#endif
+
 #include "mboxscan.h"
 #include "timed_thread.h"
 
@@ -243,6 +247,9 @@ enum {
        INFO_XMMS2 = 22,
 #endif
        INFO_ENTROPY = 23,
+#ifdef RSS
+       INFO_RSS = 24,
+#endif
 };
 
 
@@ -589,6 +596,11 @@ int scan_hddtemp(const char *arg, char **dev, char **addr, int *port);
 char *get_hddtemp_info(char *dev, char *addr, int port, char *unit);
 #endif /* HDDTEMP */
 
+/* in rss.c */
+#ifdef RSS
+GList* get_rss_info(char *uri, int count);
+#endif /* RSS */
+
 /* in linux.c */
 
 #endif