Fix unexpected SSE's.

Fixes #13115
This commit is contained in:
Greyson Parrelli
2023-08-18 11:07:12 -04:00
parent e93c6957ac
commit 587cb5de16
3 changed files with 81 additions and 16 deletions

View File

@@ -2611,14 +2611,14 @@ open class RecipientTable(context: Context, databaseHelper: SignalDatabase) : Da
)
}
val preSseOperationCount = operations.size
sessionSwitchoverEventIfNeeded(pniVerified, preMergeData.pniRecord, postMergeData.pniRecord)?.let {
breadCrumbs += "FinalUpdateSSEPniRecord"
operations += it
}
operations += sessionSwitchoverEventIfNeeded(pniVerified, preMergeData.e164Record, postMergeData.e164Record)
operations += sessionSwitchoverEventIfNeeded(pniVerified, preMergeData.pniRecord, postMergeData.pniRecord)
operations += sessionSwitchoverEventIfNeeded(pniVerified, preMergeData.aciRecord, postMergeData.aciRecord)
if (operations.size > preSseOperationCount) {
breadCrumbs += "FinalUpdateSSE"
sessionSwitchoverEventIfNeeded(pniVerified, preMergeData.aciRecord, postMergeData.aciRecord)?.let {
breadCrumbs += "FinalUpdateSSEPniAciRecord"
operations += it
}
return PnpChangeSet(
@@ -2646,16 +2646,14 @@ open class RecipientTable(context: Context, databaseHelper: SignalDatabase) : Da
* For details on SSE's, see [needsSessionSwitchoverEvent]. This method is just a helper around comparing service ID's from two
* records and turning it into a possible event.
*/
private fun sessionSwitchoverEventIfNeeded(pniVerified: Boolean, oldRecord: RecipientRecord?, newRecord: RecipientRecord?): List<PnpOperation> {
private fun sessionSwitchoverEventIfNeeded(pniVerified: Boolean, oldRecord: RecipientRecord?, newRecord: RecipientRecord?): PnpOperation? {
return if (oldRecord != null && newRecord != null && needsSessionSwitchoverEvent(pniVerified, oldRecord.serviceId, newRecord.serviceId)) {
listOf(
PnpOperation.SessionSwitchoverInsert(
recipientId = newRecord.id,
e164 = newRecord.e164
)
PnpOperation.SessionSwitchoverInsert(
recipientId = newRecord.id,
e164 = newRecord.e164
)
} else {
emptyList()
null
}
}

View File

@@ -80,7 +80,7 @@ data class RecipientRecord(
) {
fun e164Only(): Boolean {
return this.e164 != null && this.aci == null
return this.e164 != null && this.aci == null && this.pni == null
}
fun pniOnly(): Boolean {