fix server avatars
This commit is contained in:
@@ -79,11 +79,43 @@ pub fn get_visible_image_ids(db: &Local, identity: Identity) -> HashSet<u64> {
|
||||
}
|
||||
}
|
||||
|
||||
// User's own avatar/banner
|
||||
if let Some(user) = db.user().identity().find(identity) {
|
||||
if let Some(id) = user.avatar_id { results.insert(id); }
|
||||
if let Some(id) = user.banner_id { results.insert(id); }
|
||||
}
|
||||
|
||||
// Server avatars for servers I am a member of or are public
|
||||
let my_server_ids: HashSet<u64> = db.server_member().identity().filter(identity).map(|m| m.server_id).collect();
|
||||
for s in db.server().name().filter(""..) {
|
||||
if s.public || my_server_ids.contains(&s.id) {
|
||||
if let Some(id) = s.avatar_id { results.insert(id); }
|
||||
}
|
||||
}
|
||||
|
||||
// Avatars for members of servers I am in (and redundant check for server avatars stored in membership)
|
||||
for server_id in my_server_ids {
|
||||
for member in db.server_member().server_id().filter(server_id) {
|
||||
if let Some(id) = member.avatar_id { results.insert(id); }
|
||||
}
|
||||
// Also check if any server I'm in has an avatar id that might not have been caught in the name filter
|
||||
if let Some(s) = db.server().id().find(server_id) {
|
||||
if let Some(id) = s.avatar_id { results.insert(id); }
|
||||
}
|
||||
}
|
||||
|
||||
// Avatars for DM participants
|
||||
for dm in db.direct_message().sender().filter(identity) {
|
||||
if let Some(u) = db.user().identity().find(dm.recipient) {
|
||||
if let Some(id) = u.avatar_id { results.insert(id); }
|
||||
}
|
||||
}
|
||||
for dm in db.direct_message().recipient().filter(identity) {
|
||||
if let Some(u) = db.user().identity().find(dm.sender) {
|
||||
if let Some(id) = u.avatar_id { results.insert(id); }
|
||||
}
|
||||
}
|
||||
|
||||
results
|
||||
}
|
||||
|
||||
@@ -99,11 +131,43 @@ pub fn get_visible_image_ids_read_only(db: &LocalReadOnly, identity: Identity) -
|
||||
}
|
||||
}
|
||||
|
||||
// User's own avatar/banner
|
||||
if let Some(user) = db.user().identity().find(identity) {
|
||||
if let Some(id) = user.avatar_id { results.insert(id); }
|
||||
if let Some(id) = user.banner_id { results.insert(id); }
|
||||
}
|
||||
|
||||
// Server avatars for servers I am a member of or are public
|
||||
let my_server_ids: HashSet<u64> = db.server_member().identity().filter(identity).map(|m| m.server_id).collect();
|
||||
for s in db.server().name().filter(""..) {
|
||||
if s.public || my_server_ids.contains(&s.id) {
|
||||
if let Some(id) = s.avatar_id { results.insert(id); }
|
||||
}
|
||||
}
|
||||
|
||||
// Avatars for members of servers I am in (and redundant check for server avatars stored in membership)
|
||||
for server_id in my_server_ids {
|
||||
for member in db.server_member().server_id().filter(server_id) {
|
||||
if let Some(id) = member.avatar_id { results.insert(id); }
|
||||
}
|
||||
// Also check if any server I'm in has an avatar id that might not have been caught in the name filter
|
||||
if let Some(s) = db.server().id().find(server_id) {
|
||||
if let Some(id) = s.avatar_id { results.insert(id); }
|
||||
}
|
||||
}
|
||||
|
||||
// Avatars for DM participants
|
||||
for dm in db.direct_message().sender().filter(identity) {
|
||||
if let Some(u) = db.user().identity().find(dm.recipient) {
|
||||
if let Some(id) = u.avatar_id { results.insert(id); }
|
||||
}
|
||||
}
|
||||
for dm in db.direct_message().recipient().filter(identity) {
|
||||
if let Some(u) = db.user().identity().find(dm.sender) {
|
||||
if let Some(id) = u.avatar_id { results.insert(id); }
|
||||
}
|
||||
}
|
||||
|
||||
results
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import { Identity } from "spacetimedb";
|
||||
import { SvelteMap, SvelteSet } from "svelte/reactivity";
|
||||
import * as Types from "../../module_bindings/types";
|
||||
import { reducers } from "../../module_bindings";
|
||||
import { getUsername, formatTime } from "../utils";
|
||||
import { getConnection } from "../../config";
|
||||
import { DatabaseService } from "./database.svelte";
|
||||
@@ -170,6 +169,8 @@ export class ChatService {
|
||||
$effect(() => {
|
||||
const blobs = this.#db.imageBlobs;
|
||||
const currentImages = this.#db.images;
|
||||
const conn = getConnection();
|
||||
if (!conn || !this.identity) return;
|
||||
|
||||
for (const blob of blobs) {
|
||||
const idStr = blob.imageId.toString();
|
||||
@@ -211,7 +212,14 @@ export class ChatService {
|
||||
const idStr = server.avatarId.toString();
|
||||
const url = this.#blobUrls.get(idStr);
|
||||
if (url && this.#serverAvatarUrls.get(idStr) !== url) {
|
||||
console.log(`[ChatService] Mapping server avatar URL: ${idStr} -> ${url} for server ${server.name}`);
|
||||
this.#serverAvatarUrls.set(idStr, url);
|
||||
} else if (!url) {
|
||||
// Check if we already requested this
|
||||
if (!this.#blobUrls.has(idStr)) {
|
||||
console.log(`[ChatService] Requesting missing server avatar blob for ${server.name}: ${idStr}`);
|
||||
conn.reducers.requestImageBlob({ imageId: server.avatarId });
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user