summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Alan F <ajf@eth0.org.uk>2014-02-24 18:48:23 +0000
committerGravatar Alan F <ajf@eth0.org.uk>2014-02-24 18:48:23 +0000
commit907636d97b1893e9df4ef28489c92d32118c6fa2 (patch)
tree3c621a000536cc2124ff4d20b8cdb9e084b86ab8 /src
parent1d6f77d4c4fafd0a9cafddd2797249557e601dba (diff)
plug the RSS feeds into the preferences dialog and put ifdefs so it should compile without rss-glib
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.am2
-rw-r--r--src/trg-client.c6
-rw-r--r--src/trg-main-window.c18
-rw-r--r--src/trg-menu-bar.c14
-rw-r--r--src/trg-persistent-tree-view.c25
-rw-r--r--src/trg-persistent-tree-view.h2
-rw-r--r--src/trg-preferences-dialog.c53
-rw-r--r--src/trg-prefs.h3
-rw-r--r--src/trg-rss-model.c54
-rw-r--r--src/trg-rss-model.h20
-rw-r--r--src/trg-rss-window.c40
-rw-r--r--src/trg-rss-window.h7
-rw-r--r--src/util.c2
13 files changed, 230 insertions, 16 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index bb11db2..fc4902e 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -105,8 +105,8 @@ transmission_remote_gtk_SOURCES = \
trg-client.c \
trg-main-window.c \
main.c \
- trg-rss-window.c \
trg-rss-model.c \
+ trg-rss-window.c \
upload.c \
$(NULL)
diff --git a/src/trg-client.c b/src/trg-client.c
index 8ab2afd..25a78dd 100644
--- a/src/trg-client.c
+++ b/src/trg-client.c
@@ -563,12 +563,18 @@ static CURL* get_curl(TrgClient *tc, guint http_class)
priv->http_class = http_class;
}
+ if (http_class == HTTP_CLASS_TRANSMISSION)
+ curl_easy_setopt(curl, CURLOPT_URL, trg_client_get_url(tc));
+
curl_easy_setopt(curl, CURLOPT_TIMEOUT,
(long) trg_prefs_get_int(prefs, TRG_PREFS_KEY_TIMEOUT,
TRG_PREFS_CONNECTION));
g_mutex_unlock(priv->configMutex);
+ /* Headers are set on each use, then freed, so make sure invalid headers aren't still around. */
+ curl_easy_setopt(curl, CURLOPT_HTTPHEADER, NULL);
+
return curl;
}
diff --git a/src/trg-main-window.c b/src/trg-main-window.c
index 3066c4d..32212f6 100644
--- a/src/trg-main-window.c
+++ b/src/trg-main-window.c
@@ -17,9 +17,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifdef HAVE_CONFIG_H
#include "config.h"
-#endif
#include <stdlib.h>
#include <string.h>
@@ -73,7 +71,9 @@
#include "trg-menu-bar.h"
#include "trg-status-bar.h"
#include "trg-stats-dialog.h"
+#ifdef HAVE_RSSGLIB
#include "trg-rss-window.h"
+#endif
#include "trg-remote-prefs-dialog.h"
#include "trg-preferences-dialog.h"
#include "upload.h"
@@ -930,6 +930,7 @@ static void view_stats_toggled_cb(GtkWidget * w, gpointer data)
}
}
+#ifdef HAVE_RSSGLIB
static void view_rss_toggled_cb(GtkWidget * w, gpointer data)
{
TrgMainWindow *win = TRG_MAIN_WINDOW(data);
@@ -942,6 +943,7 @@ static void view_rss_toggled_cb(GtkWidget * w, gpointer data)
gtk_widget_show_all(GTK_WIDGET(rss));
}
}
+#endif
static void
view_states_toggled_cb(GtkCheckMenuItem * w, TrgMainWindow * win)
@@ -1756,13 +1758,16 @@ static TrgMenuBar *trg_main_window_menu_bar_new(TrgMainWindow * win)
GObject *b_disconnect, *b_add, *b_resume, *b_pause, *b_verify,
*b_remove, *b_delete, *b_props, *b_local_prefs, *b_remote_prefs,
- *b_about, *b_view_states, *b_view_notebook, *b_view_stats, *b_view_rss,
+ *b_about, *b_view_states, *b_view_notebook, *b_view_stats,
*b_add_url, *b_quit, *b_move, *b_reannounce, *b_pause_all,
*b_resume_all, *b_dir_filters, *b_tracker_filters, *b_up_queue,
*b_down_queue, *b_top_queue, *b_bottom_queue,
#if TRG_WITH_GRAPH
*b_show_graph,
#endif
+#ifdef HAVE_RSSGLIB
+ *b_view_rss,
+#endif
*b_start_now;
TrgMenuBar *menuBar;
@@ -1787,10 +1792,13 @@ static TrgMenuBar *trg_main_window_menu_bar_new(TrgMainWindow * win)
"view-states-button", &b_view_states, "view-stats-button",
&b_view_stats, "about-button", &b_about, "quit-button",
&b_quit, "dir-filters", &b_dir_filters, "tracker-filters",
- &b_tracker_filters, "view-rss-button", &b_view_rss,
+ &b_tracker_filters,
#if TRG_WITH_GRAPH
"show-graph", &b_show_graph,
#endif
+#ifdef HAVE_RSSGLIB
+ "view-rss-button", &b_view_rss,
+#endif
"up-queue", &b_up_queue, "down-queue", &b_down_queue,
"top-queue", &b_top_queue, "bottom-queue",
&b_bottom_queue, "start-now", &b_start_now, NULL);
@@ -1835,8 +1843,10 @@ static TrgMenuBar *trg_main_window_menu_bar_new(TrgMainWindow * win)
G_CALLBACK(view_states_toggled_cb), win);
g_signal_connect(b_view_stats, "activate",
G_CALLBACK(view_stats_toggled_cb), win);
+#ifdef HAVE_RSSGLIB
g_signal_connect(b_view_rss, "activate",
G_CALLBACK(view_rss_toggled_cb), win);
+#endif
#if TRG_WITH_GRAPH
g_signal_connect(b_show_graph, "toggled",
G_CALLBACK(trg_main_window_toggle_graph_cb), win);
diff --git a/src/trg-menu-bar.c b/src/trg-menu-bar.c
index f6ca4c5..37c6c2c 100644
--- a/src/trg-menu-bar.c
+++ b/src/trg-menu-bar.c
@@ -17,6 +17,8 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
+#include "config.h"
+
#include <glib/gi18n.h>
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
@@ -49,7 +51,9 @@ enum {
PROP_LOCAL_PREFS_BUTTON,
PROP_ABOUT_BUTTON,
PROP_VIEW_STATS_BUTTON,
+#ifdef HAVE_RSSGLIB
PROP_VIEW_RSS_BUTTON,
+#endif
PROP_VIEW_STATES_BUTTON,
PROP_VIEW_NOTEBOOK_BUTTON,
PROP_QUIT,
@@ -97,7 +101,9 @@ struct _TrgMenuBarPrivate {
GtkWidget *mb_view_states;
GtkWidget *mb_view_notebook;
GtkWidget *mb_view_stats;
+#ifdef HAVE_RSSGLIB
GtkWidget *mb_view_rss;
+#endif
GtkWidget *mb_about;
GtkWidget *mb_quit;
GtkWidget *mb_directory_filters;
@@ -142,7 +148,9 @@ void trg_menu_bar_connected_change(TrgMenuBar * mb, gboolean connected)
gtk_widget_set_sensitive(priv->mb_disconnect, connected);
gtk_widget_set_sensitive(priv->mb_remote_prefs, connected);
gtk_widget_set_sensitive(priv->mb_view_stats, connected);
+#ifdef HAVE_RSSGLIB
gtk_widget_set_sensitive(priv->mb_view_rss, connected);
+#endif
gtk_widget_set_sensitive(priv->mb_resume_all, connected);
gtk_widget_set_sensitive(priv->mb_pause_all, connected);
}
@@ -276,9 +284,11 @@ trg_menu_bar_get_property(GObject * object, guint property_id,
case PROP_VIEW_STATS_BUTTON:
g_value_set_object(value, priv->mb_view_stats);
break;
+#ifdef HAVE_RSSGLIB
case PROP_VIEW_RSS_BUTTON:
g_value_set_object(value, priv->mb_view_rss);
break;
+#endif
case PROP_QUIT:
g_value_set_object(value, priv->mb_quit);
break;
@@ -548,11 +558,13 @@ static GtkWidget *trg_menu_bar_view_menu_new(TrgMenuBar * mb)
gtk_widget_set_sensitive(priv->mb_view_stats, FALSE);
gtk_menu_shell_append(GTK_MENU_SHELL(viewMenu), priv->mb_view_stats);
+#ifdef HAVE_RSSGLIB
priv->mb_view_rss =
gtk_menu_item_new_with_mnemonic(_("_RSS"));
//trg_menu_bar_accel_add(mb, priv->mb_view_rss, GDK_F7, 0);
gtk_widget_set_sensitive(priv->mb_view_rss, FALSE);
gtk_menu_shell_append(GTK_MENU_SHELL(viewMenu), priv->mb_view_rss);
+#endif
return view;
}
@@ -882,9 +894,11 @@ static void trg_menu_bar_class_init(TrgMenuBarClass * klass)
trg_menu_bar_install_widget_prop(object_class, PROP_VIEW_STATS_BUTTON,
"view-stats-button",
"View stats button");
+#ifdef HAVE_RSSGLIB
trg_menu_bar_install_widget_prop(object_class, PROP_VIEW_RSS_BUTTON,
"view-rss-button",
"View rss button");
+#endif
trg_menu_bar_install_widget_prop(object_class, PROP_VIEW_STATES_BUTTON,
"view-states-button",
"View states Button");
diff --git a/src/trg-persistent-tree-view.c b/src/trg-persistent-tree-view.c
index e116fdf..c608acb 100644
--- a/src/trg-persistent-tree-view.c
+++ b/src/trg-persistent-tree-view.c
@@ -37,7 +37,7 @@ typedef struct _TrgPersistentTreeViewPrivate
TrgPersistentTreeViewPrivate;
enum {
- PROP_0, PROP_PREFS, PROP_KEY, PROP_MODEL
+ PROP_0, PROP_PREFS, PROP_KEY, PROP_MODEL, PROP_CONF_FLAGS
};
struct _TrgPersistentTreeViewPrivate {
@@ -52,6 +52,7 @@ struct _TrgPersistentTreeViewPrivate {
trg_pref_widget_desc *wd;
GtkTreeModel *model;
trg_persistent_tree_view_column *addSelect;
+ gint conf_flags;
};
static void selection_changed(TrgPersistentTreeView * ptv,
@@ -322,6 +323,9 @@ trg_persistent_tree_view_set_property(GObject * object,
case PROP_MODEL:
priv->model = g_value_get_object(value);
break;
+ case PROP_CONF_FLAGS:
+ priv->conf_flags = g_value_get_int(value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);
break;
@@ -411,7 +415,7 @@ static GObject *trg_persistent_tree_view_constructor(GType type,
gtk_box_pack_start(GTK_BOX(object), hbox, FALSE, FALSE, 4);
priv->wd = trg_pref_widget_desc_new(GTK_WIDGET(priv->tv), priv->key,
- TRG_PREFS_PROFILE);
+ priv->conf_flags);
priv->wd->widget = GTK_WIDGET(object);
priv->wd->saveFunc = &trg_persistent_tree_view_save;
priv->wd->refreshFunc = &trg_persistent_tree_view_refresh;
@@ -462,6 +466,19 @@ trg_persistent_tree_view_class_init(TrgPersistentTreeViewClass * klass)
G_PARAM_STATIC_BLURB));
g_object_class_install_property(object_class,
+ PROP_CONF_FLAGS,
+ g_param_spec_int("conf-flags",
+ "Conf Flags",
+ "Conf Flags",
+ INT_MIN,
+ INT_MAX,
+ TRG_PREFS_PROFILE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_NAME |
+ G_PARAM_STATIC_NICK |
+ G_PARAM_STATIC_BLURB));
+
+ g_object_class_install_property(object_class,
PROP_MODEL,
g_param_spec_object("persistent-model",
"Persistent Model",
@@ -483,12 +500,12 @@ static void trg_persistent_tree_view_init(TrgPersistentTreeView * self)
TrgPersistentTreeView *trg_persistent_tree_view_new(TrgPrefs * prefs,
GtkListStore * model,
- const gchar * key)
+ const gchar * key, gint conf_flags)
{
GObject *obj =
g_object_new(TRG_TYPE_PERSISTENT_TREE_VIEW, "prefs", prefs,
"conf-key", key, "persistent-model",
- model,
+ model, "conf-flags", conf_flags,
NULL);
return TRG_PERSISTENT_TREE_VIEW(obj);
diff --git a/src/trg-persistent-tree-view.h b/src/trg-persistent-tree-view.h
index a5a7c8f..0d16fb6 100644
--- a/src/trg-persistent-tree-view.h
+++ b/src/trg-persistent-tree-view.h
@@ -57,7 +57,7 @@ typedef struct {
TrgPersistentTreeView *trg_persistent_tree_view_new(TrgPrefs * prefs,
GtkListStore * model,
- const gchar * key);
+ const gchar * key, gint conf_flags);
trg_pref_widget_desc
* trg_persistent_tree_view_get_widget_desc(TrgPersistentTreeView *
diff --git a/src/trg-preferences-dialog.c b/src/trg-preferences-dialog.c
index b9327c6..e7434d3 100644
--- a/src/trg-preferences-dialog.c
+++ b/src/trg-preferences-dialog.c
@@ -17,9 +17,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifdef HAVE_CONFIG_H
#include "config.h"
-#endif
#include <glib.h>
#include <glib/gi18n.h>
@@ -601,7 +599,7 @@ static GtkWidget *trg_prefs_openExecPage(TrgPreferencesDialog * dlg)
model = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_STRING);
ptv = trg_persistent_tree_view_new(priv->prefs, model,
- TRG_PREFS_KEY_EXEC_COMMANDS);
+ TRG_PREFS_KEY_EXEC_COMMANDS, TRG_PREFS_PROFILE);
trg_persistent_tree_view_set_add_select(ptv,
trg_persistent_tree_view_add_column
(ptv, 0,
@@ -621,6 +619,46 @@ static GtkWidget *trg_prefs_openExecPage(TrgPreferencesDialog * dlg)
return t;
}
+#ifdef HAVE_RSSGLIB
+static GtkWidget *trg_prefs_rss_page(TrgPreferencesDialog * dlg) {
+ TrgPreferencesDialogPrivate *priv =
+ TRG_PREFERENCES_DIALOG_GET_PRIVATE(dlg);
+ GtkWidget *t;
+ guint row = 0;
+ TrgPersistentTreeView *ptv;
+ trg_pref_widget_desc *wd;
+ GtkListStore *model;
+
+ t = hig_workarea_create();
+
+ hig_workarea_add_section_title(t, &row,
+ _("RSS Feeds"));
+
+ model = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_STRING);
+
+ ptv = trg_persistent_tree_view_new(priv->prefs, model,
+ TRG_PREFS_KEY_RSS, TRG_PREFS_GLOBAL);
+ trg_persistent_tree_view_set_add_select(ptv,
+ trg_persistent_tree_view_add_column
+ (ptv, 0,
+ TRG_PREFS_RSS_SUBKEY_ID,
+ _("Name")));
+ trg_persistent_tree_view_add_column(ptv, 1,
+ TRG_PREFS_RSS_SUBKEY_URL,
+ _("URL"));
+
+ wd = trg_persistent_tree_view_get_widget_desc(ptv);
+ trg_pref_widget_refresh(dlg, wd);
+ priv->widgets = g_list_append(priv->widgets, wd);
+
+ gtk_table_attach(GTK_TABLE(t), GTK_WIDGET(ptv), 1, 2, row, row + 1,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL,
+ GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 0);
+
+ return t;
+}
+#endif
+
static GtkWidget *trg_prefs_dirsPage(TrgPreferencesDialog * dlg)
{
TrgPreferencesDialogPrivate *priv =
@@ -639,7 +677,7 @@ static GtkWidget *trg_prefs_dirsPage(TrgPreferencesDialog * dlg)
model = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_STRING);
ptv = trg_persistent_tree_view_new(priv->prefs, model,
- TRG_PREFS_KEY_DESTINATIONS);
+ TRG_PREFS_KEY_DESTINATIONS, TRG_PREFS_GLOBAL);
trg_persistent_tree_view_set_add_select(ptv,
trg_persistent_tree_view_add_column
(ptv, 0,
@@ -917,6 +955,13 @@ static GObject *trg_preferences_dialog_constructor(GType type,
(object)),
gtk_label_new(_("Directories")));
+#ifdef HAVE_RSSGLIB
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
+ trg_prefs_rss_page(TRG_PREFERENCES_DIALOG
+ (object)),
+ gtk_label_new(_("RSS Feeds")));
+#endif
+
gtk_container_set_border_width(GTK_CONTAINER(notebook), GUI_PAD);
gtk_box_pack_start(GTK_BOX(contentvbox), notebook, TRUE, TRUE, 0);
diff --git a/src/trg-prefs.h b/src/trg-prefs.h
index d8afe8f..4245505 100644
--- a/src/trg-prefs.h
+++ b/src/trg-prefs.h
@@ -79,6 +79,9 @@
#define TRG_PREFS_KEY_EXEC_COMMANDS "exec-commands"
#define TRG_PREFS_KEY_EXEC_COMMANDS_SUBKEY_CMD "cmd"
#define TRG_PREFS_KEY_DESTINATIONS "destinations"
+#define TRG_PREFS_KEY_RSS "rss"
+#define TRG_PREFS_RSS_SUBKEY_ID "id"
+#define TRG_PREFS_RSS_SUBKEY_URL "url"
#define TRG_PREFS_KEY_LAST_MOVE_DESTINATION "last-move-destination"
#define TRG_PREFS_KEY_LAST_ADD_DESTINATION "last-add-destination"
#define TRG_PREFS_KEY_DESTINATIONS_SUBKEY_DIR "dir"
diff --git a/src/trg-rss-model.c b/src/trg-rss-model.c
index 12b2d2b..813652f 100644
--- a/src/trg-rss-model.c
+++ b/src/trg-rss-model.c
@@ -17,6 +17,10 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
+#include "config.h"
+
+#ifdef HAVE_RSSGLIB
+
#include <gtk/gtk.h>
#include <json-glib/json-glib.h>
#include <rss-glib/rss-glib.h>
@@ -31,6 +35,12 @@ enum {
PROP_0, PROP_CLIENT
};
+enum {
+ SIGNAL_GET_ERROR, SIGNAL_PARSE_ERROR, SIGNAL_COUNT
+};
+
+static guint signals[SIGNAL_COUNT] = { 0 };
+
G_DEFINE_TYPE(TrgRssModel, trg_rss_model, GTK_TYPE_LIST_STORE)
#define TRG_RSS_MODEL_GET_PRIVATE(o) \
(G_TYPE_INSTANCE_GET_PRIVATE ((o), TRG_TYPE_RSS_MODEL, TrgRssModelPrivate))
@@ -95,9 +105,23 @@ static gboolean on_rss_receive(gpointer data) {
g_object_unref(doc);
g_object_unref(parser);
} else {
+ rss_parse_error perror;
+ perror.error = error;
+ perror.feed_id = update->feed_id;
+
+ g_signal_emit(model, signals[SIGNAL_PARSE_ERROR], 0,
+ &perror);
+
+ g_message("parse error: %s", error->message);
g_error_free(error);
- g_message("parse error?");
}
+ } else {
+ rss_get_error get_error;
+ get_error.error_code = response->status;
+ get_error.feed_id = update->feed_id;
+
+ g_signal_emit(model, signals[SIGNAL_GET_ERROR], 0,
+ &get_error);
}
trg_response_free(response);
@@ -185,6 +209,32 @@ static void trg_rss_model_class_init(TrgRssModelClass * klass) {
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
| G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK
| G_PARAM_STATIC_BLURB));
+
+ signals[SIGNAL_GET_ERROR] = g_signal_new("get-error",
+ G_TYPE_FROM_CLASS
+ (object_class),
+ G_SIGNAL_RUN_LAST |
+ G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET
+ (TrgRssModelClass,
+ get_error),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__POINTER,
+ G_TYPE_NONE, 1,
+ G_TYPE_POINTER);
+
+ signals[SIGNAL_PARSE_ERROR] = g_signal_new("parse-error",
+ G_TYPE_FROM_CLASS
+ (object_class),
+ G_SIGNAL_RUN_LAST |
+ G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET
+ (TrgRssModelClass,
+ parse_error),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__POINTER,
+ G_TYPE_NONE, 1,
+ G_TYPE_POINTER);
}
static void trg_rss_model_init(TrgRssModel * self) {
@@ -203,3 +253,5 @@ static void trg_rss_model_init(TrgRssModel * self) {
TrgRssModel *trg_rss_model_new(TrgClient *client) {
return g_object_new(TRG_TYPE_RSS_MODEL, "client", client, NULL);
}
+
+#endif
diff --git a/src/trg-rss-model.h b/src/trg-rss-model.h
index 799629a..a931c37 100644
--- a/src/trg-rss-model.h
+++ b/src/trg-rss-model.h
@@ -20,6 +20,10 @@
#ifndef TRG_RSS_MODEL_H_
#define TRG_RSS_MODEL_H_
+#include "config.h"
+
+#ifdef HAVE_RSSGLIB
+
#include <glib-object.h>
#include <json-glib/json-glib.h>
@@ -43,7 +47,21 @@ G_BEGIN_DECLS
} TrgRssModel;
typedef struct {
+ gchar *feed_id;
+ gint error_code;
+} rss_get_error;
+
+typedef struct {
+ GError *error;
+ gchar *feed_id;
+} rss_parse_error;
+
+typedef struct {
GtkListStoreClass parent_class;
+ void (*get_error) (TrgRssModel * model,
+ rss_get_error *error);
+ void (*parse_error) (TrgRssModel * model,
+ rss_parse_error *error);
} TrgRssModelClass;
GType trg_rss_model_get_type(void);
@@ -62,4 +80,6 @@ enum {
RSSCOL_COLUMNS
};
+#endif
+
#endif /* TRG_RSS_MODEL_H_ */
diff --git a/src/trg-rss-window.c b/src/trg-rss-window.c
index 942dddc..5caedf0 100644
--- a/src/trg-rss-window.c
+++ b/src/trg-rss-window.c
@@ -17,6 +17,10 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
+#include "config.h"
+
+#ifdef HAVE_RSSGLIB
+
#include <gtk/gtk.h>
#include <glib/gi18n.h>
#include <rss-glib/rss-glib.h>
@@ -141,6 +145,34 @@ rss_item_activated(GtkTreeView * treeview,
g_free(link);
}
+static void *trg_rss_on_get_error(TrgRssModel *model, rss_get_error *error, gpointer data) {
+ GtkWindow *win = GTK_WINDOW(data);
+ gchar *msg = g_strdup_printf(_("Error while fetching RSS feed \"%s\": %s"), error->feed_id, curl_easy_strerror(error->error_code));
+ GtkWidget *dialog = gtk_message_dialog_new(win,
+ GTK_DIALOG_MODAL,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_OK,
+ msg);
+ g_free(msg);
+ gtk_window_set_title(GTK_WINDOW(dialog), _("Error"));
+ gtk_dialog_run(GTK_DIALOG(dialog));
+ gtk_widget_destroy(dialog);
+}
+
+static void *trg_rss_on_parse_error(TrgRssModel *model, rss_parse_error *error, gpointer data) {
+ GtkWindow *win = GTK_WINDOW(data);
+ gchar *msg = g_strdup_printf(_("Error parsing RSS feed \"%s\": %s"), error->feed_id, error->error->message);
+ GtkWidget *dialog = gtk_message_dialog_new(win,
+ GTK_DIALOG_MODAL,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_OK,
+ msg);
+ g_free(msg);
+ gtk_window_set_title(GTK_WINDOW(dialog), _("Error"));
+ gtk_dialog_run(GTK_DIALOG(dialog));
+ gtk_widget_destroy(dialog);
+}
+
static GObject *trg_rss_window_constructor(GType type,
guint
n_construct_properties,
@@ -161,6 +193,12 @@ static GObject *trg_rss_window_constructor(GType type,
priv = TRG_RSS_WINDOW_GET_PRIVATE(object);
model = trg_rss_model_new(priv->client);
+
+ g_signal_connect(model, "get-error",
+ G_CALLBACK(trg_rss_on_get_error), NULL);
+ g_signal_connect(model, "parse-error",
+ G_CALLBACK(trg_rss_on_parse_error), NULL);
+
trg_rss_model_update(model);
view = GTK_TREE_VIEW(gtk_tree_view_new());
@@ -260,3 +298,5 @@ TrgRssWindow *trg_rss_window_get_instance(TrgMainWindow *parent, TrgClient *clie
return TRG_RSS_WINDOW(instance);
}
+
+#endif
diff --git a/src/trg-rss-window.h b/src/trg-rss-window.h
index c628a6b..5ce8690 100644
--- a/src/trg-rss-window.h
+++ b/src/trg-rss-window.h
@@ -20,6 +20,10 @@
#ifndef TRG_RSS_WINDOW_H_
#define TRG_RSS_WINDOW_H_
+#include "config.h"
+
+#ifdef HAVE_RSSGLIB
+
#include <glib-object.h>
#include <gtk/gtk.h>
@@ -50,4 +54,7 @@ GType trg_rss_window_get_type(void);
TrgRssWindow *trg_rss_window_get_instance(TrgMainWindow *parent, TrgClient *client);
G_END_DECLS
+
+#endif
+
#endif /* TRG_RSS_WINDOW_H_ */
diff --git a/src/util.c b/src/util.c
index 5ef7768..8dcbb65 100644
--- a/src/util.c
+++ b/src/util.c
@@ -340,7 +340,7 @@ gchar *make_error_message(JsonObject * response, int status)
{
if (status == FAIL_JSON_DECODE) {
return g_strdup(_("JSON decoding error."));
- } else if (status == FAIL_RESPONSE_UNSUCCESSFUL) {
+ } else if (response && status == FAIL_RESPONSE_UNSUCCESSFUL) {
const gchar *resultStr =
json_object_get_string_member(response, "result");
if (resultStr == NULL)