X-Git-Url: https://git.wpitchoune.net/gitweb/?p=prss.git;a=blobdiff_plain;f=src%2Fttrss.c;h=1f971551b2a3a17b7cee8359c459e843f78e80f5;hp=3649b071efb1f98dc70c5592b08659ca9aa47747;hb=9e8f000157c9c09742b5cc55f768782e16db240c;hpb=0d88bb9ed245be97f3120dad9c3c1604cd9c4183 diff --git a/src/ttrss.c b/src/ttrss.c index 3649b07..1f97155 100644 --- a/src/ttrss.c +++ b/src/ttrss.c @@ -31,55 +31,7 @@ static char *session_url; static char *session_user; static char *session_pwd; -static int list_length(void **list) -{ - int n; - - if (!list) - return 0; - - n = 0; - while(*list) { - n++; - list++; - } - - return n; -} - -static void **list_add(void **list, void *item) -{ - int n; - void **result; - - n = list_length(list); - - result = malloc((n + 1 + 1) * sizeof(void *)); - - if (list) - memcpy(result, list, n * sizeof(void *)); - - result[n] = item; - result[n + 1] = NULL; - - return result; -} - - -struct headline *feed_get_headline(struct feed *feed, int id) -{ - struct headline **headlines; - - headlines = feed->headlines; - if (headlines) - while (*headlines) { - if ((*headlines)->id == id) - return *headlines; - headlines++; - } - - return NULL; -} +static struct feed **data; void ws_request_add_att_str(json_object *rq, const char *k, const char *str) { @@ -236,22 +188,21 @@ char *ws_get_article_content(int id) rq = ws_request_new("getArticle"); ws_request_add_att_int(rq, "article_id", id); - + rp = ws_execute(rq); - + json_object_put(rq); str = NULL; if (rp) { item = json_object_array_get_idx(rp, 0); - + if (item) { content = json_object_object_get(item, "content"); - str = strdup(json_object_get_string(content)); } - + json_object_put(rp); } @@ -263,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); @@ -279,25 +231,22 @@ int ws_update_headlines(struct feed *feed) j = json_object_object_get(jheadline, "id"); hid = json_object_get_int(j); h = feed_get_headline(feed, hid); - + if (!h) { - h = malloc(sizeof(struct headline)); - h->id = hid; - h->excerpt = NULL; - h->content = NULL; + j = json_object_object_get(jheadline, "title"); + title = json_object_get_string(j); - tmp = (struct headline **)list_add((void **)feed->headlines, h); + 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) free(feed->headlines); feed->headlines = tmp; } - j = json_object_object_get(jheadline, "title"); - h->title = strdup(json_object_get_string(j)); - - 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); } @@ -318,7 +267,6 @@ const char *ttrss_get_headline_content(struct headline *h) return h->content; } - struct feed **ttrss_get_feeds() { struct json_object *rp, *rq, *content, *jfeed, *j; @@ -357,7 +305,7 @@ struct feed **ttrss_get_feeds() feed->headlines = NULL; - tmp = (struct feed **)list_add((void **)feeds, feed); + tmp = feeds_add(feeds, feed); free(feeds); feeds = tmp; } @@ -392,7 +340,14 @@ void ttrss_set_article_unread(int id, int unread) json_object_object_add(rq, "mode", json_object_new_int(unread)); rp = http_json_get(session_url, rq); - + json_object_put(rq); json_object_put(rp); } + +void ttrss_set_config(const char *url, const char *user, const char *pwd) +{ + feeds_free(data); + data = NULL; + ws_init(url, user, pwd); +}