Updated the code to use the libSession encrypt/decrypt functions for the 'groupKicked' message
Updated the code to use the libSession function to load the admin key when receiving a promotion instead of reloading the config state
Changed the NotificationsManager and NotificationActionHandler to be injected via dependencies instead of the Environment
Mocked out the NotificationsManager for unit testing
Added a dev setting to disable the group auto-approve for admins which are contacts (for testing purposes)
Added logic to unsubscribe and resubscribe for PNs when swapping environments
Added the DeveloperSettingsViewModel and dependency-controlled feature flags
Added the generic 'SessionListViewModel' to reduce duplicate code when we want to just display a selectable list of items
Added an indicator on the home screen to show when using testnet
Added group promotions behind a feature flag
Updated the PushNotificationAPI to use bulk subscribe/unsubscribe requests
Updated the 'GroupUpdateDeleteMessage' and 'GroupUpdateDeleteMemberContentMessage' to support additional behaviours
Updated the SessionCell to have better RTL support (swapped some left/right things to leading/trailing)
Updated the revoke/unrevoke endpoints to take arrays of subaccount tokens
Refactored the Bencode logic to properly support Codable types
Started adding tests for the DisplayPictureDownloadJob
Cleaned up the Crypto singleton a bit
Moved the DisplayPictureManager encryption/decryption into Crypto methods
Added the updated revoke & unrevoke endpoints when removing and adding group members
Updated the group creation to upload the provided image and set it to the group correctly
Added logic to handle promotion messages
Added a debounced toast for promotion failures
Added support for the 'delete_before' and 'attach_delete_before' functionality
Added in the deprecated legacy groups banner.
Cleaned up the UserListViewModel a little
Updated the 'User count' header subtitle to take the user to the 'Group Members' or 'Edit Group' screens based on admin status
Updated the sorting of the group member lists to match the requirements
Fixed the debounced group invite failure toast
Fixed an issue where some libSession errors wouldn't get propagated back into the Swift code resulting in invalid database changes
Fixed an issue where admins couldn't properly leave groups
Added invitation statuses for updated groups
Added the invite and failed invite toasts
Added proper support for the group description
Refactored the EditClosedGroupVC and UserSelectionVC to use the SessionTableViewModel
Updated the ObservableTableSource to support forcing a refresh either before or after the database observation
Removed support for the per-thread notification sound
Added logic for Group Message Requests
Added a 'ManualResultJob' which allows for a way to add a dependency to a job which can be resolved separately from the job system (it's not persistent though)
Added the ability for admins to delete select messages from updated groups
Swapped 'save'/'saved' calls to be 'upsert'/'upserted' as that's the actual behaviour we expect (unique key based rather than primary key based)
Fixed a bug where the 'limitedReuse' 'drainBehaviour' could get stuck in an invalid state
Fixed a bug where job dependencies could swap queues which could theoretically result in deadlocks in some cases
Added logic to trigger and handle destroyed groups
Added logic to trigger and handle handle supplementary key rotations (libSession implementation is WIP)
Added logic for 'remove user and their content'
Added the ability to associate a callback to any arbitrary job
Added data support for the group description value
Added logic to handle being kicked from a group
Added logs for failed GROUP_KEYS merges (already have for other config types)
Fixed an issue where the initial key generation didn't include the initial members
Fixed a crash which could occur when creating a conversation via handling a USER_GROUPS config
Fixed an issue where manually triggering the ConfigurationSyncJob might not ever get a callback
Updated to have the latest Protobuf tweaks
Removed recognition of the LegacyConfigurationMessage
Got a number of the GroupUpdate messages working properly
Updated the DisplayPictureDownloadJob to support OpenGroup room images
Updated the Poller to process messages by namespace (sorted) and added support for synchronous handling of messages
Reworked the ProfileManager to be a more reusable DisplayPictureManager
Cleaned up the conversion from milliseconds to TimeInterval (which is documented as seconds) for clarity
Fixed a read/write crash due to the SnodeAPI cache setup
Fixed an issue where dependencies could incorrectly overwrite each other when based on protocols
Added additional properties to the Group to simplify the code
Added the roleStatus to the GroupMember for future functionality
Fixed a bug where the input field might not appear if a group becomes valid while it's open
Fixed a bug where updated groups might not get their states loaded into memory under certain conditions
Removed some duplicate code
Fixed the incorrect Group Namespaces
Fixed an incorrect identity generation which could create invalid accounts
Fixed an issue where adding group members would remove admins incorrectly
Finished updating the SnodeAPI to use prepared requests
Fixed an issue where starting and then restarting onboarding would get the app into an invalid state
Fixed an issue where newline characters could cause issues with parsing the recovery phrase
Added additional logs to better be able to understand the database state
Updated the updated group messages encryption/decryption logic to work with the latest libSession
Disabled manual PN triggering for updated group messages
Properly fixed the busted migration issue
Updated to the latest version of Quick and Nimble (unit testing libraries)
Updated the tests based on the above
Fixed an issue with the Emoji generation
Fixed the SessionThread 'isPinned' property
Fixed an issue when migrating from a pre 2.3.0 version to the latest version
Updated the message send/receive pipelines to better handle config and updated group messages
Changed the hard-coded 'WebSocketRequestMessage' proto wrapper to not have random data
Removed the old 'SharedConfigMessage' (deprecated and removed within 'libSession')
Added 'name' value to updated groups USER_GROUP entry
Added ConvoInfoVolatile for updated groups
Cleaned up a bunch of direct sodium usages
Updated the code to create GroupMember entries based on the GROUP_MEMBERS config
Updated to the latest libSession
Fixed a bunch of group authentication issues
Fixed a minor threading issue
Fixed an issue with the PreparedRequest type conversion
Fixed an issue where receiving a PN for outgoing messages could break the NotificationServiceExtension
Fixed an issue where the NotificationServiceExtension could startup in an invalid way resulting in subsequent PNs failing to process
Fixed an issue where you could incorrectly receive multiple generic notifications after receiving an incoming call notification
Fixed an issue where the read state syncing might not clear notifications from the notification center
Fixed an issue with parsing Bencoded data
Updated the PN subscription to subscribe to CONVO_INFO_VOLATILE notifications (update read state)
Updated the NotificationServiceExtension to use standard message processing where possible
Updated the NotificationServiceExtension to update the app badge based on a database query
Started refactored some logic to make it easier for unit testing
Started updating SnodeAPI calls with prepared requests
Fixed some issues with the PreparedRequest 'map' and 'handleEvents' functions
Genericised common pre-request behaviours for SnodeAPI calls
Added a work around for getting an SQLite Busy exception on startup (should only be caused by edge-cases, unsure what the impact of the workaround will be if the db is actually busy)
Updated the auth to work for updated groups
Cleaned up group creation to seemingly work properly (not syncing for some reason)
Fixed an bug where config messages could be processed in the wrong order
Tweaked the behaviour or removing threads (this would cause issues with future config-based settings changes that live on the thread getting lost)
Started writing up wrappers and unit tests for group config types
Refactored some duplicate batch & prepared request code to be more generic and reusable
Renamed a number of legacy closed group functions to have the term 'legacy' in them for ease of coding
Added the ability to define requirements for migrations (in case some data or state needs to be loaded for a migration to be able to be performed correctly)
Added logic to broadcast the community message request acceptance to SOGS so we can communicate it to message request senders
Fixed an issue where database setting changes wouldn't trigger a live update on a settings screen
Fixed an issue where some setting toggles wouldn't animate the state change
Fixed a rarw force-unwrap crash