105 lines
2.5 KiB
C
105 lines
2.5 KiB
C
#include "../../include/articles_p/html.h"
|
|
#include "../../include/articles_p/article.h"
|
|
#include "../../include/utils_op/utils.h"
|
|
|
|
int gen_html_article(article_info article, char **out)
|
|
{
|
|
FILE *template = fopen("./static/articles/index.html", "r");
|
|
if (template == NULL)
|
|
{
|
|
perror("Couldn't open article template");
|
|
*out = "500";
|
|
return -1;
|
|
}
|
|
|
|
size_t template_size = get_file_size(template);
|
|
|
|
char *template_str = malloc(template_size + 1);
|
|
|
|
for (int i = 0; i < template_size; i++)
|
|
template_str[i] = fgetc(template);
|
|
template_str[template_size] = '\0';
|
|
|
|
char *content;
|
|
|
|
process_md(article, &content);
|
|
|
|
article.title = repair_spaces(article.title);
|
|
|
|
int line_length = snprintf(NULL, 0, template_str, article.title, article.title, content) + 1;
|
|
*out = malloc(line_length);
|
|
if (*out == NULL)
|
|
{
|
|
*out = "500";
|
|
return -1;
|
|
}
|
|
|
|
snprintf(*out, line_length, template_str, article.title, article.title, content);
|
|
|
|
fclose(template);
|
|
free(template_str);
|
|
free(content);
|
|
|
|
return line_length;
|
|
}
|
|
|
|
int gen_html_article_list(article_info *articles, int n, char **out)
|
|
{
|
|
if (n == 0)
|
|
{
|
|
*out = "No articles found";
|
|
return 0;
|
|
}
|
|
|
|
*out = strdup("<ul>\n");
|
|
char *insert;
|
|
|
|
for (int i = 0; i < n; i++)
|
|
{
|
|
articles[i].title = repair_spaces(articles[i].title);
|
|
|
|
int line_length = snprintf(NULL, 0, "<li><a href=\"/article/%d\" >%s</a></li>\n", i, articles[i].title) + 1;
|
|
|
|
insert = malloc(line_length);
|
|
*out = realloc(*out, strlen(*out) + line_length);
|
|
if (insert == NULL || *out == NULL)
|
|
{
|
|
*out = "500 Memory error";
|
|
return -1;
|
|
}
|
|
|
|
snprintf(insert, line_length, "<li><a href=\"/article/%d\" >%s</a></li>\n", i, articles[i].title);
|
|
|
|
strcat(*out, insert);
|
|
}
|
|
|
|
*out = realloc(*out, strlen(*out) + strlen("</ul>") + 1);
|
|
strcat(*out, "</ul>");
|
|
|
|
free(insert);
|
|
|
|
return 0;
|
|
}
|
|
|
|
// /* Only for testing purposes */
|
|
// int main ()
|
|
// {
|
|
// article_info *articles = malloc(0);
|
|
|
|
// int n = list_articles(&articles);
|
|
|
|
// printf("Read %d lines\n", n);
|
|
// printf("Last article's creation date is %ld and title is %s\n", articles[n - 1].time, articles[n - 1].title);
|
|
|
|
// for (int i = 0; i < n; i++)
|
|
// get_article_contents(&(articles[i]));
|
|
|
|
// printf("Got content of %d files\n", n);
|
|
|
|
// char *html;
|
|
// gen_html_article_list(articles, n, &html);
|
|
|
|
// printf("-%s-\n", html);
|
|
|
|
// return 0;
|
|
// }
|