evolution-rss r336 - in trunk: . src
- From: lucilanga svn gnome org
- To: svn-commits-list gnome org
- Subject: evolution-rss r336 - in trunk: . src
- Date: Mon, 14 Jul 2008 04:58:05 +0000 (UTC)
Author: lucilanga
Date: Mon Jul 14 04:58:05 2008
New Revision: 336
URL: http://svn.gnome.org/viewvc/evolution-rss?rev=336&view=rev
Log:
2008-07-14 Lucian Langa <lucilanga gnome org>
* src/rss-config-factory.c: suppport
for foaf importing
* src/rss.c: add status icon
Modified:
trunk/ChangeLog
trunk/TODO
trunk/src/Makefile.am
trunk/src/Makefile.in
trunk/src/rss-config-factory.c
trunk/src/rss.c
Modified: trunk/TODO
==============================================================================
--- trunk/TODO (original)
+++ trunk/TODO Mon Jul 14 04:58:05 2008
@@ -31,7 +31,6 @@
* hook feed properties in folder properties
* clist hint should be the folder name not the feed name
* strip html tags from title
- * implement foaf and other possible blogrolls type file
* if necessary implement config code for evo 2.12
* notify in status bar, no of feeds
* fix recursivity on layer_find_pos
Modified: trunk/src/Makefile.am
==============================================================================
--- trunk/src/Makefile.am (original)
+++ trunk/src/Makefile.am Mon Jul 14 04:58:05 2008
@@ -20,7 +20,7 @@
#if ! HAVE_XPCOM_GLUE
-#INCLUDES += -DGECKO_HOME=\""$(GECKO_HOME)"\"
+INCLUDES += -DGECKO_HOME=\""$(GECKO_HOME)"\"
#endif
RSS_MENU = \
Modified: trunk/src/Makefile.in
==============================================================================
--- trunk/src/Makefile.in (original)
+++ trunk/src/Makefile.in Mon Jul 14 04:58:05 2008
@@ -318,28 +318,20 @@
target_alias = @target_alias@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-INCLUDES = \
- -I$(EVOLUTION_SOURCE) \
- -I$(top_srcdir) \
- $(RENDER_CFLAGS) \
- $(DBUS_CFLAGS) \
- -DGETTEXT_PACKAGE="\"$(GETTEXT_PACKAGE)\"" \
- -DLOCALEDIR="\"$(LOCALEDIR)\"" \
- -DEVOLUTION_VERSION_STRING=\"$(EVOLUTION_EXEC_VERSION)\"\
- -DEVOLUTION_VERSION=$(evolution_exec_int) \
- -DEVOLUTION_GLADEDIR=\""$(gladedir)"\" \
- -DEVOLUTION_ICONDIR=\""$(ICON_DIR)"\" \
- -DGTK_VERSION="$(GTK_VERSION)" \
- -DLIBSOUP_VERSION="$(SOUP_VERSION)" \
- -DRENDER=\""$(RENDER)"\" \
- -DRENDER_N=$(RENDER_N) \
- -DHAVE_DBUS=$(DBD) \
- -DDBUS_API_SUBJECT_TO_CHANGE \
- $(EVOLUTION_RSS_EPLUGIN_CFLAGS)
-
#if ! HAVE_XPCOM_GLUE
-#INCLUDES += -DGECKO_HOME=\""$(GECKO_HOME)"\"
+INCLUDES = -I$(EVOLUTION_SOURCE) -I$(top_srcdir) $(RENDER_CFLAGS) \
+ $(DBUS_CFLAGS) -DGETTEXT_PACKAGE="\"$(GETTEXT_PACKAGE)\"" \
+ -DLOCALEDIR="\"$(LOCALEDIR)\"" \
+ -DEVOLUTION_VERSION_STRING=\"$(EVOLUTION_EXEC_VERSION)\" \
+ -DEVOLUTION_VERSION=$(evolution_exec_int) \
+ -DEVOLUTION_GLADEDIR=\""$(gladedir)"\" \
+ -DEVOLUTION_ICONDIR=\""$(ICON_DIR)"\" \
+ -DGTK_VERSION="$(GTK_VERSION)" \
+ -DLIBSOUP_VERSION="$(SOUP_VERSION)" -DRENDER=\""$(RENDER)"\" \
+ -DRENDER_N=$(RENDER_N) -DHAVE_DBUS=$(DBD) \
+ -DDBUS_API_SUBJECT_TO_CHANGE $(EVOLUTION_RSS_EPLUGIN_CFLAGS) \
+ -DGECKO_HOME=\""$(GECKO_HOME)"\"
#endif
RSS_MENU = \
<hook class=\"org.gnome.evolution.mail.bonobomenu:1.0\">\n \
Modified: trunk/src/rss-config-factory.c
==============================================================================
--- trunk/src/rss-config-factory.c (original)
+++ trunk/src/rss-config-factory.c Mon Jul 14 04:58:05 2008
@@ -26,6 +26,10 @@
#include "rss.h"
+static guint feed_enabled = 0;
+static guint feed_validate = 0;
+static guint feed_html = 0;
+
#define RSS_CONTROL_ID "OAFIID:GNOME_Evolution_RSS:" EVOLUTION_VERSION_STRING
#define FACTORY_ID "OAFIID:GNOME_Evolution_RSS_Factory:" EVOLUTION_VERSION_STRING
@@ -1000,6 +1004,9 @@
add_feed *feed = g_new0(add_feed, 1);
feed->changed=0;
feed->add=1;
+ feed->fetch_html = feed_html;
+ feed->validate = feed_validate;
+ feed->enabled = feed_enabled;
feed->feed_url = g_strdup(url);
feed->feed_name = decode_html_entities(title);
/* we'll get rid of this as soon as we fetch unblocking */
@@ -1019,13 +1026,41 @@
return res;
}
+/*
+ * type 0/1 - opml/foaf
+ */
+
+xmlNode*
+iterate_import_file(xmlNode *src, gchar **url, xmlChar **title, guint type)
+{
+ *url = NULL;
+ *title = NULL;
+
+ if (type == 0) {
+ src = html_find(src, "outline");
+ *url = xmlGetProp(src, "xmlUrl");
+ *title = xmlGetProp(src, "title");
+ } else if (type == 1) {
+ xmlNode *my;
+ src = html_find(src, "member");
+ my = layer_find_pos(src, "member", "Agent");
+ *title = xmlCharStrdup(layer_find(my, "name", NULL));
+ my = html_find(my, "channel");
+ *url = xmlGetProp(my, "about");
+ }
+ return src;
+
+}
+
void
-import_opml(gchar *file, add_feed *feed)
+import_opml(gchar *file)
{
- gchar *url;
+ gchar *url = NULL;
+ xmlChar *name = NULL;
xmlChar *buff = NULL;
guint total = 0;
guint current = 0;
+ guint type = 0; //file type
gchar *what = NULL;
GtkWidget *import_dialog;
GtkWidget *import_label;
@@ -1033,6 +1068,7 @@
xmlNode *src = (xmlNode *)xmlParseFile (file);
xmlNode *doc = src;
+ xmlNode *my = src;
gchar *msg = g_strdup(_("Importing feeds..."));
import_dialog = e_error_new((GtkWindow *)rf->preferences, "shell:importing", msg, NULL);
gtk_window_set_keep_above(GTK_WINDOW(import_dialog), TRUE);
@@ -1053,63 +1089,75 @@
g_free(msg);
if (src=src->children)
{
- g_print("found %s\n", src->name);
+ d(g_print("found %s\n", src->name));
if (!g_ascii_strcasecmp(src->name, "rdf")) {
while (src) {
g_print("my cont:%s\n", src->content);
src=src->children;
src = src->next;
g_print("found %s\n", src->name);
- g_print("my cont:%s\n", src->content);
- src=src->children;
+ src = src->children;
+ d(g_print("group name:%s\n", layer_find(src, "name", NULL)));
src = src->next;
- xmlNode *my = src;
- while (src = html_find(src, "member")) {
- my = layer_find_pos(src, "member", "Agent");
- g_print("my:%s\n", layer_find(my, "name", NULL));
- my = html_find(my, "Document");
- g_print("my:%s\n", xmlGetProp(my, "about"));
+ while (src = iterate_import_file(src, &url, &name, 1)) {
+ if (url) {
+ total++;
+ xmlFree(url);
+ }
+ if (name) xmlFree(name);
}
+ g_print("total:%d\n", total);
+ type = 1;
}
}
else if (!g_ascii_strcasecmp(src->name, "opml")) {
- while (src = html_find(src, "outline")) {
- url = xmlGetProp((xmlNode *)src, "xmlUrl");
- if (url) {
+ while (src = iterate_import_file(src, &url, &name, 0)) {
+ if (url && strlen(url)) {
total++;
xmlFree(url);
}
+ if (name) xmlFree(name);
}
+ type = 0;
g_print("total:%d\n", total);
}
}
src = doc;
- //force out for now
- goto out;
+// //force out for now
+// goto out;
//we'll be safer this way
rf->import = 1;
+ name = NULL;
while (gtk_events_pending ())
gtk_main_iteration ();
- while (src = html_find(src, "outline"))
- {
- url = xmlGetProp((xmlNode *)src, "xmlUrl");
- if (url && strlen(url))
- {
+ if (type == 1) {
+ src=src->children;
+ g_print("my cont:%s\n", src->content);
+ src=src->children;
+ src = src->next;
+ g_print("found %s\n", src->name);
+ src = src->children;
+ d(g_print("group name:%s\n", layer_find(src, "name", NULL)));
+ src = src->next;
+ }
+ while (src = iterate_import_file(src, &url, &name, type)) {
+ if (url && strlen(url)) {
+ g_print("url:%s\n", url);
if (rf->cancel)
{
if (src) xmlFree(src);
rf->cancel = 0;
goto out;
}
- gchar *name = xmlGetProp((xmlNode *)src, "title");
gtk_label_set_text(GTK_LABEL(import_label), name);
#if GTK_VERSION >= 2006000
gtk_label_set_ellipsize (GTK_LABEL (import_label), PANGO_ELLIPSIZE_START);
#endif
gtk_label_set_justify(GTK_LABEL(import_label), GTK_JUSTIFY_CENTER);
import_one_feed(url, name);
- xmlFree(name);
+ if (name) xmlFree(name);
+ if (url) xmlFree(url);
while (gtk_events_pending ())
gtk_main_iteration ();
@@ -1147,7 +1195,7 @@
if (name)
{
gtk_widget_hide(selector);
- import_opml(name, user_data);
+ import_opml(name);
g_free(name);
}
}
@@ -1156,27 +1204,26 @@
}
static void
-import_toggle_cb_html (GtkWidget *widget, add_feed *data)
+import_toggle_cb_html (GtkWidget *widget, gpointer data)
{
- data->fetch_html = 1-gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
+ feed_html = 1-gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
}
static void
-import_toggle_cb_valid (GtkWidget *widget, add_feed *data)
+import_toggle_cb_valid (GtkWidget *widget, gpointer data)
{
- data->validate = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
+ feed_validate = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
}
static void
-import_toggle_cb_ena (GtkWidget *widget, add_feed *data)
+import_toggle_cb_ena (GtkWidget *widget, gpointer data)
{
- data->enabled = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
+ feed_enabled = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
}
static void
decorate_import_fs (gpointer data)
{
- add_feed *feed = g_new0(add_feed, 1);
gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (data), TRUE);
gtk_dialog_set_default_response (GTK_DIALOG (data), GTK_RESPONSE_OK);
gtk_file_chooser_set_local_only (data, FALSE);
@@ -1234,22 +1281,22 @@
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbutton3), 1);
gtk_file_chooser_set_extra_widget(data, vbox1);
- feed->fetch_html = 0;
- feed->validate = feed->enabled = 1;
+ feed_html = 0;
+ feed_validate = feed_enabled = 1;
g_signal_connect(checkbutton1,
"toggled",
G_CALLBACK(import_toggle_cb_html),
- feed);
+ NULL);
g_signal_connect(checkbutton2,
"toggled",
G_CALLBACK(import_toggle_cb_ena),
- feed);
+ NULL);
g_signal_connect(checkbutton3,
"toggled",
G_CALLBACK(import_toggle_cb_valid),
- feed);
- g_signal_connect(data, "response", G_CALLBACK(select_file_response), feed);
+ NULL);
+ g_signal_connect(data, "response", G_CALLBACK(select_file_response), NULL);
g_signal_connect(data, "destroy", G_CALLBACK(gtk_widget_destroy), data);
}
Modified: trunk/src/rss.c
==============================================================================
--- trunk/src/rss.c (original)
+++ trunk/src/rss.c Mon Jul 14 04:58:05 2008
@@ -138,6 +138,7 @@
guint nettime_id = 0;
guint force_update = 0;
GHashTable *custom_timeout;
+GtkStatusIcon *status_icon = NULL;
#define DEFAULT_FEEDS_FOLDER "News&Blogs"
#define DEFAULT_NO_CHANNEL "Untitled channel"
@@ -2856,25 +2857,55 @@
{
d(g_print("custom key:%s\n", key));
guint ttl = GPOINTER_TO_INT(g_hash_table_lookup(rf->hrttl, lookup_key(key)));
- CDATA *cdata = g_new0(CDATA, 1);
- cdata->key = key;
- cdata->value = value;
- cdata->user_data = user_data;
- time_id = GPOINTER_TO_INT(g_hash_table_lookup(custom_timeout,
+ if (ttl) {
+ CDATA *cdata = g_new0(CDATA, 1);
+ cdata->key = key;
+ cdata->value = value;
+ cdata->user_data = user_data;
+ time_id = GPOINTER_TO_INT(g_hash_table_lookup(custom_timeout,
lookup_key(key)));
- if (time_id)
- g_source_remove(time_id);
- time_id = g_timeout_add (ttl * 60 * 1000,
+ if (time_id)
+ g_source_remove(time_id);
+ time_id = g_timeout_add (4*60*1000, //ttl * 60 * 1000,
(GtkFunction) custom_update_articles,
cdata);
- g_hash_table_replace(custom_timeout,
+ g_hash_table_replace(custom_timeout,
g_strdup(lookup_key(key)),
GINT_TO_POINTER(time_id));
+ }
}
}
static void
+icon_activated (GtkStatusIcon *icon, gpointer pnotify)
+{
+ gtk_status_icon_set_visible (status_icon, FALSE);
+ g_object_unref (status_icon);
+
+ status_icon = NULL;
+}
+
+gboolean
+flicker_stop(gpointer user_data)
+{
+ gtk_status_icon_set_blinking (status_icon, FALSE);
+ return FALSE;
+}
+
+static void
+flicker_status_icon(void)
+{
+ gchar *total = g_strdup_printf("Feeds: %d articles", farticle);
+ gtk_status_icon_set_tooltip (status_icon, total);
+ gtk_status_icon_set_visible (status_icon, TRUE);
+ gtk_status_icon_set_blinking (status_icon, TRUE);
+ g_signal_connect (G_OBJECT (status_icon), "activate", G_CALLBACK (icon_activated), NULL);
+ g_timeout_add(30*1000, flicker_stop, NULL);
+ g_free(total);
+}
+
+static void
custom_feed_timeout(void)
{
g_hash_table_foreach(rf->hrname, custom_fetch_feed, statuscb);
@@ -2914,6 +2945,15 @@
}
custom_feed_timeout();
+
+ gchar *iconfile = g_build_filename (EVOLUTION_ICONDIR,
+ "rss-24.png",
+ NULL);
+
+ status_icon = gtk_status_icon_new ();
+ gtk_status_icon_set_from_file (status_icon, iconfile);
+ gtk_status_icon_set_visible (status_icon, FALSE);
+
/* hook in rename event to catch feeds folder rename */
CamelStore *store = mail_component_peek_local_store(NULL);
camel_object_hook_event(store, "folder_renamed",
@@ -4464,6 +4504,7 @@
free_cf(CF);
}
farticle++;
+ flicker_status_icon();
g_free(p);
}
d(g_print("put success()\n"));
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]