Set featured hashtags from edit profile screen

main
Bob Mottram 2023-05-02 23:21:03 +01:00
parent b8c74cff96
commit 1a6bc85d17
3 changed files with 97 additions and 41 deletions

View File

@ -63,6 +63,8 @@ from donate import get_website
from donate import set_website
from donate import get_gemini_link
from donate import set_gemini_link
from person import get_featured_hashtags
from person import set_featured_hashtags
from person import clear_person_qrcodes
from person import add_alternate_domains
from person import add_actor_update_timestamp
@ -7103,6 +7105,21 @@ class PubServer(BaseHTTPRequestHandler):
set_occupation_name(actor_json, '')
actor_changed = True
# featured hashtags on edit profile screen
featured_hashtags = get_featured_hashtags(actor_json)
if fields.get('featuredHashtags'):
fields['featuredHashtags'] = \
remove_html(fields['featuredHashtags'])
if featured_hashtags != \
fields['featuredHashtags']:
set_featured_hashtags(actor_json,
fields['featuredHashtags'])
actor_changed = True
else:
if featured_hashtags:
set_featured_hashtags(actor_json, '')
actor_changed = True
# Other accounts (alsoKnownAs)
also_known_as = []
if actor_json.get('alsoKnownAs'):

View File

@ -38,6 +38,7 @@ from roles import set_role
from roles import actor_roles_from_list
from roles import get_actor_roles_list
from media import process_meta_data
from utils import valid_hash_tag
from utils import acct_handle_dir
from utils import safe_system_string
from utils import get_attachment_property_value
@ -1904,3 +1905,80 @@ def valid_sending_actor(session, base_dir: str,
store_person_in_cache(base_dir, sending_actor, actor_json,
person_cache, False)
return True
def get_featured_hashtags(actor_json: {}) -> str:
"""returns a string containing featured hashtags
"""
result = ''
if not actor_json.get('tag'):
return result
if not isinstance(actor_json['tag'], list):
return result
for tag_dict in actor_json['tag']:
if not tag_dict.get('type'):
continue
if not isinstance(tag_dict['type'], str):
continue
if not tag_dict['type'].endswith('Hashtag'):
continue
if not tag_dict.get('name'):
continue
if not isinstance(tag_dict['name'], str):
continue
if not tag_dict.get('href'):
continue
if not isinstance(tag_dict['href'], str):
continue
tag_name = tag_dict['name']
if not tag_name:
continue
if tag_name.startswith('#'):
tag_name = tag_name[1:]
if not tag_name:
continue
tag_url = tag_dict['href']
if '://' not in tag_url or '.' not in tag_url:
continue
if not valid_hash_tag(tag_name):
continue
result += '#' + tag_name + ' '
return result.strip()
def set_featured_hashtags(actor_json: {}, hashtags: str) -> None:
"""sets featured hashtags
"""
separator_str = ' '
separators = (' ', ',')
for separator_str in separators:
if separator_str in hashtags:
break
tag_list = hashtags.split(separator_str)
result = []
tags_used = []
for tag_str in tag_list:
if not tag_str:
continue
if not tag_str.startswith('#'):
tag_str = '#' + tag_str
if tag_str in tags_used:
continue
url = \
actor_json['id'] + '/tags/' + tag_str.replace('#', '')
result.append({
"name": tag_str,
"type": "Hashtag",
"href": url
})
tags_used.append(tag_str)
# add any non-hashtags to the result
if actor_json.get('tag'):
for tag_dict in actor_json['tag']:
if not tag_dict.get('type'):
continue
if not isinstance(tag_dict['type'], str):
continue
if tag_dict['type'] != 'Hashtag':
result.append(tag_dict)
actor_json['tag'] = result

View File

@ -10,7 +10,6 @@ __module_group__ = "Web Interface"
import os
from pprint import pprint
from webfinger import webfinger_handle
from utils import valid_hash_tag
from utils import remove_id_ending
from utils import standardize_text
from utils import get_display_name
@ -37,6 +36,7 @@ from utils import remove_eol
from languages import get_actor_languages
from skills import get_skills
from theme import get_themes_list
from person import get_featured_hashtags
from person import person_box_json
from person import get_actor_json
from person import get_person_avatar_url
@ -2576,45 +2576,6 @@ def _html_edit_profile_top_banner(base_dir: str,
return edit_profile_form
def _get_featured_hashtags(actor_json: {}) -> str:
"""returns a string containing featured hashtags
"""
result = ''
if not actor_json.get('tag'):
return result
if not isinstance(actor_json['tag'], list):
return result
for tag_dict in actor_json['tag']:
if not tag_dict.get('type'):
continue
if not isinstance(tag_dict['type'], str):
continue
if not tag_dict['type'].endswith('Hashtag'):
continue
if not tag_dict.get('name'):
continue
if not isinstance(tag_dict['name'], str):
continue
if not tag_dict.get('href'):
continue
if not isinstance(tag_dict['href'], str):
continue
tag_name = tag_dict['name']
if not tag_name:
continue
if tag_name.startswith('#'):
tag_name = tag_name[1:]
if not tag_name:
continue
tag_url = tag_dict['href']
if '://' not in tag_url or '.' not in tag_url:
continue
if not valid_hash_tag(tag_name):
continue
result += '#' + tag_name + ' '
return result.strip()
def html_edit_profile(server, translate: {},
base_dir: str, path: str,
domain: str, port: int,
@ -2668,7 +2629,7 @@ def html_edit_profile(server, translate: {},
if actor_json:
if actor_json.get('movedTo'):
moved_to = actor_json['movedTo']
featured_hashtags = _get_featured_hashtags(actor_json)
featured_hashtags = get_featured_hashtags(actor_json)
donate_url = get_donation_url(actor_json)
website_url = get_website(actor_json, translate)
gemini_link = get_gemini_link(actor_json, translate)