@@ -746,70 +746,77 @@ public static void SaveMessageLocked(SignalMessage message)
746
746
{
747
747
using ( var ctx = new SignalDBContext ( ) )
748
748
{
749
- long timestamp ;
750
- if ( message . Direction == SignalMessageDirection . Synced )
751
- {
752
- var receipts = ctx . EarlyReceipts
753
- . Where ( er => er . Timestamp == message . ComposedTimestamp )
754
- . ToList ( ) ;
749
+ SaveMessage ( ctx , message ) ;
750
+ }
751
+ }
752
+ }
755
753
756
- message . Receipts = ( uint ) receipts . Count ;
757
- ctx . EarlyReceipts . RemoveRange ( receipts ) ;
758
- if ( message . Receipts > 0 )
759
- {
760
- message . Status = SignalMessageStatus . Received ;
761
- }
762
- }
763
- if ( message . Author != null )
764
- {
765
- timestamp = message . ReceivedTimestamp ;
766
- message . Author = ctx . Contacts . Where ( a => a . Id == message . Author . Id ) . Single ( ) ;
767
- }
768
- else
769
- {
770
- timestamp = message . ComposedTimestamp ;
771
- }
772
- if ( ! message . ThreadId . EndsWith ( "=" ) )
773
- {
774
- var contact = ctx . Contacts
775
- . Where ( c => c . ThreadId == message . ThreadId )
776
- . Single ( ) ;
777
- contact . LastActiveTimestamp = timestamp ;
778
- contact . LastMessage = message ;
779
- contact . MessagesCount += 1 ;
780
- if ( message . Author == null )
781
- {
782
- contact . UnreadCount = 0 ;
783
- contact . LastSeenMessageIndex = contact . MessagesCount ;
784
- }
785
- else
786
- {
787
- contact . UnreadCount += 1 ;
788
- }
789
- }
790
- else
791
- {
792
- var group = ctx . Groups
793
- . Where ( c => c . ThreadId == message . ThreadId )
794
- . Single ( ) ;
795
- message . ExpiresAt = group . ExpiresInSeconds ;
796
- group . LastActiveTimestamp = timestamp ;
797
- group . LastMessage = message ;
798
- group . MessagesCount += 1 ;
799
- if ( message . Author == null )
800
- {
801
- group . UnreadCount = 0 ;
802
- group . LastSeenMessageIndex = group . MessagesCount ;
803
- }
804
- else
805
- {
806
- group . UnreadCount += 1 ;
807
- }
808
- }
809
- ctx . Messages . Add ( message ) ;
810
- ctx . SaveChanges ( ) ;
754
+ private static SignalConversation SaveMessage ( SignalDBContext ctx , SignalMessage message )
755
+ {
756
+ SignalConversation conversation ;
757
+ long timestamp ;
758
+ if ( message . Direction == SignalMessageDirection . Synced )
759
+ {
760
+ var receipts = ctx . EarlyReceipts
761
+ . Where ( er => er . Timestamp == message . ComposedTimestamp )
762
+ . ToList ( ) ;
763
+
764
+ message . Receipts = ( uint ) receipts . Count ;
765
+ ctx . EarlyReceipts . RemoveRange ( receipts ) ;
766
+ if ( message . Receipts > 0 )
767
+ {
768
+ message . Status = SignalMessageStatus . Received ;
769
+ }
770
+ }
771
+ if ( message . Author != null )
772
+ {
773
+ timestamp = message . ReceivedTimestamp ;
774
+ message . Author = ctx . Contacts . Where ( a => a . Id == message . Author . Id ) . Single ( ) ;
775
+ }
776
+ else
777
+ {
778
+ timestamp = message . ComposedTimestamp ;
779
+ }
780
+ if ( ! message . ThreadId . EndsWith ( "=" ) )
781
+ {
782
+ conversation = ctx . Contacts
783
+ . Where ( c => c . ThreadId == message . ThreadId )
784
+ . Single ( ) ;
785
+ conversation . LastActiveTimestamp = timestamp ;
786
+ conversation . LastMessage = message ;
787
+ conversation . MessagesCount += 1 ;
788
+ if ( message . Author == null )
789
+ {
790
+ conversation . UnreadCount = 0 ;
791
+ conversation . LastSeenMessageIndex = conversation . MessagesCount ;
792
+ }
793
+ else
794
+ {
795
+ conversation . UnreadCount += 1 ;
811
796
}
812
797
}
798
+ else
799
+ {
800
+ conversation = ctx . Groups
801
+ . Where ( c => c . ThreadId == message . ThreadId )
802
+ . Single ( ) ;
803
+ message . ExpiresAt = conversation . ExpiresInSeconds ;
804
+ conversation . LastActiveTimestamp = timestamp ;
805
+ conversation . LastMessage = message ;
806
+ conversation . MessagesCount += 1 ;
807
+ if ( message . Author == null )
808
+ {
809
+ conversation . UnreadCount = 0 ;
810
+ conversation . LastSeenMessageIndex = conversation . MessagesCount ;
811
+ }
812
+ else
813
+ {
814
+ conversation . UnreadCount += 1 ;
815
+ }
816
+ }
817
+ ctx . Messages . Add ( message ) ;
818
+ ctx . SaveChanges ( ) ;
819
+ return conversation ;
813
820
}
814
821
815
822
public static List < SignalMessageContainer > GetMessagesLocked ( SignalConversation thread , int startIndex , int count )
@@ -1083,6 +1090,23 @@ internal static SignalConversation UpdateMessageRead(long index, SignalConversat
1083
1090
1084
1091
#region Groups
1085
1092
1093
+ public static SignalConversation RemoveMemberFromGroup ( string groupId , SignalContact member , SignalMessage quitMessage )
1094
+ {
1095
+ lock ( DBLock )
1096
+ {
1097
+ using ( var ctx = new SignalDBContext ( ) )
1098
+ {
1099
+ var dbgroup = ctx . Groups
1100
+ . Where ( g => g . ThreadId == groupId )
1101
+ . Include ( g => g . GroupMemberships )
1102
+ . ThenInclude ( gm => gm . Contact )
1103
+ . Single ( ) ;
1104
+ dbgroup . GroupMemberships . RemoveAll ( gm => gm . Contact . Id == member . Id ) ;
1105
+ return SaveMessage ( ctx , quitMessage ) ;
1106
+ }
1107
+ }
1108
+ }
1109
+
1086
1110
public static SignalGroup GetOrCreateGroupLocked ( string groupId , long timestamp , bool notify = true )
1087
1111
{
1088
1112
SignalGroup dbgroup ;
0 commit comments