Final welcome screen

main
Bob Mottram 2021-02-25 16:55:40 +00:00
parent a2dc870296
commit 6dd4e43354
5 changed files with 147 additions and 24 deletions

View File

@ -181,9 +181,11 @@ from webapp_search import htmlSearchEmojiTextEntry
from webapp_search import htmlSearch from webapp_search import htmlSearch
from webapp_hashtagswarm import getHashtagCategoriesFeed from webapp_hashtagswarm import getHashtagCategoriesFeed
from webapp_hashtagswarm import htmlSearchHashtagCategory from webapp_hashtagswarm import htmlSearchHashtagCategory
from webapp_welcome import welcomeScreenIsComplete
from webapp_welcome import htmlWelcomeScreen from webapp_welcome import htmlWelcomeScreen
from webapp_welcome import isWelcomeScreenComplete from webapp_welcome import isWelcomeScreenComplete
from webapp_welcome_profile import htmlWelcomeProfile from webapp_welcome_profile import htmlWelcomeProfile
from webapp_welcome_final import htmlWelcomeFinal
from shares import getSharesFeedForPerson from shares import getSharesFeedForPerson
from shares import addShare from shares import addShare
from shares import removeShare from shares import removeShare
@ -4046,13 +4048,19 @@ class PubServer(BaseHTTPRequestHandler):
postImageFilename) postImageFilename)
postBytesStr = postBytes.decode('utf-8') postBytesStr = postBytes.decode('utf-8')
print('postBytesStr: ' + postBytesStr) redirectPath = ''
if '&previewAvatar=' in postBytesStr: checkNameAndBio = False
print('previewAvatar in postBytes') if 'name="previewAvatar"' in postBytesStr:
if '&prevWelcomeScreen=' in postBytesStr: redirectPath = '/welcome_profile'
print('prevWelcomeScreen in postBytes') elif 'name="initialWelcomeScreen"' in postBytesStr:
if '&nextWelcomeScreen=' in postBytesStr: redirectPath = '/welcome'
print('nextWelcomeScreen in postBytes') elif 'name="finalWelcomeScreen"' in postBytesStr:
checkNameAndBio = True
redirectPath = '/welcome_final'
elif 'name="welcomeCompleteButton"' in postBytesStr:
redirectPath = '/' + self.server.defaultTimeline
welcomeScreenIsComplete(self.server.baseDir, nickname,
self.server.domain)
# extract all of the text fields into a dict # extract all of the text fields into a dict
fields = \ fields = \
@ -4184,7 +4192,12 @@ class PubServer(BaseHTTPRequestHandler):
actorJson['name'] = displayName actorJson['name'] = displayName
else: else:
actorJson['name'] = nickname actorJson['name'] = nickname
if checkNameAndBio:
redirectPath = 'previewAvatar'
actorChanged = True actorChanged = True
else:
if checkNameAndBio:
redirectPath = 'previewAvatar'
# change media instance status # change media instance status
if fields.get('mediaInstance'): if fields.get('mediaInstance'):
@ -4547,7 +4560,12 @@ class PubServer(BaseHTTPRequestHandler):
for tagName, tag in actorTags.items(): for tagName, tag in actorTags.items():
actorJson['tag'].append(tag) actorJson['tag'].append(tag)
actorChanged = True actorChanged = True
else:
if checkNameAndBio:
redirectPath = 'previewAvatar'
else: else:
if checkNameAndBio:
redirectPath = 'previewAvatar'
if actorJson['summary']: if actorJson['summary']:
actorJson['summary'] = '' actorJson['summary'] = ''
actorChanged = True actorChanged = True
@ -5034,7 +5052,8 @@ class PubServer(BaseHTTPRequestHandler):
i2pDomain): i2pDomain):
actorStr = \ actorStr = \
'http://' + i2pDomain + usersPath 'http://' + i2pDomain + usersPath
self._redirect_headers(actorStr, cookie, callingDomain) self._redirect_headers(actorStr + redirectPath,
cookie, callingDomain)
self.server.POSTbusy = False self.server.POSTbusy = False
def _progressiveWebAppManifest(self, callingDomain: str, def _progressiveWebAppManifest(self, callingDomain: str,
@ -10682,6 +10701,7 @@ class PubServer(BaseHTTPRequestHandler):
'show about screen done', 'show about screen done',
'robots txt') 'robots txt')
# the initial welcome screen after first logging in
if htmlGET and authorized and \ if htmlGET and authorized and \
'/users/' in self.path and self.path.endswith('/welcome'): '/users/' in self.path and self.path.endswith('/welcome'):
nickname = self.path.split('/users/')[1] nickname = self.path.split('/users/')[1]
@ -10705,6 +10725,7 @@ class PubServer(BaseHTTPRequestHandler):
else: else:
self.path = self.path.replace('/welcome', '') self.path = self.path.replace('/welcome', '')
# the welcome screen which allows you to set an avatar image
if htmlGET and authorized and \ if htmlGET and authorized and \
'/users/' in self.path and self.path.endswith('/welcome_profile'): '/users/' in self.path and self.path.endswith('/welcome_profile'):
nickname = self.path.split('/users/')[1] nickname = self.path.split('/users/')[1]
@ -10731,6 +10752,33 @@ class PubServer(BaseHTTPRequestHandler):
else: else:
self.path = self.path.replace('/welcome_profile', '') self.path = self.path.replace('/welcome_profile', '')
# the final welcome screen
if htmlGET and authorized and \
'/users/' in self.path and self.path.endswith('/welcome_final'):
nickname = self.path.split('/users/')[1]
if '/' in nickname:
nickname = nickname.split('/')[0]
if not isWelcomeScreenComplete(self.server.baseDir,
nickname,
self.server.domain):
msg = \
htmlWelcomeFinal(self.server.baseDir, nickname,
self.server.domain,
self.server.httpPrefix,
self.server.domainFull,
self.server.systemLanguage,
self.server.translate)
msg = msg.encode('utf-8')
msglen = len(msg)
self._login_headers('text/html', msglen, callingDomain)
self._write(msg)
self._benchmarkGETtimings(GETstartTime, GETtimings,
'show welcome profile screen',
'show welcome final screen')
return
else:
self.path = self.path.replace('/welcome_final', '')
# if not authorized then show the login screen # if not authorized then show the login screen
if htmlGET and self.path != '/login' and \ if htmlGET and self.path != '/login' and \
not self._pathIsImage(self.path) and \ not self._pathIsImage(self.path) and \

View File

@ -0,0 +1,10 @@
# Congratulations!
You are now ready to begin using Epicyon. This is a moderated social space, so please make sure to abide by our [terms of service](/terms), and have fun.
### Hints
Use the **magnifier** icon 🔍 to search for fediverse handles and follow people.
Selecting the **banner at the top** of the screen switches between timeline view and your profile.
The screen will not automatically refresh when posts arrive, so use **F5** or the **Inbox** button to refresh.

View File

@ -24,20 +24,20 @@ def isWelcomeScreenComplete(baseDir: str, nickname: str, domain: str) -> bool:
return os.path.isfile(completeFilename) return os.path.isfile(completeFilename)
# def welcomeScreenIsComplete(baseDir: str, def welcomeScreenIsComplete(baseDir: str,
# nickname: str, domain: str) -> None: nickname: str, domain: str) -> None:
# """Indicates that the welcome screen has been shown for a given account """Indicates that the welcome screen has been shown for a given account
# """ """
# accountPath = baseDir + '/accounts/' + nickname + '@' + domain accountPath = baseDir + '/accounts/' + nickname + '@' + domain
# if not os.path.isdir(accountPath): if not os.path.isdir(accountPath):
# return return
# completeFilename = accountPath + '/.welcome_complete' completeFilename = accountPath + '/.welcome_complete'
# completeFile = open(completeFilename, 'w+') completeFile = open(completeFilename, 'w+')
# if completeFile: if completeFile:
# completeFile.write('\n') completeFile.write('\n')
# completeFile.close() completeFile.close()
#
#
def htmlWelcomeScreen(baseDir: str, def htmlWelcomeScreen(baseDir: str,
language: str, translate: {}, language: str, translate: {},
currScreen='welcome', currScreen='welcome',

View File

@ -0,0 +1,65 @@
__filename__ = "webapp_welcome_final.py"
__author__ = "Bob Mottram"
__license__ = "AGPL3+"
__version__ = "1.2.0"
__maintainer__ = "Bob Mottram"
__email__ = "bob@freedombone.net"
__status__ = "Production"
import os
from shutil import copyfile
from utils import getConfigParam
from webapp_utils import htmlHeaderWithExternalStyle
from webapp_utils import htmlFooter
from webapp_utils import markdownToHtml
def htmlWelcomeFinal(baseDir: str, nickname: str, domain: str,
httpPrefix: str, domainFull: str,
language: str, translate: {}) -> str:
"""Returns the final welcome screen after first login
"""
# set a custom background for the welcome screen
if os.path.isfile(baseDir + '/accounts/welcome-background-custom.jpg'):
if not os.path.isfile(baseDir + '/accounts/welcome-background.jpg'):
copyfile(baseDir + '/accounts/welcome-background-custom.jpg',
baseDir + '/accounts/welcome-background.jpg')
finalText = 'Welcome to Epicyon'
finalFilename = baseDir + '/accounts/welcome_final.md'
if not os.path.isfile(finalFilename):
defaultFilename = \
baseDir + '/defaultwelcome/final_' + language + '.md'
if not os.path.isfile(defaultFilename):
defaultFilename = baseDir + '/defaultwelcome/final_en.md'
copyfile(defaultFilename, finalFilename)
if os.path.isfile(finalFilename):
with open(finalFilename, 'r') as finalFile:
finalText = markdownToHtml(finalFile.read())
finalForm = ''
cssFilename = baseDir + '/epicyon-welcome.css'
if os.path.isfile(baseDir + '/welcome.css'):
cssFilename = baseDir + '/welcome.css'
instanceTitle = \
getConfigParam(baseDir, 'instanceTitle')
finalForm = htmlHeaderWithExternalStyle(cssFilename, instanceTitle)
finalForm += '<div class="container">' + finalText + '</div>\n'
finalForm += \
'<form enctype="multipart/form-data" method="POST" ' + \
'accept-charset="UTF-8" ' + \
'action="/users/' + nickname + '/profiledata">\n'
finalForm += '<div class="container next">\n'
finalForm += \
' <button type="submit" class="button" ' + \
'name="previewAvatar">' + translate['Go Back'] + '</button>\n'
finalForm += \
' <button type="submit" class="button" ' + \
'name="welcomeCompleteButton">' + translate['Next'] + '</button>\n'
finalForm += '</div>\n'
finalForm += '</form>\n'
finalForm += htmlFooter()
return finalForm

View File

@ -100,10 +100,10 @@ def htmlWelcomeProfile(baseDir: str, nickname: str, domain: str,
profileForm += '<div class="container next">\n' profileForm += '<div class="container next">\n'
profileForm += \ profileForm += \
' <button type="submit" class="button" ' + \ ' <button type="submit" class="button" ' + \
'name="prevWelcomeScreen">' + translate['Go Back'] + '</button> ' 'name="initialWelcomeScreen">' + translate['Go Back'] + '</button> '
profileForm += \ profileForm += \
' <button type="submit" class="button" ' + \ ' <button type="submit" class="button" ' + \
'name="nextWelcomeScreen">' + translate['Next'] + '</button>\n' 'name="finalWelcomeScreen">' + translate['Next'] + '</button>\n'
profileForm += '</div>\n' profileForm += '</div>\n'
profileForm += '</form>\n' profileForm += '</form>\n'