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 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
Updated the convoInfoVolatile to only ever set `last_read` to the maximum between the current and updated values
Fixed an issue where deleting the Note to Self and One-to-one conversations wouldn't reset the 'pinnedPriority' value
Fixed an issue with updating legacy group members and losing admin status
Fixed an issue where receiving a 'NEW' legacy group control message could revert legacy group changes
Fixed a bug where the open group suggestion grid could have broken positioning depending on the number of items
Fixed a bug where the UI wouldn't update correctly when network access was lost
Fixed a fun bug where one-to-one conversations could reappear after deletion because a new snode was polled and the latest (locally deleted) message was received again
Fixed some incorrect accessibility values
Added an isHidden flag to the GroupMember
Reset the OpenGroup 'infoUpdates' value to force a re-fetch of the data and fix users affected by this bug
Fixed the broken unit tests
Fixed a couple of issues around the duplicate messages handling
Fixed a few issues with ClosedGroup polling and ClosedGroup control message handling
Started working through updating the MediaGallery
Tested and fixed a couple of issues with the disappearingMessages job
Added a simple dependency system for jobs (primarily for the AttachmentUploadJob, but will likely be others later)
Setup the AttachmentUploadJob again (looks like there are cases which use it)
Prevented a possible infinite job deferral loop from causing the app to crash (the loop is still technically possible but the app will continue to run now)
Updated the interactions unique constraints based on testing and discussions around how the serverHash works
Deleted the legacy ReadReceipt handling (now managed via the 'interaction.wasRead' flag and 'SendReadReceiptsJob')
Deleted the unused SSKIncrementingIdFinder
Refactored the SignalApp class to Swift
Fixed a horizontal alignment issue in the ConversationTitleView
Fixed an issue where expiration timer update messages weren't migrated or rendering correctly
Fixed an issue where expiring messages weren't migrated correctly
Fixed an issue where closed groups which had been left were causing migration failures (due to data incorrectly being assumed to be required)
Shifted the Legacy Attachment types into the 'SMKLegacy' namespace
Moved all of the NSCoding logic for the TSMessage
Refactored the AppDelegate from Objective C to Swift
Updated the HomeVC to use GRDB
Refactored a number of the Job types to be driven via GRDB and the new JobRunner
Fixed a bug where the LinkPreviewView wouldn't render correctly in dark mode
Added the rest of the interaction structure to the database (testing some migration logic now - still needs to be finalised)
Updated the YDBToGRDB migrations to wrap their inserts in autorelease pools (helps memory slightly, unfortunately it's caching the YDB data which uses the most memory but we have opted for speed over RAM at the moment)
Updated the MockDataGenerator so it should now "chunk" the code generation (crazy large figures were previously resulting in excessive memory usage)
Added migrations for contacts and started working through thread migration (have contact and closed group threads migrating)
Deprecated usage of ECKeyPair in the migrations (want to be able to remove Curve25519Kit in the future)