• Refactored the 'RecipientState' type to just be columns on the 'Interaction' table
• Added some syntactic sugar to clean up the 'CallbackWrapper' boilerplate within the LibSession+Networking code
• Fixed an issue where sending a message into a group where you are the only member would result in the message permanently being in the sending state
• Fixed an issue when initially setting up the interaction database structure where the community whisper mechanism needed another column
• Fixed a bug where the MessageSendJob wouldn't time out during path building
• Fixed a bug where the MessageSendJob wouldn't retry 8 times before detecting a timeout (meaning it would retry up to 80 times in total before permanently failing)
• Added new 'LintControl' mechanisms to allow for ignoring sections of code
• Added new 'MatchType' mechanisms for excluding unlocalized cases
• Updated the code to explicitly handle localized template strings (both single and multiline)
• Updated the code to process files across multiple threads to improve performance
• Updated the code to use Swift 5.7 regex and store in static variables to prevent reconstruction every time they are used
• Removed the list of individual files which are ignored (now just output a count)
• Fixed an issue where having a localized string on a subsequent line could result in an unlocalized (or incorrectly localized) string not being detected
• Fixed an issue where having multiple strings on a single line could result in an unlocalized string not being detected
• Fixed an issue where zero-width characters would result in the variable count comparison between translations failing
• Fixed a number of localization warnings
• Fixed a bug where the libSession logs wouldn't all come through correctly
• Added logic to handle response headers from libSession
• Minor optimisation to closed groups poller setup
• Minor logging tweaks
• Reworked the NotificationServiceExtension to just always reset and reload it's state to avoid weird bugs
• Updated the legacy group messages to fallback to using a locally generated serverHash if one isn't provided (always happens for legacy PNs)
• Include error info when failing to process extension logs
• Made a bunch of the Storage functions instance functions instead of static functions
• Fixed an issue where creating a legacy group could be blocked by the legacy PN subscription failing (was part of the synchronous request)
• Fixed an issue where the code would incorrectly use profile data from incoming messages sent from the current user to update it's profile info
• Fixed an issue where saving media would fail silently if the user had rejected the OS permission
• Refactored a little code around profile changes to make things more readable
Moved the WebRTC dependency out of SessionMessagingKit and into the main Session app (it's the only one that used it and it was causing library linker issues in the share extension because it wasn't directly linked)
• Fixed an issue where you could select 0 attachments and go to the "send attachment" screen
• Fixed an issue where returning from the "send attachment" screen wouldn't have the initially selected attachment selected
• Added a uniqueId to the DataSource so instances can be better distinguished from each other (not ideal as the same file would have separate identifiers)
• Fixed some cases where errors weren't being displayed correctly
• Tweaked the "nodeNotFound" error to be a bit more human readable
• Tweaked the BackgroundPoller timeout to have a 5 second buffer instead of a 1 second buffer
• Moved the lastHash pruning into the GarbageCollectionJob instead of the pre-poll fetching to avoid needing to use a write query before polling
• Reworked the Pollers to make their database queries part of the polling stream (and as such, cancellable)
• Fixed an issue where the conversation 'created' timestamp wasn't correctly getting set when creating a group
• Fixed an issue where sending a message to 'Note to Self' may not show the conversation in the conversation list
• Fixed an issue where sharing a message with an attachment might not include the attachment
• Fixed an issue where list paging wouldn't work in some cases after values were inserted into the database after the currently loaded pages
• Added some handling for invalid 'joinedAt' values for groups (seems like we can have an incorrect resolution)
• Fixed an issue where the BackgroundPoller would fail if a single destination failed
- This would suspend the network, then the other pending requests would error and automatically retry, attempting to create a new connection which could loop a number of times rapidly since the network was suspended
• Fixed an issue where the BackgroundPoller could incorrectly try to write to the database after it had been suspended
• Updated the pollers to NOT take the duration of the previous poll into account when scheduling the next poll
• Updated to the latest `libSession` version (a few optimisations/fixes)
• Fixed a minor layout issue with the attribution label on the Path screen
• Updated the GeoLite2 country database data, added some basic localisation to it
• Managed to optimise the size of the GeoLite2 data bundled with the app (10mb -> 8mb)
• Cleaned up the IP2Country logic a little
• Removed some pluralisation from logs (want the logs to be identical outside of numbers)
• Tweaked the PushRegistrationManager to actually timeout