summaryrefslogtreecommitdiff
path: root/data.c
diff options
context:
space:
mode:
authordefault <nobody@localhost>2024-04-29 07:43:01 +0200
committerdefault <nobody@localhost>2024-04-29 07:43:01 +0200
commit8275a5f4d8764ebc9f9f82a4db377bacfa9fbc75 (patch)
tree7d896846e16d6324d16e061a2bc08cfc0183efb0 /data.c
parenta297b55dac6fac41136badf4b7af9c7a4f28a66f (diff)
Start of list support.
Diffstat (limited to 'data.c')
-rw-r--r--data.c62
1 files changed, 62 insertions, 0 deletions
diff --git a/data.c b/data.c
index 2fb00eb..ab597e7 100644
--- a/data.c
+++ b/data.c
@@ -1729,6 +1729,68 @@ xs_list *tag_search(char *tag, int skip, int show)
}
+/** lists **/
+
+xs_list *list_maint(snac *user, const char *list, int op)
+{
+ xs_list *l = NULL;
+
+ switch (op) {
+ case 0: /** list of lists **/
+ {
+ FILE *f;
+ xs *spec = xs_fmt("%s/list/" "*.id", user->basedir);
+ xs *ls = xs_glob(spec, 0, 0);
+ int c = 0;
+ char *v;
+
+ l = xs_list_new();
+
+ while (xs_list_next(ls, &v, &c)) {
+ if ((f = fopen(v, "r")) != NULL) {
+ xs *title = xs_readline(f);
+ fclose(f);
+
+ title = xs_strip_i(title);
+ xs *md5 = xs_md5_hex(title, strlen(title));
+
+ /* return [ list_id, list_title ] */
+ l = xs_list_append(l, xs_list_append(xs_list_new(), md5, title));
+ }
+ }
+ }
+
+ break;
+
+ case 1: /** create new list (list is the name) **/
+ {
+ FILE *f;
+ xs *dir = xs_fmt("%s/list/", user->basedir);
+ xs *md5 = xs_md5_hex(list, strlen(list));
+
+ mkdirx(dir);
+
+ xs *fn = xs_fmt("%s%s.id", dir, md5);
+
+ if ((f = fopen(fn, "w")) != NULL) {
+ fprintf(f, "%s\n", list);
+ fclose(f);
+ }
+ }
+
+ break;
+
+ case 2: /** delete list (list is md5 id) **/
+ break;
+
+ case 3: /** list content (list is md5 id) **/
+ break;
+ }
+
+ return l;
+}
+
+
/** static data **/
static int _load_raw_file(const char *fn, xs_val **data, int *size,