From 04aa5c61c4945aaff625d345cce5758a99d9ccd7 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 20 Jul 2022 14:04:09 +0100 Subject: [PATCH] csv download for following accounts --- daemon.py | 48 ++++++++++++++++++++++++++++++++++++----------- webapp_profile.py | 12 ++++++++---- webapp_utils.py | 20 ++++++++++++++++++++ 3 files changed, 65 insertions(+), 15 deletions(-) diff --git a/daemon.py b/daemon.py index badf8c9d7..9acff8c2e 100644 --- a/daemon.py +++ b/daemon.py @@ -168,6 +168,7 @@ from webapp_minimalbutton import is_minimal from webapp_utils import get_avatar_image_url from webapp_utils import html_hashtag_blocked from webapp_utils import html_following_list +from webapp_utils import csv_following_list from webapp_utils import set_blog_address from webapp_utils import html_show_share from webapp_utils import get_pwa_theme_colors @@ -15657,11 +15658,14 @@ class PubServer(BaseHTTPRequestHandler): # is this a html/ssml/icalendar request? html_getreq = False + csv_getreq = False ssml_getreq = False icalendar_getreq = False if self._has_accept(calling_domain): if self._request_http(): html_getreq = True + elif self._request_csv(): + csv_getreq = True elif self._request_ssml(): ssml_getreq = True elif self._request_icalendar(): @@ -16368,8 +16372,9 @@ class PubServer(BaseHTTPRequestHandler): self.server.debug) # show a list of who you are following - if html_getreq and authorized and users_in_path and \ - self.path.endswith('/followingaccounts'): + if (authorized and users_in_path and + (self.path.endswith('/followingaccounts') or + self.path.endswith('/followingaccounts.csv'))): nickname = get_nickname_from_actor(self.path) if not nickname: self._404() @@ -16380,10 +16385,22 @@ class PubServer(BaseHTTPRequestHandler): if not os.path.isfile(following_filename): self._404() return - msg = html_following_list(self.server.base_dir, following_filename) - msglen = len(msg) - self._login_headers('text/html', msglen, calling_domain) - self._write(msg.encode('utf-8')) + if self.path.endswith('/followingaccounts.csv'): + html_getreq = False + csv_getreq = True + if html_getreq: + msg = html_following_list(self.server.base_dir, + following_filename) + msglen = len(msg) + self._login_headers('text/html', msglen, calling_domain) + self._write(msg.encode('utf-8')) + elif csv_getreq: + msg = csv_following_list(following_filename) + msglen = len(msg) + self._login_headers('text/csv', msglen, calling_domain) + self._write(msg.encode('utf-8')) + else: + self._404() fitness_performance(getreq_start_time, self.server.fitness, '_GET', 'following accounts shown', self.server.debug) @@ -16394,7 +16411,7 @@ class PubServer(BaseHTTPRequestHandler): self.server.debug) # show a list of who are your followers - if html_getreq and authorized and users_in_path and \ + if authorized and users_in_path and \ self.path.endswith('/followersaccounts'): nickname = get_nickname_from_actor(self.path) if not nickname: @@ -16406,10 +16423,19 @@ class PubServer(BaseHTTPRequestHandler): if not os.path.isfile(followers_filename): self._404() return - msg = html_following_list(self.server.base_dir, followers_filename) - msglen = len(msg) - self._login_headers('text/html', msglen, calling_domain) - self._write(msg.encode('utf-8')) + if html_getreq: + msg = html_following_list(self.server.base_dir, + followers_filename) + msglen = len(msg) + self._login_headers('text/html', msglen, calling_domain) + self._write(msg.encode('utf-8')) + elif csv_getreq: + msg = csv_following_list(followers_filename) + msglen = len(msg) + self._login_headers('text/csv', msglen, calling_domain) + self._write(msg.encode('utf-8')) + else: + self._404() fitness_performance(getreq_start_time, self.server.fitness, '_GET', 'followers accounts shown', self.server.debug) diff --git a/webapp_profile.py b/webapp_profile.py index 82988bd02..ee60fe7d9 100644 --- a/webapp_profile.py +++ b/webapp_profile.py @@ -1970,7 +1970,7 @@ def _html_edit_profile_background(news_instance: bool, translate: {}) -> str: return edit_profile_form -def _html_edit_profile_contact_info(nickname: str, +def _html_edit_profile_contact_info(nickname: str, domain: str, email_address: str, xmpp_address: str, matrix_address: str, @@ -1998,9 +1998,13 @@ def _html_edit_profile_contact_info(nickname: str, edit_profile_form += \ ' | ' + translate['Following'] + '' edit_profile_form += \ - '' + \ + '' + edit_profile_form += \ + ' |
\n' @@ -2402,7 +2406,7 @@ def html_edit_profile(server, translate: {}, # Contact information edit_profile_form += \ - _html_edit_profile_contact_info(nickname, email_address, + _html_edit_profile_contact_info(nickname, domain, email_address, xmpp_address, matrix_address, ssb_address, tox_address, briar_address, diff --git a/webapp_utils.py b/webapp_utils.py index e9effca61..901dd0d11 100644 --- a/webapp_utils.py +++ b/webapp_utils.py @@ -99,6 +99,26 @@ def html_following_list(base_dir: str, following_filename: str) -> str: return '' +def csv_following_list(following_filename: str) -> str: + """Returns a csv of handles being followed + """ + with open(following_filename, 'r', encoding='utf-8') as following_file: + msg = following_file.read() + following_list = msg.split('\n') + following_list.sort() + if following_list: + following_list_csv = '' + for following_address in following_list: + if not following_address: + continue + if following_list_csv: + following_list_csv += '\n' + following_list_csv += following_address + ',true' + msg = 'Account address,Show boosts\n' + following_list_csv + return msg + return '' + + def html_hashtag_blocked(base_dir: str, translate: {}) -> str: """Show the screen for a blocked hashtag """