Add support for Loops

main
bashrc 2026-05-07 21:17:36 +01:00
parent b204675bf8
commit 9c53f4e11e
68 changed files with 736 additions and 63 deletions

23
blog.py
View File

@ -318,6 +318,7 @@ def _html_blog_post_content(debug: bool, session, authorized: bool,
post_json_object: {},
handle: str, restrict_to_domain: bool,
peertube_instances: [],
loops_instances: [],
system_language: str,
person_cache: {},
blog_separator: str) -> str:
@ -410,7 +411,9 @@ def _html_blog_post_content(debug: bool, session, authorized: bool,
blog_str += '<br><center>' + attachment_str + '</center>'
if json_content:
content_str = add_embedded_elements(translate, json_content,
peertube_instances, domain_full)
peertube_instances,
loops_instances,
domain_full)
if post_json_object['object'].get('tag'):
post_json_object_tags = post_json_object['object']['tag']
content_str = replace_emoji_from_tags(session, base_dir,
@ -596,6 +599,7 @@ def html_blog_post(session, authorized: bool,
nickname: str, domain: str, domain_full: str,
post_json_object: {},
peertube_instances: [],
loops_instances: [],
system_language: str, person_cache: {},
debug: bool, content_license_url: str) -> str:
"""Returns a html blog post
@ -630,7 +634,9 @@ def html_blog_post(session, authorized: bool,
nickname, domain,
domain_full, post_json_object,
None, False,
peertube_instances, system_language,
peertube_instances,
loops_instances,
system_language,
person_cache, '<hr>')
# show rss links
@ -659,7 +665,9 @@ def html_blog_page(authorized: bool, session,
base_dir: str, http_prefix: str, translate: {},
nickname: str, domain: str, port: int,
no_of_items: int, page_number: int,
peertube_instances: [], system_language: str,
peertube_instances: [],
loops_instances: [],
system_language: str,
person_cache: {}, debug: bool) -> str:
"""Returns a html blog page containing posts
"""
@ -724,8 +732,8 @@ def html_blog_page(authorized: bool, session,
base_dir, http_prefix, translate,
nickname, domain, domain_full, item,
None, True, peertube_instances,
system_language, person_cache,
'<hr>')
loops_instances, system_language,
person_cache, '<hr>')
if len(timeline_json['orderedItems']) >= no_of_items:
blog_str += navigate_str
@ -868,7 +876,9 @@ def html_blog_view(authorized: bool,
session, base_dir: str, http_prefix: str,
translate: {}, domain: str, port: int,
no_of_items: int,
peertube_instances: [], system_language: str,
peertube_instances: [],
loops_instances: [],
system_language: str,
person_cache: {}, debug: bool) -> str:
"""Show the blog main page
"""
@ -891,6 +901,7 @@ def html_blog_view(authorized: bool,
base_dir, http_prefix, translate,
nickname, domain, port,
no_of_items, 1, peertube_instances,
loops_instances,
system_language, person_cache, debug)
domain_full = get_full_domain(domain, port)

View File

@ -40,6 +40,7 @@ from blocking import set_broch_mode
from webapp_utils import load_buy_sites
from webapp_accesskeys import load_access_keys_for_accounts
from webapp_media import load_peertube_instances
from webapp_media import load_loops_instances
from shares import run_federated_shares_daemon
from shares import run_federated_shares_watchdog
from shares import create_shared_item_federation_token
@ -475,6 +476,7 @@ class EpicyonServer(ThreadingHTTPServer):
shared_item_federation_tokens = None
shared_item_federation_tokens = None
peertube_instances: list[str] = []
loops_instances: list[str] = []
max_mentions: int = 10
max_emoji: int = 10
max_hashtags: int = 10
@ -1344,6 +1346,10 @@ def run_daemon(accounts_data_dir: str,
httpd.peertube_instances: list[str] = []
load_peertube_instances(base_dir, httpd.peertube_instances)
# load loops instances from file into a list
httpd.loops_instances: list[str] = []
load_loops_instances(base_dir, httpd.loops_instances)
create_initial_last_seen(base_dir, http_prefix)
httpd.max_mentions = max_mentions
@ -1375,6 +1381,7 @@ def run_daemon(accounts_data_dir: str,
httpd.max_followers,
httpd.allow_local_network_access,
httpd.peertube_instances,
httpd.loops_instances,
verify_all_signatures,
httpd.theme_name,
httpd.system_language,

View File

@ -827,6 +827,7 @@ def daemon_http_get(self) -> None:
self.server.twitter_replacement_domain,
self.server.show_published_date_only,
self.server.peertube_instances,
self.server.loops_instances,
self.server.allow_local_network_access,
self.server.theme_name,
self.server.system_language,
@ -1959,6 +1960,7 @@ def daemon_http_get(self) -> None:
self.server.port,
MAX_POSTS_IN_BLOGS_FEED,
self.server.peertube_instances,
self.server.loops_instances,
self.server.system_language,
self.server.person_cache,
self.server.debug)
@ -1995,6 +1997,7 @@ def daemon_http_get(self) -> None:
self.server.debug,
curr_session, MAX_POSTS_IN_BLOGS_FEED,
self.server.peertube_instances,
self.server.loops_instances,
self.server.system_language,
self.server.person_cache,
self.server.fitness):
@ -2039,6 +2042,7 @@ def daemon_http_get(self) -> None:
self.server.domain_full,
post_json_object,
self.server.peertube_instances,
self.server.loops_instances,
self.server.system_language,
self.server.person_cache,
self.server.debug,
@ -3166,6 +3170,7 @@ def daemon_http_get(self) -> None:
twitter_replacement_domain,
show_published_date_only,
self.server.peertube_instances,
self.server.loops_instances,
allow_local_network_access,
self.server.theme_name,
self.server.system_language,
@ -3279,6 +3284,7 @@ def daemon_http_get(self) -> None:
self.server.twitter_replacement_domain,
self.server.show_published_date_only,
self.server.peertube_instances,
self.server.loops_instances,
self.server.allow_local_network_access,
self.server.theme_name,
self.server.system_language,
@ -3593,6 +3599,7 @@ def daemon_http_get(self) -> None:
self.server.twitter_replacement_domain,
self.server.show_published_date_only,
self.server.peertube_instances,
self.server.loops_instances,
self.server.allow_local_network_access,
self.server.theme_name,
self.server.max_like_count,
@ -3793,6 +3800,7 @@ def daemon_http_get(self) -> None:
self.server.twitter_replacement_domain,
self.server.show_published_date_only,
self.server.peertube_instances,
self.server.loops_instances,
self.server.allow_local_network_access,
self.server.theme_name,
self.server.system_language,
@ -3846,6 +3854,7 @@ def daemon_http_get(self) -> None:
self.server.twitter_replacement_domain,
self.server.show_published_date_only,
self.server.peertube_instances,
self.server.loops_instances,
self.server.allow_local_network_access,
self.server.theme_name,
self.server.system_language,
@ -3902,6 +3911,7 @@ def daemon_http_get(self) -> None:
self.server.twitter_replacement_domain,
self.server.show_published_date_only,
self.server.peertube_instances,
self.server.loops_instances,
self.server.allow_local_network_access,
self.server.theme_name,
self.server.system_language,
@ -3956,6 +3966,7 @@ def daemon_http_get(self) -> None:
self.server.twitter_replacement_domain,
self.server.show_published_date_only,
self.server.peertube_instances,
self.server.loops_instances,
self.server.allow_local_network_access,
self.server.theme_name,
self.server.system_language,
@ -4008,6 +4019,7 @@ def daemon_http_get(self) -> None:
self.server.twitter_replacement_domain,
self.server.show_published_date_only,
self.server.peertube_instances,
self.server.loops_instances,
self.server.allow_local_network_access,
self.server.theme_name,
self.server.system_language,
@ -4059,6 +4071,7 @@ def daemon_http_get(self) -> None:
self.server.twitter_replacement_domain,
self.server.show_published_date_only,
self.server.peertube_instances,
self.server.loops_instances,
self.server.allow_local_network_access,
self.server.theme_name,
self.server.system_language,
@ -4109,6 +4122,7 @@ def daemon_http_get(self) -> None:
self.server.twitter_replacement_domain,
self.server.show_published_date_only,
self.server.peertube_instances,
self.server.loops_instances,
self.server.allow_local_network_access,
self.server.theme_name,
self.server.system_language,
@ -4159,6 +4173,7 @@ def daemon_http_get(self) -> None:
self.server.twitter_replacement_domain,
self.server.show_published_date_only,
self.server.peertube_instances,
self.server.loops_instances,
self.server.allow_local_network_access,
self.server.theme_name,
self.server.system_language,
@ -4211,6 +4226,7 @@ def daemon_http_get(self) -> None:
self.server.twitter_replacement_domain,
self.server.show_published_date_only,
self.server.peertube_instances,
self.server.loops_instances,
self.server.allow_local_network_access,
self.server.theme_name,
self.server.system_language,
@ -4260,6 +4276,7 @@ def daemon_http_get(self) -> None:
self.server.twitter_replacement_domain,
self.server.show_published_date_only,
self.server.peertube_instances,
self.server.loops_instances,
self.server.allow_local_network_access,
self.server.theme_name,
self.server.system_language,
@ -4519,6 +4536,7 @@ def daemon_http_get(self) -> None:
self.server.port,
cookie,
self.server.peertube_instances,
self.server.loops_instances,
self.server.access_keys,
self.server.key_shortcuts,
self.server.default_reply_interval_hrs,
@ -4617,6 +4635,7 @@ def daemon_http_get(self) -> None:
self.server.twitter_replacement_domain,
self.server.show_published_date_only,
self.server.peertube_instances,
self.server.loops_instances,
self.server.allow_local_network_access,
self.server.max_like_count,
self.server.signing_priv_key_pem,
@ -4662,6 +4681,7 @@ def daemon_http_get(self) -> None:
self.server.twitter_replacement_domain,
self.server.show_published_date_only,
self.server.peertube_instances,
self.server.loops_instances,
self.server.allow_local_network_access,
self.server.theme_name,
self.server.system_language,
@ -4706,6 +4726,7 @@ def daemon_http_get(self) -> None:
self.server.twitter_replacement_domain,
self.server.show_published_date_only,
self.server.peertube_instances,
self.server.loops_instances,
self.server.allow_local_network_access,
self.server.system_language,
self.server.max_like_count,
@ -4747,6 +4768,7 @@ def daemon_http_get(self) -> None:
self.server.twitter_replacement_domain,
self.server.show_published_date_only,
self.server.peertube_instances,
self.server.loops_instances,
self.server.allow_local_network_access,
self.server.system_language,
self.server.max_like_count,
@ -4793,6 +4815,7 @@ def daemon_http_get(self) -> None:
self.server.yt_replace_domain,
self.server.twitter_replacement_domain,
self.server.peertube_instances,
self.server.loops_instances,
self.server.account_timezone,
self.server.bold_reading,
self.server.show_published_date_only,
@ -4853,6 +4876,7 @@ def daemon_http_get(self) -> None:
self.server.theme_name,
self.server.dormant_months,
self.server.peertube_instances,
self.server.loops_instances,
self.server.allow_local_network_access,
self.server.text_mode_banner,
self.server.system_language,
@ -4902,6 +4926,7 @@ def daemon_http_get(self) -> None:
self.server.signing_priv_key_pem,
self.server.content_license_url,
self.server.peertube_instances,
self.server.loops_instances,
self.server.city,
self.server.account_timezone,
self.server.bold_reading,
@ -4961,6 +4986,7 @@ def daemon_http_get(self) -> None:
self.server.twitter_replacement_domain,
self.server.show_published_date_only,
self.server.peertube_instances,
self.server.loops_instances,
self.server.allow_local_network_access,
self.server.theme_name,
self.server.system_language,
@ -5010,6 +5036,7 @@ def daemon_http_get(self) -> None:
self.server.twitter_replacement_domain,
self.server.show_published_date_only,
self.server.peertube_instances,
self.server.loops_instances,
self.server.allow_local_network_access,
self.server.theme_name,
self.server.system_language,
@ -5075,6 +5102,7 @@ def daemon_http_get(self) -> None:
self.server.publish_button_at_top,
self.server.theme_name,
self.server.peertube_instances,
self.server.loops_instances,
self.server.text_mode_banner,
self.server.system_language,
self.server.max_like_count,
@ -5136,6 +5164,7 @@ def daemon_http_get(self) -> None:
self.server.publish_button_at_top,
self.server.theme_name,
self.server.peertube_instances,
self.server.loops_instances,
self.server.text_mode_banner,
self.server.system_language,
self.server.max_like_count,
@ -5197,6 +5226,7 @@ def daemon_http_get(self) -> None:
self.server.publish_button_at_top,
self.server.theme_name,
self.server.peertube_instances,
self.server.loops_instances,
self.server.text_mode_banner,
self.server.system_language,
self.server.max_like_count,
@ -5258,6 +5288,7 @@ def daemon_http_get(self) -> None:
self.server.publish_button_at_top,
self.server.theme_name,
self.server.peertube_instances,
self.server.loops_instances,
self.server.text_mode_banner,
self.server.system_language,
self.server.max_like_count,
@ -5322,6 +5353,7 @@ def daemon_http_get(self) -> None:
self.server.publish_button_at_top,
self.server.theme_name,
self.server.peertube_instances,
self.server.loops_instances,
self.server.text_mode_banner,
self.server.system_language,
self.server.max_like_count,
@ -5384,6 +5416,7 @@ def daemon_http_get(self) -> None:
self.server.publish_button_at_top,
self.server.theme_name,
self.server.peertube_instances,
self.server.loops_instances,
self.server.allow_local_network_access,
self.server.text_mode_banner,
self.server.system_language,
@ -5446,6 +5479,7 @@ def daemon_http_get(self) -> None:
self.server.publish_button_at_top,
self.server.theme_name,
self.server.peertube_instances,
self.server.loops_instances,
self.server.text_mode_banner,
self.server.system_language,
self.server.max_like_count,
@ -5503,6 +5537,7 @@ def daemon_http_get(self) -> None:
self.server.publish_button_at_top,
self.server.theme_name,
self.server.peertube_instances,
self.server.loops_instances,
self.server.allow_local_network_access,
self.server.text_mode_banner,
self.server.system_language,
@ -5556,6 +5591,7 @@ def daemon_http_get(self) -> None:
self.server.publish_button_at_top,
self.server.theme_name,
self.server.peertube_instances,
self.server.loops_instances,
self.server.allow_local_network_access,
self.server.text_mode_banner,
self.server.system_language,
@ -5708,6 +5744,7 @@ def daemon_http_get(self) -> None:
self.server.publish_button_at_top,
self.server.theme_name,
self.server.peertube_instances,
self.server.loops_instances,
self.server.text_mode_banner,
self.server.system_language,
self.server.max_like_count,
@ -5770,6 +5807,7 @@ def daemon_http_get(self) -> None:
self.server.publish_button_at_top,
self.server.theme_name,
self.server.peertube_instances,
self.server.loops_instances,
self.server.allow_local_network_access,
self.server.text_mode_banner,
self.server.system_language,
@ -5837,6 +5875,7 @@ def daemon_http_get(self) -> None:
self.server.publish_button_at_top,
self.server.theme_name,
self.server.peertube_instances,
self.server.loops_instances,
self.server.text_mode_banner,
self.server.system_language,
self.server.max_like_count,
@ -5891,6 +5930,7 @@ def daemon_http_get(self) -> None:
self.server.theme_name,
self.server.dormant_months,
self.server.peertube_instances,
self.server.loops_instances,
self.server.allow_local_network_access,
self.server.text_mode_banner,
self.server.system_language,
@ -5953,6 +5993,7 @@ def daemon_http_get(self) -> None:
self.server.theme_name,
self.server.dormant_months,
self.server.peertube_instances,
self.server.loops_instances,
self.server.allow_local_network_access,
self.server.text_mode_banner,
self.server.system_language,
@ -6011,6 +6052,7 @@ def daemon_http_get(self) -> None:
self.server.theme_name,
self.server.dormant_months,
self.server.peertube_instances,
self.server.loops_instances,
self.server.allow_local_network_access,
self.server.text_mode_banner,
self.server.system_language,
@ -6070,6 +6112,7 @@ def daemon_http_get(self) -> None:
self.server.newswire,
self.server.theme_name,
self.server.peertube_instances,
self.server.loops_instances,
self.server.allow_local_network_access,
self.server.text_mode_banner,
self.server.system_language,
@ -6129,6 +6172,7 @@ def daemon_http_get(self) -> None:
self.server.theme_name,
self.server.dormant_months,
self.server.peertube_instances,
self.server.loops_instances,
self.server.allow_local_network_access,
self.server.text_mode_banner,
self.server.system_language,
@ -6189,6 +6233,7 @@ def daemon_http_get(self) -> None:
self.server.theme_name,
self.server.dormant_months,
self.server.peertube_instances,
self.server.loops_instances,
self.server.allow_local_network_access,
self.server.text_mode_banner,
self.server.system_language,

View File

@ -25,6 +25,7 @@ def show_blog_page(self, authorized: bool,
curr_session,
max_posts_in_blogs_feed: int,
peertube_instances: [],
loops_instances: [],
system_language: str,
person_cache: {},
fitness: {}) -> bool:
@ -69,6 +70,7 @@ def show_blog_page(self, authorized: bool,
domain, port,
max_posts_in_blogs_feed, page_number,
peertube_instances,
loops_instances,
system_language,
person_cache,
debug)

View File

@ -228,6 +228,7 @@ def delete_button(self, calling_domain: str, path: str,
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
theme_name: str,
system_language: str,
@ -338,6 +339,7 @@ def delete_button(self, calling_domain: str, path: str,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name,
system_language,

View File

@ -59,6 +59,7 @@ def announce_button(self, calling_domain: str, path: str,
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
theme_name: str,
max_like_count: int,
@ -261,6 +262,7 @@ def announce_button(self, calling_domain: str, path: str,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name,
system_language,

View File

@ -51,6 +51,7 @@ def bookmark_button(self, calling_domain: str, path: str,
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
theme_name: str,
system_language: str,
@ -214,6 +215,7 @@ def bookmark_button(self, calling_domain: str, path: str,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name,
system_language,
@ -279,6 +281,7 @@ def bookmark_button_undo(self, calling_domain: str, path: str,
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
theme_name: str,
system_language: str,
@ -441,6 +444,7 @@ def bookmark_button_undo(self, calling_domain: str, path: str,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name,
system_language,

View File

@ -54,6 +54,7 @@ def like_button(self, calling_domain: str, path: str,
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
theme_name: str,
system_language: str,
@ -261,6 +262,7 @@ def like_button(self, calling_domain: str, path: str,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name,
system_language,
@ -334,6 +336,7 @@ def like_button_undo(self, calling_domain: str, path: str,
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
theme_name: str,
system_language: str,
@ -532,6 +535,7 @@ def like_button_undo(self, calling_domain: str, path: str,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name,
system_language,

View File

@ -46,6 +46,7 @@ def mute_button(self, calling_domain: str, path: str,
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
theme_name: str,
system_language: str,
@ -169,6 +170,7 @@ def mute_button(self, calling_domain: str, path: str,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name,
system_language,
@ -236,6 +238,7 @@ def mute_button_undo(self, calling_domain: str, path: str,
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
theme_name: str,
system_language: str,
@ -359,6 +362,7 @@ def mute_button_undo(self, calling_domain: str, path: str,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name,
system_language,

View File

@ -55,6 +55,7 @@ def reaction_button(self, calling_domain: str, path: str,
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
theme_name: str,
system_language: str,
@ -291,6 +292,7 @@ def reaction_button(self, calling_domain: str, path: str,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name,
system_language,
@ -362,6 +364,7 @@ def reaction_button_undo(self, calling_domain: str, path: str,
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
theme_name: str,
system_language: str,
@ -585,6 +588,7 @@ def reaction_button_undo(self, calling_domain: str, path: str,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name,
system_language,

View File

@ -54,6 +54,7 @@ def show_shares_feed(self, authorized: bool,
theme_name: str,
dormant_months: int,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
text_mode_banner: str,
system_language: str,
@ -153,6 +154,7 @@ def show_shares_feed(self, authorized: bool,
theme_name,
dormant_months,
peertube_instances,
loops_instances,
allow_local_network_access,
text_mode_banner,
debug,
@ -250,6 +252,7 @@ def show_following_feed(self, authorized: bool,
theme_name: str,
dormant_months: int,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
text_mode_banner: str,
system_language: str,
@ -352,6 +355,7 @@ def show_following_feed(self, authorized: bool,
theme_name,
dormant_months,
peertube_instances,
loops_instances,
allow_local_network_access,
text_mode_banner,
debug,
@ -456,6 +460,7 @@ def show_moved_feed(self, authorized: bool,
theme_name: str,
dormant_months: int,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
text_mode_banner: str,
system_language: str,
@ -553,6 +558,7 @@ def show_moved_feed(self, authorized: bool,
theme_name,
dormant_months,
peertube_instances,
loops_instances,
allow_local_network_access,
text_mode_banner,
debug,
@ -649,6 +655,7 @@ def show_inactive_feed(self, authorized: bool,
newswire: {},
theme_name: str,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
text_mode_banner: str,
system_language: str,
@ -747,6 +754,7 @@ def show_inactive_feed(self, authorized: bool,
theme_name,
dormant_months,
peertube_instances,
loops_instances,
allow_local_network_access,
text_mode_banner,
debug,
@ -845,6 +853,7 @@ def show_followers_feed(self, authorized: bool,
theme_name: str,
dormant_months: int,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
text_mode_banner: str,
system_language: str,
@ -944,6 +953,7 @@ def show_followers_feed(self, authorized: bool,
theme_name,
dormant_months,
peertube_instances,
loops_instances,
allow_local_network_access,
text_mode_banner,
debug,

View File

@ -167,6 +167,7 @@ def hashtag_search2(self, calling_domain: str,
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
theme_name: str,
system_language: str,
@ -235,6 +236,7 @@ def hashtag_search2(self, calling_domain: str,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name,
system_language,

View File

@ -73,6 +73,7 @@ def _show_post_from_file(self, post_filename: str, liked_by: str,
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
theme_name: str,
system_language: str,
@ -160,6 +161,7 @@ def _show_post_from_file(self, post_filename: str, liked_by: str,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name,
system_language,
@ -247,6 +249,7 @@ def show_individual_post(self, ssml_getreq: bool, authorized: bool,
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
theme_name: str,
system_language: str,
@ -352,6 +355,7 @@ def show_individual_post(self, ssml_getreq: bool, authorized: bool,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name,
system_language,
@ -408,6 +412,7 @@ def show_new_post(self, edit_post_params: {},
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
max_like_count: int,
signing_priv_key_pem: str,
@ -529,6 +534,7 @@ def show_new_post(self, edit_post_params: {},
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
system_language,
languages_understood,
@ -590,6 +596,7 @@ def show_individual_at_post(self, ssml_getreq: bool, authorized: bool,
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
theme_name: str,
system_language: str,
@ -702,6 +709,7 @@ def show_individual_at_post(self, ssml_getreq: bool, authorized: bool,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name,
system_language,
@ -746,6 +754,7 @@ def show_likers_of_post(self, authorized: bool,
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
system_language: str,
max_like_count: int,
@ -797,6 +806,7 @@ def show_likers_of_post(self, authorized: bool,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
system_language,
max_like_count,
@ -849,6 +859,7 @@ def show_announcers_of_post(self, authorized: bool,
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
system_language: str,
max_like_count: int,
@ -901,6 +912,7 @@ def show_announcers_of_post(self, authorized: bool,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
system_language,
max_like_count,
@ -949,6 +961,7 @@ def show_replies_to_post(self, authorized: bool,
yt_replace_domain: str,
twitter_replacement_domain: str,
peertube_instances: [],
loops_instances: [],
account_timezone: {},
bold_reading_nicknames: {},
show_published_date_only: bool,
@ -1059,6 +1072,7 @@ def show_replies_to_post(self, authorized: bool,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name,
system_language,
@ -1181,6 +1195,7 @@ def show_replies_to_post(self, authorized: bool,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name,
system_language,
@ -1254,6 +1269,7 @@ def show_notify_post(self, authorized: bool,
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
theme_name: str,
system_language: str,
@ -1316,6 +1332,7 @@ def show_notify_post(self, authorized: bool,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name,
system_language,
@ -1362,6 +1379,7 @@ def show_conversation_thread(self, authorized: bool,
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
theme_name: str,
system_language: str,
@ -1444,6 +1462,7 @@ def show_conversation_thread(self, authorized: bool,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name,
system_language,

View File

@ -70,6 +70,7 @@ def show_person_profile(self, authorized: bool,
theme_name: str,
dormant_months: int,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
text_mode_banner: str,
system_language: str,
@ -138,6 +139,7 @@ def show_person_profile(self, authorized: bool,
theme_name,
dormant_months,
peertube_instances,
loops_instances,
allow_local_network_access,
text_mode_banner,
debug,
@ -237,6 +239,7 @@ def show_roles(self, calling_domain: str, referer_domain: str,
theme_name: str,
dormant_months: int,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
text_mode_banner: str,
system_language: str,
@ -313,6 +316,7 @@ def show_roles(self, calling_domain: str, referer_domain: str,
theme_name,
dormant_months,
peertube_instances,
loops_instances,
allow_local_network_access,
text_mode_banner,
debug,
@ -388,7 +392,9 @@ def show_skills(self, calling_domain: str, referer_domain: str,
shared_items_federated_domains: [],
signing_priv_key_pem: str,
content_license_url: str,
peertube_instances: [], city: str,
peertube_instances: [],
loops_instances: [],
city: str,
account_timezone: {},
bold_reading_nicknames: {},
max_shares_on_profile: int,
@ -474,6 +480,7 @@ def show_skills(self, calling_domain: str, referer_domain: str,
theme_name,
dormant_months,
peertube_instances,
loops_instances,
allow_local_network_access,
text_mode_banner,
debug,
@ -559,6 +566,7 @@ def edit_profile2(self, calling_domain: str, path: str,
domain: str, port: int,
cookie: str,
peertube_instances: [],
loops_instances: [],
access_keys: {},
key_shortcuts: {},
default_reply_interval_hrs: int,
@ -594,6 +602,7 @@ def edit_profile2(self, calling_domain: str, path: str,
default_timeline,
theme_name,
peertube_instances,
loops_instances,
text_mode_banner,
user_agents_blocked,
crawlers_allowed,

View File

@ -35,6 +35,7 @@ def reaction_picker2(self, calling_domain: str, path: str,
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
theme_name: str,
system_language: str,
@ -142,6 +143,7 @@ def reaction_picker2(self, calling_domain: str, path: str,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name,
system_language,

View File

@ -70,6 +70,7 @@ def show_media_timeline(self, authorized: bool,
publish_button_at_top: bool,
theme_name: str,
peertube_instances: [],
loops_instances: [],
text_mode_banner: str,
system_language: str,
max_like_count: int,
@ -188,6 +189,7 @@ def show_media_timeline(self, authorized: bool,
authorized,
theme_name,
peertube_instances,
loops_instances,
allow_local_network_access,
text_mode_banner,
access_keys,
@ -294,6 +296,7 @@ def show_blogs_timeline(self, authorized: bool,
publish_button_at_top: bool,
theme_name: str,
peertube_instances: [],
loops_instances: [],
text_mode_banner: str,
system_language: str,
max_like_count: int,
@ -407,6 +410,7 @@ def show_blogs_timeline(self, authorized: bool,
authorized,
theme_name,
peertube_instances,
loops_instances,
allow_local_network_access,
text_mode_banner,
access_keys,
@ -511,6 +515,7 @@ def show_news_timeline(self, authorized: bool,
publish_button_at_top: bool,
theme_name: str,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
text_mode_banner: str,
system_language: str,
@ -630,6 +635,7 @@ def show_news_timeline(self, authorized: bool,
authorized,
theme_name,
peertube_instances,
loops_instances,
allow_local_network_access,
text_mode_banner,
access_keys,
@ -734,6 +740,7 @@ def show_features_timeline(self, authorized: bool,
publish_button_at_top: bool,
theme_name: str,
peertube_instances: [],
loops_instances: [],
text_mode_banner: str,
system_language: str,
max_like_count: int,
@ -847,6 +854,7 @@ def show_features_timeline(self, authorized: bool,
authorized,
theme_name,
peertube_instances,
loops_instances,
allow_local_network_access,
text_mode_banner,
access_keys,
@ -947,6 +955,7 @@ def show_shares_timeline(self, authorized: bool,
publish_button_at_top: bool,
theme_name: str,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
text_mode_banner: str,
system_language: str,
@ -1023,6 +1032,7 @@ def show_shares_timeline(self, authorized: bool,
publish_button_at_top,
authorized, theme_name,
peertube_instances,
loops_instances,
allow_local_network_access,
text_mode_banner,
access_keys,
@ -1099,6 +1109,7 @@ def show_wanted_timeline(self, authorized: bool,
publish_button_at_top: bool,
theme_name: str,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
text_mode_banner: str,
system_language: str,
@ -1174,6 +1185,7 @@ def show_wanted_timeline(self, authorized: bool,
publish_button_at_top,
authorized, theme_name,
peertube_instances,
loops_instances,
allow_local_network_access,
text_mode_banner,
access_keys,
@ -1254,6 +1266,7 @@ def show_bookmarks_timeline(self, authorized: bool,
publish_button_at_top: bool,
theme_name: str,
peertube_instances: [],
loops_instances: [],
text_mode_banner: str,
system_language: str,
max_like_count: int,
@ -1362,6 +1375,7 @@ def show_bookmarks_timeline(self, authorized: bool,
authorized,
theme_name,
peertube_instances,
loops_instances,
allow_local_network_access,
text_mode_banner,
access_keys,
@ -1466,6 +1480,7 @@ def show_outbox_timeline(self, authorized: bool,
publish_button_at_top: bool,
theme_name: str,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
text_mode_banner: str,
system_language: str,
@ -1586,6 +1601,7 @@ def show_outbox_timeline(self, authorized: bool,
authorized,
theme_name,
peertube_instances,
loops_instances,
allow_local_network_access,
text_mode_banner,
access_keys,
@ -1680,6 +1696,7 @@ def show_mod_timeline(self, authorized: bool,
publish_button_at_top: bool,
theme_name: str,
peertube_instances: [],
loops_instances: [],
text_mode_banner: str,
system_language: str,
max_like_count: int,
@ -1785,6 +1802,7 @@ def show_mod_timeline(self, authorized: bool,
authorized, moderation_action_str,
theme_name,
peertube_instances,
loops_instances,
allow_local_network_access,
text_mode_banner,
access_keys,
@ -1888,6 +1906,7 @@ def show_dms(self, authorized: bool,
publish_button_at_top: bool,
theme_name: str,
peertube_instances: [],
loops_instances: [],
text_mode_banner: str,
system_language: str,
max_like_count: int,
@ -1999,6 +2018,7 @@ def show_dms(self, authorized: bool,
publish_button_at_top,
authorized, theme_name,
peertube_instances,
loops_instances,
allow_local_network_access,
text_mode_banner,
access_keys,
@ -2104,6 +2124,7 @@ def show_replies(self, authorized: bool,
publish_button_at_top: bool,
theme_name: str,
peertube_instances: [],
loops_instances: [],
text_mode_banner: str,
system_language: str,
max_like_count: int,
@ -2215,6 +2236,7 @@ def show_replies(self, authorized: bool,
publish_button_at_top,
authorized, theme_name,
peertube_instances,
loops_instances,
allow_local_network_access,
text_mode_banner,
access_keys,
@ -2321,6 +2343,7 @@ def show_inbox(self, authorized: bool,
publish_button_at_top: bool,
theme_name: str,
peertube_instances: [],
loops_instances: [],
text_mode_banner: str,
system_language: str,
max_like_count: int,
@ -2444,6 +2467,7 @@ def show_inbox(self, authorized: bool,
authorized,
theme_name,
peertube_instances,
loops_instances,
allow_local_network_access,
text_mode_banner,
access_keys,

View File

@ -428,6 +428,7 @@ def daemon_http_post(self) -> None:
self.server.theme_name,
self.server.dyslexic_font,
self.server.peertube_instances,
self.server.loops_instances,
self.server.mitm_servers)
self.server.postreq_busy = False
return
@ -581,6 +582,7 @@ def daemon_http_post(self) -> None:
self.server.twitter_replacement_domain,
self.server.show_published_date_only,
self.server.peertube_instances,
self.server.loops_instances,
self.server.allow_local_network_access,
self.server.theme_name,
self.server.system_language,
@ -846,6 +848,7 @@ def daemon_http_post(self) -> None:
self.server.signing_priv_key_pem,
self.server.twitter_replacement_domain,
self.server.peertube_instances,
self.server.loops_instances,
self.server.yt_replace_domain,
self.server.cached_webfingers,
self.server.recent_posts_cache,
@ -1025,6 +1028,7 @@ def daemon_http_post(self) -> None:
self.server.show_published_date_only,
self.server.min_images_for_accounts,
self.server.peertube_instances,
self.server.loops_instances,
self.server.max_mentions,
self.server.max_emoji,
self.server.max_recent_posts,

View File

@ -234,6 +234,7 @@ def _person_options_view(self, options_confirm_params: str,
show_published_date_only: bool,
default_timeline: str,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
theme_name: str,
system_language: str,
@ -321,6 +322,7 @@ def _person_options_view(self, options_confirm_params: str,
show_published_date_only,
default_timeline,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name,
access_keys,
@ -901,6 +903,7 @@ def _person_options_dm(self, options_confirm_params: str,
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
max_like_count: int,
signing_priv_key_pem: str,
@ -979,6 +982,7 @@ def _person_options_dm(self, options_confirm_params: str,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
system_language,
languages_understood,
@ -1154,6 +1158,7 @@ def _person_options_report(self, options_confirm_params: str,
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
max_like_count: int,
signing_priv_key_pem: str,
@ -1232,6 +1237,7 @@ def _person_options_report(self, options_confirm_params: str,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
system_language,
languages_understood,
@ -1282,6 +1288,7 @@ def person_options2(self, path: str,
signing_priv_key_pem: str,
twitter_replacement_domain: str,
peertube_instances: [],
loops_instances: [],
yt_replace_domain: str,
cached_webfingers: {},
recent_posts_cache: {},
@ -1426,6 +1433,7 @@ def person_options2(self, path: str,
show_published_date_only,
default_timeline,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name,
system_language,
@ -1646,6 +1654,7 @@ def person_options2(self, path: str,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
max_like_count,
signing_priv_key_pem,
@ -1719,6 +1728,7 @@ def person_options2(self, path: str,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
max_like_count,
signing_priv_key_pem,

View File

@ -100,6 +100,8 @@ from pixelfed import get_pixelfed
from pixelfed import set_pixelfed
from peertube import get_peertube
from peertube import set_peertube
from loops import get_loops
from loops import set_loops
from xmpp import get_xmpp_address
from xmpp import set_xmpp_address
from matrix import get_matrix_address
@ -292,6 +294,33 @@ def _profile_post_peertube_instances(base_dir: str, fields: {}, self,
peertube_instances.clear()
def _profile_post_loops_instances(base_dir: str, fields: {}, self,
loops_instances: []) -> None:
""" HTTP POST save Loops instances list
"""
loops_instances_file = data_dir(base_dir) + '/loops.txt'
if fields.get('ptInstances'):
loops_instances.clear()
save_string(fields['loopsInstances'], loops_instances_file,
'EX: unable to write loops ' +
loops_instances_file)
pt_instances_list = fields['ptInstances'].split('\n')
if pt_instances_list:
for url in pt_instances_list:
url = url.strip()
if not url:
continue
if url in loops_instances:
continue
loops_instances.append(url)
else:
if is_a_file(loops_instances_file):
erase_file(loops_instances_file,
'EX: _profile_edit unable to delete ' +
loops_instances_file)
loops_instances.clear()
def _profile_post_block_federated(base_dir: str, fields: {}, self) -> None:
""" HTTP POST save blocking API endpoints
"""
@ -2061,6 +2090,22 @@ def _profile_post_peertube(actor_json: {}, fields: {},
return actor_changed
def _profile_post_loops(actor_json: {}, fields: {},
actor_changed: bool) -> bool:
""" HTTP POST change Loops channel address
"""
current_loops = get_loops(actor_json)
if fields.get('loopsChannel'):
if fields['loopsChannel'] != current_loops:
set_loops(actor_json, fields['loopsChannel'])
actor_changed = True
else:
if current_loops:
set_loops(actor_json, '')
actor_changed = True
return actor_changed
def _profile_post_pronouns(actor_json: {}, fields: {},
actor_changed: bool) -> bool:
""" HTTP POST change pronouns
@ -2614,6 +2659,7 @@ def profile_edit(self, calling_domain: str, cookie: str,
translate: {}, theme_name: str,
dyslexic_font: bool,
peertube_instances: [],
loops_instances: [],
mitm_servers: []) -> None:
"""Updates your user profile after editing via the Edit button
on the profile screen
@ -2973,6 +3019,10 @@ def profile_edit(self, calling_domain: str, cookie: str,
_profile_post_peertube(actor_json, fields,
actor_changed)
actor_changed = \
_profile_post_loops(actor_json, fields,
actor_changed)
actor_changed = \
_profile_post_pronouns(actor_json, fields,
actor_changed)
@ -3292,6 +3342,8 @@ def profile_edit(self, calling_domain: str, cookie: str,
_profile_post_robots_txt(base_dir, fields, self)
_profile_post_peertube_instances(base_dir, fields, self,
peertube_instances)
_profile_post_loops_instances(base_dir, fields, self,
loops_instances)
_profile_post_git_projects(base_dir, nickname, domain,
fields)

View File

@ -108,6 +108,7 @@ def _receive_new_post_process_newpost(self, fields: {},
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
theme_name: str,
max_like_count: int,
cw_lists: {},
@ -231,6 +232,7 @@ def _receive_new_post_process_newpost(self, fields: {},
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
theme_name,
max_like_count,
cw_lists,
@ -554,6 +556,7 @@ def _receive_new_post_process_newunlisted(self, fields: {},
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
theme_name: str,
max_like_count: int,
cw_lists: {},
@ -661,6 +664,7 @@ def _receive_new_post_process_newunlisted(self, fields: {},
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
theme_name,
max_like_count,
cw_lists,
@ -726,6 +730,7 @@ def _receive_new_post_process_newfollowers(self, fields: {},
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
theme_name: str,
max_like_count: int,
cw_lists: {},
@ -843,6 +848,7 @@ def _receive_new_post_process_newfollowers(self, fields: {},
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
theme_name,
max_like_count,
cw_lists,
@ -909,6 +915,7 @@ def _receive_new_post_process_newdm(self, fields: {},
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
theme_name: str,
max_like_count: int,
cw_lists: {},
@ -1034,6 +1041,7 @@ def _receive_new_post_process_newdm(self, fields: {},
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
theme_name,
max_like_count,
cw_lists,
@ -1100,6 +1108,7 @@ def _receive_new_post_process_newreminder(self, fields: {}, nickname: str,
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
theme_name: str,
max_like_count: int,
cw_lists: {},
@ -1209,6 +1218,7 @@ def _receive_new_post_process_newreminder(self, fields: {}, nickname: str,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
theme_name,
max_like_count,
cw_lists,
@ -1441,6 +1451,7 @@ def _receive_new_post_process_newreading(self, fields: {},
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
theme_name: str,
max_like_count: int,
cw_lists: {},
@ -1569,6 +1580,7 @@ def _receive_new_post_process_newreading(self, fields: {},
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
theme_name,
max_like_count,
cw_lists,
@ -1778,6 +1790,7 @@ def _receive_new_post_process(self, post_type: str, path: str, headers: {},
show_published_date_only: bool,
min_images_for_accounts: [],
peertube_instances: [],
loops_instances: [],
max_mentions: int,
max_emoji: int, max_recent_posts: int,
cached_webfingers: {},
@ -2125,6 +2138,7 @@ def _receive_new_post_process(self, post_type: str, path: str, headers: {},
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
theme_name,
max_like_count,
cw_lists,
@ -2204,6 +2218,7 @@ def _receive_new_post_process(self, post_type: str, path: str, headers: {},
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
theme_name,
max_like_count,
cw_lists,
@ -2253,6 +2268,7 @@ def _receive_new_post_process(self, post_type: str, path: str, headers: {},
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
theme_name,
max_like_count,
cw_lists,
@ -2301,6 +2317,7 @@ def _receive_new_post_process(self, post_type: str, path: str, headers: {},
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
theme_name,
max_like_count,
cw_lists,
@ -2350,6 +2367,7 @@ def _receive_new_post_process(self, post_type: str, path: str, headers: {},
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
theme_name,
max_like_count,
cw_lists,
@ -2424,6 +2442,7 @@ def _receive_new_post_process(self, post_type: str, path: str, headers: {},
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
theme_name,
max_like_count,
cw_lists,
@ -2481,6 +2500,7 @@ def receive_new_post(self, post_type, path: str,
show_published_date_only: bool,
min_images_for_accounts: [],
peertube_instances: [],
loops_instances: [],
max_mentions: int, max_emoji: int,
max_recent_posts: int,
cached_webfingers: {},
@ -2626,6 +2646,7 @@ def receive_new_post(self, post_type, path: str,
show_published_date_only,
min_images_for_accounts,
peertube_instances,
loops_instances,
max_mentions, max_emoji,
max_recent_posts,
cached_webfingers,

View File

@ -75,6 +75,7 @@ def _receive_search_hashtag(self, actor_str: str,
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
theme_name: str,
system_language: str,
@ -125,6 +126,7 @@ def _receive_search_hashtag(self, actor_str: str,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name,
system_language,
@ -215,6 +217,7 @@ def _receive_search_my_posts(self, search_str: str,
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
theme_name: str,
system_language: str,
@ -283,6 +286,7 @@ def _receive_search_my_posts(self, search_str: str,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name, 'outbox',
system_language,
@ -334,6 +338,7 @@ def _receive_search_bookmarks(self, search_str: str,
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
theme_name: str,
system_language: str,
@ -402,6 +407,7 @@ def _receive_search_bookmarks(self, search_str: str,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name, 'bookmarks',
system_language,
@ -454,6 +460,7 @@ def _receive_search_handle(self, search_str: str,
show_published_date_only: bool,
default_timeline: str,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
theme_name: str,
system_language: str,
@ -622,6 +629,7 @@ def _receive_search_handle(self, search_str: str,
show_published_date_only,
default_timeline,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name,
access_keys,
@ -793,6 +801,7 @@ def receive_search_query(self, calling_domain: str, cookie: str,
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
theme_name: str,
system_language: str,
@ -907,6 +916,7 @@ def receive_search_query(self, calling_domain: str, cookie: str,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name,
system_language,
@ -959,6 +969,7 @@ def receive_search_query(self, calling_domain: str, cookie: str,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name,
system_language,
@ -998,6 +1009,7 @@ def receive_search_query(self, calling_domain: str, cookie: str,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name,
system_language,
@ -1039,6 +1051,7 @@ def receive_search_query(self, calling_domain: str, cookie: str,
show_published_date_only,
default_timeline,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name,
system_language,

View File

@ -58,6 +58,7 @@ from music import get_music_site_url
from youtube import get_youtube
from pixelfed import get_pixelfed
from peertube import get_peertube
from loops import get_loops
from xmpp import get_xmpp_address
from matrix import get_matrix_address
from ssb import get_ssb_address
@ -148,6 +149,7 @@ def post_to_outbox(self, message_json: {}, version: str,
self.server.low_bandwidth,
self.server.signing_priv_key_pem,
self.server.peertube_instances,
self.server.loops_instances,
self.server.theme_name,
self.server.max_like_count,
self.server.max_recent_posts,
@ -699,6 +701,7 @@ def show_person_options(self, calling_domain: str, path: str,
music_site_url = None
youtube = None
peertube = None
loops = None
xmpp_address = None
matrix_address = None
blog_address = None
@ -746,6 +749,7 @@ def show_person_options(self, calling_domain: str, path: str,
music_site_url = get_music_site_url(actor_json)
youtube = get_youtube(actor_json)
peertube = get_peertube(actor_json)
loops = get_loops(actor_json)
xmpp_address = get_xmpp_address(actor_json)
matrix_address = get_matrix_address(actor_json)
ssb_address = get_ssb_address(actor_json)
@ -828,7 +832,7 @@ def show_person_options(self, calling_domain: str, path: str,
self.server.blocked_cache,
repo_url,
self.server.sites_unavailable,
youtube, peertube, pixelfed,
youtube, peertube, loops, pixelfed,
discord, music_site_url,
art_site_url,
self.server.mitm_servers,

View File

@ -191,6 +191,7 @@ def _inbox_store_post_to_html_cache(recent_posts_cache: {},
allow_deletion: bool, boxname: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
theme_name: str, system_language: str,
max_like_count: int,
@ -235,7 +236,8 @@ def _inbox_store_post_to_html_cache(recent_posts_cache: {},
http_prefix, __version__, boxname,
yt_replace_domain, twitter_replacement_domain,
show_published_date_only,
peertube_instances, allow_local_network_access,
peertube_instances, loops_instances,
allow_local_network_access,
theme_name, system_language, max_like_count,
not_dm, True, True, False, True, False,
cw_lists, lists_enabled, timezone, mitm,
@ -867,6 +869,7 @@ def update_edited_post(base_dir: str,
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
theme_name: str, max_like_count: int,
cw_lists: {}, dogwhistles: {},
min_images_for_accounts: [],
@ -926,6 +929,7 @@ def update_edited_post(base_dir: str,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
theme_name, max_like_count,
cw_lists, dogwhistles,
min_images_for_accounts,
@ -1872,6 +1876,7 @@ def _inbox_after_initial(server, inbox_start_time,
show_published_date_only: bool,
allow_local_network_access: bool,
peertube_instances: [],
loops_instances: [],
last_bounce_message: [],
theme_name: str, system_language: str,
max_like_count: int,
@ -2005,6 +2010,7 @@ def _inbox_after_initial(server, inbox_start_time,
yt_replace_domain,
twitter_replacement_domain,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name, system_language,
max_like_count, cw_lists, lists_enabled,
@ -2037,6 +2043,7 @@ def _inbox_after_initial(server, inbox_start_time,
yt_replace_domain,
twitter_replacement_domain,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name, system_language,
max_like_count, cw_lists, lists_enabled,
@ -2070,6 +2077,7 @@ def _inbox_after_initial(server, inbox_start_time,
yt_replace_domain,
twitter_replacement_domain,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name, system_language,
max_like_count, cw_lists, lists_enabled,
@ -2105,6 +2113,7 @@ def _inbox_after_initial(server, inbox_start_time,
yt_replace_domain,
twitter_replacement_domain,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name, system_language,
max_like_count, cw_lists, lists_enabled,
@ -2137,6 +2146,7 @@ def _inbox_after_initial(server, inbox_start_time,
yt_replace_domain,
twitter_replacement_domain,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name, system_language,
max_like_count, cw_lists, lists_enabled,
@ -2169,6 +2179,7 @@ def _inbox_after_initial(server, inbox_start_time,
yt_replace_domain,
twitter_replacement_domain,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name, system_language,
max_like_count, cw_lists, lists_enabled,
@ -2202,6 +2213,7 @@ def _inbox_after_initial(server, inbox_start_time,
yt_replace_domain,
twitter_replacement_domain,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name, system_language,
max_like_count, cw_lists, lists_enabled,
@ -2256,6 +2268,7 @@ def _inbox_after_initial(server, inbox_start_time,
max_recent_posts,
allow_deletion,
peertube_instances,
loops_instances,
max_like_count, cw_lists, lists_enabled,
bold_reading, dogwhistles, mitm,
server.min_images_for_accounts,
@ -2330,6 +2343,7 @@ def _inbox_after_initial(server, inbox_start_time,
yt_replace_domain,
twitter_replacement_domain,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name, system_language,
max_like_count,
@ -2683,6 +2697,7 @@ def _inbox_after_initial(server, inbox_start_time,
boxname,
show_pub_date_only,
peertube_instances,
loops_instances,
allow_local_net_access,
theme_name,
system_language,
@ -2893,6 +2908,7 @@ def run_inbox_queue_watchdog(httpd, project_version: str,
httpd.max_followers,
httpd.allow_local_network_access,
httpd.peertube_instances,
httpd.loops_instances,
verify_all_signatures,
httpd.theme_name,
httpd.system_language,
@ -3425,6 +3441,7 @@ def run_inbox_queue(server,
max_followers: int,
allow_local_network_access: bool,
peertube_instances: [],
loops_instances: [],
verify_all_signatures: bool,
theme_name: str, system_language: str,
max_like_count: int, signing_priv_key_pem: str,
@ -3986,6 +4003,7 @@ def run_inbox_queue(server,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
theme_name, max_like_count,
cw_lists, dogwhistles,
server.min_images_for_accounts,
@ -4107,6 +4125,7 @@ def run_inbox_queue(server,
show_published_date_only,
allow_local_network_access,
peertube_instances,
loops_instances,
last_bounce_message,
theme_name, system_language,
max_like_count,

View File

@ -379,6 +379,7 @@ def receive_edit_to_post(recent_posts_cache: {}, message_json: {},
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
theme_name: str, max_like_count: int,
cw_lists: {}, dogwhistles: {},
min_images_for_accounts: [],
@ -526,6 +527,7 @@ def receive_edit_to_post(recent_posts_cache: {}, message_json: {},
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name, system_language,
max_like_count, not_dm,
@ -672,6 +674,7 @@ def receive_update_activity(recent_posts_cache: {}, session, base_dir: str,
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
theme_name: str, max_like_count: int,
cw_lists: {}, dogwhistles: {},
min_images_for_accounts: [],
@ -727,6 +730,7 @@ def receive_update_activity(recent_posts_cache: {}, session, base_dir: str,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
theme_name, max_like_count,
cw_lists, dogwhistles,
min_images_for_accounts,
@ -978,6 +982,7 @@ def receive_like(recent_posts_cache: {},
yt_replace_domain: str,
twitter_replacement_domain: str,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
theme_name: str, system_language: str,
max_like_count: int, cw_lists: {},
@ -1102,6 +1107,7 @@ def receive_like(recent_posts_cache: {},
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name, system_language,
max_like_count, not_dm,
@ -1194,6 +1200,7 @@ def receive_reaction(recent_posts_cache: {},
yt_replace_domain: str,
twitter_replacement_domain: str,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
theme_name: str, system_language: str,
max_like_count: int, cw_lists: {},
@ -1354,6 +1361,7 @@ def receive_reaction(recent_posts_cache: {},
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name, system_language,
max_like_count, not_dm,
@ -1385,6 +1393,7 @@ def receive_zot_reaction(recent_posts_cache: {},
yt_replace_domain: str,
twitter_replacement_domain: str,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
theme_name: str, system_language: str,
max_like_count: int, cw_lists: {},
@ -1554,6 +1563,7 @@ def receive_zot_reaction(recent_posts_cache: {},
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name, system_language,
max_like_count, not_dm,
@ -1585,6 +1595,7 @@ def receive_bookmark(recent_posts_cache: {},
yt_replace_domain: str,
twitter_replacement_domain: str,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
theme_name: str, system_language: str,
max_like_count: int, cw_lists: {},
@ -1696,6 +1707,7 @@ def receive_bookmark(recent_posts_cache: {},
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name, system_language,
max_like_count, not_dm,
@ -1809,6 +1821,7 @@ def receive_announce(recent_posts_cache: {},
max_recent_posts: int,
allow_deletion: bool,
peertube_instances: [],
loops_instances: [],
max_like_count: int, cw_lists: {},
lists_enabled: str, bold_reading: bool,
dogwhistles: {}, mitm: bool,
@ -2021,6 +2034,7 @@ def receive_announce(recent_posts_cache: {},
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name, system_language,
max_like_count, not_dm,
@ -2186,6 +2200,7 @@ def receive_question_vote(server, base_dir: str, nickname: str, domain: str,
yt_replace_domain: str,
twitter_replacement_domain: str,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
theme_name: str, system_language: str,
max_like_count: int,
@ -2247,6 +2262,7 @@ def receive_question_vote(server, base_dir: str, nickname: str, domain: str,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name, system_language,
max_like_count, not_dm,

View File

@ -177,6 +177,7 @@ def receive_undo_like(recent_posts_cache: {},
yt_replace_domain: str,
twitter_replacement_domain: str,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
theme_name: str, system_language: str,
max_like_count: int, cw_lists: {},
@ -287,6 +288,7 @@ def receive_undo_like(recent_posts_cache: {},
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name, system_language,
max_like_count, not_dm,
@ -319,6 +321,7 @@ def receive_undo_reaction(recent_posts_cache: {},
yt_replace_domain: str,
twitter_replacement_domain: str,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
theme_name: str, system_language: str,
max_like_count: int, cw_lists: {},
@ -447,6 +450,7 @@ def receive_undo_reaction(recent_posts_cache: {},
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name, system_language,
max_like_count, not_dm,
@ -478,6 +482,7 @@ def receive_undo_bookmark(recent_posts_cache: {},
yt_replace_domain: str,
twitter_replacement_domain: str,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
theme_name: str, system_language: str,
max_like_count: int, cw_lists: {},
@ -591,6 +596,7 @@ def receive_undo_bookmark(recent_posts_cache: {},
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name, system_language,
max_like_count, not_dm,

139
loops.py 100644
View File

@ -0,0 +1,139 @@
__filename__ = "loops.py"
__author__ = "Bob Mottram"
__license__ = "AGPL3+"
__version__ = "1.7.0"
__maintainer__ = "Bob Mottram"
__email__ = "bob@libreserver.org"
__status__ = "Production"
__module_group__ = "Profile Metadata"
from utils import get_attachment_property_value
from utils import remove_html
from utils import string_contains
loops_fieldnames = ['loops']
def get_loops(actor_json: {}) -> str:
"""Returns Loops for the given actor
"""
if not actor_json.get('attachment'):
return ''
if not isinstance(actor_json['attachment'], list):
return ''
for property_value in actor_json['attachment']:
if not isinstance(property_value, dict):
print("WARN: actor attachment is not dict: " + str(property_value))
continue
name_value: str = None
if property_value.get('name'):
if isinstance(property_value['name'], str):
name_value = property_value['name'].lower()
elif property_value.get('schema:name'):
if isinstance(property_value['schema:name'], str):
name_value = property_value['schema:name'].lower()
if not name_value:
continue
if not string_contains(name_value, loops_fieldnames):
continue
if not property_value.get('type'):
continue
if not isinstance(property_value['type'], str):
continue
prop_value_name, _ = \
get_attachment_property_value(property_value)
if not prop_value_name:
continue
if not property_value['type'].endswith('PropertyValue'):
continue
loops_text = property_value[prop_value_name]
return remove_html(loops_text)
for property_value in actor_json['attachment']:
if not isinstance(property_value, dict):
print("WARN: actor attachment is not dict: " + str(property_value))
continue
if not property_value.get('type'):
continue
if not isinstance(property_value['type'], str):
continue
prop_value_name, _ = \
get_attachment_property_value(property_value)
if not prop_value_name:
continue
if not property_value['type'].endswith('PropertyValue'):
continue
loops_text: str = property_value[prop_value_name]
if '//loops.' not in loops_text:
continue
return remove_html(loops_text)
return ''
def set_loops(actor_json: {}, loops: str) -> None:
"""Sets Loops for the given actor
"""
if not actor_json.get('attachment'):
actor_json['attachment']: list[dict] = []
# remove any existing value
property_found = None
for property_value in actor_json['attachment']:
if not isinstance(property_value, dict):
print("WARN: actor attachment is not dict: " + str(property_value))
continue
name_value: str = None
if property_value.get('name'):
if isinstance(property_value['name'], str):
name_value = property_value['name'].lower()
elif property_value.get('schema:name'):
if isinstance(property_value['schema:name'], str):
name_value = property_value['schema:name'].lower()
if not name_value:
continue
if not property_value.get('type'):
continue
if not string_contains(name_value, loops_fieldnames):
continue
property_found = property_value
break
if property_found:
actor_json['attachment'].remove(property_found)
for property_value in actor_json['attachment']:
if not isinstance(property_value, dict):
print("WARN: actor attachment is not dict: " + str(property_value))
continue
name_value: str = None
if property_value.get('name'):
if isinstance(property_value['name'], str):
name_value = property_value['name']
elif property_value.get('schema:name'):
if isinstance(property_value['schema:name'], str):
name_value = property_value['schema:name']
if not name_value:
continue
if not property_value.get('type'):
continue
if not isinstance(property_value['type'], str):
continue
name_value = name_value.lower()
if not string_contains(name_value, loops_fieldnames):
continue
if not property_value['type'].endswith('PropertyValue'):
continue
prop_value_name, _ = \
get_attachment_property_value(property_value)
if not prop_value_name:
continue
property_value[prop_value_name] = remove_html(loops)
return
new_loops = {
"type": "PropertyValue",
"name": "Loops",
"value": remove_html(loops)
}
actor_json['attachment'].append(new_loops)

View File

@ -299,7 +299,9 @@ def post_message_to_outbox(session, translate: {},
shared_item_federation_tokens: {},
low_bandwidth: bool,
signing_priv_key_pem: str,
peertube_instances: str, theme: str,
peertube_instances: str,
loops_instances: str,
theme: str,
max_like_count: int,
max_recent_posts: int, cw_lists: {},
lists_enabled: str,
@ -720,6 +722,7 @@ def post_message_to_outbox(session, translate: {},
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme, system_language,
max_like_count,

9
pgp.py
View File

@ -32,6 +32,7 @@ from art import get_art_site_url
from music import get_music_site_url
from youtube import get_youtube
from peertube import get_peertube
from loops import get_loops
from xmpp import get_xmpp_address
from matrix import get_matrix_address
from briar import get_briar_address
@ -944,6 +945,9 @@ def actor_to_vcard(actor: {}, domain: str, translate: {}) -> str:
peertube = get_peertube(actor)
if peertube:
vcard_str += 'SOCIALPROFILE;SERVICE-TYPE=PeerTube:' + peertube + '\n'
loops = get_loops(actor)
if loops:
vcard_str += 'SOCIALPROFILE;SERVICE-TYPE=Loops:' + loops + '\n'
website = get_website(actor, translate)
if website:
vcard_str += 'URL:' + website + '\n'
@ -1061,6 +1065,11 @@ def actor_to_vcard_xml(actor: {}, domain: str, translate: {}) -> str:
vcard_str += ' <url>' + \
'<parameters><type><text>peertube</text></type></parameters>' + \
'<uri>' + peertube + '</uri></url>\n'
loops = get_loops(actor)
if loops:
vcard_str += ' <url>' + \
'<parameters><type><text>loops</text></type></parameters>' + \
'<uri>' + loops + '</uri></url>\n'
deltachat_invite = get_deltachat_invite(actor, translate)
if deltachat_invite:
vcard_str += ' <impp>' + \

View File

@ -158,6 +158,7 @@ def _update_post_schedule(base_dir: str, handle: str, httpd,
httpd.low_bandwidth,
httpd.signing_priv_key_pem,
httpd.peertube_instances,
httpd.loops_instances,
httpd.theme_name,
httpd.max_like_count,
httpd.max_recent_posts,

View File

@ -769,5 +769,6 @@
"Organisation": "منظمة",
"Group": "مجموعة",
"minutes": "دقائق",
"Availability": "التوافر"
"Availability": "التوافر",
"Loops Instances": "حلقات التكرار"
}

View File

@ -769,5 +769,6 @@
"Organisation": "সংগঠন",
"Group": "গ্রুপ",
"minutes": "মিনিট",
"Availability": "প্রাপ্যতা"
"Availability": "প্রাপ্যতা",
"Loops Instances": "লুপ ইনস্ট্যান্স"
}

View File

@ -769,5 +769,6 @@
"Organisation": "Organització",
"Group": "Grup",
"minutes": "minuts",
"Availability": "Disponibilitat"
"Availability": "Disponibilitat",
"Loops Instances": "Instàncies de bucles"
}

View File

@ -769,5 +769,6 @@
"Organisation": "Sefydliad",
"Group": "Grŵp",
"minutes": "munudau",
"Availability": "Argaeledd"
"Availability": "Argaeledd",
"Loops Instances": "Achosion Dolenni"
}

View File

@ -769,5 +769,6 @@
"Organisation": "Organisation",
"Group": "Gruppe",
"minutes": "minuten",
"Availability": "Verfügbarkeit"
"Availability": "Verfügbarkeit",
"Loops Instances": "Schleifeninstanzen"
}

View File

@ -769,5 +769,6 @@
"Organisation": "Οργάνωση",
"Group": "Ομάδα",
"minutes": "πρακτικά",
"Availability": "Διαθεσιμότητα"
"Availability": "Διαθεσιμότητα",
"Loops Instances": "Παρουσίες βρόχων"
}

View File

@ -769,5 +769,6 @@
"Organisation": "Organisation",
"Group": "Group",
"minutes": "minutes",
"Availability": "Availability"
"Availability": "Availability",
"Loops Instances": "Loops Instances"
}

View File

@ -769,5 +769,6 @@
"Organisation": "Organización",
"Group": "Grupo",
"minutes": "minutos",
"Availability": "Disponibilidad"
"Availability": "Disponibilidad",
"Loops Instances": "Instancias de bucles"
}

View File

@ -769,5 +769,6 @@
"Organisation": "سازمان",
"Group": "گروه",
"minutes": "دقیقه",
"Availability": "در دسترس بودن"
"Availability": "در دسترس بودن",
"Loops Instances": "نمونه‌های حلقه‌ها"
}

View File

@ -769,5 +769,6 @@
"Organisation": "Organisaatio",
"Group": "Ryhmä",
"minutes": "minuuttia",
"Availability": "Saatavuus"
"Availability": "Saatavuus",
"Loops Instances": "Silmukat-instanssit"
}

View File

@ -769,5 +769,6 @@
"Organisation": "Organisation",
"Group": "Groupe",
"minutes": "minutes",
"Availability": "Disponibilité"
"Availability": "Disponibilité",
"Loops Instances": "Instances de boucles"
}

View File

@ -769,5 +769,6 @@
"Organisation": "Eagraíocht",
"Group": "Grúpa",
"minutes": "nóiméad",
"Availability": "Infhaighteacht"
"Availability": "Infhaighteacht",
"Loops Instances": "Cásanna Lúb"
}

View File

@ -769,5 +769,6 @@
"Organisation": "אִרגוּן",
"Group": "קְבוּצָה",
"minutes": "פּרוֹטוֹקוֹל",
"Availability": "זְמִינוּת"
"Availability": "זְמִינוּת",
"Loops Instances": "מופעי לולאות"
}

View File

@ -769,5 +769,6 @@
"Organisation": "संगठन",
"Group": "समूह",
"minutes": "मिनट",
"Availability": "उपलब्धता"
"Availability": "उपलब्धता",
"Loops Instances": "लूप इंस्टेंस"
}

View File

@ -769,5 +769,6 @@
"Organisation": "Organizzazione",
"Group": "Gruppo",
"minutes": "minuti",
"Availability": "Disponibilità"
"Availability": "Disponibilità",
"Loops Instances": "Istanze di cicli"
}

View File

@ -769,5 +769,6 @@
"Organisation": "組織",
"Group": "グループ",
"minutes": "分",
"Availability": "可用性"
"Availability": "可用性",
"Loops Instances": "ループインスタンス"
}

View File

@ -769,5 +769,6 @@
"Organisation": "조직",
"Group": "그룹",
"minutes": "분",
"Availability": "유효성"
"Availability": "유효성",
"Loops Instances": "루프 인스턴스"
}

View File

@ -769,5 +769,6 @@
"Organisation": "Sazûman",
"Group": "Kom",
"minutes": "deqîqe",
"Availability": "Berdestbûnî"
"Availability": "Berdestbûnî",
"Loops Instances": "Nimûneyên Loopan"
}

View File

@ -769,5 +769,6 @@
"Organisation": "Organisatie",
"Group": "Groep",
"minutes": "notulen",
"Availability": "Beschikbaarheid"
"Availability": "Beschikbaarheid",
"Loops Instances": "Lusinstanties"
}

View File

@ -765,5 +765,6 @@
"Organisation": "Organisation",
"Group": "Group",
"minutes": "minutes",
"Availability": "Availability"
"Availability": "Availability",
"Loops Instances": "Loops Instances"
}

View File

@ -769,5 +769,6 @@
"Organisation": "Organizacja",
"Group": "Grupa",
"minutes": "protokół",
"Availability": "Dostępność"
"Availability": "Dostępność",
"Loops Instances": "Instancje pętli"
}

View File

@ -769,5 +769,6 @@
"Organisation": "Organização",
"Group": "Grupo",
"minutes": "minutos",
"Availability": "Disponibilidade"
"Availability": "Disponibilidade",
"Loops Instances": "Instâncias de Loops"
}

View File

@ -769,5 +769,6 @@
"Organisation": "Организация",
"Group": "Группа",
"minutes": "минут",
"Availability": "Доступность"
"Availability": "Доступность",
"Loops Instances": "Экземпляры циклов"
}

View File

@ -769,5 +769,6 @@
"Organisation": "Shirika",
"Group": "Kundi",
"minutes": "dakika",
"Availability": "Upatikanaji"
"Availability": "Upatikanaji",
"Loops Instances": "Matukio ya Mizunguko"
}

View File

@ -769,5 +769,6 @@
"Organisation": "Organizasyon",
"Group": "Grup",
"minutes": "dakika",
"Availability": "Müsaitlik"
"Availability": "Müsaitlik",
"Loops Instances": "Döngü Örnekleri"
}

View File

@ -769,5 +769,6 @@
"Organisation": "Організація",
"Group": "Група",
"minutes": "хвилин",
"Availability": "Наявність"
"Availability": "Наявність",
"Loops Instances": "Екземпляри циклів"
}

View File

@ -769,5 +769,6 @@
"Organisation": "אָרגאַניזאַציע",
"Group": "גרופּע",
"minutes": "מינוטן",
"Availability": "פאַראַנען"
"Availability": "פאַראַנען",
"Loops Instances": "לופּס אינסטאַנסן"
}

View File

@ -769,5 +769,6 @@
"Organisation": "组织",
"Group": "团体",
"minutes": "分钟",
"Availability": "可用性"
"Availability": "可用性",
"Loops Instances": "循环实例"
}

View File

@ -38,6 +38,7 @@ def html_confirm_delete(server,
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
theme_name: str, system_language: str,
max_like_count: int, signing_priv_key_pem: str,
@ -108,7 +109,9 @@ def html_confirm_delete(server,
yt_replace_domain,
twitter_replacement_domain,
show_published_date_only,
peertube_instances, allow_local_network_access,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name, system_language, max_like_count,
False, False, False, False, False, False,
cw_lists, lists_enabled, timezone, mitm,

View File

@ -44,6 +44,7 @@ def html_conversation_view(authorized: bool, post_id: str,
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
theme_name: str,
system_language: str,
@ -156,6 +157,7 @@ def html_conversation_view(authorized: bool, post_id: str,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name, system_language,
max_like_count,

View File

@ -265,6 +265,7 @@ def html_new_post(edit_post_params: {},
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
system_language: str,
languages_understood: [],
@ -462,6 +463,7 @@ def html_new_post(edit_post_params: {},
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme, system_language,
max_like_count,

View File

@ -34,6 +34,7 @@ def _html_front_screen_posts(recent_posts_cache: {}, max_recent_posts: int,
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
theme_name: str, system_language: str,
max_like_count: int,
@ -100,6 +101,7 @@ def _html_front_screen_posts(recent_posts_cache: {}, max_recent_posts: int,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name, system_language,
max_like_count,
@ -139,6 +141,7 @@ def html_front_screen(signing_priv_key_pem: str,
show_published_date_only: bool,
newswire: {}, theme: str,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
access_keys: {},
system_language: str, max_like_count: int,
@ -224,6 +227,7 @@ def html_front_screen(signing_priv_key_pem: str,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme, system_language,
max_like_count,

View File

@ -40,6 +40,7 @@ def html_likers_of_post(base_dir: str, nickname: str,
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
system_language: str,
max_like_count: int, signing_priv_key_pem: str,
@ -121,6 +122,7 @@ def html_likers_of_post(base_dir: str, nickname: str,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme, system_language,
max_like_count,

View File

@ -35,8 +35,30 @@ def load_peertube_instances(base_dir: str, peertube_instances: []) -> None:
peertube_instances.append(url)
def load_loops_instances(base_dir: str, loops_instances: []) -> None:
"""Loads loops instances from file into the given list
"""
loops_list = None
loops_instances_filename = data_dir(base_dir) + '/loops.txt'
if is_a_file(loops_instances_filename):
loops_str = \
load_string(loops_instances_filename,
'EX: load_loops_instances unable to read ' +
loops_instances_filename + ' [ex]')
if loops_str:
loops_str = loops_str.replace('\r', '')
loops_list = loops_str.split('\n')
if not loops_list:
return
for url in loops_list:
if url in loops_instances:
continue
loops_instances.append(url)
def _add_embedded_video_from_sites(content: str,
peertube_instances: [],
loops_instances: [],
width: int, height: int,
domain: str) -> str:
"""Adds embedded videos
@ -273,6 +295,73 @@ def _add_embedded_video_from_sites(content: str,
url = url.replace('/w/', '/embed/')
url = url.replace('/watch/', '/embed/')
content += \
"<center>\n<span itemprop=\"video\">\n" + \
"<iframe loading=\"lazy\" decoding=\"async\" " + \
"sandbox=\"allow-same-origin " + \
"allow-scripts\" src=\"https://" + \
site + url + "\" width=\"" + str(width) + \
"\" height=\"" + str(height) + \
"\" frameborder=\"0\" allow=\"" + \
"fullscreen\" allowfullscreen tabindex=\"10\" " + \
"sandbox=\"allow-scripts allow-same-origin\">" + \
"</iframe>\n</span>\n</center>\n"
return content
if loops_instances:
# only create an embedded video for a limited set of
# Loops sites.
loops_sites = loops_instances
else:
# A default minimal set of loops instances
loops_sites = (
)
for site in loops_sites:
site = site.strip()
if not site:
continue
if len(site) < 5:
continue
if '.' not in site:
continue
site_str = site
if site.startswith('http://'):
site = site.replace('http://', '')
elif site.startswith('https://'):
site = site.replace('https://', '')
if site.endswith('.onion') or site.endswith('.i2p'):
site_str = 'http://' + site
else:
site_str = 'https://' + site
site_str = '"' + site_str
if site_str not in content:
continue
url = content.split(site_str)[1]
if '"' not in url:
continue
url = url.split('"')[0]
if not url:
continue
# TODO check this on Loops instances
possible_endings = (
'/trending', '/home', '/overview',
'/recently-added', '/local', '/about')
if string_ends_with(url, possible_endings):
# ignore various loops endpoints
continue
if '/c/' in url or '/m/' in url:
# don't try to embed loops channel page
continue
if '?sort=' in url:
# don't try to embed a sorted list
continue
if '/w/' in url:
if '/videos/' not in url:
url = url.replace('/w/', '/videos/embed/')
else:
url = url.replace('/w/', '/embed/')
url = url.replace('/watch/', '/embed/')
content += \
"<center>\n<span itemprop=\"video\">\n" + \
"<iframe loading=\"lazy\" decoding=\"async\" " + \
@ -388,11 +477,14 @@ def _add_embedded_video(translate: {}, content: str) -> str:
def add_embedded_elements(translate: {}, content: str,
peertube_instances: [], domain: str) -> str:
peertube_instances: [],
loops_instances: [],
domain: str) -> str:
"""Adds embedded elements for various media types
"""
content = _add_embedded_video_from_sites(content,
peertube_instances,
loops_instances,
400, 300, domain)
content = _add_embedded_audio(translate, content)
return _add_embedded_video(translate, content)

View File

@ -56,7 +56,9 @@ def html_moderation(default_timeline: str,
rss_icon_at_top: bool,
publish_button_at_top: bool,
authorized: bool, moderation_action_str: str,
theme: str, peertube_instances: [],
theme: str,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
text_mode_banner: str,
access_keys: {}, system_language: str,
@ -99,7 +101,9 @@ def html_moderation(default_timeline: str,
rss_icon_at_top,
publish_button_at_top,
authorized, moderation_action_str, theme,
peertube_instances, allow_local_network_access,
peertube_instances,
loops_instances,
allow_local_network_access,
text_mode_banner, access_keys, system_language,
max_like_count, shared_items_federated_domains,
signing_priv_key_pem, cw_lists, lists_enabled,

View File

@ -2349,6 +2349,7 @@ def individual_post_as_html(signing_priv_key_pem: str,
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
theme_name: str, system_language: str,
max_like_count: int,
@ -3234,7 +3235,9 @@ def individual_post_as_html(signing_priv_key_pem: str,
if not post_is_sensitive:
content_str = object_content + attachment_str
content_str = add_embedded_elements(translate, content_str,
peertube_instances, domain)
peertube_instances,
loops_instances,
domain)
content_str = insert_question(base_dir, translate,
nickname, domain,
content_str, post_json_object,
@ -3258,6 +3261,7 @@ def individual_post_as_html(signing_priv_key_pem: str,
if not is_patch:
cw_content_str = add_embedded_elements(translate, cw_content_str,
peertube_instances,
loops_instances,
domain_full)
cw_content_str = \
insert_question(base_dir, translate, nickname, domain,
@ -3506,6 +3510,7 @@ def html_individual_post(recent_posts_cache: {}, max_recent_posts: int,
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
theme_name: str, system_language: str,
max_like_count: int, signing_priv_key_pem: str,
@ -3612,6 +3617,7 @@ def html_individual_post(recent_posts_cache: {}, max_recent_posts: int,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access, theme_name,
system_language, max_like_count,
False, authorized, False, False, False, False,
@ -3664,6 +3670,7 @@ def html_individual_post(recent_posts_cache: {}, max_recent_posts: int,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name, system_language,
max_like_count,
@ -3714,6 +3721,7 @@ def html_individual_post(recent_posts_cache: {}, max_recent_posts: int,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name, system_language,
max_like_count,
@ -3773,6 +3781,7 @@ def html_post_replies(recent_posts_cache: {}, max_recent_posts: int,
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
theme_name: str, system_language: str,
max_like_count: int,
@ -3812,6 +3821,7 @@ def html_post_replies(recent_posts_cache: {}, max_recent_posts: int,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name, system_language,
max_like_count,
@ -3854,6 +3864,7 @@ def html_emoji_reaction_picker(recent_posts_cache: {}, max_recent_posts: int,
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
theme_name: str, system_language: str,
max_like_count: int, signing_priv_key_pem: str,
@ -3894,6 +3905,7 @@ def html_emoji_reaction_picker(recent_posts_cache: {}, max_recent_posts: int,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name, system_language,
max_like_count,

View File

@ -81,6 +81,7 @@ from art import get_art_site_url
from music import get_music_site_url
from youtube import get_youtube
from peertube import get_peertube
from loops import get_loops
from xmpp import get_xmpp_address
from matrix import get_matrix_address
from ssb import get_ssb_address
@ -252,6 +253,7 @@ def html_profile_after_search(authorized: bool,
show_published_date_only: bool,
default_timeline: str,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
theme_name: str,
access_keys: {},
@ -384,6 +386,7 @@ def html_profile_after_search(authorized: bool,
music_site_url: str = get_music_site_url(profile_json)
youtube: str = get_youtube(profile_json)
peertube: str = get_peertube(profile_json)
loops: str = get_loops(profile_json)
pixelfed: str = get_pixelfed(profile_json)
donate_url: str = get_donation_url(profile_json)
blog_url: str = get_blog_address(profile_json)
@ -534,7 +537,7 @@ def html_profile_after_search(authorized: bool,
authorized,
person_url, no_of_books,
birth_date,
youtube, peertube, pixelfed,
youtube, peertube, loops, pixelfed,
discord, music_site_url,
art_site_url,
donate_url)
@ -683,6 +686,7 @@ def html_profile_after_search(authorized: bool,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name, system_language,
max_like_count,
@ -953,6 +957,7 @@ def _get_profile_header_after_search(base_dir: str,
birth_date: str,
youtube: str,
peertube: str,
loops: str,
pixelfed: str,
discord: str,
music_site_url: str,
@ -1089,6 +1094,9 @@ def _get_profile_header_after_search(base_dir: str,
if peertube:
html_str += ' <p>PeerTube: <a href="' + peertube + '">' + \
peertube + '</a></p>\n'
if loops:
html_str += ' <p>Loops: <a href="' + loops + '">' + \
loops + '</a></p>\n'
if pixelfed:
html_str += ' <p>Pixelfed: <a href="' + pixelfed + '">' + \
pixelfed + '</a></p>\n'
@ -1157,6 +1165,7 @@ def html_profile(signing_priv_key_pem: str,
show_published_date_only: bool,
newswire: {}, theme: str, dormant_months: int,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
text_mode_banner: str,
debug: bool, access_keys: {}, city: str,
@ -1205,7 +1214,9 @@ def html_profile(signing_priv_key_pem: str,
yt_replace_domain,
twitter_replacement_domain,
show_published_date_only,
newswire, theme, extra_json,
newswire, theme,
peertube_instances,
loops_instances,
allow_local_network_access, access_keys,
system_language, max_like_count,
shared_items_federated_domains, cw_lists,
@ -1318,6 +1329,7 @@ def html_profile(signing_priv_key_pem: str,
music_site_url: str = get_music_site_url(profile_json)
youtube: str = get_youtube(profile_json)
peertube: str = get_peertube(profile_json)
loops: str = get_loops(profile_json)
xmpp_address: str = get_xmpp_address(profile_json)
matrix_address: str = get_matrix_address(profile_json)
ssb_address: str = get_ssb_address(profile_json)
@ -1328,8 +1340,8 @@ def html_profile(signing_priv_key_pem: str,
verified_site_checkmark: str = ''
premium: bool = is_premium_account(base_dir, nickname, domain)
if donate_url or website_url or repo_url or pronouns or discord or \
art_site_url or music_site_url or youtube or peertube or pixelfed or \
xmpp_address or matrix_address or \
art_site_url or music_site_url or youtube or peertube or \
loops or pixelfed or xmpp_address or matrix_address or \
ssb_address or tox_address or lxmf_address or briar_address or \
cwtch_address or pgp_pub_key or enigma_pub_key or pgp_fingerprint or \
email_address or deltachat_invite:
@ -1429,6 +1441,10 @@ def html_profile(signing_priv_key_pem: str,
donate_section += \
'<p>PeerTube: <a href="' + \
peertube + '" tabindex="1">' + peertube + '</a></p>\n'
if loops:
donate_section += \
'<p>Loops: <a href="' + \
loops + '" tabindex="1">' + loops + '</a></p>\n'
if matrix_address:
donate_section += \
'<p>' + translate['Matrix'] + ': ' + matrix_address + '</p>\n'
@ -1841,6 +1857,7 @@ def html_profile(signing_priv_key_pem: str,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme, system_language,
max_like_count,
@ -1956,6 +1973,7 @@ def _html_profile_posts(recent_posts_cache: {}, max_recent_posts: int,
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
theme_name: str, system_language: str,
max_like_count: int,
@ -2023,6 +2041,7 @@ def _html_profile_posts(recent_posts_cache: {}, max_recent_posts: int,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name, system_language,
max_like_count,
@ -2286,6 +2305,7 @@ def _html_edit_profile_twitter(base_dir: str, translate: {},
def _html_edit_profile_instance(base_dir: str, translate: {},
peertube_instances: [],
loops_instances: [],
media_instance_str: str,
blogs_instance_str: str,
news_instance_str: str) -> (str, str,
@ -2497,8 +2517,14 @@ def _html_edit_profile_instance(base_dir: str, translate: {},
peertube_str += \
edit_text_area(translate['Peertube Instances'], None,
'ptInstances', peertube_instances_str, 200, '', False)
peertube_str += ' <br>\n'
loops_instances_str: str = ''
for url in loops_instances:
loops_instances_str += url + '\n'
peertube_str += \
' <br>\n'
edit_text_area(translate['Loops Instances'], None,
'loopsInstances', loops_instances_str, 200, '', False)
peertube_str += ' <br>\n'
yt_replace_domain: str = get_config_param(base_dir, "youtubedomain")
if not yt_replace_domain:
yt_replace_domain: str = ''
@ -3076,6 +3102,7 @@ def _html_edit_profile_contact_info(email_address: str,
translate: {},
youtube: str,
peertube: str,
loops: str,
pixelfed: str,
discord: str,
music_site_url: str,
@ -3102,6 +3129,8 @@ def _html_edit_profile_contact_info(email_address: str,
youtube)
edit_profile_form += edit_text_field('PeerTube', 'peertubeChannel',
peertube)
edit_profile_form += edit_text_field('Loops', 'loopsChannel',
loops)
edit_profile_form += edit_text_field('Pixelfed', 'pixelfedChannel',
pixelfed)
edit_profile_form += edit_text_field('Discord', 'discordChannel',
@ -3533,6 +3562,7 @@ def html_edit_profile(server, translate: {},
domain: str, port: int,
default_timeline: str, theme: str,
peertube_instances: [],
loops_instances: [],
text_mode_banner: str,
user_agents_blocked: [],
crawlers_allowed: [],
@ -3584,7 +3614,7 @@ def html_edit_profile(server, translate: {},
bio_str = donate_url = website_url = gemini_link = ''
email_address = deltachat_invite = featured_hashtags = ''
pgp_pub_key = enigma_pub_key = ''
pgp_fingerprint = pronouns = peertube = youtube = pixelfed = ''
pgp_fingerprint = pronouns = peertube = loops = youtube = pixelfed = ''
ssb_address = blog_address = matrix_address = ''
tox_address = lxmf_address = ''
cwtch_address = briar_address = xmpp_address = ''
@ -3610,6 +3640,7 @@ def html_edit_profile(server, translate: {},
music_site_url = get_music_site_url(actor_json)
youtube = get_youtube(actor_json)
peertube = get_peertube(actor_json)
loops = get_loops(actor_json)
xmpp_address = get_xmpp_address(actor_json)
matrix_address = get_matrix_address(actor_json)
ssb_address = get_ssb_address(actor_json)
@ -3690,6 +3721,7 @@ def html_edit_profile(server, translate: {},
instance_str: str = ''
role_assign_str: str = ''
peertube_str: str = ''
loops_str: str = ''
libretranslate_str: str = ''
memorial_str: str = ''
system_monitor_str: str = ''
@ -3711,10 +3743,11 @@ def html_edit_profile(server, translate: {},
# shared items section
shares_federation_str = \
_html_edit_profile_shared_items(base_dir, translate)
(instance_str, role_assign_str, peertube_str,
(instance_str, role_assign_str, peertube_str, loops_str,
libretranslate_str, memorial_str) = \
_html_edit_profile_instance(base_dir, translate,
peertube_instances,
loops_instances,
media_instance_str,
blogs_instance_str,
news_instance_str)
@ -3846,7 +3879,8 @@ def html_edit_profile(server, translate: {},
lxmf_address,
briar_address,
cwtch_address, translate,
youtube, peertube, pixelfed,
youtube, peertube, loops,
pixelfed,
discord, music_site_url,
art_site_url)
@ -3902,7 +3936,8 @@ def html_edit_profile(server, translate: {},
edit_profile_form += \
_html_edit_profile_skills(base_dir, nickname, domain, translate)
edit_profile_form += role_assign_str + peertube_str + graphics_str
edit_profile_form += \
role_assign_str + peertube_str + loops_str + graphics_str
edit_profile_form += shares_federation_str + twitter_str + instance_str
# danger zone section

View File

@ -722,6 +722,7 @@ def html_history_search(translate: {}, base_dir: str,
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
theme_name: str, box_name: str,
system_language: str,
@ -848,6 +849,7 @@ def html_history_search(translate: {}, base_dir: str,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name, system_language,
max_like_count,
@ -885,6 +887,7 @@ def html_hashtag_search(nickname: str, domain: str, port: int,
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
theme_name: str, system_language: str,
max_like_count: int,
@ -1093,6 +1096,7 @@ def html_hashtag_search(nickname: str, domain: str, port: int,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name, system_language,
max_like_count,
@ -1145,6 +1149,7 @@ def html_hashtag_search_remote(nickname: str, domain: str, port: int,
twitter_replacement_domain: str,
show_published_date_only: bool,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
theme_name: str, system_language: str,
max_like_count: int,
@ -1315,6 +1320,7 @@ def html_hashtag_search_remote(nickname: str, domain: str, port: int,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme_name, system_language,
max_like_count,

View File

@ -464,6 +464,7 @@ def html_timeline(default_timeline: str,
moderation_action_str: str,
theme: str,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
text_mode_banner: str,
access_keys: {}, system_language: str,
@ -1089,6 +1090,7 @@ def html_timeline(default_timeline: str,
twitter_replacement_domain,
show_published_date_only,
peertube_instances,
loops_instances,
allow_local_network_access,
theme, system_language,
max_like_count,
@ -1382,6 +1384,7 @@ def html_shares(default_timeline: str,
publish_button_at_top: bool,
authorized: bool, theme: str,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
text_mode_banner: str,
access_keys: {}, system_language: str,
@ -1427,7 +1430,9 @@ def html_shares(default_timeline: str,
full_width_tl_button_header,
rss_icon_at_top,
publish_button_at_top,
authorized, None, theme, peertube_instances,
authorized, None, theme,
peertube_instances,
loops_instances,
allow_local_network_access, text_mode_banner,
access_keys, system_language, max_like_count,
shared_items_federated_domains,
@ -1463,6 +1468,7 @@ def html_wanted(default_timeline: str,
publish_button_at_top: bool,
authorized: bool, theme: str,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
text_mode_banner: str,
access_keys: {}, system_language: str,
@ -1508,7 +1514,9 @@ def html_wanted(default_timeline: str,
full_width_tl_button_header,
rss_icon_at_top,
publish_button_at_top,
authorized, None, theme, peertube_instances,
authorized, None, theme,
peertube_instances,
loops_instances,
allow_local_network_access, text_mode_banner,
access_keys, system_language, max_like_count,
shared_items_federated_domains,
@ -1545,6 +1553,7 @@ def html_inbox(default_timeline: str,
publish_button_at_top: bool,
authorized: bool, theme: str,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
text_mode_banner: str,
access_keys: {}, system_language: str,
@ -1591,7 +1600,9 @@ def html_inbox(default_timeline: str,
full_width_tl_button_header,
rss_icon_at_top,
publish_button_at_top,
authorized, None, theme, peertube_instances,
authorized, None, theme,
peertube_instances,
loops_instances,
allow_local_network_access, text_mode_banner,
access_keys, system_language, max_like_count,
shared_items_federated_domains,
@ -1628,6 +1639,7 @@ def html_bookmarks(default_timeline: str,
publish_button_at_top: bool,
authorized: bool, theme: str,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
text_mode_banner: str,
access_keys: {}, system_language: str,
@ -1673,7 +1685,9 @@ def html_bookmarks(default_timeline: str,
full_width_tl_button_header,
rss_icon_at_top,
publish_button_at_top,
authorized, None, theme, peertube_instances,
authorized, None, theme,
peertube_instances,
loops_instances,
allow_local_network_access, text_mode_banner,
access_keys, system_language, max_like_count,
shared_items_federated_domains, signing_priv_key_pem,
@ -1709,6 +1723,7 @@ def html_inbox_dms(default_timeline: str,
publish_button_at_top: bool,
authorized: bool, theme: str,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
text_mode_banner: str,
access_keys: {}, system_language: str,
@ -1750,7 +1765,9 @@ def html_inbox_dms(default_timeline: str,
full_width_tl_button_header,
rss_icon_at_top,
publish_button_at_top,
authorized, None, theme, peertube_instances,
authorized, None, theme,
peertube_instances,
loops_instances,
allow_local_network_access, text_mode_banner,
access_keys, system_language, max_like_count,
shared_items_federated_domains,
@ -1787,6 +1804,7 @@ def html_inbox_replies(default_timeline: str,
publish_button_at_top: bool,
authorized: bool, theme: str,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
text_mode_banner: str,
access_keys: {}, system_language: str,
@ -1828,7 +1846,9 @@ def html_inbox_replies(default_timeline: str,
full_width_tl_button_header,
rss_icon_at_top,
publish_button_at_top,
authorized, None, theme, peertube_instances,
authorized, None, theme,
peertube_instances,
loops_instances,
allow_local_network_access, text_mode_banner,
access_keys, system_language, max_like_count,
shared_items_federated_domains, signing_priv_key_pem,
@ -1863,6 +1883,7 @@ def html_inbox_media(default_timeline: str,
publish_button_at_top: bool,
authorized: bool, theme: str,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
text_mode_banner: str,
access_keys: {}, system_language: str,
@ -1904,7 +1925,9 @@ def html_inbox_media(default_timeline: str,
full_width_tl_button_header,
rss_icon_at_top,
publish_button_at_top,
authorized, None, theme, peertube_instances,
authorized, None, theme,
peertube_instances,
loops_instances,
allow_local_network_access, text_mode_banner,
access_keys, system_language, max_like_count,
shared_items_federated_domains, signing_priv_key_pem,
@ -1939,6 +1962,7 @@ def html_inbox_blogs(default_timeline: str,
publish_button_at_top: bool,
authorized: bool, theme: str,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
text_mode_banner: str,
access_keys: {}, system_language: str,
@ -1980,7 +2004,9 @@ def html_inbox_blogs(default_timeline: str,
full_width_tl_button_header,
rss_icon_at_top,
publish_button_at_top,
authorized, None, theme, peertube_instances,
authorized, None, theme,
peertube_instances,
loops_instances,
allow_local_network_access, text_mode_banner,
access_keys, system_language, max_like_count,
shared_items_federated_domains, signing_priv_key_pem,
@ -2016,6 +2042,7 @@ def html_inbox_features(default_timeline: str,
authorized: bool,
theme: str,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
text_mode_banner: str,
access_keys: {}, system_language: str,
@ -2055,7 +2082,9 @@ def html_inbox_features(default_timeline: str,
full_width_tl_button_header,
rss_icon_at_top,
publish_button_at_top,
authorized, None, theme, peertube_instances,
authorized, None, theme,
peertube_instances,
loops_instances,
allow_local_network_access, text_mode_banner,
access_keys, system_language, max_like_count,
shared_items_federated_domains, signing_priv_key_pem,
@ -2090,6 +2119,7 @@ def html_inbox_news(default_timeline: str,
publish_button_at_top: bool,
authorized: bool, theme: str,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
text_mode_banner: str,
access_keys: {}, system_language: str,
@ -2129,7 +2159,9 @@ def html_inbox_news(default_timeline: str,
full_width_tl_button_header,
rss_icon_at_top,
publish_button_at_top,
authorized, None, theme, peertube_instances,
authorized, None, theme,
peertube_instances,
loops_instances,
allow_local_network_access, text_mode_banner,
access_keys, system_language, max_like_count,
shared_items_federated_domains, signing_priv_key_pem,
@ -2164,6 +2196,7 @@ def html_outbox(default_timeline: str,
publish_button_at_top: bool,
authorized: bool, theme: str,
peertube_instances: [],
loops_instances: [],
allow_local_network_access: bool,
text_mode_banner: str,
access_keys: {}, system_language: str,
@ -2206,7 +2239,9 @@ def html_outbox(default_timeline: str,
full_width_tl_button_header,
rss_icon_at_top,
publish_button_at_top,
authorized, None, theme, peertube_instances,
authorized, None, theme,
peertube_instances,
loops_instances,
allow_local_network_access, text_mode_banner,
access_keys, system_language, max_like_count,
shared_items_federated_domains, signing_priv_key_pem,