Set number of preview posts on profile screen

merge-requests/30/head
Bob Mottram 2022-11-26 11:34:41 +00:00
parent 01ca986483
commit cc318218e0
3 changed files with 64 additions and 28 deletions

View File

@ -83,6 +83,8 @@ from person import remove_account
from person import can_remove_post
from person import person_snooze
from person import person_unsnooze
from posts import get_max_profile_posts
from posts import set_max_profile_posts
from posts import get_post_expiry_keep_dms
from posts import set_post_expiry_keep_dms
from posts import get_post_expiry_days
@ -6513,6 +6515,21 @@ class PubServer(BaseHTTPRequestHandler):
set_post_expiry_days(base_dir, nickname, domain, 0)
actor_changed = True
# set maximum preview posts on profile screen
max_profile_posts = \
get_max_profile_posts(base_dir, nickname, domain,
self.server.max_recent_posts)
if fields.get('maxRecentProfilePosts'):
if fields['maxRecentProfilePosts'] != \
str(max_profile_posts):
max_profile_posts = \
fields['maxRecentProfilePosts']
set_max_profile_posts(base_dir, nickname, domain,
max_profile_posts)
else:
set_max_profile_posts(base_dir, nickname, domain,
self.server.max_recent_posts)
# change tox address
current_tox_address = get_tox_address(actor_json)
if fields.get('toxAddress'):

View File

@ -5971,3 +5971,46 @@ def get_original_post_from_announce_url(announce_url: str, base_dir: str,
url = orig_post_id
return actor, url, orig_filename
def get_max_profile_posts(base_dir: str, nickname: str, domain: str,
max_recent_posts: int) -> int:
"""Returns the maximum number of posts to show on the profile screen
"""
max_posts_filename = \
acct_dir(base_dir, nickname, domain) + '/max_profile_posts.txt'
if not os.path.isfile(max_posts_filename):
return max_recent_posts
max_profile_posts = max_recent_posts
try:
with open(max_posts_filename, 'r', encoding='utf-8') as fp_posts:
max_posts_str = fp_posts.read()
if max_posts_str:
if max_posts_str.isdigit():
max_profile_posts = int(max_posts_str)
except OSError:
print('EX: unable to read maximum profile posts ' +
max_posts_filename)
if max_profile_posts < 1:
max_profile_posts = 1
if max_profile_posts > 20:
max_profile_posts = 20
return max_profile_posts
def set_max_profile_posts(base_dir: str, nickname: str, domain: str,
max_recent_posts: int) -> bool:
"""Sets the maximum number of posts to show on the profile screen
"""
max_posts_filename = \
acct_dir(base_dir, nickname, domain) + '/max_profile_posts.txt'
max_recent_posts_str = str(max_recent_posts)
try:
with open(max_posts_filename, 'w+',
encoding='utf-8') as fp_posts:
fp_posts.write(max_recent_posts_str)
except OSError:
print('EX: unable to save maximum profile posts ' +
max_posts_filename)
return False
return True

View File

@ -44,6 +44,7 @@ from posts import get_person_box
from posts import is_moderator
from posts import parse_user_feed
from posts import is_create_inside_announce
from posts import get_max_profile_posts
from donate import get_donation_url
from donate import get_website
from donate import get_gemini_link
@ -611,31 +612,6 @@ def _get_profile_header_after_search(nickname: str, default_timeline: str,
return html_str
def _get_max_profile_posts(base_dir: str, nickname: str, domain: str,
max_recent_posts: int) -> int:
"""Returns the maximum number of posts to show on the profile screen
"""
max_posts_filename = \
acct_dir(base_dir, nickname, domain) + '/max_profile_posts.txt'
if not os.path.isfile(max_posts_filename):
return max_recent_posts
max_profile_posts = max_recent_posts
try:
with open(max_posts_filename, 'r', encoding='utf-8') as fp_posts:
max_posts_str = fp_posts.read()
if max_posts_str:
if max_posts_str.isdigit():
max_profile_posts = int(max_posts_str)
except OSError:
print('EX: unable to read maximum profile posts ' +
max_posts_filename)
if max_profile_posts < 1:
max_profile_posts = 1
if max_profile_posts > 20:
max_profile_posts = 20
return max_profile_posts
def html_profile(signing_priv_key_pem: str,
rss_icon_at_top: bool,
icons_as_buttons: bool,
@ -1096,7 +1072,7 @@ def html_profile(signing_priv_key_pem: str,
translate['Get the source code'] + '" src="/icons/agpl.png" /></a>'
if selected == 'posts':
max_profile_posts = _get_max_profile_posts(base_dir, nickname, domain,
max_profile_posts = get_max_profile_posts(base_dir, nickname, domain,
max_recent_posts)
min_images_for_accounts = []
profile_str += \
@ -2335,7 +2311,7 @@ def _html_edit_profile_main(base_dir: str, display_nickname: str, bio_str: str,
'expiryKeepDMs', keep_dms)
max_profile_posts = \
_get_max_profile_posts(base_dir, nickname, domain, max_recent_posts)
get_max_profile_posts(base_dir, nickname, domain, max_recent_posts)
edit_profile_form += \
edit_number_field(translate['Preview posts on profile screen'],
'maxRecentProfilePosts', max_profile_posts,