[evolution-rss] hook feed properties in folder properties



commit 0be08763fe9472e99abd8d41fd5c5fa5e9d9999a
Author: Lucian Langa <lucilanga gnome org>
Date:   Fri May 15 16:17:47 2009 +0300

    hook feed properties in folder properties
---
 ChangeLog                             |   22 +++
 TODO                                  |    1 -
 src/network-soup.c                    |    9 +-
 src/org-gnome-evolution-rss.eplug.xml |    9 +-
 src/parser.c                          |    6 +-
 src/parser.h                          |    6 +-
 src/rss-config-factory.c              |  225 +++++++++++++------------
 src/rss-config-factory.h              |    1 +
 src/rss.c                             |  309 +++++++++++++--------------------
 src/rss.h                             |    4 +
 10 files changed, 280 insertions(+), 312 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 1732dc3..8bc7870 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,25 @@
+2009-05-15  Lucian Langa  <lucilanga gnome org>
+
+	* src/org-gnome-evolution-rss.eplug.xml:
+	* src/rss-config-factory.c (build_dialog_add),
+	(actions_dialog_add), (create_dialog_add), (delete_response),
+	(feeds_dialog_edit), (e_plugin_lib_get_configure_widget),
+	(rss_folder_factory_abort), (rss_folder_factory_commit),
+	(rss_folder_factory): hook rss properties in folder properties
+
+	* src/rss.c (rss_error), (taskbar_op_set_progress),
+	(taskbar_op_finish), (statuscb), (browser_write), (pfree),
+	(org_gnome_cooly_format_rss), (org_gnome_cooly_folder_icon),
+	(setup_feed), (update_sr_message), (generic_finish_feed),
+	(fetch_feed), (update_articles), (get_main_folder),
+	(get_feed_folders), (lookup_original_folder), (update_feed_folder),
+	(check_feed_folder), (store_folder_renamed),
+	(custom_update_articles), (custom_fetch_feed), (icon_activated),
+	(org_gnome_cooly_rss_startup), (check_folders),
+	(org_gnome_cooly_rss_refresh), (org_gnome_cooly_rss),
+	(create_mail), (write_feed_status_line), (finish_enclosure): - various
+	cleanups
+
 2009-05-12  Lucian Langa  <lucilanga gnome org>
 
 	* src/network-soup.c: add GNOME_PROXY_RESOLVER for webkit session
diff --git a/TODO b/TODO
index 1e8eb29..5e5d8be 100644
--- a/TODO
+++ b/TODO
@@ -19,7 +19,6 @@
 	* when adding a feed as opml file offer to import (file detection)
 	* run-time migration function from text/evolution-rss-feed -> x-evolution/evolution-rss-feed
 	* cache large feeds
-	* hook feed properties in folder properties
 	* if necessary implement config code for evo 2.12
 	* fix recursivity on layer_find_pos
 	* fix annoying cursor jump when browsing through evo-rss folders
diff --git a/src/network-soup.c b/src/network-soup.c
index 004ccdc..182f650 100644
--- a/src/network-soup.c
+++ b/src/network-soup.c
@@ -207,7 +207,8 @@ proxify_webkit_session(EProxy *proxy, gchar *uri)
 		break;
 		g_object_set (G_OBJECT (webkit_session), SOUP_SESSION_PROXY_URI, proxy_uri, NULL);
 	case 0:
-		soup_session_add_feature_by_type (webkit_session, SOUP_TYPE_PROXY_RESOLVER_GNOME);
+		if (rss_soup_jar)
+			soup_session_add_feature_by_type (webkit_session, SOUP_TYPE_PROXY_RESOLVER_GNOME);
 		break;
 	}
 
@@ -533,15 +534,13 @@ net_get_unblocking(gchar *url,
 
 	/* Queue an async HTTP request */
 	msg = soup_message_new ("GET", url);
-	if (!msg)
-	{
+	if (!msg) {
 		g_set_error(err, NET_ERROR, NET_ERROR_GENERIC,
 				soup_status_get_phrase(2));			//invalid url
 		return -1;
 	}
 
-	if (track)
-	{
+	if (track) {
 		//we want to be able to abort this session by calling
 		//abort_all_soup
 		g_hash_table_insert(rf->session, soup_sess, msg);
diff --git a/src/org-gnome-evolution-rss.eplug.xml b/src/org-gnome-evolution-rss.eplug.xml
index f888fe8..e0983e0 100644
--- a/src/org-gnome-evolution-rss.eplug.xml
+++ b/src/org-gnome-evolution-rss.eplug.xml
@@ -64,17 +64,18 @@ HTML can be displayed using the following engines: gtkHTML, Apple's Webkit or Fi
           format="org_gnome_cooly_format_rss"/>
       </group>
     </hook>
-<!--	<hook class="org.gnome.evolution.mail.config:1.0">
+	<hook class="org.gnome.evolution.mail.config:1.0">
                 <group id="org.gnome.evolution.mail.folderConfig" 
                         target="folder"
-                        check= "rss_folder">
+                        abort="rss_folder_factory_abort"
+                        commit="rss_folder_factory_commit">
                 <item 
                         type="page" 
                         path="10.size" 
                         _label="Size" 
-                        factory="folder_factory"/>
+                        factory="rss_folder_factory"/>
                 </group>
-        </hook>-->
+        </hook>
 
 <hook class="org.gnome.evolution.mail.events:1.0">
     <event id="mail.sendreceive" 
diff --git a/src/parser.c b/src/parser.c
index 5327b9c..f276c51 100644
--- a/src/parser.c
+++ b/src/parser.c
@@ -246,7 +246,7 @@ parse_html(char *url, const char *html, int len)
         return doc;
 }
 
-static char *
+char *
 layer_find_innerelement (xmlNodePtr node, 
 	    char *match, char *el,
 	    char *fail)
@@ -450,7 +450,7 @@ layer_find_ns_tag(xmlNodePtr node,
 }
 
 /* find matching tag (with html entities) */
-static char *
+char *
 layer_find_tag (xmlNodePtr node,
             char *match,
             char *fail)
@@ -555,7 +555,7 @@ layer_find_tag_prop (xmlNodePtr node,
 	return fail;
 }
 
-static gchar *
+gchar *
 layer_find_innerhtml (xmlNodePtr node,
 	    char *match, char *submatch,
 	    char *fail)
diff --git a/src/parser.h b/src/parser.h
index c6617f1..39d6663 100644
--- a/src/parser.h
+++ b/src/parser.h
@@ -22,10 +22,10 @@
 gchar *update_channel(RDF *r);
 
 char *layer_find (xmlNodePtr node, char *match, char *fail);
-static char *layer_find_innerelement (xmlNodePtr node, char *match, char *el, char *fail);
-static gchar *layer_find_innerhtml (xmlNodePtr node, char *match, char *submatch, char *fail);
+char *layer_find_innerelement (xmlNodePtr node, char *match, char *el, char *fail);
+gchar *layer_find_innerhtml (xmlNodePtr node, char *match, char *submatch, char *fail);
 xmlNodePtr layer_find_pos (xmlNodePtr node, char *match, char *submatch);
-static char *layer_find_tag (xmlNodePtr node, char *match, char *fail);
+char *layer_find_tag (xmlNodePtr node, char *match, char *fail);
 
 #endif /*__RSS_H__*/
 
diff --git a/src/rss-config-factory.c b/src/rss-config-factory.c
index 93e1df3..8e6b672 100644
--- a/src/rss-config-factory.c
+++ b/src/rss-config-factory.c
@@ -304,29 +304,30 @@ ttl_cb (GtkWidget *widget, add_feed *data)
         data->ttl = adj;
 }
 
-static void
+void
 del_days_cb (GtkWidget *widget, add_feed *data)
 {
         guint adj = gtk_spin_button_get_value((GtkSpinButton*)widget);
         data->del_days = adj;
 }
 
-static void
+void
 del_messages_cb (GtkWidget *widget, add_feed *data)
 {
         guint adj = gtk_spin_button_get_value((GtkSpinButton*)widget);
         data->del_messages = adj;
 }
 
+
 add_feed *
-create_dialog_add(gchar *text, gchar *feed_text)
+build_dialog_add(gchar *url, gchar *feed_text)
 {
         char *gladefile;
   	add_feed *feed = g_new0(add_feed, 1);
+  	feed->enabled = TRUE;
 	GladeXML  *gui;
 	gchar *flabel = NULL;
   	gboolean fhtml = FALSE;
-  	gboolean enabled = TRUE;
   	gboolean del_unread = FALSE;
   	guint del_feed = 0;
   	guint del_days = 10;
@@ -340,27 +341,27 @@ create_dialog_add(gchar *text, gchar *feed_text)
         g_free (gladefile);
 
         GtkWidget *dialog1 = (GtkWidget *)glade_xml_get_widget (gui, "feed_dialog");
-	gtk_widget_show(dialog1);
-  	gtk_window_set_keep_above(GTK_WINDOW(dialog1), FALSE);
- 	if (text != NULL)
+        GtkWidget *child = (GtkWidget *)glade_xml_get_widget (gui, "dialog-vbox9");
+//	gtk_widget_show(dialog1);
+//  	gtk_window_set_keep_above(GTK_WINDOW(dialog1), FALSE);
+ 	if (url != NULL)
         	gtk_window_set_title (GTK_WINDOW (dialog1), _("Edit Feed"));
   	else
         	gtk_window_set_title (GTK_WINDOW (dialog1), _("Add Feed"));
-  	gtk_window_set_modal (GTK_WINDOW (dialog1), FALSE);
+//  	gtk_window_set_modal (GTK_WINDOW (dialog1), FALSE);
 
 	
         GtkWidget *adv_options = (GtkWidget *)glade_xml_get_widget (gui, "adv_options");
 
         GtkWidget *entry1 = (GtkWidget *)glade_xml_get_widget (gui, "url_entry");
   	//editing
-  	if (text != NULL)
-  	{
+  	if (url != NULL) {
 		gtk_expander_set_expanded(GTK_EXPANDER(adv_options), TRUE);	
-  		gtk_entry_set_text(GTK_ENTRY(entry1), text);
+  		gtk_entry_set_text(GTK_ENTRY(entry1), url);
 		fhtml = GPOINTER_TO_INT(
   	              	g_hash_table_lookup(rf->hrh,
        	                         lookup_key(feed_text)));
-       	 	enabled = GPOINTER_TO_INT(
+       	 	feed->enabled = GPOINTER_TO_INT(
        	         	g_hash_table_lookup(rf->hre,
                                 lookup_key(feed_text)));
         	del_feed = GPOINTER_TO_INT(
@@ -385,17 +386,15 @@ create_dialog_add(gchar *text, gchar *feed_text)
                 	g_hash_table_lookup(rf->hrttl_multiply,
                                 lookup_key(feed_text)));
   	}
-  	gboolean validate = 1;
+  	feed->validate = 1;
 
         GtkWidget *entry2 = (GtkWidget *)glade_xml_get_widget (gui, "entry2");
-	if (text != NULL)
-  	{
+	if (url != NULL) {
         	flabel = g_strdup_printf("%s: <b>%s</b>", _("Folder"),
                         lookup_feed_folder(feed_text));
 		gtk_label_set_text(GTK_LABEL(entry2), flabel);
         	gtk_label_set_use_markup(GTK_LABEL(entry2), 1);
-  	}
-  	else
+  	} else
 		gtk_label_set_text(GTK_LABEL(entry2), flabel);
 
 	GtkWidget *combobox1 = (GtkWidget *)glade_xml_get_widget (gui, "combobox1");
@@ -405,12 +404,12 @@ create_dialog_add(gchar *text, gchar *feed_text)
   	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbutton1), 1-fhtml);
 
 	GtkWidget *checkbutton2 = (GtkWidget *)glade_xml_get_widget (gui, "enabled_check");
-	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbutton2), enabled);
+	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbutton2), feed->enabled);
 
 	GtkWidget *checkbutton3 = (GtkWidget *)glade_xml_get_widget (gui, "validate_check");
-	if (text)
+	if (url)
         	gtk_widget_set_sensitive(checkbutton3, FALSE);
-  	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbutton3), validate);
+  	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbutton3), feed->validate);
 
 	GtkWidget *spinbutton1 = (GtkWidget *)glade_xml_get_widget (gui, "storage_sb1");
 	GtkWidget *spinbutton2 = (GtkWidget *)glade_xml_get_widget (gui, "storage_sb2");
@@ -427,8 +426,7 @@ create_dialog_add(gchar *text, gchar *feed_text)
 	GtkWidget *ttl_value = (GtkWidget *)glade_xml_get_widget (gui, "ttl_value");
 	gtk_spin_button_set_range((GtkSpinButton *)ttl_value, 0, (guint)MAX_TTL);
 
-  	switch (del_feed)
-  	{
+  	switch (del_feed) {
         case 1:         //all but the last
                 gtk_toggle_button_set_active(
                         GTK_TOGGLE_BUTTON(radiobutton2), 1);
@@ -455,8 +453,7 @@ create_dialog_add(gchar *text, gchar *feed_text)
        	gtk_combo_box_set_active(GTK_COMBO_BOX(combobox1), feed->ttl_multiply);
 	g_signal_connect(combobox1, "changed", G_CALLBACK(ttl_multiply_cb), feed);
 
-	switch (feed->update)
-	{
+	switch (feed->update) {
 	case 2:
 		gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radiobutton5), 1);
 		break;
@@ -484,21 +481,46 @@ create_dialog_add(gchar *text, gchar *feed_text)
                               GTK_ACCEL_VISIBLE);
 	gtk_window_add_accel_group (GTK_WINDOW (dialog1), accel_group);
 
-  	gint result = gtk_dialog_run(GTK_DIALOG(dialog1));
-  	switch (result)
-  	{
+  	feed->fetch_html = fhtml;
+        feed->dialog = dialog1;
+        feed->child = child;
+	feed->gui = gui;
+  	if (flabel)
+        	g_free(flabel);
+  	return feed;
+}
+
+void
+actions_dialog_add(add_feed *feed, gchar *url)
+{
+        GtkWidget *entry1 = (GtkWidget *)glade_xml_get_widget (feed->gui, "url_entry");
+	GtkWidget *checkbutton1 = (GtkWidget *)glade_xml_get_widget (feed->gui, "html_check");
+	GtkWidget *checkbutton2 = (GtkWidget *)glade_xml_get_widget (feed->gui, "enabled_check");
+	GtkWidget *checkbutton3 = (GtkWidget *)glade_xml_get_widget (feed->gui, "validate_check");
+	GtkWidget *checkbutton4 = (GtkWidget *)glade_xml_get_widget (feed->gui, "storage_unread");
+	GtkWidget *radiobutton1 = (GtkWidget *)glade_xml_get_widget (feed->gui, "storage_rb1");
+	GtkWidget *radiobutton2 = (GtkWidget *)glade_xml_get_widget (feed->gui, "storage_rb2");
+	GtkWidget *radiobutton3 = (GtkWidget *)glade_xml_get_widget (feed->gui, "storage_rb3");
+	GtkWidget *radiobutton4 = (GtkWidget *)glade_xml_get_widget (feed->gui, "ttl_global");
+	GtkWidget *radiobutton5 = (GtkWidget *)glade_xml_get_widget (feed->gui, "ttl");
+	GtkWidget *radiobutton6 = (GtkWidget *)glade_xml_get_widget (feed->gui, "ttl_disabled");
+	GtkWidget *spinbutton1 = (GtkWidget *)glade_xml_get_widget (feed->gui, "storage_sb1");
+	GtkWidget *spinbutton2 = (GtkWidget *)glade_xml_get_widget (feed->gui, "storage_sb2");
+	GtkWidget *ttl_value = (GtkWidget *)glade_xml_get_widget (feed->gui, "ttl_value");
+  	gboolean fhtml = feed->fetch_html;
+
+  	gint result = gtk_dialog_run(GTK_DIALOG(feed->dialog));
+  	switch (result) {
     	case GTK_RESPONSE_OK:
         	feed->feed_url = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry1)));
         	fhtml = gtk_toggle_button_get_active (
         	        GTK_TOGGLE_BUTTON (checkbutton1));
         	fhtml ^= 1;
         	feed->fetch_html = fhtml;
-        	enabled = gtk_toggle_button_get_active(
+        	feed->enabled = gtk_toggle_button_get_active(
                 	GTK_TOGGLE_BUTTON(checkbutton2));
-        	feed->enabled = enabled;
-        	validate = gtk_toggle_button_get_active(
+        	feed->validate = gtk_toggle_button_get_active(
                 	GTK_TOGGLE_BUTTON(checkbutton3));
-        	feed->validate = validate;
         	guint i=0;
         	while (i<3) {
                 	if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radiobutton1)))
@@ -532,20 +554,26 @@ create_dialog_add(gchar *text, gchar *feed_text)
         	feed->ttl = gtk_spin_button_get_value((GtkSpinButton *)ttl_value);
         	feed->add = 1;
         	// there's no reason to feetch feed if url isn't changed
-        	if (text && !strncmp(text, feed->feed_url, strlen(text)))
+        	if (url && !strncmp(url, feed->feed_url, strlen(url)))
                 	feed->changed = 0;
         	else
                 	feed->changed = 1;
         	break;
     	default:
         	feed->add = 0;
-        	gtk_widget_destroy (dialog1);
+        	gtk_widget_destroy (feed->dialog);
         	break;
   	}
-        feed->dialog = dialog1;
-  	if (flabel)
-        	g_free(flabel);
-  	return feed;
+}
+
+
+add_feed *
+create_dialog_add(gchar *url, gchar *feed_text)
+{
+	add_feed *feed = NULL;
+	feed = build_dialog_add(url, feed_text);
+	actions_dialog_add(feed, url);
+	return feed;
 }
 
 void
@@ -784,11 +812,9 @@ delete_response(GtkWidget *selector, guint response, gpointer user_data)
         CamelFolder *mail_folder;
         if (response == GTK_RESPONSE_OK) {
                 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(user_data));
-                if (gtk_tree_selection_get_selected(selection, &model, &iter))
-                {
+                if (gtk_tree_selection_get_selected(selection, &model, &iter)) {
                         gtk_tree_model_get (model, &iter, 3, &name, -1);
-                        if (gconf_client_get_bool(rss_gconf, GCONF_KEY_REMOVE_FOLDER, NULL))
-                        {
+                        if (gconf_client_get_bool(rss_gconf, GCONF_KEY_REMOVE_FOLDER, NULL)) {
                                 //delete folder
                                 CamelStore *store = mail_component_peek_local_store(NULL);
                                 gchar *full_path = g_strdup_printf("%s/%s",
@@ -797,8 +823,7 @@ delete_response(GtkWidget *selector, guint response, gpointer user_data)
                                 delete_feed_folder_alloc(lookup_feed_folder(name));
                                 camel_exception_init (&ex);
                                 rss_delete_folders (store, full_path, &ex);
-                                if (camel_exception_is_set (&ex))
-                                {
+                                if (camel_exception_is_set (&ex)) {
                                         e_error_run(NULL,
                                                 "mail:no-delete-folder", full_path, ex.desc, NULL);
                                         camel_exception_clear (&ex);
@@ -922,22 +947,20 @@ feeds_dialog_edit(GtkDialog *d, gpointer data)
 
         /* This will only work in single or browse selection mode! */
         selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(data));
-        if (gtk_tree_selection_get_selected(selection, &model, &iter))
-        {
+        if (gtk_tree_selection_get_selected(selection, &model, &iter)) {
                 gtk_tree_model_get (model, &iter, 3, &feed_name, -1);
                 name = g_hash_table_lookup(rf->hr, lookup_key(feed_name));
-                if (name)
-                {
+                if (name) {
                         add_feed *feed = create_dialog_add(name, feed_name);
                     	if (feed->dialog)
                                 gtk_widget_destroy(feed->dialog);
         		GtkWidget *msg_feeds = e_error_new(NULL, "org-gnome-evolution-rss:rssmsg", "", NULL);
-	GtkWidget *progress = gtk_progress_bar_new();
-        gtk_box_pack_start(GTK_BOX(((GtkDialog *)msg_feeds)->vbox), progress, FALSE, FALSE, 0);
-        gtk_progress_bar_set_fraction((GtkProgressBar *)progress, 0);
-	/* xgettext:no-c-format */
-        gtk_progress_bar_set_text((GtkProgressBar *)progress, _("0% done"));
-	feed->progress=progress;
+			GtkWidget *progress = gtk_progress_bar_new();
+        		gtk_box_pack_start(GTK_BOX(((GtkDialog *)msg_feeds)->vbox), progress, FALSE, FALSE, 0);
+        		gtk_progress_bar_set_fraction((GtkProgressBar *)progress, 0);
+			/* xgettext:no-c-format */
+        		gtk_progress_bar_set_text((GtkProgressBar *)progress, _("0% done"));
+			feed->progress=progress;
         		gtk_window_set_keep_above(GTK_WINDOW(msg_feeds), TRUE);
         		g_signal_connect(msg_feeds, "response", G_CALLBACK(msg_feeds_response), NULL);
 			gtk_widget_show_all(msg_feeds);
@@ -949,12 +972,10 @@ feeds_dialog_edit(GtkDialog *d, gpointer data)
                         feed->feed_url = sanitize_url(feed->feed_url);
                         g_free(text);
                         url = name;
-                        if (feed->feed_url)
-                        {
+                        if (feed->feed_url) {
                                 gtk_tree_model_get (model, &iter, 3, &name, -1);
                                 gpointer key = lookup_key(name);
-                                if (strcmp(url, feed->feed_url))
-                                {
+                                if (strcmp(url, feed->feed_url)) {
                                         //prevent adding of an existing feed (url)
                                         //which might screw things
                                         if (g_hash_table_find(rf->hr,
@@ -968,27 +989,22 @@ feeds_dialog_edit(GtkDialog *d, gpointer data)
 					hrfeed *saved_feed = save_feed_hash(name);
                                       	remove_feed_hash(name);
                                         gpointer md5 = gen_md5(feed->feed_url);
-                                        if (!setup_feed(feed))
-                                        {
+                                        if (!setup_feed(feed)) {
                                                 //editing might loose a corectly setup feed
                                                 //so re-add previous deleted feed
                                                 restore_feed_hash(key, saved_feed);
-                                        }
-                                        else
+                                        } else
                                               destroy_feed_hash_content(saved_feed);
                                         gtk_list_store_clear(GTK_LIST_STORE(model));
                                         g_hash_table_foreach(rf->hrname, construct_list, model);
                                         save_gconf_feed();
                                         g_free(md5);
-                                }
-                                else
-                                {
+                                } else {
                                         key = gen_md5(url);
                                         g_hash_table_replace(rf->hrh,
                                                         g_strdup(key),
                                                         GINT_TO_POINTER(feed->fetch_html));
-					if (feed->update == 2)
-					{
+					if (feed->update == 2) {
                                         	g_hash_table_replace(rf->hrttl,
                                                         g_strdup(key),
                                                         GINT_TO_POINTER(feed->ttl));
@@ -1663,8 +1679,7 @@ e_plugin_lib_get_configure_widget (EPlugin *epl)
                                     GCONF_KEY_HTML_RENDER,
                                     NULL));
 
-        switch (render)
-        {
+        switch (render) {
                 case 10:
                         gtk_combo_box_set_active(GTK_COMBO_BOX(combo), 0);
                         break;
@@ -1760,49 +1775,45 @@ e_plugin_lib_get_configure_widget (EPlugin *epl)
         return hbox;
 }
 
-GtkWidget *
-folder_factory (EPlugin *epl, EConfigHookItemFactoryData *data)
+void rss_folder_factory_abort (EPlugin *epl, EConfigTarget *target)
 {
-        EMConfigTargetFolder *target=  (EMConfigTargetFolder *)data->config->target;
-        GtkWidget *lbl_size, *lbl_size_val;
-        GtkVBox *vbx;
-        GtkHBox *hbx_size;
-        char *folder_size;
-	GladeXML  *gui;
+	g_print("abort");
+}
 
-        char *gladefile;
-        gladefile = g_build_filename (EVOLUTION_GLADEDIR,
-                                      "rss-ui.glade",
-                                      NULL);
-        gui = glade_xml_new (gladefile, NULL, NULL);
-        g_free (gladefile);
+void rss_folder_factory_commit (EPlugin *epl, EConfigTarget *target)
+{
+	g_print("commit");
+}
 
-        GtkWidget *dialog1 = (GtkWidget *)glade_xml_get_widget (gui, "vbox6");
-//	gtk_widget_show(dialog1);
+GtkWidget *
+rss_folder_factory (EPlugin *epl, EConfigHookItemFactoryData *data)
+{
+        EMConfigTargetFolder *target = (EMConfigTargetFolder *)data->config->target;
+	gchar *url = NULL, *ofolder = NULL;
+	gchar *main_folder = get_main_folder();
+	gchar *folder = target->folder->full_name;
+	add_feed *feed = NULL;
+
+	//filter only rss folders
+	if (folder == NULL
+          || g_ascii_strncasecmp(folder, main_folder, strlen(main_folder)))
+                goto out;
+
+	ofolder = lookup_original_folder(folder);
+	url = g_hash_table_lookup(rf->hr, lookup_key(ofolder));
+	if (url) {
+		feed = build_dialog_add(url, ofolder);
+		//we do not need ok/cancel buttons here
+		GtkWidget *action_area = gtk_dialog_get_action_area(GTK_DIALOG(feed->dialog));
+		gtk_widget_hide(action_area);
+		gtk_widget_ref(feed->child);
+		gtk_container_remove (GTK_CONTAINER (feed->child->parent), feed->child);
+		gtk_notebook_remove_page((GtkNotebook *) data->parent, 0);
+		gtk_notebook_insert_page((GtkNotebook *) data->parent, (GtkWidget *) feed->child, NULL, 0);
+	}
 
-//        model = exchange_account_folder_size_get_model (account);
-  //      if (model)
-//                folder_size = g_strdup_printf (_("%s KB"), exchange_folder_size_get_val (model, folder_name));
-    //    else
-                folder_size = g_strdup (_("0 KB"));
-
-        hbx_size = (GtkHBox*) gtk_window_new (GTK_WINDOW_POPUP);
-        vbx = (GtkVBox *)gtk_notebook_get_nth_page (GTK_NOTEBOOK (data->parent), 0);
-
-        lbl_size = gtk_label_new_with_mnemonic (_("Size:"));
-        lbl_size_val = gtk_label_new_with_mnemonic (_(folder_size));
-        gtk_widget_show (lbl_size);
-        gtk_widget_show (lbl_size_val);
-        gtk_misc_set_alignment (GTK_MISC (lbl_size), 0.0, 0.5);
-        gtk_misc_set_alignment (GTK_MISC (lbl_size_val), 0.0, 0.5);
-        gtk_box_pack_start (GTK_BOX (dialog1), lbl_size, FALSE, TRUE, 12);
-        gtk_box_pack_start (GTK_BOX (dialog1), lbl_size_val, FALSE, TRUE, 10);
-        gtk_widget_show_all (GTK_WIDGET (dialog1));
-
-        gtk_box_pack_start (GTK_BOX (vbx), GTK_WIDGET (dialog1), FALSE, FALSE, 0);
-        g_free (folder_size);
-
-        return GTK_WIDGET (hbx_size);
+	g_free(ofolder);
+out:	return NULL;
 }
 
 /*=============*
diff --git a/src/rss-config-factory.h b/src/rss-config-factory.h
index f8208f0..a2d0b39 100644
--- a/src/rss-config-factory.h
+++ b/src/rss-config-factory.h
@@ -21,6 +21,7 @@
 
 void store_redraw(GtkTreeView *data);
 void import_dialog_response(GtkWidget *selector, guint response, gpointer user_data);
+void del_days_cb (GtkWidget *widget, add_feed *data);
 
 #endif /*__RSS_CONFIG_FACTORY_H_*/
 
diff --git a/src/rss.c b/src/rss.c
index 01bf0ee..376d0a4 100644
--- a/src/rss.c
+++ b/src/rss.c
@@ -209,8 +209,6 @@ void check_folders(void);
 CamelMimePart *file_to_message(const char *name);
 void save_gconf_feed(void);
 void check_feed_age(void);
-static void del_days_cb (GtkWidget *widget, add_feed *data);
-static void del_messages_cb (GtkWidget *widget, add_feed *data);
 void get_feed_age(gpointer key, gpointer value);
 gchar *encode_html_entities(gchar *str);
 static void
@@ -280,10 +278,8 @@ rss_error(gpointer key, gchar *name, gchar *error, gchar *emsg)
 		msg = g_strdup(emsg); 
 
 #if (EVOLUTION_VERSION >= 22200)
-	if (key)
-	{ 
-		if (!g_hash_table_lookup(rf->error_hash, key))
-		{
+	if (key) { 
+		if (!g_hash_table_lookup(rf->error_hash, key)) {
         		EActivityHandler *activity_handler = mail_component_peek_activity_handler (mail_component_peek());
 //			guint activity_id = g_hash_table_lookup(rf->activity, key);
                 	ed  = e_error_new(NULL, "org-gnome-evolution-rss:feederr",
@@ -303,8 +299,7 @@ rss_error(gpointer key, gchar *name, gchar *error, gchar *emsg)
 	}
 #endif
 
-	if (!rf->errdialog)
-        {
+	if (!rf->errdialog) {
 
                 ed  = e_error_new(NULL, "org-gnome-evolution-rss:feederr",
                              error, msg, NULL);
@@ -377,8 +372,7 @@ taskbar_op_set_progress(gpointer key, gchar *msg, gdouble progress)
 	EActivityHandler *activity_handler = mail_component_peek_activity_handler (mail_component_peek ());
 	guint activity_id = GPOINTER_TO_INT(g_hash_table_lookup(rf->activity, key));
 
-	if (activity_id)
-	{
+	if (activity_id) {
 		e_activity_handler_operation_progressing(activity_handler,
 				activity_id,
                                 g_strdup(msg), 
@@ -391,8 +385,7 @@ taskbar_op_finish(gpointer key)
 {
 	EActivityHandler *activity_handler = mail_component_peek_activity_handler (mail_component_peek ());
 	
-	if (rf->activity)
-	{
+	if (rf->activity) {
 		guint activity_key = GPOINTER_TO_INT(g_hash_table_lookup(rf->activity, key));
 		if (activity_key)
 			e_activity_handler_operation_finished(activity_handler, activity_key);
@@ -434,8 +427,7 @@ statuscb(NetStatusType status, gpointer statusdata, gpointer data)
 		if (rf->cancel_all)
 			break;
 #ifndef EVOLUTION_2_12
-		if (rf->progress_dialog  && 0 <= fraction && 1 >= fraction)
-		{
+		if (rf->progress_dialog  && 0 <= fraction && 1 >= fraction) {
 			gtk_progress_bar_set_fraction((GtkProgressBar *)rf->progress_bar, fraction);
 			gchar *what = g_strdup_printf(_("%2.0f%% done"), fraction*100);
 			gtk_label_set_text(GTK_LABEL(rf->label), data);
@@ -445,8 +437,7 @@ statuscb(NetStatusType status, gpointer statusdata, gpointer data)
 #else
 		if (rf->progress_bar && 0 <= fraction && 1 >= fraction)
 			gtk_progress_bar_set_fraction((GtkProgressBar *)rf->progress_bar, fraction);
-		if (rf->sr_feed)
-		{
+		if (rf->sr_feed) {
 			gchar *furl = g_strdup_printf("<b>%s</b>: %s", _("Feed"), (char *)data);
 			gtk_label_set_markup (GTK_LABEL (rf->sr_feed), furl);
 			g_free(furl);
@@ -482,11 +473,10 @@ browser_write(gchar *string, gint length, gchar *base)
 		gtk_moz_embed_append_data(GTK_MOZ_EMBED(rf->mozembed),
 			str, 4096);
 		str+=4096;
-	}
-	else
+	} else
 		gtk_moz_embed_append_data(GTK_MOZ_EMBED(rf->mozembed),
 		str, len);
-	len-=4096;
+		len-=4096;
 	}
 #endif
 	break;
@@ -1801,6 +1791,12 @@ void
 pfree(EMFormatHTMLPObject *o)
 {
 	struct _org_gnome_rss_controls_pobject *po = (struct _org_gnome_rss_controls_pobject *) o;
+	gpointer key = g_hash_table_lookup(rf->key_session, po->website);
+	g_print("key sess:%p\n", key);
+	if (key) {
+		g_hash_table_remove(rf->key_session, po->website);
+		soup_session_abort(key);
+	}
 	guint engine = gconf_client_get_int(rss_gconf, GCONF_KEY_HTML_RENDER, NULL);
 #ifdef HAVE_GECKO
 	if (engine == 2)
@@ -1809,12 +1805,12 @@ pfree(EMFormatHTMLPObject *o)
 //		gtk_moz_embed_pop_startup();
 	}
 #endif
-	g_signal_handler_disconnect(po->format->html, po->shandler);
-	if (rf->mozembed)
-	{
-		gtk_widget_destroy(rf->mozembed);
+	if (rf->mozembed) {
+		if (engine ==2) //crashes webkit - https://bugs.webkit.org/show_bug.cgi?id=25042
+			gtk_widget_destroy(rf->mozembed);
 		rf->mozembed = NULL;
 	}
+	g_signal_handler_disconnect(po->format->html, po->shandler);
 	gtk_widget_destroy(po->container);
 	g_free(po->website);
 	browser_fetching = 0;
@@ -1888,12 +1884,10 @@ void org_gnome_cooly_format_rss(void *ep, EMFormatHookTarget *t)	//camelmimepart
         camel_stream_printf (t->stream, "<object classid=%s></object>\n", classid);
 
 
-	if (rf->cur_format || (feedid && is_html && rf->cur_format))
-	{
+	if (rf->cur_format || (feedid && is_html && rf->cur_format)) {
 		guint engine = fallback_engine();
 #ifdef HAVE_RENDERKIT
-		if (engine && engine != 10)
-		{ 
+		if (engine && engine != 10) { 
         		char *classid = g_strdup_printf ("org-gnome-rss-controls-%d",
 				org_gnome_rss_controls_counter_id);
 			org_gnome_rss_controls_counter_id++;
@@ -1939,13 +1933,11 @@ void org_gnome_cooly_format_rss(void *ep, EMFormatHookTarget *t)	//camelmimepart
 		gchar *tmp = decode_utf8_entities(content->str);
 		xmlDoc *src = (xmlDoc *)parse_html(addr, tmp, strlen(tmp));
 
-		if (src)
-		{
+		if (src) {
 			htmlDocDumpMemory(src, &buff, &size);
 			d(g_print("htmlDocDumpMemory:%s\n", buff));
 			xmlFree(src);
-		}
-		else
+		} else
 			goto out;
 
 		camel_stream_printf (fstream,
@@ -1969,9 +1961,7 @@ void org_gnome_cooly_format_rss(void *ep, EMFormatHookTarget *t)	//camelmimepart
 
 		g_free(subject);
 		g_string_free(content, 1);
-	}
-	else
-	{
+	} else {
 		d(g_print("normal html rendering\n"));
 		GByteArray *buffer;
 		CamelStreamMem *stream = (CamelStreamMem *)camel_stream_mem_new();
@@ -1986,11 +1976,9 @@ void org_gnome_cooly_format_rss(void *ep, EMFormatHookTarget *t)	//camelmimepart
 //		buff = buffer->data;
 //#else
 		gchar *tmp;
-	 	if (camel_content_type_is(type, "text", "evolution-rss-feed"))	//old evolution-rss content type
-		{
+	 	if (camel_content_type_is(type, "text", "evolution-rss-feed")) {	//old evolution-rss content type
 			tmp = decode_utf8_entities((gchar *)(buffer->data));
-		}
-		else
+		} else
 			tmp = g_strdup((gchar *)(buffer->data));
 
 		buff=(xmlChar *)tmp;
@@ -2139,8 +2127,7 @@ void org_gnome_cooly_folder_icon(void *ep, EMEventTargetCustomIcon *t)
 		goto out;
 	}
 
-normal:	if (!initialised) //move this to startup
-	{
+normal:	if (!initialised) { //move this to startup
 		gchar *iconfile = g_build_filename (EVOLUTION_ICONDIR,
 	                                    "rss-16.png",
 						NULL);
@@ -2339,8 +2326,7 @@ setup_feed(add_feed *feed)
 		
 top:	d(g_print("adding feed->feed_url:%s\n", feed->feed_url));
         content = fetch_blocking(feed->feed_url, NULL, post, textcb, rf, &err);
-        if (err)
-	{
+        if (err) {
 		g_print("setup_feed() -> err:%s\n", err->message);
 		rss_error(NULL, feed->feed_name ? feed->feed_name: _("Unamed feed"), _("Error while fetching feed."), err->message);
 		goto out;
@@ -2460,8 +2446,7 @@ out:	rf->pending = FALSE;
 void
 update_sr_message(void)
 {
-	if (flabel && farticle)
-	{
+	if (flabel && farticle) {
 		gchar *fmsg = g_strdup_printf(_("Getting message %d of %d"), farticle, ftotal);
 		gtk_label_set_text (GTK_LABEL (flabel), fmsg);
 		g_free(fmsg);
@@ -2545,30 +2530,26 @@ generic_finish_feed(rfMessage *msg, gpointer user_data)
 
 	d(g_print("taskbar_op_finish() queue:%d\n", rf->feed_queue));
 
-	if (rf->feed_queue)
-	{
+	if (rf->feed_queue) {
 		rf->feed_queue--;
 		gchar *tmsg = g_strdup_printf(_("Fetching Feeds (%d enabled)"), g_hash_table_size(rf->hrname));
 		taskbar_op_set_progress("main", tmsg, rf->feed_queue ? ((gfloat)((100-(rf->feed_queue*100/g_hash_table_size(rf->hrname))))/100): 1);
 		g_free(tmsg);
 	}
 
-	if (rf->feed_queue == 0)
-	{
+	if (rf->feed_queue == 0) {
 		d(g_print("taskbar_op_finish()\n"));
 		taskbar_op_finish("main");
 		farticle=0;
 		ftotal=0;
 #ifndef EVOLUTION_2_12
-		if(rf->progress_dialog)
-        	{
+		if(rf->progress_dialog) {
         	     	gtk_widget_destroy(rf->progress_dialog);
        			rf->progress_dialog = NULL;
 			rf->progress_bar = NULL;
         	}
 #else
-		if(rf->label && rf->info)
-		{
+		if(rf->label && rf->info) {
                         gtk_label_set_markup (GTK_LABEL (rf->label), _("Complete."));
                 	if (rf->info->cancel_button)
                         	gtk_widget_set_sensitive(rf->info->cancel_button, FALSE);
@@ -2604,11 +2585,9 @@ generic_finish_feed(rfMessage *msg, gpointer user_data)
         	goto out;
     	}
 
-	if (rf->cancel)
-	{
+	if (rf->cancel) {
 #ifdef EVOLUTION_2_12
-		if(rf->label && rf->feed_queue == 0 && rf->info)
-        	{
+		if(rf->label && rf->feed_queue == 0 && rf->info) {
 			farticle=0;
 			ftotal=0;
                 	gtk_label_set_markup (GTK_LABEL (rf->label), _("Canceled."));
@@ -2663,18 +2642,15 @@ generic_finish_feed(rfMessage *msg, gpointer user_data)
 	if (msg->status_code == SOUP_STATUS_CANCELLED)
 		goto out;
 
-	if (!deleted)
-	{
+	if (!deleted) {
 		if (!user_data || !lookup_key(user_data))
 			goto out;
 		r->uri =  g_hash_table_lookup(rf->hr, lookup_key(user_data));
 	
         	chn_name = display_doc (r);
 
-		if (chn_name)
-		{
-			if (g_ascii_strcasecmp(user_data, chn_name) != 0)
-			{
+		if (chn_name) {
+			if (g_ascii_strcasecmp(user_data, chn_name) != 0) {
 				gchar *md5 = g_strdup(
 					g_hash_table_lookup(rf->hrname, user_data));
 				g_hash_table_remove(rf->hrname_r, md5);
@@ -2699,23 +2675,20 @@ generic_finish_feed(rfMessage *msg, gpointer user_data)
 	g_free(r);
 	g_string_free(response, 1);
 
-	if (!deleted)
-	{
+	if (!deleted) {
 		if (g_hash_table_lookup(rf->hrdel_feed, lookup_key(user_data)))
 			get_feed_age(user_data, lookup_key(user_data));
 	}
 //tout:	
 
 #ifdef EVOLUTION_2_12
-	if (rf->sr_feed && !deleted)
-	{
+	if (rf->sr_feed && !deleted) {
 		gchar *furl = g_strdup_printf("<b>%s</b>: %s", _("Feed"), (gchar *)user_data);
 		gtk_label_set_markup (GTK_LABEL (rf->sr_feed), furl);
 		gtk_label_set_justify(GTK_LABEL (rf->sr_feed), GTK_JUSTIFY_LEFT);
 		g_free(furl);
 	}
-	if(rf->label && rf->feed_queue == 0 && rf->info)
-	{
+	if(rf->label && rf->feed_queue == 0 && rf->info) {
 		farticle=0;
 		ftotal=0;
 		gtk_label_set_markup (GTK_LABEL (rf->label), _("Complete"));
@@ -2739,8 +2712,7 @@ generic_finish_feed(rfMessage *msg, gpointer user_data)
 	}
 #endif
 out:	
-	if (user_data)
-	{
+	if (user_data) {
 		//not sure why it dies here
 		if (!rf->cancel && !rf->cancel_all)
 			g_free(user_data);
@@ -2761,8 +2733,7 @@ fetch_feed(gpointer key, gpointer value, gpointer user_data)
 
 	// check if we're enabled and no cancelation signal pending
 	// and no imports pending
-	if (g_hash_table_lookup(rf->hre, lookup_key(key)) && !rf->cancel && !rf->import)
-	{
+	if (g_hash_table_lookup(rf->hre, lookup_key(key)) && !rf->cancel && !rf->import) {
 		d(g_print("\nFetching: %s..%s\n", 
 			(gchar *)g_hash_table_lookup(rf->hr, lookup_key(key)), (gchar *)key));
 		rf->feed_queue++;
@@ -2776,8 +2747,7 @@ fetch_feed(gpointer key, gpointer value, gpointer user_data)
 				1,
 				&err);			// because we might lose it if
 							// feed gets deleted
-		if (err)
-		{
+		if (err) {
 			rf->feed_queue--;
                      	gchar *msg = g_strdup_printf("\n%s\n%s", 
 				 	(gchar *)key, err->message);
@@ -2785,8 +2755,7 @@ fetch_feed(gpointer key, gpointer value, gpointer user_data)
                      	g_free(msg);
 		}
 		
-	}
-	else if (rf->cancel && !rf->feed_queue)
+	} else if (rf->cancel && !rf->feed_queue)
 		rf->cancel = 0;		//all feeds where either procesed or skipped
 }
 
@@ -2919,8 +2888,7 @@ update_articles(gboolean disabler)
         if (mc->priv->quit_state != -1)
 		rf->cancel=1;
 
-	if (!rf->pending && !rf->feed_queue && !rf->cancel_all && rf->online)
-	{
+	if (!rf->pending && !rf->feed_queue && !rf->cancel_all && rf->online) {
 		g_print("Reading RSS articles...\n");
 		rf->pending = TRUE;
 		check_folders();
@@ -2955,13 +2923,10 @@ get_main_folder(void)
             g_mkdir_with_parents (feed_dir, 0755);
         gchar *feed_file = g_strdup_printf("%s/main_folder", feed_dir);
         g_free(feed_dir);
-        if (g_file_test(feed_file, G_FILE_TEST_EXISTS))
-	{
+        if (g_file_test(feed_file, G_FILE_TEST_EXISTS)) {
 		FILE *f = fopen(feed_file, "r");
-		if (f)
-		{
-			if (fgets(mf, 511, f) != NULL)
-			{
+		if (f) {
+			if (fgets(mf, 511, f) != NULL) {
 				fclose(f);
 				g_free(feed_file);
 				return g_strdup(mf);
@@ -2985,11 +2950,9 @@ get_feed_folders(void)
             g_mkdir_with_parents (feed_dir, 0755);
         gchar *feed_file = g_strdup_printf("%s/feed_folders", feed_dir);
         g_free(feed_dir);
-        if (g_file_test(feed_file, G_FILE_TEST_EXISTS))
-	{
+        if (g_file_test(feed_file, G_FILE_TEST_EXISTS)) {
 		FILE *f = fopen(feed_file, "r");
-		while (!feof(f))
-		{
+		while (!feof(f)) {
 			fgets(tmp1, 512, f);
 			fgets(tmp2, 512, f);
 			g_hash_table_insert(rf->feed_folders,
@@ -3015,6 +2978,25 @@ lookup_main_folder(void)
 	return rf->main_folder;
 }
 
+//lookup original name based on renamed folder
+//
+gchar *
+lookup_original_folder(gchar *folder)
+{
+	gchar *tmp = NULL, *ofolder = NULL;
+
+	tmp = g_path_get_basename(folder);
+	if (tmp) {
+        	ofolder = g_hash_table_lookup(rf->feed_folders, tmp);
+		if (ofolder) {
+			g_free(tmp);
+			return g_strdup(ofolder);
+		} else
+			return tmp;
+	}
+	return NULL;
+}
+
 //
 //lookups feed folder name
 //this can be different from the default if folder was renamed
@@ -3224,8 +3206,7 @@ update_feed_folder(gchar *old_name, gchar *new_name)
 	gchar *orig_name = g_hash_table_lookup(rf->feed_folders, oname);
 	if (!orig_name)
 		g_hash_table_replace(rf->feed_folders, g_strdup(nname), g_strdup(oname));
-	else
-	{
+	else {
 		g_hash_table_replace(rf->feed_folders, g_strdup(nname), g_strdup(orig_name));
 		g_hash_table_remove(rf->feed_folders, oname);
 	}
@@ -3258,8 +3239,7 @@ check_feed_folder(gchar *folder_name)
 	d(g_print("real_folder:%s\n", real_folder));
 	d(g_print("real_name:%s\n", real_name));
         mail_folder = camel_store_get_folder (store, real_name, 0, NULL);
-        if (mail_folder == NULL)
-        {
+        if (mail_folder == NULL) {
                 camel_store_create_folder (store, main_folder, real_folder, NULL);
                 mail_folder = camel_store_get_folder (store, real_name, 0, NULL);
         }
@@ -3282,8 +3262,7 @@ store_folder_renamed(CamelObject *o, void *event_data, void *data)
 	CamelIndex *idx;
 
 	gchar *main_folder = lookup_main_folder();
-	if (!g_ascii_strncasecmp(info->old_base, main_folder, strlen(main_folder)))
-	{
+	if (!g_ascii_strncasecmp(info->old_base, main_folder, strlen(main_folder))) {
 		printf("Folder renamed to '%s' from '%s'\n", info->new->full_name, info->old_base);
 		if (!g_ascii_strncasecmp(main_folder, info->old_base, strlen(info->old_base)))
 			update_main_folder(info->new->full_name);
@@ -3321,8 +3300,7 @@ custom_update_articles(CDATA *cdata)
 {
 	GError *err = NULL;
 	//if (!rf->pending && !rf->feed_queue && rf->online)
-	if (rf->online)
-	{
+	if (rf->online) {
 		g_print("Fetch (custom) RSS articles...\n");
 		check_folders();
 		rf->err = NULL;
@@ -3330,8 +3308,7 @@ custom_update_articles(CDATA *cdata)
 		network_timeout();
         	// check if we're enabled and no cancelation signal pending
         	// and no imports pending
-        	if (g_hash_table_lookup(rf->hre, lookup_key(cdata->key)) && !rf->cancel && !rf->import)
-        	{
+        	if (g_hash_table_lookup(rf->hre, lookup_key(cdata->key)) && !rf->cancel && !rf->import) {
                 	d(g_print("\nFetching: %s..%s\n",
                  		(char *)g_hash_table_lookup(rf->hr, lookup_key(cdata->key)), (char *)cdata->key));
                 	rf->feed_queue++;
@@ -3344,8 +3321,7 @@ custom_update_articles(CDATA *cdata)
                                        g_strdup(cdata->key),  // we need to dupe key here
                                        1,
                                        &err);                  // because we might lose it if
-			if (err)
-			{
+			if (err) {
 				rf->feed_queue--;
                      		gchar *msg = g_strdup_printf("\n%s\n%s", 
 				 	(char *)cdata->key, err->message);
@@ -3353,8 +3329,7 @@ custom_update_articles(CDATA *cdata)
                      		g_free(msg);
 			}
                                                                // feed gets deleted
-		} 
- 		else if (rf->cancel && !rf->feed_queue)
+		} else if (rf->cancel && !rf->feed_queue)
                 	rf->cancel = 0;         //all feeds where either procesed or skipped
 	}
 	return TRUE;
@@ -3368,8 +3343,7 @@ custom_fetch_feed(gpointer key, gpointer value, gpointer user_data)
 		custom_timeout = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL);
 
 	if (GPOINTER_TO_INT(g_hash_table_lookup(rf->hrupdate, lookup_key(key))) == 2
-	 && g_hash_table_lookup(rf->hre, lookup_key(key)))
-	{
+	 && g_hash_table_lookup(rf->hre, lookup_key(key))) {
 		d(g_print("custom key:%s\n", (char *)key));
 		guint ttl = GPOINTER_TO_INT(g_hash_table_lookup(rf->hrttl, lookup_key(key)));
 		guint ttl_multiply = GPOINTER_TO_INT(g_hash_table_lookup(rf->hrttl_multiply, lookup_key(key)));
@@ -3435,14 +3409,11 @@ icon_activated (GtkStatusIcon *icon, gpointer pnotify)
         for (p = (gpointer)evo_window; p != NULL; p = pnext) {
                 pnext = p->next;
 
-                if (gtk_window_is_active(GTK_WINDOW(p->data)))
-		{
+                if (gtk_window_is_active(GTK_WINDOW(p->data))) {
 			g_print("window active\n");
                         gtk_window_iconify(GTK_WINDOW(p->data));
 			gtk_window_set_skip_taskbar_hint(GTK_WINDOW(p->data), TRUE);
-		}
-		else
-		{
+		} else {
                         gtk_window_iconify(GTK_WINDOW(p->data));
 			gtkut_window_popup(GTK_WIDGET(p->data));
 			gtk_window_set_skip_taskbar_hint(GTK_WINDOW(p->data), FALSE);
@@ -3586,8 +3557,7 @@ void org_gnome_cooly_rss_startup(void *ep, EMPopupTargetSelect *t);
 
 void org_gnome_cooly_rss_startup(void *ep, EMPopupTargetSelect *t)
 {
-  	if (gconf_client_get_bool (rss_gconf, GCONF_KEY_START_CHECK, NULL))
-	{
+  	if (gconf_client_get_bool (rss_gconf, GCONF_KEY_START_CHECK, NULL)) {
 		//as I don't know how to set this I'll setup a 10 secs timeout
 		//and return false for disableation
 		g_timeout_add (3 * 1000,
@@ -3595,8 +3565,7 @@ void org_gnome_cooly_rss_startup(void *ep, EMPopupTargetSelect *t)
                            0);
 	}
 	gdouble timeout = gconf_client_get_float(rss_gconf, GCONF_KEY_REP_CHECK_TIMEOUT, NULL);
-    	if (gconf_client_get_bool (rss_gconf, GCONF_KEY_REP_CHECK, NULL))
-	{
+    	if (gconf_client_get_bool (rss_gconf, GCONF_KEY_REP_CHECK, NULL)) {
 		rf->rc_id = g_timeout_add (60 * 1000 * timeout,
                            (GtkFunction) update_articles,
                            (gpointer)1);
@@ -3634,8 +3603,7 @@ check_folders(void)
 	CamelStore *store = mail_component_peek_local_store(NULL);
 	//I'm not sure folder name can be translatable
 	CamelFolder *mail_folder = camel_store_get_folder (store, lookup_main_folder(), 0, NULL);
-	if (mail_folder == NULL)
-	{
+	if (mail_folder == NULL) {
 		camel_store_create_folder (store, NULL, lookup_main_folder(), &ex);
 	}
 	camel_object_unref (mail_folder);
@@ -3669,8 +3637,7 @@ org_gnome_cooly_rss_refresh(void *ep, EMPopupTargetSelect *t)
 	if (!g_hash_table_find(rf->hre, check_if_enabled, NULL))
 		return;
 
-        if (!rf->setup || g_hash_table_size(rf->hrname)<1)
-        {
+        if (!rf->setup || g_hash_table_size(rf->hrname)<1) {
 		taskbar_push_message(_("No RSS feeds configured!"));
                 return;
         }
@@ -3692,8 +3659,7 @@ org_gnome_cooly_rss_refresh(void *ep, EMPopupTargetSelect *t)
 	gtk_label_set_justify(GTK_LABEL(label2), GTK_JUSTIFY_CENTER);
 #endif
         readrss_label = gtk_label_new(_("Please wait"));
-        if (!rf->progress_dialog)
-        {
+        if (!rf->progress_dialog) {
                 readrss_progress = gtk_progress_bar_new();
                 gtk_box_pack_start(GTK_BOX(((GtkDialog *)readrss_dialog)->vbox), label2, TRUE, TRUE, 10);
                 gtk_box_pack_start(GTK_BOX(((GtkDialog *)readrss_dialog)->vbox), readrss_label, FALSE, FALSE, 0);
@@ -3707,8 +3673,7 @@ org_gnome_cooly_rss_refresh(void *ep, EMPopupTargetSelect *t)
                 rf->label       = label2;
                 flabel       = label2;
         }
-        if (!rf->pending && !rf->feed_queue)
-        {
+        if (!rf->pending && !rf->feed_queue) {
                 rf->pending = TRUE;
                 check_folders();
 
@@ -3786,8 +3751,7 @@ org_gnome_cooly_rss(void *ep, EMPopupTargetSelect *t)
 	if (!g_hash_table_find(rf->hre, check_if_enabled, NULL))
 		return;
 
-	if (!rf->setup || g_hash_table_size(rf->hrname)<1)
-	{
+	if (!rf->setup || g_hash_table_size(rf->hrname)<1) {
 		taskbar_push_message(_("No RSS feeds configured!"));
 		return;
 	}
@@ -3882,8 +3846,7 @@ org_gnome_cooly_rss(void *ep, EMPopupTargetSelect *t)
 	g_signal_connect(readrss_dialog, "response", G_CALLBACK(readrss_dialog_cb), NULL);
 	GtkWidget *label2 = gtk_label_new(NULL);
 	readrss_label = gtk_label_new(_("Please wait"));
-	if (!rf->progress_dialog)
-	{
+	if (!rf->progress_dialog) {
     		readrss_progress = gtk_progress_bar_new();
     		gtk_box_pack_start(GTK_BOX(((GtkDialog *)readrss_dialog)->vbox), label2, TRUE, TRUE, 10);
     		gtk_box_pack_start(GTK_BOX(((GtkDialog *)readrss_dialog)->vbox), readrss_label, FALSE, FALSE, 0);
@@ -3898,8 +3861,7 @@ org_gnome_cooly_rss(void *ep, EMPopupTargetSelect *t)
 		flabel		= label2;
 	}
 #endif
-	if (!rf->pending && !rf->feed_queue)
-	{
+	if (!rf->pending && !rf->feed_queue) {
 		rf->pending = TRUE;
 		check_folders();
 	
@@ -4103,28 +4065,22 @@ create_mail(create_feed *CF)
 	int offset = 0;
 
 	//handle pubdate
-	if (CF->date)
-	{
+	if (CF->date) {
 		//check if CF->date obeys rfc822
 		if (!is_rfc822(CF->date))
 			camel_mime_message_set_date(new, CAMEL_MESSAGE_DATE_CURRENT, 0);
-		else
-		{	
+		else {	
 			time_t actual_time;
 			actual_time = camel_header_decode_date(CF->date, &offset);
 			camel_mime_message_set_date(new, actual_time, offset);
 		}
-	}
-	else 
-	{
-		if (CF->dcdate)	//dublin core 
-		{
+	} else {
+		if (CF->dcdate)	{ //dublin core
 			strptime(CF->dcdate, "%Y-%m-%dT%T%z", &tm);
 			time = mktime(&tm);
 			time_t actual_time = camel_header_decode_date (ctime(&time), &offset);
 			camel_mime_message_set_date(new, actual_time, offset);
-		}
-		else /*use 'now' as time for failsafe*/
+		} else /*use 'now' as time for failsafe*/
 			camel_mime_message_set_date(new, CAMEL_MESSAGE_DATE_CURRENT, 0);
 	}
 	time = camel_mime_message_get_date (new, NULL) ;
@@ -4159,8 +4115,7 @@ create_mail(create_feed *CF)
         camel_data_wrapper_construct_from_stream (rtext, stream);
         camel_object_unref (stream);
 
-	if (CF->encl)
-	{
+	if (CF->encl) {
 		CamelMultipart *mp = camel_multipart_new();
         	camel_multipart_set_boundary(mp, NULL);
 
@@ -4170,21 +4125,18 @@ create_mail(create_feed *CF)
 		camel_multipart_add_part(mp, part);
 		camel_object_unref(part);
 		CamelMimePart *msgp = file_to_message(CF->encl);
-		if (msgp)
-		{
+		if (msgp) {
 			camel_multipart_add_part(mp, msgp);
 			camel_object_unref(msgp);
 		}
 	      	camel_medium_set_content_object((CamelMedium *)new, (CamelDataWrapper *)mp);
 		camel_object_unref(mp);
-	}
-        else
+	} else
 		camel_medium_set_content_object(CAMEL_MEDIUM(new), CAMEL_DATA_WRAPPER(rtext));
 
 	camel_folder_append_message(mail_folder, new, info, &appended_uid, ex);
 
-	if (appended_uid != NULL)
-	{
+	if (appended_uid != NULL) {
 		filter_uids = g_ptr_array_sized_new(1);
 		g_ptr_array_add(filter_uids, appended_uid);
 		mail_filter_on_demand (mail_folder, filter_uids);
@@ -4290,8 +4242,7 @@ void
 write_feed_status_line(gchar *file, gchar *needle)
 {
 	FILE *fw = fopen(file, "a+");
-	if (fw)
-	{
+	if (fw) {
 		fputs(g_strstrip(needle), fw);
 		fputs("\n", fw);
 		fclose(fw);
@@ -4346,8 +4297,7 @@ finish_enclosure (SoupSession *soup_sess, SoupMessage *msg, create_feed *user_da
 	name = g_build_filename(tmpdir, g_path_get_basename(user_data->encl), NULL);
 
 	f = fopen(name, "wb+");
-	if (f)
-	{
+	if (f) {
 #if LIBSOUP_VERSION < 2003000
 		fwrite(msg->response.body, msg->response.length, 1, f);
 #else
@@ -4361,8 +4311,7 @@ finish_enclosure (SoupSession *soup_sess, SoupMessage *msg, create_feed *user_da
 	}
 	
 	g_free(tmpdir);
-	if (!feed_is_new(user_data->feed_fname, user_data->feed_uri))
-	{
+	if (!feed_is_new(user_data->feed_fname, user_data->feed_uri)) {
 		create_mail(user_data);
 		write_feed_status_line(user_data->feed_fname, user_data->feed_uri);
 	}
@@ -4745,8 +4694,7 @@ delete_oldest_article(CamelFolder *folder, guint unread)
 	guint32 flags;
 	time_t date, min_date = 0;
 	uids = camel_folder_get_uids (folder);
-       	for (i = 0; i < uids->len; i++)
-	{
+       	for (i = 0; i < uids->len; i++) {
 		info = camel_folder_get_message_info(folder, uids->pdata[i]);
                	if (info) {
 			if (rf->current_uid && !strcmp(rf->current_uid, uids->pdata[i]))
@@ -4759,32 +4707,24 @@ delete_oldest_article(CamelFolder *folder, guint unread)
 				goto out;
 			if (flags & CAMEL_MESSAGE_DELETED)
 				goto out;
-       			if (flags & CAMEL_MESSAGE_SEEN)
-			{
-				if (!j)
-				{
+       			if (flags & CAMEL_MESSAGE_SEEN) {
+				if (!j) {
 					min_date = date;
 					imax = i;
 					j++;
 				}
-				if (date < min_date)
-				{
+				if (date < min_date) {
 					imax = i;
 					min_date = date;
 				}
-			}
-			else		//UNSEEN
-			{
-				if (unread)
-				{
-					if (!q)
-					{
+			} else {		//UNSEEN
+				if (unread) {
+					if (!q) {
                                        		min_date = date;
 						imax = i;
 						q++;
 					}
-                               		if (date < min_date)
-                               		{
+                               		if (date < min_date) {
                                        		imax = i;
                                        		min_date = date;
                                		}
@@ -4795,8 +4735,7 @@ delete_oldest_article(CamelFolder *folder, guint unread)
 out:          	camel_message_info_free(info);
 	}
        	camel_folder_freeze(folder);
-	if (min_date)
-	{
+	if (min_date) {
 		camel_folder_delete_message (folder, uids->pdata[imax]);
 	}
        	camel_folder_thaw(folder);
@@ -4827,30 +4766,23 @@ get_feed_age(gpointer key, gpointer value)
 	guint del_unread = GPOINTER_TO_INT(g_hash_table_lookup(rf->hrdel_unread, value));
 	guint del_feed = GPOINTER_TO_INT(g_hash_table_lookup(rf->hrdel_feed, value));
 	inhibit_read = 1;
-	if (del_feed == 2)
-	{	
+	if (del_feed == 2) {	
 		guint del_days = GPOINTER_TO_INT(g_hash_table_lookup(rf->hrdel_days, value));
 		uids = camel_folder_get_uids (folder);
         	camel_folder_freeze(folder);
-        	for (i = 0; i < uids->len; i++)
-		{
+        	for (i = 0; i < uids->len; i++) {
 			info = camel_folder_get_message_info(folder, uids->pdata[i]);
                 	if (info && rf->current_uid && strcmp(rf->current_uid, uids->pdata[i])) {
 				date = camel_message_info_date_sent(info);
-				if (date < now - del_days * 86400)
-				{
+				if (date < now - del_days * 86400) {
 					flags = camel_message_info_flags(info);
-                               		if (!(flags & CAMEL_MESSAGE_SEEN))
-					{
-						if ((del_unread) && !(flags & CAMEL_MESSAGE_FLAGGED))
-						{
+                               		if (!(flags & CAMEL_MESSAGE_SEEN)) {
+						if ((del_unread) && !(flags & CAMEL_MESSAGE_FLAGGED)) {
 							//camel_message_info_set_flags(info, CAMEL_MESSAGE_SEEN|CAMEL_MESSAGE_DELETED, ~0);
 							camel_folder_delete_message(folder, uids->pdata[i]);
 						}
-					}
-					else
-						if (!(flags & CAMEL_MESSAGE_FLAGGED))
-						{
+					} else
+						if (!(flags & CAMEL_MESSAGE_FLAGGED)) {
 							//camel_message_info_set_flags(info, CAMEL_MESSAGE_DELETED, ~0);
 							camel_folder_delete_message(folder, uids->pdata[i]);
 						}
@@ -4863,13 +4795,12 @@ get_feed_age(gpointer key, gpointer value)
         	camel_folder_thaw(folder);
       		camel_folder_expunge (folder, NULL);
 	}
-	if (del_feed == 1)
-	{
+	if (del_feed == 1) {
 		guint del_messages = GPOINTER_TO_INT(g_hash_table_lookup(rf->hrdel_messages, value));
 		guint total = camel_folder_get_message_count(folder);
 		i=1;
-		while (del_messages < camel_folder_get_message_count(folder) - camel_folder_get_deleted_message_count(folder) && i <= total)
-		{
+		while (del_messages < camel_folder_get_message_count(folder) 
+			- camel_folder_get_deleted_message_count(folder) && i <= total) {
 			delete_oldest_article(folder, del_unread);
 			i++;
 		}
diff --git a/src/rss.h b/src/rss.h
index de46e40..4d5301b 100644
--- a/src/rss.h
+++ b/src/rss.h
@@ -179,6 +179,8 @@ enum {
 typedef struct ADD_FEED {
 	GtkWidget	*dialog;
 	GtkWidget	*progress;
+	GtkWidget	*child;		//the dialog child
+	GladeXML	*gui;
         gchar           *feed_url;
 	gchar		*feed_name;
         gboolean        fetch_html;	//show webpage instead of summary
@@ -307,6 +309,7 @@ gboolean update_articles(gboolean disabler);
 xmlNode *html_find (xmlNode *node, char *match);
 gchar *lookup_main_folder(void);
 gchar *lookup_feed_folder(gchar *folder);
+gchar *lookup_original_folder(gchar *folder);
 gchar *decode_utf8_entities(gchar *str);
 gchar *decode_html_entities(gchar *str);
 gchar *get_real_channel_name(gchar *uri, gchar *failed);
@@ -350,6 +353,7 @@ CamelFolder *check_feed_folder(gchar *folder_name);
 gboolean setup_feed(add_feed *feed);
 gboolean feed_is_new(gchar *file_name, gchar *needle);
 gboolean web_auth_dialog(gchar *url);
+gchar *get_main_folder(void);
 
 #ifdef _WIN32
 char *strcasestr(const char *a, const char *b);



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