add tags to content for posting

This commit is contained in:
Your Name 2024-06-04 11:06:12 -04:00 committed by Henri Dickson
parent db5519048b
commit a20779ce31
5 changed files with 19 additions and 24 deletions

View file

@ -125,6 +125,15 @@ class Mark:
def tags(self) -> list[str]: def tags(self) -> list[str]:
return self.owner.tag_manager.get_item_tags(self.item) return self.owner.tag_manager.get_item_tags(self.item)
@cached_property
def tag_text(self) -> str:
tags = [f"#{t}" for t in self.tags]
appending = self.owner.user.preference.mastodon_append_tag
if appending:
tags.append(appending)
tag_text = f"\n{' '.join(tags)}\n" if tags else ""
return tag_text
@cached_property @cached_property
def rating(self): def rating(self):
return Rating.objects.filter(owner=self.owner, item=self.item).first() return Rating.objects.filter(owner=self.owner, item=self.item).first()

View file

@ -55,13 +55,13 @@ class Tag(List):
@staticmethod @staticmethod
def cleanup_title(title, replace=True): def cleanup_title(title, replace=True):
t = re.sub(r"\s+", " ", title.strip()) t = re.sub(r"\s+", " ", title.rstrip().lstrip("# "))
return "_" if not title and replace else t return "_" if not t and replace else t
@staticmethod @staticmethod
def deep_cleanup_title(title): def deep_cleanup_title(title):
"""Remove all non-word characters, only for public index purpose""" """Remove all non-word characters, only for public index purpose"""
return re.sub(r"\W+", " ", title).strip() return re.sub(r"\W+", " ", title).rstrip().lstrip("# ").lower() or "_"
class TagManager: class TagManager:
@ -78,7 +78,7 @@ class TagManager:
[ [
t t
for t in set(map(lambda t: Tag.deep_cleanup_title(t["title"]), tags)) for t in set(map(lambda t: Tag.deep_cleanup_title(t["title"]), tags))
if t if t and t != "_"
] ]
) )
return tag_titles return tag_titles

View file

@ -144,6 +144,10 @@ class TagTest(TestCase):
self.user2 = User.register(email="x@b.com", username="user2") self.user2 = User.register(email="x@b.com", username="user2")
self.user3 = User.register(email="y@b.com", username="user3") self.user3 = User.register(email="y@b.com", username="user3")
def test_cleanup(self):
self.assertEqual(Tag.cleanup_title("# "), "_")
self.assertEqual(Tag.deep_cleanup_title("# C "), "c")
def test_user_tag(self): def test_user_tag(self):
t1 = "tag 1" t1 = "tag 1"
t2 = "tag 2" t2 = "tag 2"

View file

@ -590,23 +590,13 @@ def share_mark(mark, post_as_new=False):
user = mark.owner.user user = mark.owner.user
visibility = get_toot_visibility(mark.visibility, user) visibility = get_toot_visibility(mark.visibility, user)
tags = (
"\n"
+ user.preference.mastodon_append_tag.replace(
"[category]", str(ItemCategory(mark.item.category).label)
)
if user.preference.mastodon_append_tag
else ""
)
site = MastodonApplication.objects.filter(domain_name=user.mastodon_site).first() site = MastodonApplication.objects.filter(domain_name=user.mastodon_site).first()
stars = rating_to_emoji( stars = rating_to_emoji(
mark.rating_grade, mark.rating_grade,
site.star_mode if site else 0, site.star_mode if site else 0,
) )
spoiler_text, txt = get_spoiler_text(mark.comment_text or "", mark.item) spoiler_text, txt = get_spoiler_text(mark.comment_text or "", mark.item)
content = ( content = f"{mark.get_action_for_feed()} {stars}\n{mark.item.absolute_url}\n{txt}{mark.tag_text}"
f"{mark.get_action_for_feed()} {stars}\n{mark.item.absolute_url}\n{txt}{tags}"
)
update_id = ( update_id = (
None None
if post_as_new if post_as_new

View file

@ -686,19 +686,11 @@ class Takahe:
from catalog.common import ItemCategory from catalog.common import ItemCategory
user = mark.owner.user user = mark.owner.user
tags = (
user.preference.mastodon_append_tag.replace(
"[category]", str(ItemCategory(mark.item.category).label)
)
+ "\n"
if user.preference.mastodon_append_tag
else ""
)
stars = _rating_to_emoji(mark.rating_grade, 1) stars = _rating_to_emoji(mark.rating_grade, 1)
item_link = f"{settings.SITE_INFO['site_url']}/~neodb~{mark.item.url}" item_link = f"{settings.SITE_INFO['site_url']}/~neodb~{mark.item.url}"
pre_conetent = mark.get_action_for_feed(item_link=item_link) pre_conetent = mark.get_action_for_feed(item_link=item_link)
spoiler, txt = Takahe.get_spoiler_text(mark.comment_text, mark.item) spoiler, txt = Takahe.get_spoiler_text(mark.comment_text, mark.item)
content = f"{stars} \n{txt}\n{tags}" content = f"{stars} \n{txt}\n{mark.tag_text}"
data = { data = {
"object": { "object": {
"tag": [mark.item.ap_object_ref], "tag": [mark.item.ap_object_ref],