refine visible images view
This commit is contained in:
+22
-80
@@ -171,7 +171,7 @@ pub fn get_visible_message_ids_read_only(
|
||||
pub fn get_visible_image_ids(db: &Local, identity: Identity) -> HashSet<u64> {
|
||||
let mut ids = HashSet::new();
|
||||
|
||||
// 1. My Servers and their Members
|
||||
// 1. My Servers and their Members (Avatars/Banners)
|
||||
let memberships: Vec<_> = db.server_member().identity().filter(identity).collect();
|
||||
for member in memberships {
|
||||
if let Some(s) = db.server().id().find(member.server_id) {
|
||||
@@ -191,50 +191,21 @@ pub fn get_visible_image_ids(db: &Local, identity: Identity) -> HashSet<u64> {
|
||||
}
|
||||
}
|
||||
|
||||
// 2. Custom Emojis
|
||||
// 2. Custom Emojis (Global)
|
||||
for ce in db.custom_emoji().name().filter(""..) {
|
||||
ids.insert(ce.id);
|
||||
}
|
||||
|
||||
// 3. Recent Message Images (Fast Path)
|
||||
let my_server_ids: Vec<u64> = db
|
||||
.server_member()
|
||||
.identity()
|
||||
.filter(identity)
|
||||
.map(|m| m.server_id)
|
||||
.collect();
|
||||
for server_id in my_server_ids {
|
||||
for rm in db.recent_message().server_id().filter(server_id) {
|
||||
for id in &rm.image_ids {
|
||||
ids.insert(*id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// DM Recent Messages
|
||||
let my_dms: Vec<_> = db
|
||||
.direct_message()
|
||||
.sender()
|
||||
.filter(identity)
|
||||
.filter(|dm| dm.is_open_sender)
|
||||
.chain(
|
||||
db.direct_message()
|
||||
.recipient()
|
||||
.filter(identity)
|
||||
.filter(|dm| dm.is_open_recipient),
|
||||
)
|
||||
.map(|dm| dm.channel_id)
|
||||
.collect();
|
||||
for channel_id in my_dms {
|
||||
for rm in db.recent_message().channel_id().filter(channel_id) {
|
||||
for id in &rm.image_ids {
|
||||
ids.insert(*id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Scrollback Images (Slow Path - only if active)
|
||||
// 3. Active Channel Images (Recent + Scrollback)
|
||||
if let Some(sub) = db.channel_subscription().identity().find(identity) {
|
||||
// From Recent Messages cache for this channel
|
||||
for rm in db.recent_message().channel_id().filter(sub.channel_id) {
|
||||
for id in &rm.image_ids {
|
||||
ids.insert(*id);
|
||||
}
|
||||
}
|
||||
|
||||
// From Scrollback Messages for this channel
|
||||
for cms in db
|
||||
.channel_message_sequence()
|
||||
.channel_id()
|
||||
@@ -256,7 +227,7 @@ pub fn get_visible_image_ids(db: &Local, identity: Identity) -> HashSet<u64> {
|
||||
pub fn get_visible_image_ids_read_only(db: &LocalReadOnly, identity: Identity) -> HashSet<u64> {
|
||||
let mut ids = HashSet::new();
|
||||
|
||||
// 1. My Servers and their Members
|
||||
// 1. My Servers and their Members (Avatars/Banners)
|
||||
let memberships: Vec<_> = db.server_member().identity().filter(identity).collect();
|
||||
for member in memberships {
|
||||
if let Some(s) = db.server().id().find(member.server_id) {
|
||||
@@ -276,50 +247,21 @@ pub fn get_visible_image_ids_read_only(db: &LocalReadOnly, identity: Identity) -
|
||||
}
|
||||
}
|
||||
|
||||
// 2. Custom Emojis
|
||||
// 2. Custom Emojis (Global)
|
||||
for ce in db.custom_emoji().name().filter(""..) {
|
||||
ids.insert(ce.id);
|
||||
}
|
||||
|
||||
// 3. Recent Message Images
|
||||
let my_server_ids: Vec<u64> = db
|
||||
.server_member()
|
||||
.identity()
|
||||
.filter(identity)
|
||||
.map(|m| m.server_id)
|
||||
.collect();
|
||||
for server_id in my_server_ids {
|
||||
for rm in db.recent_message().server_id().filter(server_id) {
|
||||
for id in &rm.image_ids {
|
||||
ids.insert(*id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// DM Recent Messages
|
||||
let my_dms: Vec<_> = db
|
||||
.direct_message()
|
||||
.sender()
|
||||
.filter(identity)
|
||||
.filter(|dm| dm.is_open_sender)
|
||||
.chain(
|
||||
db.direct_message()
|
||||
.recipient()
|
||||
.filter(identity)
|
||||
.filter(|dm| dm.is_open_recipient),
|
||||
)
|
||||
.map(|dm| dm.channel_id)
|
||||
.collect();
|
||||
for channel_id in my_dms {
|
||||
for rm in db.recent_message().channel_id().filter(channel_id) {
|
||||
for id in &rm.image_ids {
|
||||
ids.insert(*id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Scrollback Images
|
||||
// 3. Active Channel Images (Recent + Scrollback)
|
||||
if let Some(sub) = db.channel_subscription().identity().find(identity) {
|
||||
// From Recent Messages cache for this channel
|
||||
for rm in db.recent_message().channel_id().filter(sub.channel_id) {
|
||||
for id in &rm.image_ids {
|
||||
ids.insert(*id);
|
||||
}
|
||||
}
|
||||
|
||||
// From Scrollback Messages for this channel
|
||||
for cms in db
|
||||
.channel_message_sequence()
|
||||
.channel_id()
|
||||
|
||||
Reference in New Issue
Block a user