mirror of
https://github.com/zulip/zulip.git
synced 2025-11-15 11:22:04 +00:00
home: Refactor logic for several more settings.
The main functional change is there's now a code path for `user_profile is None`.
This commit is contained in:
@@ -110,8 +110,11 @@ def sent_time_in_epoch_seconds(user_message: Optional[UserMessage]) -> Optional[
|
|||||||
# Return the epoch seconds in UTC.
|
# Return the epoch seconds in UTC.
|
||||||
return calendar.timegm(user_message.message.date_sent.utctimetuple())
|
return calendar.timegm(user_message.message.date_sent.utctimetuple())
|
||||||
|
|
||||||
def get_bot_types(user_profile: UserProfile) -> List[Dict[str, object]]:
|
def get_bot_types(user_profile: Optional[UserProfile]) -> List[Dict[str, object]]:
|
||||||
bot_types = []
|
bot_types = [] # type: List[Dict[str, object]]
|
||||||
|
if user_profile is None: # nocoverage
|
||||||
|
return bot_types
|
||||||
|
|
||||||
for type_id, name in UserProfile.BOT_TYPES.items():
|
for type_id, name in UserProfile.BOT_TYPES.items():
|
||||||
bot_types.append({
|
bot_types.append({
|
||||||
'type_id': type_id,
|
'type_id': type_id,
|
||||||
@@ -167,16 +170,25 @@ def home_real(request: HttpRequest) -> HttpResponse:
|
|||||||
user_has_messages = (register_ret['max_message_id'] != -1)
|
user_has_messages = (register_ret['max_message_id'] != -1)
|
||||||
update_last_reminder(user_profile)
|
update_last_reminder(user_profile)
|
||||||
|
|
||||||
# Brand new users get narrowed to PM with welcome-bot
|
if user_profile is not None:
|
||||||
needs_tutorial = user_profile.tutorial_status == UserProfile.TUTORIAL_WAITING
|
|
||||||
|
|
||||||
first_in_realm = realm_user_count(user_profile.realm) == 1
|
first_in_realm = realm_user_count(user_profile.realm) == 1
|
||||||
# If you are the only person in the realm and you didn't invite
|
# If you are the only person in the realm and you didn't invite
|
||||||
# anyone, we'll continue to encourage you to do so on the frontend.
|
# anyone, we'll continue to encourage you to do so on the frontend.
|
||||||
prompt_for_invites = first_in_realm and \
|
prompt_for_invites = (
|
||||||
|
first_in_realm and
|
||||||
not PreregistrationUser.objects.filter(referred_by=user_profile).count()
|
not PreregistrationUser.objects.filter(referred_by=user_profile).count()
|
||||||
|
)
|
||||||
|
needs_tutorial = user_profile.tutorial_status == UserProfile.TUTORIAL_WAITING
|
||||||
|
else: # nocoverage
|
||||||
|
first_in_realm = False
|
||||||
|
prompt_for_invites = False
|
||||||
|
# The current tutorial doesn't super make sense for logged-out users.
|
||||||
|
needs_tutorial = False
|
||||||
|
|
||||||
if user_profile.pointer == -1 and user_has_messages:
|
if user_profile is None: # nocoverage
|
||||||
|
furthest_read_time = time.time() # type: Optional[float]
|
||||||
|
elif user_profile.pointer == -1:
|
||||||
|
if user_has_messages:
|
||||||
# Put the new user's pointer at the bottom
|
# Put the new user's pointer at the bottom
|
||||||
#
|
#
|
||||||
# This improves performance, because we limit backfilling of messages
|
# This improves performance, because we limit backfilling of messages
|
||||||
@@ -186,14 +198,13 @@ def home_real(request: HttpRequest) -> HttpResponse:
|
|||||||
|
|
||||||
register_ret['pointer'] = register_ret['max_message_id']
|
register_ret['pointer'] = register_ret['max_message_id']
|
||||||
user_profile.last_pointer_updater = request.session.session_key
|
user_profile.last_pointer_updater = request.session.session_key
|
||||||
|
furthest_read_time = None
|
||||||
if user_profile.pointer == -1:
|
|
||||||
latest_read = None
|
|
||||||
else:
|
else:
|
||||||
latest_read = get_usermessage_by_message_id(user_profile, user_profile.pointer)
|
latest_read = get_usermessage_by_message_id(user_profile, user_profile.pointer)
|
||||||
if latest_read is None:
|
if latest_read is None:
|
||||||
# Don't completely fail if your saved pointer ID is invalid
|
# Don't completely fail if your saved pointer ID is invalid
|
||||||
logging.warning("User %s has invalid pointer %s" % (user_profile.id, user_profile.pointer))
|
logging.warning("User %s has invalid pointer %s" % (user_profile.id, user_profile.pointer))
|
||||||
|
furthest_read_time = sent_time_in_epoch_seconds(latest_read)
|
||||||
|
|
||||||
# We pick a language for the user as follows:
|
# We pick a language for the user as follows:
|
||||||
# * First priority is the language in the URL, for debugging.
|
# * First priority is the language in the URL, for debugging.
|
||||||
@@ -206,7 +217,7 @@ def home_real(request: HttpRequest) -> HttpResponse:
|
|||||||
# something reasonable will happen in logged-in portico pages.
|
# something reasonable will happen in logged-in portico pages.
|
||||||
request.session[translation.LANGUAGE_SESSION_KEY] = translation.get_language()
|
request.session[translation.LANGUAGE_SESSION_KEY] = translation.get_language()
|
||||||
|
|
||||||
two_fa_enabled = settings.TWO_FACTOR_AUTHENTICATION_ENABLED
|
two_fa_enabled = settings.TWO_FACTOR_AUTHENTICATION_ENABLED and user_profile is not None
|
||||||
|
|
||||||
# Pass parameters to the client-side JavaScript code.
|
# Pass parameters to the client-side JavaScript code.
|
||||||
# These end up in a global JavaScript Object named 'page_params'.
|
# These end up in a global JavaScript Object named 'page_params'.
|
||||||
@@ -241,8 +252,8 @@ def home_real(request: HttpRequest) -> HttpResponse:
|
|||||||
needs_tutorial = needs_tutorial,
|
needs_tutorial = needs_tutorial,
|
||||||
first_in_realm = first_in_realm,
|
first_in_realm = first_in_realm,
|
||||||
prompt_for_invites = prompt_for_invites,
|
prompt_for_invites = prompt_for_invites,
|
||||||
furthest_read_time = sent_time_in_epoch_seconds(latest_read),
|
furthest_read_time = furthest_read_time,
|
||||||
has_mobile_devices = num_push_devices_for_user(user_profile) > 0,
|
has_mobile_devices = user_profile is not None and num_push_devices_for_user(user_profile) > 0,
|
||||||
bot_types = get_bot_types(user_profile),
|
bot_types = get_bot_types(user_profile),
|
||||||
two_fa_enabled = two_fa_enabled,
|
two_fa_enabled = two_fa_enabled,
|
||||||
# Adding two_fa_enabled as condition saves us 3 queries when
|
# Adding two_fa_enabled as condition saves us 3 queries when
|
||||||
|
|||||||
Reference in New Issue
Block a user