(no commit message)
[prss.git] / src / main.c
index 849c112..f227b41 100644 (file)
@@ -35,6 +35,11 @@ static GSettings *settings;
 
 static int model_state;
 
+enum {
+       COL_FEED_TITLE,
+       COL_FEED_ID
+};
+
 static struct option long_options[] = {
        {"version", no_argument, 0, 'v'},
        {"help", no_argument, 0, 'h'},
@@ -164,32 +169,68 @@ void settings_activate_cbk(GtkWidget *menu_item, gpointer data)
        g_object_unref(G_OBJECT(builder));
 }
 
-int feed_cursor_changed_cbk(GtkTreeView *treeview, gpointer data)
+static struct feed *get_selected_feed()
 {
        GtkTreePath *path;
        GtkTreeViewColumn *cols;
        GtkTreeIter iter;
-       GtkTreeModel *model, *headline_model;
+       GtkTreeModel *model;
+       int id;
+
+       gtk_tree_view_get_cursor(w_treeview, &path, &cols);
+
+       if (path) {
+               model = gtk_tree_view_get_model(w_treeview);
+               gtk_tree_model_get_iter(model, &iter, path);
+               gtk_tree_model_get(model, &iter, 1, &id, -1);
+
+               gtk_tree_path_free(path);
+
+               return ttrss_get_feed(id);
+       }
+
+       return NULL;
+}
+
+static struct headline *get_selected_headline(GtkTreeIter *iter)
+{
+       GtkTreePath *path;
+       GtkTreeViewColumn *cols;
+       GtkTreeModel *model;
+       int id;
+
+       gtk_tree_view_get_cursor(w_headlineview, &path, &cols);
+
+       if (path) {
+               model = gtk_tree_view_get_model(w_headlineview);
+               gtk_tree_model_get_iter(model, iter, path);
+               gtk_tree_model_get(model, iter, 1, &id, -1);
+
+               gtk_tree_path_free(path);
+
+               return ttrss_get_headline(id);
+       }
+
+       return NULL;
+}
+
+int feed_cursor_changed_cbk(GtkTreeView *treeview, gpointer data)
+{
+       GtkTreeIter iter;
+       GtkTreeModel *headline_model;
        GtkListStore *headline_store;
        struct feed *feed;
        struct headline **headlines;
        char *title;
-       int feed_id;
 
        if (model_state)
                return TRUE;
 
        printf("feed_cursor_changed_cbk\n");
 
-       gtk_tree_view_get_cursor(treeview, &path, &cols);
-
-       if (path) {
-               model = gtk_tree_view_get_model(treeview);
-               gtk_tree_model_get_iter(model, &iter, path);
-               gtk_tree_model_get(model, &iter, 1, &feed_id, -1);
-
-               feed = ttrss_get_feed(feed_id);
+       feed = get_selected_feed();
 
+       if (feed) {
                headline_model = gtk_tree_view_get_model(w_headlineview);
                headline_store = GTK_LIST_STORE(headline_model);
                model_state = 1;
@@ -210,7 +251,7 @@ int feed_cursor_changed_cbk(GtkTreeView *treeview, gpointer data)
                                gtk_list_store_set(headline_store,
                                                   &iter,
                                                   0, title,
-                                                  1, (*headlines),
+                                                  1, (*headlines)->id,
                                                   -1);
                                
                                free(title);
@@ -220,7 +261,6 @@ int feed_cursor_changed_cbk(GtkTreeView *treeview, gpointer data)
                }
 
                model_state = 0;
-               gtk_tree_path_free(path);
        }
 
        return 1;
@@ -228,8 +268,6 @@ int feed_cursor_changed_cbk(GtkTreeView *treeview, gpointer data)
 
 int headline_cursor_changed_cbk(GtkTreeView *treeview, gpointer data)
 {
-       GtkTreePath *path;
-       GtkTreeViewColumn *cols;
        GtkTreeIter iter;
        GtkTreeModel *model;
        struct headline *headline;
@@ -240,13 +278,9 @@ int headline_cursor_changed_cbk(GtkTreeView *treeview, gpointer data)
        if (model_state)
                return TRUE;
 
-       gtk_tree_view_get_cursor(treeview, &path, &cols);
-
-       if (path) {
-               model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeview));
-               gtk_tree_model_get_iter(model, &iter, path);
-               gtk_tree_model_get(model, &iter, 1, &headline, -1);
+       headline = get_selected_headline(&iter);
 
+       if (headline) {
                str = ttrss_get_headline_content(headline);
 
                if (str)
@@ -259,13 +293,15 @@ int headline_cursor_changed_cbk(GtkTreeView *treeview, gpointer data)
                        headline->unread = 0;
                }
 
+               model = gtk_tree_view_get_model(w_headlineview);
                gtk_list_store_set(GTK_LIST_STORE(model),
                                   &iter,
                                   0, headline->title,
                                   -1);
+       } else {
+               printf("headline not found\n");
+       }               
 
-               gtk_tree_path_free(path);
-       }
 
        return TRUE;
 }
@@ -294,8 +330,6 @@ void headline_row_activated_cbk(GtkWidget *widget, gpointer data)
                else
                        screen = gdk_screen_get_default();
 
-               printf("%s\n", url);
-
                error = NULL;
                gtk_show_uri(screen, url, gtk_get_current_event_time(), &error);
        }