Commit Graph

53540 Commits

Author SHA1 Message Date
Alex Vandiver b555d3f553 digest: Cache per-stream recent topics, rather than batching.
The query plan for fetching recent messages from the arbitrary set of
streams formed by the intersection of 30 random users can be quite
bad, and can descend into a sequential scan on `zerver_recipient`.
Worse, this work of pulling recent messages out is redone if the
stream appears in the next batch of 30 users.

Instead, pull the recent messages for a stream on a one-by-one basis,
but cache them in an in-memory cache.  Since digests are enqueued in
30-user batches but still one-realm-at-a-time, work will be saved both
in terms of faster query plans whose results can also be reused across
batches.

This requires that we pull the stream-id to stream-name mapping for
_all_ streams in the realm at once, but that is well-indexed and
unlikely to cause performance issues -- in fact, it may be faster
than pulling a random subset of the streams in the realm.
2023-09-13 13:25:59 -07:00
Alex Vandiver ffb6c95bba email_notifications: Make stream_id_map optional to build_message_list.
This feels cleaner than passing an empty dict.
2023-09-13 13:25:59 -07:00
Alex Vandiver f8a9779b54 digest: Rename get_slim_stream_map slightly and explain its name more. 2023-09-13 13:25:59 -07:00
Alex Vandiver bca9821c89 digest: Rename get_recent_streams for clarity. 2023-09-13 13:25:59 -07:00
Alex Vandiver 524d4913b3 digest: Filter out users who have joined recently in SQL. 2023-09-13 13:25:59 -07:00
Alex Vandiver d8668ab242 digest: Narrow the query by only fetching the sender full name. 2023-09-13 13:25:59 -07:00
Alex Vandiver 058a168bfe digest: Rewrite target-user algorithm as one query.
There is no reason to do this set manipulation in Python.
2023-09-13 13:25:59 -07:00
Alex Vandiver 584c202d36 digest: Remove unnecessary should_process_digest function. 2023-09-13 13:25:59 -07:00
Vector73 5a88e4f6cb notifications: Remove realm-default-sound-audio initialization.
This commit removes the code to initialize
"realm-default-notification-sound-audio" element from
"notifications.initialize", because we do not need this
now as the previous commit added code to initialize it
in "settings_realm_user_settings_default.set_up".

This change works because the realm default notification sound
can only be played from the settings UI and so it is fine to
initialize it only when opening the default user settings panel.
2023-09-13 13:07:10 -07:00
Vector73 f384eb67a9 default-user-settings: Fix play button not playing selected sound.
Fixes #26598.
2023-09-13 13:07:10 -07:00
David Rosa 6505583b7e help: Update user management pages.
- Documents how to access the "Manage user" tab via a user's profile.
2023-09-13 13:06:04 -07:00
evykassirer a0df603aa7 puppeteer: Allow reruns in interactive mode when tests succeed.
We already allowed reruns for failing tests, and this adds
the ability to rerun tests that succeeded as well, which is
helpful for debugging flaky tests.
2023-09-13 12:46:22 -07:00
N-Shar-ma 89739ba3c3 widgets: Add test for tokenizing widget type on newline.
Follow up to #26643, adds test case for the bug fix.
2023-09-13 12:42:35 -07:00
Anders Kaseorg 2665a3ce2b python: Elide unnecessary list wrappers.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-09-13 12:41:23 -07:00
evykassirer eff0a73925 emoji: Add unified_reactions.json to the sha1sum. 2023-09-13 12:40:59 -07:00
Aman Agrawal 0723c56246 emoji_picker: Improve rendering time of emoji picker by ~30%.
Fixes #25744

By rendering the emojis after initializing the simplebar container,
the rendering time is decreased by ~30% as observed at 6x CPU
cooldown on mac i7.
2023-09-13 12:39:13 -07:00
Daniil Fadeev 2f1561e3b8 giphy: Fix giphy popover rendering on narrow screens.
We should render the giphy popover as a centered overlay for
mobile-sized screens.
2023-09-13 12:20:35 -07:00
Daniil Fadeev b7c2570933 giphy: Refactor the giphy popover to use toggle_popover_menu.
This change is needed so we can use the `use_as_overlay` option on
mobile screens.
2023-09-13 12:20:35 -07:00
Daniil Fadeev 5b0e74c940 user_card_popover: Rename `show_*` functions to `toggle_*`.
This naming more accurately reflects the functionality of these types
of functions. They are not only responsible for displaying the
popovers but also for toggling them off.
2023-09-13 11:49:12 -07:00
Daniil Fadeev e5da3d9900 user_card_popover: Extract user card popover data into a new function.
The purpose of this change is to simplify the
`render_user_card_popover` function, so it has the single
responsibility of just rendering.
2023-09-13 11:49:12 -07:00
Daniil Fadeev c5f6c00a81 popovers: Extract user info popovers into their own module.
The intent behind this commit is to tidy up how we handle user info
popovers. The first step is to move everything related to them into
its own module. This commit should not have any functional changes.
2023-09-13 11:49:08 -07:00
Daniil Fadeev 64f77b1dee popovers: Stop exporting `toggle_playground_link_popover` function.
This function is only used in the `popovers.js` module, so there's no
need to export it.
2023-09-13 11:48:31 -07:00
Daniil Fadeev 7bcb868f9a popovers: Use a special function to check if the popover is open. 2023-09-13 11:48:31 -07:00
Daniil Fadeev 257c327f39 user_profile: Move event registration to the correct place.
The event callback that was moved is part of `user_info_popover` and
should be registered along with the other actions of this popover.
2023-09-13 11:48:31 -07:00
Daniil Fadeev 523b5a0877 popovers: Remove unused functions from `popovers.js` module. 2023-09-13 11:48:31 -07:00
Daniil Fadeev 0a11a4b983 notifications: Extract notification title retrieval.
This commit aims to extract all logic related to obtaining
notification title from the `process_notification` function into
a separate `get_notification_title` function.
2023-09-13 11:18:35 -07:00
Daniil Fadeev fe5d680f27 notifications: Refactor `process_notification` function.
Turned multiple if statements into a switch/case and rearranged
variable declarations.
2023-09-13 10:55:59 -07:00
Daniil Fadeev 8b8f95b6f5 notifications: Extract sender name removal from recipients list. 2023-09-13 10:55:59 -07:00
Daniil Fadeev 53ef273665 notifications: Extract notification key retrieval.
This commit aims to extract all logic related to obtaining
notification key from the `process_notification` function into a
separate `get_notification_key` function.
2023-09-13 10:55:59 -07:00
Daniil Fadeev fdac13ba24 notifications: Extract `notification_source` debugging logic.
This commit aims to extract all logic related to debugging the value
of `notification_source` from the `process_notification` function into
 a separate `debug_notification_source_value` function.
2023-09-13 10:55:59 -07:00
Daniil Fadeev a11dedd393 notifications: Extract notification content retrieval.
This commit aims to extract all logic related to obtaining
notification content from the `process_notification` function into a
separate `get_notification_content` function.
2023-09-13 10:55:59 -07:00
Daniil Fadeev 8d0a70b6b9 notifications: Simplify if statement.
Since `pm_content_in_desktop_notifications` is a boolean, there's no
need to check if it's undefined.
2023-09-13 10:55:59 -07:00
Tim Abbott ba22433dd9 stream_popover: Inline register_stream_handlers.
Also register these click handlers just on the popover itself directly
in the onMount helper, like we do with all the other popover_menus.js
functions.
2023-09-13 10:55:40 -07:00
Daniil Fadeev 08aec5ac41 stream_popover: Migrate from Bootstrap to Tippy. 2023-09-13 10:55:40 -07:00
Daniil Fadeev f2f0462e09 stream_popover: Rename stream_popped to is_open.
stream_popover.is_open() much more accurately describes what this
does, and in particular the fact that the function applies to all
places the stream popover might be.
2023-09-13 10:55:40 -07:00
Daniil Fadeev 35d97160bc stream_popover: Use currentTarget as reference to the stream popover.
Using currentTarget as a reference element guarantees us that the
relative placement will be the same every time.
2023-09-13 10:55:40 -07:00
Daniil Fadeev e0f72de75c stream_popover: Update the comment that describes the module. 2023-09-13 10:55:40 -07:00
Daniil Fadeev 71de1c2a66 popovers: Use `media_breakpoint_num` instead of a constant value. 2023-09-13 10:55:40 -07:00
Karl Stolley f4fdc5c97c thirdparty: Add Feather Icon credits.
All of these files were introduced in #26283.
2023-09-12 13:08:18 -07:00
Karl Stolley b5bd439769 thirdparty: Use hyphen in date ranges.
While an en dash--as replaced here with a hyphen--is sounder
typographically, the other ranges in the file use a hyphen, which
is arguably also more interoperable in a plain-text file such as
this (though other en dashes live on in the file, as part of the
original licensing text).
2023-09-12 13:08:18 -07:00
Karl Stolley d870f2af24 thirdparty: Add period after Twitter, Inc.
This makes all shortened forms of "incorporated" uniform across
the file, and matches how "Twitter, Inc." is presented in the files
in question, e.g., atop `web/third/bootstrap/js/bootstrap.js`.
2023-09-12 13:08:18 -07:00
Karl Stolley 0d3f475a91 thirdparty: Uniformly present copyright years without commas.
While the spec permits forms both with and without a comma,
https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/#copyright-field,
this corrects a small number of licensing lines in the file to
match the comma-less form used in the majority of other lines.
2023-09-12 13:08:18 -07:00
Karl Stolley 0c9701b921 thirdparty: Update current year on Kandra copyright. 2023-09-12 13:08:18 -07:00
Karl Stolley 8c0c2c7da6 thirdparty: Add missing comma after Kandra Labs. 2023-09-12 13:08:18 -07:00
Karl Stolley 35730f0291 thirdparty: Alphabetize entries by path. 2023-09-12 13:08:18 -07:00
Anders Kaseorg 8efa418205 typed_endpoint: Add missing tuple comma for OptionalTopic aliases.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-09-12 11:49:11 -07:00
Anders Kaseorg 9abb850cd9 docs: Use MyST syntax for Sphinx metadata.
https://myst-parser.readthedocs.io/en/latest/faq/index.html#sphinx-specific-page-front-matter

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-09-12 10:34:03 -07:00
Alex Vandiver 135acfea93 nginx: Suppress proxy warnings when the proxy itself sent the request.
This is common in cases where the reverse proxy itself is making
health-check requests to the Zulip server; these requests have no
X-Forwarded-* headers, so would normally hit the error case of
"request through the proxy, but no X-Forwarded-Proto header".

Add an additional special-case for when the request's originating IP
address is resolved to be the reverse proxy itself; in these cases,
HTTP requests with no X-Forwarded-Proto are acceptable.
2023-09-12 10:10:58 -07:00
Aman Agrawal a8e1c22687 inbox: Add support for vim keys. 2023-09-12 09:20:33 -07:00
Aman Agrawal 6c179bcc48 inbox: Show focus underline for non-dm rows. 2023-09-12 09:20:33 -07:00