diff options
| author | 2025-01-22 10:07:39 +0100 | |
|---|---|---|
| committer | 2025-01-22 10:07:39 +0100 | |
| commit | ac663a6b4dd5eee1fb3c676524b8e141eb2529ed (patch) | |
| tree | 1da85c4139f672ef6d05ae1ae90cbad812a64d88 /activitypub.c | |
| parent | Updated RELEASE_NOTES. (diff) | |
| download | snac2-ac663a6b4dd5eee1fb3c676524b8e141eb2529ed.tar.gz snac2-ac663a6b4dd5eee1fb3c676524b8e141eb2529ed.tar.xz snac2-ac663a6b4dd5eee1fb3c676524b8e141eb2529ed.zip | |
Moved followed hashtag check to its own function.
Diffstat (limited to 'activitypub.c')
| -rw-r--r-- | activitypub.c | 60 |
1 files changed, 36 insertions, 24 deletions
diff --git a/activitypub.c b/activitypub.c index 8fa29c9..b505fbb 100644 --- a/activitypub.c +++ b/activitypub.c | |||
| @@ -587,6 +587,40 @@ int is_msg_from_private_user(const xs_dict *msg) | |||
| 587 | } | 587 | } |
| 588 | 588 | ||
| 589 | 589 | ||
| 590 | int followed_hashtag_check(snac *user, const xs_dict *msg) | ||
| 591 | /* returns true if this message contains a hashtag followed by me */ | ||
| 592 | { | ||
| 593 | const xs_list *fw_tags = xs_dict_get(user->config, "followed_hashtags"); | ||
| 594 | |||
| 595 | if (xs_is_list(fw_tags)) { | ||
| 596 | const xs_list *tags_in_msg = xs_dict_get(msg, "tag"); | ||
| 597 | |||
| 598 | if (xs_is_list(tags_in_msg)) { | ||
| 599 | const xs_dict *te; | ||
| 600 | |||
| 601 | /* iterate the tags in the message */ | ||
| 602 | xs_list_foreach(tags_in_msg, te) { | ||
| 603 | if (xs_is_dict(te)) { | ||
| 604 | const char *type = xs_dict_get(te, "type"); | ||
| 605 | const char *name = xs_dict_get(te, "name"); | ||
| 606 | |||
| 607 | if (xs_is_string(type) && xs_is_string(name)) { | ||
| 608 | if (strcmp(type, "Hashtag") == 0) { | ||
| 609 | xs *lc_name = xs_utf8_to_lower(name); | ||
| 610 | |||
| 611 | if (xs_list_in(fw_tags, lc_name) != -1) | ||
| 612 | return 1; | ||
| 613 | } | ||
| 614 | } | ||
| 615 | } | ||
| 616 | } | ||
| 617 | } | ||
| 618 | } | ||
| 619 | |||
| 620 | return 0; | ||
| 621 | } | ||
| 622 | |||
| 623 | |||
| 590 | int is_msg_for_me(snac *snac, const xs_dict *c_msg) | 624 | int is_msg_for_me(snac *snac, const xs_dict *c_msg) |
| 591 | /* checks if this message is for me */ | 625 | /* checks if this message is for me */ |
| 592 | { | 626 | { |
| @@ -708,30 +742,8 @@ int is_msg_for_me(snac *snac, const xs_dict *c_msg) | |||
| 708 | } | 742 | } |
| 709 | 743 | ||
| 710 | /* does this message contain a tag we are following? */ | 744 | /* does this message contain a tag we are following? */ |
| 711 | const xs_list *fw_tags = xs_dict_get(snac->config, "followed_hashtags"); | 745 | if (pub_msg && followed_hashtag_check(snac, msg)) |
| 712 | if (pub_msg && xs_type(fw_tags) == XSTYPE_LIST) { | 746 | return 7; |
| 713 | const xs_list *tags_in_msg = xs_dict_get(msg, "tag"); | ||
| 714 | if (xs_type(tags_in_msg) == XSTYPE_LIST) { | ||
| 715 | const xs_dict *te; | ||
| 716 | |||
| 717 | /* iterate the tags in the message */ | ||
| 718 | xs_list_foreach(tags_in_msg, te) { | ||
| 719 | if (xs_type(te) == XSTYPE_DICT) { | ||
| 720 | const char *type = xs_dict_get(te, "type"); | ||
| 721 | const char *name = xs_dict_get(te, "name"); | ||
| 722 | |||
| 723 | if (xs_type(type) == XSTYPE_STRING && xs_type(name) == XSTYPE_STRING) { | ||
| 724 | if (strcmp(type, "Hashtag") == 0) { | ||
| 725 | xs *lc_name = xs_utf8_to_lower(name); | ||
| 726 | |||
| 727 | if (xs_list_in(fw_tags, lc_name) != -1) | ||
| 728 | return 7; | ||
| 729 | } | ||
| 730 | } | ||
| 731 | } | ||
| 732 | } | ||
| 733 | } | ||
| 734 | } | ||
| 735 | 747 | ||
| 736 | return 0; | 748 | return 0; |
| 737 | } | 749 | } |