diff options
| author | 2024-05-07 19:40:28 +0200 | |
|---|---|---|
| committer | 2024-05-07 19:40:28 +0200 | |
| commit | 6b1721c977294ee28f54150579c36514aa3ee62a (patch) | |
| tree | 9ebd8169f90ce7f46485221d4c6b33ea515c8f21 | |
| parent | Version 2.52 RELEASED. (diff) | |
| download | snac2-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.c | 24 | ||||
| -rw-r--r-- | html.c | 23 | ||||
| -rw-r--r-- | mastoapi.c | 2 | ||||
| -rw-r--r-- | snac.h | 1 |
4 files changed, 44 insertions, 6 deletions
| @@ -1836,6 +1836,23 @@ xs_val *list_maint(snac *user, const char *list, int op) | |||
| 1836 | } | 1836 | } |
| 1837 | 1837 | ||
| 1838 | 1838 | ||
| 1839 | xs_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 | |||
| 1839 | xs_val *list_content(snac *user, const char *list, const char *actor_md5, int op) | 1856 | xs_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 | ||
| @@ -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; |
| @@ -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; |
| @@ -175,6 +175,7 @@ void tag_index(const char *id, const xs_dict *obj); | |||
| 175 | xs_list *tag_search(char *tag, int skip, int show); | 175 | xs_list *tag_search(char *tag, int skip, int show); |
| 176 | 176 | ||
| 177 | xs_val *list_maint(snac *user, const char *list, int op); | 177 | xs_val *list_maint(snac *user, const char *list, int op); |
| 178 | xs_list *list_timeline(snac *user, const char *list, int skip, int show); | ||
| 178 | xs_val *list_content(snac *user, const char *list_id, const char *actor_md5, int op); | 179 | xs_val *list_content(snac *user, const char *list_id, const char *actor_md5, int op); |
| 179 | void list_distribute(snac *user, const char *who, const xs_dict *post); | 180 | void list_distribute(snac *user, const char *who, const xs_dict *post); |
| 180 | 181 | ||