Search following and mutuals within searchableBy

merge-requests/30/head
Bob Mottram 2024-10-12 21:37:44 +01:00
parent 53545813e5
commit f45a6aff9e
1 changed files with 37 additions and 22 deletions

View File

@ -3031,6 +3031,26 @@ def _get_mutuals_of_person(base_dir: str,
return mutuals return mutuals
def _actor_in_searchable_by(searchable_by: str, following_list: []) -> bool:
"""Does the given actor within searchable_by exist within the given list?
"""
data_actor = searchable_by.split('/followers')[0]
if '"' in data_actor:
data_actor = data_actor.split('"')[-1]
if data_actor not in following_list:
data_nickname = get_nickname_from_actor(data_actor)
data_domain, data_port = get_domain_from_actor(data_actor)
if not data_nickname or not data_domain:
return False
data_domain_full = get_full_domain(data_domain, data_port)
data_handle = data_nickname + '@' + data_domain_full
if data_handle not in following_list:
return False
return True
def search_box_posts(base_dir: str, nickname: str, domain: str, def search_box_posts(base_dir: str, nickname: str, domain: str,
search_str: str, max_results: int, search_str: str, max_results: int,
box_name='outbox') -> []: box_name='outbox') -> []:
@ -3054,11 +3074,15 @@ def search_box_posts(base_dir: str, nickname: str, domain: str,
else: else:
search_words = [search_str] search_words = [search_str]
following_list = []
mutuals_list = [] mutuals_list = []
check_searchable_by = False check_searchable_by = False
if box_name == 'inbox': if box_name == 'inbox':
check_searchable_by = True check_searchable_by = True
# create a string containing all of the mutuals # create a list containing all of the handles followed
following_list = get_followers_list(base_dir, nickname, domain,
'following.txt')
# create a list containing all of the mutuals
mutuals_list = _get_mutuals_of_person(base_dir, nickname, domain) mutuals_list = _get_mutuals_of_person(base_dir, nickname, domain)
res = [] res = []
@ -3089,29 +3113,20 @@ def search_box_posts(base_dir: str, nickname: str, domain: str,
searchable_by = searchable_by.split(']')[0] searchable_by = searchable_by.split(']')[0]
if '"' in searchable_by: if '"' in searchable_by:
searchable_by = searchable_by.split('"')[1] searchable_by = searchable_by.split('"')[1]
elif "'" in searchable_by:
searchable_by = searchable_by.split("'")[1]
else: else:
continue continue
if '#Public' not in searchable_by and \ if '#Public' not in searchable_by:
'/followers' not in searchable_by: if '/followers' in searchable_by and \
if '/mutuals' in searchable_by and mutuals_list: following_list:
data_actor = \ if not _actor_in_searchable_by(searchable_by,
searchable_by.split('/mutuals')[0] following_list):
if '"' in data_actor: continue
data_actor = data_actor.split('"')[-1] elif '/mutuals' in searchable_by and mutuals_list:
if data_actor not in mutuals_list: if not _actor_in_searchable_by(searchable_by,
data_nickname = \ mutuals_list):
get_nickname_from_actor(data_actor) continue
data_domain, data_port = \
get_domain_from_actor(data_actor)
if not data_nickname or \
not data_domain:
continue
data_domain_full = \
get_full_domain(data_domain, data_port)
data_handle = \
data_nickname + '@' + data_domain_full
if data_handle not in mutuals_list:
continue
else: else:
continue continue