diff options
| author | 2022-11-04 08:48:15 +0100 | |
|---|---|---|
| committer | 2022-11-04 08:48:15 +0100 | |
| commit | 8b252dab84e45de924fb55ef9a85131769c477bc (patch) | |
| tree | 273501204f5856753769d0337191bc182f492277 | |
| parent | Updated TODO. (diff) | |
| download | snac2-8b252dab84e45de924fb55ef9a85131769c477bc.tar.gz snac2-8b252dab84e45de924fb55ef9a85131769c477bc.tar.xz snac2-8b252dab84e45de924fb55ef9a85131769c477bc.zip | |
New 'Hide' button.
| -rw-r--r-- | data.c | 31 | ||||
| -rw-r--r-- | html.c | 13 | ||||
| -rw-r--r-- | snac.h | 1 | ||||
| -rw-r--r-- | utils.c | 1 |
4 files changed, 45 insertions, 1 deletions
| @@ -627,6 +627,37 @@ void timeline_admire(snac *snac, char *id, char *admirer, int like) | |||
| 627 | } | 627 | } |
| 628 | 628 | ||
| 629 | 629 | ||
| 630 | int timeline_hide(snac *snac, char *id, int hide) | ||
| 631 | /* hides/unhides a timeline entry */ | ||
| 632 | { | ||
| 633 | int ret = 0; | ||
| 634 | xs *fn = _timeline_find_fn(snac, id); | ||
| 635 | FILE *f; | ||
| 636 | |||
| 637 | if (fn != NULL && (f = fopen(fn, "r")) != NULL) { | ||
| 638 | xs *s1 = xs_readall(f); | ||
| 639 | xs *msg = xs_json_loads(s1); | ||
| 640 | xs *meta = xs_dup(xs_dict_get(msg, "_snac")); | ||
| 641 | |||
| 642 | fclose(f); | ||
| 643 | |||
| 644 | meta = xs_dict_set(meta, "hidden", xs_val_new(hide ? XSTYPE_TRUE : XSTYPE_FALSE)); | ||
| 645 | msg = xs_dict_set(msg, "_snac", meta); | ||
| 646 | |||
| 647 | if ((f = fopen(fn, "w")) != NULL) { | ||
| 648 | xs *j1 = xs_json_dumps_pp(msg, 4); | ||
| 649 | |||
| 650 | fwrite(j1, strlen(j1), 1, f); | ||
| 651 | fclose(f); | ||
| 652 | |||
| 653 | ret = 1; | ||
| 654 | } | ||
| 655 | } | ||
| 656 | |||
| 657 | return ret; | ||
| 658 | } | ||
| 659 | |||
| 660 | |||
| 630 | d_char *_following_fn(snac *snac, char *actor) | 661 | d_char *_following_fn(snac *snac, char *actor) |
| 631 | { | 662 | { |
| 632 | xs *md5 = xs_md5_hex(actor, strlen(actor)); | 663 | xs *md5 = xs_md5_hex(actor, strlen(actor)); |
| @@ -435,6 +435,7 @@ d_char *html_entry_controls(snac *snac, d_char *os, char *msg, int num) | |||
| 435 | s = html_button(s, "mute", L("MUTE")); | 435 | s = html_button(s, "mute", L("MUTE")); |
| 436 | } | 436 | } |
| 437 | 437 | ||
| 438 | s = html_button(s, "hide", L("Hide")); | ||
| 438 | s = html_button(s, "delete", L("Delete")); | 439 | s = html_button(s, "delete", L("Delete")); |
| 439 | 440 | ||
| 440 | s = xs_str_cat(s, "</form>\n"); | 441 | s = xs_str_cat(s, "</form>\n"); |
| @@ -489,6 +490,12 @@ d_char *html_entry(snac *snac, d_char *os, char *msg, xs_set *seen, int local, i | |||
| 489 | 490 | ||
| 490 | xs *s = xs_str_new(NULL); | 491 | xs *s = xs_str_new(NULL); |
| 491 | 492 | ||
| 493 | /* top wrap */ | ||
| 494 | if ((v = xs_dict_get(meta, "hidden")) && xs_type(v) == XSTYPE_TRUE) | ||
| 495 | s = xs_str_cat(s, "<div style=\"display: none\">\n"); | ||
| 496 | else | ||
| 497 | s = xs_str_cat(s, "<div>\n"); | ||
| 498 | |||
| 492 | if (level == 0) { | 499 | if (level == 0) { |
| 493 | xs *s1 = xs_fmt("<a name=\"%d_entry\"></a>\n", *num); | 500 | xs *s1 = xs_fmt("<a name=\"%d_entry\"></a>\n", *num); |
| 494 | 501 | ||
| @@ -738,7 +745,7 @@ d_char *html_entry(snac *snac, d_char *os, char *msg, xs_set *seen, int local, i | |||
| 738 | s = xs_str_cat(s, "</div>\n"); | 745 | s = xs_str_cat(s, "</div>\n"); |
| 739 | } | 746 | } |
| 740 | 747 | ||
| 741 | s = xs_str_cat(s, "</div>\n"); | 748 | s = xs_str_cat(s, "</div>\n</div>\n"); |
| 742 | 749 | ||
| 743 | return xs_str_cat(os, s); | 750 | return xs_str_cat(os, s); |
| 744 | } | 751 | } |
| @@ -1194,6 +1201,10 @@ int html_post_handler(d_char *req, char *q_path, d_char *payload, int p_size, | |||
| 1194 | unmute(&snac, actor); | 1201 | unmute(&snac, actor); |
| 1195 | } | 1202 | } |
| 1196 | else | 1203 | else |
| 1204 | if (strcmp(action, L("Hide")) == 0) { | ||
| 1205 | timeline_hide(&snac, id, 1); | ||
| 1206 | } | ||
| 1207 | else | ||
| 1197 | if (strcmp(action, L("Follow")) == 0) { | 1208 | if (strcmp(action, L("Follow")) == 0) { |
| 1198 | xs *msg = msg_follow(&snac, actor); | 1209 | xs *msg = msg_follow(&snac, actor); |
| 1199 | 1210 | ||
| @@ -65,6 +65,7 @@ d_char *timeline_get(snac *snac, char *fn); | |||
| 65 | d_char *timeline_list(snac *snac, int max); | 65 | d_char *timeline_list(snac *snac, int max); |
| 66 | int timeline_add(snac *snac, char *id, char *o_msg, char *parent, char *referrer); | 66 | int timeline_add(snac *snac, char *id, char *o_msg, char *parent, char *referrer); |
| 67 | void timeline_admire(snac *snac, char *id, char *admirer, int like); | 67 | void timeline_admire(snac *snac, char *id, char *admirer, int like); |
| 68 | int timeline_hide(snac *snac, char *id, int hide); | ||
| 68 | 69 | ||
| 69 | d_char *local_list(snac *snac, int max); | 70 | d_char *local_list(snac *snac, int max); |
| 70 | 71 | ||
| @@ -46,6 +46,7 @@ const char *default_css = | |||
| 46 | ".snac-btn-unmute { float: right; margin-left: 0.5em }\n" | 46 | ".snac-btn-unmute { float: right; margin-left: 0.5em }\n" |
| 47 | ".snac-btn-follow { float: right; margin-left: 0.5em }\n" | 47 | ".snac-btn-follow { float: right; margin-left: 0.5em }\n" |
| 48 | ".snac-btn-unfollow { float: right; margin-left: 0.5em }\n" | 48 | ".snac-btn-unfollow { float: right; margin-left: 0.5em }\n" |
| 49 | ".snac-btn-hide { float: right; margin-left: 0.5em }\n" | ||
| 49 | ".snac-btn-delete { float: right; margin-left: 0.5em }\n" | 50 | ".snac-btn-delete { float: right; margin-left: 0.5em }\n" |
| 50 | ".snac-footer { margin-top: 2em; font-size: 75% }\n"; | 51 | ".snac-footer { margin-top: 2em; font-size: 75% }\n"; |
| 51 | 52 | ||