Commit Graph

232 Commits

Author SHA1 Message Date
0x330a 705f12e821
fix: compile issues and group display info for having admin 2023-11-13 15:39:46 +11:00
0x330a 35f4643c5c
feat: adding edit contact list views and presenters and various storage functions to build UI state 2023-11-09 18:01:24 +11:00
0x330a d8bc838754 refactor: testing and building out new edit closed group capabilities 2023-11-09 09:23:20 +11:00
0x330a abaa765207
feat: invite contact uses multiple contacts now, fix compile issues and write to members based on success / failure state and pending 2023-11-06 17:59:05 +11:00
0x330a 2fc83b87ad
fix: group keys wasn't populating the config pushes for non keys objects in sync job 2023-10-27 16:10:26 +11:00
0x330a ae7c27c2e0 feat: update libsession-util and get signCallbacks working for authenticated retrieve, handling incoming messages in new closed groups 2023-10-26 09:59:42 +11:00
0x330a fb8b146703 feat: add scheduling invite jobs and handling update config syncs 2023-10-25 12:15:01 +11:00
0x330a d63b5f85df feat: in theory add in the subkey auth callbacks and make a default bytearray signer callback 2023-10-24 17:15:28 +11:00
0x330a 383634c90e
feat: add set group invite completed, persist a group config individually 2023-10-23 17:57:40 +11:00
0x330a 2448af0b73
feat: adding basic invite for new groups handling and immediate response, need to add handling for response and actually sending the invites via UI possibly 2023-10-23 17:42:20 +11:00
0x330a e419024f6b feat: add linux native library support for libsession to enable junit testing (might not be the best way) 2023-10-04 09:59:10 +11:00
0x330a 16536c43d6 feat: get the group member list from convo activity/vm 2023-09-19 12:21:37 +10:00
0x330a ec02087c6b
feat: finish implementing scheduling sync and pollers, destination based config sync job 2023-09-18 16:13:25 +10:00
0x330a 43e72550f9
refactor: fixing compile issues and namespace references throughout. figuring out config sig and base issues 2023-09-18 12:24:06 +10:00
0x330a 915fa5bc2b
feat: notify updates for closed group info polling to set recipient name 2023-09-14 17:11:56 +10:00
0x330a 51c3020049
feat: group message from poller decoding / sending & receiving 2023-09-14 17:00:54 +10:00
0x330a 82e3516a60 feat: basic polling happening with hashes merging 2023-09-13 18:29:19 +10:00
0x330a 040696c08b feat: introduce the handling of poll messages for closed group poller 2023-09-13 12:11:42 +10:00
0x330a df29ed8f16 feat: start on closed group polling for new signatures 2023-09-13 10:12:35 +10:00
0x330a 6067916da9
feat: add finishing of group push for initial group creation and saving group configs to DB. re-implement key signing messages properly for the signing config which doesn't override the config base 2023-09-11 18:07:23 +10:00
0x330a 2527ac2e21
feat: add a basic config send sign with group key 2023-09-08 17:21:45 +10:00
0x330a de885b4b4a feat: wiring together storage and configs for groups in a test way, experimenting with best structure that makes sense for group creation 2023-09-08 12:42:53 +10:00
0x330a 026f0056b9
feat: creating the basic storage code to test creating group in configs and pushing 2023-09-07 17:33:24 +10:00
0x330a 76ae6997db
feat: finish most wrappers and compile issues, start new closed group compose code 2023-09-04 17:56:55 +10:00
0x330a 84ebe44936 feat: add group info 2023-09-01 16:14:04 +10:00
0x330a d19d1231c9
fix: compile errors and moving the references to sessionId and broken hex string function 2023-08-31 17:32:43 +10:00
0x330a b42b9fa414 feat: adding more closed group in recipient logic, adding more wrappers for user groups and serializing / deserializing the closed groups in user group type 2023-08-30 17:48:21 +10:00
0x330a b6ff1deb64
Merge remote-tracking branch 'upstream/dev' into closed_groups
# Conflicts:
#	app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt
#	app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.java
#	app/src/main/java/org/thoughtcrime/securesms/database/helpers/SQLCipherOpenHelper.java
#	libsession-util/libsession-util
#	libsession/src/main/java/org/session/libsession/messaging/messages/visible/VisibleMessage.kt
#	libsession/src/main/java/org/session/libsession/utilities/GroupUtil.kt
#	libsession/src/main/java/org/session/libsession/utilities/recipients/Recipient.java
#	libsignal/protobuf/SignalService.proto
#	libsignal/src/main/java/org/session/libsignal/protos/SignalServiceProtos.java
2023-08-28 10:14:18 +10:00
0x330a 2466d9b4c0
[SES-1002] Synced blind requests (#1303)
* feat: update config to use blinded-msg-requests pr

* feat: add block community message requests bool to protos

* feat: add everything needed for recipientDB to have blocked community requests potentially

* feat: add db migrations

* feat: add sending community block flags and preference options

* feat: add parsing block request flag

* fix: open group message requests were broken anyway

* fix: delete all encoded open group inbox ID bs, fix privacy settings using user config as privacy store

* feat: initial creation sets flag, rename to match libsession implementation value

* fix: recipient blinded checks from open group message for blocking community requests on blinded ID version of recipient, use correct (inverted) values from before for checking polling and empty states etc

* fix: pr comments for view model factory context ref, simplified user config object check for category in PrivacySettingsPreferenceFragment

* fix: pr comments

* fix: migrate some dependencies and functionality out of VM into repository to remove content resolver and context dependecy so tests pass again

* refactor: better naming for hidesInputBar and add more tests for expected recipient view states

* fix: use contact information as opposed to active conversations

* fix: PR comments
2023-08-28 09:51:48 +10:00
0x330a eaddc44de1
feat: adding support for new closed groups, moving closed groups to be legacy throughout app 2023-08-24 17:38:14 +10:00
0x330a ff057d7110 Merge remote-tracking branch 'upstream/dev' into closed_groups
# Conflicts:
#	app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java
#	app/src/main/java/org/thoughtcrime/securesms/MediaOverviewActivity.java
#	app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt
#	app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationViewModel.kt
#	app/src/main/java/org/thoughtcrime/securesms/conversation/v2/MessageDetailActivity.kt
#	app/src/main/java/org/thoughtcrime/securesms/conversation/v2/dialogs/DownloadDialog.kt
#	app/src/main/java/org/thoughtcrime/securesms/conversation/v2/messages/VisibleMessageContentView.kt
#	app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.java
#	app/src/main/java/org/thoughtcrime/securesms/database/Storage.kt
#	app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java
#	app/src/main/java/org/thoughtcrime/securesms/database/helpers/SQLCipherOpenHelper.java
#	app/src/main/java/org/thoughtcrime/securesms/dependencies/DatabaseModule.kt
#	app/src/main/java/org/thoughtcrime/securesms/preferences/BlockedContactsViewModel.kt
#	app/src/main/res/drawable/profile_picture_view_large_background.xml
#	app/src/main/res/layout/dialog_download.xml
#	app/src/main/res/layout/view_untrusted_attachment.xml
#	app/src/main/res/values/strings.xml
#	app/src/test/java/org/thoughtcrime/securesms/util/OpenGroupMigrationTests.kt
#	libsession/src/main/java/org/session/libsession/database/StorageProtocol.kt
#	libsession/src/main/java/org/session/libsession/messaging/messages/Message.kt
#	libsession/src/main/java/org/session/libsession/utilities/bencode/Bencode.kt
#	libsession/src/main/java/org/session/libsession/utilities/recipients/Recipient.java
#	libsignal/src/main/java/org/session/libsignal/protos/SignalServiceProtos.java
#	libsignal/src/main/java/org/session/libsignal/utilities/IdPrefix.kt
2023-08-23 16:45:24 +10:00
andrew bcf925c132 Cleanup 2023-08-06 22:22:39 +09:30
andrew 002793baed Merge branch 'dev' into add-unregister 2023-07-24 09:52:11 +09:30
0x330a ac18f1cbfe
Integrate shared libsession-util library (#1096)
* feat: add some config db basics and DI for it, make the user profile optional, start looking at integrate building from initial dump

* update: get latest util library submodule update

* refactor: fix compile for refactored API

* refactor: naming consistent with library

* feat: add in config storage and injection to common places, managing lifecycle of native instances

* refactor: config database changes, new protos, adding in support for config base namespace queries

* refactor: config query and store use the same format as other platforms

* feat: add batch snode calls and try to poll from all the config namespaces

* fix: add optional namespace in signature and params

* feat: add raw requests for modifying expiry and getting expiries

* feat: add some base config migration logic, start implementing wrappers for conversation and expiry types

* chore: update libsession base

* feat: start integrating conversation wrapper functions

* feat: add basic conversation info volatile types and implementations, start working on tests

* feat: more common library wrapper implementation and test

* fix: tests and compile issues

* fix: fix tests, don't use iterables

* feat: add all iterators and tests

* feat: add in more config factory for volatile

* feat: update request responses and their appropriate processing

* feat: add storage with hashes and some basic profile update logic in config factory probably move that somewhere else

* feat: adding config sync functionality, refactoring jobs to execute in suspend context to do some nice coroutine execution

* refactor: moving some properties around so we have access in libsession

* feat: expand on the config sync job, finish basic implementation to test against

* feat: add forced config sync

* feat: syncs the user profile stuff for now, and errors back to placeholder instead of unknown recipient

* feat: add basic message read logic for synchronizing last reads, need to modify the query to use the last seen instead of the unread count in a subquery possibly for thread display record

* feat: add broken unreads everywhere

* fix: unreads work now for incoming messages, need to sync conv volatile properly still

* feat: batching poll responses properly and handling groups properly

* fix: replace the mark read receiver (from notifications) to use the new set last seen mark read logic

* feat: update to the group list branch

* fix: compile errors from updating library to use latest branch, now requires cmake 3.22.1

* fix: fix the contact tests

* fix: getters weren't getters properly in the config factory, fixed new onboarding from configs

* feat: add the last seen

* feat: start adding user groups wrapper objects

* refactor: add more else branches for unimplemented types

* feat: buffer the last read when in conversation

* feat: add basic contact logic for setting local contact state. Need to implement handling properly

* refactor: trying to just include blocked status for now in updating contacts

* fix: add some more contact syncing: nicknames, approved statuses, blocked statuses

* feat: start implementing hashes in shared lib and refactoring

* feat: start to implement group list info classes and wrappers and refactor to use library based hashes

* feat: incorporate hashes from library, more wrapper for user groups and serialization from c++

* feat: adding more serialization changes for community base info and user groups LGC

* feat: adding more serialize deserialize to legacy closed groups

* feat: finish serial/deserial helper

* feat: just implement deserialize community info

* refactor: refactor tests and wrappers to use less pointers, finish implementing user groups API

* feat: finish latest wrappers fix tests and continue building default generation functions. refactor defaults to be used if no stored data blob in DB

* feat: more usergroup functionality, storage functionality for checking pinned status, adding pinned status for NTS/contacts, move community info parse full url to base community, add StorageProtocol logic for group info

* feat: adding user groups to the list of user configs, refactorign some of the config factory to fetch the user configs easier. Add handling for polling user group namespace

* feat: implement the default user config list

* feat: add user group config handling

* chore: extra missed existing group

* refactor: use existing lookup for objects in wrappers so they don't overwrite missing values

* feat: add contacts expiry serialization/deserialization, more LGC, timestamps to add closed group encryption info (for latest tracking)

* refactor: change how expiration timer works for contacts, set the expiration timer for those conversations in handling contact configs

* feat: add expiration updates via config for contacts as well

* feat: add almost all group editing cases, need to hook into the thread deletion for groups in the user groups

* feat: open group joining should work now

* feat: add groups to configs for push

* fix: handling user group updates bug fix for closed groups instead of all groups

* fix: open group sync persistence

* feat: add in activity finish if recipient no longer exists (deleted thread) from sync

* feat: support avatar removal from shared library

* feat: support thread deletion and refactoring a lot of getOrCreateThread references to go via storage or assume they are correctly set to hook into the contact and volatile creation during thread creation

* fix: database update not deleting in certain circumstances, storage persisting and removing the volatile convo info for thread deletion / creation, NTS hidden getter values in shared library

* refactor: make update listener visibility package

* refactor: update kotlin

* feat: update dependencies and support outdated config messages, refactor config factory to return null configs if new configs not supported

* feat: update shared library to use priority only, fix compile errors, fix group member sync problem

* fix: compile error

* fix: profile avatar fixes for local user now that we aren't setting local user profile key

* Revert "fix: profile avatar fixes for local user now that we aren't setting local user profile key"

This reverts commit 3f569e3403.

* refactor: let the local number update recipient details in profile manager

* fix: don't recreate thread after leaving

* fix: fix up the duplicate thread creation in the message receive handler

* fix: fix the placeholder rendering on new messages, add in extra context logging for adding contacts and preventing new thread creation on new messages of various types

* feat: add test theme for xml layout previews

* feat: add shortened hex for session IDs throughout, replace nullable getName with null in underlying contacts for individual contacts, build shared lib with release mode, remove todo, fix broken unit test

* feat: setup android unit tests for verifying storage behaviours and state of shared configs

* feat: adding dependencies to try and get android tests working, fixing bug with initial config not syncing properly

* fix: remove hilt testing, add spy on app context storage field instead, update libsession-util to fixed sodium cmake branch

* refactor: use PR version of libsession-util to test cmake build

* fix: new build on normal repo

* feat: new libsession util commit

* refactor: remove the old custom build libsodium stuff from cmake

* feat: update libsession module

* fix: add legacy config subscription to the home activity to enable showing banner at any time

* fix: pinned status for communities and groups, group last read time being set to snodeapi.now on finish joining

* fix: some open group volatile convo fix for last read timer being set. Need to investigate further

* fix: prevent blocking local number

* fix: adding in more checks for open group inbox recipients before being saved to the shared configs. Prevent sending typing indicator for blocked users

* fix: add blocked check for read receipt and updating expiring messages

* fix: another contact recipient config library call removed for non-standard IDs

* fix: another ID check

* fix: don't process thread creation for user is sender && recipient (sync message) for message request responses

* refactor: mark as read on open and use less buffer time

* fix: finally fix the darn unread count issue by

* fix: removing debug logs, adding failure error handling logs for expiry message updater, properly using the message thread ID created for the expiring messages. Process the non-thread messages properly with await in BatchMessageReceiveJob

* fix: checking the last read open to message and make sure that scroll behaviour matches expected, fix the config sync job not deleting ALL old hashes only latest

* refactor: try to add a retry logic to config sync job in case of snode failure

* build: update submodule

* fix: remove user notifications for leaving group to prevent synced device issues, don't create thread in messages for new closed groups, includei nactive groups in the deletion queries for merging group configs

* feat: use blinded message count for banner also

* refactor: remove some logging, don't use blinded conversations in the list

* fix: don't set the read flag in update notifications, some roundabout logic for first loads and scrolling to last known positions

* refactor: merge changes, re-add the group check in unapproved messages

* fix: re-poll on fail in case that was breaking anything

* fix: pinning groups and notifying list listeners in threadDb.setPinned

* feat: add in TTL extension subrequest and builder, enable extending TTLs for all latest config messages in poll as subrequest

* feat: add block to the delete all message requests, only if they're not open group inbox contacts

* refactor: disable edit text for non contacts

* refactor: let the user display name return "You" for local user

* fix: prevent NTS self create thread on user view bind

* refactor: remove populate public key cache if needed call which seems unnecessary at that point, maybe UserView refs have changed since 2020

* refactor: use just first visible instead of completely visible, merge message sender changes

* fix: prevent block of users in delete all

* fix: self sync sync message failures for default values

* feat: update libsession-util, adjust docs, update mms and sms to use message sent timestamp instead of -1 for last read in the thread

* fix: some compile issues in tests and some TODOs for things to do before merge

* fix: handle recyclerview scrolled on scroll to first unread if it's the first load

* fix: added more migration code for deleting unnecessary threads and groups, fixed a post-migration last seen issue on last item (current read is now), comment out actual network sync while testing migrations

* feat: adding a force new configs flag and logic for timestamp handling / forced configs, fix issue with handling legacy messages

* refactor: re-add the sending of configs

* fix: don't add contacts if they don't exist in the profile manager

* [wip]
fix: trying to consolidate prof pic and key properly

* feat: add logs and fix compile issue with a themes.xml entry, add removing profile picture into logic for profile manager

* fix: force has sent for local user, only prevent setting last seen for open group recipients, allow empty user pics to trigger config sync in settings

* fix: nts threads

* fix: open group avatar loop for open groups we have left

* feat: add a wrapper hash to track home diff util changes for wrapper contact recipient info, add test for dirty state in double set

* feat: add a dump in there as well

* refactor: more test code refactor

* fix: update last seen if later than current

* fix: open group threads and avatar downloads

* fix: add max size and maybe fix the non-200 sub requests for batches (for 421s in particular)

* fix: open group comparison issues potentially, have to update some more outgoing message open group flags for visibility of details etc

* Updated to the latest libSession-util

* Updated logic to delete legacy groups when kicked/left

* Added the legacy group 'joined_at' value

* Replaced incorrect character in JNI

* Fixed an issue where the group keyPair was getting encoded incorrectly

* Updated the code to ignore outdated legacy group control message changes

* Updated the code to ignore messages invalidated by the config

* [Review] Updated the poller to process config messages before standard

* Cleaned up the outdated message logic

* Fixed inverted config dropping flags

* Fixed an issue where the joining a community would read all messages

Stopped using a reversed RecyclerView in all cases (caused the unread issue)
Updated the logic to jump to the newly sent message when sending a message (to be consistent with other platforms)
Updated the logic to refresh the DB unread count when the cursor receives an update

* Updated the conversation to highlight the first unread message on open

* Fixed a couple of bugs with the highlighting

* Fixed a bug where the user profile picture wasn't downloading correctly

* feat: add all namespaces to delete all messages request and signature verification data

* fix: merge namespace hashes for signature returned and

* fix: import correct scroll to bottom

* build: update version code and name

* fix: initial contact generation fix for existing blinded contacts

* fix: initial convo generation fix for existing blinded convos (?)

* fix: conversation unread not doing a check for standard ID prefix

* fix: thread ID not being created for legacy config messages

* fix: don't treat 404 as bad snode

* fix: don't add retrieve profile job if we have one for that address

* build: update build code

* fix: reduce attempts for downloading image, invert unreachable type check

* fix: attempting to fix preventing message processing if group thread is not active for closed groups and initial contact dump only allows conversations with thread, may need further optimisations though

* feat: Added an unread marker and search result focus highlighting

* fix: empty set in appropriate places for current closed groups

* build: update build version code

* fix: fix the notifications and request at appropriate time

* refactor: remove debug logging for thread create and delete

* build: update build number

* fix: new community doesn't break persisting config if the .add request fails

* build: trying to track down broken retrieve avatar job

* feat: update to latest libsession dev

* fix: maybe fix avatar download for new messages

* fix: 404s causing snode errors and trying to retrieve avatars that have already 404'd a lot

* fix: closed group creation sets thread date to formation timestamp

* build: update version code

* build: update version code

* build: remove debuggable release build

* fix: use new permissions for external attachments

* build: update version code

* chore: remove debug logs

* fix: tests and main thread blocking db fetch for path status view

* wip: trying to track down failure to mark conversation as read in delayed group add

* wip: add more logs for initial last Read sync of communities

* wip: maybe the volatile is being updated with 0 on batch message receive?

* fix: maybe syncing read statuses are working now

* chore: remove debug logs

* build: update build number

* fix: trying to improve performance

* fix: add close to banner

* refactor: hide seed reminder in preview

* build: update build number

* fix: maybe requires update thread no matter what

* fix: message request banner shows again

* fix: android tests work again and permissions

* fix: blocked contacts click handler being overridden by something

* Revert "fix: blocked contacts click handler being overridden by something"

This reverts commit 608572fc42.

* build: update build number

* refactor: remove unused dependencies and update minor for sqlcipher

* fix: actually do insert contact, because otherwise name doesn't get set properly

* fix: maybe fix scroll to bottom issue

* build: update build number

* fix: the message time and jump to message queries are more optimized

* fix: maybe fix the last seen issues

* build: update build number

* fix: pfp broken closed groups why

* fix: add admins and members as member list instead of just members

* fix: exclude lgc without membership > 1 and inactive explicitly

* fix: submodule update

* fix: compiles with removal of iterator erase

* fix: unread indicator updates properly in ConversationActivityV2

* fix: unread notifications clear and altered if any notifications exist (prevents clearing read notifications in conversation or on home screen)

* refactor: profile pictures kinda broken

* build: update build number

* refactor: remove full hash from log

* fix: isPinned threadDB call

* refactor: use mutex in all libsession native calls, change timestamp

* refactor: add basic support for blinded v2 prefixes

---------

Co-authored-by: Morgan Pretty <morgan.t.pretty@gmail.com>
2023-07-14 18:27:13 +10:00
Morgan Pretty 1980113e41 [SES-566] Fixed an issue where the blocked state wasn't syncing 2023-06-05 09:39:31 +10:00
Morgan Pretty 2b7bd7417e [SES-567] Fixed a couple of issues where the Group poller would be stopped during creation 2023-06-02 17:00:20 +10:00
Morgan Pretty b7744f4f2d Addressed PR feedback 2023-05-30 12:43:51 +10:00
Morgan Pretty 0c2a635d03 Merge remote-tracking branch 'upstream/dev' into bluetooth-manager-crash 2023-05-30 12:24:32 +10:00
andrew 30d748e147 Disable unblock button 2023-05-19 23:44:07 +09:30
ryanzhao fa71ea1850 make RetrieveProfileAvatarJob work 2023-05-09 14:14:49 +10:00
Ryan Zhao b494088c3d WIP: further refactor on old jobs 2023-05-08 17:12:20 +10:00
Ryan Zhao 2ceb9e2bf4 clean up old job manager 2023-05-08 12:29:21 +10:00
andrew ec2abffdcc Remove logs 2023-05-08 10:33:39 +09:30
andrew 45eb3549f6 Add sync status message 2023-05-04 17:01:45 +09:30
ryanzhao d868021f0a move job running status from database to memory 2023-05-04 15:30:09 +10:00
Morgan Pretty 9fd68d27f8 Fixed a few issues with the GroupAvatarDownloadJob
Added a method to remove the Group avatar
Fixed an issue where the recipient diffing on the HomeActivity wasn't working properly
Fixed an issue where the GroupAvatarDownloadJob could be scheduled even when there was already one scheduled
2023-02-10 10:05:28 +11:00
Morgan Pretty cd3b8f3571 Fixed a few issues related to the GroupAvatarDownloadJob
Added logic to avoid scheduling a GroupAvatarDownloadJob if there is already an existing one with the same parameters
Added logic to avoid trying to download an old avatar for a group if there is a new one
Added logic to prevent an old GroupAvatarDownloadJob from overriding a valid avatar with an old one
2023-02-08 13:42:35 +11:00
0x330a cf27760d01
Merge remote-tracking branch 'upstream/dev' into closed_groups
# Conflicts:
#	app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java
#	app/src/main/java/org/thoughtcrime/securesms/MediaGalleryAdapter.java
#	app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt
#	app/src/main/java/org/thoughtcrime/securesms/conversation/v2/messages/VisibleMessageContentView.kt
#	app/src/main/java/org/thoughtcrime/securesms/conversation/v2/messages/VisibleMessageView.kt
#	app/src/main/java/org/thoughtcrime/securesms/database/SessionContactDatabase.kt
#	app/src/main/java/org/thoughtcrime/securesms/database/helpers/SQLCipherOpenHelper.java
#	app/src/main/res/values/strings.xml
#	libsignal/src/main/java/org/session/libsignal/protos/SignalServiceProtos.java
2023-01-25 14:17:22 +11:00
Morgan Pretty 87f1d708b1 Merge remote-tracking branch 'upstream/dev' into feature/unread-mention-indicator
# Conflicts:
#	app/src/main/res/values/themes.xml
2023-01-24 15:44:22 +11:00
Morgan Pretty 251df065f8 Merge remote-tracking branch 'upstream/dev' into message-request-response
# Conflicts:
#	app/src/main/java/org/thoughtcrime/securesms/database/Storage.kt
#	libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageSender.kt
2023-01-24 14:44:56 +11:00