atagen

macltok

public
Star0
Watch0
0d763e4284ef82eb13418fd683b8c8866f099c92
3
ssh://brewery@pls.lobotomise.me:33/atagen/macltok.git

Blame: src/mentions_model.rs

cbb715e11963atagen2026-10-24 23:24 UTC1
use ruma::{OwnedEventId, OwnedRoomId, OwnedUserId};
cbb715e11963atagen2026-10-24 23:24 UTC2
#[cfg(feature = "serde")]
cbb715e11963atagen2026-10-24 23:24 UTC3
use serde::{Deserialize, Serialize};
cbb715e11963atagen2026-10-24 23:24 UTC4
cbb715e11963atagen2026-10-24 23:24 UTC5
use crate::{EventContext, TimelineItem};
cbb715e11963atagen2026-10-24 23:24 UTC6
cbb715e11963atagen2026-10-24 23:24 UTC7
#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
cbb715e11963atagen2026-10-24 23:24 UTC8
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
cbb715e11963atagen2026-10-24 23:24 UTC9
pub struct MentionKey {
cbb715e11963atagen2026-10-24 23:24 UTC10
    pub room_id: OwnedRoomId,
cbb715e11963atagen2026-10-24 23:24 UTC11
    pub event_id: OwnedEventId,
cbb715e11963atagen2026-10-24 23:24 UTC12
}
cbb715e11963atagen2026-10-24 23:24 UTC13
cbb715e11963atagen2026-10-24 23:24 UTC14
#[derive(Clone, Debug, Eq, PartialEq)]
cbb715e11963atagen2026-10-24 23:24 UTC15
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
cbb715e11963atagen2026-10-24 23:24 UTC16
pub enum MentionReason {
cbb715e11963atagen2026-10-24 23:24 UTC17
    Direct,
cbb715e11963atagen2026-10-24 23:24 UTC18
    Reply,
cbb715e11963atagen2026-10-24 23:24 UTC19
    Room,
cbb715e11963atagen2026-10-24 23:24 UTC20
}
cbb715e11963atagen2026-10-24 23:24 UTC21
cbb715e11963atagen2026-10-24 23:24 UTC22
#[derive(Clone, Debug, Eq, PartialEq)]
cbb715e11963atagen2026-10-24 23:24 UTC23
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
cbb715e11963atagen2026-10-24 23:24 UTC24
pub enum MentionCaptureState {
cbb715e11963atagen2026-10-24 23:24 UTC25
    Pending,
cbb715e11963atagen2026-10-24 23:24 UTC26
    Partial,
cbb715e11963atagen2026-10-24 23:24 UTC27
    Ready,
cbb715e11963atagen2026-10-24 23:24 UTC28
    Unavailable,
cbb715e11963atagen2026-10-24 23:24 UTC29
    Failed { message: String, retry_at_ms: u64 },
cbb715e11963atagen2026-10-24 23:24 UTC30
}
cbb715e11963atagen2026-10-24 23:24 UTC31
cbb715e11963atagen2026-10-24 23:24 UTC32
#[derive(Clone, Debug, Eq, PartialEq)]
cbb715e11963atagen2026-10-24 23:24 UTC33
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
cbb715e11963atagen2026-10-24 23:24 UTC34
pub struct MentionEntry {
cbb715e11963atagen2026-10-24 23:24 UTC35
    pub key: MentionKey,
cbb715e11963atagen2026-10-24 23:24 UTC36
    pub timestamp_ms: u64,
cbb715e11963atagen2026-10-24 23:24 UTC37
    pub discovered_at_ms: u64,
cbb715e11963atagen2026-10-24 23:24 UTC38
    pub discovery_revision: u64,
cbb715e11963atagen2026-10-24 23:24 UTC39
    pub revision: u64,
cbb715e11963atagen2026-10-24 23:24 UTC40
    pub event: TimelineItem,
cbb715e11963atagen2026-10-24 23:24 UTC41
    pub reasons: Vec<MentionReason>,
cbb715e11963atagen2026-10-24 23:24 UTC42
    pub read: bool,
cbb715e11963atagen2026-10-24 23:24 UTC43
    pub capture: MentionCaptureState,
cbb715e11963atagen2026-10-24 23:24 UTC44
    pub room_name: Option<String>,
cbb715e11963atagen2026-10-24 23:24 UTC45
    pub notification_suppressed: bool,
cbb715e11963atagen2026-10-24 23:24 UTC46
}
cbb715e11963atagen2026-10-24 23:24 UTC47
7cdaa86b9489atagen2026-10-25 08:43 UTC48
#[derive(Clone, Debug, Default, Eq, PartialEq)]
cbb715e11963atagen2026-10-24 23:24 UTC49
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
cbb715e11963atagen2026-10-24 23:24 UTC50
pub struct MentionCoverage {
cbb715e11963atagen2026-10-24 23:24 UTC51
    pub earliest_timestamp_ms: Option<u64>,
cbb715e11963atagen2026-10-24 23:24 UTC52
    pub historical_supported: Option<bool>,
cbb715e11963atagen2026-10-24 23:24 UTC53
    pub recovering: bool,
cbb715e11963atagen2026-10-24 23:24 UTC54
    pub gaps: Vec<MentionGap>,
cbb715e11963atagen2026-10-24 23:24 UTC55
    pub truncated: bool,
cbb715e11963atagen2026-10-24 23:24 UTC56
    pub unresolved_candidates: usize,
cbb715e11963atagen2026-10-24 23:24 UTC57
}
cbb715e11963atagen2026-10-24 23:24 UTC58
cbb715e11963atagen2026-10-24 23:24 UTC59
#[derive(Clone, Debug, Eq, PartialEq)]
cbb715e11963atagen2026-10-24 23:24 UTC60
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
cbb715e11963atagen2026-10-24 23:24 UTC61
pub struct MentionGap {
cbb715e11963atagen2026-10-24 23:24 UTC62
    pub room_id: Option<OwnedRoomId>,
7cdaa86b9489atagen2026-10-25 08:43 UTC63
    pub reason: MentionGapReason,
cbb715e11963atagen2026-10-24 23:24 UTC64
    pub token: Option<String>,
cbb715e11963atagen2026-10-24 23:24 UTC65
}
cbb715e11963atagen2026-10-24 23:24 UTC66
7cdaa86b9489atagen2026-10-25 08:43 UTC67
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
7cdaa86b9489atagen2026-10-25 08:43 UTC68
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
7cdaa86b9489atagen2026-10-25 08:43 UTC69
pub enum MentionGapReason {
7cdaa86b9489atagen2026-10-25 08:43 UTC70
    SyncDiscontinuity,
7cdaa86b9489atagen2026-10-25 08:43 UTC71
    /// an already observed room came back limited, `token` is its `prev_batch`
7cdaa86b9489atagen2026-10-25 08:43 UTC72
    LimitedTimeline,
7cdaa86b9489atagen2026-10-25 08:43 UTC73
    RoomLeft,
7cdaa86b9489atagen2026-10-25 08:43 UTC74
    ContextUnavailable,
7cdaa86b9489atagen2026-10-25 08:43 UTC75
    NotificationHistoryUnavailable,
7cdaa86b9489atagen2026-10-25 08:43 UTC76
    /// a candidate stayed undecryptable or unresolved for a week and was dropped
7cdaa86b9489atagen2026-10-25 08:43 UTC77
    CandidateExpired,
7cdaa86b9489atagen2026-10-25 08:43 UTC78
    StoreReset,
7cdaa86b9489atagen2026-10-25 08:43 UTC79
    /// a write failed, the inbox carries on in memory and a restart loses the unwritten part
7cdaa86b9489atagen2026-10-25 08:43 UTC80
    StoreFailed,
7cdaa86b9489atagen2026-10-25 08:43 UTC81
    HookTimedOut,
7cdaa86b9489atagen2026-10-25 08:43 UTC82
}
7cdaa86b9489atagen2026-10-25 08:43 UTC83
cbb715e11963atagen2026-10-24 23:24 UTC84
#[derive(Clone, Debug, Eq, PartialEq)]
cbb715e11963atagen2026-10-24 23:24 UTC85
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
cbb715e11963atagen2026-10-24 23:24 UTC86
pub struct MentionsBoundary {
cbb715e11963atagen2026-10-24 23:24 UTC87
    pub account: OwnedUserId,
cbb715e11963atagen2026-10-24 23:24 UTC88
    pub revision: u64,
cbb715e11963atagen2026-10-24 23:24 UTC89
}
cbb715e11963atagen2026-10-24 23:24 UTC90
cbb715e11963atagen2026-10-24 23:24 UTC91
#[derive(Clone, Debug, Eq, PartialEq)]
cbb715e11963atagen2026-10-24 23:24 UTC92
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
cbb715e11963atagen2026-10-24 23:24 UTC93
pub struct MentionsPage {
cbb715e11963atagen2026-10-24 23:24 UTC94
    pub entries: Vec<MentionEntry>,
cbb715e11963atagen2026-10-24 23:24 UTC95
    pub next_cursor: Option<String>,
cbb715e11963atagen2026-10-24 23:24 UTC96
    pub end_reached: bool,
cbb715e11963atagen2026-10-24 23:24 UTC97
    pub coverage: MentionCoverage,
cbb715e11963atagen2026-10-24 23:24 UTC98
    pub unread_count: usize,
cbb715e11963atagen2026-10-24 23:24 UTC99
    pub revision: u64,
cbb715e11963atagen2026-10-24 23:24 UTC100
    pub boundary: MentionsBoundary,
cbb715e11963atagen2026-10-24 23:24 UTC101
}
cbb715e11963atagen2026-10-24 23:24 UTC102
cbb715e11963atagen2026-10-24 23:24 UTC103
#[derive(Clone, Debug, Eq, PartialEq)]
cbb715e11963atagen2026-10-24 23:24 UTC104
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
cbb715e11963atagen2026-10-24 23:24 UTC105
pub struct SavedMentionContext {
cbb715e11963atagen2026-10-24 23:24 UTC106
    pub key: MentionKey,
cbb715e11963atagen2026-10-24 23:24 UTC107
    pub state: MentionCaptureState,
cbb715e11963atagen2026-10-24 23:24 UTC108
    pub context: Option<EventContext>,
cbb715e11963atagen2026-10-24 23:24 UTC109
    pub revision: u64,
cbb715e11963atagen2026-10-24 23:24 UTC110
}
cbb715e11963atagen2026-10-24 23:24 UTC111
cbb715e11963atagen2026-10-24 23:24 UTC112
#[derive(Clone, Debug, Eq, PartialEq)]
cbb715e11963atagen2026-10-24 23:24 UTC113
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
cbb715e11963atagen2026-10-24 23:24 UTC114
pub struct MentionsUpdate {
cbb715e11963atagen2026-10-24 23:24 UTC115
    pub snapshot: MentionsPage,
cbb715e11963atagen2026-10-24 23:24 UTC116
    pub upserts: Vec<MentionEntry>,
cbb715e11963atagen2026-10-24 23:24 UTC117
    pub removed: Vec<MentionKey>,
cbb715e11963atagen2026-10-24 23:24 UTC118
}
cbb715e11963atagen2026-10-24 23:24 UTC119
cbb715e11963atagen2026-10-24 23:24 UTC120
#[derive(Clone, Debug, Eq, PartialEq)]
cbb715e11963atagen2026-10-24 23:24 UTC121
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
7cdaa86b9489atagen2026-10-25 08:43 UTC122
#[non_exhaustive]
cbb715e11963atagen2026-10-24 23:24 UTC123
pub enum MentionsCommand {
cbb715e11963atagen2026-10-24 23:24 UTC124
    Page { cursor: Option<String>, limit: u16 },
cbb715e11963atagen2026-10-24 23:24 UTC125
    Context(MentionKey),
cbb715e11963atagen2026-10-24 23:24 UTC126
    RetryContext(MentionKey),
cbb715e11963atagen2026-10-24 23:24 UTC127
    SetRead { keys: Vec<MentionKey>, read: bool },
cbb715e11963atagen2026-10-24 23:24 UTC128
    ReadThrough(MentionsBoundary),
cbb715e11963atagen2026-10-24 23:24 UTC129
    Recover,
cbb715e11963atagen2026-10-24 23:24 UTC130
}