fix: source synced conversations from session database
This commit is contained in:
@@ -51,18 +51,19 @@ public sealed class DatabaseMessageSyncCollector : IRemoteDataCollector
|
||||
var chatIds = chatScopes.Select(scope => scope.ChatId).Distinct(StringComparer.Ordinal).ToArray();
|
||||
var page = await WechatMessageDbReader.ReadIncrementalAsync(
|
||||
account.AccountRootPath, account.Databases, chatIds, cursors, perChatLimit, cancellationToken, overlapRows).ConfigureAwait(false);
|
||||
var directory = await WechatSessionDbReader.ReadAuthorizedAsync(account, chatScopes, cancellationToken).ConfigureAwait(false);
|
||||
var scopeByChat = chatScopes
|
||||
.GroupBy(scope => scope.ChatId, StringComparer.Ordinal)
|
||||
.ToDictionary(group => group.Key, group => group.First(), StringComparer.Ordinal);
|
||||
var observedAt = DateTimeOffset.UtcNow;
|
||||
var conversations = chatScopes.Select(scope => new RemoteSyncConversation(
|
||||
scope.ChatId,
|
||||
scope.ChatType,
|
||||
scope.ChatId,
|
||||
null,
|
||||
"authorized-db-scope",
|
||||
var conversations = directory.Conversations.Select(entry => new RemoteSyncConversation(
|
||||
entry.ChatId,
|
||||
entry.ChatType,
|
||||
entry.Title,
|
||||
entry.LastActivityAt,
|
||||
"session/session.db/SessionTable",
|
||||
observedAt,
|
||||
"observed")).ToArray();
|
||||
entry.DirectoryState)).ToArray();
|
||||
var messages = page.Messages.Select(message =>
|
||||
{
|
||||
var scope = scopeByChat.GetValueOrDefault(message.ChatId)
|
||||
@@ -85,7 +86,18 @@ public sealed class DatabaseMessageSyncCollector : IRemoteDataCollector
|
||||
account.WechatVersion ?? "unknown",
|
||||
HashMessage(messageId, text, message.Timestamp));
|
||||
}).ToArray();
|
||||
return new RemoteDataCollection(sourceGeneration, page.NextCursors, conversations, messages, page.IsComplete, page.NewMessageCount > 0, page.UnavailableDatabases);
|
||||
var nextCursors = new Dictionary<string, long>(page.NextCursors, StringComparer.Ordinal)
|
||||
{
|
||||
[WechatSessionDbReader.DirectoryCursorKey] = directory.DirectoryCursor
|
||||
};
|
||||
var directoryChanged = directory.DirectoryCursor != cursors.GetValueOrDefault(WechatSessionDbReader.DirectoryCursorKey);
|
||||
var unavailable = page.UnavailableDatabases
|
||||
.Concat(directory.UnavailableDatabases)
|
||||
.Distinct(StringComparer.OrdinalIgnoreCase)
|
||||
.OrderBy(item => item, StringComparer.OrdinalIgnoreCase)
|
||||
.ToArray();
|
||||
return new RemoteDataCollection(sourceGeneration, nextCursors, conversations, messages,
|
||||
page.IsComplete && directory.IsComplete, page.NewMessageCount > 0 || directoryChanged, unavailable);
|
||||
}
|
||||
|
||||
private static string HashMessage(string messageId, string text, DateTimeOffset sourceTime)
|
||||
|
||||
Reference in New Issue
Block a user