From: Jean-Philippe Orsini Date: Wed, 24 Apr 2013 16:07:58 +0000 (+0000) Subject: (no commit message) X-Git-Url: https://git.wpitchoune.net/gitweb/?p=prss.git;a=commitdiff_plain;h=9e8f000157c9c09742b5cc55f768782e16db240c --- diff --git a/src/ttrss.c b/src/ttrss.c index 99b8bc4..1f97155 100644 --- a/src/ttrss.c +++ b/src/ttrss.c @@ -214,6 +214,7 @@ int ws_update_headlines(struct feed *feed) struct json_object *rp, *rq, *jheadline, *j; int i, n, err, hid; struct headline *h, **tmp; + const char *title, *url; rq = ws_request_new("getHeadlines"); ws_request_add_att_int(rq, "feed_id", feed->id); @@ -232,12 +233,13 @@ int ws_update_headlines(struct feed *feed) h = feed_get_headline(feed, hid); if (!h) { - h = malloc(sizeof(struct headline)); - h->id = hid; - h->excerpt = NULL; - h->content = NULL; - h->title = NULL; - h->url = NULL; + j = json_object_object_get(jheadline, "title"); + title = json_object_get_string(j); + + j = json_object_object_get(jheadline, "link"); + url = json_object_get_string(j); + + h = headline_new(hid, url, title); tmp = headlines_add(feed->headlines, h); if (feed->headlines) @@ -245,16 +247,6 @@ int ws_update_headlines(struct feed *feed) feed->headlines = tmp; } - if (!h->title) { - j = json_object_object_get(jheadline, "title"); - h->title = strdup(json_object_get_string(j)); - } - - if (!h->url) { - j = json_object_object_get(jheadline, "link"); - h->url = strdup(json_object_get_string(j)); - } - j = json_object_object_get(jheadline, "unread"); h->unread = json_object_get_boolean(j); } diff --git a/src/ttrss_model.c b/src/ttrss_model.c index c67ad65..c65a710 100644 --- a/src/ttrss_model.c +++ b/src/ttrss_model.c @@ -81,8 +81,43 @@ struct headline *feed_get_headline(struct feed *feed, int id) return NULL; } +void headline_free(struct headline *headline) +{ + if (headline) { + free(headline->url); + free(headline->title); + free(headline->excerpt); + free(headline->content); + free(headline); + } +} + +struct headline *headline_new(int id, const char *url, const char *title) +{ + struct headline *h; + + h = malloc(sizeof(struct headline)); + h->id = id; + h->url = strdup(url); + h->title = strdup(title); + h->excerpt = NULL; + h->content = NULL; + + return h; +} + void headlines_free(struct headline **headlines) { + struct headline **cur; + + if (headlines) { + cur = headlines; + while (*cur) { + headline_free(*cur); + cur++; + } + free(headlines); + } } void feed_free(struct feed *feed) diff --git a/src/ttrss_model.h b/src/ttrss_model.h index 6d651db..6f1a4c1 100644 --- a/src/ttrss_model.h +++ b/src/ttrss_model.h @@ -41,7 +41,9 @@ struct feed { void feed_free(struct feed *feed); void feeds_free(struct feed **feed); + struct headline **headlines_add(struct headline **list, struct headline *h); +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);