atagen

macltok

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