summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar default2024-05-07 19:40:28 +0200
committerGravatar default2024-05-07 19:40:28 +0200
commit6b1721c977294ee28f54150579c36514aa3ee62a (patch)
tree9ebd8169f90ce7f46485221d4c6b33ea515c8f21
parentVersion 2.52 RELEASED. (diff)
downloadsnac2-6b1721c977294ee28f54150579c36514aa3ee62a.tar.gz
snac2-6b1721c977294ee28f54150579c36514aa3ee62a.tar.xz
snac2-6b1721c977294ee28f54150579c36514aa3ee62a.zip
List timelines can now be (manually) navigated from the web UI.
URLs are {srv_baseurl}/{user}/list/{list_id} (you must know the list id).
-rw-r--r--data.c24
-rw-r--r--html.c23
-rw-r--r--mastoapi.c2
-rw-r--r--snac.h1
4 files changed, 44 insertions, 6 deletions
diff --git a/data.c b/data.c
index b9c1141..5b4936b 100644
--- a/data.c
+++ b/data.c
@@ -1836,6 +1836,23 @@ xs_val *list_maint(snac *user, const char *list, int op)
1836} 1836}
1837 1837
1838 1838
1839xs_list *list_timeline(snac *user, const char *list, int skip, int show)
1840/* returns the timeline of a list */
1841{
1842 xs_list *l = NULL;
1843
1844 if (!xs_is_hex(list))
1845 return NULL;
1846
1847 xs *fn = xs_fmt("%s/list/%s.idx", user->basedir, list);
1848
1849 if (mtime(fn) > 0.0)
1850 l = index_list_desc(fn, skip, show);
1851
1852 return l;
1853}
1854
1855
1839xs_val *list_content(snac *user, const char *list, const char *actor_md5, int op) 1856xs_val *list_content(snac *user, const char *list, const char *actor_md5, int op)
1840/* list content management */ 1857/* list content management */
1841{ 1858{
@@ -1869,11 +1886,8 @@ xs_val *list_content(snac *user, const char *list, const char *actor_md5, int op
1869 1886
1870 break; 1887 break;
1871 1888
1872 case 3: /** list timeline **/ 1889 default:
1873 fn = xs_replace_i(fn, ".lst", ".idx"); 1890 srv_log(xs_fmt("ERROR: list_content: bad op %d", op));
1874
1875 l = index_list_desc(fn, 0, 2048);
1876
1877 break; 1891 break;
1878 } 1892 }
1879 1893
diff --git a/html.c b/html.c
index ee5c2cd..b34fc81 100644
--- a/html.c
+++ b/html.c
@@ -2658,6 +2658,29 @@ int html_get_handler(const xs_dict *req, const char *q_path,
2658 } 2658 }
2659 } 2659 }
2660 else 2660 else
2661 if (xs_startswith(p_path, "list/")) { /** list timelines **/
2662 if (!login(&snac, req)) {
2663 *body = xs_dup(uid);
2664 status = 401;
2665 }
2666 else {
2667 xs *l = xs_split(p_path, "/");
2668 char *lid = xs_list_get(l, -1);
2669
2670 xs *list = list_timeline(&snac, lid, skip, show);
2671 xs *next = list_timeline(&snac, lid, skip + show, 1);
2672
2673 if (list != NULL) {
2674 xs *base = xs_fmt("/list/%s", lid);
2675
2676 *body = html_timeline(&snac, list, 0, skip, show,
2677 xs_list_len(next), NULL, base, 0);
2678 *b_size = strlen(*body);
2679 status = 200;
2680 }
2681 }
2682 }
2683 else
2661 if (xs_startswith(p_path, "p/")) { /** a timeline with just one entry **/ 2684 if (xs_startswith(p_path, "p/")) { /** a timeline with just one entry **/
2662 if (xs_type(xs_dict_get(snac.config, "private")) == XSTYPE_TRUE) 2685 if (xs_type(xs_dict_get(snac.config, "private")) == XSTYPE_TRUE)
2663 return 403; 2686 return 403;
diff --git a/mastoapi.c b/mastoapi.c
index 1f7f0b2..d39a6f9 100644
--- a/mastoapi.c
+++ b/mastoapi.c
@@ -1669,7 +1669,7 @@ int mastoapi_get_handler(const xs_dict *req, const char *q_path,
1669 xs *l = xs_split(cmd, "/"); 1669 xs *l = xs_split(cmd, "/");
1670 char *list = xs_list_get(l, -1); 1670 char *list = xs_list_get(l, -1);
1671 1671
1672 xs *timeline = list_content(&snac1, list, NULL, 3); 1672 xs *timeline = list_timeline(&snac1, list, 0, 2048);
1673 xs *out = xs_list_new(); 1673 xs *out = xs_list_new();
1674 int c = 0; 1674 int c = 0;
1675 char *md5; 1675 char *md5;
diff --git a/snac.h b/snac.h
index 481a1ae..ab8fc7c 100644
--- a/snac.h
+++ b/snac.h
@@ -175,6 +175,7 @@ void tag_index(const char *id, const xs_dict *obj);
175xs_list *tag_search(char *tag, int skip, int show); 175xs_list *tag_search(char *tag, int skip, int show);
176 176
177xs_val *list_maint(snac *user, const char *list, int op); 177xs_val *list_maint(snac *user, const char *list, int op);
178xs_list *list_timeline(snac *user, const char *list, int skip, int show);
178xs_val *list_content(snac *user, const char *list_id, const char *actor_md5, int op); 179xs_val *list_content(snac *user, const char *list_id, const char *actor_md5, int op);
179void list_distribute(snac *user, const char *who, const xs_dict *post); 180void list_distribute(snac *user, const char *who, const xs_dict *post);
180 181