owpengram-server/internal/domain/saved_dialog.go

87 lines
3.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package domain
// SavedHiddenAuthorUserID 是官方 hidden-author 收藏夹子会话的占位 user id
// TDesktop kSavedHiddenAuthorId / TDLib HIDDEN_AUTHOR_DIALOG_ID
// 运行时新写入永远能确定源会话,不产生该值;仅存量回填中
// 「fwd 头只有 from_name、源会话已不可知」的消息归入此子会话。
const SavedHiddenAuthorUserID int64 = 2666000
// MaxPinnedSavedDialogs 是收藏夹子会话置顶上限(官方 premium 上限同级)。
const MaxPinnedSavedDialogs = 100
// MaxSavedDialogsLimit 是 messages.getSavedDialogs 单页上限。
const MaxSavedDialogsLimit = 100
// SavedPeerForSelfChat 计算 self-chat 新消息的 saved 子会话分组键,与
// TDLib SavedMessagesTopicId 语义对齐转发带源会话saved_from_peer
// 源会话fwd 头仅 from_name 且源会话不可知 → hidden author 占位(防御
// 分支运行时转发总是带源会话其余直发、drop_author→ self。
func SavedPeerForSelfChat(selfUserID int64, forward *MessageForward) Peer {
if forward != nil {
if forward.SavedFrom.ID != 0 {
return forward.SavedFrom
}
if forward.From.ID == 0 && forward.FromName != "" {
return Peer{Type: PeerTypeUser, ID: SavedHiddenAuthorUserID}
}
}
return Peer{Type: PeerTypeUser, ID: selfUserID}
}
// SavedDialog 是收藏夹的一个子会话savedDialog TL 构造器的业务形态)。
type SavedDialog struct {
Peer Peer
// TopMessage 是该子会话当前最新可见消息的 owner 视角 box id。
TopMessage int
Pinned bool
}
// SavedDialogList 是 getSavedDialogs/getPinnedSavedDialogs/getSavedDialogsByID
// 的业务层结果。Messages 与 Dialogs 一一对应top message 全量行)。
type SavedDialogList struct {
Dialogs []SavedDialog
Messages []Message
Users []User
Channels []Channel
// Count 是过滤口径下(含/不含 pinned的子会话总数。
Count int
// Full 为 true 表示本页已含过滤口径下的全部剩余子会话
// (映射 messages.savedDialogsfalse 映射 savedDialogsSlice
Full bool
}
// SavedDialogsFilter 描述 getSavedDialogs 分页条件。
type SavedDialogsFilter struct {
ExcludePinned bool
// OffsetID 是上一页最后一个子会话的 top message box id0 或 >= MaxMessageBoxID
// 视为从最新开始TDesktop 首页传 0DrKLO Android 首页传 int32 max
OffsetID int
// OffsetDate/OffsetPeer 仅作合法性校验box id 单调于时间,分页统一按
// top box id 严格降序推进。
OffsetDate int
OffsetPeer Peer
Limit int
}
// DeleteSavedHistoryRequest 是 messages.deleteSavedHistory 的业务命令:
// 删除 self-chat 中一个 saved 子会话的消息。self-chat 单侧,无 revoke 语义。
type DeleteSavedHistoryRequest struct {
OwnerUserID int64
// SavedPeer 是要清空的子会话分组键。
SavedPeer Peer
MaxID int
MinDate int
MaxDate int
Date int
OriginAuthKeyID [8]byte
OriginSessionID int64
}
// DeleteSavedHistoryResult 描述一次 saved 子会话删除批次。
type DeleteSavedHistoryResult struct {
// MessageIDs 是本批被删除的 owner 视角 box id。
MessageIDs []int
Event UpdateEvent
// More 为 true 表示仍有剩余批次,客户端按 affectedHistory.offset 续发。
More bool
}