diff --git a/perl/lists.pm b/perl/lists.pm
new file mode 100644
index 0000000..f53f7ed
--- /dev/null
+++ b/perl/lists.pm
@@ -0,0 +1,15 @@
+package lists;
+use strict;
+use warnings;
+use Exporter 'import';
+
+our @EXPORTS = qw( );
+
+use template_helpers 'to_template';
+
+sub content_lists
+{
+ my ($ssn, $data, $lists) = @_;
+
+ to_template(\%vars, $data->{'content_lists.tt'});
+}
diff --git a/perl/notifications.pm b/perl/notifications.pm
index 30c968e..8edc869 100644
--- a/perl/notifications.pm
+++ b/perl/notifications.pm
@@ -27,7 +27,7 @@ sub content_notifications
my %vars = (
prefix => '',
ssn=> $ssn,
- notif => $notif
+ notifs => $notifs
);
to_template(\%vars, \$data->{'content_notifs.tt'});
diff --git a/src/base_page.c b/src/base_page.c
index 68c92db..7780d82 100644
--- a/src/base_page.c
+++ b/src/base_page.c
@@ -16,7 +16,6 @@
* along with this program. If not, see .
*/
-#include
#include
#include
#include "helpers.h"
@@ -28,6 +27,7 @@
#include "../config.h"
#include "local_config_set.h"
#include "account.h"
+#include
#include "global_cache.h"
// Files
@@ -80,7 +80,7 @@ void render_base_page(struct base_page* page, FCGX_Request* req, struct session*
PUSHMARK(SP);
if (page->session)
- mXPUSHs(newRV_inc(page->session));
+ mXPUSHs(newRV_inc((SV*)page->session));
else
mXPUSHs(newRV_inc((SV*)perlify_session(ssn)));
XPUSHs(newRV_inc((SV*)template_files));
@@ -99,7 +99,7 @@ void render_base_page(struct base_page* page, FCGX_Request* req, struct session*
SPAGAIN;
send_result(req, NULL, "text/html", POPp, 0);
-cleanup:
+
PUTBACK;
FREETMPS;
LEAVE;
diff --git a/src/base_page.h b/src/base_page.h
index 4538390..d2886fd 100644
--- a/src/base_page.h
+++ b/src/base_page.h
@@ -18,6 +18,7 @@
#ifndef BASE_PAGE_H
#define BASE_PAGE_H
+#include "global_perl.h"
#include "session.h"
#include
#include
diff --git a/src/cookie.c b/src/cookie.c
index dec504e..f746ebb 100644
--- a/src/cookie.c
+++ b/src/cookie.c
@@ -16,11 +16,11 @@
* along with this program. If not, see .
*/
+#include "cookie.h"
#include
#include
#include
#include
-#include "cookie.h"
#include "env.h"
enum cookie_state
diff --git a/src/cookie.h b/src/cookie.h
index 77ace71..0381de7 100644
--- a/src/cookie.h
+++ b/src/cookie.h
@@ -21,6 +21,8 @@
#include
#include "global_perl.h"
#include "key.h"
+#include
+#include
struct cookie_values
{
diff --git a/src/emoji.c b/src/emoji.c
index 0f309af..5ab6d31 100644
--- a/src/emoji.c
+++ b/src/emoji.c
@@ -16,11 +16,11 @@
* along with this program. If not, see .
*/
+#include "emoji.h"
#include
#include
#include "base_page.h"
#include "string.h"
-#include "emoji.h"
#include "easprintf.h"
#include "string_helpers.h"
@@ -171,7 +171,7 @@ HV* perlify_emoji(struct mstdnt_emoji* const emoji)
hvstores_str(emoji_hv, "shortcode", emoji->shortcode);
hvstores_str(emoji_hv, "url", emoji->url);
hvstores_str(emoji_hv, "static_url", emoji->static_url);
- hvstores_str(emoji_hv, "visible_in_picker", emoji->visible_in_picker);
+ hvstores_int(emoji_hv, "visible_in_picker", emoji->visible_in_picker);
hvstores_str(emoji_hv, "category", emoji->category);
return emoji_hv;
}
diff --git a/src/emoji.h b/src/emoji.h
index 67b624b..31c81fc 100644
--- a/src/emoji.h
+++ b/src/emoji.h
@@ -20,8 +20,9 @@
#define EMOJI_H
#include
#include
-#include "emoji_codes.h"
#include "global_perl.h"
+#include "emoji_codes.h"
+#include "path.h"
#define EMOJI_FACTOR_NUM 32
diff --git a/src/global_perl.c b/src/global_perl.c
index a2bfc3c..94f34cc 100644
--- a/src/global_perl.c
+++ b/src/global_perl.c
@@ -32,6 +32,7 @@
#include "../templates/account_statuses.ctt"
#include "../templates/account_scrobbles.ctt"
#include "../templates/content_notifs.ctt"
+#include "../templates/content_lists.ctt"
HV* template_files;
pthread_mutex_t perl_mutex = PTHREAD_MUTEX_INITIALIZER;
@@ -53,6 +54,7 @@ void init_template_files()
hv_stores(template_files, "account_statuses.tt", newSVpv(data_account_statuses_tt, data_account_statuses_tt_size));
hv_stores(template_files, "account_scrobbles.tt", newSVpv(data_account_scrobbles_tt, data_account_scrobbles_tt_size));
hv_stores(template_files, "content_notifs.tt", newSVpv(data_content_notifs_tt, data_content_notifs_tt_size));
+ hv_stores(template_files, "content_lists.tt", newSVpv(data_content_lists_tt, data_content_lists_tt_size));
}
void cleanup_template_files()
diff --git a/src/lists.c b/src/lists.c
index c12c89e..1433cb1 100644
--- a/src/lists.c
+++ b/src/lists.c
@@ -17,6 +17,7 @@
*/
#include
+#include "global_perl.h"
#include "helpers.h"
#include "base_page.h"
#include "../config.h"
@@ -33,50 +34,13 @@
#include "../static/list.ctmpl"
#include "../static/lists.ctmpl"
-char* construct_list(struct mstdnt_list* list, size_t* size)
-{
- char* result;
- char* title = list->title;
- char* list_name = sanitize_html(title);
- struct list_template data = {
- .list = list_name,
- .prefix = config_url_prefix,
- .list_id = list->id
- };
- result = tmpl_gen_list(&data, size);
- if (list_name != title)
- free(list_name);
- return result;
-}
-
-static char* construct_list_voidwrap(void* passed, size_t index, size_t* res)
-{
- return construct_list((struct mstdnt_list*)passed + index, res);
-}
-
-char* construct_lists(struct mstdnt_list* lists, size_t size, size_t* ret_size)
-{
- return construct_func_strings(construct_list_voidwrap, lists, size, ret_size);
-}
-
-char* construct_lists_view(char* lists_string, size_t* size)
-{
- struct lists_template data = {
- .lists = lists_string,
- .prefix = config_url_prefix
- };
- return tmpl_gen_lists(&data, size);
-}
-
void content_lists(PATH_ARGS)
{
struct mstdnt_args m_args;
set_mstdnt_args(&m_args, ssn);
struct mstdnt_list* lists = NULL;
- size_t size_list = 0;
+ size_t list_len = 0;
struct mstdnt_storage storage = { 0 };
- char* lists_format = NULL;
- char* lists_page = NULL;
if (ssn->post.title.is_set)
{
@@ -89,20 +53,36 @@ void content_lists(PATH_ARGS)
mastodont_storage_cleanup(&create_storage);
}
- if (mastodont_get_lists(api, &m_args, &storage, &lists, &size_list))
- {
- lists_page = construct_error(storage.error, E_ERROR, 1, NULL);
- }
- else {
- lists_format = construct_lists(lists, size_list, NULL);
- if (!lists_format)
- lists_format = construct_error("No lists", E_ERROR, 1, NULL);
- lists_page = construct_lists_view(lists_format, NULL);
- }
+ mastodont_get_lists(api, &m_args, &storage, &lists, &list_len);
+
+ // Call perl
+ perl_lock();
+ dSP;
+ ENTER;
+ SAVETMPS;
+ PUSHMARK(SP);
+
+ HV* session_hv = perlify_session(ssn);
+ XPUSHs(newRV_noinc((SV*)session_hv));
+ XPUSHs(newRV_noinc((SV*)template_files));
+ // TODO Perlify lists
+
+ // ARGS
+ PUTBACK;
+ call_pv("lists::content_lists", G_SCALAR);
+ SPAGAIN;
+
+ // Duplicate so we can free the TMPs
+ char* dup = savesharedsvpv(POPs);
+ PUTBACK;
+ FREETMPS;
+ LEAVE;
+ perl_unlock();
struct base_page b = {
.category = BASE_CAT_LISTS,
- .content = lists_page,
+ .content = dup,
+ .session = session_hv,
.sidebar_left = NULL
};
@@ -111,9 +91,8 @@ void content_lists(PATH_ARGS)
// Cleanup
mastodont_storage_cleanup(&storage);
- if (lists_format) free(lists_format);
- if (lists_page) free(lists_page);
mstdnt_cleanup_lists(lists);
+ Safefree(dup);
}
void list_edit(PATH_ARGS)
diff --git a/src/lists.h b/src/lists.h
index 289163e..5414ce7 100644
--- a/src/lists.h
+++ b/src/lists.h
@@ -22,10 +22,9 @@
#include
#include "session.h"
-char* construct_list(struct mstdnt_list* list, size_t* size);
-char* construct_lists(struct mstdnt_list* lists, size_t size, size_t* ret_size);
-char* construct_lists_view(char* lists_string, size_t* size);
+/** Creates the main lists view */
void content_lists(PATH_ARGS);
+/** Creates a list and then redirects */
void list_edit(PATH_ARGS);
#endif // LISTS_H
diff --git a/src/local_config_set.h b/src/local_config_set.h
index 0135b5f..c3be2c7 100644
--- a/src/local_config_set.h
+++ b/src/local_config_set.h
@@ -19,12 +19,12 @@
#ifndef LOCAL_CONFIG_SET_H
#define LOCAL_CONFIG_SET_H
#include
-#include
-#include
-#include "local_config.h"
#include "session.h"
#include "attachments.h"
+#include "local_config.h"
#include "key.h"
+#include
+#include
enum config_page
{
diff --git a/src/login.c b/src/login.c
index c5e1654..0bc74d9 100644
--- a/src/login.c
+++ b/src/login.c
@@ -16,18 +16,18 @@
* along with this program. If not, see .
*/
-#include
-#include
+#include "login.h"
#include
#include
#include "helpers.h"
#include "query.h"
#include "base_page.h"
-#include "login.h"
#include "error.h"
#include "easprintf.h"
#include "../config.h"
#include "http.h"
+#include
+#include
// Files
#include "../static/login.ctmpl"
diff --git a/src/main.c b/src/main.c
index 82e2101..c4ee17b 100644
--- a/src/main.c
+++ b/src/main.c
@@ -16,12 +16,10 @@
* along with this program. If not, see .
*/
-#include
#include
#include
-#include
#include "global_perl.h"
-#include
+#include
#include
#include
#include
@@ -47,6 +45,8 @@
#include "local_config_set.h"
#include "global_cache.h"
#include "conversations.h"
+#include
+#include
#define THREAD_COUNT 20
diff --git a/src/page_config.c b/src/page_config.c
index 85bb147..1e3eb72 100644
--- a/src/page_config.c
+++ b/src/page_config.c
@@ -16,19 +16,19 @@
* along with this program. If not, see .
*/
-#include
+#include "page_config.h"
#include
#include
#include "http.h"
#include "base_page.h"
#include "../config.h"
#include "easprintf.h"
-#include "page_config.h"
#include "query.h"
#include "cookie.h"
#include "local_config_set.h"
#include "string_helpers.h"
#include "l10n.h"
+#include
// Pages
#include "../static/config_general.ctmpl"
diff --git a/src/page_config.h b/src/page_config.h
index e30b1d9..e2baa4f 100644
--- a/src/page_config.h
+++ b/src/page_config.h
@@ -20,10 +20,10 @@
#define PAGE_CONFIG_H
#include
#include
-#include
-#include
#include "path.h"
#include "session.h"
+#include
+#include
void content_config_appearance(PATH_ARGS);
void content_config_general(PATH_ARGS);
diff --git a/src/path.h b/src/path.h
index 26cbffe..2814127 100644
--- a/src/path.h
+++ b/src/path.h
@@ -18,12 +18,12 @@
#ifndef PATH_H
#define PATH_H
-#include
-#include
+#include "session.h"
#include
#include
#include "env.h"
-#include "session.h"
+#include
+#include
#define PATH_ARGS FCGX_Request* req, struct session* ssn, mastodont_t* api, char** data
diff --git a/src/query.c b/src/query.c
index 7968cce..ede43f2 100644
--- a/src/query.c
+++ b/src/query.c
@@ -16,15 +16,15 @@
* along with this program. If not, see .
*/
-#include
-#include
+#include "query.h"
#include
#include
#include
#include
-#include "query.h"
#include "env.h"
#include "mime.h"
+#include
+#include
char* read_get_data(FCGX_Request* req, struct get_values* query)
{
diff --git a/src/timeline.c b/src/timeline.c
index 575d3f9..5563012 100644
--- a/src/timeline.c
+++ b/src/timeline.c
@@ -16,6 +16,7 @@
* along with this program. If not, see .
*/
+#include "global_perl.h"
#include "timeline.h"
#include
#include "helpers.h"
@@ -30,7 +31,6 @@
#include "query.h"
#include "error.h"
#include "string_helpers.h"
-#include "global_perl.h"
#include "../static/timeline_options.ctmpl"
#include "../static/navigation.ctmpl"
diff --git a/src/timeline.h b/src/timeline.h
index ae20632..c2fd9f4 100644
--- a/src/timeline.h
+++ b/src/timeline.h
@@ -18,13 +18,13 @@
#ifndef TIMELINE_H
#define TIMELINE_H
-#include
-#include
#include
#include
#include "path.h"
#include "session.h"
#include "base_page.h"
+#include
+#include
/** Wrapper for content_tl_federated */
void tl_home(FCGX_Request* req, struct session* ssn, mastodont_t* api, int local);
diff --git a/templates/content_lists.tt b/templates/content_lists.tt
new file mode 100644
index 0000000..d3c5931
--- /dev/null
+++ b/templates/content_lists.tt
@@ -0,0 +1 @@
+Lists