mirror of
https://codeberg.org/grunfink/snac2.git
synced 2024-11-25 14:35:04 +00:00
New function static_get().
This commit is contained in:
parent
1d19464a48
commit
a636cf8b25
5 changed files with 77 additions and 5 deletions
25
data.c
25
data.c
|
@ -801,6 +801,31 @@ int actor_get(snac *snac, char *actor, d_char **data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
d_char *_static_fn(snac *snac, char *id)
|
||||||
|
/* gets the filename for a static file */
|
||||||
|
{
|
||||||
|
return xs_fmt("%s/static/%s", snac->basedir, id);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int static_get(snac *snac, char *id, d_char **data, int *size)
|
||||||
|
/* returns static content */
|
||||||
|
{
|
||||||
|
xs *fn = _static_fn(snac, id);
|
||||||
|
FILE *f;
|
||||||
|
int status = 404;
|
||||||
|
|
||||||
|
*size = 0xfffffff;
|
||||||
|
|
||||||
|
if ((f = fopen(fn, "rb")) != NULL) {
|
||||||
|
*data = xs_read(f, size);
|
||||||
|
status = 200;
|
||||||
|
}
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void enqueue_input(snac *snac, char *msg, char *req)
|
void enqueue_input(snac *snac, char *msg, char *req)
|
||||||
/* enqueues an input message */
|
/* enqueues an input message */
|
||||||
{
|
{
|
||||||
|
|
42
html.c
42
html.c
|
@ -207,12 +207,52 @@ d_char *html_msg_icon(snac *snac, d_char *s, char *msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
d_char *html_user_header(snac *snac, d_char *s)
|
||||||
|
/* creates the HTML header */
|
||||||
|
{
|
||||||
|
char *p, *v;
|
||||||
|
|
||||||
|
s = xs_str_cat(s, "<!DOCTYPE html>\n<html>\n<head>\n");
|
||||||
|
s = xs_str_cat(s, "<meta name=\"viewport\" "
|
||||||
|
"content=\"width=device-width, initial-scale=1\"/>\n");
|
||||||
|
s = xs_str_cat(s, "<meta name=\"generator\" "
|
||||||
|
"content=\"" USER_AGENT "\"/>\n");
|
||||||
|
|
||||||
|
/* add server CSS */
|
||||||
|
p = xs_dict_get(srv_config, "cssurls");
|
||||||
|
while (xs_list_iter(&p, &v)) {
|
||||||
|
xs *s1 = xs_fmt("<link rel=\"stylesheet\" type=\"text/css\" href=\"%s\"/>\n", v);
|
||||||
|
s = xs_str_cat(s, s1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* add the user CSS */
|
||||||
|
{
|
||||||
|
xs *css = NULL;
|
||||||
|
int size;
|
||||||
|
|
||||||
|
if (valid_status(static_get(snac, "style.css", &css, &size))) {
|
||||||
|
xs *s1 = xs_fmt("<style>%s</style>\n", css);
|
||||||
|
s = xs_str_cat(s, s1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
xs *s1 = xs_fmt("<title>%s</title>\n", xs_dict_get(snac->config, "name"));
|
||||||
|
s = xs_str_cat(s, s1);
|
||||||
|
}
|
||||||
|
|
||||||
|
s = xs_str_cat(s, "</head>\n<body>\n");
|
||||||
|
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
d_char *html_timeline(snac *snac, char *list, int local)
|
d_char *html_timeline(snac *snac, char *list, int local)
|
||||||
/* returns the HTML for the timeline */
|
/* returns the HTML for the timeline */
|
||||||
{
|
{
|
||||||
d_char *s = xs_str_new(NULL);
|
d_char *s = xs_str_new(NULL);
|
||||||
|
|
||||||
s = xs_str_cat(s, "<!DOCTYPE html>\n<html>\n");
|
s = html_user_header(snac, s);
|
||||||
|
|
||||||
s = xs_str_cat(s, "<h1>HI</h1>\n");
|
s = xs_str_cat(s, "<h1>HI</h1>\n");
|
||||||
|
|
||||||
|
|
2
snac.h
2
snac.h
|
@ -78,6 +78,8 @@ int is_muted(snac *snac, char *actor);
|
||||||
int actor_add(snac *snac, char *actor, char *msg);
|
int actor_add(snac *snac, char *actor, char *msg);
|
||||||
int actor_get(snac *snac, char *actor, d_char **data);
|
int actor_get(snac *snac, char *actor, d_char **data);
|
||||||
|
|
||||||
|
int static_get(snac *snac, char *id, d_char **data, int *size);
|
||||||
|
|
||||||
void enqueue_input(snac *snac, char *msg, char *req);
|
void enqueue_input(snac *snac, char *msg, char *req);
|
||||||
void enqueue_output(snac *snac, char *msg, char *actor, int retries);
|
void enqueue_output(snac *snac, char *msg, char *actor, int retries);
|
||||||
|
|
||||||
|
|
|
@ -128,7 +128,7 @@ d_char *xs_httpd_request(FILE *f, d_char **payload, int *p_size)
|
||||||
if ((v = xs_dict_get(req, "content-length")) != NULL) {
|
if ((v = xs_dict_get(req, "content-length")) != NULL) {
|
||||||
/* if it has a payload, load it */
|
/* if it has a payload, load it */
|
||||||
*p_size = atoi(v);
|
*p_size = atoi(v);
|
||||||
*payload = xs_read(f, *p_size);
|
*payload = xs_read(f, p_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* is the payload form urlencoded variables? */
|
/* is the payload form urlencoded variables? */
|
||||||
|
|
11
xs_io.h
11
xs_io.h
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
d_char *xs_readall(FILE *f);
|
d_char *xs_readall(FILE *f);
|
||||||
d_char *xs_readline(FILE *f);
|
d_char *xs_readline(FILE *f);
|
||||||
d_char *xs_read(FILE *f, int size);
|
d_char *xs_read(FILE *f, int *size);
|
||||||
|
|
||||||
|
|
||||||
#ifdef XS_IMPLEMENTATION
|
#ifdef XS_IMPLEMENTATION
|
||||||
|
@ -56,16 +56,18 @@ d_char *xs_readline(FILE *f)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
d_char *xs_read(FILE *f, int size)
|
d_char *xs_read(FILE *f, int *sz)
|
||||||
/* reads up to size bytes from f */
|
/* reads up to size bytes from f */
|
||||||
{
|
{
|
||||||
d_char *s;
|
d_char *s;
|
||||||
|
int size = *sz;
|
||||||
|
int rdsz = 0;
|
||||||
|
|
||||||
errno = 0;
|
errno = 0;
|
||||||
|
|
||||||
s = xs_str_new(NULL);
|
s = xs_str_new(NULL);
|
||||||
|
|
||||||
while (size != 0 && !feof(f)) {
|
while (size > 0 && !feof(f)) {
|
||||||
char tmp[2048];
|
char tmp[2048];
|
||||||
int n, r;
|
int n, r;
|
||||||
|
|
||||||
|
@ -76,8 +78,11 @@ d_char *xs_read(FILE *f, int size)
|
||||||
s = xs_append_m(s, tmp, r);
|
s = xs_append_m(s, tmp, r);
|
||||||
|
|
||||||
size -= r;
|
size -= r;
|
||||||
|
rdsz += r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*sz = rdsz;
|
||||||
|
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue