summaryrefslogtreecommitdiff
path: root/data.c
diff options
context:
space:
mode:
authordefault <nobody@localhost>2024-04-29 08:29:18 +0200
committerdefault <nobody@localhost>2024-04-29 08:29:18 +0200
commit9a13e330f12aaf0fc1535e922efbf315308d252b (patch)
treee16476d4490adbbb57072fa0936c92bfdd1134d5 /data.c
parent8275a5f4d8764ebc9f9f82a4db377bacfa9fbc75 (diff)
More work in lists.
Diffstat (limited to 'data.c')
-rw-r--r--data.c62
1 files changed, 48 insertions, 14 deletions
diff --git a/data.c b/data.c
index ab597e7..46d95b4 100644
--- a/data.c
+++ b/data.c
@@ -1731,9 +1731,9 @@ xs_list *tag_search(char *tag, int skip, int show)
/** lists **/
-xs_list *list_maint(snac *user, const char *list, int op)
+xs_val *list_maint(snac *user, const char *list, int op)
{
- xs_list *l = NULL;
+ xs_val *l = NULL;
switch (op) {
case 0: /** list of lists **/
@@ -1752,10 +1752,12 @@ xs_list *list_maint(snac *user, const char *list, int op)
fclose(f);
title = xs_strip_i(title);
- xs *md5 = xs_md5_hex(title, strlen(title));
+
+ xs *v2 = xs_replace(v, ".id", "");
+ xs *l2 = xs_split(v2, "/");
/* return [ list_id, list_title ] */
- l = xs_list_append(l, xs_list_append(xs_list_new(), md5, title));
+ l = xs_list_append(l, xs_list_append(xs_list_new(), xs_list_get(l2, -1), title));
}
}
}
@@ -1764,26 +1766,58 @@ xs_list *list_maint(snac *user, const char *list, int op)
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));
+ xs *lol = list_maint(user, NULL, 0);
+ int c = 0;
+ xs_list *v;
+ int add = 1;
- mkdirx(dir);
+ /* check if this list name already exists */
+ while (xs_list_next(lol, &v, &c)) {
+ if (strcmp(xs_list_get(v, 1), list) == 0) {
+ add = 0;
+ break;
+ }
+ }
- xs *fn = xs_fmt("%s%s.id", dir, md5);
+ if (add) {
+ FILE *f;
+ xs *dir = xs_fmt("%s/list/", user->basedir);
+ xs *id = xs_fmt("%010x", time(NULL));
- if ((f = fopen(fn, "w")) != NULL) {
- fprintf(f, "%s\n", list);
- fclose(f);
+ mkdirx(dir);
+
+ xs *fn = xs_fmt("%s%s.id", dir, id);
+
+ if ((f = fopen(fn, "w")) != NULL) {
+ fprintf(f, "%s\n", list);
+ fclose(f);
+ }
+
+ l = xs_stock(XSTYPE_TRUE);
}
+ else
+ l = xs_stock(XSTYPE_FALSE);
}
break;
- case 2: /** delete list (list is md5 id) **/
+ case 2: /** delete list (list is the id) **/
+ {
+ if (xs_is_hex(list)) {
+ xs *fn = xs_fmt("%s/list/%s.id", user->basedir, list);
+ unlink(fn);
+
+ fn = xs_replace_i(fn, ".id", ".lst");
+ unlink(fn);
+
+ fn = xs_replace_i(fn, ".list", ".idx");
+ unlink(fn);
+ }
+ }
+
break;
- case 3: /** list content (list is md5 id) **/
+ case 3: /** list content (list is the id) **/
break;
}