MCPcopy Create free account
hub / github.com/experdot/pointer / deleteMessage

Function deleteMessage

src/renderer/src/services/messagesService.ts:57–97  ·  view source on GitHub ↗
(pageId: string, messageId: string)

Source from the content-addressed store, hash-verified

55}
56
57export async function deleteMessage(pageId: string, messageId: string): Promise<void> {
58 const record = stores.message.get(pageId)
59 if (!record) return
60
61 const { messageMap, childrenMap } = buildMessageMaps(record.messages)
62
63 // 获取要删除的消息及其所有子消息 - O(N) 而非 O(N²)
64 const idsToDelete = getDescendantIds(childrenMap, messageId)
65 idsToDelete.add(messageId)
66
67 const deletedMsg = messageMap.get(messageId)
68
69 // 计算新的 leafMessageId
70 let leafMessageId = record.leafMessageId
71 if (leafMessageId && idsToDelete.has(leafMessageId)) {
72 // 获取原始的 siblings(包含被删除的消息)
73 const allSiblings = childrenMap.get(deletedMsg?.parentMessageId) ?? []
74 // 找到被删除消息在兄弟中的位置
75 const deletedIndex = allSiblings.findIndex((m) => m.id === messageId)
76 // 过滤掉要删除的消息
77 const remainingSiblings = allSiblings.filter((m) => !idsToDelete.has(m.id))
78
79 if (remainingSiblings.length > 0) {
80 // 优先选择上一个分支(index - 1),否则选择下一个
81 const targetIndex = Math.min(Math.max(0, deletedIndex - 1), remainingSiblings.length - 1)
82 const targetSibling = remainingSiblings[targetIndex]
83
84 const remainingMessages = record.messages.filter((m) => !idsToDelete.has(m.id))
85 const { childrenMap: remainingChildrenMap } = buildMessageMaps(remainingMessages)
86 leafMessageId = findLeafFromMessage(remainingChildrenMap, targetSibling.id)
87 } else {
88 leafMessageId = deletedMsg?.parentMessageId
89 }
90 }
91
92 await stores.message.update(pageId, (r) => ({
93 ...r,
94 messages: r.messages.filter((m) => !idsToDelete.has(m.id)),
95 leafMessageId
96 }))
97}
98
99// ==================== 分支操作 ====================
100

Callers

nothing calls this directly

Calls 6

buildMessageMapsFunction · 0.85
findLeafFromMessageFunction · 0.85
hasMethod · 0.80
getDescendantIdsFunction · 0.70
getMethod · 0.65
updateMethod · 0.65

Tested by

no test coverage detected