Account page fixing
FossilOrigin-Name: 630c28e3227bb7e3d233166bff7444f011c6e0ed37c4281ed3e194b4a535ad83
This commit is contained in:
parent
04d4dac90e
commit
5d0a0f0ed5
1 changed files with 134 additions and 67 deletions
201
src/account.c
201
src/account.c
|
@ -43,14 +43,15 @@ struct account_args
|
|||
uint8_t flags;
|
||||
};
|
||||
|
||||
static char* accounts_page(HV* session_hv,
|
||||
mastodont_t* api,
|
||||
struct mstdnt_account* acct,
|
||||
struct mstdnt_relationship* rel,
|
||||
char* header,
|
||||
struct mstdnt_storage* storage,
|
||||
struct mstdnt_account* accts,
|
||||
size_t accts_len)
|
||||
static char*
|
||||
accounts_page(HV* session_hv,
|
||||
mastodont_t* api,
|
||||
struct mstdnt_account* acct,
|
||||
struct mstdnt_relationship* rel,
|
||||
char* header,
|
||||
struct mstdnt_storage* storage,
|
||||
struct mstdnt_account* accts,
|
||||
size_t accts_len)
|
||||
{
|
||||
char* output;
|
||||
|
||||
|
@ -76,17 +77,16 @@ static char* accounts_page(HV* session_hv,
|
|||
|
||||
output = PERL_GET_STACK_EXIT;
|
||||
|
||||
mstdnt_storage_cleanup(storage);
|
||||
mstdnt_cleanup_accounts(accts, accts_len);
|
||||
return output;
|
||||
}
|
||||
|
||||
static char* account_followers_cb(HV* session_hv,
|
||||
struct session* ssn,
|
||||
mastodont_t* api,
|
||||
struct mstdnt_account* acct,
|
||||
struct mstdnt_relationship* rel,
|
||||
void* _args)
|
||||
static char*
|
||||
account_followers_cb(HV* session_hv,
|
||||
struct session* ssn,
|
||||
mastodont_t* api,
|
||||
struct mstdnt_account* acct,
|
||||
struct mstdnt_relationship* rel,
|
||||
void* _args)
|
||||
{
|
||||
struct mstdnt_args m_args;
|
||||
set_mstdnt_args(&m_args, ssn);
|
||||
|
@ -109,7 +109,8 @@ static char* account_followers_cb(HV* session_hv,
|
|||
return accounts_page(session_hv, api, acct, rel, NULL, &storage, accounts, accts_len);
|
||||
}
|
||||
|
||||
static char* account_following_cb(HV* session_hv,
|
||||
static char*
|
||||
account_following_cb(HV* session_hv,
|
||||
struct session* ssn,
|
||||
mastodont_t* api,
|
||||
struct mstdnt_account* acct,
|
||||
|
@ -137,7 +138,8 @@ static char* account_following_cb(HV* session_hv,
|
|||
return accounts_page(session_hv, api, acct, rel, NULL, &storage, accounts, accts_len);
|
||||
}
|
||||
|
||||
static char* account_statuses_cb(HV* session_hv,
|
||||
static char*
|
||||
account_statuses_cb(HV* session_hv,
|
||||
struct session* ssn,
|
||||
mastodont_t* api,
|
||||
struct mstdnt_account* acct,
|
||||
|
@ -171,13 +173,11 @@ static char* account_statuses_cb(HV* session_hv,
|
|||
|
||||
result = PERL_GET_STACK_EXIT;
|
||||
|
||||
mstdnt_storage_cleanup(&storage);
|
||||
mstdnt_cleanup_statuses(statuses, statuses_len);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static char* account_scrobbles_cb(HV* session_hv,
|
||||
static char*
|
||||
account_scrobbles_cb(HV* session_hv,
|
||||
struct session* ssn,
|
||||
mastodont_t* api,
|
||||
struct mstdnt_account* acct,
|
||||
|
@ -216,18 +216,20 @@ static char* account_scrobbles_cb(HV* session_hv,
|
|||
|
||||
result = PERL_GET_STACK_EXIT;
|
||||
|
||||
mstdnt_storage_cleanup(&storage);
|
||||
return result;
|
||||
}
|
||||
|
||||
// TODO
|
||||
void get_account_info(mastodont_t* api, struct session* ssn)
|
||||
{
|
||||
#if 0
|
||||
struct mstdnt_args m_args;
|
||||
set_mstdnt_args(&m_args, ssn);
|
||||
if (ssn->cookies.access_token.is_set && mstdnt_verify_credentials(api, &m_args, NULL, NULL, &(ssn->acct), &(ssn->acct_storage)) == 0)
|
||||
{
|
||||
ssn->logged_in = 1;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -279,11 +281,8 @@ static void fetch_account_page(FCGX_Request* req,
|
|||
render_base_page(&b, req, ssn, api);
|
||||
|
||||
/* Output */
|
||||
mstdnt_cleanup_account(&acct);
|
||||
mstdnt_cleanup_relationships(relationships);
|
||||
mstdnt_storage_cleanup(&storage);
|
||||
mstdnt_storage_cleanup(&relations_storage);
|
||||
tb_free(data);
|
||||
finish_free_request(req);
|
||||
}
|
||||
|
||||
int content_account_statuses(PATH_ARGS)
|
||||
|
@ -358,7 +357,20 @@ int content_account_media(PATH_ARGS)
|
|||
fetch_account_page(req, ssn, api, data[0], &args, ACCT_TAB_MEDIA, account_statuses_cb);
|
||||
}
|
||||
|
||||
int content_account_action(PATH_ARGS)
|
||||
static void
|
||||
request_cb_content_account_action(mstdnt_request_cb_data* cb_data, void* tbargs)
|
||||
{
|
||||
mstdnt_relationship* rel = MSTDNT_CB_DATA(cb_data);
|
||||
DESTRUCT_TB_ARGS(tbargs);
|
||||
|
||||
redirect(req, REDIRECT_303, referer);
|
||||
|
||||
finish_free_request(req);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
content_account_action(PATH_ARGS)
|
||||
{
|
||||
char* referer = GET_ENV("HTTP_REFERER", req);
|
||||
struct mstdnt_storage storage = { 0 };
|
||||
|
@ -367,32 +379,48 @@ int content_account_action(PATH_ARGS)
|
|||
struct mstdnt_relationship acct = { 0 };
|
||||
|
||||
if (strcmp(data[1], "follow") == 0)
|
||||
mstdnt_follow_account(api, &m_args, NULL, NULL, data[0], &storage, &acct);
|
||||
mstdnt_follow_account(api, &m_args,
|
||||
request_cb_content_account_action, cb_args, data[0]);
|
||||
else if (strcmp(data[1], "unfollow") == 0)
|
||||
mstdnt_unfollow_account(api, &m_args, NULL, NULL, data[0], &storage, &acct);
|
||||
mstdnt_unfollow_account(api, &m_args,
|
||||
request_cb_content_account_action, cb_args, data[0]);
|
||||
else if (strcmp(data[1], "mute") == 0)
|
||||
mstdnt_mute_account(api, &m_args, NULL, NULL, data[0], &storage, &acct);
|
||||
mstdnt_mute_account(api, &m_args,
|
||||
request_cb_content_account_action, cb_args, data[0]);
|
||||
else if (strcmp(data[1], "unmute") == 0)
|
||||
mstdnt_unmute_account(api, &m_args, NULL, NULL, data[0], &storage, &acct);
|
||||
mstdnt_unmute_account(api, &m_args,
|
||||
request_cb_content_account_action, cb_args, data[0]);
|
||||
else if (strcmp(data[1], "block") == 0)
|
||||
mstdnt_block_account(api, &m_args, NULL, NULL, data[0], &storage, &acct);
|
||||
mstdnt_block_account(api, &m_args,
|
||||
request_cb_content_account_action, cb_args, data[0]);
|
||||
else if (strcmp(data[1], "unblock") == 0)
|
||||
mstdnt_unblock_account(api, &m_args, NULL, NULL, data[0], &storage, &acct);
|
||||
mstdnt_unblock_account(api, &m_args,
|
||||
request_cb_content_account_action, cb_args, data[0]);
|
||||
else if (strcmp(data[1], "subscribe") == 0)
|
||||
mstdnt_subscribe_account(api, &m_args, NULL, NULL, data[0], &storage, &acct);
|
||||
mstdnt_subscribe_account(api, &m_args,
|
||||
request_cb_content_account_action, cb_args, data[0]);
|
||||
else if (strcmp(data[1], "unsubscribe") == 0)
|
||||
mstdnt_unsubscribe_account(api, &m_args, NULL, NULL, data[0], &storage, &acct);
|
||||
mstdnt_unsubscribe_account(api, &m_args,
|
||||
request_cb_content_account_action, cb_args, data[0]);
|
||||
|
||||
mstdnt_storage_cleanup(&storage);
|
||||
}
|
||||
|
||||
redirect(req, REDIRECT_303, referer);
|
||||
static void
|
||||
request_cb_content_bookmarks(mstdnt_request_cb_data* cb_data, void* tbargs)
|
||||
{
|
||||
struct mstdnt_statuses* statuses = MSTDNT_CB_DATA(cb_data);
|
||||
DESTRUCT_TB_ARGS(tbargs);
|
||||
|
||||
content_timeline(req, ssn, api, &storage,
|
||||
statuses->statuses, statuses->len,
|
||||
BASE_CAT_BOOKMARKS, "Bookmarks", 0, 1);
|
||||
|
||||
finish_free_request(req);
|
||||
}
|
||||
|
||||
int content_account_bookmarks(PATH_ARGS)
|
||||
{
|
||||
size_t statuses_len = 0;
|
||||
struct mstdnt_status* statuses = NULL;
|
||||
struct mstdnt_storage storage = { 0 };
|
||||
struct mstdnt_bookmarks_args args = {
|
||||
.max_id = keystr(ssn->post.max_id),
|
||||
.since_id = NULL,
|
||||
|
@ -402,13 +430,20 @@ int content_account_bookmarks(PATH_ARGS)
|
|||
struct mstdnt_args m_args;
|
||||
set_mstdnt_args(&m_args, ssn);
|
||||
|
||||
mstdnt_get_bookmarks(api, &m_args, NULL, NULL, &args, &storage, &statuses, &statuses_len);
|
||||
struct request_args* cb_args =
|
||||
request_args_create(req, ssn, api, NULL);
|
||||
|
||||
return mstdnt_get_bookmarks(api,
|
||||
&m_args,
|
||||
request_cb_content_bookmarks,
|
||||
cb_args,
|
||||
args);
|
||||
|
||||
content_timeline(req, ssn, api, &storage, statuses, statuses_len, BASE_CAT_BOOKMARKS, "Bookmarks", 0, 1);
|
||||
}
|
||||
|
||||
int content_account_blocked(PATH_ARGS)
|
||||
{
|
||||
#if 0
|
||||
struct mstdnt_account_args args = {
|
||||
.max_id = keystr(ssn->post.max_id),
|
||||
.since_id = NULL,
|
||||
|
@ -437,10 +472,32 @@ int content_account_blocked(PATH_ARGS)
|
|||
|
||||
render_base_page(&b, req, ssn, api);
|
||||
tb_free(result);
|
||||
#endif
|
||||
}
|
||||
|
||||
// Callback: content_account_favourites
|
||||
static void
|
||||
request_cb_content_mutes(mstdnt_request_cb_data* cb_data, void* tbargs)
|
||||
{
|
||||
#if 0
|
||||
struct mstdnt_statuses* statuses = MSTDNT_CB_DATA(cb_data);
|
||||
DESTRUCT_TB_ARGS(tbargs);
|
||||
|
||||
HV* session_hv = perlify_session(ssn);
|
||||
accounts_page(session_hv,
|
||||
ssn,
|
||||
api,
|
||||
&storage,
|
||||
statuses->statuses, statuses->len,
|
||||
BASE_CAT_BOOKMARKS, "Favorites", 0, 1);
|
||||
|
||||
finish_free_request(req);
|
||||
#endif
|
||||
}
|
||||
|
||||
int content_account_muted(PATH_ARGS)
|
||||
{
|
||||
#if 0
|
||||
struct mstdnt_account_args args = {
|
||||
.max_id = keystr(ssn->post.max_id),
|
||||
.since_id = NULL,
|
||||
|
@ -449,49 +506,58 @@ int content_account_muted(PATH_ARGS)
|
|||
.limit = 20,
|
||||
.with_relationships = 0,
|
||||
};
|
||||
struct mstdnt_storage storage = { 0 };
|
||||
struct mstdnt_account* accts = NULL;
|
||||
size_t accts_len = 0;
|
||||
struct mstdnt_args m_args;
|
||||
set_mstdnt_args(&m_args, ssn);
|
||||
|
||||
mstdnt_get_mutes(api, &m_args, NULL, NULL, &args, &storage, &accts, &accts_len);
|
||||
|
||||
HV* session_hv = perlify_session(ssn);
|
||||
char* result = accounts_page(session_hv, api, NULL, NULL, "Muted users", &storage, accts, accts_len);
|
||||
|
||||
struct base_page b = {
|
||||
.category = BASE_CAT_NONE,
|
||||
.content = result,
|
||||
.session = session_hv,
|
||||
.sidebar_left = NULL
|
||||
};
|
||||
|
||||
render_base_page(&b, req, ssn, api);
|
||||
tb_free(result);
|
||||
struct request_args* cb_args =
|
||||
request_args_create(req, ssn, api, NULL);
|
||||
|
||||
mstdnt_get_mutes(api, &m_args,
|
||||
request_cb_content_account_muted,
|
||||
cb_args, args);
|
||||
#endif
|
||||
}
|
||||
|
||||
int content_account_favourites(PATH_ARGS)
|
||||
// Callback: content_account_favourites
|
||||
static void
|
||||
request_cb_content_favorites(mstdnt_request_cb_data* cb_data, void* tbargs)
|
||||
{
|
||||
struct mstdnt_statuses* statuses = MSTDNT_CB_DATA(cb_data);
|
||||
DESTRUCT_TB_ARGS(tbargs);
|
||||
|
||||
content_timeline(req, ssn, api, &storage,
|
||||
statuses->statuses, statuses->len,
|
||||
BASE_CAT_BOOKMARKS, "Favorites", 0, 1);
|
||||
|
||||
finish_free_request(req);
|
||||
}
|
||||
|
||||
int
|
||||
content_account_favourites(PATH_ARGS)
|
||||
{
|
||||
struct mstdnt_args m_args;
|
||||
set_mstdnt_args(&m_args, ssn);
|
||||
size_t statuses_len = 0;
|
||||
struct mstdnt_status* statuses = NULL;
|
||||
struct mstdnt_storage storage = { 0 };
|
||||
|
||||
struct mstdnt_favourites_args args = {
|
||||
.min_id = keystr(ssn->post.min_id),
|
||||
.limit = 20,
|
||||
};
|
||||
|
||||
mstdnt_get_favourites(api, &m_args, NULL, NULL, &args, &storage, &statuses, &statuses_len);
|
||||
struct request_args* cb_args =
|
||||
request_args_create(req, ssn, api, NULL);
|
||||
|
||||
return mstdnt_get_favourites(api,
|
||||
&m_args,
|
||||
request_cb_content_favorites,
|
||||
cb_args,
|
||||
args);
|
||||
|
||||
content_timeline(req, ssn, api, &storage, statuses, statuses_len, BASE_CAT_BOOKMARKS, "Favorites", 0, 1);
|
||||
}
|
||||
|
||||
PERLIFY_MULTI(account, accounts, mstdnt_account)
|
||||
|
||||
HV* perlify_account(const struct mstdnt_account* acct)
|
||||
HV*
|
||||
perlify_account(const struct mstdnt_account* acct)
|
||||
{
|
||||
if (!acct) return NULL;
|
||||
HV* acct_hv = newHV();
|
||||
|
@ -520,7 +586,8 @@ HV* perlify_account(const struct mstdnt_account* acct)
|
|||
return acct_hv;
|
||||
}
|
||||
|
||||
HV* perlify_relationship(const struct mstdnt_relationship* rel)
|
||||
HV*
|
||||
perlify_relationship(const struct mstdnt_relationship* rel)
|
||||
{
|
||||
if (!rel) return NULL;
|
||||
HV* rel_hv = newHV();
|
||||
|
|
Loading…
Reference in a new issue