mirror of
https://github.com/oxen-io/session-android.git
synced 2024-11-25 11:05:25 +00:00
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
This commit is contained in:
parent
f7b4fe216f
commit
281b8dac33
@ -440,6 +440,9 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe
|
|||||||
lifecycle.repeatOnLifecycle(Lifecycle.State.RESUMED) {
|
lifecycle.repeatOnLifecycle(Lifecycle.State.RESUMED) {
|
||||||
// only update the conversation every 3 seconds maximum
|
// only update the conversation every 3 seconds maximum
|
||||||
// channel is rendezvous and shouldn't block on try send calls as often as we want
|
// channel is rendezvous and shouldn't block on try send calls as often as we want
|
||||||
|
val layoutManager = binding?.conversationRecyclerView?.layoutManager as? LinearLayoutManager ?: return@repeatOnLifecycle
|
||||||
|
val lastItemPos = layoutManager.findLastCompletelyVisibleItemPosition()
|
||||||
|
// adapter.item
|
||||||
withContext(Dispatchers.IO) {
|
withContext(Dispatchers.IO) {
|
||||||
storage.markConversationAsRead(viewModel.threadId, SnodeAPI.nowWithOffset)
|
storage.markConversationAsRead(viewModel.threadId, SnodeAPI.nowWithOffset)
|
||||||
}
|
}
|
||||||
|
@ -54,17 +54,12 @@ data class ConfigurationSyncJob(val destination: Destination): Job {
|
|||||||
if (configsRequiringPush.isEmpty()) return delegate.handleJobSucceeded(this, dispatcherName)
|
if (configsRequiringPush.isEmpty()) return delegate.handleJobSucceeded(this, dispatcherName)
|
||||||
|
|
||||||
// need to get the current hashes before we call `push()`
|
// need to get the current hashes before we call `push()`
|
||||||
val toDeleteRequest = configsRequiringPush.map { base ->
|
val toDeleteHashes = mutableListOf<String>()
|
||||||
// accumulate by adding together
|
|
||||||
base.currentHashes()
|
|
||||||
}.reduce(List<String>::plus).let { toDeleteFromAllNamespaces ->
|
|
||||||
if (toDeleteFromAllNamespaces.isEmpty()) null
|
|
||||||
else SnodeAPI.buildAuthenticatedDeleteBatchInfo(destination.destinationPublicKey(), toDeleteFromAllNamespaces)
|
|
||||||
}
|
|
||||||
|
|
||||||
// allow null results here so the list index matches configsRequiringPush
|
// allow null results here so the list index matches configsRequiringPush
|
||||||
val batchObjects: List<Pair<SharedConfigurationMessage, SnodeAPI.SnodeBatchRequestInfo>?> = configsRequiringPush.map { config ->
|
val batchObjects: List<Pair<SharedConfigurationMessage, SnodeAPI.SnodeBatchRequestInfo>?> = configsRequiringPush.map { config ->
|
||||||
val (data, seqNo) = config.push()
|
val (data, seqNo, obsoleteHashes) = config.push()
|
||||||
|
toDeleteHashes += obsoleteHashes
|
||||||
SharedConfigurationMessage(config.protoKindFor(), data, seqNo) to config
|
SharedConfigurationMessage(config.protoKindFor(), data, seqNo) to config
|
||||||
}.map { (message, config) ->
|
}.map { (message, config) ->
|
||||||
// return a list of batch request objects
|
// return a list of batch request objects
|
||||||
@ -77,6 +72,11 @@ data class ConfigurationSyncJob(val destination: Destination): Job {
|
|||||||
message to authenticated // to keep track of seqNo for calling confirmPushed later
|
message to authenticated // to keep track of seqNo for calling confirmPushed later
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val toDeleteRequest = toDeleteHashes.let { toDeleteFromAllNamespaces ->
|
||||||
|
if (toDeleteFromAllNamespaces.isEmpty()) null
|
||||||
|
else SnodeAPI.buildAuthenticatedDeleteBatchInfo(destination.destinationPublicKey(), toDeleteFromAllNamespaces)
|
||||||
|
}
|
||||||
|
|
||||||
if (batchObjects.any { it == null }) {
|
if (batchObjects.any { it == null }) {
|
||||||
// stop running here, something like a signing error occurred
|
// stop running here, something like a signing error occurred
|
||||||
return delegate.handleJobFailedPermanently(this, dispatcherName, NullPointerException("One or more requests had a null batch request info"))
|
return delegate.handleJobFailedPermanently(this, dispatcherName, NullPointerException("One or more requests had a null batch request info"))
|
||||||
|
Loading…
Reference in New Issue
Block a user