Simplify Feed internal with a single store of events (not one for each kind)

This commit is contained in:
Mike Dilger 2024-06-07 11:07:02 +12:00
parent 79ce510f9b
commit 19d6852c53
2 changed files with 13 additions and 37 deletions

View File

@ -74,7 +74,7 @@ pub(super) fn update(app: &mut GossipUi, ctx: &Context, ui: &mut Ui) {
.unwrap_or_default()
.unwrap_or_default();
let feed = GLOBALS.feed.get_followed();
let feed = GLOBALS.feed.get_feed_events();
let id = format!(
"{} {}",
Into::<u8>::into(list),
@ -135,7 +135,7 @@ pub(super) fn update(app: &mut GossipUi, ctx: &Context, ui: &mut Ui) {
ui.label(" to see any replies to that identity.");
});
}
let feed = GLOBALS.feed.get_inbox();
let feed = GLOBALS.feed.get_feed_events();
let id = if indirect { "activity" } else { "inbox" };
ui.add_space(10.0);
ui.allocate_ui_with_layout(
@ -209,7 +209,7 @@ pub(super) fn update(app: &mut GossipUi, ctx: &Context, ui: &mut Ui) {
});
ui.add_space(6.0);
let feed = GLOBALS.feed.get_person_feed();
let feed = GLOBALS.feed.get_feed_events();
render_a_feed(
app,
ctx,
@ -239,7 +239,7 @@ pub(super) fn update(app: &mut GossipUi, ctx: &Context, ui: &mut Ui) {
});
ui.add_space(10.0);
let feed = GLOBALS.feed.get_dm_chat_feed();
let feed = GLOBALS.feed.get_feed_events();
let id = channel.unique_id();
render_a_feed(app, ctx, ui, feed, false, &id, load_more);
}

View File

@ -22,11 +22,7 @@ pub struct Feed {
pub recompute_lock: AtomicBool,
current_feed_kind: RwLock<FeedKind>,
followed_feed: RwLock<Vec<Id>>,
inbox_feed: RwLock<Vec<Id>>,
person_feed: RwLock<Vec<Id>>,
dm_chat_feed: RwLock<Vec<Id>>,
current_feed_events: RwLock<Vec<Id>>,
// When feeds start
general_feed_start: RwLock<Unixtime>,
@ -51,10 +47,8 @@ impl Feed {
Feed {
recompute_lock: AtomicBool::new(false),
current_feed_kind: RwLock::new(FeedKind::List(PersonList::Followed, false)),
followed_feed: RwLock::new(Vec::new()),
inbox_feed: RwLock::new(Vec::new()),
person_feed: RwLock::new(Vec::new()),
dm_chat_feed: RwLock::new(Vec::new()),
current_feed_events: RwLock::new(Vec::new()),
general_feed_start: RwLock::new(Unixtime::now().unwrap()),
person_feed_start: RwLock::new(Unixtime::now().unwrap()),
inbox_feed_start: RwLock::new(Unixtime::now().unwrap()),
@ -216,27 +210,9 @@ impl Feed {
}
/// Read the followed feed
pub fn get_followed(&self) -> Vec<Id> {
pub fn get_feed_events(&self) -> Vec<Id> {
self.sync_maybe_periodic_recompute();
self.followed_feed.read().clone()
}
/// Read the inbox
pub fn get_inbox(&self) -> Vec<Id> {
self.sync_maybe_periodic_recompute();
self.inbox_feed.read().clone()
}
/// Read the person feed
pub fn get_person_feed(&self) -> Vec<Id> {
self.sync_maybe_periodic_recompute();
self.person_feed.read().clone()
}
/// Read the DmChat feed
pub fn get_dm_chat_feed(&self) -> Vec<Id> {
self.sync_maybe_periodic_recompute();
self.dm_chat_feed.read().clone()
self.current_feed_events.read().clone()
}
/// Get the parent of the current thread feed.
@ -351,7 +327,7 @@ impl Feed {
.collect()
};
*self.followed_feed.write() = events;
*self.current_feed_events.write() = events;
}
FeedKind::Inbox(indirect) => {
if let Some(my_pubkey) = GLOBALS.identity.public_key() {
@ -435,7 +411,7 @@ impl Feed {
.map(|e| e.id)
.collect();
*self.inbox_feed.write() = inbox_events;
*self.current_feed_events.write() = inbox_events;
}
}
FeedKind::Thread { .. } => {
@ -492,11 +468,11 @@ impl Feed {
let events: Vec<Id> = events.iter().map(|e| e.id).collect();
*self.person_feed.write() = events;
*self.current_feed_events.write() = events;
}
FeedKind::DmChat(channel) => {
let ids = GLOBALS.storage.dm_events(&channel)?;
*self.dm_chat_feed.write() = ids;
*self.current_feed_events.write() = ids;
}
}