summaryrefslogtreecommitdiff
path: root/data.c
diff options
context:
space:
mode:
authorGravatar default2024-04-29 08:29:18 +0200
committerGravatar default2024-04-29 08:29:18 +0200
commit9a13e330f12aaf0fc1535e922efbf315308d252b (patch)
treee16476d4490adbbb57072fa0936c92bfdd1134d5 /data.c
parentStart of list support. (diff)
downloadsnac2-9a13e330f12aaf0fc1535e922efbf315308d252b.tar.gz
snac2-9a13e330f12aaf0fc1535e922efbf315308d252b.tar.xz
snac2-9a13e330f12aaf0fc1535e922efbf315308d252b.zip
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)
1731 1731
1732/** lists **/ 1732/** lists **/
1733 1733
1734xs_list *list_maint(snac *user, const char *list, int op) 1734xs_val *list_maint(snac *user, const char *list, int op)
1735{ 1735{
1736 xs_list *l = NULL; 1736 xs_val *l = NULL;
1737 1737
1738 switch (op) { 1738 switch (op) {
1739 case 0: /** list of lists **/ 1739 case 0: /** list of lists **/
@@ -1752,10 +1752,12 @@ xs_list *list_maint(snac *user, const char *list, int op)
1752 fclose(f); 1752 fclose(f);
1753 1753
1754 title = xs_strip_i(title); 1754 title = xs_strip_i(title);
1755 xs *md5 = xs_md5_hex(title, strlen(title)); 1755
1756 xs *v2 = xs_replace(v, ".id", "");
1757 xs *l2 = xs_split(v2, "/");
1756 1758
1757 /* return [ list_id, list_title ] */ 1759 /* return [ list_id, list_title ] */
1758 l = xs_list_append(l, xs_list_append(xs_list_new(), md5, title)); 1760 l = xs_list_append(l, xs_list_append(xs_list_new(), xs_list_get(l2, -1), title));
1759 } 1761 }
1760 } 1762 }
1761 } 1763 }
@@ -1764,26 +1766,58 @@ xs_list *list_maint(snac *user, const char *list, int op)
1764 1766
1765 case 1: /** create new list (list is the name) **/ 1767 case 1: /** create new list (list is the name) **/
1766 { 1768 {
1767 FILE *f; 1769 xs *lol = list_maint(user, NULL, 0);
1768 xs *dir = xs_fmt("%s/list/", user->basedir); 1770 int c = 0;
1769 xs *md5 = xs_md5_hex(list, strlen(list)); 1771 xs_list *v;
1772 int add = 1;
1770 1773
1771 mkdirx(dir); 1774 /* check if this list name already exists */
1775 while (xs_list_next(lol, &v, &c)) {
1776 if (strcmp(xs_list_get(v, 1), list) == 0) {
1777 add = 0;
1778 break;
1779 }
1780 }
1772 1781
1773 xs *fn = xs_fmt("%s%s.id", dir, md5); 1782 if (add) {
1783 FILE *f;
1784 xs *dir = xs_fmt("%s/list/", user->basedir);
1785 xs *id = xs_fmt("%010x", time(NULL));
1774 1786
1775 if ((f = fopen(fn, "w")) != NULL) { 1787 mkdirx(dir);
1776 fprintf(f, "%s\n", list); 1788
1777 fclose(f); 1789 xs *fn = xs_fmt("%s%s.id", dir, id);
1790
1791 if ((f = fopen(fn, "w")) != NULL) {
1792 fprintf(f, "%s\n", list);
1793 fclose(f);
1794 }
1795
1796 l = xs_stock(XSTYPE_TRUE);
1778 } 1797 }
1798 else
1799 l = xs_stock(XSTYPE_FALSE);
1779 } 1800 }
1780 1801
1781 break; 1802 break;
1782 1803
1783 case 2: /** delete list (list is md5 id) **/ 1804 case 2: /** delete list (list is the id) **/
1805 {
1806 if (xs_is_hex(list)) {
1807 xs *fn = xs_fmt("%s/list/%s.id", user->basedir, list);
1808 unlink(fn);
1809
1810 fn = xs_replace_i(fn, ".id", ".lst");
1811 unlink(fn);
1812
1813 fn = xs_replace_i(fn, ".list", ".idx");
1814 unlink(fn);
1815 }
1816 }
1817
1784 break; 1818 break;
1785 1819
1786 case 3: /** list content (list is md5 id) **/ 1820 case 3: /** list content (list is the id) **/
1787 break; 1821 break;
1788 } 1822 }
1789 1823