diff --git a/config.h b/config.h index 007c084..a589a23 100644 --- a/config.h +++ b/config.h @@ -33,4 +33,17 @@ static char* const config_canonical_name = "RatFE"; */ static char* const config_instance_url = "https://desuposter.club/"; +/* + * Bool: experimental_lookup + * + * Uses experimental acct lookup (@user@domain) + * This allows for the new lookup feature, which can get + * information for local and federated accounts regardless if signed in. + * + * This feature is new and was introduced in the develop branch in 2022. + * Keep this disabled if running an older pleroma build, or because you just + * don't want it. + */ +static const int config_experimental_lookup = FALSE; + #endif // CONFIG_H diff --git a/src/account.c b/src/account.c index a72a0ad..4f1d590 100644 --- a/src/account.c +++ b/src/account.c @@ -22,15 +22,29 @@ #include "../config.h" #include "account.h" #include "easprintf.h" +#include "status.h" // Files #include "../static/index.chtml" #include "../static/account.chtml" -char* construct_account_page(struct mstdnt_account* acct, size_t* res_size) +char* construct_account_page(struct mstdnt_account* acct, + struct mstdnt_status* statuses, + size_t statuses_len, + size_t* res_size) { + int cleanup = 0; int result_size; + char* statuses_html; char* result; + + // Load statuses html + statuses_html = construct_statuses(statuses, statuses_len, NULL); + if (!statuses_html) + statuses_html = "Error in malloc!"; + else + cleanup = 1; + result_size = easprintf(&result, data_account_html, acct->header, acct->display_name, @@ -42,11 +56,13 @@ char* construct_account_page(struct mstdnt_account* acct, size_t* res_size) 0, "Followers", 0, - "Content"); + statuses_html); + if (result_size == -1) result = NULL; if (res_size) *res_size = result_size; + if (cleanup) free(statuses_html); return result; } @@ -55,15 +71,24 @@ void content_account(mastodont_t* api, char** data, size_t size) int cleanup = 0; char* account_page; struct mstdnt_account acct; - struct mstdnt_storage storage; + struct mstdnt_storage storage, status_storage; + struct mstdnt_status* statuses; + size_t status_len; + int lookup_type = config_experimental_lookup ? MSTDNT_LOOKUP_ACCT : MSTDNT_LOOKUP_ID; - if (mastodont_account(api, MSTDNT_LOOKUP_ACCT, data[0], - &acct, &storage, NULL)) - account_page = "Couldn't load account info"; - else + if (mastodont_account(api, lookup_type, data[0], + &acct, &storage, NULL) || + mastodont_account_statuses(api, acct.id, NULL, + &status_storage, &statuses, &status_len)) { + account_page = "Couldn't load account info"; + } + else { cleanup = 1; - account_page = construct_account_page(&acct, NULL); + account_page = construct_account_page(&acct, + statuses, + status_len, + NULL); if (!account_page) account_page = "Malloc error"; } @@ -79,5 +104,6 @@ void content_account(mastodont_t* api, char** data, size_t size) /* Cleanup */ mastodont_storage_cleanup(&storage); + mastodont_storage_cleanup(&status_storage); if (cleanup) free(account_page); } diff --git a/src/account.h b/src/account.h index a477f55..a78ab99 100644 --- a/src/account.h +++ b/src/account.h @@ -21,7 +21,10 @@ #include #include -char* construct_account_page(struct mstdnt_account* acct, size_t* res_size); +char* construct_account_page(struct mstdnt_account* acct, + struct mstdnt_status* statuses, + size_t statuses_len, + size_t* res_size); void content_account(mastodont_t* api, char** data, size_t data_size); #endif // ACCOUNT_H diff --git a/src/index.c b/src/index.c index 64f7729..3ea8f89 100644 --- a/src/index.c +++ b/src/index.c @@ -41,7 +41,7 @@ void content_index(mastodont_t* api) { /* Construct statuses into HTML */ status_format = construct_statuses(statuses, status_count, &statuses_html_count); - if (status_format == NULL) + if (!status_format) status_format = "Error in malloc!"; cleanup = 1; }