mirror of
https://codeberg.org/grunfink/snac2.git
synced 2024-11-25 14:35:04 +00:00
Timeline is cached.
This commit is contained in:
parent
4176799296
commit
3d544233a6
3 changed files with 77 additions and 5 deletions
56
data.c
56
data.c
|
@ -178,7 +178,7 @@ float mtime(char *fn)
|
|||
struct stat st;
|
||||
float r = 0.0;
|
||||
|
||||
if (stat(fn, &st) != -1)
|
||||
if (fn && stat(fn, &st) != -1)
|
||||
r = (float)st.st_mtim.tv_sec;
|
||||
|
||||
return r;
|
||||
|
@ -275,6 +275,13 @@ d_char *follower_list(snac *snac)
|
|||
}
|
||||
|
||||
|
||||
float timeline_mtime(snac *snac)
|
||||
{
|
||||
xs *fn = xs_fmt("%s/timeline", snac->basedir);
|
||||
return mtime(fn);
|
||||
}
|
||||
|
||||
|
||||
d_char *_timeline_find_fn(snac *snac, char *id)
|
||||
/* returns the file name of a timeline entry by its id */
|
||||
{
|
||||
|
@ -831,6 +838,53 @@ int static_get(snac *snac, char *id, d_char **data, int *size)
|
|||
}
|
||||
|
||||
|
||||
d_char *_history_fn(snac *snac, char *id)
|
||||
/* gets the filename for the history */
|
||||
{
|
||||
return xs_fmt("%s/history/%s", snac->basedir, id);
|
||||
}
|
||||
|
||||
|
||||
float history_mtime(snac *snac, char * id)
|
||||
{
|
||||
float t = 0.0;
|
||||
xs *fn = _history_fn(snac, id);
|
||||
|
||||
if (fn != NULL)
|
||||
t = mtime(fn);
|
||||
|
||||
return t;
|
||||
}
|
||||
|
||||
|
||||
void history_add(snac *snac, char *id, char *content, int size)
|
||||
/* adds something to the history */
|
||||
{
|
||||
xs *fn = _history_fn(snac, id);
|
||||
FILE *f;
|
||||
|
||||
if ((f = fopen(fn, "w")) != NULL) {
|
||||
fwrite(content, size, 1, f);
|
||||
fclose(f);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
d_char *history_get(snac *snac, char *id)
|
||||
{
|
||||
d_char *content = NULL;
|
||||
xs *fn = _history_fn(snac, id);
|
||||
FILE *f;
|
||||
|
||||
if ((f = fopen(fn, "r")) != NULL) {
|
||||
content = xs_readall(f);
|
||||
fclose(f);
|
||||
}
|
||||
|
||||
return content;
|
||||
}
|
||||
|
||||
|
||||
void enqueue_input(snac *snac, char *msg, char *req, int retries)
|
||||
/* enqueues an input message */
|
||||
{
|
||||
|
|
13
html.c
13
html.c
|
@ -713,11 +713,24 @@ int html_get_handler(d_char *req, char *q_path, char **body, int *b_size, char *
|
|||
if (!login(&snac, req))
|
||||
status = 401;
|
||||
else {
|
||||
if (history_mtime(&snac, "_timeline.html") > timeline_mtime(&snac)) {
|
||||
snac_debug(&snac, 1, xs_fmt("serving cached timeline"));
|
||||
|
||||
*body = history_get(&snac, "_timeline.html");
|
||||
*b_size = strlen(*body);
|
||||
status = 200;
|
||||
}
|
||||
else {
|
||||
snac_debug(&snac, 1, xs_fmt("building timeline"));
|
||||
|
||||
xs *list = timeline_list(&snac, 0xfffffff);
|
||||
|
||||
*body = html_timeline(&snac, list, 0);
|
||||
*b_size = strlen(*body);
|
||||
status = 200;
|
||||
|
||||
history_add(&snac, "_timeline.html", *body, *b_size);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
5
snac.h
5
snac.h
|
@ -60,6 +60,7 @@ int follower_del(snac *snac, char *actor);
|
|||
int follower_check(snac *snac, char *actor);
|
||||
d_char *follower_list(snac *snac);
|
||||
|
||||
float timeline_mtime(snac *snac);
|
||||
int timeline_here(snac *snac, char *id);
|
||||
d_char *_timeline_find_fn(snac *snac, char *id);
|
||||
d_char *timeline_find(snac *snac, char *id);
|
||||
|
@ -84,6 +85,10 @@ int actor_get(snac *snac, char *actor, d_char **data);
|
|||
|
||||
int static_get(snac *snac, char *id, d_char **data, int *size);
|
||||
|
||||
float history_mtime(snac *snac, char *id);
|
||||
void history_add(snac *snac, char *id, char *content, int size);
|
||||
d_char *history_get(snac *snac, char *id);
|
||||
|
||||
void enqueue_input(snac *snac, char *msg, char *req, int retries);
|
||||
void enqueue_output(snac *snac, char *msg, char *actor, int retries);
|
||||
|
||||
|
|
Loading…
Reference in a new issue