aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorYaroslav de la Peña Smirnov <yps@yaroslavps.com>2022-03-24 01:09:48 +0300
committerYaroslav de la Peña Smirnov <yps@yaroslavps.com>2022-03-24 01:09:48 +0300
commit75906fbb296d2ed7cd9ca05e1b7bf0c92f84a30b (patch)
tree863208f0605c1b609cf00d1e0e418c923ed40724 /include
parent9297781c79dbfe68a817474d0395001fd9746770 (diff)
downloadrevela-75906fbb296d2ed7cd9ca05e1b7bf0c92f84a30b.tar.gz
revela-75906fbb296d2ed7cd9ca05e1b7bf0c92f84a30b.zip
Switch from unja to roscha
Still a WIP, some bugs need to be fixed. Also change the license to GPL from LGPL. It was always meant to be GPL, not sure what brain fart caused this.
Diffstat (limited to 'include')
-rw-r--r--include/components.h45
-rw-r--r--include/fs.h8
-rw-r--r--include/render.h74
-rw-r--r--include/site.h2
4 files changed, 99 insertions, 30 deletions
diff --git a/include/components.h b/include/components.h
index 9e568ee..f08d79a 100644
--- a/include/components.h
+++ b/include/components.h
@@ -1,16 +1,22 @@
#ifndef REVELA_COMPONENTS_H
#define REVELA_COMPONENTS_H
+#include "config.h"
+
+#include "hmap.h"
+#include "vector.h"
+#include "object.h"
+
#include <time.h>
#include <sys/stat.h>
#include <libexif/exif-data.h>
-#include "config.h"
-#include "hashmap.h"
-
#define PHOTO_THUMB_SUFFIX "_thumb"
+/* All data related to a single image's files, templates, and pages */
struct image {
+ /* The albums this image belongs to */
+ struct album *album;
/* The path to the source image file */
char *source;
/* Points to the basename in source */
@@ -35,14 +41,18 @@ struct image {
char datestr[24];
/* Same as date but in seconds for easier comparison. See image_set_date() */
time_t tstamp;
- struct album *album;
- /* Hashmap with values to be passed to the image template */
- struct hashmap *map;
- /* Hashmap with values to be passed to thumbs and previews vectors */
- struct hashmap *thumb;
+ /* Reference counted hashmap with values to be passed to the template */
+ struct roscha_object *map;
+ /* hashmap with values to be passed to the thumbs vector */
+ struct roscha_object *thumb;
+ /*
+ * Whether this image was modified since the last time the gallery was
+ * generated.
+ */
bool modified;
};
+/* All data related to an album's images, templates, and pages */
struct album {
struct site *site;
struct album_config *config;
@@ -58,14 +68,21 @@ struct album {
char year[8];
/* The date of the album is the date of the earliest image */
time_t tstamp;
+ /*
+ * Binary search tree with the images of this album sorted by date from
+ * older to newer.
+ */
struct bstree *images;
/* Files/dirs that belong to images and which shouldn't be deleted */
- struct hashmap *preserved;
- /* Hashmap with values to be passed to the template */
- struct hashmap *map;
- /* Vector with hashmaps of images to be passed to the templates */
- struct vector *thumbs;
- struct vector *previews;
+ struct hmap *preserved;
+ /* Reference counted hashmap with values to be passed to the template */
+ struct roscha_object *map;
+ /*
+ * Reference counted vector with refcounted hashmaps of image thumbnails to
+ * be passed to the template.
+ */
+ struct roscha_object *thumbs;
+ /* Count of images that were actually updated */
size_t images_updated;
};
diff --git a/include/fs.h b/include/fs.h
index d48ac9f..00be8a1 100644
--- a/include/fs.h
+++ b/include/fs.h
@@ -4,7 +4,7 @@
#include <stdbool.h>
#include <sys/stat.h>
-#include "hashmap.h"
+#include "hmap.h"
typedef bool (*preremove_fn)(const char *path, void *data);
@@ -55,11 +55,11 @@ bool rmentry(const char *path, bool dry);
/*
* Recursively deletes extaneous files from directory, keeping files in the
- * preserved hashmap. Returns -1 on error, number of deleted entries on success.
+ * preserved hmap. Returns -1 on error, number of deleted entries on success.
* The number is not the total number of files on all subdirectories, but only
* the number of files/dirs deleted from the directory pointed by path.
*/
-ssize_t rmextra(const char *path, struct hashmap *preserved, preremove_fn,
+ssize_t rmextra(const char *path, struct hmap *preserved, preremove_fn,
void *data, bool dry);
/*
@@ -70,6 +70,6 @@ ssize_t rmextra(const char *path, struct hashmap *preserved, preremove_fn,
* timestamps do not match.
*/
bool filesync(const char *restrict srcpath, const char *restrict dstpath,
- struct hashmap *preserved, bool dry);
+ struct hmap *preserved, bool dry);
#endif
diff --git a/include/render.h b/include/render.h
index ff83bab..9b5e9e2 100644
--- a/include/render.h
+++ b/include/render.h
@@ -1,25 +1,77 @@
#ifndef REVELA_RENDER_H
#define REVELA_RENDER_H
-#include <sys/stat.h>
-
#include "bstree.h"
#include "config.h"
-#include "template.h"
#include "components.h"
+#include "roscha.h"
+
+#include <sys/stat.h>
+
+/* Variables that are common to all templates */
+struct base_template {
+ /* Title of the gallery */
+ struct roscha_object *title;
+ /* The base url or index url of the gallery */
+ struct roscha_object *index;
+};
+
+/* Variables of the index template */
+struct index_template {
+ /* vector of all albums */
+ struct roscha_object *albums;
+ /* hmap with the year "name" and a vector of albums (see album template) */
+ struct roscha_object *years;
+};
+
+/*
+ * Variables for the album template and album elements in the albums vector of
+ * the index template.
+ */
+struct album_template {
+ /* The title of the album as stored in album.ini */
+ struct roscha_object *title;
+ /* The description of the album as stored in album.ini */
+ struct roscha_object *desc;
+ /* The url to the album */
+ struct roscha_object *link;
+ /* The date of the oldest photo in the album */
+ struct roscha_object *date;
+ /* The year of the oldest photo in the album */
+ struct roscha_object *year;
+ /* vector of n first thumbs; deprecated */
+ struct roscha_object *previews;
+ /* vector of all thumbs hmaps */
+ struct roscha_object *thumbs;
+};
+
+/* Variables for the image template and thumb hashmap */
+struct image_template {
+ /* The date the image was taken/created */
+ struct roscha_object *date;
+ /* The url to the image file */
+ struct roscha_object *source;
+ /* The url to the previous image page */
+ struct roscha_object *prev;
+ /* The url to the next image page */
+ struct roscha_object *next;
+};
+
struct render {
- /* Unja environment */
- struct env *env;
- /* List of years with albums in each year */
- struct vector *years;
- /* List of albums */
- struct vector *albums;
- /* Hashmap used for all templates */
- struct hashmap *common_vars;
+ /* Roscha environment */
+ struct roscha_env *env;
+ struct base_template base;
+ struct index_template index;
/* Modification time for the templates dir */
struct timespec modtime;
+ /* Refcounted vector of years with album hmaps */
+ struct roscha_object *years;
+ /* Refcounted vector album hmaps */
+ struct roscha_object *albums;
+ /* Count of the albums that were updated */
size_t albums_updated;
+ /* Whether we should simulate rendering or actually render templates */
bool dry_run;
};
diff --git a/include/site.h b/include/site.h
index db82517..e054730 100644
--- a/include/site.h
+++ b/include/site.h
@@ -31,7 +31,7 @@ struct site {
size_t rel_content_dir;
struct bstree *albums;
/* Files/dirs that belong to albums and which shouldn't be deleted */
- struct hashmap *album_dirs;
+ struct hmap *album_dirs;
struct render render;
bool dry_run;
size_t albums_updated;