(no commit message)
authorJean-Philippe Orsini <jeanfi@gmail.com>
Wed, 24 Apr 2013 16:07:58 +0000 (16:07 +0000)
committerJean-Philippe Orsini <jeanfi@gmail.com>
Wed, 24 Apr 2013 16:07:58 +0000 (16:07 +0000)
src/ttrss.c
src/ttrss_model.c
src/ttrss_model.h

index 99b8bc4..1f97155 100644 (file)
@@ -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;
        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);
 
        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 = 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)
 
                                tmp = headlines_add(feed->headlines, h);
                                if (feed->headlines)
@@ -245,16 +247,6 @@ int ws_update_headlines(struct feed *feed)
                                feed->headlines = tmp;
                        }
 
                                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);
                }
                        j = json_object_object_get(jheadline, "unread");
                        h->unread = json_object_get_boolean(j);
                }
index c67ad65..c65a710 100644 (file)
@@ -81,8 +81,43 @@ struct headline *feed_get_headline(struct feed *feed, int id)
        return NULL;
 }
 
        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)
 {
 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)
 }
 
 void feed_free(struct feed *feed)
index 6d651db..6f1a4c1 100644 (file)
@@ -41,7 +41,9 @@ struct feed {
 
 void feed_free(struct feed *feed);
 void feeds_free(struct feed **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 **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);
 
 struct feed **feeds_add(struct feed **list, struct feed *f);
 struct headline *feed_get_headline(struct feed *feed, int id);