mirror of
https://github.com/aljazceru/notedeck.git
synced 2025-12-24 03:24:21 +01:00
This splits notedeck into: - notedeck - notedeck_chrome - notedeck_columns The `notedeck` crate is the library that `notedeck_chrome` and `notedeck_columns`, use. It contains common functionality related to notedeck apps such as the NoteCache, ImageCache, etc. The `notedeck_chrome` crate is the binary and ui chrome. It is responsible for managing themes, user accounts, signing, data paths, nostrdb, image caches etc. It will eventually have its own ui which has yet to be determined. For now it just manages the browser data, which is passed to apps via a new struct called `AppContext`. `notedeck_columns` is our columns app, with less responsibility now that more things are handled by `notedeck_chrome` There is still much work left to do before this is a proper browser: - process isolation - sandboxing - etc This is the beginning of a new era! We're just getting started. Signed-off-by: William Casarin <jb55@jb55.com>
70 lines
2.0 KiB
Rust
70 lines
2.0 KiB
Rust
use crate::{column::Columns, timeline::ViewFilter, Result};
|
|
use nostrdb::{Ndb, NoteKey, Transaction};
|
|
use notedeck::{CachedNote, NoteCache, UnknownIds};
|
|
use tracing::error;
|
|
|
|
pub fn update_from_columns(
|
|
txn: &Transaction,
|
|
unknown_ids: &mut UnknownIds,
|
|
columns: &Columns,
|
|
ndb: &Ndb,
|
|
note_cache: &mut NoteCache,
|
|
) -> bool {
|
|
let before = unknown_ids.ids().len();
|
|
if let Err(e) = get_unknown_ids(txn, unknown_ids, columns, ndb, note_cache) {
|
|
error!("UnknownIds::update {e}");
|
|
}
|
|
let after = unknown_ids.ids().len();
|
|
|
|
if before != after {
|
|
unknown_ids.mark_updated();
|
|
true
|
|
} else {
|
|
false
|
|
}
|
|
}
|
|
|
|
pub fn get_unknown_ids(
|
|
txn: &Transaction,
|
|
unknown_ids: &mut UnknownIds,
|
|
columns: &Columns,
|
|
ndb: &Ndb,
|
|
note_cache: &mut NoteCache,
|
|
) -> Result<()> {
|
|
#[cfg(feature = "profiling")]
|
|
puffin::profile_function!();
|
|
|
|
let mut new_cached_notes: Vec<(NoteKey, CachedNote)> = vec![];
|
|
|
|
for timeline in columns.timelines() {
|
|
for noteref in timeline.notes(ViewFilter::NotesAndReplies) {
|
|
let note = ndb.get_note_by_key(txn, noteref.key)?;
|
|
let note_key = note.key().unwrap();
|
|
let cached_note = note_cache.cached_note(noteref.key);
|
|
let cached_note = if let Some(cn) = cached_note {
|
|
cn.clone()
|
|
} else {
|
|
let new_cached_note = CachedNote::new(¬e);
|
|
new_cached_notes.push((note_key, new_cached_note.clone()));
|
|
new_cached_note
|
|
};
|
|
|
|
let _ = notedeck::get_unknown_note_ids(
|
|
ndb,
|
|
&cached_note,
|
|
txn,
|
|
¬e,
|
|
unknown_ids.ids_mut(),
|
|
);
|
|
}
|
|
}
|
|
|
|
// This is mainly done to avoid the double mutable borrow that would happen
|
|
// if we tried to update the note_cache mutably in the loop above
|
|
for (note_key, note) in new_cached_notes {
|
|
note_cache.cache_mut().insert(note_key, note);
|
|
}
|
|
|
|
Ok(())
|
|
}
|