__filename__ = "conversation.py" __author__ = "Bob Mottram" __license__ = "AGPL3+" __version__ = "1.3.0" __maintainer__ = "Bob Mottram" __email__ = "bob@libreserver.org" __status__ = "Production" __module_group__ = "Timeline" import os from utils import has_object_dict from utils import acct_dir from utils import remove_id_ending from utils import text_in_file def _get_conversation_filename(base_dir: str, nickname: str, domain: str, post_json_object: {}) -> str: """Returns the conversation filename """ if not has_object_dict(post_json_object): return None if not post_json_object['object'].get('conversation'): return None if not post_json_object['object'].get('id'): return None conversation_dir = acct_dir(base_dir, nickname, domain) + '/conversation' if not os.path.isdir(conversation_dir): os.mkdir(conversation_dir) conversation_id = post_json_object['object']['conversation'] conversation_id = conversation_id.replace('/', '#') return conversation_dir + '/' + conversation_id def update_conversation(base_dir: str, nickname: str, domain: str, post_json_object: {}) -> bool: """Ads a post to a conversation index in the /conversation subdirectory """ conversation_filename = \ _get_conversation_filename(base_dir, nickname, domain, post_json_object) if not conversation_filename: return False post_id = remove_id_ending(post_json_object['object']['id']) if not os.path.isfile(conversation_filename): try: with open(conversation_filename, 'w+', encoding='utf-8') as conv_file: conv_file.write(post_id + '\n') return True except OSError: print('EX: update_conversation ' + 'unable to write to ' + conversation_filename) elif not text_in_file(post_id + '\n', conversation_filename): try: with open(conversation_filename, 'a+', encoding='utf-8') as conv_file: conv_file.write(post_id + '\n') return True except OSError: print('EX: update_conversation 2 ' + 'unable to write to ' + conversation_filename) return False def mute_conversation(base_dir: str, nickname: str, domain: str, conversation_id: str) -> None: """Mutes the given conversation """ conversation_dir = acct_dir(base_dir, nickname, domain) + '/conversation' conversation_filename = \ conversation_dir + '/' + conversation_id.replace('/', '#') if not os.path.isfile(conversation_filename): return if os.path.isfile(conversation_filename + '.muted'): return try: with open(conversation_filename + '.muted', 'w+', encoding='utf-8') as conv_file: conv_file.write('\n') except OSError: print('EX: unable to write mute ' + conversation_filename) def unmute_conversation(base_dir: str, nickname: str, domain: str, conversation_id: str) -> None: """Unmutes the given conversation """ conversation_dir = acct_dir(base_dir, nickname, domain) + '/conversation' conversation_filename = \ conversation_dir + '/' + conversation_id.replace('/', '#') if not os.path.isfile(conversation_filename): return if not os.path.isfile(conversation_filename + '.muted'): return try: os.remove(conversation_filename + '.muted') except OSError: print('EX: unmute_conversation unable to delete ' + conversation_filename + '.muted')