mirror of
https://github.com/permissionlesstech/bitchat.git
synced 2026-07-26 13:25:20 +00:00
Cut private message path over to ConversationStore
All private-message mutations now flow through store intents: coordinators, PrivateChatManager (its @Published dicts deleted - now read-only views over the store), outbound sends, delivery status, and chat migration. The O(1) store dedup replaces the full-scan duplicate check; insertion order is maintained by the store so sanitizeChat's re-sort is a documented no-op. Both bootstrapper Combine bridges and the Task.yield store synchronization are deleted. ChatViewModel.privateChats/unreadPrivateMessages become get-only derived views (measured: naive rebuild equals a change-invalidated cache within noise, so the simpler form stays). Feature models still read the legacy store, fed by a coalescing LegacyConversationStoreBridge (one mirror per burst, marked for step-5 deletion). pipeline.privateIngest: 9.6k -> 14.7k msg/s (+53%). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -356,6 +356,32 @@ final class LegacyConversationStore: ObservableObject {
|
||||
markRead(directConversationID(for: peerID, identityResolver: identityResolver))
|
||||
}
|
||||
|
||||
// MARK: Migration step 2 bridge entry points (DELETE IN STEP 5)
|
||||
// Used only by `LegacyConversationStoreBridge` to mirror single
|
||||
// conversations out of the new `ConversationStore` without the
|
||||
// full-dictionary `synchronizePrivateChats` pass.
|
||||
|
||||
func replaceDirectMessages(
|
||||
_ messages: [BitchatMessage],
|
||||
for peerID: PeerID,
|
||||
identityResolver: IdentityResolver
|
||||
) {
|
||||
let handle = identityResolver.canonicalHandle(for: peerID, displayName: messages.last?.sender)
|
||||
let conversationID = ConversationID.direct(handle)
|
||||
directHandlesByConversation[conversationID] = handle
|
||||
replaceMessages(messages, for: conversationID)
|
||||
}
|
||||
|
||||
func markUnread(
|
||||
peerID: PeerID,
|
||||
identityResolver: IdentityResolver
|
||||
) {
|
||||
let conversationID = directConversationID(for: peerID, identityResolver: identityResolver)
|
||||
if !unreadConversations.contains(conversationID) {
|
||||
unreadConversations.insert(conversationID)
|
||||
}
|
||||
}
|
||||
|
||||
private func normalized(_ messages: [BitchatMessage]) -> [BitchatMessage] {
|
||||
var uniqueMessages: [String: BitchatMessage] = [:]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user