Fixed a busted version comparison
Fixed an issue where the config dump population wasn't setting the 'created' timestamp for contacts
Fixed an issue where the 'SyncPushTokensJob' could run logic on the wrong thread
Fixed a bug where the 'scroll to bottom' button wouldn't initial be visible in some cases
Fixed a bug where the 'scroll to bottom' button would fade out when there were subsequent pages
Fixed a bug where an open group image might not get downloaded in some cases
Fixed an issue where we would incorrectly append a wildcard character to the end of a search term that ended in a quotation mark
Finished refactoring the OpenGroupAPI to use PreparedSendData
Added copy for an unrecoverable startup case
Added some additional logs to better debug ValueObservation query errors
Increased the pageSize to 20 on iPad devices (to prevent it immediately loading a second page)
Cleaned up a bunch of threading logic (try to avoid overriding subscribe/receive threads specified at subscription)
Consolidated the 'sendMessage' and 'sendAttachments' functions
Updated the various frameworks to use 'DAWRF with DSYM' to allow for better debugging during debug mode (at the cost of a longer build time)
Updated the logic to optimistically insert messages when sending to avoid any database write delays
Updated the logic to avoid sending notifications for messages which are already marked as read by the config
Fixed an issue where multiple paths could incorrectly get built at the same time in some cases
Fixed an issue where other job queues could be started before the blockingQueue finishes
Fixed a potential bug with the snode version comparison (was just a string comparison which would fail when getting to double-digit values)
Fixed a bug where you couldn't remove the last reaction on a message
Fixed the broken media message zoom animations
Fixed a bug where the last message read in a conversation wouldn't be correctly detected as already read
Fixed a bug where the QuoteView had no line limits (resulting in the '@You' mention background highlight being incorrectly positioned in the quote preview)
Fixed a bug where a large number of configSyncJobs could be scheduled (only one would run at a time but this could result in performance impacts)
Updated to the latest libSession to increase the available size for config message content (size check now happens after compression rather than before)
Added some additional logs for config size info
Fixed a bug where the database could be accessed before the migrations ran which could result in unexpected behaviours
Fixed a bug where you couldn't mark a non one-to-one thread as read/unread
Fixed a bug where a database initialization failure wouldn't result in a migration failure (user would be stuck on the splash screen indefinitely)
Fixed a bug where if a message was too large for the screen the conversation would open it centered on the screen (now it will be positioned to the top)
Started looking at broken unit tests
Increased the build number
Created a ConfigMessageReceiveJob just to clean up the logs a bit
Updated the poller to make any MessageReceive jobs dependant on any ConfigMessageReceive jobs which are created
Updated legacy groups to delete the group content when you are removed
Fixed an issue where the JobRunner wouldn't stop pending jobs while clearing data
Fixed another issue with the profile view in the message cell
Fixed an issue where you could be left on the settings screen after deleting/leaving a conversation
Fixed an issue where deleting the last contact/group/community from a device would result in linked devices not deleting the relevant conversation
Fixed an issue where leaving a group created a race condition where linked devices wouldn't remove the group
Fixed an issue where the GlobalSearch push animation could be jittery
Fixed a crash which could occur when returning from the background on certain screens
Removed the keyboard dismiss animation when pushing from global search to a conversation (apparently this is how iMessage avoids the animation bug...)
Updated to the latest version of GRDB
Updated the Atomic wrapper to use the ReadWrite lock for less blocking behaviours
Updated the audio attachment icon to be consistent with Android & Desktop
Updated the QuoteView to omit the "author" if we don't have their name and the quote can't be found
Added some more logs to libSession build script and tweaked the stdout location
Added shadow threads to the GarbageCollectionJob
Changed the seed node retries to 2 because it's likely we will swap to another seed node pretty quickly which could resolve the issue
Fixed a bug where the user could get kicked from a draft conversation if they get a contacts update before sending a message
Fixed a bug where message status or media message download statuses would trigger the conversation to jump to the bottom
Updated to the latest libSession version
Updated the 'hidden' logic to be based on a negative 'priority' value
Added an index on the Quote table to speed up conversation query
Fixed an odd behaviour with GRDB and Combine (simplified the interface as well)
Fixed an issue where migrations could fail
Fixed an issue where the JobRunner could schedule dependent jobs which were already running (eg. uploading attachments multiple times)
Fixed an issue where the image used for quotes might not be the first in an album message
Fixed an issue where sending an album message wouldn't send attachments in the correct order
Fixed an issue where album attachments wouldn't be downloaded in the correct order
Made a couple of DB query optimisations for the Home and Conversation screens
Removed some compiler-complex global generic functions
Increased the timeout for file uploads
Fixed a few import issues
Fixed an issue preventing calls on the simulator from working (disable CallKit on the simulator)
Fixed an issue where opening a conversation with a draft would result in a typing indicator notification being sent (if enabled)
Fixed a truncation issue on the CallVC
Fixed a bug where the legacy group invitation was getting sent to the wrong location
Fixed a bug where outgoing typing indicators would be sent to blocked contacts
Fixed a bug where the call button was visible for blocked contacts
Fixed a bug where read receipts could be sent to blocked contacts
Fixed a bug where the conversation nav buttons wouldn't get updated correctly in some cases
Fixed a bug where we could incorrectly include the current user in the contacts syncing
Fixed a bug where the initial state of the Note to Self conversation wasn't getting synced
Fixed a bug where the Note to Self conversation could get removed
Fixed a bug with where the conversation title would be misaligned in some cases
Fixed a bug where link previews and quotes with images weren't getting sent correctly
Fixed a crash when removing a user from a legacy group
Added some missing accessibility info
Updated the code to ensure the user is kicked from the conversation if it's deletion gets synced while it's open
Updated the conversation empty state copy
Removed image dimension byte checking for attachments (we have file size checks already)
Fixed a couple of bugs where the message status for uploading attachments wasn't reflecting the current status
Fixed a bug where the conversation 'jump to bottom' was jumping to the bottom of the current page instead of to the end of the conversation
Added unit tests for the UserGroup config type
Updated the logic to use the 'pinnedPriority' and deprecated 'isPinned' (not sorting yet but using the value)
Updated the code to use the libSession community url parsing instead of custom parsing
Fixed an issue where initialising Data with a libSession value wasn't returning null when the data had no actual value
Fixed an issue where the OpenGroupPoller could user an incorrect failure could when handling poll responses
Fixed the UpdateExpiryRequest signature
Updated the SharedConfigMessage type to have a TTL of 30 days
Updated the SnodeAPI to have a 'poll' method to be more consistent with the OpenGroupAPI (it also does multiple things now so is cleaner)
Added logic to limit the number of config messages to be retrieved per poll
Added the 'ValidatableResponse' protocol to standardise SnodeAPI response validation
Added the libSession version to the logs
Fixed an issue where the user profile pic wouldn't get synced correctly due to memory going out of scope
Fixed some threading issues
Refactored the thread variants to follow the updated terminology (will think about refactoring other code areas later)
Cleaned up the Combine error handling
Started fixing broken unit tests
Added logic to indicate when a sync message failed to send (and the ability to retry)
Added the retry/resync button to the long press message menu
Updated sync messages to run via the MessageSendJob
Updated the delivery status to always show on the last outgoing message
Updated the logic to update the delivery status when retrying to send a failed message
Removed the convoluted recursion logic for turning self-send messages into sync messages
Added the unit tests for the ConvoInfoVolatile
Added icons to the swipe actions
Updated jobs to be able to be prioritised (and added priorities to the launch jobs to avoid some odd behaviours)
Fixed some build issues resulting from merging
Fixed an issue with the open group pubkey encoding
Fixed an issue where an imageView could get it's image set on a background thread
Fixed a bug where the swipe actions weren't getting theming applied when the theme changed
Fixed a bug where scheduling code after the next db transaction completes couldn't be nested (resulting in code not running)
Fixed a bug where the PagedDataObserver might not notify of unobserved changes if they reverted previous unobserved changes
Fixed a couple of incorrect SQL ordering use cases (was overriding instead of appending ordering)
Fixed an issue where the app would re-upload the avatar every launch (only affected this branch)
Fixed an issue where the home screen wouldn't update group avatars when their profile data changed
Added the logic to sync the last read state for a conversation
Added the legacyClosedGroup thread variant
Updated the config handling to be able to update the 'mergeResult' and require a dump/push due to local changes
Fixed an issue where the name on the CallVC could go off the screen
Fixed an issue where OpenGroup info could sometimes incorrectly get deleted
Fixed an issue where the ConfirmationModal on a SessionTableViewController wouldn't trigger it's action
Fixed an issue where the config handling could incorrectly trigger a contacts update when there were no changes
Updated the onboarding to attempt to retrieve the current user profile config and skip display name collection if it already exists
Updated the logic to get the snode pool and build paths immediately on launch even if the user hasn't been created yet (faster onboarding)
Removed the iOS-specific concurrent dual snode '/store' behaviour
Cleaned up the profile updating logic
Fixed an issue where the pollers could end up deadlocking the main thread if too many tried to start concurrently
Fixed an issue where the app settings were updating immediately making them seem to
Updated GRDB to version 6.1 and SQLCipher to 4.5.2
Added a method which allows for inserting into the database while omitting columns which exist in the object but not in the database (so allow for old migrations to run with less issues)
Updated all the migrations to use the migration safe insert method
Removed some ObjC support extension functions
Added a toast when hitting the emoji reacts rate limit
Added the ability to delete info messages
Fixed some odd layout behaviours with the VisibleMessageCell
Fixed some layout issues with reactions
Removed some unneeded custom code
Split the date out of the VisibleMessageCell into it's own cell to clean up deletion/insertion animations
Fixed a layout issue with the Open Group
Fixed an issue where the QRCode tinting wasn't working on iOS 16
Implemented a swift version of an ObjC function
Fixed a crash which would occur when rendering a message containing both a mention and a url
Fixed a crash which could occur during migration due to the openGroupServerMessageId essentially being the max UInt64 value which was overflowing the Int64 storage
Fixed a bug where empty read receipt updates were sending messages (even for non one-to-one conversations)
Fixed a bug where loading in large numbers of messages (via the poller) was auto scrolling to the bottom if the user was close to the bottom (now limited to <5)
Fixed a memory leak with the AllMediaViewController (strong delegate references)
Fixed an issue where non-alphanumeric characters would cause issues with global search
Fixed an issue where search result highlighting wasn't working properly
Fixed an issue where the app switcher UI blocking wasn't working
Updated the conversations to mark messages as read while scrolling (rather than all messages when entering/participating in a conversation)
Updated the modal button font weight to be closer to the designs
Added the ability to delete "unsent" messages
Fixed a bug where the time label would no longer appear in the context menu
Fixed a bug where the tile label in the context menu could be clipped
Tweaked the context menu appearance animation to look less jumpy when at the edges of the screen
Fixed a bug where the scroll to bottom button wasn't working
Fixed an issue where searching was running on the main thread (which could cause UI issues)
Updated the searching to interrupt the previous query when the search term changes
Updated the in-conversation settings to be use the new config-based approach (deleted the OWSConversationSettingsViewController)
Added the Blocked contacts screen
Added a setting to control whether concurrent audio messages should auto-play
Finished updating the settings screens
Fixed an issue where items that should be removed from the PagedDatabaseObserver due to filter logic weren't getting removed in some cases
Fixed a bug where open group message deletion wasn't thread-specific
Fixed a bug where the user couldn't delete pending/failed messages being sent to an open group
Fixed a bug where deleting content from "related" tables wouldn't correctly trigger an update within the PagedDatabaseObserver
Fixed a bug where a user that was an admin/mod of one open group would incorrectly appear to be an admin/mod of all open groups
Fixed a bug where notifications could incorrectly appear for messages in the current thread
Fixed a bug where swiping left/right on images in the MediaDetailViewController could load images from other threads
Fixed a bug where the unread count wouldn't appear correctly when opening a conversation
Fixed a bug where the unread count on the conversation cell could get truncated
Fixed a bug where notifications weren't working correctly when the app is in the foreground
Fixed a bug where we weren't clearing the 'received X new messages' count when in the foreground
Fixed a bug where outgoing messages could get marked as read in a very specific case
Updated the "group notification" logic to only apply to Open Groups (and always doing it rather than just in the background)
Added a placeholder person icon when you have a closed group with a single member
Added a couple of indexes to improve the HomeVC database query performance (reduce launch time by ~15% in some cases)
Added a background task to give message sending the chance to complete when sending the app to the background
Removed an unneeded query from the HomeViewModel init (reduce launch time by ~10% in some cases)
Optimised one of the queries used to load the data needed for the conversation screen