From 6ae4d8cd12fef69f5b41f29882697b94de9bb54d Mon Sep 17 00:00:00 2001 From: "me@ow.nekobit.net" Date: Mon, 21 Feb 2022 20:40:41 +0000 Subject: [PATCH] View status FossilOrigin-Name: 5f272da1e3bec03bb54e2ccbc6dc56459f6503a74b0f33b177239d6983ca45c0 --- src/main.c | 2 ++ src/status.c | 54 +++++++++++++++++++++++++++++++++++++++++++--------- src/status.h | 2 ++ 3 files changed, 49 insertions(+), 9 deletions(-) diff --git a/src/main.c b/src/main.c index 5cd72e8..fb91069 100644 --- a/src/main.c +++ b/src/main.c @@ -29,6 +29,7 @@ #include "local_config.h" #include "cookie.h" #include "query.h" +#include "status.h" int main(void) { @@ -58,6 +59,7 @@ int main(void) { "/config", content_config }, { "/login", content_login }, { "/@:", content_account }, + { "/status/:", content_status } }; handle_paths(&api, paths, sizeof(paths)/sizeof(paths[0])); diff --git a/src/status.c b/src/status.c index 7302180..8147fd4 100644 --- a/src/status.c +++ b/src/status.c @@ -18,6 +18,7 @@ #include #include +#include "base_page.h" #include "status.h" #include "easprintf.h" #include "query.h" @@ -73,6 +74,22 @@ int try_interact_status(mastodont_t* api) return 0; } +char* construct_status(struct mstdnt_status* status, int* size) +{ + char* stat_html; + size_t s = easprintf(&stat_html, data_status_html, + status->account.avatar, + status->account.display_name, /* Username */ + status->account.acct, /* Account */ + "Public", /* visibility */ + status->content, + status->reblogged ? "nobutton-active" : "", + status->id, + status->favourited ? "nobutton-active" : ""); + if (size) *size = s; + return stat_html; +} + char* construct_statuses(struct mstdnt_status* statuses, size_t size, size_t* ret_size) { char* stat_html, *result = NULL; @@ -80,15 +97,8 @@ char* construct_statuses(struct mstdnt_status* statuses, size_t size, size_t* re for (size_t i = 0; i < size; ++i) { - parse_size = easprintf(&stat_html, data_status_html, - statuses[i].account.avatar, - statuses[i].account.display_name, /* Username */ - statuses[i].account.acct, /* Account */ - "Public", /* visibility */ - statuses[i].content, - statuses[i].reblogged ? "nobutton-active" : "", - statuses[i].id, - statuses[i].favourited ? "nobutton-active" : ""); + stat_html = construct_status(statuses + i, &parse_size); + if (parse_size == -1) /* Malloc error */ { if (result) free(result); @@ -118,3 +128,29 @@ char* construct_statuses(struct mstdnt_status* statuses, size_t size, size_t* re return result; } +void content_status(mastodont_t* api, char** data, size_t data_size) +{ + struct mstdnt_storage storage; + struct mstdnt_status* statuses_before, *statuses_after; + size_t stat_before_len, stat_after_len; + char* before_html = NULL, *after_html = NULL; + + mastodont_status_context(api, data[0], &storage, &statuses_before, &statuses_after, + &stat_before_len, &stat_after_len); + before_html = construct_statuses(statuses_before, stat_before_len, NULL); +// after_html = construct_statuses(statuses_after, stat_after_len, NULL); + + struct base_page b = { + .locale = L10N_EN_US, + .content = before_html, + .sidebar_right = NULL + }; + + // Output + render_base_page(&b); + + // Cleanup + if (before_html) free(before_html); + if (after_html) free(after_html); + mastodont_storage_cleanup(&storage); +} diff --git a/src/status.h b/src/status.h index 7d93200..3f2dab0 100644 --- a/src/status.h +++ b/src/status.h @@ -22,6 +22,8 @@ int try_post_status(mastodont_t* api); int try_interact_status(mastodont_t* api); +char* construct_status(struct mstdnt_status* status, int* size); char* construct_statuses(struct mstdnt_status* statuses, size_t size, size_t* ret_size); +void content_status(mastodont_t* api, char** data, size_t data_size); #endif // STATUS_H