refine visible images view

This commit is contained in:
2026-04-09 01:44:21 -04:00
parent 34b780b9bf
commit f007cf7ff1
2 changed files with 23 additions and 80 deletions
+22 -80
View File
@@ -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()