From c515b8a5bdda977e93116952619eb929dc5c3f96 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sat, 26 Dec 2020 14:20:41 +0000 Subject: [PATCH 01/38] Try setting style --- webapp_column_right.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp_column_right.py b/webapp_column_right.py index 36e1daada..5216e241d 100644 --- a/webapp_column_right.py +++ b/webapp_column_right.py @@ -190,7 +190,7 @@ def getRightColumnContent(baseDir: str, nickname: str, domainFull: str, def getBrokenFavSubstitute() -> str: """Substitute link used if a favicon is not available """ - return " onerror=\"this.onerror=null; this.src=''\"" + return " onerror=\"this.onerror=null; this.style='width:0%'; this.src=''\"" def getFavicon(url: str) -> str: From 48fbe278494c64c33a6a67c470563db36a1b235b Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sat, 26 Dec 2020 17:03:53 +0000 Subject: [PATCH 02/38] Apply replacements within content warnings --- webapp_post.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/webapp_post.py b/webapp_post.py index 2daff3307..c297e8357 100644 --- a/webapp_post.py +++ b/webapp_post.py @@ -1506,6 +1506,8 @@ def individualPostAsHtml(allowDownloads: bool, cwContentStr = \ insertQuestion(baseDir, translate, nickname, domain, port, cwContentStr, postJsonObject, pageNumber) + cwContentStr = \ + switchWords(baseDir, nickname, domain, cwContentStr) if not isBlogPost(postJsonObject): # get the content warning button contentStr += \ From 908e6b5c84583f98d439631db58ec2f0b2b9ae74 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sun, 27 Dec 2020 14:04:48 +0000 Subject: [PATCH 03/38] Add article tags --- webapp_post.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/webapp_post.py b/webapp_post.py index c297e8357..2a1586ecd 100644 --- a/webapp_post.py +++ b/webapp_post.py @@ -1482,6 +1482,8 @@ def individualPostAsHtml(allowDownloads: bool, objectContent = \ postJsonObject['object']['content'] + objectContent = '
' + objectContent + '
' + if not postIsSensitive: contentStr = objectContent + attachmentStr contentStr = addEmbeddedElements(translate, contentStr, From f3122480d2c9693cfdc5528a16788e2028c1606e Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sun, 27 Dec 2020 15:22:14 +0000 Subject: [PATCH 04/38] Navigation markup --- webapp_column_left.py | 2 ++ webapp_column_right.py | 3 +++ 2 files changed, 5 insertions(+) diff --git a/webapp_column_left.py b/webapp_column_left.py index 6d444d839..cb2ba283e 100644 --- a/webapp_column_left.py +++ b/webapp_column_left.py @@ -171,6 +171,7 @@ def getLeftColumnContent(baseDir: str, nickname: str, domainFull: str, linksList = sharesList + linksList if linksList: + htmlStr += '\n' if firstSeparatorAdded: htmlStr += separatorStr diff --git a/webapp_column_right.py b/webapp_column_right.py index 5216e241d..c8ba14c0f 100644 --- a/webapp_column_right.py +++ b/webapp_column_right.py @@ -297,6 +297,9 @@ def _htmlNewswire(baseDir: str, newswire: {}, nickname: str, moderator: bool, totalVotesStr htmlStr += ' ' htmlStr += dateShown + '

\n' + + if htmlStr: + htmlStr = '\n' return htmlStr From 11d804bb4efb5a9921701c056a5a522beb96423d Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sun, 27 Dec 2020 16:42:03 +0000 Subject: [PATCH 05/38] Navigation markup --- webapp_headerbuttons.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/webapp_headerbuttons.py b/webapp_headerbuttons.py index 83bb68cb1..0ab548174 100644 --- a/webapp_headerbuttons.py +++ b/webapp_headerbuttons.py @@ -48,7 +48,7 @@ def headerButtonsTimeline(defaultTimeline: str, buttons for inbox, outbox, search, calendar, etc """ # start of the button header with inbox, outbox, etc - tlStr = '
\n' + tlStr = '
' # end of the button header with inbox, outbox, etc - tlStr += '
\n' + tlStr += ' \n' return tlStr From 3bc7dfb837b136ac64359dc0026b651729be20e1 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sun, 27 Dec 2020 16:57:15 +0000 Subject: [PATCH 06/38] Header markup --- webapp_column_left.py | 4 +++- webapp_column_right.py | 4 +++- webapp_create_post.py | 4 +++- webapp_search.py | 4 +++- webapp_timeline.py | 4 +++- 5 files changed, 15 insertions(+), 5 deletions(-) diff --git a/webapp_column_left.py b/webapp_column_left.py index cb2ba283e..3157d9857 100644 --- a/webapp_column_left.py +++ b/webapp_column_left.py @@ -325,11 +325,13 @@ def htmlEditLinks(cssCache: {}, translate: {}, baseDir: str, path: str, # top banner editLinksForm += \ + '
\n' + \ '\n' editLinksForm += '\n' + '/users/' + nickname + '/' + bannerFile + '" />\n' + \ + '
\n' editLinksForm += \ '
' + \ '\n' editNewswireForm += '\n' + '/users/' + nickname + '/' + bannerFile + '" />\n' + \ + '' editNewswireForm += \ '\n' + \ '\n' newPostForm += '\n' + '/users/' + nickname + '/' + bannerFile + '" />\n' + \ + '\n' mentionsStr = '' for m in mentions: diff --git a/webapp_search.py b/webapp_search.py index 13b99a6f1..e4dbcb160 100644 --- a/webapp_search.py +++ b/webapp_search.py @@ -334,11 +334,13 @@ def htmlSearch(cssCache: {}, translate: {}, if os.path.isfile(searchBannerFilename): usersPath = '/users/' + searchNickname followStr += \ + '
\n' + \ '\n' followStr += '\n' + usersPath + '/' + searchBannerFile + '" />\n' + \ + '
\n' # show the search box followStr += '' \ '
' + longDescription + '
' \ '' msg = msg.encode('utf-8') From cce7941b39f73f7fc5f48d4036f035cdfc0fddc2 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Tue, 29 Dec 2020 17:56:42 +0000 Subject: [PATCH 19/38] Only write to indexes once --- inbox.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/inbox.py b/inbox.py index a83c1fec6..dba441288 100644 --- a/inbox.py +++ b/inbox.py @@ -1979,8 +1979,9 @@ def inboxUpdateIndex(boxname: str, baseDir: str, handle: str, try: with open(indexFilename, 'r+') as indexFile: content = indexFile.read() - indexFile.seek(0, 0) - indexFile.write(destinationFilename + '\n' + content) + if destinationFilename + '\n' not in content: + indexFile.seek(0, 0) + indexFile.write(destinationFilename + '\n' + content) return True except Exception as e: print('WARN: Failed to write entry to index ' + str(e)) From adbddb95c3002c44598ad77ed5aac9eb944c593a Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Tue, 29 Dec 2020 20:22:28 +0000 Subject: [PATCH 20/38] Check before adding new entries to indexes --- bookmarks.py | 9 +++++---- follow.py | 6 ++++-- happening.py | 5 +++-- inbox.py | 5 +++-- manualapprove.py | 6 ++++-- newsdaemon.py | 7 ++++--- posts.py | 12 +++++++----- utils.py | 7 ++++--- 8 files changed, 34 insertions(+), 23 deletions(-) diff --git a/bookmarks.py b/bookmarks.py index d6f9817c0..e4a43d70d 100644 --- a/bookmarks.py +++ b/bookmarks.py @@ -204,10 +204,11 @@ def updateBookmarksCollection(recentPostsCache: {}, try: with open(bookmarksIndexFilename, 'r+') as bmIndexFile: content = bmIndexFile.read() - bmIndexFile.seek(0, 0) - bmIndexFile.write(bookmarkIndex + '\n' + content) - if debug: - print('DEBUG: bookmark added to index') + if bookmarkIndex + '\n' not in content: + bmIndexFile.seek(0, 0) + bmIndexFile.write(bookmarkIndex + '\n' + content) + if debug: + print('DEBUG: bookmark added to index') except Exception as e: print('WARN: Failed to write entry to bookmarks index ' + bookmarksIndexFilename + ' ' + str(e)) diff --git a/follow.py b/follow.py index 0c9e2598a..ca7fb1637 100644 --- a/follow.py +++ b/follow.py @@ -725,8 +725,10 @@ def receiveFollowRequest(session, baseDir: str, httpPrefix: str, try: with open(followersFilename, 'r+') as followersFile: content = followersFile.read() - followersFile.seek(0, 0) - followersFile.write(approveHandle + '\n' + content) + if approveHandle + '\n' not in content: + followersFile.seek(0, 0) + followersFile.write(approveHandle + '\n' + + content) except Exception as e: print('WARN: ' + 'Failed to write entry to followers file ' + diff --git a/happening.py b/happening.py index 137adb138..69a878747 100644 --- a/happening.py +++ b/happening.py @@ -96,8 +96,9 @@ def saveEventPost(baseDir: str, handle: str, postId: str, try: with open(tlEventsFilename, 'r+') as tlEventsFile: content = tlEventsFile.read() - tlEventsFile.seek(0, 0) - tlEventsFile.write(eventId + '\n' + content) + if eventId + '\n' not in content: + 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)) diff --git a/inbox.py b/inbox.py index dba441288..7f5a4aa3d 100644 --- a/inbox.py +++ b/inbox.py @@ -123,8 +123,9 @@ def storeHashTags(baseDir: str, nickname: str, postJsonObject: {}) -> None: try: with open(tagsFilename, 'r+') as tagsFile: content = tagsFile.read() - tagsFile.seek(0, 0) - tagsFile.write(tagline + content) + if tagline not in content: + tagsFile.seek(0, 0) + tagsFile.write(tagline + content) except Exception as e: print('WARN: Failed to write entry to tags file ' + tagsFilename + ' ' + str(e)) diff --git a/manualapprove.py b/manualapprove.py index 7c0eb9ce1..f442c8e5c 100644 --- a/manualapprove.py +++ b/manualapprove.py @@ -184,8 +184,10 @@ def manualApproveFollowRequest(session, baseDir: str, try: with open(followersFilename, 'r+') as followersFile: content = followersFile.read() - followersFile.seek(0, 0) - followersFile.write(approveHandleFull + '\n' + content) + if approveHandleFull + '\n' not in content: + followersFile.seek(0, 0) + followersFile.write(approveHandleFull + '\n' + + content) except Exception as e: print('WARN: Manual follow accept. ' + 'Failed to write entry to followers file ' + str(e)) diff --git a/newsdaemon.py b/newsdaemon.py index ff3952926..737b4ac9c 100644 --- a/newsdaemon.py +++ b/newsdaemon.py @@ -46,9 +46,10 @@ def _updateFeedsOutboxIndex(baseDir: str, domain: str, postId: str) -> None: try: with open(indexFilename, 'r+') as feedsFile: content = feedsFile.read() - feedsFile.seek(0, 0) - feedsFile.write(postId + '\n' + content) - print('DEBUG: feeds post added to index') + if postId + '\n' not in content: + feedsFile.seek(0, 0) + feedsFile.write(postId + '\n' + content) + print('DEBUG: feeds post added to index') except Exception as e: print('WARN: Failed to write entry to feeds posts index ' + indexFilename + ' ' + str(e)) diff --git a/posts.py b/posts.py index c402e883c..cd205b49b 100644 --- a/posts.py +++ b/posts.py @@ -668,8 +668,9 @@ def _updateHashtagsIndex(baseDir: str, tag: {}, newPostId: str) -> None: try: with open(tagsFilename, 'r+') as tagsFile: content = tagsFile.read() - tagsFile.seek(0, 0) - tagsFile.write(tagline+content) + if tagline not in content: + tagsFile.seek(0, 0) + tagsFile.write(tagline + content) except Exception as e: print('WARN: Failed to write entry to tags file ' + tagsFilename + ' ' + str(e)) @@ -688,9 +689,10 @@ def _addSchedulePost(baseDir: str, nickname: str, domain: str, try: with open(scheduleIndexFilename, 'r+') as scheduleFile: content = scheduleFile.read() - scheduleFile.seek(0, 0) - scheduleFile.write(indexStr + '\n' + content) - print('DEBUG: scheduled post added to index') + if indexStr + '\n' not in content: + scheduleFile.seek(0, 0) + scheduleFile.write(indexStr + '\n' + content) + print('DEBUG: scheduled post added to index') except Exception as e: print('WARN: Failed to write entry to scheduled posts index ' + scheduleIndexFilename + ' ' + str(e)) diff --git a/utils.py b/utils.py index 2bdcbff74..99d8a8637 100644 --- a/utils.py +++ b/utils.py @@ -708,9 +708,10 @@ def followPerson(baseDir: str, nickname: str, domain: str, try: with open(filename, 'r+') as f: content = f.read() - f.seek(0, 0) - f.write(handleToFollow + '\n' + content) - print('DEBUG: follow added') + if handleToFollow + '\n' not in content: + f.seek(0, 0) + f.write(handleToFollow + '\n' + content) + print('DEBUG: follow added') except Exception as e: print('WARN: Failed to write entry to follow file ' + filename + ' ' + str(e)) From 7c177ad0357dff89fa3637008901e34a80908ef6 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Tue, 29 Dec 2020 21:00:12 +0000 Subject: [PATCH 21/38] Update categories --- defaultcategories/en.xml | 362 +++++++++++++++++++++------------------ 1 file changed, 193 insertions(+), 169 deletions(-) diff --git a/defaultcategories/en.xml b/defaultcategories/en.xml index 73b4ca9c3..71ae3dba1 100644 --- a/defaultcategories/en.xml +++ b/defaultcategories/en.xml @@ -6,499 +6,523 @@ sport billiard darts swim motorsport snooker marathon hockey diving baseball Millwall sailing athletics skating skiing sport football - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT events - neverforget award OONIbday waybackwednesday notifications throwbackthursday adventskalender live Day deepthoughts thursdaythoughts humanrightsday followfriday wednesdaymotivation showerthoughts anarchymonday 100DaysToOffload ff holiday christmas week concert festival dontstarve onthisday livestream sunday screenshotsunday liverpool adayinthelife day InternationalCheetahDay interestingtimes meetup + neverforget award OONIbday waybackwednesday notifications throwbackthursday adventskalender live Day deepthoughts screenshotsaturday thursdaythoughts humanrightsday followfriday afediversechristmas wednesdaymotivation showerthoughts anarchymonday 100DaysToOffload ff holiday christmas week concert festival screenshottuesday dontstarve onthisday livestream sunday screenshotsunday liverpool adayinthelife day ccc InternationalCheetahDay interestingtimes christmaslights meetup - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT gafam - zuckerberg caringissharing apple antitrust GoogleDown bankruptBezos youtube ffs facebook interoperability amazon boycottinstagram amazonring googleplus degooglisation Facebook LeiharbeitAbschaffen advertising adtech fuckgoogle microsoft dtm twitter caffeine skype chrome hildebrandt youtubedl degoogled youtubers google sharingiscaring gis dt dotcoms deleteyoutube Instagram fascistbook FuckGoogle degoogle fuschia ungoogled ring affordances googledown gafam inspiring fuckoffgoogle deletefacebook office365 instagram MatrixEffect playstore bigtech + zuckerberg caringissharing ads apple antitrust SpringerEnteignen GoogleDown AppleSearch bankruptBezos youtube ffs facebook interoperability amazon boycottinstagram amazonring googleplus degooglisation siri Facebook LeiharbeitAbschaffen advertising adtech fuckgoogle microsoft dtm twitter caffeine skype chrome hildebrandt youtubedl degoogled youtubers google sharingiscaring gis dt dotcoms deleteyoutube Instagram fascistbook FuckGoogle degoogle fuschia ungoogled ring affordances googledown gafam inspiring fuckoffgoogle deletefacebook fuckoffgoogleandco office365 instagram MatrixEffect playstore bigtech - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT activitypub - followerpower Fediverse activitypub pleroma PeerTube webdev fediblock lazyfedi federation instances fedilab mastotips mastodev friendica misskey siskin followers fediart Pixelfed pixelfed fediverseplaysjackbox fedidb block Fediseminar monal tusky peertubers imagedescription feditips fedizens Mastodon following epicyon mastomagic dev fediadmin pixeldev instanceblock mastodonmonday isolategab fedireads PeertubeMastodonHost Bookwyrm socialhome MastodonMondays fediverse smithereen mastodon fedi fediplay peertube lab mobilizon gemifedi + followerpower FederatedSocialMedia Fediverse activitypub activertypub pleroma losttoot PeerTube gofed fediblock lazyfedi federation instances fedilab pixiv mastotips mastodev mastotip friendica hiveway misskey siskin followers fediart Pixelfed contentwarnings pixelfed fediverseplaysjackbox fedidb block FediMemories Feditip Fediseminar onlyfedi socialcg monal tusky peertubers imagedescription feditips fedizens Mastodon following epicyon peertubeadmin mastomagic dev fediadmin pixeldev fosstodon instanceblock mastodonmonday isolategab fedireads PeertubeMastodonHost Bookwyrm federated socialhome fedivers MastodonMondays fediverse imagedescriptions mastoadmin smithereen mastodon fedi fediplay peertube lab mobilizon gemifedi - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT programming - Easer cpp report programming css tootfic objects Python FrancisBacon2020 mixers release ada schutzstreifen rustlang ocaml program request_reaction uptronics solidarity hypocritcal profiles typescript forums publiccode FreeSoftware vieprivée early adventofcode scripting warn spyware git trevornoah zinccoop daretocare fedidev c sourcecode publiekecode misc framaforms WendyLPatrick grep django gmic sackthelot relevance_P1Y kingparrot Leiharbeit programmer haskell Tarifvertrag frgmntscnr github openrc tuskydev threema algorithms lisp forge pleaseshare HirsuteHippo resnetting fourtwenty libraries drivers javascript fragment cpm code elisp patterns html terminal rust sauerkraut request spiritbomb r dramasystem documentary clojurescript ruby contractpatch computers racket relationships python kabelfernsehen alternatives OpenSource Scheibenwischer + Easer cpp report programming css objects Python FrancisBacon2020 mixers webdev gui release ada schutzstreifen rustlang ocaml program request_reaction uptronics solidarity hypocritcal profiles typescript forums vscode publiccode FreeSoftware vieprivée early adventofcode scripting warn spyware git solid trevornoah zinccoop tailwindcss raku fedidev c sourcecode publiekecode misc framaforms WendyLPatrick grep django gmic sackthelot gitportal relevance_P1Y kingparrot Leiharbeit programmer haskell Tarifvertrag unicode frgmntscnr github digitalmarketsact openrc tuskydev threema algorithms lisp forge pleaseshare HirsuteHippo resnetting fourtwenty libraries drivers freecode javascript fragment cpm code elisp patterns html terminal rust sauerkraut request spiritbomb r dramasystem go esbuild documentary golang clojurescript ruby contractpatch computers racket python indiedev kabelfernsehen alternatives OpenSource Scheibenwischer - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT + + + nature + hiking wat StormBella morning trees light birds nature frogs sunrise coldwater inaturalist forest morningcrew australianwildlife capybara natur amphibians + + Tue, 29 Dec 2020 20:59:38 UT writing - blog authors poem smallstories blogs interactivestorytelling WriteFreely storytelling goodreads journal poetry + blog tootfic authors poem magazine smallstories blogging smallpoems blogs interactivestorytelling WriteFreely storytelling goodreads creativewriting journal poetry - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT hardware - plugandplay PersonalComputer cyberdeck PineCUBE keyboards screenless modem analogcomputing TrueDelta keyboard printmaker cybredeck laptop solarpunk recycling lenovo fairelectronics fuse ibm 3dprinting MechcanicalKeyboards openhardware raspberrypi barcode pinetime pinebookpro PinebookPro 3dprint arm paperComputer amd openpower thinkpad print + plugandplay PersonalComputer cyberdeck PineCUBE keyboards screenless modem analogcomputing TrueDelta keyboard ArmWorkstation daretocare printmaker cybredeck laptop solarpunk recycling lenovo fairelectronics fuse ibm 3dprinting MechcanicalKeyboards openhardware raspberrypi barcode pinetime pinebookpro PinebookPro 3dprint arm paperComputer amd openpower devopa thinkpad print electronic - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT places - lapaz luanda asunción nouakchott conakry kyiv moscow saipan gibraltar dublin dannibleibt avarua hargeisa delhi niamey chișinău colombo brasília phnompenh mbabane belgrade belmopan pyongyang hannover ulaanbaatar oranjestad gaborone seattle ndjamena raw singapore kingedwardpoint abidjan nuuk pretoria papeete malé zagreb gitega abudhabi flyingfishcove castries georgetown hagåtña borikua basseterre hamburg kinshasa suva valparaíso athens roseau baku charlotteamalie antananarivo domi pristina santiago sukhumi berlin uptronicsberlin funafuti libreville hanoi philipsburg tehran banjul prague andorralavella daw yerevan portauprince dakar paramaribo tifariti capetown tirana klima ankara ipswich managua lisbon bishkek amsterdam portonovo santodomingo bangkok bucharest kathmandu aden madrid sanjuan vienna kingston kabul damascus stockholm douglas willemstad thehague panamacity beirut amman newdelhi tórshavn nouméa oslo alofi gustavia paris video cockburntown ottawa stepanakert portofspain fsberlin honiara asmara florida nicosia helsinki taipei tegucigalpa tokyo tashkent larochelle MadeInEU sarajevo algiers nairobi muscat monaco riyadh lusaka wellington bissau juba mariehamn majuro buenosaires ngerulmud dhaka guatemalacity washington vatican kuwaitcity bern mexicocity bratislava bridgetown delhipolice tunis manila stanley matautu copenhagen barcelona lomé budapest ouagadougou mogadishu freetown victoria brazzaville portmoresby ashgabat kampala elaaiún vilnius bloemfontein sucre london marseille pagopago bradesestate oakland vaduz addis nürnberg naypyidaw CassetteNavigation khartoum baghdad bandar moroni lehavre portvila kingstown ChrisCrawford reykjavík manama accra windhoek nukualofa ciutatvella tbilisi canberra quito maputo cetinje putrajaya ramallah bogotá dodoma harare havana warsaw münster valletta localberlin ljubljana bamako kualalumpur podgorica rabat cotonou plymouth seoul Portland dushanbe bangui aotearoa westisland tskhinvali palikir caracas jamestown rome munich ass freestuffberlin sãotomé jakarta daressalaam sansalvador apia essex yaren cairo jerusalem brussels kigali southtarawa beijing minsk montevideo vientiane maseru hamilton doha tripoli celtic portlouis lima adamstown abuja lilongwe nassau lobamba heathrow nyc montreal dili riga lesbos monrovia nursultan gab sanjosé marigot islamabad malabo tallinn sahara thimphu yaoundé praia bujumbura sofia skopje + lapaz luanda asunción nouakchott conakry kyiv moscow saipan gibraltar dublin catalunya dannibleibt avarua hargeisa delhi niamey chișinău colombo brasília phnompenh mbabane belgrade belmopan pyongyang hannover ulaanbaatar oranjestad gaborone seattle ndjamena raw singapore kingedwardpoint abidjan nuuk pretoria papeete malé zagreb gitega abudhabi flyingfishcove castries georgetown hagåtña borikua basseterre hamburg kinshasa suva valparaíso athens roseau baku charlotteamalie antananarivo domi pristina santiago sukhumi berlin uptronicsberlin funafuti libreville hanoi philipsburg tehran banjul prague andorralavella daw yerevan portauprince dakar paramaribo tifariti capetown tirana klima ankara ipswich managua lisbon bishkek amsterdam portonovo santodomingo bangkok bucharest kathmandu aden madrid sanjuan vienna kingston kabul damascus stockholm douglas willemstad thehague panamacity beirut amman newdelhi tórshavn nouméa oslo alofi gustavia paris video cockburntown ottawa stepanakert portofspain fsberlin honiara asmara florida nicosia helsinki taipei tegucigalpa tokyo tashkent larochelle MadeInEU sarajevo algiers nairobi muscat monaco riyadh lusaka wellington bissau juba mariehamn majuro buenosaires ngerulmud dhaka guatemalacity washington vatican kuwaitcity londonboaters bern mexicocity bratislava bridgetown delhipolice tunis manila stanley matautu copenhagen barcelona lomé budapest ouagadougou mogadishu freetown victoria brazzaville portmoresby ashgabat kampala elaaiún vilnius bloemfontein sucre london marseille pagopago bradesestate oakland vaduz addis nürnberg naypyidaw CassetteNavigation khartoum baghdad bandar moroni lehavre portvila kingstown ChrisCrawford reykjavík manama accra windhoek nukualofa ciutatvella tbilisi canberra quito maputo cetinje putrajaya ramallah bogotá dodoma harare havana warsaw münster valletta localberlin ljubljana bamako kualalumpur podgorica rabat cotonou plymouth seoul Portland dushanbe bangui aotearoa westisland tskhinvali palikir caracas jamestown rome munich ass freestuffberlin sãotomé jakarta daressalaam sansalvador apia essex yaren cairo jerusalem brussels kigali southtarawa beijing minsk montevideo vientiane maseru hamilton doha tripoli celtic portlouis lima adamstown deventer abuja lilongwe nassau lobamba heathrow nyc strawberry montreal dili riga assembly lesbos monrovia nursultan gab sanjosé marigot islamabad malabo tallinn sahara thimphu yaoundé praia bujumbura sofia skopje - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT music - musicprodution punk ourbeats indiemusic streetpunk bandcamp musicians jamendo ipod skinheadmusic rap mp3 Music EnvoieStopHashtagAu81212 thecure vaporwave dubstep synthwave oi rave freemusic nowplaying hiphop experimentalmusic fedimusic soundcloud frankiegoestohollywood dj newwave dorkwave producing musicproduction funkwhale NowPlaying libremusicproduction MusicAdvent coinkydink fedivers arianagrande synth music metal fediversemusic cyberpunkmusic BandcampFriday + musicprodution punk ourbeats indiemusic streetpunk bandcamp musicians jamendo ipod skinheadmusic rap mp3 indie Music EnvoieStopHashtagAu81212 thecure vaporwave dubstep synthwave oi rave freemusic nowplaying hiphop experimentalmusic fedimusic soundcloud frankiegoestohollywood dj newwave dorkwave producing musicproduction funkwhale retrosynth NowPlaying libremusicproduction MusicAdvent coinkydink arianagrande synth music darkwave metal fediversemusic cyberpunkmusic BandcampFriday - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT politics - TakeOurPowerBack cia community wageslavery immigration dissent liberation fascism techtuesday skyofmywindow freedomofspeech rojava humanrights leftists Socialism ukpol FreeKeithLamar copwatch capitalismkills petition BorisJohnson freedom abolitionnow anarchism DefundThePolice technews smalltech oilwars bjp ThirdRunway election sky_of_my_window generalstrike antipolitics digitalfreedom mayday hatespeech fascists lowtech burntheprisons cyberlaw peerproduction corporations iww commons corporatewatch wageslave frontex communism RemoveThePolice neoliberalism socialecology MutualAid capitalism technology prisons conspiracytheories KeirStarmer politics inclusivity anarchisme nzpol Bookchin ClemencyNow brexit totalitarianism TyskySour Labour green BAME decolonizeyourmind surfaceworldblows ecofascism SocietalChange facialrecognition anarchy propaganda decolonization digitalrights polizei xp 18Source redandanarchistskinheads PritiPatel latestagecapitalism racist elections RussellMaroonShoatz white prisoners warrants policebrutality borisjohnson Anarchist press mutuality whitehouse freedomofexpression censorship decolonize decenterwhiteness Biden ChineseAppBan cooperative modi law deathtoamerica manipulation britpol Capitalism surveillancecapitalism leftist Revolution ukpolitics blacklivesmatter FreeAlabamaMovement rentstrike dsa techno migration mutualaid multipleexposure AbolishPrison fascist socialcoop anarchistprisoners polizeiproblem uselection IDPol Slavetrade ourstreets refugees acab freewestpapua tech + TakeOurPowerBack cia community wageslavery immigration dissent liberation fascism techtuesday skyofmywindow freedomofspeech rojava humanrights leftists Socialism ukpol FreeKeithLamar copwatch capitalismkills petition BorisJohnson freedom abolitionnow anarchism DefundThePolice technews smalltech oilwars kommunismus bjp ThirdRunway hierarchy election sky_of_my_window generalstrike antipolitics digitalfreedom mayday hatespeech fascists lowtech a11y burntheprisons cyberlaw peerproduction corporations iww commons corporatewatch wageslave uspol frontex communism RemoveThePolice Immigration neoliberalism socialecology MutualAid capitalism technology prisons wealth conspiracytheories corporatecrime communist KeirStarmer anarchismus politics inclusivity brightgreen anarchisme DominicCummings nzpol Bookchin ClemencyNow brexit totalitarianism privatisation TyskySour Labour freethemall green BAME decolonizeyourmind privilege AbolishPrisonsAbolishPolice surfaceworldblows ecofascism SocietalChange facialrecognition corruption anarchy propaganda decolonization digitalrights feminism polizei neo xp 18Source radicaltech redandanarchistskinheads PritiPatel latestagecapitalism racist MexicanRevolution elections RussellMaroonShoatz white prisoners warrants policebrutality borisjohnson Anarchist press mutuality whitehouse freedomofexpression censorship decolonize emmet decenterwhiteness Biden ChineseAppBan cooperative modi law deathtoamerica manipulation firetotheprisons britpol Capitalism surveillancecapitalism leftist Revolution ukpolitics JeremyCorbyn blacklivesmatter FreeAlabamaMovement rentstrike dsa techno migration mutualaid multipleexposure AbolishPrison fascist socialcoop anarchistprisoners polizeiproblem uselection IDPol Slavetrade met ourstreets refugees acab freewestpapua tech - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT food - vitamind cake margarine dessert salsa caviar theexpanse cookery pietons food skillet liquor milk bolognese recipe foodporn yeast plate waffle biscuit glaze omelette filet pastry wine hamburger juice Amazfish sourdough nuts gras toast broth batter foodie ketchup seasoning mayo soup pan voc teamcapy mayonnaise vegan dish avocado spice bakery cooking yogurt spotify crumble cider butter cook pottery cobbler steak pizza soda fedikitchen aroma oil flour cream nutella pie cuisine tartar tea marinade mushroom entree bread salad beans fresh syrup fermentation mushrooms cookie curd soysauce pudding beer baking fish foodwaste wheat pot TeamFerment stew chocolate paste wok recipes olive burger candy kitchen coffee bagel taste meat noodle raclette caramel rice eggs grill poutine lard croissant pasta foods cheese oregano drink muffin foie sauce soy vore cocoa sandwich mousse chili vinegar + vitamind cake margarine dessert salsa caviar theexpanse cookery pietons food skillet liquor milk bolognese recipe foodporn yeast plate waffle biscuit glaze omelette filet pastry wine hamburger juice Amazfish sourdough nuts gras toast broth batter foodie ketchup seasoning mayo soup pan voc imateapot teamcapy mayonnaise vegan dish avocado spice bakery cooking yogurt spotify crumble cider butter cook pottery cobbler steak pizza soda fedikitchen aroma oil flour cream nutella pie cuisine tartar tea marinade mushroom entree bread salad beans fresh syrup fermentation mushrooms cookie curd soysauce pudding beer baking fish foodwaste wheat pot TeamFerment stew chocolate paste wok recipes olive burger candy kitchen coffee bagel taste meat noodle raclette caramel rice eggs grill poutine lard croissant pasta foods cheese oregano drink muffin foie sauce soy vore cocoa sandwich mousse chili vinegar - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT farming johndeere - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT countries - romania burma lithuania solomon chile Instanz opensuse fiji tajikistan benin paraguay eeuu senegal ukraine italy brunei nicaragua guyana Pflanzenbestimmung euphoria zambia iceland morocco netherlands swaziland bosnian solo suriname elsalvador russia samoa european czech belarus hayabusa2 kyrgyzstan uk abuse translation sanmarino catalonia panama japan buyused venezuela gambia freeNukem kuwait barbados papua greece switzerland uae nigeria usa angola honduras djibouti laos sierraleone cambodia ych vietnam dust3d neofeud seychelles marshall kazakhstan estonia tonga stlucia burundi bangladesh egypt mali congo us jordan speedrun grenada israel algeria ghana bosnia russian industrial eritrea bhutan hungary saudi slovenia uspol tig bahamas australia kiribati togo koreanorth poland malawi capeverde run armenia american hautrauswasgeht bahrain mozambique beleuchtung southsudan syria micronesia maldives iran indigenous sweden ethiopia cuba liberia canada burkina somalia Chile scotland vaticancity easttimor austria turkey yemen Bolivia denmark trunk madagascar finland philippines ivorycoast haiti ecuador Portugal azerbaijan gasuk spain albania afghanistan europe mauritania dominica thailand belize westpapuauprising macedonia illustration montenegro qatar mongolia costarica boatingeurope birdsofkenya latvia uzbekistan ireland iraq malaysia mexico mauritius oman chad nz georgia zimbabwe france serbia lesotho oddmuse tunisia argentina cameroon namibia sudan indonesia colombia tuvalu beckychambers turkmenistan tanzania germany neuhier norway comoros auteursrecht guatemala kosovo andorra wales servus pakistan belgium china antigua life koreasouth newzealand einzelfall rwanda luxembourg libya italyisntreal nauru Anarchismus moldova palau taiwan kenya trinidad eu botswana CuriosidadesVariadas jamaica vanuatu cyprus aminus3 malta niger westpapua busse unitedstates myanmar saintvincent guinea nepal peru uganda uruguay india lebanon neurodiversity southafrica croatia europeanunion bolivia chinese dominican srilanka bulgaria slovakia speedrunning gabon stkitts liechtenstein brazil shutdowncanada + romania burma lithuania solomon chile Instanz fiji tajikistan benin paraguay eeuu senegal ukraine italy brunei nicaragua guyana Pflanzenbestimmung euphoria zambia iceland morocco netherlands swaziland bosnian solo suriname elsalvador russia samoa european czech belarus hayabusa2 kyrgyzstan uk abuse translation sanmarino catalonia panama japan buyused venezuela gambia freeNukem kuwait barbados papua greece switzerland uae nigeria usa angola honduras djibouti laos sierraleone cambodia ych vietnam neofeud seychelles marshall kazakhstan estonia tonga stlucia burundi bangladesh egypt mali congo us jordan speedrun grenada israel algeria ghana bosnia russian industrial eritrea bhutan hungary saudi slovenia tig bahamas australia kiribati togo koreanorth poland malawi capeverde run armenia american hautrauswasgeht bahrain mozambique beleuchtung southsudan syria micronesia maldives iran indigenous sweden ethiopia cuba liberia canada burkina somalia Chile scotland aur vaticancity easttimor austria turkey yemen Bolivia denmark trunk madagascar finland philippines ivorycoast haiti ecuador Portugal azerbaijan gasuk spain albania afghanistan europe mauritania dominica thailand belize westpapuauprising macedonia montenegro qatar mongolia costarica boatingeurope birdsofkenya latvia uzbekistan kabelaufklärung ireland iraq malaysia mexico mauritius oman chad nz georgia zimbabwe france serbia lesotho oddmuse tunisia argentina cameroon namibia sudan indonesia colombia tuvalu britainology beckychambers turkmenistan tanzania germany neuhier norway comoros auteursrecht guatemala Thailand kosovo andorra wales servus pakistan belgium china antigua life koreasouth newzealand einzelfall rwanda luxembourg libya italyisntreal nauru Anarchismus moldova palau taiwan kenya trinidad eu botswana CuriosidadesVariadas jamaica vanuatu cyprus aminus3 malta niger westpapua busse unitedstates myanmar saintvincent guinea nepal peru uganda uruguay india lebanon neurodiversity southafrica croatia europeanunion bolivia chinese dominican srilanka bulgaria slovakia speedrunning gabon psychedelicart stkitts liechtenstein brazil shutdowncanada - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT cycling - bicycle cycling bike Snowbike + bicycle cycling bike thingsonbikes Snowbike cyclist - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT phones - mobileapp pine fdroid plasmamobile android smartphone iOS14 BriarProject pinephone mobile fairphone ubuntutouch Android ubports osmand vodafone iphones postmarketos iOS microg mobileKüfA + mobileapp pine fdroid plasmamobile android phones smartphone iOS14 linuxphones QWERTYphones BriarProject librem5 pinephone mobile fairphone ubuntutouch Android ubports osmand vodafone iphones postmarketos iOS microg mobileKüfA - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT science - math womeninstem supercollider nextgeneration archaeologist dawkins graphTheory psychology biology gene paleontology + math womeninstem supercollider nextgeneration dna archaeologist dawkins graphTheory psychology biology generation gene paleontology - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT pandemic - covid19 corona Coronavirus CoronaWarnApp facemasks vaccines vaccine pandemic contacttracing covid coronavirus virus Lockdown codid19 COVID19 YesWeWork ContactTracing COVID + covid19 corona Coronavirus CoronaWarnApp facemasks vaccines vaccine pandemic contacttracing tier4 covid coronavirus masks virus Lockdown rna codid19 COVID19 YesWeWork ContactTracing COVID - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT software - app freedombox windows libre nginx Framasoft invidious drm publicdomain kubernetes fossmendations jami FuckOffZoom quicksy free docker freesoftware gimp foss matrix nextcloud wechat openscad TabOrder ikiwiki Linux rocketchat outreachy lyft nitter discord opensource diaspora yunohost littlebigdetails cabal conferencing accessibility devops owncast emacs freiesoftware email chatapps floss plugins deltachat application uifail FOSS bittorrent zoom gpl FriendofGNOME usability obnam snap cryptpad software OwnStream zrythm mumble grsync containers irssi mutt design gameoftrees backup rotonde GNU thunderbird apps licensing profanity ffmpeg lemmy OSM win10 jitsi wordpress ux rsync libreoffice dino plugin OCUPACAOCARLOSMARIGHELLA whatsapp openoffice + app freedombox windows libre nginx Framasoft invidious drm publicdomain kubernetes fossmendations jami FuckOffZoom quicksy free docker freesoftware gimp foss matrix thefreethoughtproject nextcloud wechat openscad TabOrder ikiwiki Linux rocketchat outreachy lyft nitter discord opensource diaspora yunohost littlebigdetails cabal conferencing libreboot accessibility devops owncast emacs freiesoftware email chatapps floss plugins deltachat application uifail FOSS bittorrent vlc zoom tiling gpl FriendofGNOME usability obnam snap cryptpad software OwnStream zrythm mumble grsync telegram containers blockchain irssi mutt design gameoftrees backup rotonde GNU thunderbird sysadmin apps licensing screenreaders profanity ffmpeg lemmy OSM distributedledger win10 element nativeApp jitsi wordpress ux rsync libreoffice dino plugin OCUPACAOCARLOSMARIGHELLA whatsapp openoffice - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT security - encrypt password history cryptography solarwinds infosec gchq IHaveSomethingToHide IronySec cryptowars supplychainattacks UseAMaskUseTor cyberattack security tor e2e bruceschneier vpn openssh openssl e2ee ed25519 encryption ssh crypto giftofencryption malware opsec keepass torsocks nsa protonvpn yubikey nitrokey openpgp castor9 gpgtools gpg cybersecurity CryptoWars signal noscript np trust openvpn datasecurity tracking cloudflare + encrypt omemo password cryptography solarwinds communityalgorithmictrust infosec gchq IHaveSomethingToHide IronySec cryptowars supplychainattacks UseAMaskUseTor cyberattack security tor e2e bruceschneier vpn openssh openssl e2ee ed25519 encryption ssh misshaialert crypto giftofencryption malware opsec keepass torsocks nsa protonvpn yubikey nitrokey openpgp castor9 gpgtools gpg fotopiastory cybersecurity CryptoWars signal noscript np trust cryptocurrency cryptomator openvpn datasecurity tracking cloudflare - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT gardening - sporespondence blockade inde independant deno cabbage bundeswehr onions bordeaux datenschleuder florespondence thyme DailyFlowers permaculture papuamerdeka flowers gardening de federated devilslettuce fahrräder golden + sporespondence blockade inde independant deno cabbage bundeswehr onions bordeaux datenschleuder florespondence garden thyme DailyFlowers permaculture papuamerdeka flowers gardening de devilslettuce fahrräder golden - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT conferences - debconf talk fossdem FreedomBoxSummit schmoocon summit confidenceTricks minidebconf emacsconf ox defcon flossevent conf rC3 conference flossconf apconf C3 config + debconf talk fossdem FreedomBoxSummit apconf2020 schmoocon summit confidenceTricks minidebconf rc3worldleaks emacsconf ox defcon flossevent conf rC3 rC3World conference flossconf apconf rC3one C3 config - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT cats - Cat dailycatpic dxp DailyCatVid CatsOfMastodon Leopard catbellies + Cat dailycatpic dxp DailyCatVid katze CatsOfMastodon Leopard catbellies LapCats - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT employment - InterviewQuestions reproductivework bullshitjobs antiwork worklog hire hirefedi work letthenetwork jobs + InterviewQuestions mywork reproductivework bullshitjobs antiwork kreaturworks worklog hire hirefedi carework nowhiring work letthenetwork jobs - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT linux - osdev linuxisnotanos elementaryos cli kde Debian11 slackware mobian openwrt distros DebianBullseye shareyourdesktop wireguard linuxaudio gtk debian trisquel gnome linuxposting showyourdesktop ubuntu xubuntu unix fedora centos gentoo usergroup systemd linuxgaming Debian distro destinationlinux qubesos i3wm haiku linuxisnotaplatform linux netbsd termux btrfs reproduciblebuilds artix gtk4 archlinux rhel debianinstaller linuxisajoke + osdev opensuse linuxisnotanos elementaryos cli kde Debian11 slackware mobian openwrt distros nixos nix DebianBullseye shareyourdesktop wireguard linuxaudio nixpkgs gtk debian trisquel gnome linuxposting showyourdesktop windowmanager desktop ubuntu xubuntu unix fedora centos gentoo usergroup systemd linuxgaming Debian distro destinationlinux qubesos i3wm haiku linuxisnotaplatform linux EMMS netbsd termux btrfs reproduciblebuilds artix gtk4 archlinux rhel debianinstaller linuxisajoke - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT photos - nikon photography photo tokyocameraclub photos photoshop camera picture streetphotography + nikon photography photo photogrpahy tokyocameraclub photos photoshop camera myphoto picture streetphotography - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT crafts - topic_imadethis upholstery hackerspaces sanding sundiy knitting hack biohacking wip jewelry diy upcycling woodworking origami makers quilting quilt 3dmodel woodwork ceramics + topic_imadethis textile upholstery dust3d hackers hackerspaces sanding sundiy knitting hack biohacking wip jewelry diy upcycling woodworking origami makers quilting hacker quilt 3dmodel woodwork ceramics embroidery - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT pets - catpics catalunya catofmastodon mastodogs catbehaviour dogsofmastodon gentrification cats kittens pet dog caturday catsofmastodon cute dogs mastocats cat catcontent + catpics catofmastodon mastodogs catbehaviour Coolcats dogsofmastodon gentrification cats kittens pet dog caturday catsofmastodon cute catstodon dogs mastocats cat catcontent - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT news - news Wikileaks newsletter doubledownnews journalism SkyNews + news Wikileaks newsletter rt bbc doubledownnews journalism SkyNews - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT games - minecraft tetris99 TerraNil boardgames gamedesign chess nintendoswitch mud game 0ad ttrpg gamedev guildwars2 TetrisGore gaming Gamesphere rpg tetris dosgaming DnD cyber2077 cyberpunk2077 FreeNukum neopets minetest guildwars dnd + minecraft tetris99 TerraNil runequest boardgames computergames gamedesign chess nintendoswitch mud indiegame game 0ad ttrpg gamedev guildwars2 TetrisGore gaming nintendo Gamesphere rpg tetris dosgaming DnD cyber2077 cyberpunk2077 FreeNukum neopets minetest guildwars dnd games - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT + + + climate + energy renewables clouds renewableenergy amp climateemergency climate windenergy coal globalwarming climatechange weather climatecamp windpower science fossilfuels sky climatescience climatecrisis + + Tue, 29 Dec 2020 20:59:38 UT + + + internet + i2p spam firefox redecentralize wikipedia rtmp decentralization decentralize w3c torrent data sitejs internetarchaeology WordPress self contentmoderation distributed router dataretention selfhosting communityhosting icann discourse PeerToPeer dns openstandards nojs oauth hypercore CDNsAreEvil protonmail standards yourdataisyourdata internetfreedom gemini webui SmallWeb xmpp semanticweb socialnetwork content ntp socialnetworks proton icmp videocast jabber decentralized wiki ssb darknet cookies darkweb netcat Reddit server browser cloudy p2p social antisocial www ilovewikipedia web WebsiteStatus twitch 9front theserverroom socialmedia domain rss ipns mozilla voicemail mail i2pd ipfs internetradio browsers decentralizeit netscape openculture cyberspace offthegrid cloud internet decentralisation internetarchive js dark openweb onlineharms dot ftp internetshutdowns fixtheweb socialweb + + Tue, 29 Dec 2020 20:59:38 UT retro - A500 atarist commodore teletext floppy 8bit atari trs80 floppydisk retrocomputing C64 plan9 80s microcomputing omm retrogaming z80 8bitdo retro amiga bbcmicro microcomputer bbsing + A500 atarist commodore teletext floppy 8bit atari trs80 floppydisk retrocomputing C64 plan9 80s microcomputing omm retrogaming z80 8bitdo retro commissions amiga bbcmicro microcomputer bbsing - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT indymedia - visionontv indymediaback pga indymedia omn tv 4opens openmedianetwork + visionontv globleIMC indymediaback pga indymedia hs2IMC indymediaIMC network roadsIMC omn tv roadstonowhereIMC UKIMC 4opens openmedianetwork - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT + + + media + livestreaming mainstreaming stream streaming weAreAllCrazy maiabeyrouti submedia theatlantic traditionalmedia videos railroads taina ai realmedia media + + Tue, 29 Dec 2020 20:59:38 UT activism - protestor grassroot g20 riseup sflc DanniVive reuse fsfe softwarefreedom ann activist xr directaction eff openrightsgroup protest actiondirecte kroymann HS2 ngo MarcWittmann fsf StopHS2 grassroots BLM changeisinyourhands conservancy JefferySaunders XR freeolabini announcement isolateByoblu annieleonard + protestor grassroot g20 riseup sflc DanniVive reuse fsfe softwarefreedom ann activist xr directaction eff openrightsgroup protest JeffreySDukes actiondirecte kroymann HS2 ngo MarcWittmann fsf StopHS2 grassroots BLM changeisinyourhands conservancy JefferySaunders Kolektiva XR freeolabini announcement isolateByoblu annieleonard - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT questions askmastodon askfedi question askmasto askfediverse ask askfosstodon - Tue, 22 Dec 2020 09:45:58 UT - - - internet - spam firefox redecentralize wikipedia rtmp decentralization decentralize w3c torrent data sitejs internetarchaeology WordPress self router dataretention selfhosting icann discourse PeerToPeer dns openstandards nojs oauth CDNsAreEvil protonmail standards yourdataisyourdata gemini SmallWeb xmpp semanticweb socialnetwork ntp socialnetworks proton icmp videocast jabber decentralized wiki ssb darknet cookies darkweb netcat server browser cloudy p2p social www ilovewikipedia web WebsiteStatus twitch socialmedia domain rss ipns mozilla voicemail mail ipfs browsers decentralizeit openculture cyberspace offthegrid cloud internet decentralisation internetarchive js dark openweb onlineharms dot ftp internetshutdowns fixtheweb socialweb - - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT birds RainbowBeeEater bird - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT ethics digitalethics ethics ethicallicense ethical - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT + + + disability + ableism disabled + + Tue, 29 Dec 2020 20:59:38 UT economics - theWorkshop WealthConcentration funding shop startups HenryGeorge crowdfunding micropatronage monetize smallbusiness GitPay + bitcoin theWorkshop feministeconomics WealthConcentration valuesovereignty funding value shop crowdfund startups HenryGeorge crowdfunding limitstogrowth micropatronage monetize smallbusiness GitPay gdp limits - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT + + + art + Linke urban glassart artvsartist2020 watercolor autisticartist barrigòtic art open krita urbanart queerart deviantart adultcolouring collage harmreductionart wallpaper streetart coverart fiberart MastoArt culture polArt ink painting opencoop digitalart comic artwork openbsd mandala xkcd comics santa mastoart illustration artopencall gnuimagemanipulationprogram os wireart cartoon webcomic furryart sticker artbreeder arttherapy TattoosOfTheFediverse artvsartist sculpture artist meme cultureshipnames concretepoetry artwithopensource opencallforartists commissionsopen peppertop blackartist zines zine furry opencollective JuliaHartleyBrewer artistsOfMastodon + + Tue, 29 Dec 2020 20:59:38 UT podcasts - podcasting IntergalacticWasabiHour podcast tilde til tilderadio podcasts smallisbeautiful tilvids + podcasting IntergalacticWasabiHour podcast tilde til tilderadio podcasts tildeverse smallisbeautiful tilvids - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT years Year2020 year 1yrago 5yrsago - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT + + + culture + etiquette + + Tue, 29 Dec 2020 20:59:38 UT identity boomer - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT political copservation linguisticProgramming - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT fashion - brasil fashionistas fashionesta bras fashion patches + brasil fashionistas fashionesta bras fashion socks patches - Tue, 22 Dec 2020 09:45:58 UT - - - art - urban glassart artvsartist2020 watercolor autisticartist barrigòtic art krita urbanart queerart deviantart adultcolouring collage streetart coverart MastoArt culture polArt ink painting digitalart comic artwork mandala xkcd comics santa mastoart gnuimagemanipulationprogram wireart cartoon webcomic furryart sticker artbreeder arttherapy TattoosOfTheFediverse artvsartist sculpture artist meme concretepoetry artwithopensource peppertop blackartist zine furry JuliaHartleyBrewer - - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT month april july march october november august june december september may feburary january month - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT funding disabledcrowdfund patreon - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT books - justhollythings earthsea ebooks book amreading bookreview theLibrary wayfarers books ebook epub cookbook + justhollythings earthsea ebooks book amreading bookwyrm bookreview theLibrary wayfarers books ebook epub cookbook - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT comedy laugh humour satire irony standup funny humor - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT + + + techbros + einfachredeneben hackernews red reddit + + Tue, 29 Dec 2020 20:59:38 UT health medical burnout cannabis medicine treatment EmotionalFirstAid maryjane autistic health meds marijuana - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT seasons spring autumn winter summer solstice wintersolstice - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT gender - transwomen transcrowdfund female trans women estradiol queer genderQuiz woman transrights + transwomen transcrowdfund womensart female nonbinary trans transphobia women estradiol queer genderQuiz woman transrights - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT + + + history + history anarchisthistory + + Tue, 29 Dec 2020 20:59:38 UT fiction - cyberpunk thehobbit fiction microfiction + cyberpunk thehobbit fiction microfiction genrefiction - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT legal - hfgkarlsruhe amro GameSphere OnlineHarmsBill laipower gdpr intros Anticritique learning energyflow digitalservicesact geekproblem + hfgkarlsruhe amro GameSphere OnlineHarmsBill laipower gdpr intros Anticritique learning energyflow digitalservicesact geekproblem dmca - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT introductions - newhere firsttoot Introduction Introductions introduction introductions + newhere firsttoot recommends Introduction Introductions introduction intro introductions - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT audio audioproduction audiofeedback audio - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT bots bot - Tue, 22 Dec 2020 09:45:58 UT - - - climate - clouds renewableenergy amp climateemergency climate coal globalwarming weather climatecamp science sky climatescience climatecrisis - - Tue, 22 Dec 2020 09:45:58 UT - - - nature - morning trees light birds nature frogs sunrise inaturalist morningcrew australianwildlife capybara amphibians - - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT scifi startrek starwars babylon5 - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT religion - neopagan pagan + neopagan pagan catholic - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT - media - mainstreaming stream streaming weAreAllCrazy maiabeyrouti theatlantic traditionalmedia videos railroads taina ai realmedia media + astronomy + amateurastronomy astronomy space jupiter BackYardAstronomy moon saturn milkyway - Tue, 22 Dec 2020 09:45:58 UT - - - techbros - hackernews red reddit - - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT photography landscapephotography - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT moderation fedblock - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT languages - lojban + lojban gaelic - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT election voted vote - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT #music trance - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT facts - didyouknow + didyouknow lifehack - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT radio - radiohost vantascape vantaradio ca radio healthcare hamradio FreeAllPoliticalPrisoners card10 radiobroadcasting 3dcad radioshow local california listeningtonow radiobroadcast spazradio anonradio dmca + radiohost vantascape vantaradio ca radio healthcare listening hamradio FreeAllPoliticalPrisoners card10 radiobroadcasting 3dcad radioshow local california listeningtonow radiobroadcast spazradio anonradio io - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT licenses - copyright creative creativecommons + copyright creative common creativecommons - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT education education teach tutorial - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT + + + privacy + surveillancetech privacymatters surveillance dataprivacy privacy + + Tue, 29 Dec 2020 20:59:38 UT microcontroller microcontroller arduino - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT + + + people + monbiot aldoushuxley relationships AskVanta + + Tue, 29 Dec 2020 20:59:38 UT scotland glasgow highlands edinburgh loch - Tue, 22 Dec 2020 09:45:58 UT - - - astronomy - space jupiter moon saturn milkyway - - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT entertainment - watching Thundercat thisisthetypeofmemethatilikecauseitcontainsreptiles entertainment me meow themandalorian + watching Thundercat thisisthetypeofmemethatilikecauseitcontainsreptiles entertainment me meow un themandalorian - Tue, 22 Dec 2020 09:45:58 UT - - - privacy - privacymatters surveillance dataprivacy privacy - - Tue, 22 Dec 2020 09:45:58 UT - - - environment - climatechange climatechaos - - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT #software flatpak - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT microcontrollers esp8266 esp32 - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT help helpful help - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT war weapons - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT philosophy stoic postmodernism - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT france Macronavirus - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT travel travel taxi - Tue, 22 Dec 2020 09:45:58 UT + Tue, 29 Dec 2020 20:59:38 UT + + + environment + climatechaos + + Tue, 29 Dec 2020 20:59:38 UT From 7fbdb2445f4453c41dcef035770444bbc7170c7d Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 30 Dec 2020 10:29:14 +0000 Subject: [PATCH 22/38] Get webfinger from cache --- inbox.py | 15 +++++++-------- posts.py | 8 ++++++-- webapp_profile.py | 15 +++++++-------- 3 files changed, 20 insertions(+), 18 deletions(-) diff --git a/inbox.py b/inbox.py index 7f5a4aa3d..54e042cac 100644 --- a/inbox.py +++ b/inbox.py @@ -157,14 +157,13 @@ def _inboxStorePostToHtmlCache(recentPostsCache: {}, maxRecentPosts: int, if boxname != 'tlevents' and boxname != 'outbox': boxname = 'inbox' - # wfRequest = {} - # requestHandle = nickname + '@' + domain - # if cachedWebfingers.get(requestHandle): - # wfRequest = cachedWebfingers[requestHandle] - # elif cachedWebfingers.get(requestHandle + ':' + str(port)): - # wfRequest = cachedWebfingers[requestHandle + ':' + str(port)] - # TODO: this may need to be changed - wfRequest = cachedWebfingers + # check if a cached version of the webfinger request exists + requestHandle = nickname + '@' + getFullDomain(domain, port) + if cachedWebfingers.get(requestHandle): + wfRequest = cachedWebfingers[requestHandle] + else: + # TODO this may not be correct + wfRequest = cachedWebfingers individualPostAsHtml(True, recentPostsCache, maxRecentPosts, translate, pageNumber, diff --git a/posts.py b/posts.py index cd205b49b..c98669627 100644 --- a/posts.py +++ b/posts.py @@ -148,8 +148,12 @@ def getUserUrl(wfRequest: {}, sourceId=0) -> str: """ print('getUserUrl: ' + str(sourceId) + ' ' + str(wfRequest)) if not wfRequest.get('links'): - print('getUserUrl webfinger activity+json contains no links ' + - str(sourceId) + ' ' + str(wfRequest)) + if sourceId == 72367: + print('getUserUrl failed to get display name for webfinger ' + + str(wfRequest)) + else: + print('getUserUrl webfinger activity+json contains no links ' + + str(sourceId) + ' ' + str(wfRequest)) return None for link in wfRequest['links']: if not (link.get('type') and link.get('href')): diff --git a/webapp_profile.py b/webapp_profile.py index e1e05727f..c6480e1e4 100644 --- a/webapp_profile.py +++ b/webapp_profile.py @@ -260,14 +260,13 @@ def htmlProfileAfterSearch(cssCache: {}, if not item.get('object'): continue - # wfRequest = {} - # requestHandle = nickname + '@' + domain - # if cachedWebfingers.get(requestHandle): - # wfRequest = cachedWebfingers[requestHandle] - # elif cachedWebfingers.get(requestHandle + ':' + str(port)): - # wfRequest = cachedWebfingers[requestHandle + ':' + str(port)] - # TODO: this may need to be changed - wfRequest = cachedWebfingers + # check if a cached version of the webfinger request exists + requestHandle = nickname + '@' + getFullDomain(domain, port) + if cachedWebfingers.get(requestHandle): + wfRequest = cachedWebfingers[requestHandle] + else: + # TODO this may not be correct + wfRequest = cachedWebfingers profileStr += \ individualPostAsHtml(True, recentPostsCache, maxRecentPosts, From 3b23ae592706b09177fc770bd825f6f31387b4db Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 30 Dec 2020 11:27:16 +0000 Subject: [PATCH 23/38] If searching for someone you already follow then show their person options screen --- daemon.py | 59 +++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 38 insertions(+), 21 deletions(-) diff --git a/daemon.py b/daemon.py index f6eab1678..20cf6cddc 100644 --- a/daemon.py +++ b/daemon.py @@ -87,6 +87,7 @@ from inbox import runInboxQueueWatchdog from inbox import savePostToInboxQueue from inbox import populateReplies from inbox import getPersonPubKey +from follow import isFollowingActor from follow import getFollowingFeed from follow import sendFollowRequest from follow import unfollowAccount @@ -2419,6 +2420,7 @@ class PubServer(BaseHTTPRequestHandler): domain: str, domainFull: str, port: int, searchForEmoji: bool, onionDomain: str, i2pDomain: str, + GETstartTime, GETtimings: {}, debug: bool) -> None: """Receive a search query """ @@ -2570,27 +2572,41 @@ class PubServer(BaseHTTPRequestHandler): self.server.POSTbusy = False return profilePathStr = path.replace('/searchhandle', '') - profileStr = \ - htmlProfileAfterSearch(self.server.cssCache, - self.server.recentPostsCache, - self.server.maxRecentPosts, - self.server.translate, - baseDir, - profilePathStr, - httpPrefix, - nickname, - domain, - port, - searchStr, - self.server.session, - self.server.cachedWebfingers, - self.server.personCache, - self.server.debug, - self.server.projectVersion, - self.server.YTReplacementDomain, - self.server.showPublishedDateOnly, - self.server.defaultTimeline, - self.server.peertubeInstances) + + # are we already following the searched for handle? + if isFollowingActor(baseDir, nickname, domain, + searchStr): + # TODO + self._showPersonOptions(callingDomain, profilePathStr, + baseDir, httpPrefix, + domain, domainFull, + GETstartTime, GETtimings, + onionDomain, i2pDomain, + cookie, debug) + return + else: + showPublishedDateOnly = self.server.showPublishedDateOnly + profileStr = \ + htmlProfileAfterSearch(self.server.cssCache, + self.server.recentPostsCache, + self.server.maxRecentPosts, + self.server.translate, + baseDir, + profilePathStr, + httpPrefix, + nickname, + domain, + port, + searchStr, + self.server.session, + self.server.cachedWebfingers, + self.server.personCache, + self.server.debug, + self.server.projectVersion, + self.server.YTReplacementDomain, + showPublishedDateOnly, + self.server.defaultTimeline, + self.server.peertubeInstances) if profileStr: msg = profileStr.encode('utf-8') msglen = len(msg) @@ -12820,6 +12836,7 @@ class PubServer(BaseHTTPRequestHandler): searchForEmoji, self.server.onionDomain, self.server.i2pDomain, + POSTstartTime, {}, self.server.debug) return From 3158c06b187fe9c78af5482a96d455769522d146 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 30 Dec 2020 11:54:11 +0000 Subject: [PATCH 24/38] Add path parameters for person options --- daemon.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/daemon.py b/daemon.py index 20cf6cddc..782875d3d 100644 --- a/daemon.py +++ b/daemon.py @@ -117,6 +117,7 @@ from blog import htmlBlogView from blog import htmlBlogPage from blog import htmlBlogPost from blog import htmlEditBlog +from webapp_utils import getAvatarImageUrl from webapp_utils import htmlHashtagBlocked from webapp_utils import htmlFollowingList from webapp_utils import setBlogAddress @@ -2576,7 +2577,16 @@ class PubServer(BaseHTTPRequestHandler): # are we already following the searched for handle? if isFollowingActor(baseDir, nickname, domain, searchStr): - # TODO + actor = searchStr + avatarUrl = \ + getAvatarImageUrl(self.server.session, + baseDir, httpPrefix, + actor, + self.server.personCache, + None, True) + profilePathStr = profilePathStr + \ + '?options=' + actor + ';1;' + \ + '/actors/' + avatarUrl.replace('/', '-') self._showPersonOptions(callingDomain, profilePathStr, baseDir, httpPrefix, domain, domainFull, From a153a7860145590172384020e8a980515c8b553a Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 30 Dec 2020 11:59:37 +0000 Subject: [PATCH 25/38] Avatars path --- daemon.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daemon.py b/daemon.py index 782875d3d..925e72269 100644 --- a/daemon.py +++ b/daemon.py @@ -2586,7 +2586,7 @@ class PubServer(BaseHTTPRequestHandler): None, True) profilePathStr = profilePathStr + \ '?options=' + actor + ';1;' + \ - '/actors/' + avatarUrl.replace('/', '-') + '/avatars/' + avatarUrl.replace('/', '-') self._showPersonOptions(callingDomain, profilePathStr, baseDir, httpPrefix, domain, domainFull, From 9b3140aa1a7d349beffaaa91c717a94d1f7f5bef Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 30 Dec 2020 12:02:00 +0000 Subject: [PATCH 26/38] Debug --- daemon.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/daemon.py b/daemon.py index 925e72269..7475b29ae 100644 --- a/daemon.py +++ b/daemon.py @@ -2584,9 +2584,11 @@ class PubServer(BaseHTTPRequestHandler): actor, self.server.personCache, None, True) - profilePathStr = profilePathStr + \ + profilePathStr += \ '?options=' + actor + ';1;' + \ '/avatars/' + avatarUrl.replace('/', '-') + print('profilePathStr: ' + profilePathStr) + self._showPersonOptions(callingDomain, profilePathStr, baseDir, httpPrefix, domain, domainFull, From 8e8dda6370847873b8d860788852353f41b364eb Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 30 Dec 2020 12:14:02 +0000 Subject: [PATCH 27/38] Chack for users path --- daemon.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/daemon.py b/daemon.py index 7475b29ae..5b37ccb29 100644 --- a/daemon.py +++ b/daemon.py @@ -2577,7 +2577,16 @@ class PubServer(BaseHTTPRequestHandler): # are we already following the searched for handle? if isFollowingActor(baseDir, nickname, domain, searchStr): - actor = searchStr + if not hasUsersPath(searchStr): + searchNickname = getNicknameFromActor(searchStr) + searchDomain, searchPort = \ + getDomainFromActor(searchStr) + actor = \ + httpPrefix + '://' + \ + getFullDomain(searchDomain, searchPort) + \ + '/users/' + searchNickname + else: + actor = searchStr avatarUrl = \ getAvatarImageUrl(self.server.session, baseDir, httpPrefix, @@ -2588,7 +2597,7 @@ class PubServer(BaseHTTPRequestHandler): '?options=' + actor + ';1;' + \ '/avatars/' + avatarUrl.replace('/', '-') print('profilePathStr: ' + profilePathStr) - + self._showPersonOptions(callingDomain, profilePathStr, baseDir, httpPrefix, domain, domainFull, From 2c36f0a92d0539fc81de39b3fbf4e106503e81a1 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 30 Dec 2020 12:17:16 +0000 Subject: [PATCH 28/38] Avatar url --- daemon.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/daemon.py b/daemon.py index 5b37ccb29..3eaaf1e45 100644 --- a/daemon.py +++ b/daemon.py @@ -2594,8 +2594,7 @@ class PubServer(BaseHTTPRequestHandler): self.server.personCache, None, True) profilePathStr += \ - '?options=' + actor + ';1;' + \ - '/avatars/' + avatarUrl.replace('/', '-') + '?options=' + actor + ';1;' + avatarUrl print('profilePathStr: ' + profilePathStr) self._showPersonOptions(callingDomain, profilePathStr, From fa84a012398d2f340fc1a3650d82cb48e03017f3 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 30 Dec 2020 12:18:41 +0000 Subject: [PATCH 29/38] Remove debug --- daemon.py | 1 - 1 file changed, 1 deletion(-) diff --git a/daemon.py b/daemon.py index 3eaaf1e45..eefc8965b 100644 --- a/daemon.py +++ b/daemon.py @@ -2595,7 +2595,6 @@ class PubServer(BaseHTTPRequestHandler): None, True) profilePathStr += \ '?options=' + actor + ';1;' + avatarUrl - print('profilePathStr: ' + profilePathStr) self._showPersonOptions(callingDomain, profilePathStr, baseDir, httpPrefix, From 2302dd6a1a4bb6f5d058c5523ed43ae334ea4f78 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 30 Dec 2020 12:50:37 +0000 Subject: [PATCH 30/38] return path --- daemon.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daemon.py b/daemon.py index eefc8965b..cdf9ac32f 100644 --- a/daemon.py +++ b/daemon.py @@ -2594,7 +2594,7 @@ class PubServer(BaseHTTPRequestHandler): self.server.personCache, None, True) profilePathStr += \ - '?options=' + actor + ';1;' + avatarUrl + '/search?options=' + actor + ';1;' + avatarUrl self._showPersonOptions(callingDomain, profilePathStr, baseDir, httpPrefix, From 6e21a3b84f7830740e3a817ecbcdce61a5adaca6 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 30 Dec 2020 12:54:07 +0000 Subject: [PATCH 31/38] return path --- daemon.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daemon.py b/daemon.py index cdf9ac32f..eefc8965b 100644 --- a/daemon.py +++ b/daemon.py @@ -2594,7 +2594,7 @@ class PubServer(BaseHTTPRequestHandler): self.server.personCache, None, True) profilePathStr += \ - '/search?options=' + actor + ';1;' + avatarUrl + '?options=' + actor + ';1;' + avatarUrl self._showPersonOptions(callingDomain, profilePathStr, baseDir, httpPrefix, From 9d937826bc668a1c7b260e50e567e1b3cd487c1b Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 30 Dec 2020 21:21:57 +0000 Subject: [PATCH 32/38] Update when receiving likes --- inbox.py | 6 +++--- utils.py | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/inbox.py b/inbox.py index 54e042cac..16ab4d4bc 100644 --- a/inbox.py +++ b/inbox.py @@ -964,13 +964,13 @@ def _receiveLike(recentPostsCache: {}, handleName = handle.split('@')[0] handleDom = handle.split('@')[1] + updateLikesCollection(recentPostsCache, baseDir, postFilename, + messageJson['object'], + messageJson['actor'], domain, debug) if not _alreadyLiked(baseDir, handleName, handleDom, messageJson['object'], messageJson['actor']): - updateLikesCollection(recentPostsCache, baseDir, postFilename, - messageJson['object'], - messageJson['actor'], domain, debug) _likeNotify(baseDir, domain, onionDomain, handle, messageJson['actor'], messageJson['object']) return True diff --git a/utils.py b/utils.py index 99d8a8637..81682d1e1 100644 --- a/utils.py +++ b/utils.py @@ -1528,6 +1528,7 @@ def updateLikesCollection(recentPostsCache: {}, for likeItem in postJsonObject['object']['likes']['items']: if likeItem.get('actor'): if likeItem['actor'] == actor: + # already liked return newLike = { 'type': 'Like', From 9efecfc28e6bbae2bc8a60283149d55e607b52c2 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 31 Dec 2020 10:56:22 +0000 Subject: [PATCH 33/38] Check webfinger exists --- posts.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/posts.py b/posts.py index c98669627..1566540f2 100644 --- a/posts.py +++ b/posts.py @@ -212,6 +212,8 @@ def getPersonBox(baseDir: str, session, wfRequest: {}, nickname: str, domain: str, boxName='inbox', sourceId=0) -> (str, str, str, str, str, str, str, str): + if not wfRequest: + return None, None, None, None, None, None, None profileStr = 'https://www.w3.org/ns/activitystreams' asHeader = { 'Accept': 'application/activity+json; profile="' + profileStr + '"' From 4bee4e236a794a25ea3d786dc2b9ffb898eface2 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 31 Dec 2020 11:08:08 +0000 Subject: [PATCH 34/38] Fix missing webfingers --- inbox.py | 8 ++++++-- webapp_profile.py | 7 +++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/inbox.py b/inbox.py index 16ab4d4bc..46b1ba4c4 100644 --- a/inbox.py +++ b/inbox.py @@ -72,6 +72,7 @@ from happening import saveEventPost from delete import removeOldHashtags from follow import isFollowingActor from categories import guessHashtagCategory +from webfinger import webfingerHandle def storeHashTags(baseDir: str, nickname: str, postJsonObject: {}) -> None: @@ -162,8 +163,11 @@ def _inboxStorePostToHtmlCache(recentPostsCache: {}, maxRecentPosts: int, if cachedWebfingers.get(requestHandle): wfRequest = cachedWebfingers[requestHandle] else: - # TODO this may not be correct - wfRequest = cachedWebfingers + wfRequest = webfingerHandle(session, requestHandle, + httpPrefix, cachedWebfingers, + domain, __version__) + if not wfRequest: + return individualPostAsHtml(True, recentPostsCache, maxRecentPosts, translate, pageNumber, diff --git a/webapp_profile.py b/webapp_profile.py index c6480e1e4..20fe9f67c 100644 --- a/webapp_profile.py +++ b/webapp_profile.py @@ -265,8 +265,11 @@ def htmlProfileAfterSearch(cssCache: {}, if cachedWebfingers.get(requestHandle): wfRequest = cachedWebfingers[requestHandle] else: - # TODO this may not be correct - wfRequest = cachedWebfingers + wfRequest = webfingerHandle(session, requestHandle, + httpPrefix, cachedWebfingers, + domain, __version__) + if not wfRequest: + return None profileStr += \ individualPostAsHtml(True, recentPostsCache, maxRecentPosts, From 0d0d49ac894cd583ada7f7e15bb6debdb5712f0e Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 31 Dec 2020 12:14:47 +0000 Subject: [PATCH 35/38] Revert "Fix missing webfingers" This reverts commit 4bee4e236a794a25ea3d786dc2b9ffb898eface2. --- inbox.py | 8 ++------ webapp_profile.py | 7 ++----- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/inbox.py b/inbox.py index 46b1ba4c4..16ab4d4bc 100644 --- a/inbox.py +++ b/inbox.py @@ -72,7 +72,6 @@ from happening import saveEventPost from delete import removeOldHashtags from follow import isFollowingActor from categories import guessHashtagCategory -from webfinger import webfingerHandle def storeHashTags(baseDir: str, nickname: str, postJsonObject: {}) -> None: @@ -163,11 +162,8 @@ def _inboxStorePostToHtmlCache(recentPostsCache: {}, maxRecentPosts: int, if cachedWebfingers.get(requestHandle): wfRequest = cachedWebfingers[requestHandle] else: - wfRequest = webfingerHandle(session, requestHandle, - httpPrefix, cachedWebfingers, - domain, __version__) - if not wfRequest: - return + # TODO this may not be correct + wfRequest = cachedWebfingers individualPostAsHtml(True, recentPostsCache, maxRecentPosts, translate, pageNumber, diff --git a/webapp_profile.py b/webapp_profile.py index 20fe9f67c..c6480e1e4 100644 --- a/webapp_profile.py +++ b/webapp_profile.py @@ -265,11 +265,8 @@ def htmlProfileAfterSearch(cssCache: {}, if cachedWebfingers.get(requestHandle): wfRequest = cachedWebfingers[requestHandle] else: - wfRequest = webfingerHandle(session, requestHandle, - httpPrefix, cachedWebfingers, - domain, __version__) - if not wfRequest: - return None + # TODO this may not be correct + wfRequest = cachedWebfingers profileStr += \ individualPostAsHtml(True, recentPostsCache, maxRecentPosts, From 8fb223e1aa5f531b3ef9da7c03c136563771659a Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 31 Dec 2020 12:15:03 +0000 Subject: [PATCH 36/38] Revert "Check webfinger exists" This reverts commit 9efecfc28e6bbae2bc8a60283149d55e607b52c2. --- posts.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/posts.py b/posts.py index 1566540f2..c98669627 100644 --- a/posts.py +++ b/posts.py @@ -212,8 +212,6 @@ def getPersonBox(baseDir: str, session, wfRequest: {}, nickname: str, domain: str, boxName='inbox', sourceId=0) -> (str, str, str, str, str, str, str, str): - if not wfRequest: - return None, None, None, None, None, None, None profileStr = 'https://www.w3.org/ns/activitystreams' asHeader = { 'Accept': 'application/activity+json; profile="' + profileStr + '"' From 1df8ed9c7609326c704034b1756245399cf0d511 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 31 Dec 2020 12:23:15 +0000 Subject: [PATCH 37/38] Resolving the webfinger conundrum --- inbox.py | 11 ++--------- webapp_post.py | 5 +++-- webapp_profile.py | 10 +--------- 3 files changed, 6 insertions(+), 20 deletions(-) diff --git a/inbox.py b/inbox.py index 16ab4d4bc..1c70ee491 100644 --- a/inbox.py +++ b/inbox.py @@ -157,17 +157,10 @@ def _inboxStorePostToHtmlCache(recentPostsCache: {}, maxRecentPosts: int, if boxname != 'tlevents' and boxname != 'outbox': boxname = 'inbox' - # check if a cached version of the webfinger request exists - requestHandle = nickname + '@' + getFullDomain(domain, port) - if cachedWebfingers.get(requestHandle): - wfRequest = cachedWebfingers[requestHandle] - else: - # TODO this may not be correct - wfRequest = cachedWebfingers - individualPostAsHtml(True, recentPostsCache, maxRecentPosts, translate, pageNumber, - baseDir, session, wfRequest, personCache, + baseDir, session, cachedWebfingers, + personCache, nickname, domain, port, postJsonObject, avatarUrl, True, allowDeletion, httpPrefix, __version__, boxname, None, diff --git a/webapp_post.py b/webapp_post.py index 3d9552412..09e7d29dd 100644 --- a/webapp_post.py +++ b/webapp_post.py @@ -1070,7 +1070,7 @@ def individualPostAsHtml(allowDownloads: bool, recentPostsCache: {}, maxRecentPosts: int, translate: {}, pageNumber: int, baseDir: str, - session, wfRequest: {}, personCache: {}, + session, cachedWebfingers: {}, personCache: {}, nickname: str, domain: str, port: int, postJsonObject: {}, avatarUrl: str, showAvatarOptions: bool, @@ -1155,7 +1155,8 @@ def individualPostAsHtml(allowDownloads: bool, if domainFull not in postActor: (inboxUrl, pubKeyId, pubKey, fromPersonId, sharedInbox, - avatarUrl2, displayName) = getPersonBox(baseDir, session, wfRequest, + avatarUrl2, displayName) = getPersonBox(baseDir, session, + cachedWebfingers, personCache, projectVersion, httpPrefix, nickname, domain, 'outbox', diff --git a/webapp_profile.py b/webapp_profile.py index c6480e1e4..03763ab96 100644 --- a/webapp_profile.py +++ b/webapp_profile.py @@ -260,18 +260,10 @@ def htmlProfileAfterSearch(cssCache: {}, if not item.get('object'): continue - # check if a cached version of the webfinger request exists - requestHandle = nickname + '@' + getFullDomain(domain, port) - if cachedWebfingers.get(requestHandle): - wfRequest = cachedWebfingers[requestHandle] - else: - # TODO this may not be correct - wfRequest = cachedWebfingers - profileStr += \ individualPostAsHtml(True, recentPostsCache, maxRecentPosts, translate, None, baseDir, - session, wfRequest, personCache, + session, cachedWebfingers, personCache, nickname, domain, port, item, avatarUrl, False, False, httpPrefix, projectVersion, 'inbox', From b280cf990fc16d0ba1e5a1c4db1591feb06b0460 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 31 Dec 2020 12:46:35 +0000 Subject: [PATCH 38/38] Change variable names to avoid confusion --- webapp_confirm.py | 4 +-- webapp_frontscreen.py | 9 +++--- webapp_post.py | 14 +++++---- webapp_profile.py | 24 ++++++++------- webapp_search.py | 10 +++--- webapp_timeline.py | 71 ++++++++++++++++++++++++++++--------------- 6 files changed, 80 insertions(+), 52 deletions(-) diff --git a/webapp_confirm.py b/webapp_confirm.py index 3649c256d..bf6b564c5 100644 --- a/webapp_confirm.py +++ b/webapp_confirm.py @@ -25,7 +25,7 @@ def htmlConfirmDelete(cssCache: {}, translate, pageNumber: int, session, baseDir: str, messageId: str, httpPrefix: str, projectVersion: str, - wfRequest: {}, personCache: {}, + cachedWebfingers: {}, personCache: {}, callingDomain: str, YTReplacementDomain: str, showPublishedDateOnly: bool, @@ -61,7 +61,7 @@ def htmlConfirmDelete(cssCache: {}, deletePostStr += \ individualPostAsHtml(True, recentPostsCache, maxRecentPosts, translate, pageNumber, - baseDir, session, wfRequest, personCache, + baseDir, session, cachedWebfingers, personCache, nickname, domain, port, postJsonObject, None, True, False, httpPrefix, projectVersion, 'outbox', diff --git a/webapp_frontscreen.py b/webapp_frontscreen.py index ea26b4b4e..adfb0b24a 100644 --- a/webapp_frontscreen.py +++ b/webapp_frontscreen.py @@ -24,7 +24,7 @@ def _htmlFrontScreenPosts(recentPostsCache: {}, maxRecentPosts: int, translate: {}, baseDir: str, httpPrefix: str, nickname: str, domain: str, port: int, - session, wfRequest: {}, personCache: {}, + session, cachedWebfingers: {}, personCache: {}, projectVersion: str, YTReplacementDomain: str, showPublishedDateOnly: bool, @@ -59,7 +59,8 @@ def _htmlFrontScreenPosts(recentPostsCache: {}, maxRecentPosts: int, individualPostAsHtml(True, recentPostsCache, maxRecentPosts, translate, None, - baseDir, session, wfRequest, + baseDir, session, + cachedWebfingers, personCache, nickname, domain, port, item, None, True, False, @@ -84,7 +85,7 @@ def htmlFrontScreen(rssIconAtTop: bool, translate: {}, projectVersion: str, baseDir: str, httpPrefix: str, authorized: bool, profileJson: {}, selected: str, - session, wfRequest: {}, personCache: {}, + session, cachedWebfingers: {}, personCache: {}, YTReplacementDomain: str, showPublishedDateOnly: bool, newswire: {}, theme: str, @@ -149,7 +150,7 @@ def htmlFrontScreen(rssIconAtTop: bool, translate, baseDir, httpPrefix, nickname, domain, port, - session, wfRequest, personCache, + session, cachedWebfingers, personCache, projectVersion, YTReplacementDomain, showPublishedDateOnly, diff --git a/webapp_post.py b/webapp_post.py index 09e7d29dd..136adfc7b 100644 --- a/webapp_post.py +++ b/webapp_post.py @@ -1580,7 +1580,8 @@ def individualPostAsHtml(allowDownloads: bool, def htmlIndividualPost(cssCache: {}, recentPostsCache: {}, maxRecentPosts: int, translate: {}, - baseDir: str, session, wfRequest: {}, personCache: {}, + baseDir: str, session, cachedWebfingers: {}, + personCache: {}, nickname: str, domain: str, port: int, authorized: bool, postJsonObject: {}, httpPrefix: str, projectVersion: str, likedBy: str, @@ -1620,7 +1621,7 @@ def htmlIndividualPost(cssCache: {}, postStr += \ individualPostAsHtml(True, recentPostsCache, maxRecentPosts, translate, None, - baseDir, session, wfRequest, personCache, + baseDir, session, cachedWebfingers, personCache, nickname, domain, port, postJsonObject, None, True, False, httpPrefix, projectVersion, 'inbox', @@ -1644,7 +1645,7 @@ def htmlIndividualPost(cssCache: {}, individualPostAsHtml(True, recentPostsCache, maxRecentPosts, translate, None, - baseDir, session, wfRequest, + baseDir, session, cachedWebfingers, personCache, nickname, domain, port, postJsonObject, @@ -1674,7 +1675,7 @@ def htmlIndividualPost(cssCache: {}, individualPostAsHtml(True, recentPostsCache, maxRecentPosts, translate, None, - baseDir, session, wfRequest, + baseDir, session, cachedWebfingers, personCache, nickname, domain, port, item, None, True, False, @@ -1694,7 +1695,7 @@ def htmlIndividualPost(cssCache: {}, def htmlPostReplies(cssCache: {}, recentPostsCache: {}, maxRecentPosts: int, translate: {}, baseDir: str, - session, wfRequest: {}, personCache: {}, + session, cachedWebfingers: {}, personCache: {}, nickname: str, domain: str, port: int, repliesJson: {}, httpPrefix: str, projectVersion: str, YTReplacementDomain: str, @@ -1709,7 +1710,8 @@ def htmlPostReplies(cssCache: {}, individualPostAsHtml(True, recentPostsCache, maxRecentPosts, translate, None, - baseDir, session, wfRequest, personCache, + baseDir, session, cachedWebfingers, + personCache, nickname, domain, port, item, None, True, False, httpPrefix, projectVersion, 'inbox', diff --git a/webapp_profile.py b/webapp_profile.py index 03763ab96..4d6e21700 100644 --- a/webapp_profile.py +++ b/webapp_profile.py @@ -359,7 +359,7 @@ def htmlProfile(rssIconAtTop: bool, translate: {}, projectVersion: str, baseDir: str, httpPrefix: str, authorized: bool, profileJson: {}, selected: str, - session, wfRequest: {}, personCache: {}, + session, cachedWebfingers: {}, personCache: {}, YTReplacementDomain: str, showPublishedDateOnly: bool, newswire: {}, theme: str, dormantMonths: int, @@ -379,7 +379,7 @@ def htmlProfile(rssIconAtTop: bool, translate, projectVersion, baseDir, httpPrefix, authorized, profileJson, selected, - session, wfRequest, personCache, + session, cachedWebfingers, personCache, YTReplacementDomain, showPublishedDateOnly, newswire, theme, extraJson, @@ -628,7 +628,7 @@ def htmlProfile(rssIconAtTop: bool, translate, baseDir, httpPrefix, authorized, nickname, domain, port, - session, wfRequest, personCache, + session, cachedWebfingers, personCache, projectVersion, YTReplacementDomain, showPublishedDateOnly, @@ -638,7 +638,7 @@ def htmlProfile(rssIconAtTop: bool, _htmlProfileFollowing(translate, baseDir, httpPrefix, authorized, nickname, domain, port, session, - wfRequest, personCache, extraJson, + cachedWebfingers, personCache, extraJson, projectVersion, ["unfollow"], selected, usersPath, pageNumber, maxItemsPerPage, dormantMonths) @@ -647,7 +647,7 @@ def htmlProfile(rssIconAtTop: bool, _htmlProfileFollowing(translate, baseDir, httpPrefix, authorized, nickname, domain, port, session, - wfRequest, personCache, extraJson, + cachedWebfingers, personCache, extraJson, projectVersion, ["block"], selected, usersPath, pageNumber, maxItemsPerPage, dormantMonths) @@ -675,7 +675,7 @@ def _htmlProfilePosts(recentPostsCache: {}, maxRecentPosts: int, baseDir: str, httpPrefix: str, authorized: bool, nickname: str, domain: str, port: int, - session, wfRequest: {}, personCache: {}, + session, cachedWebfingers: {}, personCache: {}, projectVersion: str, YTReplacementDomain: str, showPublishedDateOnly: bool, @@ -710,7 +710,7 @@ def _htmlProfilePosts(recentPostsCache: {}, maxRecentPosts: int, individualPostAsHtml(True, recentPostsCache, maxRecentPosts, translate, None, - baseDir, session, wfRequest, + baseDir, session, cachedWebfingers, personCache, nickname, domain, port, item, None, True, False, @@ -731,7 +731,7 @@ def _htmlProfilePosts(recentPostsCache: {}, maxRecentPosts: int, def _htmlProfileFollowing(translate: {}, baseDir: str, httpPrefix: str, authorized: bool, nickname: str, domain: str, port: int, - session, wfRequest: {}, personCache: {}, + session, cachedWebfingers: {}, personCache: {}, followingJson: {}, projectVersion: str, buttons: [], feedName: str, actor: str, @@ -765,7 +765,7 @@ def _htmlProfileFollowing(translate: {}, baseDir: str, httpPrefix: str, profileStr += \ _individualFollowAsHtml(translate, baseDir, session, - wfRequest, personCache, + cachedWebfingers, personCache, domain, followingActor, authorized, nickname, httpPrefix, projectVersion, dormant, @@ -1483,7 +1483,8 @@ def htmlEditProfile(cssCache: {}, translate: {}, baseDir: str, path: str, def _individualFollowAsHtml(translate: {}, - baseDir: str, session, wfRequest: {}, + baseDir: str, session, + cachedWebfingers: {}, personCache: {}, domain: str, followUrl: str, authorized: bool, @@ -1505,7 +1506,8 @@ def _individualFollowAsHtml(translate: {}, if domain not in followUrl: (inboxUrl, pubKeyId, pubKey, fromPersonId, sharedInbox, - avatarUrl2, displayName) = getPersonBox(baseDir, session, wfRequest, + avatarUrl2, displayName) = getPersonBox(baseDir, session, + cachedWebfingers, personCache, projectVersion, httpPrefix, nickname, domain, 'outbox', 43036) diff --git a/webapp_search.py b/webapp_search.py index 46d2f5f80..126722058 100644 --- a/webapp_search.py +++ b/webapp_search.py @@ -504,7 +504,7 @@ def htmlHistorySearch(cssCache: {}, translate: {}, baseDir: str, recentPostsCache: {}, maxRecentPosts: int, session, - wfRequest, + cachedWebfingers, personCache: {}, port: int, YTReplacementDomain: str, @@ -573,7 +573,7 @@ def htmlHistorySearch(cssCache: {}, translate: {}, baseDir: str, individualPostAsHtml(True, recentPostsCache, maxRecentPosts, translate, None, - baseDir, session, wfRequest, + baseDir, session, cachedWebfingers, personCache, nickname, domain, port, postJsonObject, @@ -600,7 +600,7 @@ def htmlHashtagSearch(cssCache: {}, translate: {}, baseDir: str, hashtag: str, pageNumber: int, postsPerPage: int, - session, wfRequest: {}, personCache: {}, + session, cachedWebfingers: {}, personCache: {}, httpPrefix: str, projectVersion: str, YTReplacementDomain: str, showPublishedDateOnly: bool, @@ -740,7 +740,7 @@ def htmlHashtagSearch(cssCache: {}, individualPostAsHtml(allowDownloads, recentPostsCache, maxRecentPosts, translate, None, - baseDir, session, wfRequest, + baseDir, session, cachedWebfingers, personCache, nickname, domain, port, postJsonObject, @@ -778,7 +778,7 @@ def rssHashtagSearch(nickname: str, domain: str, port: int, translate: {}, baseDir: str, hashtag: str, postsPerPage: int, - session, wfRequest: {}, personCache: {}, + session, cachedWebfingers: {}, personCache: {}, httpPrefix: str, projectVersion: str, YTReplacementDomain: str) -> str: """Show an rss feed for a hashtag diff --git a/webapp_timeline.py b/webapp_timeline.py index e5c5dc839..e00afa944 100644 --- a/webapp_timeline.py +++ b/webapp_timeline.py @@ -43,7 +43,7 @@ def htmlTimeline(cssCache: {}, defaultTimeline: str, recentPostsCache: {}, maxRecentPosts: int, translate: {}, pageNumber: int, itemsPerPage: int, session, baseDir: str, - wfRequest: {}, personCache: {}, + cachedWebfingers: {}, personCache: {}, nickname: str, domain: str, port: int, timelineJson: {}, boxName: str, allowDeletion: bool, httpPrefix: str, projectVersion: str, @@ -560,7 +560,8 @@ def htmlTimeline(cssCache: {}, defaultTimeline: str, individualPostAsHtml(False, recentPostsCache, maxRecentPosts, translate, pageNumber, - baseDir, session, wfRequest, + baseDir, session, + cachedWebfingers, personCache, nickname, domain, port, item, None, True, @@ -712,7 +713,8 @@ def _htmlSharesTimeline(translate: {}, pageNumber: int, itemsPerPage: int, def htmlShares(cssCache: {}, defaultTimeline: str, recentPostsCache: {}, maxRecentPosts: int, translate: {}, pageNumber: int, itemsPerPage: int, - session, baseDir: str, wfRequest: {}, personCache: {}, + session, baseDir: str, + cachedWebfingers: {}, personCache: {}, nickname: str, domain: str, port: int, allowDeletion: bool, httpPrefix: str, projectVersion: str, @@ -734,7 +736,8 @@ def htmlShares(cssCache: {}, defaultTimeline: str, return htmlTimeline(cssCache, defaultTimeline, recentPostsCache, maxRecentPosts, translate, pageNumber, - itemsPerPage, session, baseDir, wfRequest, personCache, + itemsPerPage, session, baseDir, + cachedWebfingers, personCache, nickname, domain, port, None, 'tlshares', allowDeletion, httpPrefix, projectVersion, manuallyApproveFollowers, @@ -750,7 +753,8 @@ def htmlShares(cssCache: {}, defaultTimeline: str, def htmlInbox(cssCache: {}, defaultTimeline: str, recentPostsCache: {}, maxRecentPosts: int, translate: {}, pageNumber: int, itemsPerPage: int, - session, baseDir: str, wfRequest: {}, personCache: {}, + session, baseDir: str, + cachedWebfingers: {}, personCache: {}, nickname: str, domain: str, port: int, inboxJson: {}, allowDeletion: bool, httpPrefix: str, projectVersion: str, @@ -772,7 +776,8 @@ def htmlInbox(cssCache: {}, defaultTimeline: str, return htmlTimeline(cssCache, defaultTimeline, recentPostsCache, maxRecentPosts, translate, pageNumber, - itemsPerPage, session, baseDir, wfRequest, personCache, + itemsPerPage, session, baseDir, + cachedWebfingers, personCache, nickname, domain, port, inboxJson, 'inbox', allowDeletion, httpPrefix, projectVersion, manuallyApproveFollowers, @@ -788,7 +793,8 @@ def htmlInbox(cssCache: {}, defaultTimeline: str, def htmlBookmarks(cssCache: {}, defaultTimeline: str, recentPostsCache: {}, maxRecentPosts: int, translate: {}, pageNumber: int, itemsPerPage: int, - session, baseDir: str, wfRequest: {}, personCache: {}, + session, baseDir: str, + cachedWebfingers: {}, personCache: {}, nickname: str, domain: str, port: int, bookmarksJson: {}, allowDeletion: bool, httpPrefix: str, projectVersion: str, @@ -810,7 +816,8 @@ def htmlBookmarks(cssCache: {}, defaultTimeline: str, return htmlTimeline(cssCache, defaultTimeline, recentPostsCache, maxRecentPosts, translate, pageNumber, - itemsPerPage, session, baseDir, wfRequest, personCache, + itemsPerPage, session, baseDir, + cachedWebfingers, personCache, nickname, domain, port, bookmarksJson, 'tlbookmarks', allowDeletion, httpPrefix, projectVersion, manuallyApproveFollowers, @@ -826,7 +833,8 @@ def htmlBookmarks(cssCache: {}, defaultTimeline: str, def htmlEvents(cssCache: {}, defaultTimeline: str, recentPostsCache: {}, maxRecentPosts: int, translate: {}, pageNumber: int, itemsPerPage: int, - session, baseDir: str, wfRequest: {}, personCache: {}, + session, baseDir: str, + cachedWebfingers: {}, personCache: {}, nickname: str, domain: str, port: int, bookmarksJson: {}, allowDeletion: bool, httpPrefix: str, projectVersion: str, @@ -848,7 +856,8 @@ def htmlEvents(cssCache: {}, defaultTimeline: str, return htmlTimeline(cssCache, defaultTimeline, recentPostsCache, maxRecentPosts, translate, pageNumber, - itemsPerPage, session, baseDir, wfRequest, personCache, + itemsPerPage, session, baseDir, + cachedWebfingers, personCache, nickname, domain, port, bookmarksJson, 'tlevents', allowDeletion, httpPrefix, projectVersion, manuallyApproveFollowers, @@ -864,7 +873,8 @@ def htmlEvents(cssCache: {}, defaultTimeline: str, def htmlInboxDMs(cssCache: {}, defaultTimeline: str, recentPostsCache: {}, maxRecentPosts: int, translate: {}, pageNumber: int, itemsPerPage: int, - session, baseDir: str, wfRequest: {}, personCache: {}, + session, baseDir: str, + cachedWebfingers: {}, personCache: {}, nickname: str, domain: str, port: int, inboxJson: {}, allowDeletion: bool, httpPrefix: str, projectVersion: str, @@ -883,7 +893,8 @@ def htmlInboxDMs(cssCache: {}, defaultTimeline: str, return htmlTimeline(cssCache, defaultTimeline, recentPostsCache, maxRecentPosts, translate, pageNumber, - itemsPerPage, session, baseDir, wfRequest, personCache, + itemsPerPage, session, baseDir, + cachedWebfingers, personCache, nickname, domain, port, inboxJson, 'dm', allowDeletion, httpPrefix, projectVersion, False, minimal, YTReplacementDomain, showPublishedDateOnly, @@ -897,7 +908,8 @@ def htmlInboxDMs(cssCache: {}, defaultTimeline: str, def htmlInboxReplies(cssCache: {}, defaultTimeline: str, recentPostsCache: {}, maxRecentPosts: int, translate: {}, pageNumber: int, itemsPerPage: int, - session, baseDir: str, wfRequest: {}, personCache: {}, + session, baseDir: str, + cachedWebfingers: {}, personCache: {}, nickname: str, domain: str, port: int, inboxJson: {}, allowDeletion: bool, httpPrefix: str, projectVersion: str, @@ -916,7 +928,8 @@ def htmlInboxReplies(cssCache: {}, defaultTimeline: str, return htmlTimeline(cssCache, defaultTimeline, recentPostsCache, maxRecentPosts, translate, pageNumber, - itemsPerPage, session, baseDir, wfRequest, personCache, + itemsPerPage, session, baseDir, + cachedWebfingers, personCache, nickname, domain, port, inboxJson, 'tlreplies', allowDeletion, httpPrefix, projectVersion, False, minimal, YTReplacementDomain, @@ -931,7 +944,8 @@ def htmlInboxReplies(cssCache: {}, defaultTimeline: str, def htmlInboxMedia(cssCache: {}, defaultTimeline: str, recentPostsCache: {}, maxRecentPosts: int, translate: {}, pageNumber: int, itemsPerPage: int, - session, baseDir: str, wfRequest: {}, personCache: {}, + session, baseDir: str, + cachedWebfingers: {}, personCache: {}, nickname: str, domain: str, port: int, inboxJson: {}, allowDeletion: bool, httpPrefix: str, projectVersion: str, @@ -950,7 +964,8 @@ def htmlInboxMedia(cssCache: {}, defaultTimeline: str, return htmlTimeline(cssCache, defaultTimeline, recentPostsCache, maxRecentPosts, translate, pageNumber, - itemsPerPage, session, baseDir, wfRequest, personCache, + itemsPerPage, session, baseDir, + cachedWebfingers, personCache, nickname, domain, port, inboxJson, 'tlmedia', allowDeletion, httpPrefix, projectVersion, False, minimal, YTReplacementDomain, @@ -965,7 +980,8 @@ def htmlInboxMedia(cssCache: {}, defaultTimeline: str, def htmlInboxBlogs(cssCache: {}, defaultTimeline: str, recentPostsCache: {}, maxRecentPosts: int, translate: {}, pageNumber: int, itemsPerPage: int, - session, baseDir: str, wfRequest: {}, personCache: {}, + session, baseDir: str, + cachedWebfingers: {}, personCache: {}, nickname: str, domain: str, port: int, inboxJson: {}, allowDeletion: bool, httpPrefix: str, projectVersion: str, @@ -984,7 +1000,8 @@ def htmlInboxBlogs(cssCache: {}, defaultTimeline: str, return htmlTimeline(cssCache, defaultTimeline, recentPostsCache, maxRecentPosts, translate, pageNumber, - itemsPerPage, session, baseDir, wfRequest, personCache, + itemsPerPage, session, baseDir, + cachedWebfingers, personCache, nickname, domain, port, inboxJson, 'tlblogs', allowDeletion, httpPrefix, projectVersion, False, minimal, YTReplacementDomain, @@ -999,7 +1016,8 @@ def htmlInboxBlogs(cssCache: {}, defaultTimeline: str, def htmlInboxFeatures(cssCache: {}, defaultTimeline: str, recentPostsCache: {}, maxRecentPosts: int, translate: {}, pageNumber: int, itemsPerPage: int, - session, baseDir: str, wfRequest: {}, personCache: {}, + session, baseDir: str, + cachedWebfingers: {}, personCache: {}, nickname: str, domain: str, port: int, inboxJson: {}, allowDeletion: bool, httpPrefix: str, projectVersion: str, @@ -1019,7 +1037,8 @@ def htmlInboxFeatures(cssCache: {}, defaultTimeline: str, return htmlTimeline(cssCache, defaultTimeline, recentPostsCache, maxRecentPosts, translate, pageNumber, - itemsPerPage, session, baseDir, wfRequest, personCache, + itemsPerPage, session, baseDir, + cachedWebfingers, personCache, nickname, domain, port, inboxJson, 'tlfeatures', allowDeletion, httpPrefix, projectVersion, False, minimal, YTReplacementDomain, @@ -1034,7 +1053,8 @@ def htmlInboxFeatures(cssCache: {}, defaultTimeline: str, def htmlInboxNews(cssCache: {}, defaultTimeline: str, recentPostsCache: {}, maxRecentPosts: int, translate: {}, pageNumber: int, itemsPerPage: int, - session, baseDir: str, wfRequest: {}, personCache: {}, + session, baseDir: str, + cachedWebfingers: {}, personCache: {}, nickname: str, domain: str, port: int, inboxJson: {}, allowDeletion: bool, httpPrefix: str, projectVersion: str, @@ -1053,7 +1073,8 @@ def htmlInboxNews(cssCache: {}, defaultTimeline: str, return htmlTimeline(cssCache, defaultTimeline, recentPostsCache, maxRecentPosts, translate, pageNumber, - itemsPerPage, session, baseDir, wfRequest, personCache, + itemsPerPage, session, baseDir, + cachedWebfingers, personCache, nickname, domain, port, inboxJson, 'tlnews', allowDeletion, httpPrefix, projectVersion, False, minimal, YTReplacementDomain, @@ -1068,7 +1089,8 @@ def htmlInboxNews(cssCache: {}, defaultTimeline: str, def htmlOutbox(cssCache: {}, defaultTimeline: str, recentPostsCache: {}, maxRecentPosts: int, translate: {}, pageNumber: int, itemsPerPage: int, - session, baseDir: str, wfRequest: {}, personCache: {}, + session, baseDir: str, + cachedWebfingers: {}, personCache: {}, nickname: str, domain: str, port: int, outboxJson: {}, allowDeletion: bool, httpPrefix: str, projectVersion: str, @@ -1089,7 +1111,8 @@ def htmlOutbox(cssCache: {}, defaultTimeline: str, return htmlTimeline(cssCache, defaultTimeline, recentPostsCache, maxRecentPosts, translate, pageNumber, - itemsPerPage, session, baseDir, wfRequest, personCache, + itemsPerPage, session, baseDir, + cachedWebfingers, personCache, nickname, domain, port, outboxJson, 'outbox', allowDeletion, httpPrefix, projectVersion, manuallyApproveFollowers, minimal,