atagen

macltok

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

Blame: src/search_model.rs

c9effeac326aatagen2026-10-25 10:32 UTC1
use ruma::{OwnedEventId, OwnedRoomId};
c9effeac326aatagen2026-10-25 10:32 UTC2
#[cfg(feature = "serde")]
c9effeac326aatagen2026-10-25 10:32 UTC3
use serde::{Deserialize, Serialize};
c9effeac326aatagen2026-10-25 10:32 UTC4
c9effeac326aatagen2026-10-25 10:32 UTC5
use crate::TimelineEvent;
c9effeac326aatagen2026-10-25 10:32 UTC6
c9effeac326aatagen2026-10-25 10:32 UTC7
#[derive(Clone, Debug, Eq, PartialEq)]
c9effeac326aatagen2026-10-25 10:32 UTC8
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
c9effeac326aatagen2026-10-25 10:32 UTC9
#[non_exhaustive]
c9effeac326aatagen2026-10-25 10:32 UTC10
pub enum SearchScope {
c9effeac326aatagen2026-10-25 10:32 UTC11
    Room(OwnedRoomId),
c9effeac326aatagen2026-10-25 10:32 UTC12
    /// a space's rooms, resolved by the host
c9effeac326aatagen2026-10-25 10:32 UTC13
    Rooms(Vec<OwnedRoomId>),
c9effeac326aatagen2026-10-25 10:32 UTC14
    /// every joined room
c9effeac326aatagen2026-10-25 10:32 UTC15
    All,
c9effeac326aatagen2026-10-25 10:32 UTC16
}
c9effeac326aatagen2026-10-25 10:32 UTC17
c9effeac326aatagen2026-10-25 10:32 UTC18
#[derive(Clone, Debug, Eq, PartialEq)]
c9effeac326aatagen2026-10-25 10:32 UTC19
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
c9effeac326aatagen2026-10-25 10:32 UTC20
#[non_exhaustive]
c9effeac326aatagen2026-10-25 10:32 UTC21
pub enum SearchCommand {
c9effeac326aatagen2026-10-25 10:32 UTC22
    /// opens a search that owns the media of every hit it hands out. at most 8 stay open,
c9effeac326aatagen2026-10-25 10:32 UTC23
    /// opening another closes the oldest. words must all match, `"quoted phrases"` match
c9effeac326aatagen2026-10-25 10:32 UTC24
    /// in order and `-word` excludes, newest first
c9effeac326aatagen2026-10-25 10:32 UTC25
    Search {
c9effeac326aatagen2026-10-25 10:32 UTC26
        query: String,
c9effeac326aatagen2026-10-25 10:32 UTC27
        scope: SearchScope,
c9effeac326aatagen2026-10-25 10:32 UTC28
        limit: u16,
c9effeac326aatagen2026-10-25 10:32 UTC29
    },
c9effeac326aatagen2026-10-25 10:32 UTC30
    /// `cursor` is the previous page's `next_cursor`
c9effeac326aatagen2026-10-25 10:32 UTC31
    More {
c9effeac326aatagen2026-10-25 10:32 UTC32
        search_id: String,
c9effeac326aatagen2026-10-25 10:32 UTC33
        cursor: String,
c9effeac326aatagen2026-10-25 10:32 UTC34
        limit: u16,
c9effeac326aatagen2026-10-25 10:32 UTC35
    },
c9effeac326aatagen2026-10-25 10:32 UTC36
    /// frees the search's media. its hits' media ids stop resolving
c9effeac326aatagen2026-10-25 10:32 UTC37
    Close { search_id: String },
c9effeac326aatagen2026-10-25 10:32 UTC38
    Coverage(SearchScope),
c9effeac326aatagen2026-10-25 10:32 UTC39
}
c9effeac326aatagen2026-10-25 10:32 UTC40
c9effeac326aatagen2026-10-25 10:32 UTC41
/// a search's media stay resolvable until it closes, and past `EngineConfig::max_context_media`
c9effeac326aatagen2026-10-25 10:32 UTC42
/// its least recently used are dropped
c9effeac326aatagen2026-10-25 10:32 UTC43
#[derive(Clone, Debug, Eq, PartialEq)]
c9effeac326aatagen2026-10-25 10:32 UTC44
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
c9effeac326aatagen2026-10-25 10:32 UTC45
pub struct SearchSession {
c9effeac326aatagen2026-10-25 10:32 UTC46
    pub search_id: String,
c9effeac326aatagen2026-10-25 10:32 UTC47
    pub page: SearchPage,
c9effeac326aatagen2026-10-25 10:32 UTC48
}
c9effeac326aatagen2026-10-25 10:32 UTC49
c9effeac326aatagen2026-10-25 10:32 UTC50
#[derive(Clone, Debug, Eq, PartialEq)]
c9effeac326aatagen2026-10-25 10:32 UTC51
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
c9effeac326aatagen2026-10-25 10:32 UTC52
pub struct SearchPage {
c9effeac326aatagen2026-10-25 10:32 UTC53
    pub hits: Vec<SearchHit>,
c9effeac326aatagen2026-10-25 10:32 UTC54
    /// `None` once there's nothing older that matches
c9effeac326aatagen2026-10-25 10:32 UTC55
    pub next_cursor: Option<String>,
c9effeac326aatagen2026-10-25 10:32 UTC56
    pub coverage: SearchCoverage,
c9effeac326aatagen2026-10-25 10:32 UTC57
}
c9effeac326aatagen2026-10-25 10:32 UTC58
c9effeac326aatagen2026-10-25 10:32 UTC59
#[derive(Clone, Debug, Eq, PartialEq)]
c9effeac326aatagen2026-10-25 10:32 UTC60
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
c9effeac326aatagen2026-10-25 10:32 UTC61
pub struct SearchHit {
c9effeac326aatagen2026-10-25 10:32 UTC62
    pub room_id: OwnedRoomId,
c9effeac326aatagen2026-10-25 10:32 UTC63
    pub event_id: OwnedEventId,
c9effeac326aatagen2026-10-25 10:32 UTC64
    pub timestamp_ms: u64,
c9effeac326aatagen2026-10-25 10:32 UTC65
    /// as event context shows it, with the latest edit applied
c9effeac326aatagen2026-10-25 10:32 UTC66
    pub event: TimelineEvent,
c9effeac326aatagen2026-10-25 10:32 UTC67
    /// utf-8 byte ranges of matched words in the content's text, the message body, a
c9effeac326aatagen2026-10-25 10:32 UTC68
    /// sticker's body or a poll's question
c9effeac326aatagen2026-10-25 10:32 UTC69
    pub matches: Vec<SearchMatch>,
c9effeac326aatagen2026-10-25 10:32 UTC70
}
c9effeac326aatagen2026-10-25 10:32 UTC71
c9effeac326aatagen2026-10-25 10:32 UTC72
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
c9effeac326aatagen2026-10-25 10:32 UTC73
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
c9effeac326aatagen2026-10-25 10:32 UTC74
pub struct SearchMatch {
c9effeac326aatagen2026-10-25 10:32 UTC75
    pub start: u32,
c9effeac326aatagen2026-10-25 10:32 UTC76
    pub end: u32,
c9effeac326aatagen2026-10-25 10:32 UTC77
}
c9effeac326aatagen2026-10-25 10:32 UTC78
c9effeac326aatagen2026-10-25 10:32 UTC79
#[derive(Clone, Debug, Eq, PartialEq)]
c9effeac326aatagen2026-10-25 10:32 UTC80
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
c9effeac326aatagen2026-10-25 10:32 UTC81
pub struct SearchCoverage {
c9effeac326aatagen2026-10-25 10:32 UTC82
    pub rooms: Vec<RoomSearchCoverage>,
c9effeac326aatagen2026-10-25 10:32 UTC83
    /// false when the index lives in memory and starts over with the next engine
c9effeac326aatagen2026-10-25 10:32 UTC84
    pub persistent: bool,
c9effeac326aatagen2026-10-25 10:32 UTC85
    /// messages that couldn't be decrypted yet, so can't be found yet
c9effeac326aatagen2026-10-25 10:32 UTC86
    pub undecrypted: usize,
c9effeac326aatagen2026-10-25 10:32 UTC87
}
c9effeac326aatagen2026-10-25 10:32 UTC88
c9effeac326aatagen2026-10-25 10:32 UTC89
#[derive(Clone, Debug, Eq, PartialEq)]
c9effeac326aatagen2026-10-25 10:32 UTC90
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
c9effeac326aatagen2026-10-25 10:32 UTC91
pub struct RoomSearchCoverage {
c9effeac326aatagen2026-10-25 10:32 UTC92
    pub room_id: OwnedRoomId,
c9effeac326aatagen2026-10-25 10:32 UTC93
    pub oldest_indexed_ms: Option<u64>,
c9effeac326aatagen2026-10-25 10:32 UTC94
    pub newest_indexed_ms: Option<u64>,
c9effeac326aatagen2026-10-25 10:32 UTC95
    /// backfill walked back to the oldest event the server would hand over
c9effeac326aatagen2026-10-25 10:32 UTC96
    pub start_reached: bool,
c9effeac326aatagen2026-10-25 10:32 UTC97
    pub backfill: SearchBackfill,
c9effeac326aatagen2026-10-25 10:32 UTC98
}
c9effeac326aatagen2026-10-25 10:32 UTC99
c9effeac326aatagen2026-10-25 10:32 UTC100
#[derive(Clone, Debug, Eq, PartialEq)]
c9effeac326aatagen2026-10-25 10:32 UTC101
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
c9effeac326aatagen2026-10-25 10:32 UTC102
pub enum SearchBackfill {
c9effeac326aatagen2026-10-25 10:32 UTC103
    Waiting,
c9effeac326aatagen2026-10-25 10:32 UTC104
    Running,
c9effeac326aatagen2026-10-25 10:32 UTC105
    /// this engine's page budget for the room is spent, the next one carries on
c9effeac326aatagen2026-10-25 10:32 UTC106
    Paused,
c9effeac326aatagen2026-10-25 10:32 UTC107
    Complete,
c9effeac326aatagen2026-10-25 10:32 UTC108
    Disabled,
c9effeac326aatagen2026-10-25 10:32 UTC109
    Failed {
c9effeac326aatagen2026-10-25 10:32 UTC110
        message: String,
c9effeac326aatagen2026-10-25 10:32 UTC111
        retry_at_ms: u64,
c9effeac326aatagen2026-10-25 10:32 UTC112
    },
c9effeac326aatagen2026-10-25 10:32 UTC113
}