diff --git a/html.c b/html.c index 4109929..c56f4cb 100644 --- a/html.c +++ b/html.c @@ -2560,35 +2560,48 @@ int html_get_handler(const xs_dict *req, const char *q_path, status = 401; } else { - double t = history_mtime(&snac, "timeline.html_"); + char *q = xs_dict_get(q_vars, "q"); - /* if enabled by admin, return a cached page if its timestamp is: - a) newer than the timeline timestamp - b) newer than the start time of the server - */ - if (cache && t > timeline_mtime(&snac) && t > p_state->srv_start_time) { - snac_debug(&snac, 1, xs_fmt("serving cached timeline")); - - status = history_get(&snac, "timeline.html_", body, b_size, - xs_dict_get(req, "if-none-match"), etag); - } - else { - snac_debug(&snac, 1, xs_fmt("building timeline")); - - xs *list = timeline_list(&snac, "private", skip, show); - xs *next = timeline_list(&snac, "private", skip + show, 1); - - xs *pins = pinned_list(&snac); - pins = xs_list_cat(pins, list); - - *body = html_timeline(&snac, pins, 0, skip, show, - xs_list_len(next), NULL, "/admin", 1); + if (q && *q) { + /* search by content */ + int to = 0; + xs *tl = content_search(&snac, q, 1, 0, show, &to); + *body = html_timeline(&snac, tl, 0, 0, show, 0, NULL, "/admin", 1); *b_size = strlen(*body); status = 200; + } + else { + double t = history_mtime(&snac, "timeline.html_"); - if (save) - history_add(&snac, "timeline.html_", *body, *b_size, etag); + /* if enabled by admin, return a cached page if its timestamp is: + a) newer than the timeline timestamp + b) newer than the start time of the server + */ + if (cache && t > timeline_mtime(&snac) && t > p_state->srv_start_time) { + snac_debug(&snac, 1, xs_fmt("serving cached timeline")); + + status = history_get(&snac, "timeline.html_", body, b_size, + xs_dict_get(req, "if-none-match"), etag); + } + else { + snac_debug(&snac, 1, xs_fmt("building timeline")); + + xs *list = timeline_list(&snac, "private", skip, show); + xs *next = timeline_list(&snac, "private", skip + show, 1); + + xs *pins = pinned_list(&snac); + pins = xs_list_cat(pins, list); + + *body = html_timeline(&snac, pins, 0, skip, show, + xs_list_len(next), NULL, "/admin", 1); + + *b_size = strlen(*body); + status = 200; + + if (save) + history_add(&snac, "timeline.html_", *body, *b_size, etag); + } } } }