• 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 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
• 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)
• Updated the code to stop sending legacy PNs outside of legacy group conversations
• Updated the logger logic to clean things up and use the local date/time (with time zone info) to ease debugging user reports
• Fixed an issue where messages in a community could incorrectly accept disappearing message settings
• Fixed an issue where duplicate messages could be sent in some cases
• Fixed an issue where the conversation might not scroll to the bottom after sending an attachment
• Fixed an issue where attachment encryption was happening in a db write thread
• Fixed an index out of bounds issue with the mnemonic
• Attempt to fix a crash due to failing to hash SignalAttachment
• Attempt to fix a crash due to list data change inconsistencies
• Ensuring we are shutting down the network when resetting app data
• Updated the broken unit tests
• Moved the snode cache and path building into libSession (deleted associated logic)
• Moved reachability detection into libSession (remove Reachability dependency)
• Fixed a couple of crashes with using libQuic requests
• Fixed a bug where the MessageRequestFooterView would show buttons on outgoing message requests