diff --git a/src/base_page.c b/src/base_page.c index 875f69d..647b74f 100644 --- a/src/base_page.c +++ b/src/base_page.c @@ -19,56 +19,26 @@ #include "cgi.h" #include "global_cache.h" - #define BODY_STYLE "style=\"background:url('%s');\"" - -void render_base_page(struct base_page* page, FCGX_Request* req, struct session* ssn, mastodont_t* api) +static void +_render_base_page(struct base_page* page, + FCGX_Request* req, + struct session* ssn, + struct mstdnt_notifications* notifs) { - struct mstdnt_args m_args; - set_mstdnt_args(&m_args, ssn); - struct mstdnt_storage storage = { 0 }; - struct mstdnt_notification* notifs = NULL; - size_t notifs_len = 0; - - // Fetch notification (if not iFrame) - if (keystr(ssn->cookies.logged_in) && keystr(ssn->cookies.access_token) && - !ssn->config.notif_embed) - { - struct mstdnt_notifications_args args = { - .exclude_types = 0, - .account_id = NULL, - .exclude_visibilities = 0, - .include_types = 0, - .with_muted = 1, - .max_id = NULL, - .min_id = NULL, - .since_id = NULL, - .offset = 0, - .limit = 8, - }; - - mstdnt_get_notifications( - api, - &m_args, - NULL, NULL, - &args, - &storage, - ¬ifs, - ¬ifs_len - ); - } - PERL_STACK_INIT; - HV* real_ssn = page->session ? page->session : perlify_session(ssn); + HV* real_ssn = page->session ? page->session : + perlify_session(ssn); mXPUSHs(newRV_noinc((SV*)real_ssn)); mXPUSHs(newRV_inc((SV*)template_files)); mXPUSHs(newSVpv(page->content, 0)); - if (notifs && notifs_len) + if (notifs) { - mXPUSHs(newRV_noinc(perlify_notifications(notifs, notifs_len))); + mXPUSHs(newRV_noinc( + (SV*)perlify_notifications(notifs->notifs, notifs->len))); } else ARG_UNDEFINED(); @@ -79,11 +49,56 @@ void render_base_page(struct base_page* page, FCGX_Request* req, struct session* send_result(req, NULL, "text/html", dup, 0); - mstdnt_cleanup_notifications(notifs, notifs_len); - mstdnt_storage_cleanup(&storage); tb_free(dup); } +// Callback: render_base_page +static int +request_cb_base_page(mstdnt_request_cb_data* cb_data, + void* args) +{ + struct mstdnt_notifications* notifs = MSTDNT_CB_DATA(cb_data); + + +} + +void +render_base_page(struct base_page* page, + FCGX_Request* req, + struct session* ssn, + mastodont_t* api) +{ + struct mstdnt_args m_args; + set_mstdnt_args(&m_args, ssn); + + // Fetch notification (if not iFrame) + if (keystr(ssn->cookies.logged_in) && + keystr(ssn->cookies.access_token) && + !ssn->config.notif_embed) + { + mstdnt_get_notifications( + api, + &m_args, + request_cb_base_page, NULL, + (struct mstdnt_notifications_args) + { + .exclude_types = 0, + .account_id = NULL, + .exclude_visibilities = 0, + .include_types = 0, + .with_muted = 1, + .max_id = NULL, + .min_id = NULL, + .since_id = NULL, + .offset = 0, + .limit = 8, + }); + } + else { + + } +} + void send_result(FCGX_Request* req, char* status, char* content_type, char* data, size_t data_len) { if (data_len == 0) data_len = strlen(data); diff --git a/src/path.c b/src/path.c index 009cf8f..d3cc1cc 100644 --- a/src/path.c +++ b/src/path.c @@ -10,6 +10,7 @@ #include "index.h" #include "account.h" #include "error.h" +#include "session.h" int parse_path(REQUEST_T req, struct session* ssn, @@ -89,6 +90,33 @@ breakpt: return res; } +struct path_args_data* +path_args_data_create(REQUEST_T req, + struct session* ssn, + mastodont_t* api, + void* data) +{ + struct path_args_data* _data = malloc(sizeof(struct path_args_data)); + if (!_data) + { + perror("malloc"); + } + _data->req = req; + _data->ssn = ssn; + _data->api = api; + _data->data = data; + + return _data; +} + +void +path_args_data_destroy(struct path_args_data* refs) +{ + session_cleanup(refs->ssn); + FCGX_Finish_r(refs->req); + free(refs->req); +} + int handle_paths(REQUEST_T req, struct session* ssn, mastodont_t* api, diff --git a/src/path.h b/src/path.h index 3f53191..3232763 100644 --- a/src/path.h +++ b/src/path.h @@ -21,6 +21,23 @@ struct path_info int (*callback)(PATH_ARGS); }; +/// Struct for use with mastodont-c, passed as an argument usually +struct path_args_data +{ + REQUEST_T req; + struct session* ssn; + mastodont_t* api; + /// Need to manually free this or whatever + void* data; +}; + +struct path_args_data* path_args_data_create(REQUEST_T req, + struct session* ssn, + mastodont_t* api, + void* data); + +void path_args_ref_destroy(struct path_args_data* refs); + int handle_paths( REQUEST_T req, struct session* ssn,