talons

Fork of Claws Mail https://www.claws-mail
Log | Files | Refs | README | LICENSE

commit fc491788a8d348d810ee2dcbdaadf5cdc3962b5f
parent 9ec1e07f5ab14fe975e4ff389fcf43ce714274da
Author: wwp <subscript@free.fr>
Date:   Sat, 22 Mar 2025 17:28:14 +0100

RSSyl plugin: prefer "Refresh all" (feeds) to "Refresh recursively", the former used everywhere else.
RSSyl plugin: make 'Refresh all skips feeds programmed to be refreshed manually' setting to apply in case of automated refreshing only (i.e. not manually).

Diffstat:
Msrc/plugins/rssyl/rssyl.c | 6++++--
Msrc/plugins/rssyl/rssyl_cb_menu.c | 2+-
Msrc/plugins/rssyl/rssyl_gtk.c | 2+-
Msrc/plugins/rssyl/rssyl_update_feed.c | 54++++++++++++++++++++++++++++++++++++++----------------
Msrc/plugins/rssyl/rssyl_update_feed.h | 4++--
5 files changed, 46 insertions(+), 22 deletions(-)

diff --git a/src/plugins/rssyl/rssyl.c b/src/plugins/rssyl/rssyl.c @@ -124,13 +124,15 @@ static void rssyl_create_default_mailbox(void) static gboolean rssyl_update_all_feeds_deferred(gpointer data) { - rssyl_update_all_feeds(); + /* automated refreshing */ + rssyl_update_all_feeds(FALSE); return FALSE; } static void rssyl_toolbar_cb_refresh_all_feeds(gpointer parent, const gchar *item_name, gpointer data) { - rssyl_update_all_feeds(); + /* refreshing upon user manual request */ + rssyl_update_all_feeds(TRUE); } void rssyl_init(void) diff --git a/src/plugins/rssyl/rssyl_cb_menu.c b/src/plugins/rssyl/rssyl_cb_menu.c @@ -332,7 +332,7 @@ void rssyl_update_all_cb( GtkAction *action, gpointer data) return; } - rssyl_update_recursively(item); + rssyl_update_recursively(item, TRUE); } void rssyl_remove_mailbox_cb(GtkAction *action, gpointer data) diff --git a/src/plugins/rssyl/rssyl_gtk.c b/src/plugins/rssyl/rssyl_gtk.c @@ -44,7 +44,7 @@ static char *rssyl_popup_menu_labels[] = N_("_Refresh feed"), N_("Feed pr_operties"), N_("Rena_me..."), - N_("R_efresh recursively"), + N_("R_efresh all feeds"), N_("Subscribe _new feed..."), N_("Create new _folder..."), N_("Import feed list..."), diff --git a/src/plugins/rssyl/rssyl_update_feed.c b/src/plugins/rssyl/rssyl_update_feed.c @@ -313,7 +313,7 @@ gboolean rssyl_update_feed(RFolderItem *ritem, RSSylVerboseFlags verbose) rssyl_deleted_update(ritem); debug_print("RSSyl: STARTING TO PARSE FEED\n"); - if( ctx->success && !(ctx->success = rssyl_parse_feed(ritem, ctx->feed)) ) { + if( ctx->success && !(ctx->success = rssyl_parse_feed(ritem, ctx->feed)) ) { /* both libcurl and libfeed were happy, but we weren't */ debug_print("RSSyl: Error processing feed\n"); if( verbose & RSSYL_SHOW_ERRORS ) { @@ -357,7 +357,7 @@ gboolean rssyl_update_feed(RFolderItem *ritem, RSSylVerboseFlags verbose) return success; } -static gboolean rssyl_update_recursively_func(GNode *node, gpointer data) +static gboolean rssyl_update_recursively_func(GNode *node, gpointer data, gboolean manual_refresh) { FolderItem *item; RFolderItem *ritem; @@ -368,8 +368,10 @@ static gboolean rssyl_update_recursively_func(GNode *node, gpointer data) ritem = (RFolderItem *)item; if( ritem->url != NULL ) { - if(rssyl_prefs_get()->refresh_all_skips && - (ritem->default_refresh_interval == FALSE) && (ritem->refresh_interval == 0)) { + if((manual_refresh == FALSE) && + rssyl_prefs_get()->refresh_all_skips && + (ritem->default_refresh_interval == FALSE) && + (ritem->refresh_interval == 0)) { debug_print("RSSyl: Skipping feed '%s'\n", item->name); } else { debug_print("RSSyl: Updating feed '%s'\n", item->name); @@ -381,31 +383,49 @@ static gboolean rssyl_update_recursively_func(GNode *node, gpointer data) return FALSE; } -void rssyl_update_recursively(FolderItem *item) +static gboolean rssyl_update_recursively_automated_func(GNode *node, gpointer data) +{ + return rssyl_update_recursively_func(node, data, FALSE); +} + +static gboolean rssyl_update_recursively_manually_func(GNode *node, gpointer data) +{ + return rssyl_update_recursively_func(node, data, TRUE); +} + +void rssyl_update_recursively(FolderItem *item, gboolean manual_refresh) { g_return_if_fail(item != NULL); g_return_if_fail(item->folder != NULL); - - if( item->folder->klass != rssyl_folder_get_class() ) - return; + g_return_if_fail(item->folder->klass == rssyl_folder_get_class()); debug_print("Recursively updating '%s'\n", item->name); g_node_traverse(item->node, G_PRE_ORDER, G_TRAVERSE_ALL, -1, - rssyl_update_recursively_func, NULL); + manual_refresh ? rssyl_update_recursively_manually_func : rssyl_update_recursively_automated_func, + NULL); } -void rssyl_update_all_func(FolderItem *item, gpointer data) +static void rssyl_update_all_func(FolderItem *item, gpointer data, gboolean manual_refresh) { /* Only try to refresh our feed folders */ - if( !IS_RSSYL_FOLDER_ITEM(item) ) - return; + g_return_if_fail(IS_RSSYL_FOLDER_ITEM(item)); + g_return_if_fail(folder_item_parent(item) == NULL); - if( folder_item_parent(item) == NULL ) - rssyl_update_recursively(item); + rssyl_update_recursively(item, manual_refresh); +} + +static void rssyl_update_all_automated_func(FolderItem *item, gpointer data) +{ + rssyl_update_all_func(item, data, FALSE); +} + +static void rssyl_update_all_manually_func(FolderItem *item, gpointer data) +{ + rssyl_update_all_func(item, data, TRUE); } -void rssyl_update_all_feeds(void) +void rssyl_update_all_feeds(gboolean manual_refresh) { if (prefs_common_get_prefs()->work_offline && !inc_offline_should_override(TRUE, @@ -413,5 +433,7 @@ void rssyl_update_all_feeds(void) return; } - folder_func_to_all_folders((FolderItemFunc)rssyl_update_all_func, NULL); + folder_func_to_all_folders( + (FolderItemFunc)(manual_refresh? rssyl_update_all_manually_func : rssyl_update_all_automated_func), + NULL); } diff --git a/src/plugins/rssyl/rssyl_update_feed.h b/src/plugins/rssyl/rssyl_update_feed.h @@ -30,8 +30,8 @@ RFetchCtx *rssyl_prep_fetchctx_from_item(RFolderItem *ritem); gboolean rssyl_update_feed(RFolderItem *ritem, RSSylVerboseFlags verbose); -void rssyl_update_recursively(FolderItem *item); +void rssyl_update_recursively(FolderItem *item, gboolean manual_refresh); -void rssyl_update_all_feeds(void); +void rssyl_update_all_feeds(gboolean manual_refresh); #endif /* __RSSYL_UPDATE_FEED */