@ -605,18 +605,19 @@ public final class OpenGroupManager {
return
}
let seqNo : Int64 ? = messages . map { $0 . seqNo } . max ( )
let sortedMessages : [ OpenGroupAPI . Message ] = messages
. filter { $0 . deleted != true }
. sorted { lhs , rhs in lhs . id < rhs . id }
var messageServerI dsToRemove: [ Int64 ] = messages
var messageServerI nfoToRemove: [ ( id : Int64 , seqNo : Int64 ) ] = messages
. filter { $0 . deleted = = true }
. map { $0 . id }
if let seqNo : Int64 = seqNo {
. map { ( $0 . id , $0 . seqNo ) }
let updateSeqNo : ( Database , String , inout Int64 , Int64 , OGMDependencies ) -> ( ) = { db , openGroupId , lastValidSeqNo , seqNo , dependencies in
// O n l y u p d a t e t h e d a t a i f t h e ' s e q N o ' i s l a r g e r t h a n t h e l a s t V a l i d S e q N o ( o n l y w a n t i t t o i n c r e a s e )
guard seqNo > lastValidSeqNo else { return }
// U p d a t e t h e ' o p e n G r o u p S e q u e n c e N u m b e r ' v a l u e ( N o t e : S O G S V 4 u s e s t h e ' s e q N o ' i n s t e a d o f t h e ' s e r v e r I d ' )
_ = try ? OpenGroup
. filter ( id : openGroup . i d)
. filter ( id : openGroup I d)
. updateAll ( db , OpenGroup . Columns . sequenceNumber . set ( to : seqNo ) )
// U p d a t e p e n d i n g C h a n g e c a c h e
@ -624,13 +625,18 @@ public final class OpenGroupManager {
$0 . pendingChanges = $0 . pendingChanges
. filter { $0 . seqNo = = nil || $0 . seqNo ! > seqNo }
}
// U p d a t e t h e i n o u t v a l u e
lastValidSeqNo = seqNo
}
// P r o c e s s t h e m e s s a g e s
var lastValidSeqNo : Int64 = - 1
sortedMessages . forEach { message in
if message . base64EncodedData = = nil && message . reactions = = nil {
messageServerIdsToRemove . append ( Int64 ( message . id ) )
return
messageServerInfoToRemove . append ( ( message . id , message . seqNo ) )
return updateSeqNo ( db , openGroup . id , & lastValidSeqNo , message . seqNo , dependencies )
}
// H a n d l e m e s s a g e s
@ -657,6 +663,7 @@ public final class OpenGroupManager {
associatedWithProto : try SNProtoContent . parseData ( messageInfo . serializedProtoData ) ,
dependencies : dependencies
)
updateSeqNo ( db , openGroup . id , & lastValidSeqNo , message . seqNo , dependencies )
}
}
catch {
@ -701,6 +708,7 @@ public final class OpenGroupManager {
openGroupMessageServerId : message . id ,
openGroupReactions : reactions
)
updateSeqNo ( db , openGroup . id , & lastValidSeqNo , message . seqNo , dependencies )
}
catch {
SNLog ( " Couldn't handle open group reactions due to error: \( error ) . " )
@ -709,12 +717,18 @@ public final class OpenGroupManager {
}
// H a n d l e a n y d e l e t i o n s t h a t a r e n e e d e d
guard ! messageServerI ds ToRemove. isEmpty else { return }
guard ! messageServerI nfo ToRemove. isEmpty else { return }
let messageServerIdsToRemove : [ Int64 ] = messageServerInfoToRemove . map { $0 . id }
_ = try ? Interaction
. filter ( Interaction . Columns . threadId = = openGroup . threadId )
. filter ( messageServerIdsToRemove . contains ( Interaction . Columns . openGroupServerMessageId ) )
. deleteAll ( db )
// U p d a t e t h e s e q N o f o r d e l e t i o n s
if let lastDeletionSeqNo : Int64 = messageServerInfoToRemove . map ( { $0 . seqNo } ) . max ( ) {
updateSeqNo ( db , openGroup . id , & lastValidSeqNo , lastDeletionSeqNo , dependencies )
}
}
internal static func handleDirectMessages (