[evolution-rss] fix proper feed url edit
- From: Lucian Langa <lucilanga src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [evolution-rss] fix proper feed url edit
- Date: Tue, 11 Aug 2009 18:36:03 +0000 (UTC)
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]