From b71756ccc346fe32ab35ae23259bf0b3bb016d25 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Orsini Date: Mon, 22 Apr 2013 19:27:14 +0000 Subject: [PATCH] --- src/glade/prss.glade | 31 ++++++++++++++++++++++++++++++- src/main.c | 14 ++++++++++---- src/ttrss.c | 47 +++++++++++++++++++++++++++++++++++++++++------ 3 files changed, 81 insertions(+), 11 deletions(-) diff --git a/src/glade/prss.glade b/src/glade/prss.glade index 37c45b6..3315f2c 100644 --- a/src/glade/prss.glade +++ b/src/glade/prss.glade @@ -1,6 +1,10 @@ + + Refresh + gtk-refresh + @@ -249,6 +253,31 @@ + + True + False + + + action1 + True + False + toolbutton1 + True + + + + False + True + + + + + False + True + 1 + + + True True @@ -362,7 +391,7 @@ True True - 1 + 2 diff --git a/src/main.c b/src/main.c index 73d537d..7a50b5c 100644 --- a/src/main.c +++ b/src/main.c @@ -85,9 +85,10 @@ void update() g_settings_get_string(settings, "password")); model = gtk_tree_view_get_model(GTK_TREE_VIEW(w_treeview)); - gtk_list_store_clear(GTK_LIST_STORE(model)); - for (feeds = ttrss_get_feeds(); *feeds; feeds++) { + gtk_list_store_clear(GTK_LIST_STORE(model)); + feeds = ttrss_get_feeds(); + while(feeds && *feeds) { if ((*feeds)->unread) title = g_strdup_printf("%s (%d)", (*feeds)->title, @@ -104,10 +105,17 @@ void update() 1, (*feeds), -1); free(title); + feeds++; } printf("refresh done\n"); } +void refresh_clicked_cbk(GtkWidget *btn, gpointer data) +{ + printf("refresh_clicked_cbk\n"); + update(); +} + void settings_activate_cbk(GtkWidget *menu_item, gpointer data) { GtkDialog *diag; @@ -300,8 +308,6 @@ int main(int argc, char **argv) gtk_widget_show_all(window); - update(); - gtk_main(); exit(EXIT_SUCCESS); diff --git a/src/ttrss.c b/src/ttrss.c index 89fbd94..ec67cc8 100644 --- a/src/ttrss.c +++ b/src/ttrss.c @@ -70,13 +70,13 @@ void ttrss_login(const char *url, const char *user, const char *password) content = json_object_object_get(rp, "content"); if (!content) { - fprintf(stderr, "Login failed: no content"); + fprintf(stderr, "Login failed: no content\n"); return ; } error = json_object_object_get(content, "error"); if (error) { - fprintf(stderr, "Login failed"); + fprintf(stderr, "Login failed\n"); return ; } @@ -147,11 +147,45 @@ static struct headline **get_headlines(int feed_id) return headlines; } +static int feeds_length(struct feed **list) +{ + int n; + + if (!list) + return 0; + + n = 0; + while(*list) { + n++; + list++; + } + + return n; +} + +static struct feed **feeds_add(struct feed **feeds, struct feed *feed) +{ + int n; + struct feed **result; + + n = feeds_length(feeds); + + result = malloc((n + 1 + 1) * sizeof(struct feed *)); + + if (feeds) + memcpy(result, feeds, n * sizeof(struct feed *)); + + result[n] = feed; + result[n + 1] = NULL; + + return result; +} + struct feed **ttrss_get_feeds() { struct json_object *rp, *rq, *content, *jfeed, *j; int i, n; - struct feed **feeds, *feed; + struct feed **feeds, *feed, **tmp; printf("ttrss_get_feeds\n"); @@ -165,7 +199,7 @@ struct feed **ttrss_get_feeds() if (content) { n = json_object_array_length(content); - feeds = malloc((n+1) * sizeof(struct feed *)); + feeds = NULL; for (i = 0; i < n; i++) { jfeed = json_object_array_get_idx(content, i); @@ -185,9 +219,10 @@ struct feed **ttrss_get_feeds() feed->headlines = NULL; - feeds[i] = feed; + tmp = feeds_add(feeds, feed); + free(feeds); + feeds = tmp; } - feeds[n] = NULL; } else { feeds = NULL; } -- 2.7.4