From: Jean-Philippe Orsini Date: Mon, 22 Apr 2013 17:05:27 +0000 (+0000) Subject: (no commit message) X-Git-Url: https://git.wpitchoune.net/gitweb/?p=prss.git;a=commitdiff_plain;h=6ad7426a45d5a4e76cbd67d2759b9f5e236443f6 --- diff --git a/src/main.c b/src/main.c index 4365e11..73d537d 100644 --- a/src/main.c +++ b/src/main.c @@ -112,7 +112,7 @@ void settings_activate_cbk(GtkWidget *menu_item, gpointer data) { GtkDialog *diag; GtkBuilder *builder; - GtkEntry *e; + GtkEntry *login, *url, *pwd; printf("settings_activate_cbk\n"); @@ -125,16 +125,26 @@ void settings_activate_cbk(GtkWidget *menu_item, gpointer data) diag = GTK_DIALOG(gtk_builder_get_object(builder, "settings_dialog")); - e = GTK_ENTRY(gtk_builder_get_object(builder, "url_entry")); - gtk_entry_set_text(e, g_settings_get_string(settings, "url")); - - e = GTK_ENTRY(gtk_builder_get_object(builder, "login_entry")); - gtk_entry_set_text(e, g_settings_get_string(settings, "user")); - - e = GTK_ENTRY(gtk_builder_get_object(builder, "password_entry")); - gtk_entry_set_text(e, g_settings_get_string(settings, "password")); - - printf("%d\n", gtk_dialog_run(diag)); + url = GTK_ENTRY(gtk_builder_get_object(builder, "url_entry")); + gtk_entry_set_text(url, g_settings_get_string(settings, "url")); + + login = GTK_ENTRY(gtk_builder_get_object(builder, "login_entry")); + gtk_entry_set_text(login, g_settings_get_string(settings, "user")); + + pwd = GTK_ENTRY(gtk_builder_get_object(builder, "password_entry")); + gtk_entry_set_text(pwd, g_settings_get_string(settings, "password")); + + if (gtk_dialog_run(diag)) { + g_settings_set_string(settings, + "password", + gtk_entry_get_text(pwd)); + g_settings_set_string(settings, + "url", + gtk_entry_get_text(url)); + g_settings_set_string(settings, + "user", + gtk_entry_get_text(login)); + } gtk_widget_destroy(GTK_WIDGET(diag)); @@ -164,7 +174,9 @@ int feed_cursor_changed_cbk(GtkTreeView *treeview, gpointer data) headline_model = gtk_tree_view_get_model(w_headlineview); headline_store = GTK_LIST_STORE(headline_model); gtk_list_store_clear(headline_store); - for (headlines = feed->headlines; *headlines; headlines++) { + + headlines = ttrss_get_headlines(feed); + while (headlines && *headlines) { gtk_list_store_append(headline_store, &iter); if ((*headlines)->unread) @@ -180,6 +192,8 @@ int feed_cursor_changed_cbk(GtkTreeView *treeview, gpointer data) -1); free(title); + + headlines++; } gtk_tree_path_free(path); diff --git a/src/ttrss.c b/src/ttrss.c index d83db4f..89fbd94 100644 --- a/src/ttrss.c +++ b/src/ttrss.c @@ -94,107 +94,115 @@ void ttrss_login(const char *url, const char *user, const char *password) json_object_put(rp); } -struct feed **ttrss_get_feeds() +static struct headline **get_headlines(int feed_id) { - struct json_object *rp, *rq, *content, *jfeed, *j; + struct json_object *rp, *rq, *content, *jheadline, *j; int i, n; - struct feed **feeds, *feed; + struct headline **headlines, *h; - printf("ttrss_get_feeds\n"); + printf("get_headlines %d\n", feed_id); - rq = create_op("getFeeds"); + rq = create_op("getHeadlines"); + json_object_object_add(rq, "feed_id", json_object_new_int(feed_id)); + json_object_object_add(rq, "show_excerpt", json_object_new_boolean(1)); + json_object_object_add(rq, "show_content", json_object_new_boolean(1)); rp = post_json_object(session_url, rq); + json_object_put(rq); content = json_object_object_get(rp, "content"); if (content) { n = json_object_array_length(content); - - feeds = malloc((n+1) * sizeof(struct feed *)); + headlines = malloc((n+1)*sizeof(struct headline *)); for (i = 0; i < n; i++) { - jfeed = json_object_array_get_idx(content, i); - - feed = malloc(sizeof(struct feed)); + jheadline = json_object_array_get_idx(content, i); - j = json_object_object_get(jfeed, "title"); - feed->title = strdup(json_object_get_string(j)); + h = malloc(sizeof(struct headline)); - j = json_object_object_get(jfeed, "feed_url"); - feed->url = strdup(json_object_get_string(j)); + j = json_object_object_get(jheadline, "title"); + h->title = strdup(json_object_get_string(j)); - j = json_object_object_get(jfeed, "id"); - feed->id = json_object_get_int(j); + j = json_object_object_get(jheadline, "excerpt"); + h->excerpt = strdup(json_object_get_string(j)); - j = json_object_object_get(jfeed, "unread"); - feed->unread = json_object_get_int(j); + j = json_object_object_get(jheadline, "content"); + h->content = strdup(json_object_get_string(j)); - feed->headlines = ttrss_get_headlines(feed->id); + j = json_object_object_get(jheadline, "unread"); + h->unread = json_object_get_boolean(j); - feeds[i] = feed; + headlines[i] = h; } - feeds[n] = NULL; + headlines[n] = NULL; } else { - feeds = NULL; + headlines = NULL; } json_object_put(rp); - printf("ttrss_get_feeds ended\n"); + printf("get_headlines %d end\n", feed_id); - return feeds; + return headlines; } -struct headline **ttrss_get_headlines(int feed_id) +struct feed **ttrss_get_feeds() { - struct json_object *rp, *rq, *content, *jheadline, *j; + struct json_object *rp, *rq, *content, *jfeed, *j; int i, n; - struct headline **headlines, *h; + struct feed **feeds, *feed; - printf("ttrss_get_headlines %d\n", feed_id); + printf("ttrss_get_feeds\n"); - rq = create_op("getHeadlines"); - json_object_object_add(rq, "feed_id", json_object_new_int(feed_id)); - json_object_object_add(rq, "show_excerpt", json_object_new_boolean(1)); - json_object_object_add(rq, "show_content", json_object_new_boolean(1)); + rq = create_op("getFeeds"); rp = post_json_object(session_url, rq); - json_object_put(rq); content = json_object_object_get(rp, "content"); if (content) { n = json_object_array_length(content); - headlines = malloc((n+1)*sizeof(struct headline *)); + + feeds = malloc((n+1) * sizeof(struct feed *)); for (i = 0; i < n; i++) { - jheadline = json_object_array_get_idx(content, i); + jfeed = json_object_array_get_idx(content, i); - h = malloc(sizeof(struct headline)); + feed = malloc(sizeof(struct feed)); - j = json_object_object_get(jheadline, "title"); - h->title = strdup(json_object_get_string(j)); + j = json_object_object_get(jfeed, "title"); + feed->title = strdup(json_object_get_string(j)); - j = json_object_object_get(jheadline, "excerpt"); - h->excerpt = strdup(json_object_get_string(j)); + j = json_object_object_get(jfeed, "feed_url"); + feed->url = strdup(json_object_get_string(j)); - j = json_object_object_get(jheadline, "content"); - h->content = strdup(json_object_get_string(j)); + j = json_object_object_get(jfeed, "id"); + feed->id = json_object_get_int(j); - j = json_object_object_get(jheadline, "unread"); - h->unread = json_object_get_boolean(j); + j = json_object_object_get(jfeed, "unread"); + feed->unread = json_object_get_int(j); - headlines[i] = h; + feed->headlines = NULL; + + feeds[i] = feed; } - headlines[n] = NULL; + feeds[n] = NULL; } else { - headlines = NULL; + feeds = NULL; } json_object_put(rp); - printf("ttrss_get_headlines %d end\n", feed_id); + printf("ttrss_get_feeds ended\n"); - return headlines; + return feeds; +} + +struct headline **ttrss_get_headlines(struct feed *f) +{ + if (!f->headlines) + f->headlines = get_headlines(f->id); + + return f->headlines; } diff --git a/src/ttrss.h b/src/ttrss.h index 88cde67..4c7f67e 100644 --- a/src/ttrss.h +++ b/src/ttrss.h @@ -38,6 +38,6 @@ struct feed { void ttrss_login(const char *url, const char *user, const char *password); struct feed **ttrss_get_feeds(); -struct headline **ttrss_get_headlines(int); +struct headline **ttrss_get_headlines(struct feed *); #endif