atagen

macltok

public
Star0
Watch0
d1313f47f24eff9c7654a76b44fdf9e65ba6db5d
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
cbb715e11963atagen2026-10-24 23:24 UTC48
#[derive(Clone, Debug, 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 incomplete_history: bool,
cbb715e11963atagen2026-10-24 23:24 UTC55
    pub gaps: Vec<MentionGap>,
cbb715e11963atagen2026-10-24 23:24 UTC56
    pub truncated: bool,
cbb715e11963atagen2026-10-24 23:24 UTC57
    pub unresolved_candidates: usize,
cbb715e11963atagen2026-10-24 23:24 UTC58
}
cbb715e11963atagen2026-10-24 23:24 UTC59
cbb715e11963atagen2026-10-24 23:24 UTC60
impl Default for MentionCoverage {
cbb715e11963atagen2026-10-24 23:24 UTC61
    fn default() -> Self {
cbb715e11963atagen2026-10-24 23:24 UTC62
        Self {
cbb715e11963atagen2026-10-24 23:24 UTC63
            earliest_timestamp_ms: None,
cbb715e11963atagen2026-10-24 23:24 UTC64
            historical_supported: None,
cbb715e11963atagen2026-10-24 23:24 UTC65
            recovering: false,
cbb715e11963atagen2026-10-24 23:24 UTC66
            incomplete_history: true,
cbb715e11963atagen2026-10-24 23:24 UTC67
            gaps: Vec::new(),
cbb715e11963atagen2026-10-24 23:24 UTC68
            truncated: false,
cbb715e11963atagen2026-10-24 23:24 UTC69
            unresolved_candidates: 0,
cbb715e11963atagen2026-10-24 23:24 UTC70
        }
cbb715e11963atagen2026-10-24 23:24 UTC71
    }
cbb715e11963atagen2026-10-24 23:24 UTC72
}
cbb715e11963atagen2026-10-24 23:24 UTC73
cbb715e11963atagen2026-10-24 23:24 UTC74
#[derive(Clone, Debug, Eq, PartialEq)]
cbb715e11963atagen2026-10-24 23:24 UTC75
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
cbb715e11963atagen2026-10-24 23:24 UTC76
pub struct MentionGap {
cbb715e11963atagen2026-10-24 23:24 UTC77
    pub room_id: Option<OwnedRoomId>,
cbb715e11963atagen2026-10-24 23:24 UTC78
    pub reason: String,
cbb715e11963atagen2026-10-24 23:24 UTC79
    pub token: Option<String>,
cbb715e11963atagen2026-10-24 23:24 UTC80
}
cbb715e11963atagen2026-10-24 23:24 UTC81
cbb715e11963atagen2026-10-24 23:24 UTC82
#[derive(Clone, Debug, Eq, PartialEq)]
cbb715e11963atagen2026-10-24 23:24 UTC83
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
cbb715e11963atagen2026-10-24 23:24 UTC84
pub struct MentionsBoundary {
cbb715e11963atagen2026-10-24 23:24 UTC85
    pub account: OwnedUserId,
cbb715e11963atagen2026-10-24 23:24 UTC86
    pub revision: u64,
cbb715e11963atagen2026-10-24 23:24 UTC87
}
cbb715e11963atagen2026-10-24 23:24 UTC88
cbb715e11963atagen2026-10-24 23:24 UTC89
#[derive(Clone, Debug, Eq, PartialEq)]
cbb715e11963atagen2026-10-24 23:24 UTC90
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
cbb715e11963atagen2026-10-24 23:24 UTC91
pub struct MentionsPage {
cbb715e11963atagen2026-10-24 23:24 UTC92
    pub entries: Vec<MentionEntry>,
cbb715e11963atagen2026-10-24 23:24 UTC93
    pub next_cursor: Option<String>,
cbb715e11963atagen2026-10-24 23:24 UTC94
    pub end_reached: bool,
cbb715e11963atagen2026-10-24 23:24 UTC95
    pub coverage: MentionCoverage,
cbb715e11963atagen2026-10-24 23:24 UTC96
    pub unread_count: usize,
cbb715e11963atagen2026-10-24 23:24 UTC97
    pub revision: u64,
cbb715e11963atagen2026-10-24 23:24 UTC98
    pub boundary: MentionsBoundary,
cbb715e11963atagen2026-10-24 23:24 UTC99
}
cbb715e11963atagen2026-10-24 23:24 UTC100
cbb715e11963atagen2026-10-24 23:24 UTC101
#[derive(Clone, Debug, Eq, PartialEq)]
cbb715e11963atagen2026-10-24 23:24 UTC102
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
cbb715e11963atagen2026-10-24 23:24 UTC103
pub struct SavedMentionContext {
cbb715e11963atagen2026-10-24 23:24 UTC104
    pub key: MentionKey,
cbb715e11963atagen2026-10-24 23:24 UTC105
    pub state: MentionCaptureState,
cbb715e11963atagen2026-10-24 23:24 UTC106
    pub context: Option<EventContext>,
cbb715e11963atagen2026-10-24 23:24 UTC107
    pub revision: u64,
cbb715e11963atagen2026-10-24 23:24 UTC108
}
cbb715e11963atagen2026-10-24 23:24 UTC109
cbb715e11963atagen2026-10-24 23:24 UTC110
#[derive(Clone, Debug, Eq, PartialEq)]
cbb715e11963atagen2026-10-24 23:24 UTC111
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
cbb715e11963atagen2026-10-24 23:24 UTC112
pub struct MentionsUpdate {
cbb715e11963atagen2026-10-24 23:24 UTC113
    pub snapshot: MentionsPage,
cbb715e11963atagen2026-10-24 23:24 UTC114
    pub upserts: Vec<MentionEntry>,
cbb715e11963atagen2026-10-24 23:24 UTC115
    pub removed: Vec<MentionKey>,
cbb715e11963atagen2026-10-24 23:24 UTC116
}
cbb715e11963atagen2026-10-24 23:24 UTC117
cbb715e11963atagen2026-10-24 23:24 UTC118
#[derive(Clone, Debug, Eq, PartialEq)]
cbb715e11963atagen2026-10-24 23:24 UTC119
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
cbb715e11963atagen2026-10-24 23:24 UTC120
pub enum MentionsCommand {
cbb715e11963atagen2026-10-24 23:24 UTC121
    Page { cursor: Option<String>, limit: u16 },
cbb715e11963atagen2026-10-24 23:24 UTC122
    Context(MentionKey),
cbb715e11963atagen2026-10-24 23:24 UTC123
    RetryContext(MentionKey),
cbb715e11963atagen2026-10-24 23:24 UTC124
    SetRead { keys: Vec<MentionKey>, read: bool },
cbb715e11963atagen2026-10-24 23:24 UTC125
    ReadThrough(MentionsBoundary),
cbb715e11963atagen2026-10-24 23:24 UTC126
    Recover,
cbb715e11963atagen2026-10-24 23:24 UTC127
}