Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions app/containers/Avatar/Avatar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -84,12 +84,14 @@ const Avatar = React.memo(

image = (
<Image
key={`${uri}-${avatarETag || ''}`}
style={avatarStyle}
source={{
uri,
headers: RocketChatSettings.customHeaders
}}
priority='high'
cachePolicy='memory-disk'
/>
);
}
Expand Down
68 changes: 33 additions & 35 deletions app/containers/Avatar/useAvatarETag.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,44 +24,42 @@ export const useAvatarETag = ({

useEffect(() => {
let subscription: Subscription;
if (!avatarETag) {
const observeAvatarETag = async () => {
const db = database.active;
const usersCollection = db.get('users');
const subsCollection = db.get('subscriptions');
const observeAvatarETag = async () => {
const db = database.active;
const usersCollection = db.get('users');
const subsCollection = db.get('subscriptions');

let record;
try {
if (username === text) {
const serversDB = database.servers;
const userCollections = serversDB.get('users');
const user = await userCollections.find(id);
record = user;
} else if (isDirect()) {
const [user] = await usersCollection.query(Q.where('username', text)).fetch();
record = user;
} else if (rid) {
record = await subsCollection.find(rid);
}
} catch {
// Record not found
let record;
try {
if (username === text) {
const serversDB = database.servers;
const userCollections = serversDB.get('users');
const user = await userCollections.find(id);
record = user;
} else if (isDirect()) {
const [user] = await usersCollection.query(Q.where('username', text)).fetch();
record = user;
} else if (rid) {
record = await subsCollection.find(rid);
}
} catch {
// Record not found
}

if (record) {
const observable = record.observe() as Observable<TSubscriptionModel | TUserModel | TLoggedUserModel>;
subscription = observable.subscribe(r => {
setAvatarETag(r.avatarETag);
});
}
};
observeAvatarETag();
return () => {
if (subscription?.unsubscribe) {
subscription.unsubscribe();
}
};
}
}, [text]);
if (record) {
const observable = record.observe() as Observable<TSubscriptionModel | TUserModel | TLoggedUserModel>;
subscription = observable.subscribe(r => {
setAvatarETag(r.avatarETag);
});
}
};
observeAvatarETag();
return () => {
if (subscription?.unsubscribe) {
subscription.unsubscribe();
}
};
}, [username, text, id, rid, type]);
Comment thread
coderabbitai[bot] marked this conversation as resolved.

return { avatarETag };
};
16 changes: 16 additions & 0 deletions app/lib/services/connect.ts
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,22 @@ function connect({ server, logoutOnError = false }: { server: string; logoutOnEr
} catch {
// We can't create a new record since we don't receive the user._id
}
// Also update logged-in user's avatarETag in servers database if it's their avatar
const { user: loggedUser } = store.getState().login;
if (loggedUser && loggedUser.username === username) {
const serversDB = database.servers;
const serversUserCollection = serversDB.get('users');
try {
const loggedUserRecord = await serversUserCollection.find(loggedUser.id);
await serversDB.write(async () => {
await loggedUserRecord.update(u => {
u.avatarETag = etag;
});
});
} catch {
// User record not found in servers database
}
}
} else if (/permissions-changed/.test(eventName)) {
const { _id, roles } = ddpMessage.fields.args[1];
const db = database.active;
Expand Down