Skip to content

Commit af90189

Browse files
committed
Use correct id when updating group membership
fixes #166
1 parent 7f9653a commit af90189

File tree

2 files changed

+30
-23
lines changed

2 files changed

+30
-23
lines changed

Signal-Windows.Lib/IncomingMessages.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -489,7 +489,7 @@ private async Task HandleGroupUpdateMessage(SignalServiceEnvelope envelope, Sign
489489
{
490490
foreach (var member in group.Members)
491491
{
492-
SignalDBContext.InsertOrUpdateGroupMembershipLocked(dbgroup.Id, SignalDBContext.GetOrCreateContactLocked(member, 0).Id);
492+
SignalDBContext.InsertOrUpdateGroupMembershipLocked(dbgroup.Id, (await SignalDBContext.GetOrCreateContactLocked(member, 0)).Id);
493493
}
494494
}
495495

Signal-Windows.Lib/Storage/DB.cs

Lines changed: 29 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1109,37 +1109,44 @@ internal static async Task<List<SignalConversation>> InsertOrUpdateGroups(IList<
11091109
{
11101110
foreach (var (group, members) in groups)
11111111
{
1112-
var dbGroup = ctx.Groups
1112+
try
1113+
{
1114+
var dbGroup = ctx.Groups
11131115
.Where(g => g.ThreadId == group.ThreadId)
11141116
.Include(g => g.GroupMemberships)
11151117
.Include(g => g.LastMessage)
11161118
.ThenInclude(m => m.Content)
11171119
.SingleOrDefault();
1118-
if (dbGroup != null)
1119-
{
1120-
dbGroup.GroupMemberships.Clear();
1121-
dbGroup.ThreadDisplayName = group.ThreadDisplayName;
1122-
dbGroup.CanReceive = group.CanReceive;
1123-
dbGroup.ExpiresInSeconds = group.ExpiresInSeconds;
1124-
}
1125-
else
1126-
{
1127-
dbGroup = group;
1128-
ctx.Groups.Add(dbGroup);
1129-
}
1130-
foreach (var member in members)
1131-
{
1132-
(var contact, var notify) = GetOrCreateContact(ctx, member, 0);
1133-
dbGroup.GroupMemberships.Add(new GroupMembership()
1120+
if (dbGroup != null)
11341121
{
1135-
Contact = contact,
1136-
Group = dbGroup
1137-
});
1138-
if (notify)
1122+
dbGroup.GroupMemberships.Clear();
1123+
dbGroup.ThreadDisplayName = group.ThreadDisplayName;
1124+
dbGroup.CanReceive = group.CanReceive;
1125+
dbGroup.ExpiresInSeconds = group.ExpiresInSeconds;
1126+
}
1127+
else
1128+
{
1129+
dbGroup = group;
1130+
ctx.Groups.Add(dbGroup);
1131+
}
1132+
foreach (var member in members)
11391133
{
1140-
newContacts.Add(contact);
1134+
(var contact, var notify) = GetOrCreateContact(ctx, member, 0);
1135+
dbGroup.GroupMemberships.Add(new GroupMembership()
1136+
{
1137+
Contact = contact,
1138+
Group = dbGroup
1139+
});
1140+
if (notify)
1141+
{
1142+
newContacts.Add(contact);
1143+
}
11411144
}
11421145
}
1146+
catch (Exception e)
1147+
{
1148+
Logger.LogError("InsertOrUpdateGroups failed: {0}\n{1}", e.Message, e.StackTrace);
1149+
}
11431150
}
11441151
ctx.SaveChanges();
11451152
}

0 commit comments

Comments
 (0)