From 5d0d8b1ddca75a413d463770d1b4a4f19241625d Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 12 Aug 2020 09:40:18 +0000 Subject: [PATCH 01/48] Add line endings --- webinterface.py | 188 ++++++++++++++++++++++++------------------------ 1 file changed, 95 insertions(+), 93 deletions(-) diff --git a/webinterface.py b/webinterface.py index 6f8030950..c3eefcd93 100644 --- a/webinterface.py +++ b/webinterface.py @@ -1306,240 +1306,242 @@ def htmlEditProfile(translate: {}, baseDir: str, path: str, editProfileForm = htmlHeader(cssFilename, editProfileCSS) editProfileForm += \ '
' - editProfileForm += '
' + 'accept-charset="UTF-8" action="' + path + '/profiledata">\n' + editProfileForm += '
\n' editProfileForm += \ '

' + translate['Profile for'] + \ ' ' + nickname + '@' + domainFull + '

' - editProfileForm += '
' - editProfileForm += \ - ' ' + editProfileForm += '
\n' editProfileForm += \ ' ' - editProfileForm += '
' + translate['Go Back'] + '\n' + editProfileForm += \ + ' \n' + editProfileForm += '
\n' if scheduledPostsExist(baseDir, nickname, domain): - editProfileForm += '
' + editProfileForm += '
\n' editProfileForm += \ ' ' + \ - translate['Remove scheduled posts'] + '
' - editProfileForm += '
' + translate['Remove scheduled posts'] + '
\n' + editProfileForm += '
\n' - editProfileForm += '
' + editProfileForm += '
\n' editProfileForm += ' ' + translate['Nickname'] + '\n' editProfileForm += \ '
' + displayNickname + '">
\n' editProfileForm += \ - ' ' + ' \n' editProfileForm += \ ' ' + bioStr + '\n' editProfileForm += '
' + translate['Donations link'] + '
\n' editProfileForm += \ ' ' + 'name="donateUrl" value="' + donateUrl + '">\n' editProfileForm += \ - '
' + '
\n' editProfileForm += \ ' ' + xmppAddress + '">\n' editProfileForm += '
' + translate['Matrix'] + '
\n' editProfileForm += \ ' ' + matrixAddress+'">\n' - editProfileForm += '
' + editProfileForm += '
\n' editProfileForm += \ ' ' + ssbAddress + '">\n' - editProfileForm += '
' + editProfileForm += '
\n' editProfileForm += \ ' ' + blogAddress + '">\n' - editProfileForm += '
' + editProfileForm += '
\n' editProfileForm += \ ' ' + toxAddress + '">\n' editProfileForm += '
' + translate['Email'] + '
\n' editProfileForm += \ - ' ' + ' \n' editProfileForm += \ '
' + translate['PGP Fingerprint'] + '
\n' editProfileForm += \ ' ' + PGPfingerprint + '">\n' editProfileForm += \ - '
' + '
\n' editProfileForm += \ ' ' + 'style="height:100px">' + PGPpubKey + '\n' editProfileForm += '
' - editProfileForm += '
' - editProfileForm += '
' + translate['Following'] + '
\n' + editProfileForm += '
\n' + editProfileForm += '
\n' idx = 'The files attached below should be no larger than ' + \ '10MB in total uploaded at once.' editProfileForm += \ - '

' + '

\n' editProfileForm += \ - ' ' + ' \n' editProfileForm += \ ' ' + editProfileForm += ' accept="' + imageFormats + '">\n' editProfileForm += \ '
' + translate['Background image'] + '\n' editProfileForm += ' ' + editProfileForm += ' accept="' + imageFormats + '">\n' editProfileForm += '
' + translate['Timeline banner image'] + '\n' editProfileForm += ' ' + editProfileForm += ' accept="' + imageFormats + '">\n' editProfileForm += '
' + translate['Search banner image'] + '\n' editProfileForm += ' ' + editProfileForm += ' accept="' + imageFormats + '">\n' - editProfileForm += '
' - editProfileForm += '
' + editProfileForm += '
\n' + editProfileForm += '
\n' editProfileForm += \ '
' - editProfileForm += '
' + '
\n' + editProfileForm += '
\n' editProfileForm += \ '
' + '
\n' editProfileForm += \ - ' ' - editProfileForm += '
' - editProfileForm += '
' + ' \n' + editProfileForm += '
\n' + editProfileForm += '
\n' editProfileForm += \ ' ' + translate['Approve follower requests'] + '
' + '> ' + translate['Approve follower requests'] + '
\n' editProfileForm += \ ' ' + translate['This is a bot account'] + '
' + isBot + '> ' + translate['This is a bot account'] + '
\n' editProfileForm += \ ' ' + \ - translate['This is a group account'] + '
' + translate['This is a group account'] + '
\n' editProfileForm += \ ' ' + \ - translate['Only people I follow can send me DMs'] + '
' + translate['Only people I follow can send me DMs'] + '
\n' editProfileForm += \ ' ' + \ - translate['Remove Twitter posts'] + '
' + translate['Remove Twitter posts'] + '
\n' if path.startswith('/users/' + adminNickname + '/'): editProfileForm += \ ' ' + \ - translate['This is a media instance'] + '
' + translate['This is a media instance'] + '
\n' editProfileForm += \ '
' + translate['Filtered words'] + '\n' editProfileForm += '
' + translate['One per line'] + '\n' editProfileForm += ' ' + filterStr + '\n' editProfileForm += \ '
' - editProfileForm += '
' + translate['Word Replacements'] + '\n' + editProfileForm += '
\n' editProfileForm += \ ' ' + 'style="height:200px">' + switchStr + '\n' editProfileForm += \ '
' + translate['Blocked accounts'] + '\n' idx = 'Blocked accounts, one per line, in the form ' + \ 'nickname@domain or *@blockeddomain' editProfileForm += \ - '
' + '
\n' editProfileForm += \ ' ' + blockedStr + '\n' editProfileForm += \ '
' + translate['Federation list'] + '\n' idx = 'Federate only with a defined set of instances. ' + \ 'One domain name per line.' editProfileForm += \ '
' + translate[idx] + '\n' editProfileForm += \ ' ' + 'style="height:200px">' + allowedInstancesStr + '\n' editProfileForm += \ '
' + translate['Git Projects'] + '\n' idx = 'List of project names that you wish to receive git patches for' editProfileForm += \ '
' + translate[idx] + '\n' editProfileForm += \ ' ' + 'style="height:100px">' + gitProjectsStr + '\n' editProfileForm += \ '
' + translate['YouTube Replacement Domain'] + '\n' YTReplacementDomain = getConfigParam(baseDir, "youtubedomain") if not YTReplacementDomain: YTReplacementDomain = '' editProfileForm += \ ' ' + YTReplacementDomain + '">\n' - editProfileForm += '
' - editProfileForm += '
' + editProfileForm += '
\n' + editProfileForm += '
\n' editProfileForm += \ '
' + translate['Skills'] + '
\n' idx = 'If you want to participate within organizations then you ' + \ 'can indicate some skills that you have and approximate ' + \ 'proficiency levels. This helps organizers to construct ' + \ 'teams with an appropriate combination of skills.' editProfileForm += ' ' + translate[idx] + '\n' editProfileForm += skillsStr + themesDropdown + moderatorsStr - editProfileForm += '
' + instanceStr - editProfileForm += '
' + editProfileForm += '
\n' + instanceStr + editProfileForm += '
\n' editProfileForm += '
' + translate['Danger Zone'] + '
\n' editProfileForm += \ ' ' + \ - translate['Deactivate this account'] + '
' - editProfileForm += '
' - editProfileForm += '
' - editProfileForm += '' + translate['Deactivate this account'] + '
\n' + editProfileForm += '
\n' + editProfileForm += '
\n' + editProfileForm += '\n' editProfileForm += htmlFooter() return editProfileForm @@ -6244,10 +6246,10 @@ def htmlSearch(translate: {}, followStr += \ ' \n' followStr += '
\n' - followStr += ' \n' followStr += ' \n' + followStr += ' \n' followStr += ' \n' followStr += '

' + \ htmlHashTagSwarm(baseDir, actor) + '

\n' @@ -6440,15 +6442,15 @@ def htmlProfileAfterSearch(recentPostsCache: {}, maxRecentPosts: int, profileStr += \ ' \n' + profileStr += \ + ' \n' profileStr += \ ' \n' profileStr += \ ' \n' - profileStr += \ - ' \n' profileStr += ' \n' profileStr += ' \n' profileStr += '\n' From a00b8db1362ce18e9d2b6c18037a0f211814103e Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 12 Aug 2020 09:41:43 +0000 Subject: [PATCH 02/48] Consistent back button position and terminology --- webinterface.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webinterface.py b/webinterface.py index c3eefcd93..3a8770da5 100644 --- a/webinterface.py +++ b/webinterface.py @@ -2208,7 +2208,7 @@ def htmlNewPost(mediaInstance: bool, translate: {}, newPostForm += \ ' \n' + translate['Go Back'] + '\n' newPostForm += \ ' \n' From 5ad90d1b0120da46b1f2e593a0af37182d3fe3b8 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 12 Aug 2020 09:47:57 +0000 Subject: [PATCH 03/48] Button type for default submit behavior --- webinterface.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webinterface.py b/webinterface.py index 3a8770da5..77462b577 100644 --- a/webinterface.py +++ b/webinterface.py @@ -6246,7 +6246,7 @@ def htmlSearch(translate: {}, followStr += \ ' \n' followStr += '
\n' - followStr += ' \n' followStr += ' \n' From c6ffdb2f83e45a6a4b0dcee308565dc904d0de51 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 12 Aug 2020 09:53:26 +0000 Subject: [PATCH 04/48] More validation --- announce.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/announce.py b/announce.py index 4dc0f74e7..4f2a8881a 100644 --- a/announce.py +++ b/announce.py @@ -81,6 +81,12 @@ def announcedByPerson(postJsonObject: {}, nickname: str, domain: str) -> bool: # not to be confused with shared items if not postJsonObject['object'].get('shares'): return False + if not isinstance(postJsonObject['shares'], dict): + return False + if not postJsonObject['object']['shares'].get('items'): + return False + if not isinstance(postJsonObject['object']['shares']['items'], list): + return False actorMatch = domain + '/users/' + nickname for item in postJsonObject['object']['shares']['items']: if item['actor'].endswith(actorMatch): From a06755827ef4a9cee0b95466575657c696b56313 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 12 Aug 2020 09:55:08 +0000 Subject: [PATCH 05/48] Missing object --- announce.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/announce.py b/announce.py index 4f2a8881a..f0575ea61 100644 --- a/announce.py +++ b/announce.py @@ -81,7 +81,7 @@ def announcedByPerson(postJsonObject: {}, nickname: str, domain: str) -> bool: # not to be confused with shared items if not postJsonObject['object'].get('shares'): return False - if not isinstance(postJsonObject['shares'], dict): + if not isinstance(postJsonObject['object']['shares'], dict): return False if not postJsonObject['object']['shares'].get('items'): return False From abfc7a4ad72e20b1e3e77de381f61ae92a1cf416 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 12 Aug 2020 10:02:37 +0000 Subject: [PATCH 06/48] Linked back button --- webinterface.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/webinterface.py b/webinterface.py index 77462b577..7f94edd57 100644 --- a/webinterface.py +++ b/webinterface.py @@ -6246,8 +6246,8 @@ def htmlSearch(translate: {}, followStr += \ ' \n' followStr += '
\n' - followStr += ' \n' + followStr += ' \n' followStr += ' \n' followStr += ' \n' From 2a72c22c7b50bded1c49cbaff92b494d86a0c05b Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 12 Aug 2020 10:14:20 +0000 Subject: [PATCH 07/48] Smaller submit buttons --- epicyon-options.css | 30 ++++++++++++++++++++++++++++++ webinterface.py | 9 +++++---- 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/epicyon-options.css b/epicyon-options.css index 3fe023a1f..5eeecaa56 100644 --- a/epicyon-options.css +++ b/epicyon-options.css @@ -146,6 +146,21 @@ textarea { cursor: pointer; margin: 30px; } + .buttonsmall { + border-radius: 4px; + background-color: var(--button-background); + font-family: Arial, Helvetica, sans-serif; + border: none; + color: var(--button-text); + text-align: center; + padding: 10px; + font-size: 24px; + width: 10%; + max-width: 200px; + min-width: 100px; + cursor: pointer; + margin: 30px; + } input[type=checkbox] { -ms-transform: scale(2); @@ -186,6 +201,21 @@ textarea { cursor: pointer; margin: 30px; } + .buttonsmall { + border-radius: 4px; + background-color: var(--button-background); + font-family: Arial, Helvetica, sans-serif; + border: none; + color: var(--button-text); + text-align: center; + padding: 10px; + font-size: 40px; + width: 10%; + max-width: 200px; + min-width: 100px; + cursor: pointer; + margin: 30px; + } input[type=checkbox] { -ms-transform: scale(4); diff --git a/webinterface.py b/webinterface.py index 7f94edd57..3a329c8ad 100644 --- a/webinterface.py +++ b/webinterface.py @@ -5624,7 +5624,8 @@ def htmlPersonOptions(translate: {}, baseDir: str, translate['Petname'] + ': ' + \ '\n' \ - '
\n' if isFollowingActor(baseDir, nickname, domain, optionsActor): @@ -5634,7 +5635,7 @@ def htmlPersonOptions(translate: {}, baseDir: str, ' ' + \ translate['Receive calendar events from this account'] + \ - '
\n' else: @@ -5642,7 +5643,7 @@ def htmlPersonOptions(translate: {}, baseDir: str, ' ' + \ translate['Receive calendar events from this account'] + \ - '
\n' @@ -5677,7 +5678,7 @@ def htmlPersonOptions(translate: {}, baseDir: str, optionsStr += \ '

' + translate['Notes'] + ': \n' - optionsStr += '
\n' optionsStr += \ From 2df3fab4e5fa9a7651395fa40593d7175dc47b75 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 12 Aug 2020 10:20:57 +0000 Subject: [PATCH 08/48] Button widths --- epicyon-options.css | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/epicyon-options.css b/epicyon-options.css index 5eeecaa56..0a6b69aae 100644 --- a/epicyon-options.css +++ b/epicyon-options.css @@ -140,7 +140,7 @@ textarea { text-align: center; padding: 10px; font-size: 24px; - width: 20%; + width: 10ch; max-width: 200px; min-width: 100px; cursor: pointer; @@ -155,7 +155,7 @@ textarea { text-align: center; padding: 10px; font-size: 24px; - width: 10%; + width: 7ch; max-width: 200px; min-width: 100px; cursor: pointer; @@ -195,7 +195,7 @@ textarea { text-align: center; padding: 10px; font-size: 40px; - width: 20%; + width: 10ch; max-width: 200px; min-width: 100px; cursor: pointer; @@ -210,7 +210,7 @@ textarea { text-align: center; padding: 10px; font-size: 40px; - width: 10%; + width: 7ch; max-width: 200px; min-width: 100px; cursor: pointer; From c8ef49161e5872229c10882b7ed3248d16055837 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 12 Aug 2020 10:28:29 +0000 Subject: [PATCH 09/48] Different colors for small buttons --- epicyon-options.css | 10 ++++++---- theme.py | 7 +++++++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/epicyon-options.css b/epicyon-options.css index 0a6b69aae..3619a2fd2 100644 --- a/epicyon-options.css +++ b/epicyon-options.css @@ -18,7 +18,9 @@ --text-entry-background: #111; --time-color: #aaa; --button-text: #FFFFFF; + --button-small-text: #FFFFFF; --button-background: #999; + --button-small-background: #999; --button-selected: #666; --hashtag-margin: 2%; --hashtag-vertical-spacing1: 50px; @@ -148,10 +150,10 @@ textarea { } .buttonsmall { border-radius: 4px; - background-color: var(--button-background); + background-color: var(--button-small-background); font-family: Arial, Helvetica, sans-serif; border: none; - color: var(--button-text); + color: var(--button-small-text); text-align: center; padding: 10px; font-size: 24px; @@ -203,10 +205,10 @@ textarea { } .buttonsmall { border-radius: 4px; - background-color: var(--button-background); + background-color: var(--button-small-background); font-family: Arial, Helvetica, sans-serif; border: none; - color: var(--button-text); + color: var(--button-small-text); text-align: center; padding: 10px; font-size: 40px; diff --git a/theme.py b/theme.py index a8a85b5e6..4749e9ec9 100644 --- a/theme.py +++ b/theme.py @@ -341,6 +341,7 @@ def setThemeStarlight(baseDir: str): "hashtag-vertical-spacing3": "100px", "hashtag-vertical-spacing4": "150px", "button-background": "#69282c", + "button-small-background": "darkblue", "button-selected": "#a34046", "button-highlighted": "#12435f", "button-fg-highlighted": "white", @@ -501,7 +502,9 @@ def setThemeLCD(baseDir: str): "button-selected": "black", "button-highlighted": "green", "button-background": "#33390d", + "button-small-background": "#33390d", "button-text": "#9fb42b", + "button-small-text": "#9fb42b", "color: #FFFFFE;": "color: #9fb42b;", "calendar-bg-color": "#eee", "day-number": "#3f2145", @@ -568,7 +571,9 @@ def setThemePurple(baseDir: str): "main-visited-color": "#f93bb0", "button-selected": "#c042a0", "button-background": "#ff42a0", + "button-small-background": "#ff42a0", "button-text": "white", + "button-small-text": "white", "color: #FFFFFE;": "color: #1f152d;", "calendar-bg-color": "#eee", "lines-color": "#ff42a0", @@ -612,7 +617,9 @@ def setThemeHacker(baseDir: str): "main-visited-color": "#3c8234", "button-selected": "#063200", "button-background": "#062200", + "button-small-background": "#062200", "button-text": "#00ff00", + "button-small-text": "#00ff00", "button-corner-radius": "4px", "timeline-border-radius": "4px", "*font-family": "'Bedstead'", From 44257aa7a6be783200871f701a3fc2ac62b3b396 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 12 Aug 2020 10:34:18 +0000 Subject: [PATCH 10/48] Add back button to person options --- webinterface.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/webinterface.py b/webinterface.py index 3a329c8ad..4e6118beb 100644 --- a/webinterface.py +++ b/webinterface.py @@ -5648,6 +5648,9 @@ def htmlPersonOptions(translate: {}, baseDir: str, translate['Submit'] + '
\n' optionsStr += optionsLinkStr + optionsStr += \ + ' \n' optionsStr += \ ' \n' From 53a078462546005f9e3ee442b6a5d46cceb2ff79 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 12 Aug 2020 12:55:45 +0000 Subject: [PATCH 11/48] Link to search --- webinterface.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/webinterface.py b/webinterface.py index 4e6118beb..c762e6caf 100644 --- a/webinterface.py +++ b/webinterface.py @@ -747,7 +747,13 @@ def htmlHashtagSearch(nickname: str, domain: str, port: int, # add the page title hashtagSearchForm = htmlHeader(cssFilename, hashtagSearchCSS) - hashtagSearchForm += '

#' + hashtag + '

' + if nickname: + hashtagSearchForm += '
\n' + \ + '

#' + \ + hashtag + '

\n' + '
\n' + else: + hashtagSearchForm += '
\n' + \ + '

#' + hashtag + '

\n' + '
\n' if startIndex > 0: # previous page link @@ -758,7 +764,7 @@ def htmlHashtagSearch(nickname: str, domain: str, port: int, iconsDir + '/pageup.png" title="' + \ translate['Page up'] + \ '" alt="' + translate['Page up'] + \ - '">' + '">\n' index = startIndex while index <= endIndex: postId = lines[index].strip('\n').strip('\r') From 6f56307302e961a50e04e28265bfe2268eae66a6 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 12 Aug 2020 16:21:02 +0000 Subject: [PATCH 12/48] Back icon --- translations/en.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/en.json b/translations/en.json index 1261381b6..d20b9d640 100644 --- a/translations/en.json +++ b/translations/en.json @@ -91,7 +91,7 @@ "Stop blocking": "Stop blocking", "Enter an emoji name to search for": "Enter an emoji name to search for", "Enter an address, shared item, !history, #hashtag, *skill or :emoji: to search for": "Enter an address, shared item, !history, #hashtag, *skill or :emoji: to search for", - "Go Back": "Go Back", + "Go Back": "⬅", "Moderation Information": "Moderation Information", "Suspended accounts": "Suspended accounts", "These are currently suspended": "These are currently suspended", From 4325be6c5c3014952b2f81c61dac6a027e637a24 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 12 Aug 2020 16:34:05 +0000 Subject: [PATCH 13/48] Back symbol --- translations/ar.json | 2 +- translations/ca.json | 2 +- translations/cy.json | 2 +- translations/de.json | 2 +- translations/en.json | 2 +- translations/es.json | 2 +- translations/fr.json | 2 +- translations/ga.json | 2 +- translations/hi.json | 2 +- translations/it.json | 2 +- translations/ja.json | 2 +- translations/oc.json | 2 +- translations/pt.json | 2 +- translations/ru.json | 2 +- translations/zh.json | 1 + 15 files changed, 15 insertions(+), 14 deletions(-) diff --git a/translations/ar.json b/translations/ar.json index b6762b3d2..b13483b47 100644 --- a/translations/ar.json +++ b/translations/ar.json @@ -91,7 +91,7 @@ "Stop blocking": "وقف الحظر", "Enter an emoji name to search for": "أدخل اسم رمز تعبيري للبحث عنه", "Enter an address, shared item, !history, #hashtag, *skill or :emoji: to search for": "أدخل عنوانًا أو عنصرًا مشتركًا أو! history أو #hashtag أو * مهارة أو: emoji: للبحث عنه", - "Go Back": "عد", + "Go Back": "◀", "Moderation Information": "معلومات الاعتدال", "Suspended accounts": "الحسابات المعلقه", "These are currently suspended": "هذه معلقة حاليا", diff --git a/translations/ca.json b/translations/ca.json index c4850e8ef..774fd067a 100644 --- a/translations/ca.json +++ b/translations/ca.json @@ -91,7 +91,7 @@ "Stop blocking": "Deixeu de bloquejar", "Enter an emoji name to search for": "Introduïu un nom emoji per cercar", "Enter an address, shared item, !history, #hashtag, *skill or :emoji: to search for": "Introduïu una adreça, un element compartit, un historial!, #Hashtag, * skill o: emoji: per cercar", - "Go Back": "Torna", + "Go Back": "◀", "Moderation Information": "Informació de moderació", "Suspended accounts": "Comptes suspesos", "These are currently suspended": "Actualment estan suspeses", diff --git a/translations/cy.json b/translations/cy.json index afddb9c9f..28f8cdc38 100644 --- a/translations/cy.json +++ b/translations/cy.json @@ -91,7 +91,7 @@ "Stop blocking": "Stopiwch rwystro", "Enter an emoji name to search for": "Rhowch enw emoji i chwilio amdano", "Enter an address, shared item, !history, #hashtag, *skill or :emoji: to search for": "Rhowch gyfeiriad, eitem a rennir ,! Hanes, #hashtag, * sgil neu: emoji: i chwilio amdano", - "Go Back": "Go Back", + "Go Back": "◀", "Moderation Information": "Gwybodaeth Cymedroli", "Suspended accounts": "Cyfrifon gohiriedig", "These are currently suspended": "Mae'r rhain wedi'u hatal ar hyn o bryd", diff --git a/translations/de.json b/translations/de.json index 232e65d8b..86f695959 100644 --- a/translations/de.json +++ b/translations/de.json @@ -91,7 +91,7 @@ "Stop blocking": "Sperre aufheben", "Enter an emoji name to search for": "Geben Sie einen Emojinamen ein, nach dem gesucht werden soll", "Enter an address, shared item, !history, #hashtag, *skill or :emoji: to search for": "Geben Sie eine Adresse, ein freigegebenes Element ,! History, #hashtag, * Skill oder: emoji: ein, nach der gesucht werden soll", - "Go Back": "Zurück", + "Go Back": "◀", "Moderation Information": "Moderationsinformationen", "Suspended accounts": "Temporäre gesperrte Benutzer", "These are currently suspended": "Diese sind temporär gesperrt", diff --git a/translations/en.json b/translations/en.json index d20b9d640..781887a16 100644 --- a/translations/en.json +++ b/translations/en.json @@ -91,7 +91,7 @@ "Stop blocking": "Stop blocking", "Enter an emoji name to search for": "Enter an emoji name to search for", "Enter an address, shared item, !history, #hashtag, *skill or :emoji: to search for": "Enter an address, shared item, !history, #hashtag, *skill or :emoji: to search for", - "Go Back": "⬅", + "Go Back": "◀", "Moderation Information": "Moderation Information", "Suspended accounts": "Suspended accounts", "These are currently suspended": "These are currently suspended", diff --git a/translations/es.json b/translations/es.json index 333480767..e19e01a6b 100644 --- a/translations/es.json +++ b/translations/es.json @@ -91,7 +91,7 @@ "Stop blocking": "Dejar de bloquear", "Enter an emoji name to search for": "Ingrese un nombre de emoji para buscar", "Enter an address, shared item, !history, #hashtag, *skill or :emoji: to search for": "Ingrese una dirección, elemento compartido,! Historial, #hashtag, * skill o: emoji: para buscar", - "Go Back": "Regresa", + "Go Back": "◀", "Moderation Information": "Información de moderación", "Suspended accounts": "Cuentas suspendidas", "These are currently suspended": "Actualmente están suspendidos", diff --git a/translations/fr.json b/translations/fr.json index f4b9dd0f4..17dafb27d 100644 --- a/translations/fr.json +++ b/translations/fr.json @@ -91,7 +91,7 @@ "Stop blocking": "Arrêtez le blocage", "Enter an emoji name to search for": "Entrez un nom emoji à rechercher", "Enter an address, shared item, !history, #hashtag, *skill or :emoji: to search for": "Entrez une adresse, un élément partagé,! History, #hashtag, * skill ou: emoji: pour rechercher", - "Go Back": "Retourner", + "Go Back": "◀", "Moderation Information": "Informations de modération", "Suspended accounts": "Comptes suspendus", "These are currently suspended": "Ceux-ci sont actuellement suspendus", diff --git a/translations/ga.json b/translations/ga.json index a812ff8e3..b012a8098 100644 --- a/translations/ga.json +++ b/translations/ga.json @@ -91,7 +91,7 @@ "Stop blocking": "Stop blocáil", "Enter an emoji name to search for": "Cuir isteach ainm emoji chun cuardach a dhéanamh", "Enter an address, shared item, !history, #hashtag, *skill or :emoji: to search for": "Iontráil seoladh, mír roinnte ,! Stair, #hashtag, * scil nó: emoji: chun cuardach a dhéanamh", - "Go Back": "Dul ar ais", + "Go Back": "◀", "Moderation Information": "Faisnéis Modhnóireachta", "Suspended accounts": "Cuntais ar fionraí", "These are currently suspended": "Tá siad seo ar fionraí faoi láthair", diff --git a/translations/hi.json b/translations/hi.json index 1b961804e..a05b9e387 100644 --- a/translations/hi.json +++ b/translations/hi.json @@ -91,7 +91,7 @@ "Stop blocking": "रोकना बंद करो", "Enter an emoji name to search for": "खोजने के लिए एक इमोजी नाम दर्ज करें", "Enter an address, shared item, !history, #hashtag, *skill or :emoji: to search for": "एक पता, साझा किया गया आइटम दर्ज करें; इतिहास, # अंश, * कौशल या: इमोजी: खोजने के लिए", - "Go Back": "वापस जाओ", + "Go Back": "◀", "Moderation Information": "मॉडरेशन जानकारी", "Suspended accounts": "निलंबित खाते", "These are currently suspended": "ये फिलहाल निलंबित हैं", diff --git a/translations/it.json b/translations/it.json index b7c9c0507..356112f64 100644 --- a/translations/it.json +++ b/translations/it.json @@ -91,7 +91,7 @@ "Stop blocking": "Smetti di bloccare", "Enter an emoji name to search for": "Inserisci un nome emoji da cercare", "Enter an address, shared item, !history, #hashtag, *skill or :emoji: to search for": "Inserisci un indirizzo, un oggetto condiviso,! Storia, #hashtag, * abilità o: emoji: per cercare", - "Go Back": "Torna indietro", + "Go Back": "◀", "Moderation Information": "Informazioni sulla moderazione", "Suspended accounts": "Conti sospesi", "These are currently suspended": "Questi sono attualmente sospesi", diff --git a/translations/ja.json b/translations/ja.json index 562118dd5..89351b413 100644 --- a/translations/ja.json +++ b/translations/ja.json @@ -91,7 +91,7 @@ "Stop blocking": "ブロックを停止", "Enter an emoji name to search for": "検索する絵文字名を入力してください", "Enter an address, shared item, !history, #hashtag, *skill or :emoji: to search for": "検索するアドレス、共有アイテム、!history、#ハッシュタグ、* skillまたは:emoji:を入力してください", - "Go Back": "戻る", + "Go Back": "◀", "Moderation Information": "モデレーション情報", "Suspended accounts": "一時停止されたアカウント", "These are currently suspended": "これらは現在一時停止中です", diff --git a/translations/oc.json b/translations/oc.json index 42ca4e070..71eddf628 100644 --- a/translations/oc.json +++ b/translations/oc.json @@ -98,7 +98,7 @@ "About this Instance": "A prepaus d’aquesta instància", "Any blocks or suspensions made by moderators will be shown here.": "Tot blocatge o suspension realizada pels moderators son mostrats aquí.", "These are globally blocked for all accounts on this instance": "Aquí son los blocatges generals per totes los comptes d’aquesta instància", - "Go Back": "Tornar", + "Go Back": "◀", "Stop blocking": "Quitar de blocar", "View": "Veire", "Options for": "Opcions per", diff --git a/translations/pt.json b/translations/pt.json index 279e6c9ce..79c2a7cee 100644 --- a/translations/pt.json +++ b/translations/pt.json @@ -91,7 +91,7 @@ "Stop blocking": "Pare de bloquear", "Enter an emoji name to search for": "Digite um nome emoji para procurar", "Enter an address, shared item, !history, #hashtag, *skill or :emoji: to search for": "Digite um endereço, item compartilhado,! History, #hashtag, * skill ou: emoji: para procurar", - "Go Back": "Volte", + "Go Back": "◀", "Moderation Information": "Informações sobre moderação", "Suspended accounts": "Contas suspensas", "These are currently suspended": "Estes estão atualmente suspensos", diff --git a/translations/ru.json b/translations/ru.json index a5471654a..e9befe81c 100644 --- a/translations/ru.json +++ b/translations/ru.json @@ -91,7 +91,7 @@ "Stop blocking": "Прекратить блокировку", "Enter an emoji name to search for": "Введите имя смайлика для поиска", "Enter an address, shared item, !history, #hashtag, *skill or :emoji: to search for": "Введите адрес, общий элемент,! History, #hashtag, * skill или: emoji: для поиска", - "Go Back": "Вернитесь назад", + "Go Back": "◀", "Moderation Information": "Модерация Информация", "Suspended accounts": "Приостановленные аккаунты", "These are currently suspended": "В настоящее время они приостановлены", diff --git a/translations/zh.json b/translations/zh.json index 99f982152..2afa7f0c0 100644 --- a/translations/zh.json +++ b/translations/zh.json @@ -111,6 +111,7 @@ "The files attached below should be no larger than 10MB in total uploaded at once.": "一次上传的文件总数不得超过10MB。", "Avatar image": "头像图片", "Background image": "背景图", + "Go Back": "◀", "Timeline banner image": "时间线横幅图片", "Approve follower requests": "批准关注者请求", "This is a bot account": "这是一个机器人帐户", From d9aaf790f102da351263544583cd96cc5abbee74 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 12 Aug 2020 16:38:49 +0000 Subject: [PATCH 14/48] Submit symbol --- translations/en.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/translations/en.json b/translations/en.json index 781887a16..ed164f7df 100644 --- a/translations/en.json +++ b/translations/en.json @@ -39,8 +39,8 @@ "Report": "Report", "Send to moderators": "Send to moderators", "Search for emoji": "Search for emoji", - "Cancel": "Cancel", - "Submit": "Submit", + "Cancel": "✘", + "Submit": "✔", "Image description": "Image description", "Item image": "Item image", "Type": "Type", @@ -91,7 +91,7 @@ "Stop blocking": "Stop blocking", "Enter an emoji name to search for": "Enter an emoji name to search for", "Enter an address, shared item, !history, #hashtag, *skill or :emoji: to search for": "Enter an address, shared item, !history, #hashtag, *skill or :emoji: to search for", - "Go Back": "◀", + "Go Back": "✘", "Moderation Information": "Moderation Information", "Suspended accounts": "Suspended accounts", "These are currently suspended": "These are currently suspended", From f8960a7f0aa87b02060da16741745b54f9c019b4 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 12 Aug 2020 16:45:37 +0000 Subject: [PATCH 15/48] Back arrow is more consistent with browser/android symbols --- translations/en.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/translations/en.json b/translations/en.json index ed164f7df..4a559bb42 100644 --- a/translations/en.json +++ b/translations/en.json @@ -40,7 +40,7 @@ "Send to moderators": "Send to moderators", "Search for emoji": "Search for emoji", "Cancel": "✘", - "Submit": "✔", + "Submit": "Submit", "Image description": "Image description", "Item image": "Item image", "Type": "Type", @@ -91,7 +91,7 @@ "Stop blocking": "Stop blocking", "Enter an emoji name to search for": "Enter an emoji name to search for", "Enter an address, shared item, !history, #hashtag, *skill or :emoji: to search for": "Enter an address, shared item, !history, #hashtag, *skill or :emoji: to search for", - "Go Back": "✘", + "Go Back": "◀", "Moderation Information": "Moderation Information", "Suspended accounts": "Suspended accounts", "These are currently suspended": "These are currently suspended", From c9d23f81420a5ff66d7528c1e7d97bdb58641a08 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 12 Aug 2020 16:57:50 +0000 Subject: [PATCH 16/48] Set style for notes --- epicyon-options.css | 2 ++ 1 file changed, 2 insertions(+) diff --git a/epicyon-options.css b/epicyon-options.css index 3619a2fd2..bf84f41af 100644 --- a/epicyon-options.css +++ b/epicyon-options.css @@ -115,9 +115,11 @@ a:link { } textarea { + font-family: Arial, Helvetica, sans-serif; font-size: var(--font-size4); width: 90%; background-color: var(--text-entry-background); + color: white; } @media screen and (min-width: 400px) { From bbad9879c1f3783e1469f90aab4ed6f8516a4961 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 12 Aug 2020 17:04:24 +0000 Subject: [PATCH 17/48] Different font size for notes on mobile --- epicyon-options.css | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/epicyon-options.css b/epicyon-options.css index bf84f41af..abf43c108 100644 --- a/epicyon-options.css +++ b/epicyon-options.css @@ -114,15 +114,14 @@ a:link { width: 15%; } -textarea { - font-family: Arial, Helvetica, sans-serif; - font-size: var(--font-size4); - width: 90%; - background-color: var(--text-entry-background); - color: white; -} - @media screen and (min-width: 400px) { + textarea { + font-family: Arial, Helvetica, sans-serif; + font-size: var(--font-size4); + width: 90%; + background-color: var(--text-entry-background); + color: white; + } .followText { font-size: var(--follow-text-size1); } @@ -178,6 +177,13 @@ textarea { } @media screen and (max-width: 1000px) { + textarea { + font-family: Arial, Helvetica, sans-serif; + font-size: var(--font-size); + width: 90%; + background-color: var(--text-entry-background); + color: white; + } .followText { font-size: var(--follow-text-size2); } From 873556775183bde049c4ed55f219cfbc3c2761c5 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 13 Aug 2020 09:37:11 +0000 Subject: [PATCH 18/48] Comments --- inbox.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/inbox.py b/inbox.py index 15bf74a25..3015f54c2 100644 --- a/inbox.py +++ b/inbox.py @@ -1970,6 +1970,8 @@ def inboxUpdateCalendar(baseDir: str, handle: str, postJsonObject: {}) -> None: handleNickname, handleDomain, actorNickname, actorDomain): return + + # look for events within the tags list for tagDict in postJsonObject['object']['tag']: if not tagDict.get('type'): continue @@ -1977,26 +1979,38 @@ def inboxUpdateCalendar(baseDir: str, handle: str, postJsonObject: {}) -> None: continue if not tagDict.get('startTime'): continue - # get the year and month from the event + + # get the year, month and day from the event eventTime = datetime.datetime.strptime(tagDict['startTime'], "%Y-%m-%dT%H:%M:%S%z") eventYear = int(eventTime.strftime("%Y")) eventMonthNumber = int(eventTime.strftime("%m")) eventDayOfMonth = int(eventTime.strftime("%d")) + # create a directory for the calendar year if not os.path.isdir(calendarPath + '/' + str(eventYear)): os.mkdir(calendarPath + '/' + str(eventYear)) + + # calendar month file containing event post Ids calendarFilename = calendarPath + '/' + str(eventYear) + \ '/' + str(eventMonthNumber) + '.txt' postId = \ postJsonObject['id'].replace('/activity', '').replace('/', '#') + + # Does this event post already exist within the calendar month? if os.path.isfile(calendarFilename): if postId in open(calendarFilename).read(): + # Event post already exists return + + # append the post Id to the file for the calendar month calendarFile = open(calendarFilename, 'a+') if calendarFile: calendarFile.write(postId + '\n') calendarFile.close() + + # create a file which will trigger a notification that + # a new event has been added calendarNotificationFilename = \ baseDir + '/accounts/' + handle + '/.newCalendar' calendarNotificationFile = \ From 37b86507c5f517b2c26f32fcb162a29c117e3282 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 13 Aug 2020 11:58:05 +0000 Subject: [PATCH 19/48] Separate event creation function --- happening.py | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++ inbox.py | 53 +++++---------------------------------------------- 2 files changed, 59 insertions(+), 48 deletions(-) diff --git a/happening.py b/happening.py index da9ddfb8d..f53950803 100644 --- a/happening.py +++ b/happening.py @@ -15,6 +15,60 @@ from utils import daysInMonth from utils import mergeDicts +def saveEvent(baseDir: str, handle: str, postId: str, + eventJson: {}) -> bool: + """Saves an event to the calendar + """ + calendarPath = baseDir + '/accounts/' + handle + '/calendar' + if not os.path.isdir(calendarPath): + os.mkdir(calendarPath) + + # get the year, month and day from the event + eventTime = datetime.strptime(eventJson['startTime'], + "%Y-%m-%dT%H:%M:%S%z") + eventYear = int(eventTime.strftime("%Y")) + eventMonthNumber = int(eventTime.strftime("%m")) + eventDayOfMonth = int(eventTime.strftime("%d")) + + # create a directory for the calendar year + if not os.path.isdir(calendarPath + '/' + str(eventYear)): + os.mkdir(calendarPath + '/' + str(eventYear)) + + # calendar month file containing event post Ids + calendarFilename = calendarPath + '/' + str(eventYear) + \ + '/' + str(eventMonthNumber) + '.txt' + + # Does this event post already exist within the calendar month? + if os.path.isfile(calendarFilename): + if postId in open(calendarFilename).read(): + # Event post already exists + return False + + # append the post Id to the file for the calendar month + calendarFile = open(calendarFilename, 'a+') + if not calendarFile: + return False + calendarFile.write(postId + '\n') + calendarFile.close() + + # create a file which will trigger a notification that + # a new event has been added + calendarNotificationFilename = \ + baseDir + '/accounts/' + handle + '/.newCalendar' + calendarNotificationFile = \ + open(calendarNotificationFilename, 'w+') + if not calendarNotificationFile: + return False + calendarNotificationFile.write('/calendar?year=' + + str(eventYear) + + '?month=' + + str(eventMonthNumber) + + '?day=' + + str(eventDayOfMonth)) + calendarNotificationFile.close() + return True + + def isHappeningEvent(tag: {}) -> bool: """Is this tag an Event or Place ActivityStreams type? """ diff --git a/inbox.py b/inbox.py index 3015f54c2..c4b0733e1 100644 --- a/inbox.py +++ b/inbox.py @@ -64,6 +64,7 @@ from git import isGitPatch from git import receiveGitPatch from followingCalendar import receivingCalendarEvents from content import dangerousMarkup +from happening import saveEvent def storeHashTags(baseDir: str, nickname: str, postJsonObject: {}) -> None: @@ -1957,10 +1958,6 @@ def inboxUpdateCalendar(baseDir: str, handle: str, postJsonObject: {}) -> None: if not isinstance(postJsonObject['object']['tag'], list): return - calendarPath = baseDir + '/accounts/' + handle + '/calendar' - if not os.path.isdir(calendarPath): - os.mkdir(calendarPath) - actor = postJsonObject['actor'] actorNickname = getNicknameFromActor(actor) actorDomain, actorPort = getDomainFromActor(actor) @@ -1971,6 +1968,9 @@ def inboxUpdateCalendar(baseDir: str, handle: str, postJsonObject: {}) -> None: actorNickname, actorDomain): return + postId = \ + postJsonObject['id'].replace('/activity', '').replace('/', '#') + # look for events within the tags list for tagDict in postJsonObject['object']['tag']: if not tagDict.get('type'): @@ -1979,50 +1979,7 @@ def inboxUpdateCalendar(baseDir: str, handle: str, postJsonObject: {}) -> None: continue if not tagDict.get('startTime'): continue - - # get the year, month and day from the event - eventTime = datetime.datetime.strptime(tagDict['startTime'], - "%Y-%m-%dT%H:%M:%S%z") - eventYear = int(eventTime.strftime("%Y")) - eventMonthNumber = int(eventTime.strftime("%m")) - eventDayOfMonth = int(eventTime.strftime("%d")) - - # create a directory for the calendar year - if not os.path.isdir(calendarPath + '/' + str(eventYear)): - os.mkdir(calendarPath + '/' + str(eventYear)) - - # calendar month file containing event post Ids - calendarFilename = calendarPath + '/' + str(eventYear) + \ - '/' + str(eventMonthNumber) + '.txt' - postId = \ - postJsonObject['id'].replace('/activity', '').replace('/', '#') - - # Does this event post already exist within the calendar month? - if os.path.isfile(calendarFilename): - if postId in open(calendarFilename).read(): - # Event post already exists - return - - # append the post Id to the file for the calendar month - calendarFile = open(calendarFilename, 'a+') - if calendarFile: - calendarFile.write(postId + '\n') - calendarFile.close() - - # create a file which will trigger a notification that - # a new event has been added - calendarNotificationFilename = \ - baseDir + '/accounts/' + handle + '/.newCalendar' - calendarNotificationFile = \ - open(calendarNotificationFilename, 'w+') - if calendarNotificationFile: - calendarNotificationFile.write('/calendar?year=' + - str(eventYear) + - '?month=' + - str(eventMonthNumber) + - '?day=' + - str(eventDayOfMonth)) - calendarNotificationFile.close() + saveEvent(baseDir, handle, postId, tagDict) def inboxUpdateIndex(boxname: str, baseDir: str, handle: str, From 5ab09b996bab3f2219b647f55d147fa34bdc21bb Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 13 Aug 2020 13:40:38 +0000 Subject: [PATCH 20/48] Save events to a timeline --- happening.py | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 75 insertions(+), 1 deletion(-) diff --git a/happening.py b/happening.py index f53950803..dce6f6712 100644 --- a/happening.py +++ b/happening.py @@ -7,17 +7,48 @@ __email__ = "bob@freedombone.net" __status__ = "Production" import os +from uuid import UUID from datetime import datetime from utils import loadJson +from utils import saveJson from utils import locatePost from utils import daysInMonth from utils import mergeDicts +def validUuid(testUuid: str, version=4): + """Check if uuid_to_test is a valid UUID + """ + try: + uuid_obj = UUID(testUuid, version=version) + except ValueError: + return False + + return str(uuid_obj) == testUuid + + +def removeEventFromTimeline(eventId: str, tlEventsFilename: str) -> None: + """Removes the given event Id from the timeline + """ + if eventId + '\n' not in open(tlEventsFilename).read(): + return + with open(tlEventsFilename, 'r') as fp: + eventsTimeline = fp.read().replace(eventId + '\n', '') + try: + with open(tlEventsFilename, 'w+') as fp2: + fp2.write(eventsTimeline) + except BaseException: + print('ERROR: unable to save events timeline') + pass + + def saveEvent(baseDir: str, handle: str, postId: str, eventJson: {}) -> bool: - """Saves an event to the calendar + """Saves an event to the calendar and/or the events timeline + If an event has extra fields, as per Mobilizon, + Then it is saved as a separate entity and added to the + events timeline """ calendarPath = baseDir + '/accounts/' + handle + '/calendar' if not os.path.isdir(calendarPath): @@ -27,8 +58,51 @@ def saveEvent(baseDir: str, handle: str, postId: str, eventTime = datetime.strptime(eventJson['startTime'], "%Y-%m-%dT%H:%M:%S%z") eventYear = int(eventTime.strftime("%Y")) + if eventYear < 2020 or eventYear >= 2100: + return False eventMonthNumber = int(eventTime.strftime("%m")) + if eventMonthNumber < 1 or eventMonthNumber > 12: + return False eventDayOfMonth = int(eventTime.strftime("%d")) + if eventDayOfMonth < 1or eventDayOfMonth > 31: + return False + + if eventJson.get('name') and eventJson.get('actor') and \ + eventJson.get('uuid') and eventJson.get('content'): + if not validUuid(eventJson['uuid']): + return False + # if this is a full description of an event then save it + # as a separate json file + eventsPath = baseDir + '/accounts/' + handle + '/events' + if not os.path.isdir(eventsPath): + os.mkdir(eventsPath) + eventsYearPath = \ + baseDir + '/accounts/' + handle + '/events/' + str(eventYear) + if not os.path.isdir(eventsYearPath): + os.mkdir(eventsYearPath) + eventId = str(eventYear) + '-' + eventTime.strftime("%m") + '-' + \ + eventTime.strftime("%d") + '_' + eventJson['uuid'] + eventFilename = eventsYearPath + '/' + eventId + '.json' + + saveJson(eventJson, eventFilename) + # save to the events timeline + tlEventsFilename = baseDir + '/accounts/' + handle + '/events.txt' + + if os.path.isfile(tlEventsFilename): + removeEventFromTimeline(eventId, tlEventsFilename) + try: + with open(tlEventsFilename, 'r+') as tlEventsFile: + content = tlEventsFile.read() + tlEventsFile.seek(0, 0) + tlEventsFile.write(eventId + '\n' + content) + except Exception as e: + print('WARN: Failed to write entry to events file ' + + tlEventsFilename + ' ' + str(e)) + return False + else: + tlEventsFile = open(tlEventsFilename, 'w+') + tlEventsFile.write(eventId + '\n') + tlEventsFile.close() # create a directory for the calendar year if not os.path.isdir(calendarPath + '/' + str(eventYear)): From 58bba56e754b86e990f2dff03a67ac4d012e4cf7 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 13 Aug 2020 17:19:35 +0100 Subject: [PATCH 21/48] Allow accounts as users path --- acceptreject.py | 1 + announce.py | 2 ++ auth.py | 1 + blocking.py | 2 ++ bookmarks.py | 2 ++ daemon.py | 2 +- delete.py | 2 ++ epicyon.py | 11 +++++++++-- follow.py | 2 ++ happening.py | 2 +- inbox.py | 23 ++++++++++++++++++----- like.py | 2 ++ posts.py | 7 +++++-- utils.py | 44 ++++++++++++++++++++++++++------------------ webinterface.py | 3 ++- 15 files changed, 76 insertions(+), 30 deletions(-) diff --git a/acceptreject.py b/acceptreject.py index e7051f7dd..dcfdeb226 100644 --- a/acceptreject.py +++ b/acceptreject.py @@ -202,6 +202,7 @@ def receiveAcceptReject(session, baseDir: str, print('DEBUG: ' + messageJson['type'] + ' has no actor') return False if '/users/' not in messageJson['actor'] and \ + '/accounts/' not in messageJson['actor'] and \ '/channel/' not in messageJson['actor'] and \ '/profile/' not in messageJson['actor']: if debug: diff --git a/announce.py b/announce.py index f0575ea61..00804d2b5 100644 --- a/announce.py +++ b/announce.py @@ -147,6 +147,7 @@ def createAnnounce(session, baseDir: str, federationList: [], announceDomain = None announcePort = None if '/users/' in objectUrl or \ + '/accounts/' in objectUrl or \ '/channel/' in objectUrl or \ '/profile/' in objectUrl: announceNickname = getNicknameFromActor(objectUrl) @@ -263,6 +264,7 @@ def undoAnnounce(session, baseDir: str, federationList: [], announceDomain = None announcePort = None if '/users/' in objectUrl or \ + '/accounts/' in objectUrl or \ '/channel/' in objectUrl or \ '/profile/' in objectUrl: announceNickname = getNicknameFromActor(objectUrl) diff --git a/auth.py b/auth.py index 8297aa816..d2aab5917 100644 --- a/auth.py +++ b/auth.py @@ -57,6 +57,7 @@ def authorizeBasic(baseDir: str, path: str, authHeader: str, 'contain a space character') return False if '/users/' not in path and \ + '/accounts/' not in path and \ '/channel/' not in path and \ '/profile/' not in path: if debug: diff --git a/blocking.py b/blocking.py index 070b4c83e..0c57af788 100644 --- a/blocking.py +++ b/blocking.py @@ -220,6 +220,7 @@ def outboxBlock(baseDir: str, httpPrefix: str, print('DEBUG: c2s block object is not a status') return if '/users/' not in messageId and \ + '/accounts/' not in messageId and \ '/channel/' not in messageId and \ '/profile/' not in messageId: if debug: @@ -298,6 +299,7 @@ def outboxUndoBlock(baseDir: str, httpPrefix: str, print('DEBUG: c2s undo block object is not a status') return if '/users/' not in messageId and \ + '/accounts/' not in messageId and \ '/channel/' not in messageId and \ '/profile/' not in messageId: if debug: diff --git a/bookmarks.py b/bookmarks.py index 22387d395..b7f1fa824 100644 --- a/bookmarks.py +++ b/bookmarks.py @@ -262,6 +262,7 @@ def bookmark(recentPostsCache: {}, bookmarkedPostDomain, bookmarkedPostPort = getDomainFromActor(acBm) else: if '/users/' in objectUrl or \ + '/accounts/' in objectUrl or \ '/channel/' in objectUrl or \ '/profile/' in objectUrl: ou = objectUrl @@ -362,6 +363,7 @@ def undoBookmark(recentPostsCache: {}, bookmarkedPostDomain, bookmarkedPostPort = getDomainFromActor(acBm) else: if '/users/' in objectUrl or \ + '/accounts/' in objectUrl or \ '/channel/' in objectUrl or \ '/profile/' in objectUrl: ou = objectUrl diff --git a/daemon.py b/daemon.py index 05d0bf911..578348ecf 100644 --- a/daemon.py +++ b/daemon.py @@ -5914,7 +5914,7 @@ class PubServer(BaseHTTPRequestHandler): return self._400() elif path.startswith('/api/v1/crypto/keys/query'): - # given a handle (nickname@domain) return the devices + # given a handle (nickname@domain) return a list of the devices # registered to that handle if not self._cryptoAPIQuery(): self._400() diff --git a/delete.py b/delete.py index e26002fee..f77585440 100644 --- a/delete.py +++ b/delete.py @@ -67,6 +67,7 @@ def createDelete(session, baseDir: str, federationList: [], deleteDomain = None deletePort = None if '/users/' in objectUrl or \ + '/accounts/' in objectUrl or \ '/channel/' in objectUrl or \ '/profile/' in objectUrl: deleteNickname = getNicknameFromActor(objectUrl) @@ -262,6 +263,7 @@ def outboxDelete(baseDir: str, httpPrefix: str, print('DEBUG: c2s delete object is not a status') return if '/users/' not in messageId and \ + '/accounts/' not in messageId and \ '/channel/' not in messageId and \ '/profile/' not in messageId: if debug: diff --git a/epicyon.py b/epicyon.py index 1ca654c63..c7809ecbd 100644 --- a/epicyon.py +++ b/epicyon.py @@ -1130,6 +1130,7 @@ if args.actor: args.actor = args.actor.replace(prefix, '') args.actor = args.actor.replace('/@', '/users/') if '/users/' not in args.actor and \ + '/accounts/' not in args.actor and \ '/channel/' not in args.actor and \ '/profile/' not in args.actor: print('Expected actor format: ' + @@ -1143,10 +1144,14 @@ if args.actor: nickname = args.actor.split('/profile/')[1] nickname = nickname.replace('\n', '').replace('\r', '') domain = args.actor.split('/profile/')[0] - else: + elif '/channel/' in args.actor: nickname = args.actor.split('/channel/')[1] nickname = nickname.replace('\n', '').replace('\r', '') domain = args.actor.split('/channel/')[0] + elif '/accounts/' in args.actor: + nickname = args.actor.split('/accounts/')[1] + nickname = nickname.replace('\n', '').replace('\r', '') + domain = args.actor.split('/accounts/')[0] else: # format: @nick@domain if '@' not in args.actor: @@ -1198,6 +1203,7 @@ if args.actor: if wfRequest.get('errors'): print('wfRequest error: ' + str(wfRequest['errors'])) if '/users/' in args.actor or \ + '/accounts/' in args.actor or \ '/profile/' in args.actor or \ '/channel/' in args.actor: personUrl = originalActor @@ -1212,6 +1218,7 @@ if args.actor: personUrl = getUserUrl(wfRequest) if nickname == domain: personUrl = personUrl.replace('/users/', '/actor/') + personUrl = personUrl.replace('/accounts/', '/actor/') personUrl = personUrl.replace('/channel/', '/actor/') personUrl = personUrl.replace('/profile/', '/actor/') if not personUrl: @@ -1221,7 +1228,7 @@ if args.actor: asHeader = { 'Accept': 'application/ld+json; profile="' + profileStr + '"' } - if '/channel/' in personUrl: + if '/channel/' in personUrl or '/accounts/' in personUrl: profileStr = 'https://www.w3.org/ns/activitystreams' asHeader = { 'Accept': 'application/ld+json; profile="' + profileStr + '"' diff --git a/follow.py b/follow.py index 06a636554..3c6c6e1d0 100644 --- a/follow.py +++ b/follow.py @@ -555,6 +555,7 @@ def receiveFollowRequest(session, baseDir: str, httpPrefix: str, print('DEBUG: follow request has no actor') return False if '/users/' not in messageJson['actor'] and \ + '/accounts/' not in messageJson['actor'] and \ '/channel/' not in messageJson['actor'] and \ '/profile/' not in messageJson['actor']: if debug: @@ -582,6 +583,7 @@ def receiveFollowRequest(session, baseDir: str, httpPrefix: str, if not messageJson.get('to'): messageJson['to'] = messageJson['object'] if '/users/' not in messageJson['object'] and \ + '/accounts/' not in messageJson['object'] and \ '/channel/' not in messageJson['object'] and \ '/profile/' not in messageJson['object']: if debug: diff --git a/happening.py b/happening.py index dce6f6712..438ffa3ad 100644 --- a/happening.py +++ b/happening.py @@ -64,7 +64,7 @@ def saveEvent(baseDir: str, handle: str, postId: str, if eventMonthNumber < 1 or eventMonthNumber > 12: return False eventDayOfMonth = int(eventTime.strftime("%d")) - if eventDayOfMonth < 1or eventDayOfMonth > 31: + if eventDayOfMonth < 1 or eventDayOfMonth > 31: return False if eventJson.get('name') and eventJson.get('actor') and \ diff --git a/inbox.py b/inbox.py index c4b0733e1..692b89c17 100644 --- a/inbox.py +++ b/inbox.py @@ -661,6 +661,7 @@ def receiveUndoFollow(session, baseDir: str, httpPrefix: str, print('DEBUG: follow request has no actor within object') return False if '/users/' not in messageJson['object']['actor'] and \ + '/accounts/' not in messageJson['object']['actor'] and \ '/channel/' not in messageJson['object']['actor'] and \ '/profile/' not in messageJson['object']['actor']: if debug: @@ -735,6 +736,7 @@ def receiveUndo(session, baseDir: str, httpPrefix: str, print('DEBUG: follow request has no actor') return False if '/users/' not in messageJson['actor'] and \ + '/accounts/' not in messageJson['actor'] and \ '/channel/' not in messageJson['actor'] and \ '/profile/' not in messageJson['actor']: if debug: @@ -792,11 +794,13 @@ def personReceiveUpdate(baseDir: str, if actor not in personJson['id']: actor = updateDomainFull + '/channel/' + updateNickname if actor not in personJson['id']: - if debug: - print('actor: ' + actor) - print('id: ' + personJson['id']) - print('DEBUG: Actor does not match id') - return False + actor = updateDomainFull + '/accounts/' + updateNickname + if actor not in personJson['id']: + if debug: + print('actor: ' + actor) + print('id: ' + personJson['id']) + print('DEBUG: Actor does not match id') + return False if updateDomainFull == domainFull: if debug: print('DEBUG: You can only receive actor updates ' + @@ -907,6 +911,7 @@ def receiveUpdate(recentPostsCache: {}, session, baseDir: str, print('DEBUG: ' + messageJson['type'] + ' object has no type') return False if '/users/' not in messageJson['actor'] and \ + '/accounts/' not in messageJson['actor'] and \ '/channel/' not in messageJson['actor'] and \ '/profile/' not in messageJson['actor']: if debug: @@ -1008,6 +1013,7 @@ def receiveLike(recentPostsCache: {}, print('DEBUG: ' + messageJson['type'] + ' has no "to" list') return False if '/users/' not in messageJson['actor'] and \ + '/accounts/' not in messageJson['actor'] and \ '/channel/' not in messageJson['actor'] and \ '/profile/' not in messageJson['actor']: if debug: @@ -1076,6 +1082,7 @@ def receiveUndoLike(recentPostsCache: {}, ' like object is not a string') return False if '/users/' not in messageJson['actor'] and \ + '/accounts/' not in messageJson['actor'] and \ '/channel/' not in messageJson['actor'] and \ '/profile/' not in messageJson['actor']: if debug: @@ -1288,6 +1295,7 @@ def receiveDelete(session, handle: str, isGroup: bool, baseDir: str, print('DEBUG: ' + messageJson['type'] + ' has no "to" list') return False if '/users/' not in messageJson['actor'] and \ + '/accounts/' not in messageJson['actor'] and \ '/channel/' not in messageJson['actor'] and \ '/profile/' not in messageJson['actor']: if debug: @@ -1358,6 +1366,7 @@ def receiveAnnounce(recentPostsCache: {}, print('DEBUG: ' + messageJson['type'] + ' has no "to" list') return False if '/users/' not in messageJson['actor'] and \ + '/accounts/' not in messageJson['actor'] and \ '/channel/' not in messageJson['actor'] and \ '/profile/' not in messageJson['actor']: if debug: @@ -1366,6 +1375,7 @@ def receiveAnnounce(recentPostsCache: {}, messageJson['type']) return False if '/users/' not in messageJson['object'] and \ + '/accounts/' not in messageJson['object'] and \ '/channel/' not in messageJson['object'] and \ '/profile/' not in messageJson['object']: if debug: @@ -1434,6 +1444,7 @@ def receiveAnnounce(recentPostsCache: {}, lookupActor = attrib if lookupActor: if '/users/' in lookupActor or \ + '/accounts/' in lookupActor or \ '/channel/' in lookupActor or \ '/profile/' in lookupActor: if '/statuses/' in lookupActor: @@ -1485,6 +1496,7 @@ def receiveUndoAnnounce(recentPostsCache: {}, if messageJson['object']['type'] != 'Announce': return False if '/users/' not in messageJson['actor'] and \ + '/accounts/' not in messageJson['actor'] and \ '/channel/' not in messageJson['actor'] and \ '/profile/' not in messageJson['actor']: if debug: @@ -1679,6 +1691,7 @@ def obtainAvatarForReplyPost(session, baseDir: str, httpPrefix: str, return if not ('/users/' in lookupActor or + '/accounts/' in lookupActor or '/channel/' in lookupActor or '/profile/' in lookupActor): return diff --git a/like.py b/like.py index dde8bd8bc..f3d127dcb 100644 --- a/like.py +++ b/like.py @@ -90,6 +90,7 @@ def like(recentPostsCache: {}, likedPostDomain, likedPostPort = getDomainFromActor(actorLiked) else: if '/users/' in objectUrl or \ + '/accounts/' in objectUrl or \ '/channel/' in objectUrl or \ '/profile/' in objectUrl: likedPostNickname = getNicknameFromActor(objectUrl) @@ -193,6 +194,7 @@ def undolike(recentPostsCache: {}, likedPostDomain, likedPostPort = getDomainFromActor(actorLiked) else: if '/users/' in objectUrl or \ + '/accounts/' in objectUrl or \ '/channel/' in objectUrl or \ '/profile/' in objectUrl: likedPostNickname = getNicknameFromActor(objectUrl) diff --git a/posts.py b/posts.py index 1aa7f8b14..05b081e7f 100644 --- a/posts.py +++ b/posts.py @@ -136,6 +136,7 @@ def getUserUrl(wfRequest: {}) -> str: if link.get('type') and link.get('href'): if link['type'] == 'application/activity+json': if not ('/users/' in link['href'] or + '/accounts/' in link['href'] or '/profile/' in link['href'] or '/channel/' in link['href']): print('Webfinger activity+json contains ' + @@ -207,7 +208,7 @@ def getPersonBox(baseDir: str, session, wfRequest: {}, return None, None, None, None, None, None, None, None personJson = getPersonFromCache(baseDir, personUrl, personCache) if not personJson: - if '/channel/' in personUrl: + if '/channel/' in personUrl or '/accounts/' in personUrl: asHeader = { 'Accept': 'application/ld+json; profile="' + profileStr + '"' } @@ -3188,7 +3189,8 @@ def downloadAnnounce(session, baseDir: str, httpPrefix: str, asHeader = { 'Accept': 'application/activity+json; profile="' + profileStr + '"' } - if '/channel/' in postJsonObject['actor']: + if '/channel/' in postJsonObject['actor'] or \ + '/accounts/' in postJsonObject['actor']: asHeader = { 'Accept': 'application/ld+json; profile="' + profileStr + '"' } @@ -3238,6 +3240,7 @@ def downloadAnnounce(session, baseDir: str, httpPrefix: str, rejectAnnounce(announceFilename) return None if '/users/' not in announcedJson['id'] and \ + '/accounts/' not in announcedJson['id'] and \ '/channel/' not in announcedJson['id'] and \ '/profile/' not in announcedJson['id']: rejectAnnounce(announceFilename) diff --git a/utils.py b/utils.py index abdb67be7..298ed54fe 100644 --- a/utils.py +++ b/utils.py @@ -222,14 +222,20 @@ def getNicknameFromActor(actor: str) -> str: return nickStr else: return nickStr.split('/')[0] - if '/channel/' in actor: + elif '/channel/' in actor: nickStr = actor.split('/channel/')[1].replace('@', '') if '/' not in nickStr: return nickStr else: return nickStr.split('/')[0] - # https://domain/@nick - if '/@' in actor: + elif '/accounts/' in actor: + nickStr = actor.split('/accounts/')[1].replace('@', '') + if '/' not in nickStr: + return nickStr + else: + return nickStr.split('/')[0] + elif '/@' in actor: + # https://domain/@nick nickStr = actor.split('/@')[1] if '/' in nickStr: nickStr = nickStr.split('/')[0] @@ -251,22 +257,24 @@ def getDomainFromActor(actor: str) -> (str, int): domain = actor.split('/profile/')[0] for prefix in prefixes: domain = domain.replace(prefix, '') + elif '/accounts/' in actor: + domain = actor.split('/accounts/')[0] + for prefix in prefixes: + domain = domain.replace(prefix, '') + elif '/channel/' in actor: + domain = actor.split('/channel/')[0] + for prefix in prefixes: + domain = domain.replace(prefix, '') + elif '/users/' not in actor: + domain = actor + for prefix in prefixes: + domain = domain.replace(prefix, '') + if '/' in actor: + domain = domain.split('/')[0] else: - if '/channel/' in actor: - domain = actor.split('/channel/')[0] - for prefix in prefixes: - domain = domain.replace(prefix, '') - else: - if '/users/' not in actor: - domain = actor - for prefix in prefixes: - domain = domain.replace(prefix, '') - if '/' in actor: - domain = domain.split('/')[0] - else: - domain = actor.split('/users/')[0] - for prefix in prefixes: - domain = domain.replace(prefix, '') + domain = actor.split('/users/')[0] + for prefix in prefixes: + domain = domain.replace(prefix, '') if ':' in domain: portStr = domain.split(':')[1] if not portStr.isdigit(): diff --git a/webinterface.py b/webinterface.py index c762e6caf..6a84dc8af 100644 --- a/webinterface.py +++ b/webinterface.py @@ -252,7 +252,7 @@ def updateAvatarImageCache(session, baseDir: str, httpPrefix: str, print('Failed to download avatar image: ' + str(avatarUrl)) print(e) prof = 'https://www.w3.org/ns/activitystreams' - if '/channel/' not in actor: + if '/channel/' not in actor or '/accounts/' not in actor: sessionHeaders = { 'Accept': 'application/activity+json; profile="' + prof + '"' } @@ -6281,6 +6281,7 @@ def htmlProfileAfterSearch(recentPostsCache: {}, maxRecentPosts: int, """Show a profile page after a search for a fediverse address """ if '/users/' in profileHandle or \ + '/accounts/' in profileHandle or \ '/channel/' in profileHandle or \ '/profile/' in profileHandle or \ '/@' in profileHandle: From 1c625007635c621cfa0555a94a950e7acb6f80c7 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 13 Aug 2020 17:21:09 +0100 Subject: [PATCH 22/48] Don't allow accounts as a username --- utils.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/utils.py b/utils.py index 298ed54fe..dd1a330b4 100644 --- a/utils.py +++ b/utils.py @@ -584,12 +584,13 @@ def validNickname(domain: str, nickname: str) -> bool: if nickname == domain: return False reservedNames = ('inbox', 'dm', 'outbox', 'following', - 'public', 'followers', 'profile', + 'public', 'followers', 'channel', 'capabilities', 'calendar', 'tlreplies', 'tlmedia', 'tlblogs', 'moderation', 'activity', 'undo', 'reply', 'replies', 'question', 'like', 'likes', 'users', 'statuses', + 'accounts', 'channels', 'profile', 'updates', 'repeat', 'announce', 'shares', 'fonts', 'icons') if nickname in reservedNames: From ec9941d7ca5d44d7756e6eca430c10f09558613a Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 13 Aug 2020 17:41:02 +0100 Subject: [PATCH 23/48] More actor parsing --- tests.py | 24 ++++++++++++++++++++++++ utils.py | 23 ++++++++++++++++++----- 2 files changed, 42 insertions(+), 5 deletions(-) diff --git a/tests.py b/tests.py index 947d9d98c..f7a27aaa3 100644 --- a/tests.py +++ b/tests.py @@ -1585,6 +1585,30 @@ def testActorParsing(): nickname = getNicknameFromActor(actor) assert nickname == 'mynick' + actor = 'https://element/accounts/badger' + domain, port = getDomainFromActor(actor) + assert domain == 'element' + nickname = getNicknameFromActor(actor) + assert nickname == 'badger' + + actor = 'egg@chicken.com' + domain, port = getDomainFromActor(actor) + assert domain == 'chicken.com' + nickname = getNicknameFromActor(actor) + assert nickname == 'egg' + + actor = '@waffle@cardboard' + domain, port = getDomainFromActor(actor) + assert domain == 'cardboard' + nickname = getNicknameFromActor(actor) + assert nickname == 'waffle' + + actor = 'https://astral/channel/sky' + domain, port = getDomainFromActor(actor) + assert domain == 'astral' + nickname = getNicknameFromActor(actor) + assert nickname == 'sky' + actor = 'https://randomain/users/rando' domain, port = getDomainFromActor(actor) assert domain == 'randomain' diff --git a/utils.py b/utils.py index dd1a330b4..d5601f651 100644 --- a/utils.py +++ b/utils.py @@ -215,6 +215,8 @@ def getDisplayName(baseDir: str, actor: str, personCache: {}) -> str: def getNicknameFromActor(actor: str) -> str: """Returns the nickname from an actor url """ + if actor.startswith('@'): + actor = actor[1:] if '/users/' not in actor: if '/profile/' in actor: nickStr = actor.split('/profile/')[1].replace('@', '') @@ -240,6 +242,9 @@ def getNicknameFromActor(actor: str) -> str: if '/' in nickStr: nickStr = nickStr.split('/')[0] return nickStr + elif '@' in actor: + nickStr = actor.split('@')[0] + return nickStr return None nickStr = actor.split('/users/')[1].replace('@', '') if '/' not in nickStr: @@ -251,6 +256,8 @@ def getNicknameFromActor(actor: str) -> str: def getDomainFromActor(actor: str) -> (str, int): """Returns the domain name from an actor url """ + if actor.startswith('@'): + actor = actor[1:] port = None prefixes = getProtocolPrefixes() if '/profile/' in actor: @@ -265,16 +272,22 @@ def getDomainFromActor(actor: str) -> (str, int): domain = actor.split('/channel/')[0] for prefix in prefixes: domain = domain.replace(prefix, '') - elif '/users/' not in actor: + elif '/users/' in actor: + domain = actor.split('/users/')[0] + for prefix in prefixes: + domain = domain.replace(prefix, '') + elif '/@' in actor: + domain = actor.split('/@')[0] + for prefix in prefixes: + domain = domain.replace(prefix, '') + elif '@' in actor: + domain = actor.split('@')[1].strip() + else: domain = actor for prefix in prefixes: domain = domain.replace(prefix, '') if '/' in actor: domain = domain.split('/')[0] - else: - domain = actor.split('/users/')[0] - for prefix in prefixes: - domain = domain.replace(prefix, '') if ':' in domain: portStr = domain.split(':')[1] if not portStr.isdigit(): From c77317d87f8014680bd0a1f47e7120c12ac27555 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 13 Aug 2020 17:48:06 +0100 Subject: [PATCH 24/48] Additional handle search --- daemon.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/daemon.py b/daemon.py index 578348ecf..ee80dc8ab 100644 --- a/daemon.py +++ b/daemon.py @@ -7232,7 +7232,12 @@ class PubServer(BaseHTTPRequestHandler): self._write(msg) self.server.POSTbusy = False return - elif '@' in searchStr: + elif ('@' in searchStr or + ('://' in searchStr and + ('/users/' in searchStr or + '/profile/' in searchStr or + '/accounts/' in searchStr or + '/channel/' in searchStr))): # profile search nickname = getNicknameFromActor(actorStr) if not self.server.session: From f1ec9e41b8cd46518db70b28d2b803e1dc4304b6 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 13 Aug 2020 19:45:41 +0100 Subject: [PATCH 25/48] Add manifest --- daemon.py | 62 ++++++++++++++++++++++++++++++++++++++++++++++++ img/logo128.png | Bin 0 -> 11600 bytes img/logo144.png | Bin 0 -> 12697 bytes img/logo152.png | Bin 0 -> 13426 bytes img/logo192.png | Bin 0 -> 14128 bytes img/logo256.png | Bin 0 -> 12558 bytes img/logo72.png | Bin 0 -> 10549 bytes img/logo96.png | Bin 0 -> 9634 bytes webinterface.py | 1 + 9 files changed, 63 insertions(+) create mode 100644 img/logo128.png create mode 100644 img/logo144.png create mode 100644 img/logo152.png create mode 100644 img/logo192.png create mode 100644 img/logo256.png create mode 100644 img/logo72.png create mode 100644 img/logo96.png diff --git a/daemon.py b/daemon.py index ee80dc8ab..cb91b7b4f 100644 --- a/daemon.py +++ b/daemon.py @@ -1245,6 +1245,61 @@ class PubServer(BaseHTTPRequestHandler): self._benchmarkGETtimings(GETstartTime, GETtimings, 4) + if '/manifest.json' in self.path: + manifest = { + "name": "Epicyon", + "short_name": "Epicyon", + "start_url": "/index.html", + "display": "standalone", + "background_color": "black", + "theme_color": "grey", + "orientation": "portrait-primary", + "icons": [ + { + "src": "/logo72.png", + "type": "image/png", + "sizes": "72x72" + }, + { + "src": "/logo96.png", + "type": "image/png", + "sizes": "96x96" + }, + { + "src": "/logo128.png", + "type": "image/png", + "sizes": "128x128" + }, + { + "src": "/logo144.png", + "type": "image/png", + "sizes": "144x144" + }, + { + "src": "/logo152.png", + "type": "image/png", + "sizes": "152x152" + }, + { + "src": "/logo192.png", + "type": "image/png", + "sizes": "192x192" + }, + { + "src": "/logo256.png", + "type": "image/png", + "sizes": "256x256" + } + ] + } + msg = json.dumps(manifest, + ensure_ascii=False).encode('utf-8') + self._set_headers('application/json', + len(msg), + None, callingDomain) + self._write(msg) + return + # favicon image if 'favicon.ico' in self.path: favType = 'image/x-icon' @@ -1836,6 +1891,13 @@ class PubServer(BaseHTTPRequestHandler): self.path == '/login.webp' or \ self.path == '/login.jpeg' or \ self.path == '/login.jpg' or \ + self.path == '/logo72.png' or \ + self.path == '/logo96.png' or \ + self.path == '/logo128.png' or \ + self.path == '/logo144.png' or \ + self.path == '/logo152.png' or \ + self.path == '/logo192.png' or \ + self.path == '/logo256.png' or \ self.path == '/qrcode.png': mediaFilename = \ self.server.baseDir + '/accounts' + self.path diff --git a/img/logo128.png b/img/logo128.png new file mode 100644 index 0000000000000000000000000000000000000000..4a7683ca0187fb2ea6ab1fbb0c2d19ed88aa8610 GIT binary patch literal 11600 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 literal 0 HcmV?d00001 diff --git a/img/logo144.png b/img/logo144.png new file mode 100644 index 0000000000000000000000000000000000000000..c644defac40b4157049b12830842d50c3d514385 GIT binary patch literal 12697 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
gQ~HSM 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 JsznR~{|7q_^X32m literal 0 HcmV?d00001 diff --git a/img/logo256.png b/img/logo256.png new file mode 100644 index 0000000000000000000000000000000000000000..c5c087e41752ab1197fa1ed9a7eee6a2c10ac812 GIT binary patch literal 12558 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%0DTGa`z!Nv^gq7(Dfqs>z8`*yWq!qoFMj(2 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 DS1b#O literal 0 HcmV?d00001 diff --git a/img/logo96.png b/img/logo96.png new file mode 100644 index 0000000000000000000000000000000000000000..98ef5f5c44e771ac6588d1bbd33d063f68359d19 GIT binary patch literal 9634 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 YzjWy^SPbdri~s-t07*qoM6N<$f-oSHU;qFB literal 0 HcmV?d00001 diff --git a/webinterface.py b/webinterface.py index 6a84dc8af..4028e531f 100644 --- a/webinterface.py +++ b/webinterface.py @@ -2297,6 +2297,7 @@ def htmlHeader(cssFilename: str, css: str, lang='en') -> str: htmlStr += ' \n' htmlStr += ' \n' + htmlStr += ' \n' htmlStr += ' \n' htmlStr += ' \n' return htmlStr From aed33921fb76b2c8cb979f4c52f52bd199804dbf Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 13 Aug 2020 19:51:33 +0100 Subject: [PATCH 26/48] theme color in header --- webinterface.py | 1 + 1 file changed, 1 insertion(+) diff --git a/webinterface.py b/webinterface.py index 4028e531f..206cca1bd 100644 --- a/webinterface.py +++ b/webinterface.py @@ -2298,6 +2298,7 @@ def htmlHeader(cssFilename: str, css: str, lang='en') -> str: fontFormat + '" href="' + fontName + '" crossorigin>\n' htmlStr += ' \n' htmlStr += ' \n' + htmlStr += ' \n' htmlStr += ' \n' htmlStr += ' \n' return htmlStr From 3f31971480b6a56c1b1bb2b4b01332c44de1127b Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 13 Aug 2020 19:53:50 +0100 Subject: [PATCH 27/48] Lerger logo image in manifest --- daemon.py | 6 ++++++ img/logo512.png | Bin 0 -> 24714 bytes 2 files changed, 6 insertions(+) create mode 100644 img/logo512.png diff --git a/daemon.py b/daemon.py index cb91b7b4f..6766f3c09 100644 --- a/daemon.py +++ b/daemon.py @@ -1289,6 +1289,11 @@ class PubServer(BaseHTTPRequestHandler): "src": "/logo256.png", "type": "image/png", "sizes": "256x256" + }, + { + "src": "/logo512.png", + "type": "image/png", + "sizes": "512x512" } ] } @@ -1898,6 +1903,7 @@ class PubServer(BaseHTTPRequestHandler): self.path == '/logo152.png' or \ self.path == '/logo192.png' or \ self.path == '/logo256.png' or \ + self.path == '/logo512.png' or \ self.path == '/qrcode.png': mediaFilename = \ self.server.baseDir + '/accounts' + self.path diff --git a/img/logo512.png b/img/logo512.png new file mode 100644 index 0000000000000000000000000000000000000000..10b0194e2fc45712821b082738f67419d3084c5f GIT binary patch literal 24714 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 PgK?V}S{M-Z+#dcvt~Es~ literal 0 HcmV?d00001 From c7b9878e600577b1760e233299a83686330ba8f6 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 13 Aug 2020 20:46:45 +0100 Subject: [PATCH 28/48] Different path for manifest icons --- daemon.py | 47 +++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 39 insertions(+), 8 deletions(-) diff --git a/daemon.py b/daemon.py index 6766f3c09..68b593c63 100644 --- a/daemon.py +++ b/daemon.py @@ -1890,20 +1890,51 @@ class PubServer(BaseHTTPRequestHandler): self._benchmarkGETtimings(GETstartTime, GETtimings, 15) - # image on login screen or qrcode - if self.path == '/login.png' or \ - self.path == '/login.gif' or \ - self.path == '/login.webp' or \ - self.path == '/login.jpeg' or \ - self.path == '/login.jpg' or \ - self.path == '/logo72.png' or \ + # manifest images used to create desktop icons + # for progressive web app + if self.path == '/logo72.png' or \ self.path == '/logo96.png' or \ self.path == '/logo128.png' or \ self.path == '/logo144.png' or \ self.path == '/logo152.png' or \ self.path == '/logo192.png' or \ self.path == '/logo256.png' or \ - self.path == '/logo512.png' or \ + self.path == '/logo512.png': + mediaFilename = \ + self.server.baseDir + '/img' + self.path + if os.path.isfile(mediaFilename): + if self._etag_exists(mediaFilename): + # The file has not changed + self._304() + return + + tries = 0 + mediaBinary = None + while tries < 5: + try: + with open(mediaFilename, 'rb') as avFile: + mediaBinary = avFile.read() + break + except Exception as e: + print(e) + time.sleep(1) + tries += 1 + if mediaBinary: + self._set_headers_etag(mediaFilename, + 'image/png', + mediaBinary, cookie, + callingDomain) + self._write(mediaBinary) + return + self._404() + return + + # image on login screen or qrcode + if self.path == '/login.png' or \ + self.path == '/login.gif' or \ + self.path == '/login.webp' or \ + self.path == '/login.jpeg' or \ + self.path == '/login.jpg' or \ self.path == '/qrcode.png': mediaFilename = \ self.server.baseDir + '/accounts' + self.path From e10bc7c0867dc7784a04074a7ac943a03c589bec Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 13 Aug 2020 21:08:15 +0100 Subject: [PATCH 29/48] Comments --- daemon.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/daemon.py b/daemon.py index 68b593c63..d0d753e45 100644 --- a/daemon.py +++ b/daemon.py @@ -1245,6 +1245,7 @@ class PubServer(BaseHTTPRequestHandler): self._benchmarkGETtimings(GETstartTime, GETtimings, 4) + # manifest for progressive web apps if '/manifest.json' in self.path: manifest = { "name": "Epicyon", @@ -1890,8 +1891,9 @@ class PubServer(BaseHTTPRequestHandler): self._benchmarkGETtimings(GETstartTime, GETtimings, 15) - # manifest images used to create desktop icons - # for progressive web app + # manifest images used to create a home screen icon + # when selecting "add to home screen" in browsers + # which support progressive web apps if self.path == '/logo72.png' or \ self.path == '/logo96.png' or \ self.path == '/logo128.png' or \ From c45c084b8c94087a31b0998304e2eda6cf027f89 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Fri, 14 Aug 2020 11:18:10 +0100 Subject: [PATCH 30/48] Related apps for notifications in manifest --- daemon.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/daemon.py b/daemon.py index d0d753e45..c9dbe46b3 100644 --- a/daemon.py +++ b/daemon.py @@ -1296,6 +1296,16 @@ class PubServer(BaseHTTPRequestHandler): "type": "image/png", "sizes": "512x512" } + ], + "related_applications": [ + { + "platform": "fdroid", + "url": "https://f-droid.org/en/packages/eu.siacs.conversations" + }, + { + "platform": "fdroid", + "url": "https://staging.f-droid.org/en/packages/im.vector.app" + } ] } msg = json.dumps(manifest, From 2cc9f51f8431d77ca91a4b65d7b16a173ad2edcf Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Fri, 14 Aug 2020 11:21:48 +0100 Subject: [PATCH 31/48] manifest categories --- daemon.py | 1 + 1 file changed, 1 insertion(+) diff --git a/daemon.py b/daemon.py index c9dbe46b3..d1cf9851f 100644 --- a/daemon.py +++ b/daemon.py @@ -1255,6 +1255,7 @@ class PubServer(BaseHTTPRequestHandler): "background_color": "black", "theme_color": "grey", "orientation": "portrait-primary", + "categories": ["microblog", "fediverse", "activitypub"], "icons": [ { "src": "/logo72.png", From 69a07cb5fecd20d73ca2076633c227c1f1d7f524 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Fri, 14 Aug 2020 11:24:14 +0100 Subject: [PATCH 32/48] Line length --- daemon.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/daemon.py b/daemon.py index d1cf9851f..99ffaeebb 100644 --- a/daemon.py +++ b/daemon.py @@ -1247,6 +1247,8 @@ class PubServer(BaseHTTPRequestHandler): # manifest for progressive web apps if '/manifest.json' in self.path: + app1 = "https://f-droid.org/en/packages/eu.siacs.conversations" + app2 = "https://staging.f-droid.org/en/packages/im.vector.app" manifest = { "name": "Epicyon", "short_name": "Epicyon", @@ -1301,11 +1303,11 @@ class PubServer(BaseHTTPRequestHandler): "related_applications": [ { "platform": "fdroid", - "url": "https://f-droid.org/en/packages/eu.siacs.conversations" + "url": app1 }, { "platform": "fdroid", - "url": "https://staging.f-droid.org/en/packages/im.vector.app" + "url": app2 } ] } From d6654357c1834c938f1ca24fd6804e3f4c38962c Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Fri, 14 Aug 2020 12:46:07 +0100 Subject: [PATCH 33/48] Add screenshots --- daemon.py | 96 ++++++++++++++++++++++++++++++++---------- img/mobile.jpg | Bin 80215 -> 44382 bytes img/mobile_person.jpg | Bin 0 -> 36167 bytes img/mobile_search.jpg | Bin 0 -> 39056 bytes 4 files changed, 73 insertions(+), 23 deletions(-) create mode 100644 img/mobile_person.jpg create mode 100644 img/mobile_search.jpg diff --git a/daemon.py b/daemon.py index 99ffaeebb..de81f78da 100644 --- a/daemon.py +++ b/daemon.py @@ -1258,6 +1258,23 @@ class PubServer(BaseHTTPRequestHandler): "theme_color": "grey", "orientation": "portrait-primary", "categories": ["microblog", "fediverse", "activitypub"], + "screenshots" : [ + { + "src": "/mobile.jpg", + "sizes": "418x851", + "type": "image/jpeg" + }, + { + "src": "mobile_person.jpg", + "sizes": "429x860", + "type": "image/jpeg" + }, + { + "src": "mobile_search.jpg", + "sizes": "422x861", + "type": "image/jpeg" + } + ], "icons": [ { "src": "/logo72.png", @@ -1944,17 +1961,14 @@ class PubServer(BaseHTTPRequestHandler): self._404() return - # image on login screen or qrcode - if self.path == '/login.png' or \ - self.path == '/login.gif' or \ - self.path == '/login.webp' or \ - self.path == '/login.jpeg' or \ - self.path == '/login.jpg' or \ - self.path == '/qrcode.png': - mediaFilename = \ - self.server.baseDir + '/accounts' + self.path - if os.path.isfile(mediaFilename): - if self._etag_exists(mediaFilename): + # manifest images used to show example screenshots + # for use by app stores + if self.path == '/screenshot1.jpg' or \ + self.path == '/screenshot2.jpg': + screenFilename = \ + self.server.baseDir + '/img' + self.path + if os.path.isfile(screenFilename): + if self._etag_exists(screenFilename): # The file has not changed self._304() return @@ -1963,7 +1977,7 @@ class PubServer(BaseHTTPRequestHandler): mediaBinary = None while tries < 5: try: - with open(mediaFilename, 'rb') as avFile: + with open(screenFilename, 'rb') as avFile: mediaBinary = avFile.read() break except Exception as e: @@ -1971,7 +1985,43 @@ class PubServer(BaseHTTPRequestHandler): time.sleep(1) tries += 1 if mediaBinary: - self._set_headers_etag(mediaFilename, + self._set_headers_etag(screenFilename, + 'image/png', + mediaBinary, cookie, + callingDomain) + self._write(mediaBinary) + return + self._404() + return + + # image on login screen or qrcode + if self.path == '/login.png' or \ + self.path == '/login.gif' or \ + self.path == '/login.webp' or \ + self.path == '/login.jpeg' or \ + self.path == '/login.jpg' or \ + self.path == '/qrcode.png': + iconFilename = \ + self.server.baseDir + '/accounts' + self.path + if os.path.isfile(iconFilename): + if self._etag_exists(iconFilename): + # The file has not changed + self._304() + return + + tries = 0 + mediaBinary = None + while tries < 5: + try: + with open(iconFilename, 'rb') as avFile: + mediaBinary = avFile.read() + break + except Exception as e: + print(e) + time.sleep(1) + tries += 1 + if mediaBinary: + self._set_headers_etag(iconFilename, 'image/png', mediaBinary, cookie, callingDomain) @@ -1989,11 +2039,11 @@ class PubServer(BaseHTTPRequestHandler): savePersonQrcode(self.server.baseDir, nickname, self.server.domain, self.server.port) - mediaFilename = \ + qrFilename = \ self.server.baseDir + '/accounts/' + \ nickname + '@' + self.server.domain + '/qrcode.png' - if os.path.isfile(mediaFilename): - if self._etag_exists(mediaFilename): + if os.path.isfile(qrFilename): + if self._etag_exists(qrFilename): # The file has not changed self._304() return @@ -2002,7 +2052,7 @@ class PubServer(BaseHTTPRequestHandler): mediaBinary = None while tries < 5: try: - with open(mediaFilename, 'rb') as avFile: + with open(qrFilename, 'rb') as avFile: mediaBinary = avFile.read() break except Exception as e: @@ -2010,7 +2060,7 @@ class PubServer(BaseHTTPRequestHandler): time.sleep(1) tries += 1 if mediaBinary: - self._set_headers_etag(mediaFilename, 'image/png', + self._set_headers_etag(qrFilename, 'image/png', mediaBinary, cookie, callingDomain) self._write(mediaBinary) @@ -2022,11 +2072,11 @@ class PubServer(BaseHTTPRequestHandler): if '/users/' in self.path and \ self.path.endswith('/search_banner.png'): nickname = getNicknameFromActor(self.path) - mediaFilename = \ + bannerFilename = \ self.server.baseDir + '/accounts/' + \ nickname + '@' + self.server.domain + '/search_banner.png' - if os.path.isfile(mediaFilename): - if self._etag_exists(mediaFilename): + if os.path.isfile(bannerFilename): + if self._etag_exists(bannerFilename): # The file has not changed self._304() return @@ -2035,7 +2085,7 @@ class PubServer(BaseHTTPRequestHandler): mediaBinary = None while tries < 5: try: - with open(mediaFilename, 'rb') as avFile: + with open(bannerFilename, 'rb') as avFile: mediaBinary = avFile.read() break except Exception as e: @@ -2043,7 +2093,7 @@ class PubServer(BaseHTTPRequestHandler): time.sleep(1) tries += 1 if mediaBinary: - self._set_headers_etag(mediaFilename, 'image/png', + self._set_headers_etag(bannerFilename, 'image/png', mediaBinary, cookie, callingDomain) self._write(mediaBinary) diff --git a/img/mobile.jpg b/img/mobile.jpg index 2cdb0e31f64bc59573ba2965bce2b82654da3014..9cdc0781ff8c0f5403ea5c077d5008a118d4cb0a 100644 GIT binary patch literal 44382 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 I;(yKlA0IGn7XSbN literal 80215 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\n' if toxAddress: donateSection += \ - '

Tox:

Tox:

\n' if PGPfingerprint: donateSection += \ From f41292e3e6547786d5c372ae824cdd314735f826 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Fri, 14 Aug 2020 13:53:19 +0100 Subject: [PATCH 37/48] Tox address font sizes --- epicyon-profile.css | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/epicyon-profile.css b/epicyon-profile.css index 2848c2981..6ff3038c1 100644 --- a/epicyon-profile.css +++ b/epicyon-profile.css @@ -27,7 +27,8 @@ --font-size5: 20px; --font-size-pgp-key: 16px; --font-size-pgp-key2: 11px; - --font-size-tox: 8px; + --font-size-tox: 16px; + --font-size-tox2: 8px; --text-entry-foreground: #ccc; --text-entry-background: #111; --time-color: #aaa; @@ -1265,7 +1266,7 @@ aside .toggle-inside li { @media screen and (max-width: 1000px) { .toxaddr { - font-size: var(--font-size-tox); + font-size: var(--font-size-tox2); font-family: Arial, Helvetica, sans-serif; } .ssbaddr { From f110667105d806cb41db53235a07612d4b0bf63f Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Fri, 14 Aug 2020 13:58:54 +0100 Subject: [PATCH 38/48] Tox address font sizes --- epicyon-profile.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/epicyon-profile.css b/epicyon-profile.css index 6ff3038c1..e54ff9611 100644 --- a/epicyon-profile.css +++ b/epicyon-profile.css @@ -26,7 +26,7 @@ --font-size4: 22px; --font-size5: 20px; --font-size-pgp-key: 16px; - --font-size-pgp-key2: 11px; + --font-size-pgp-key2: 8px; --font-size-tox: 16px; --font-size-tox2: 8px; --text-entry-foreground: #ccc; From 9e023d4ea8faaf913c2c2afed4f6860cccf858f4 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Fri, 14 Aug 2020 14:04:11 +0100 Subject: [PATCH 39/48] Smaller font on about screen --- epicyon-profile.css | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/epicyon-profile.css b/epicyon-profile.css index e54ff9611..4b1ee8193 100644 --- a/epicyon-profile.css +++ b/epicyon-profile.css @@ -288,11 +288,6 @@ a:link { font-family: 'monospace'; } -.container p.administeredby { - font-size: var(--font-size-header); - font-family: Arial, Helvetica, sans-serif; -} - .container::after { content: ""; clear: both; @@ -848,6 +843,10 @@ aside .toggle-inside li { } @media screen and (min-width: 400px) { + .container p.administeredby { + font-size: var(--font-size-header); + font-family: Arial, Helvetica, sans-serif; + } .toxaddr { font-size: var(--font-size-tox); font-family: Arial, Helvetica, sans-serif; @@ -1265,6 +1264,10 @@ aside .toggle-inside li { } @media screen and (max-width: 1000px) { + .container p.administeredby { + font-size: var(--font-size-tox2); + font-family: Arial, Helvetica, sans-serif; + } .toxaddr { font-size: var(--font-size-tox2); font-family: Arial, Helvetica, sans-serif; From fe4571fa6c0233c69b7cb1d1401a529275c6fccd Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Fri, 14 Aug 2020 20:31:19 +0100 Subject: [PATCH 40/48] Images can be accessed via tab key --- epicyon-profile.css | 4 ++++ webinterface.py | 37 ++++++++++++++++++++++--------------- 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/epicyon-profile.css b/epicyon-profile.css index 4b1ee8193..ffc57c162 100644 --- a/epicyon-profile.css +++ b/epicyon-profile.css @@ -76,6 +76,10 @@ body, html { font-size: var(--font-size); } +.imageAnchor:focus img{ + border: 2px solid blue; +} + h1 { color: var(--title-color); } diff --git a/webinterface.py b/webinterface.py index c1e7af23e..ad20c625d 100644 --- a/webinterface.py +++ b/webinterface.py @@ -3718,7 +3718,7 @@ def individualPostAsHtml(recentPostsCache: {}, maxRecentPosts: int, nickname, domain, displayName, False) - avatarLink = '
' + avatarLink = ' ' avatarLink += \ '  ' @@ -3726,7 +3726,8 @@ def individualPostAsHtml(recentPostsCache: {}, maxRecentPosts: int, if showAvatarOptions and \ fullDomain + '/users/' + nickname not in postActor: avatarLink = \ - ' \n' avatarLink += \ ' ' + displayName + '\n' else: @@ -3812,7 +3814,8 @@ def individualPostAsHtml(recentPostsCache: {}, maxRecentPosts: int, # pprint(postJsonObject) print('ERROR: no actorDomain') titleStr += \ - '@' + actorNickname + '@' + actorDomain + '\n' @@ -3843,19 +3846,20 @@ def individualPostAsHtml(recentPostsCache: {}, maxRecentPosts: int, replyStr = '' if isPublicRepeat: replyStr += \ - '\n' else: if isDM(postJsonObject): replyStr += \ - '\n' else: replyStr += \ - '\n' @@ -3871,7 +3875,7 @@ def individualPostAsHtml(recentPostsCache: {}, maxRecentPosts: int, if isBlogPost(postJsonObject): if '/statuses/' in postJsonObject['object']['id']: editStr += \ - '\n' deleteStr += \ @@ -3975,7 +3980,7 @@ def individualPostAsHtml(recentPostsCache: {}, maxRecentPosts: int, else: if not isMuted: muteStr = \ - '\n' @@ -3986,7 +3991,8 @@ def individualPostAsHtml(recentPostsCache: {}, maxRecentPosts: int, '" src="/' + iconsDir + '/mute.png"/>\n' else: muteStr = \ - '\n' @@ -4044,7 +4050,8 @@ def individualPostAsHtml(recentPostsCache: {}, maxRecentPosts: int, idx = 'Show options for this person' replyAvatarImageInPost = \ '
\n' \ - '\n' replyAvatarImageInPost += \ - '| ' + \
@@ -4591,7 +4592,7 @@ def htmlTimeline(defaultTimeline: str,
                     '\n' else: newPostButtonStr = \ - '\n' else: newPostButtonStr = \ - '| ' + \
@@ -4607,7 +4608,7 @@ def htmlTimeline(defaultTimeline: str,
                 '\n' else: newPostButtonStr = \ - '| ' + \
@@ -4712,13 +4713,13 @@ def htmlTimeline(defaultTimeline: str,
         # indicate that the calendar icon is highlighted
         calendarAltText = '*' + calendarAltText + '*'
     tlStr += \
-        '    <a href=| ' + calendarAltText + '\n' tlStr += \ - ' | ' + translate['Show/Hide Buttons'] + \

From 671d411f0f1ddd94efcaa6057971b500ad320e04 Mon Sep 17 00:00:00 2001
From: Bob Mottram <bob@freedombone.net>
Date: Fri, 14 Aug 2020 21:00:09 +0100
Subject: [PATCH 43/48] Theme focus colors

---
 theme.py | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/theme.py b/theme.py
index 4749e9ec9..070cfccc4 100644
--- a/theme.py
+++ b/theme.py
@@ -277,6 +277,7 @@ def setThemeNight(baseDir: str):
     fontStr = \
         Date: Fri, 14 Aug 2020 21:14:26 +0100 Subject: [PATCH 44/48] Focus color on screens --- epicyon-blog.css | 5 +++++ epicyon-calendar.css | 5 +++++ epicyon-follow.css | 5 +++++ epicyon-login.css | 5 +++++ epicyon-options.css | 5 +++++ epicyon-profile.css | 4 ++++ epicyon-search.css | 5 +++++ epicyon-suspended.css | 5 +++++ 8 files changed, 39 insertions(+) diff --git a/epicyon-blog.css b/epicyon-blog.css index a2ceee5d8..46dfd30fc 100644 --- a/epicyon-blog.css +++ b/epicyon-blog.css @@ -42,6 +42,7 @@ --gallery-font-size-mobile: 35px; --button-corner-radius: 15px; --timeline-border-radius: 30px; + --focus-color: white; } @font-face { @@ -80,6 +81,10 @@ a:link { font-weight: bold; } +a:focus { + border: 2px solid var(--focus-color); +} + .cwText { display: none; } diff --git a/epicyon-calendar.css b/epicyon-calendar.css index cbf3471d3..9c11fd0cb 100644 --- a/epicyon-calendar.css +++ b/epicyon-calendar.css @@ -13,6 +13,7 @@ --event-foreground:white; --title-text: #282c37; --title-background: #ccc; + --focus-color: white; } @font-face { @@ -67,6 +68,10 @@ a:link { margin: -1rem; } +a:focus { + border: 2px solid var(--focus-color); +} + .calendar__day__header, .calendar__day__cell { border: 2px solid var(--lines-color); diff --git a/epicyon-follow.css b/epicyon-follow.css index 2f7ec22f1..ed7aca1ed 100644 --- a/epicyon-follow.css +++ b/epicyon-follow.css @@ -30,6 +30,7 @@ --follow-text-size1: 24px; --follow-text-size2: 40px; --follow-text-entry-width: 90%; + --focus-color: white; } @font-face { @@ -67,6 +68,10 @@ a:link { font-weight: bold; } +a:focus { + border: 2px solid var(--focus-color); +} + .searchBanner { background-image: linear-gradient(rgba(0, 0, 0, 0.0), rgba(0, 0, 0, 0.5)), url("search_banner.png"); background-position: center; diff --git a/epicyon-login.css b/epicyon-login.css index d547f5821..1a02de7a6 100644 --- a/epicyon-login.css +++ b/epicyon-login.css @@ -19,6 +19,7 @@ --button-background: #999; --button-selected: #666; --form-border-radius: 30px; + --focus-color: white; } @font-face { @@ -63,6 +64,10 @@ a:link { font-weight: bold; } +a:focus { + border: 2px solid var(--focus-color); +} + form { border: var(--border-width) solid var(--border-color); border-radius: var(--form-border-radius); diff --git a/epicyon-options.css b/epicyon-options.css index abf43c108..c7f07905d 100644 --- a/epicyon-options.css +++ b/epicyon-options.css @@ -32,6 +32,7 @@ --follow-text-size1: 24px; --follow-text-size2: 40px; --follow-text-entry-width: 90%; + --focus-color: white; } @font-face { @@ -74,6 +75,10 @@ a:link { font-weight: bold; } +a:focus { + border: 2px solid var(--focus-color); +} + .follow { height: 100%; position: relative; diff --git a/epicyon-profile.css b/epicyon-profile.css index aff648b28..1c38bf5d3 100644 --- a/epicyon-profile.css +++ b/epicyon-profile.css @@ -101,6 +101,10 @@ a:link { font-weight: bold; } +a:focus { + border: 2px solid var(--focus-color); +} + .timeline-banner { background-image: linear-gradient(rgba(0, 0, 0, 0.0), rgba(0, 0, 0, 0.5)), url("banner.png"); height: 10%; diff --git a/epicyon-search.css b/epicyon-search.css index 3df723300..ab4a91a19 100644 --- a/epicyon-search.css +++ b/epicyon-search.css @@ -30,6 +30,7 @@ --follow-text-size1: 24px; --follow-text-size2: 40px; --follow-text-entry-width: 90%; + --focus-color: white; } @font-face { @@ -67,6 +68,10 @@ a:link { font-weight: bold; } +a:focus { + border: 2px solid var(--focus-color); +} + .searchBanner { background-image: linear-gradient(rgba(0, 0, 0, 0.0), rgba(0, 0, 0, 0.5)), url("search_banner.png"); background-position: center; diff --git a/epicyon-suspended.css b/epicyon-suspended.css index 7ace9ba3f..03ddc7dc2 100644 --- a/epicyon-suspended.css +++ b/epicyon-suspended.css @@ -19,6 +19,7 @@ --button-text: #FFFFFF; --button-background: #999; --button-selected: #666; + --focus-color: white; } @font-face { @@ -57,6 +58,10 @@ a:link { font-weight: bold; } +a:focus { + border: 2px solid var(--focus-color); +} + .screentitle { font-size: 30px; font-family: Arial, Helvetica, sans-serif; From 2f7b2be363f2db1cf352229f661b5fdaa61b9407 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sat, 15 Aug 2020 11:11:02 +0100 Subject: [PATCH 45/48] Extra debug --- daemon.py | 38 ++++++++++++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/daemon.py b/daemon.py index ab6b3ef82..072d637b0 100644 --- a/daemon.py +++ b/daemon.py @@ -1334,6 +1334,8 @@ class PubServer(BaseHTTPRequestHandler): len(msg), None, callingDomain) self._write(msg) + if self.server.debug: + print('Sent manifest: ' + callingDomain) return # favicon image @@ -1353,6 +1355,8 @@ class PubServer(BaseHTTPRequestHandler): self.server.baseDir + '/img/icons/' + favFilename if self._etag_exists(faviconFilename): # The file has not changed + if self.server.debug: + print('favicon icon has not changed: ' + callingDomain) self._304() return if self.server.iconsCache.get(favFilename): @@ -1362,6 +1366,8 @@ class PubServer(BaseHTTPRequestHandler): favBinary, cookie, callingDomain) self._write(favBinary) + if self.server.debug: + print('Sent favicon from cache: ' + callingDomain) return else: if os.path.isfile(faviconFilename): @@ -1373,7 +1379,11 @@ class PubServer(BaseHTTPRequestHandler): callingDomain) self._write(favBinary) self.server.iconsCache[favFilename] = favBinary + if self.server.debug: + print('Sent favicon from file: ' + callingDomain) return + if self.server.debug: + print('favicon not sent: ' + callingDomain) self._404() return @@ -1446,6 +1456,9 @@ class PubServer(BaseHTTPRequestHandler): fontBinary, cookie, callingDomain) self._write(fontBinary) + if self.server.debug: + print('font sent from cache: ' + + self.path + ' ' + callingDomain) return else: if os.path.isfile(fontFilename): @@ -1457,7 +1470,12 @@ class PubServer(BaseHTTPRequestHandler): callingDomain) self._write(fontBinary) self.server.fontsCache[fontStr] = fontBinary + if self.server.debug: + print('font sent from file: ' + + self.path + ' ' + callingDomain) return + if self.server.debug: + print('font not found: ' + self.path + ' ' + callingDomain) self._404() return @@ -1512,9 +1530,15 @@ class PubServer(BaseHTTPRequestHandler): self._set_headers('text/xml', len(msg), cookie, callingDomain) self._write(msg) + if self.server.debug: + print('Sent rss2 feed: ' + + self.path + ' ' + callingDomain) return - self._404() - return + if self.server.debug: + print('Failed to get rss2 feed: ' + + self.path + ' ' + callingDomain) + self._404() + return # RSS 3.0 if self.path.startswith('/blog/') and \ @@ -1550,9 +1574,15 @@ class PubServer(BaseHTTPRequestHandler): self._set_headers('text/plain; charset=utf-8', len(msg), cookie, callingDomain) self._write(msg) + if self.server.debug: + print('Sent rss3 feed: ' + + self.path + ' ' + callingDomain) return - self._404() - return + if self.server.debug: + print('Failed to get rss3 feed: ' + + self.path + ' ' + callingDomain) + self._404() + return # show the main blog page if htmlGET and (self.path == '/blog' or From d81157bc397859d15e90022a2e5403e7c60cc057 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sun, 16 Aug 2020 15:22:48 +0100 Subject: [PATCH 46/48] Starlight focus color --- theme.py | 1 + 1 file changed, 1 insertion(+) diff --git a/theme.py b/theme.py index 070cfccc4..8924232e5 100644 --- a/theme.py +++ b/theme.py @@ -321,6 +321,7 @@ def setThemeStarlight(baseDir: str): removeTheme(baseDir) setThemeInConfig(baseDir, name) themeParams = { + "focus-color": "darkred", "font-size-button-mobile": "36px", "font-size": "32px", "font-size2": "26px", From aa93ad109d3c7a124b043288f8f498ca5a1f0ee1 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sun, 16 Aug 2020 15:25:31 +0100 Subject: [PATCH 47/48] Remove spaces --- webinterface.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/webinterface.py b/webinterface.py index 0988cee5b..c58225400 100644 --- a/webinterface.py +++ b/webinterface.py @@ -3734,7 +3734,7 @@ def individualPostAsHtml(recentPostsCache: {}, maxRecentPosts: int, translate['Show options for this person'] + \ '" src="' + avatarUrl + '" ' + avatarPosition + '/>\n' avatarImageInPost = \ - '
' + avatarLink + '
\n' + '
' + avatarLink.strip() + '
\n' # don't create new html within the bookmarks timeline # it should already have been created for the inbox @@ -4208,7 +4208,7 @@ def individualPostAsHtml(recentPostsCache: {}, maxRecentPosts: int, attachmentStr, galleryStr = \ getPostAttachmentsAsHtml(postJsonObject, boxName, translate, - isMuted, avatarLink, + isMuted, avatarLink.strip(), replyStr, announceStr, likeStr, bookmarkStr, deleteStr, muteStr) From 7a0914253e1f936988545a31f0ee169e3ffcc432 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Tue, 18 Aug 2020 14:42:58 +0000 Subject: [PATCH 48/48] Add bookmarks to go straight to followers list --- webinterface.py | 39 +++++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/webinterface.py b/webinterface.py index c58225400..79205e8c6 100644 --- a/webinterface.py +++ b/webinterface.py @@ -2801,30 +2801,32 @@ def htmlProfile(defaultTimeline: str, profileStr = \ linkToTimelineStart + profileHeaderStr + \ linkToTimelineEnd + donateSection - profileStr += '
\n' + profileStr += '
\n' profileStr += '
' profileStr += \ - ' ' - profileStr += \ - ' ' profileStr += \ - ' ' + profileStr += \ + ' ' + \ + '' + profileStr += \ + ' ' + \ + '' profileStr += \ - ' ' + ' ' + \ + '' profileStr += \ - ' ' - profileStr += \ - ' ' + ' ' + \ + '' profileStr += editProfileStr + logoutStr profileStr += '
' profileStr += '
' @@ -4548,7 +4550,8 @@ def htmlTimeline(defaultTimeline: str, # show follow approvals icon followApprovals = \ '' + \ + '

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 diff --git a/img/mobile_person.jpg b/img/mobile_person.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e8d69725abc441858d423dbeb67a00d7a6b6120f GIT binary patch literal 36167 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 OMEGg*8x-*S>;D7#-8>}# literal 0 HcmV?d00001 diff --git a/img/mobile_search.jpg b/img/mobile_search.jpg new file mode 100644 index 0000000000000000000000000000000000000000..30fab659877877f8c92262a58ef2e757c9d544a6 GIT binary patch literal 39056 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�_5(N^L=mpNHX}vTrb#pXnkKtkvbCId{|#I>B#p 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 Date: Fri, 14 Aug 2020 12:47:37 +0100 Subject: [PATCH 34/48] Slash --- daemon.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/daemon.py b/daemon.py index de81f78da..12fabc6b9 100644 --- a/daemon.py +++ b/daemon.py @@ -1265,12 +1265,12 @@ class PubServer(BaseHTTPRequestHandler): "type": "image/jpeg" }, { - "src": "mobile_person.jpg", + "src": "/mobile_person.jpg", "sizes": "429x860", "type": "image/jpeg" }, { - "src": "mobile_search.jpg", + "src": "/mobile_search.jpg", "sizes": "422x861", "type": "image/jpeg" } From 1a173ab4bd5350fd18a5af9b1cfcfe00ff009665 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Fri, 14 Aug 2020 12:57:48 +0100 Subject: [PATCH 35/48] Different pgp key width on mobile --- epicyon-profile.css | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/epicyon-profile.css b/epicyon-profile.css index 7cb709598..1b28d39a6 100644 --- a/epicyon-profile.css +++ b/epicyon-profile.css @@ -346,13 +346,6 @@ a:link { background: var(--link-bg-color); } -.pgp { - font-size: var(--font-size-pgp-key); - color: var(--main-link-color); - background: var(--link-bg-color); - font-family: 'monospace'; -} - .container img.announceOrReply { float: none; width: 30px; @@ -857,6 +850,13 @@ aside .toggle-inside li { } @media screen and (min-width: 400px) { + .pgp { + width: 79ch; + font-size: var(--font-size-pgp-key); + color: var(--main-link-color); + background: var(--link-bg-color); + font-family: 'monospace'; + } body, html { font-size: var(--font-size4); font-family: Arial, Helvetica, sans-serif; @@ -1260,6 +1260,13 @@ aside .toggle-inside li { } @media screen and (max-width: 1000px) { + .pgp { + width: 40ch; + font-size: var(--font-size-pgp-key); + color: var(--main-link-color); + background: var(--link-bg-color); + font-family: 'monospace'; + } body, html { font-size: var(--font-size3); font-family: Arial, Helvetica, sans-serif; From 847d84f32e3dce445192ffb6576516ff6d7a199d Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Fri, 14 Aug 2020 13:50:51 +0100 Subject: [PATCH 36/48] Smaller font for tox address --- daemon.py | 2 +- epicyon-profile.css | 27 +++++++++++++++++++-------- webinterface.py | 2 +- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/daemon.py b/daemon.py index 12fabc6b9..ab6b3ef82 100644 --- a/daemon.py +++ b/daemon.py @@ -1258,7 +1258,7 @@ class PubServer(BaseHTTPRequestHandler): "theme_color": "grey", "orientation": "portrait-primary", "categories": ["microblog", "fediverse", "activitypub"], - "screenshots" : [ + "screenshots": [ { "src": "/mobile.jpg", "sizes": "418x851", diff --git a/epicyon-profile.css b/epicyon-profile.css index 1b28d39a6..2848c2981 100644 --- a/epicyon-profile.css +++ b/epicyon-profile.css @@ -26,6 +26,8 @@ --font-size4: 22px; --font-size5: 20px; --font-size-pgp-key: 16px; + --font-size-pgp-key2: 11px; + --font-size-tox: 8px; --text-entry-foreground: #ccc; --text-entry-background: #111; --time-color: #aaa; @@ -116,11 +118,6 @@ a:link { float: right; } -.ssbaddr { - font-size: var(--font-size-pgp-key); - font-family: Arial, Helvetica, sans-serif; -} - .about { font-size: var(--font-size5); font-family: Arial, Helvetica, sans-serif; @@ -850,8 +847,15 @@ aside .toggle-inside li { } @media screen and (min-width: 400px) { + .toxaddr { + font-size: var(--font-size-tox); + font-family: Arial, Helvetica, sans-serif; + } + .ssbaddr { + font-size: var(--font-size-pgp-key); + font-family: Arial, Helvetica, sans-serif; + } .pgp { - width: 79ch; font-size: var(--font-size-pgp-key); color: var(--main-link-color); background: var(--link-bg-color); @@ -1260,9 +1264,16 @@ aside .toggle-inside li { } @media screen and (max-width: 1000px) { + .toxaddr { + font-size: var(--font-size-tox); + font-family: Arial, Helvetica, sans-serif; + } + .ssbaddr { + font-size: var(--font-size-pgp-key2); + font-family: Arial, Helvetica, sans-serif; + } .pgp { - width: 40ch; - font-size: var(--font-size-pgp-key); + font-size: var(--font-size-pgp-key2); color: var(--main-link-color); background: var(--link-bg-color); font-family: 'monospace'; diff --git a/webinterface.py b/webinterface.py index 206cca1bd..c1e7af23e 100644 --- a/webinterface.py +++ b/webinterface.py @@ -2681,7 +2681,7 @@ def htmlProfile(defaultTimeline: str, ssbAddress + '