104 lines
2.6 KiB
C
104 lines
2.6 KiB
C
#include "../../include/projects_p/projects.h"
|
|
#include "../../include/utils_op/arr.h"
|
|
#include "../../include/file_op/file.h"
|
|
|
|
ssize_t read_list(project_t **list)
|
|
{
|
|
FILE *fp = fopen("static/projects/list.db", "r");
|
|
if (fp == NULL)
|
|
{
|
|
perror("couldn't open projectDB file");
|
|
return -1;
|
|
}
|
|
|
|
char *buff = NULL;
|
|
size_t length = LINE_LENGTH;
|
|
size_t projects_amount = 0;
|
|
|
|
while (getline(&buff, &length, fp) > 0)
|
|
{
|
|
if (buff[strlen(buff) - 1] == '\n')
|
|
buff[strlen(buff) - 1] = '\0';
|
|
|
|
if (strlen(buff) == 0)
|
|
continue;
|
|
|
|
projects_amount++;
|
|
|
|
*list = realloc(*list, sizeof(project_t) * projects_amount);
|
|
|
|
char *tmp = strdup(buff), *rest = tmp;
|
|
|
|
(*list)[projects_amount - 1].title = strdup(strtok_r(tmp, ";", &rest));
|
|
|
|
(*list)[projects_amount - 1].description = strdup(strtok_r(rest, ";", &rest));
|
|
|
|
(*list)[projects_amount - 1].lang = strdup(strtok_r(rest, ";", &rest));
|
|
|
|
(*list)[projects_amount - 1].license = strdup(strtok_r(rest, ";", &rest));
|
|
|
|
(*list)[projects_amount - 1].url = strdup(strtok_r(rest, ";", &rest));
|
|
|
|
free(tmp);
|
|
}
|
|
|
|
fclose(fp);
|
|
|
|
free(buff);
|
|
|
|
return projects_amount;
|
|
}
|
|
|
|
char *gen_project_html()
|
|
{
|
|
FILE *template_fp = fopen("static/projects/item.html", "r");
|
|
if (template_fp == NULL)
|
|
{
|
|
perror("couldn't open project tesplate");
|
|
return NULL;
|
|
}
|
|
|
|
size_t template_file_size = get_file_size(template_fp) + 1;
|
|
char *template = calloc(1, template_file_size);
|
|
|
|
fread(template, template_file_size, 1, template_fp);
|
|
fclose(template_fp);
|
|
|
|
project_t *list = malloc(0);
|
|
size_t length = read_list(&list);
|
|
|
|
char *content = strdup("");
|
|
|
|
for (size_t i = 0; i < length; i++)
|
|
{
|
|
int line_length = snprintf(NULL, 0, template, list[i].url, list[i].title, list[i].description, list[i].lang, list[i].license) + 1;
|
|
char *project_content = calloc(1, line_length);
|
|
|
|
sprintf(project_content, template, list[i].url, list[i].title, list[i].description, list[i].lang, list[i].license);
|
|
|
|
content = realloc(content, strlen(content) + line_length);
|
|
|
|
content = strcat(content, project_content);
|
|
|
|
free(project_content);
|
|
}
|
|
|
|
free_proj_list(&list, length);
|
|
free(template);
|
|
|
|
return content;
|
|
}
|
|
|
|
void free_proj_list(project_t **list, int len)
|
|
{
|
|
for (int i = 0; i < len; i++)
|
|
{
|
|
free((*list)[i].description);
|
|
free((*list)[i].lang);
|
|
free((*list)[i].license);
|
|
free((*list)[i].title);
|
|
free((*list)[i].url);
|
|
}
|
|
|
|
free(*list);
|
|
} |