#ifdef HAVE_CONFIG_H
# include "config.h"
-#include "claws-features.h"
#endif
+/* Global includes */
#include <glib.h>
#include <glib/gi18n.h>
-#include "common/defs.h"
-#include "common/utils.h"
-#include "gtk/gtkutils.h"
-#include "prefs_gtk.h"
+/* Claws Mail includes */
+#include <common/defs.h>
+#include <prefs_gtk.h>
+#include <mainwindow.h>
+/* Local includes */
+#include "rssyl.h"
#include "rssyl_prefs.h"
+#include "rssyl_feed.h"
-static RSSylPrefsPage rssyl_prefs_page;
-RSSylPrefs rssyl_prefs;
+static RPrefsPage rssyl_gtk_prefs_page;
+RPrefs rssyl_prefs;
static void destroy_rssyl_prefs_page(PrefsPage *page);
static void create_rssyl_prefs_page(PrefsPage *page,
GtkWindow *window, gpointer data);
static void save_rssyl_prefs(PrefsPage *page);
-
-static PrefParam param[] = {
- { "refresh_interval", RSSYL_PREF_DEFAULT_REFRESH, &rssyl_prefs.refresh, P_INT,
- NULL, NULL, NULL },
- { "expired_keep", RSSYL_PREF_DEFAULT_EXPIRED, &rssyl_prefs.expired, P_INT,
- NULL, NULL, NULL },
- { "refresh_on_startup", "FALSE", &rssyl_prefs.refresh_on_startup, P_BOOL,
- NULL, NULL, NULL },
- { "cookies_path", "", &rssyl_prefs.cookies_path, P_STRING,
- NULL, NULL, NULL },
- { "ssl_verify_peer", "TRUE", &rssyl_prefs.ssl_verify_peer, P_BOOL,
- NULL, NULL, NULL },
- { 0, 0, 0, 0, 0, 0, 0 }
+static void rssyl_apply_prefs(void);
+
+ static PrefParam param[] = {
+ { "refresh_interval", PREF_DEFAULT_REFRESH, &rssyl_prefs.refresh, P_INT,
+ NULL, NULL, NULL },
+ { "refresh_on_startup", "FALSE", &rssyl_prefs.refresh_on_startup, P_BOOL,
+ NULL, NULL, NULL },
+ { "refresh_enabled", "TRUE", &rssyl_prefs.refresh_enabled, P_BOOL,
+ NULL, NULL, NULL },
+ { "cookies_path", "", &rssyl_prefs.cookies_path, P_STRING,
+ NULL, NULL, NULL },
+ { "ssl_verify_peer", "TRUE", &rssyl_prefs.ssl_verify_peer, P_BOOL,
+ NULL, NULL, NULL },
+ { 0, 0, 0, 0, 0, 0, 0 }
};
void rssyl_prefs_init(void)
prefs_read_config(param, PREFS_BLOCK_NAME, rcpath, NULL);
g_free(rcpath);
- rssyl_prefs_page.page.path = path;
- rssyl_prefs_page.page.create_widget = create_rssyl_prefs_page;
- rssyl_prefs_page.page.destroy_widget = destroy_rssyl_prefs_page;
- rssyl_prefs_page.page.save_page = save_rssyl_prefs;
- rssyl_prefs_page.page.weight = 30.0;
+ rssyl_gtk_prefs_page.page.path = path;
+ rssyl_gtk_prefs_page.page.create_widget = create_rssyl_prefs_page;
+ rssyl_gtk_prefs_page.page.destroy_widget = destroy_rssyl_prefs_page;
+ rssyl_gtk_prefs_page.page.save_page = save_rssyl_prefs;
+ rssyl_gtk_prefs_page.page.weight = 30.0;
- prefs_gtk_register_page((PrefsPage *) &rssyl_prefs_page);
+ prefs_gtk_register_page((PrefsPage *) &rssyl_gtk_prefs_page);
}
void rssyl_prefs_done(void)
{
- prefs_gtk_unregister_page((PrefsPage *) &rssyl_prefs_page);
+ prefs_gtk_unregister_page((PrefsPage *) &rssyl_gtk_prefs_page);
+}
+
+/* Toggle the refresh timeout spinbutton sensitivity after the
+ * checkbutton was toggled. */
+static gboolean
+rssyl_refresh_enabled_toggled_cb(GtkToggleButton *tb, gpointer data)
+{
+ gtk_widget_set_sensitive(GTK_WIDGET(data),
+ gtk_toggle_button_get_active(tb));
+ return FALSE;
}
static void create_rssyl_prefs_page(PrefsPage *page,
GtkWindow *window, gpointer data)
{
- RSSylPrefsPage *prefs_page = (RSSylPrefsPage *) page;
+ int row = 0;
+ RPrefsPage *prefs_page = (RPrefsPage *) page;
GtkWidget *table;
- GtkWidget *refresh;
- GtkWidget *expired;
+ GtkWidget *refresh, *refresh_enabled;
+ GtkWidget *label;
GtkWidget *refresh_on_startup;
+ GtkObject *refresh_adj;
GtkWidget *cookies_path;
- GtkWidget *ssl_verify_peer_checkbtn;
- GtkWidget *label;
- GtkObject *refresh_adj, *expired_adj;
+ GtkWidget *ssl_verify_peer;
- table = gtk_table_new(RSSYL_NUM_PREFS, 2, FALSE);
- gtk_container_set_border_width(GTK_CONTAINER(table), 6);
+ table = gtk_table_new(3, 2, FALSE);
+ gtk_container_set_border_width(GTK_CONTAINER(table), 5);
gtk_table_set_row_spacings(GTK_TABLE(table), VSPACING_NARROW);
gtk_table_set_col_spacings(GTK_TABLE(table), 8);
- label = gtk_label_new(_("Default refresh interval in minutes"));
- gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
- gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1,
- GTK_FILL, 0, 0, 0);
+ /* Refresh interval */
+ refresh_enabled = gtk_check_button_new_with_label(
+ _("Default refresh interval in minutes"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(refresh_enabled),
+ rssyl_prefs.refresh_enabled);
+ gtk_table_attach(GTK_TABLE(table), refresh_enabled, 0, 1, row, row+1,
+ GTK_FILL | GTK_EXPAND, 0, 0, 0);
refresh_adj = gtk_adjustment_new(rssyl_prefs.refresh,
- 0, 100000, 1, 10, 0);
+ 1, 100000, 1, 10, 0);
refresh = gtk_spin_button_new(GTK_ADJUSTMENT(refresh_adj), 1, 0);
- gtk_table_attach(GTK_TABLE(table), refresh, 1, 2, 0, 1,
+ gtk_widget_set_sensitive(GTK_WIDGET(refresh), rssyl_prefs.refresh_enabled);
+ gtk_table_attach(GTK_TABLE(table), refresh, 1, 2, row, row+1,
GTK_FILL, 0, 0, 0);
- CLAWS_SET_TIP(refresh,
- _("Set to 0 to disable automatic refreshing"));
- label = gtk_label_new(_("Default number of expired items to keep"));
- gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
- gtk_table_attach(GTK_TABLE(table), label, 0, 1, 1, 2,
- GTK_FILL, 0, 0, 0);
-
- expired_adj = gtk_adjustment_new(rssyl_prefs.expired,
- -1, 100000, 1, 10, 0);
- expired = gtk_spin_button_new(GTK_ADJUSTMENT(expired_adj), 1, 0);
- gtk_table_attach(GTK_TABLE(table), expired, 1, 2, 1, 2,
- GTK_FILL, 0, 0, 0);
- CLAWS_SET_TIP(expired,
- _("Set to -1 to keep expired items"));
+ g_signal_connect(G_OBJECT(refresh_enabled), "toggled",
+ G_CALLBACK(rssyl_refresh_enabled_toggled_cb), refresh);
+ row++;
+ /* Whether to refresh all feeds on CM startup */
refresh_on_startup = gtk_check_button_new_with_label(
_("Refresh all feeds on application start"));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(refresh_on_startup),
rssyl_prefs.refresh_on_startup);
- gtk_table_attach(GTK_TABLE(table), refresh_on_startup, 0, 2, 3, 4,
+ gtk_table_attach(GTK_TABLE(table), refresh_on_startup, 0, 2, row, row+1,
GTK_FILL | GTK_EXPAND, 0, 0, 0);
+ row++;
+ /* Path to cookies file for libcurl to use */
label = gtk_label_new(_("Path to cookies file"));
- gtk_table_attach(GTK_TABLE(table), label, 0, 1, 4, 5,
- GTK_FILL, 0, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, row, row+1,
+ GTK_FILL | GTK_EXPAND, 0, 0, 0);
gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
- cookies_path = gtk_entry_new ();
+ cookies_path = gtk_entry_new();
gtk_entry_set_text(GTK_ENTRY(cookies_path), rssyl_prefs.cookies_path);
- gtk_table_attach(GTK_TABLE(table), cookies_path, 1, 2, 4, 5,
- GTK_FILL | GTK_EXPAND, 0, 0, 0);
- CLAWS_SET_TIP(cookies_path,
+ gtk_table_attach(GTK_TABLE(table), cookies_path, 1, 2, row, row+1,
+ GTK_FILL, 0, 0, 0);
+ gtk_widget_set_tooltip_text(cookies_path,
_("Path to Netscape-style cookies.txt file containing your cookies"));
- ssl_verify_peer_checkbtn = gtk_check_button_new_with_label(
+ row++;
+
+ /* Whether to verify SSL peer certificate */
+ ssl_verify_peer = gtk_check_button_new_with_label(
_("Verify SSL certificates validity for new feeds"));
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ssl_verify_peer_checkbtn),
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ssl_verify_peer),
rssyl_prefs.ssl_verify_peer);
- gtk_table_attach(GTK_TABLE(table), ssl_verify_peer_checkbtn, 0, 2, 5, 6,
+ gtk_table_attach(GTK_TABLE(table), ssl_verify_peer, 0, 2, row, row+1,
GTK_FILL | GTK_EXPAND, 0, 0, 0);
gtk_widget_show_all(table);
+ /* Store pointers to relevant widgets */
prefs_page->page.widget = table;
+ prefs_page->refresh_enabled = refresh_enabled;
prefs_page->refresh = refresh;
- prefs_page->expired = expired;
prefs_page->refresh_on_startup = refresh_on_startup;
prefs_page->cookies_path = cookies_path;
- prefs_page->ssl_verify_peer_checkbtn = ssl_verify_peer_checkbtn;
+ prefs_page->ssl_verify_peer = ssl_verify_peer;
}
static void destroy_rssyl_prefs_page(PrefsPage *page)
static void save_rssyl_prefs(PrefsPage *page)
{
- RSSylPrefsPage *prefs_page = (RSSylPrefsPage *)page;
+ RPrefsPage *prefs_page = (RPrefsPage *)page;
PrefFile *pref_file;
gchar *rc_file_path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S,
COMMON_RC, NULL);
+ /* Grab values from GTK widgets */
+ rssyl_prefs.refresh_enabled = gtk_toggle_button_get_active(
+ GTK_TOGGLE_BUTTON(prefs_page->refresh_enabled));
rssyl_prefs.refresh = gtk_spin_button_get_value_as_int(
GTK_SPIN_BUTTON(prefs_page->refresh));
- rssyl_prefs.expired = gtk_spin_button_get_value_as_int(
- GTK_SPIN_BUTTON(prefs_page->expired));
rssyl_prefs.refresh_on_startup = gtk_toggle_button_get_active(
GTK_TOGGLE_BUTTON(prefs_page->refresh_on_startup));
g_free(rssyl_prefs.cookies_path);
rssyl_prefs.cookies_path = g_strdup(gtk_entry_get_text(
- GTK_ENTRY(prefs_page->cookies_path)));
+ GTK_ENTRY(prefs_page->cookies_path)));
rssyl_prefs.ssl_verify_peer = gtk_toggle_button_get_active(
- GTK_TOGGLE_BUTTON(prefs_page->ssl_verify_peer_checkbtn));
+ GTK_TOGGLE_BUTTON(prefs_page->ssl_verify_peer));
+ /* Store prefs in rc file */
pref_file = prefs_write_open(rc_file_path);
g_free(rc_file_path);
return;
}
- if (fprintf(pref_file->fp, "\n") < 0) {
- FILE_OP_ERROR(rc_file_path, "fprintf");
- prefs_file_close_revert(pref_file);
- } else
- prefs_file_close(pref_file);
+ fprintf(pref_file->fp, "\n");
+ prefs_file_close(pref_file);
+
+ rssyl_apply_prefs();
}
-RSSylPrefs *rssyl_prefs_get(void)
+RPrefs *rssyl_prefs_get(void)
{
return &rssyl_prefs;
}
+
+static void rssyl_start_default_refresh_timeouts_func(FolderItem *item,
+ gpointer data)
+{
+ RFolderItem *ritem = (RFolderItem *)item;
+ guint prefs_interval = GPOINTER_TO_UINT(data);
+
+ if( !IS_RSSYL_FOLDER_ITEM(item) )
+ return;
+
+ if( folder_item_parent(item) == NULL || ritem->url == NULL )
+ return;
+
+ /* Feeds which use default refresh interval */
+ if( ritem->default_refresh_interval ) {
+ /* Start a new timer if the default value has changed
+ * (ritem->refresh_interval should contain previous default
+ * value in this case). */
+ if( ritem->refresh_interval != prefs_interval ) {
+ ritem->refresh_interval = prefs_interval;
+ rssyl_feed_start_refresh_timeout(ritem);
+ }
+ }
+}
+
+static void rssyl_start_default_refresh_timeouts(void)
+{
+ RPrefs *rsprefs = rssyl_prefs_get();
+
+ folder_func_to_all_folders(
+ (FolderItemFunc)rssyl_start_default_refresh_timeouts_func,
+ GUINT_TO_POINTER(rsprefs->refresh));
+}
+
+/* rssyl_apply_prefs():
+ * Do what's needed to start using newly set preferences */
+static void rssyl_apply_prefs(void)
+{
+ /* Update refresh timeouts for feeds which use default interval. */
+ rssyl_start_default_refresh_timeouts();
+
+ /* Nothing else here, so far... */
+}