(no commit message)
authorJean-Philippe Orsini <jeanfi@gmail.com>
Thu, 25 Apr 2013 00:30:12 +0000 (00:30 +0000)
committerJean-Philippe Orsini <jeanfi@gmail.com>
Thu, 25 Apr 2013 00:30:12 +0000 (00:30 +0000)
src/main.c
src/ttrss.c
src/ttrss.h
src/ttrss_model.c
src/ttrss_model.h

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);
        }
index 64a0375..3ec22f8 100644 (file)
@@ -79,3 +79,8 @@ struct feed *ttrss_get_feed(int id)
 {
        return feeds_get_feed(data, id);
 }
+
+struct headline *ttrss_get_headline(int id)
+{
+       return feeds_get_headline(data, id);
+}
index 28370f3..8fbe148 100644 (file)
@@ -29,6 +29,8 @@ struct headline **ttrss_feed_get_headlines(struct feed *);
 const char *ttrss_get_headline_content(struct headline *);
 void ttrss_set_article_unread(int id, int unread);
 
+struct headline *ttrss_get_headline(int id);
+
 void ttrs_set_config(const char *url, const char *user, const char *pwd);
 int ws_open_session();
 
index a1cdcef..93c9409 100644 (file)
@@ -178,3 +178,22 @@ struct feed *feeds_get_feed(struct feed **feeds, int id)
 
        return NULL;
 }
+
+struct headline *feeds_get_headline(struct feed **feeds, int id)
+{
+       struct headline *h;
+
+       if (!feeds)
+               return NULL;
+
+       while (*feeds) {
+               h = feed_get_headline(*feeds, id);
+
+               if (h)
+                       return h;
+
+               feeds++;
+       }
+
+       return NULL;
+}
index b502010..e2ac2d8 100644 (file)
@@ -49,5 +49,6 @@ struct headline *headline_new(int id, const char *url, const char *title);
 
 struct feed **feeds_add(struct feed **list, struct feed *f);
 struct headline *feed_get_headline(struct feed *feed, int id);
+struct headline *feeds_get_headline(struct feed **feeds, int id);
 
 #endif