There were a few logs related to bad memory access within libSession and the `toLibSession` convention which we'd originally setup made me nervous as C-friendly objects would be allocated in Swift and then assigned to C struct properties but I'm not sure how the memory would actually behave in this case.
This updated approach unfortunately involves a bunch of duplicate code within 'TypeConversion+Utilities' (and some horrible type aliases for tuples) but as a result we now have compile-time safe 'get' and 'set' functions for any C struct which conforms to `CAccessible` and `CMutable`. The other nice benefit about this change is that the new `set` functions copy memory across into the C structs so we can have more confidence that the memory ownership has shifted to the libSession side of things.
• 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)
• Reworked some of the C API conversions to try to prevent invalid cases
• Tweaked the threading around libSession networking callbacks to minimise Swift code blocking libSession threads
• More logging tweaks