mirror of
https://github.com/aljazceru/notedeck.git
synced 2026-01-14 05:44:20 +01:00
Another massive refactor to change the way routing works. Now any column can route anywhere. Also things are generally just much better and more modular via the new struct split borrowing technique. I didn't even try to split this into smaller commits for my sanity. Signed-off-by: William Casarin <jb55@jb55.com>
74 lines
1.8 KiB
Rust
74 lines
1.8 KiB
Rust
use crate::notecache::NoteCache;
|
|
use nostrdb::{Ndb, Note, NoteKey, QueryResult, Transaction};
|
|
use std::cmp::Ordering;
|
|
|
|
#[derive(Debug, Eq, PartialEq, Copy, Clone)]
|
|
pub struct NoteRef {
|
|
pub key: NoteKey,
|
|
pub created_at: u64,
|
|
}
|
|
|
|
impl NoteRef {
|
|
pub fn new(key: NoteKey, created_at: u64) -> Self {
|
|
NoteRef { key, created_at }
|
|
}
|
|
|
|
pub fn from_note(note: &Note<'_>) -> Self {
|
|
let created_at = note.created_at();
|
|
let key = note.key().expect("todo: implement NoteBuf");
|
|
NoteRef::new(key, created_at)
|
|
}
|
|
|
|
pub fn from_query_result(qr: QueryResult<'_>) -> Self {
|
|
NoteRef {
|
|
key: qr.note_key,
|
|
created_at: qr.note.created_at(),
|
|
}
|
|
}
|
|
}
|
|
|
|
impl Ord for NoteRef {
|
|
fn cmp(&self, other: &Self) -> Ordering {
|
|
match self.created_at.cmp(&other.created_at) {
|
|
Ordering::Equal => self.key.cmp(&other.key),
|
|
Ordering::Less => Ordering::Greater,
|
|
Ordering::Greater => Ordering::Less,
|
|
}
|
|
}
|
|
}
|
|
|
|
impl PartialOrd for NoteRef {
|
|
fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
|
|
Some(self.cmp(other))
|
|
}
|
|
}
|
|
|
|
pub fn root_note_id_from_selected_id<'a>(
|
|
ndb: &Ndb,
|
|
note_cache: &mut NoteCache,
|
|
txn: &'a Transaction,
|
|
selected_note_id: &'a [u8; 32],
|
|
) -> &'a [u8; 32] {
|
|
let selected_note_key = if let Ok(key) = ndb
|
|
.get_notekey_by_id(txn, selected_note_id)
|
|
.map(NoteKey::new)
|
|
{
|
|
key
|
|
} else {
|
|
return selected_note_id;
|
|
};
|
|
|
|
let note = if let Ok(note) = ndb.get_note_by_key(txn, selected_note_key) {
|
|
note
|
|
} else {
|
|
return selected_note_id;
|
|
};
|
|
|
|
note_cache
|
|
.cached_note_or_insert(selected_note_key, ¬e)
|
|
.reply
|
|
.borrow(note.tags())
|
|
.root()
|
|
.map_or_else(|| selected_note_id, |nr| nr.id)
|
|
}
|