mirror of
https://github.com/mikedilger/gossip.git
synced 2024-09-19 19:46:50 +00:00
Feed computation now threaded (will respect setting soon)
This commit is contained in:
parent
d8567da83a
commit
600b90159a
@ -65,56 +65,68 @@ lazy_static! {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
pub async fn get_feed() -> Vec<Id> {
|
pub async fn get_feed(threaded: bool) -> Vec<Id> {
|
||||||
let feed: Vec<FeedEvent> = GLOBALS
|
let feed: Vec<FeedEvent> = GLOBALS
|
||||||
.feed_events
|
.feed_events
|
||||||
.lock()
|
.lock()
|
||||||
.await
|
.await
|
||||||
.iter()
|
.iter()
|
||||||
.map(|(_, e)| e)
|
.map(|(_, e)| e)
|
||||||
.filter(|e| e.feed_related) // feed related
|
.filter(|e| e.event.is_some() && e.event.as_ref().unwrap().kind == EventKind::TextNote)
|
||||||
//.filter(|e| e.in_reply_to.is_none()) // only root events
|
.filter(|e| {
|
||||||
|
if threaded {
|
||||||
|
e.in_reply_to.is_none()
|
||||||
|
} else {
|
||||||
|
true
|
||||||
|
}
|
||||||
|
}) // only root events
|
||||||
.cloned()
|
.cloned()
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
sort_feed(feed)
|
sort_feed(feed, threaded)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
pub fn blocking_get_feed() -> Vec<Id> {
|
pub fn blocking_get_feed(threaded: bool) -> Vec<Id> {
|
||||||
let feed: Vec<FeedEvent> = GLOBALS
|
let feed: Vec<FeedEvent> = GLOBALS
|
||||||
.feed_events
|
.feed_events
|
||||||
.blocking_lock()
|
.blocking_lock()
|
||||||
.iter()
|
.iter()
|
||||||
.map(|(_, e)| e)
|
.map(|(_, e)| e)
|
||||||
.filter(|e| e.feed_related) // feed related
|
.filter(|e| e.event.is_some() && e.event.as_ref().unwrap().kind == EventKind::TextNote)
|
||||||
//.filter(|e| e.in_reply_to.is_none()) // only root events
|
.filter(|e| {
|
||||||
|
if threaded {
|
||||||
|
e.in_reply_to.is_none()
|
||||||
|
} else {
|
||||||
|
true
|
||||||
|
}
|
||||||
|
}) // only root events
|
||||||
.cloned()
|
.cloned()
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
sort_feed(feed)
|
sort_feed(feed, threaded)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn sort_feed(mut feed: Vec<FeedEvent>) -> Vec<Id> {
|
fn sort_feed(mut feed: Vec<FeedEvent>, threaded: bool) -> Vec<Id> {
|
||||||
// Threaded, TBD:
|
if threaded {
|
||||||
// feed.sort_unstable_by(|a, b| a.last_reply_at.cmp(&b.last_reply_at));
|
feed.sort_unstable_by(|a, b| b.last_reply_at.cmp(&a.last_reply_at));
|
||||||
|
} else {
|
||||||
// Linear sort neweset first:
|
feed.sort_unstable_by(|a, b| {
|
||||||
feed.sort_unstable_by(|a, b| {
|
if a.event.is_some() && b.event.is_some() {
|
||||||
if a.event.is_some() && b.event.is_some() {
|
b.event
|
||||||
b.event
|
.as_ref()
|
||||||
.as_ref()
|
.unwrap()
|
||||||
.unwrap()
|
.created_at
|
||||||
.created_at
|
.cmp(&a.event.as_ref().unwrap().created_at)
|
||||||
.cmp(&a.event.as_ref().unwrap().created_at)
|
} else if a.event.is_some() {
|
||||||
} else if a.event.is_some() {
|
std::cmp::Ordering::Greater
|
||||||
std::cmp::Ordering::Greater
|
} else if b.event.is_some() {
|
||||||
} else if b.event.is_some() {
|
std::cmp::Ordering::Less
|
||||||
std::cmp::Ordering::Less
|
} else {
|
||||||
} else {
|
std::cmp::Ordering::Equal
|
||||||
std::cmp::Ordering::Equal
|
}
|
||||||
}
|
});
|
||||||
});
|
}
|
||||||
|
|
||||||
feed.iter().map(|e| e.id).collect()
|
feed.iter().map(|e| e.id).collect()
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@ use nostr_proto::PublicKey;
|
|||||||
use tracing::info;
|
use tracing::info;
|
||||||
|
|
||||||
pub(super) fn update(app: &mut GossipUi, _ctx: &Context, _frame: &mut eframe::Frame, ui: &mut Ui) {
|
pub(super) fn update(app: &mut GossipUi, _ctx: &Context, _frame: &mut eframe::Frame, ui: &mut Ui) {
|
||||||
let feed = crate::globals::blocking_get_feed();
|
let feed = crate::globals::blocking_get_feed(true);
|
||||||
|
|
||||||
//let screen_rect = ctx.input().screen_rect; // Rect
|
//let screen_rect = ctx.input().screen_rect; // Rect
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user