we don't really need to build src/liblj/ as library; and we don't need to write each...
[k8lowj.git] / src / liblj / getevents.c
blobee859e42eb07002163d6e86e4e9941afe59fb387
1 /* liblivejournal - a client library for LiveJournal.
2 * Copyright (C) 2003 Evan Martin <evan@livejournal.com>
4 * vim: tabstop=4 shiftwidth=4 noexpandtab :
5 */
7 #include <glib.h>
8 #include <stdlib.h> /* atoi */
10 #include "liblj/entry.h"
11 #include "liblj/getevents.h"
13 static void
14 lj_getevents_init(LJGetEvents *getevents,
15 LJUser *user, const char *usejournal,
16 void (*parse_result)(LJVerb*)) {
17 LJVerb *verb = (LJVerb*)getevents;
19 lj_verb_init(verb, user, "getevents", FALSE, parse_result);
20 if (usejournal)
21 lj_request_add(verb->request, "usejournal", usejournal);
22 lj_request_add(verb->request, "lineendings", "unix");
25 static void
26 single_parse_result(LJVerb *verb) {
27 LJGetEventsSingle *getevents = (LJGetEventsSingle*)verb;
28 getevents->entry = lj_entry_new_single_from_result(verb->result, NULL/*XXX*/);
31 LJGetEventsSingle*
32 lj_getevents_single_new(LJUser *user, const char *usejournal, int itemid) {
33 LJGetEventsSingle *getevents = g_new0(LJGetEventsSingle, 1);
34 lj_getevents_init((LJGetEvents*)getevents, user, usejournal,
35 single_parse_result);
36 lj_request_add(((LJVerb*)getevents)->request, "selecttype", "one");
37 lj_request_add_int(((LJVerb*)getevents)->request, "itemid", itemid);
38 return getevents;
41 void
42 lj_getevents_single_free(LJGetEventsSingle *getevents, gboolean includeentry) {
43 lj_verb_free_contents((LJVerb*)getevents);
44 if (includeentry && getevents->entry)
45 lj_entry_free(getevents->entry);
46 g_free(getevents);
49 static void
50 sync_parse_result(LJVerb *verb) {
51 LJGetEventsSync *getevents = (LJGetEventsSync*)verb;
53 getevents->entry_count = lj_result_get_int(verb->result, "events_count");
54 getevents->entries =
55 lj_entries_new_from_result(verb->result, getevents->entry_count,
56 &getevents->warnings);
59 LJGetEventsSync*
60 lj_getevents_sync_new(LJUser *user, const char *usejournal,
61 const char *lastsync) {
62 LJGetEventsSync *getevents = g_new0(LJGetEventsSync, 1);
63 lj_getevents_init((LJGetEvents*)getevents, user, usejournal,
64 sync_parse_result);
65 lj_request_add(((LJVerb*)getevents)->request, "selecttype", "syncitems");
66 if (lastsync)
67 lj_request_add(((LJVerb*)getevents)->request, "lastsync", lastsync);
68 return getevents;
71 void
72 lj_getevents_sync_free(LJGetEventsSync *getevents, gboolean includeentries) {
73 lj_verb_free_contents((LJVerb*)getevents);
74 g_free(getevents->entries);
75 g_free(getevents);
78 static void
79 recent_parse_result(LJVerb *verb) {
80 LJGetEventsSync *getevents = (LJGetEventsSync*)verb;
82 getevents->entry_count = lj_result_get_int(verb->result, "events_count");
83 getevents->entries =
84 lj_entries_new_from_result(verb->result, getevents->entry_count,
85 &getevents->warnings);
88 LJGetEventsRecent*
89 lj_getevents_recent_new(LJUser *user, const char *usejournal, int howmany,
90 const char *beforedate, gboolean summary, int truncate) {
91 LJGetEventsRecent *getevents = g_new0(LJGetEventsRecent, 1);
92 lj_getevents_init((LJGetEvents*)getevents, user, usejournal,
93 recent_parse_result);
94 lj_request_add(((LJVerb*)getevents)->request, "selecttype", "lastn");
95 lj_request_add_int(((LJVerb*)getevents)->request, "howmany", howmany);
96 if (beforedate)
97 lj_request_add(((LJVerb*)getevents)->request, "beforedate", beforedate);
98 if (summary) {
99 if (truncate)
100 lj_request_add_int(((LJVerb*)getevents)->request, "truncate", truncate);
101 lj_request_add_int(((LJVerb*)getevents)->request, "prefersubject", 1);
102 lj_request_add_int(((LJVerb*)getevents)->request, "noprops", 1);
104 return getevents;
107 void
108 lj_getevents_recent_free(LJGetEventsRecent *getevents, gboolean includeentries) {
109 int i;
110 if (includeentries) {
111 for (i = 0; i < getevents->entry_count; i++)
112 lj_entry_free(getevents->entries[i]);
114 lj_verb_free_contents((LJVerb*)getevents);
115 g_free(getevents->entries);
116 g_free(getevents);