[evolution-rss] fix proper feed url edit



commit 05b4c7c0f34f6ad183eb1ab170d8ccf266ea2203
Author: Lucian Langa <lucilanga gnome org>
Date:   Tue Aug 11 21:25:07 2009 +0300

    fix proper feed url edit

 TODO                     |    3 +-
 src/misc.c               |    2 +-
 src/parser.c             |    4 +--
 src/rss-config-factory.c |   49 +++++++++++++-----------------
 src/rss.c                |   75 ++++++++++++++++++++++++++++++++--------------
 src/rss.h                |    1 +
 6 files changed, 78 insertions(+), 56 deletions(-)
---
diff --git a/TODO b/TODO
index c81a363..9620d37 100644
--- a/TODO
+++ b/TODO
@@ -38,7 +38,8 @@
 	* show feed icons in send & receive dialog
 	* cancel fetching comments when summary display is changed
 	* detect duplicate items by content not by feedid
-	* make gtkhtml rendering non-bloking
+	* make gtkhtml rendering non-blocking
 	* use ellipsize in web auth dialog
 	* check feed_folders for errors
 	* check rss_delete_feed for race condition when deletion of camel folder
+	* folder delete should delete feed_folders allocation
diff --git a/src/misc.c b/src/misc.c
index 9573fd5..15770c1 100644
--- a/src/misc.c
+++ b/src/misc.c
@@ -53,7 +53,7 @@ print_hash(gpointer key, gpointer value, gpointer user_data)
 void
 print_hash_int(gpointer key, gpointer value, gpointer user_data)
 {
- 	g_print("key:%s, value:%d\n", (gchar *)key, (int)value);
+ 	g_print("key:%s, value:%d\n", (gchar *)key, GPOINTER_TO_INT(value));
 }
  
 void
diff --git a/src/parser.c b/src/parser.c
index 9e4b044..1be4ae0 100644
--- a/src/parser.c
+++ b/src/parser.c
@@ -754,9 +754,7 @@ tree_walk (xmlNodePtr root, RDF *r)
 			}
 
 			/* This is the channel top level */
-#ifdef RDF_DEBUG
-			printf ("Top level '%s'.\n", walk->name);
-#endif
+			d(printf ("Top level '%s'.\n", walk->name));
 			if (strcasecmp ((char *)walk->name, "channel") == 0) {
 				channel = walk;
 				rewalk = channel->children;
diff --git a/src/rss-config-factory.c b/src/rss-config-factory.c
index 2f56f98..da31d76 100644
--- a/src/rss-config-factory.c
+++ b/src/rss-config-factory.c
@@ -998,6 +998,7 @@ process_dialog_edit(add_feed *feed, gchar *url, gchar *feed_name)
 {
 	gchar *text = NULL;
 	gpointer key = lookup_key(feed_name);
+	gchar *prefix = NULL;
 
 	GtkWidget *msg_feeds = e_error_new(NULL, "org-gnome-evolution-rss:rssmsg", "", NULL);
 	GtkWidget *progress = gtk_progress_bar_new();
@@ -1017,6 +1018,11 @@ process_dialog_edit(add_feed *feed, gchar *url, gchar *feed_name)
         feed->feed_url = sanitize_url(feed->feed_url);
         g_free(text);
         if (feed->feed_url) {
+	feed->edit=1;
+			feed->feed_name = g_path_get_basename(lookup_feed_folder(feed_name));
+			prefix = g_path_get_dirname(lookup_feed_folder(feed_name));
+			if (*prefix != '.')
+				feed->prefix = prefix;
 		if (strcmp(url, feed->feed_url)) {
 			//prevent adding of an existing feed (url)
 			//which might screw things
@@ -1040,8 +1046,8 @@ process_dialog_edit(add_feed *feed, gchar *url, gchar *feed_name)
 		} else {
 			key = gen_md5(url);
 			g_hash_table_replace(rf->hrh,
-                                                        g_strdup(key),
-                                                        GINT_TO_POINTER(feed->fetch_html));
+						g_strdup(key),
+						GINT_TO_POINTER(feed->fetch_html));
 			if (feed->update == 2) {
 				g_hash_table_replace(rf->hrttl,
 						g_strdup(key),
@@ -1088,7 +1094,7 @@ process_dialog_edit(add_feed *feed, gchar *url, gchar *feed_name)
 			g_hash_table_replace(rf->hrdel_messages,
 					g_strdup(key),
 					GINT_TO_POINTER(feed->del_messages));
-					g_hash_table_replace(rf->hrupdate,
+			g_hash_table_replace(rf->hrupdate,
 					g_strdup(key),
 					GINT_TO_POINTER(feed->update));
 			g_hash_table_replace(rf->hrdel_unread,
@@ -1734,7 +1740,6 @@ export_opml(gchar *file)
         char outstr[200];
         time_t t;
         struct tm *tmp;
-        int btn = GTK_RESPONSE_YES;
         FILE *f;
 
 
@@ -1761,29 +1766,7 @@ export_opml(gchar *file)
                 buffer);
         g_free(buffer);
 
-#if 0
-        if (g_file_test (file, G_FILE_TEST_IS_REGULAR)) {
-                GtkWidget *dlg;
-
-                dlg = gtk_message_dialog_new (GTK_WINDOW (rf->preferences), 0,
-                                              GTK_MESSAGE_QUESTION,
-                                              GTK_BUTTONS_YES_NO,
-                                              _("A file by that name already exists.\n"
-                                                "Overwrite it?"));
-                gtk_window_set_title (GTK_WINDOW (dlg), _("Overwrite file?"));
-                gtk_dialog_set_has_separator (GTK_DIALOG (dlg), FALSE);
-
-                btn = gtk_dialog_run (GTK_DIALOG (dlg));
-                gtk_widget_destroy (dlg);
-        }
-
-        if (btn == GTK_RESPONSE_YES)
-                goto over;
-        else
-                goto out;
-#endif
-
-over:   f = fopen(file, "w+");
+	f = fopen(file, "w+");
         if (f) {
                 fwrite(opml, strlen(opml), 1, f);
                 fclose(f);
@@ -1794,7 +1777,7 @@ over:   f = fopen(file, "w+");
                         g_strerror(errno),
                         NULL);
         }
-out:    g_free(opml);
+	g_free(opml);
 
 }
 
@@ -2318,6 +2301,16 @@ rss_folder_factory (EPlugin *epl, EConfigHookItemFactoryData *data)
 		g_object_set_data_full (G_OBJECT (epl), "add-feed", feed, NULL);
 		g_object_set_data_full (G_OBJECT (epl), "url", url, NULL);
 		g_object_set_data_full (G_OBJECT (epl), "ofolder", ofolder, NULL);
+		GtkWidget *ok = (GtkWidget *)glade_xml_get_widget (feed->gui, "ok_button");
+
+		GtkAccelGroup *accel_group = gtk_accel_group_new ();
+		gtk_widget_add_accelerator (ok, "activate", accel_group,
+                              GDK_Return, (GdkModifierType) 0,
+                              GTK_ACCEL_VISIBLE);
+		gtk_widget_add_accelerator (ok, "activate", accel_group,
+                              GDK_KP_Enter, (GdkModifierType) 0,
+                              GTK_ACCEL_VISIBLE);
+		gtk_window_add_accel_group (GTK_WINDOW (feed->dialog), accel_group);
 		return feed->child;
 	}
 
diff --git a/src/rss.c b/src/rss.c
index 4164158..b14e91b 100644
--- a/src/rss.c
+++ b/src/rss.c
@@ -56,6 +56,7 @@ int rss_verbose_debug = 0;
 
 #include <misc/e-activity-handler.h>
 
+#include <mail/em-format.h>
 #include <mail/em-format-html.h>
 #include <mail/em-format-hook.h>
 
@@ -2426,21 +2427,9 @@ char *strcasestr(const char *a, const char *b)
 }
 #endif
 
-gboolean
-setup_feed(add_feed *feed)
+void
+prepare_hashes(void)
 {
-	guint ret = 0;
-	guint ttl;
-        RDF *r = NULL;
-        GString *post = NULL, *content = NULL;
-        GError *err = NULL;
-	gchar *chn_name = NULL, *tmp_chn_name = NULL, *tmp = NULL;
-
-	check_folders();
-
-        r = g_new0 (RDF, 1);
-        r->shown = TRUE;
-
 	if (rf->hr == NULL)	
 		rf->hr  = g_hash_table_new_full(g_str_hash,
 						g_str_equal, 
@@ -2516,6 +2505,24 @@ setup_feed(add_feed *feed)
 						 g_str_equal,
 						 g_free,
 						 NULL);
+}
+
+gboolean
+setup_feed(add_feed *feed)
+{
+	guint ret = 0;
+	guint ttl;
+        RDF *r = NULL;
+        GString *post = NULL, *content = NULL;
+        GError *err = NULL;
+	gchar *chn_name = NULL, *tmp_chn_name = NULL, *tmp = NULL;
+
+	check_folders();
+
+        r = g_new0 (RDF, 1);
+        r->shown = TRUE;
+
+	prepare_hashes();
 
 	rf->pending = TRUE;
 
@@ -2527,7 +2534,10 @@ top:	d(g_print("adding feed->feed_url:%s\n", feed->feed_url));
         if (err) {
 		g_print("setup_feed() -> err:%s\n", err->message);
 		gchar *tmpkey = gen_md5(feed->feed_url);
-		rss_error(tmpkey, feed->feed_name ? feed->feed_name: _("Unamed feed"), _("Error while fetching feed."), err->message);
+		rss_error(tmpkey, 
+			feed->feed_name ? feed->feed_name: _("Unamed feed"), 
+			_("Error while fetching feed."),
+			 err->message);
 		g_free(tmpkey);
 		goto out;
         }
@@ -2553,9 +2563,12 @@ top:	d(g_print("adding feed->feed_url:%s\n", feed->feed_url));
 add:
 		//feed name can only come from an import so we rather prefer
 		//resulted channel name instead of supplied one
-
-		if (feed->feed_name && !chn_name)
+		if (feed->feed_name && !chn_name) {
+		//if (feed->feed_name) {
 	                chn_name = g_strdup(feed->feed_name);
+		//	feed->orig_name = r->title;
+		//	r->title = chn_name;
+		}
                 if (chn_name == NULL)
                         chn_name = g_strdup (_(DEFAULT_NO_CHANNEL));
 
@@ -2563,9 +2576,6 @@ add:
 		chn_name = sanitize_folder(chn_name);
 		tmp = chn_name;
                	chn_name = generate_safe_chn_name(chn_name);
-		if (feed->prefix)
-			chn_name = g_build_path("/", feed->prefix, chn_name, NULL);
-		r->prefix = feed->prefix;
 		
 		gpointer crc_feed = gen_md5(feed->feed_url);
 		g_hash_table_insert(rf->hrname, 
@@ -2622,6 +2632,15 @@ add:
 			g_strdup(crc_feed), 
 			GINT_TO_POINTER(feed->fetch_html));
 
+		if (feed->edit) {
+			gchar *a = g_build_path("/", feed->prefix ? feed->prefix : "", feed->feed_name, NULL);
+			gchar *b = g_build_path("/", r->title, NULL);
+			update_feed_folder(b, a);
+			//r->title = feed->feed_name;
+			r->title = a;
+			g_free(b);
+		}
+
 		if (feed->validate)
 			display_feed(r);
 
@@ -2664,7 +2683,9 @@ add:
 		goto top;
 	}
 
- 	rss_error(NULL, NULL, _("Error while fetching feed."), _("Invalid Feed"));
+ 	rss_error(NULL, NULL, 
+		_("Error while fetching feed."), 
+		_("Invalid Feed"));
 	ret = 0;
 
 out:	rf->pending = FALSE;
@@ -3065,8 +3086,8 @@ void
 fetch_comments(gchar *url, EMFormatHTML *stream)
 {
 	GError *err = NULL;
-	g_print("\nFetching comments from: %s\n", 
-		url);
+	d(g_print("\nFetching comments from: %s\n", 
+		url));
 
 	fetch_unblocking(
 			url,
@@ -3475,6 +3496,10 @@ update_feed_folder(gchar *old_name, gchar *new_name)
 {
 	gchar *oname = extract_main_folder(old_name);
 	gchar *nname = extract_main_folder(new_name);
+	if (!oname)
+		oname = g_strdup(old_name);
+	if (!nname)
+		nname = g_strdup(new_name);
 	FILE *f;
 	gchar *feed_dir = rss_component_peek_base_directory(mail_component_peek());
         if (!g_file_test(feed_dir, G_FILE_TEST_EXISTS))
@@ -4644,7 +4669,9 @@ finish_create_icon (SoupSession *soup_sess, SoupMessage *msg, FEED_IMAGE *user_d
 		CamelStream *feed_fs = camel_stream_fs_new_with_name(user_data->img_file,
 			O_RDWR|O_CREAT, 0666);
 		finish_image(soup_sess, msg, feed_fs);
+#if (EVOLUTION_VERSION >= 22703)
 		display_folder_icon(evolution_store, user_data->key);
+#endif
 	}
 	g_free(user_data->key);
 	g_free(user_data);
@@ -4658,7 +4685,9 @@ finish_create_icon_stream (SoupSession *soup_sess, SoupMessage *msg, FEED_IMAGE
 #endif
 {
 	finish_image(soup_sess, msg, user_data->feed_fs);
+#if (EVOLUTION_VERSION >= 22703)
 	display_folder_icon(evolution_store, user_data->key);
+#endif
 	g_free(user_data->key);
 	g_free(user_data);
 }
diff --git a/src/rss.h b/src/rss.h
index 9a0a36a..ff011d1 100644
--- a/src/rss.h
+++ b/src/rss.h
@@ -204,6 +204,7 @@ typedef struct ADD_FEED {
 	guint		ttl_multiply;	// how much we multiyply ttl value (minutes)
 	guint		update;	// feed update method global; ttl; disabled
 	gboolean	renamed;
+	gboolean	edit;
 } add_feed;
 
 typedef struct USERPASS {



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]