Create sidebar

FossilOrigin-Name: 867d2d317849fbb7cba4005a76dce17822afbd603e8205e2da705381299d40bc
This commit is contained in:
nekobit 2022-05-16 03:30:37 +00:00
parent 9a2baf0430
commit b677ba4b52
5 changed files with 69 additions and 3 deletions

View file

@ -117,6 +117,8 @@ $(PAGES_DIR)/emoji.chtml: $(PAGES_DIR)/emoji.html
# Login panel
$(PAGES_DIR)/quick_login.chtml: $(PAGES_DIR)/quick_login.html
./filec $< data_quick_login_html > $@
$(PAGES_DIR)/account_sidebar.chtml: $(PAGES_DIR)/account_sidebar.html
./filec $< data_account_sidebar_html > $@
$(MASTODONT_DIR):
fossil clone $(MASTODONT_URL) || true

View file

@ -37,6 +37,7 @@
#include "../static/favourites_page.chtml"
#include "../static/bookmarks_page.chtml"
#include "../static/account_stub.chtml"
#include "../static/account_sidebar.chtml"
#define FOLLOWS_YOU_HTML "<span class=\"acct-badge\">%s</span>"
@ -60,6 +61,25 @@ char* load_account_info(struct mstdnt_account* acct,
return acct_info_html;
}
char* construct_account_sidebar(struct mstdnt_account* acct, size_t* size)
{
char* acct_sidebar_html;
size_t s;
s = easprintf(&acct_sidebar_html, data_account_sidebar_html,
acct->avatar,
acct->display_name,
L10N[L10N_EN_US][L10N_TAB_STATUSES],
acct->statuses_count,
L10N[L10N_EN_US][L10N_TAB_FOLLOWING],
acct->following_count,
L10N[L10N_EN_US][L10N_TAB_FOLLOWERS],
acct->followers_count);
if (size) *size = s;
return acct_sidebar_html;
}
static char* account_statuses_cb(struct session* ssn,
mastodont_t* api,
struct mstdnt_account* acct,

View file

@ -53,6 +53,9 @@ struct account_page
struct mstdnt_relationship* relationship;
};
char* construct_account_sidebar(struct mstdnt_account* acct, size_t* size);
char* construct_account(mastodont_t* api,
struct mstdnt_account* account,
uint8_t flags,

View file

@ -26,6 +26,7 @@
#include "string_helpers.h"
#include "../config.h"
#include "local_config_set.h"
#include "account.h"
// Files
#include "../static/index.chtml"
@ -39,8 +40,12 @@ void render_base_page(struct base_page* page, struct session* ssn, mastodont_t*
enum l10n_locale locale = page->locale;
char* login_string = "<a href=\"login\" id=\"login-header\">Login / Register</a>";
char* background_url_css = NULL;
char* sidebar_str = NULL;
// Sidebar
char* sidebar_str,
* main_sidebar_str = NULL,
* account_sidebar_str = NULL;
// Mastodont, used for notifications sidebar
struct mstdnt_account acct = { 0 };
struct mstdnt_storage storage = { 0 };
struct mstdnt_notification* notifs = NULL;
size_t notifs_len = 0;
@ -58,6 +63,13 @@ void render_base_page(struct base_page* page, struct session* ssn, mastodont_t*
// If user is logged in
if (ssn->cookies.logged_in && ssn->cookies.access_token)
{
if (mastodont_verify_credentials(api, &acct, &storage) == 0)
{
account_sidebar_str = construct_account_sidebar(&acct, NULL);
}
mstdnt_cleanup_account(&acct);
mastodont_storage_cleanup(&storage); // reuse it later
// Get / Show notifications on sidebar
struct mstdnt_get_notifications_args args = {
.exclude_types = 0,
@ -74,7 +86,7 @@ void render_base_page(struct base_page* page, struct session* ssn, mastodont_t*
if (mastodont_get_notifications(api, &args, &storage, &notifs, &notifs_len) == 0)
{
sidebar_str = construct_notifications_compact(ssn, api, notifs, notifs_len, NULL);
main_sidebar_str = construct_notifications_compact(ssn, api, notifs, notifs_len, NULL);
}
mstdnt_cleanup_notifications(notifs, notifs_len);
@ -82,13 +94,18 @@ void render_base_page(struct base_page* page, struct session* ssn, mastodont_t*
}
else {
// Construct small login page
easprintf(&sidebar_str, data_quick_login_html,
easprintf(&main_sidebar_str, data_quick_login_html,
config_url_prefix,
L10N[L10N_EN_US][L10N_USERNAME],
L10N[L10N_EN_US][L10N_PASSWORD],
L10N[L10N_EN_US][L10N_LOGIN_BTN]);
}
// Combine into sidebar
easprintf(&sidebar_str, "%s%s",
account_sidebar_str ? account_sidebar_str : "",
main_sidebar_str ? main_sidebar_str : "");
char* data;
int len = easprintf(&data, data_index_html,
L10N[locale][L10N_APP_NAME],
@ -148,5 +165,7 @@ void render_base_page(struct base_page* page, struct session* ssn, mastodont_t*
free(data);
cleanup:
if (sidebar_str) free(sidebar_str);
if (main_sidebar_str) free(main_sidebar_str);
if (account_sidebar_str) free(account_sidebar_str);
if (background_url_css) free(background_url_css);
}

View file

@ -0,0 +1,22 @@
<div class="account-sidebar">
<div class="acct-info">
<img src="%s" class="acct-pfp">
<span class="username">%s</span>
</div>
<table class="acct-stats">
<tr>
<td class="header-btn btn">
<span class="btn-header">%s</span>
<span class="btn-content">%d</span>
</td>
<td class="header-btn btn">
<span class="btn-header">%s</span>
<span class="btn-content">%d</span>
</td>
<td class="header-btn btn">
<span class="btn-header">%s</span>
<span class="btn-content">%d</span>
</td>
</tr>
</table>
</div>