• Added a separate feature flag for deprecating legacy groups
• Added the ability for a legacy group admin to "Recreate" the group (ie. pre-fill a new group with the same members)
• Updated the "Leave" button to be "Delete" for legacy groups once deprecated
• Disabled the "mark as unread" action for legacy groups once deprecated
• Disabled the input and conversation settings for legacy groups once deprecated
• Disabled the long press menu and removing reactions for legacy groups once deprecated
• Reworked synchronous database access to prevent reentrancy issues
• Updated the JobExecuter to take a "Scheduler" rather than a "DispatchQueue" (allows for a potentially refactor to use "OperationQueue" instead if we want more fine-tuned control over the number of concurrent executions which can occur)
• Updated the "Delete for Everyone" behaviour to show a blocking loading indicator if a network request is required
• Removed some duplicate code
• Fixed an issue where mentions wouldn't filter correctly for groups in some cases
• Fixed an issue where legacy group members could appear in the members list multiple times when navigating there from the conversation title
• Fixed an issue where the message deletion toasts could appear behind blurred modal backgrounds
• Fixed an issue where pasting text which is too large into an empty input field would result in the text having the default OS styling instead of the text styling we have set
• Added a 2000 limit to the input field
• Added an error when opening the share extension before completing onboarding
• Updated the code to treat an empty `adminSignature` as null (in case a client sends it incorrectly)
• Updated the code to include updated group control messages when determining unread
• Updated code to perform a supplemental key rotation (if needed) when resending invites to members flagged as supplemental (to handle a case where the initial invite request failed)
• Updated the code to schedule group config update control messages when making the local changes but make their sending contingent on the next config sync succeeding
• Updated the code to only enable the Share and Notification extensions once the onboarding process has been completed
• Updated the code to always enqueue config syncs for all configs on launch (if there are no pending changes then it won't do anything, but if there are then this will increase the likelihood that they will be synced)
• Fixed an issue where the default contacts query was based on thread records instead of contact records
• Fixed an issue where creating a conversation by tapping on a group member or avatar wasn't correctly creating the conversation in the draft state
• Fixed an issue where incoming messages could be added to the "Note to Self" conversation if the "syncTarget" was incorrectly set on them
• Added some localised copy
• Added the helpdesk article URL for the deprecated groups banner
• Updated mentions to include the current user in groups, 1-1 and NTS conversations (also made the current user appear as "you")
• Fixed a layout issue with the deleted message view
• Fixed an issue where the "mark as unread" action would incorrectly appear for the Note to Self conversation
• Fixed an issue where we were incorrectly sending an ExpirationTimerUpdate in some cases
• Added logic to trigger a full refetch when getting promoted to admin within a group
• Added a timeout to display picture uploads
• Updated the code to inject the DisplayPictureManager via dependencies
• Updated the resend invite functionality to have a blocking loading indicator as well
• Refactored some closure-based logic for display picture uploads to use Combine instead
• Refactored the SnodeReceivedMessageInfo (with a migration) so it's no longer using a weird constructed key (now have individual queryable columns for the values)
• Fixed a crash due to our ThreadSafe code using a struct instead of a class (rendering it non thread safe)
• Fixed a crash which could occur on the home screen if the data loaded before the UI finished loading
• (Hopefully) Fixed a crash which could occur when the OS optimised async execution to run immediately within an existing database transaction (potentially resulting in re-entrant database access)
• Fixed an issue where the database read/write publishers weren't checking for a valid database state before actual query execution (only during the creation of the stream)
• Added a unit test to validate the GroupMember sorting continues to work as expected
• Updated the AppSetup process to be simpler (no need to check if it had previously run anymore)
• Removed some state management code from the NotificationServiceExtension (no longer needed now that state is properly managed via the Dependencies)
• Fixed an issue where if you had updated another client, gotten updated groups in your config, and then update the iOS client then it wouldn't create the updated groups until a UserGroups config change occurred
• Fixed a bug where we would incorrectly try to retrieve the disappearing messages settings for V2 Groups from the UserGroups config instead of the GroupInfo one
• Fixed an issue where the updated groups poller might not get started correctly in some cases
• Fixed an issue where we could incorrectly add a "you were invited..." control message on linked devices when creating an updated group
• Fixed an issue where the "open url" modal wouldn't be dismissed when copying the url
• Fixed an issue where reactions could appear on locally deleted community messages
• Fixed an issue where the "Note to Self" conversation could be mislabelled in the share extension
• Fixed an issue where sharing a url with a preview would fail
• Fixed an issue where a quote for an attachment wouldn't show the thumbnail if the conversation was open when the quote message was received
• Fixed an issue where the background colour of the display picture could be incorrect when in a multi-avatar for a group conversation
• Added the updated light-mode warning colour
• Updated the group version warning banner to explicitly use the primary orange colour
• Fixed an incorrect colour for radio options in the modal
• Fixed an issue where non-admins would incorrectly try to remove obsolete group config hashes (which is not allowed)
• Updated to the latest Lucide version
• Updated the bin icons to use the new Lucide icon
• Fixed an issue where flagging a members messages to be deleted when kicking them wasn't using the standard message removal process
• Fixed an issue where you couldn't delete a group after it was destroyed
• Fixed an issue where being promoted to admin would fail because you weren't already an admin
• Fixed an issue where the share extension wasn't populating it's conversation list
• Fixed an issue where the share extension had a translucent header
• Fixed an issue where messages could incorrectly be considered disappearing messages (with no duration)
• Fixed an issue where non-admins couldn't locally delete messages in community conversations
• Fixed an issue where deleting Note to Self messages for all devices was incorrectly leaving an artifact
• Fixed an issue where emoji reacts added to messages which have been deleted locally would still get added to the deleted artifact
• Fixed a layout issue in groups/communities with the "this message was deleted" artifact
• Fixed an issue where highlighting and unhighlighting a "danger" action in the context menu would result in it changing to a non-danger colour
• Fixed an issue where the community poller always thought it was the initial poll
• Added a loading indicator while config syncing is happening while sending group invitations/promotions
• Added a mechanism to trigger a libSession config change but prevent the change from enqueuing a config sync (so we can do a blocking sync)
• Fixed a couple of bugs where the disappearing message control messages could behave incorrectly in updated groups
• Fixed an issue where deleting a message which was quoted by another message wouldn't remove the quoted content until returning to the screen
• Fixed an issue where a leaving member could appear to be removed before they were actually removed
• Fixed an issue where a group member wouldn't return to the "sending" state when resending an invitation
• Fixed an issue where the current user could see group admins actions before they had been flagged as an accepted admin
• Added updated member statuses
• Updated to latest libSession (includes group status changes and breaking GroupKeys change)
• Fixed an issue where starting a new conversation on a new account could result in being kicked out of the conversation after a couple of seconds
• Fixed an issue where blocking a group invite would result in the senders contact conversation reverting to a message request
• Fixed an issue where deleting all attachments before now wouldn't leave behind the "message was deleted" artifact
• Fixed an issue where deleting all attachments before now was incorrectly deleting voice messages
• Fixed an issue where deleting all attachments before now wasn't deleting quote thumbnails
• Fixed an issue where you could never delete a group after being kicked
• Fixed an issue where some updated group control messages would be dropped by linked devices