Message List: Fix missing avatars in big channel messages
This commit is contained in:
parent
1285499e96
commit
d4d6166ede
@ -42,12 +42,26 @@ export function addPhotoToLocalDb(photo: GramJs.TypePhoto) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function addChatToLocalDb(chat: GramJs.TypeChat) {
|
function addChatToLocalDb(chat: GramJs.Chat | GramJs.Channel, noOverwrite = false) {
|
||||||
if (chat instanceof GramJs.Chat || chat instanceof GramJs.Channel) {
|
const id = buildApiPeerId(chat.id, chat instanceof GramJs.Chat ? 'chat' : 'channel');
|
||||||
localDb.chats[buildApiPeerId(chat.id, chat instanceof GramJs.Chat ? 'chat' : 'channel')] = chat;
|
if (!noOverwrite || !localDb.chats[id]) {
|
||||||
|
localDb.chats[id] = chat;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function addUserToLocalDb(user: GramJs.User) {
|
export function addUserToLocalDb(user: GramJs.User, shouldOverwrite = false) {
|
||||||
localDb.users[buildApiPeerId(user.id, 'user')] = user;
|
const id = buildApiPeerId(user.id, 'user');
|
||||||
|
if (shouldOverwrite || !localDb.users[id]) {
|
||||||
|
localDb.users[id] = user;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function addEntitiesWithPhotosToLocalDb(entities: (GramJs.TypeUser | GramJs.TypeChat)[]) {
|
||||||
|
entities.forEach((entity) => {
|
||||||
|
if (entity instanceof GramJs.User && entity.photo) {
|
||||||
|
addUserToLocalDb(entity);
|
||||||
|
} else if ((entity instanceof GramJs.Chat || entity instanceof GramJs.Channel) && entity.photo) {
|
||||||
|
addChatToLocalDb(entity);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@ -9,7 +9,7 @@ import { buildInputPeer, generateRandomBigInt } from '../gramjsBuilders';
|
|||||||
import { buildApiUser } from '../apiBuilders/users';
|
import { buildApiUser } from '../apiBuilders/users';
|
||||||
import { buildApiBotInlineMediaResult, buildApiBotInlineResult, buildBotSwitchPm } from '../apiBuilders/bots';
|
import { buildApiBotInlineMediaResult, buildApiBotInlineResult, buildBotSwitchPm } from '../apiBuilders/bots';
|
||||||
import { buildApiChatFromPreview } from '../apiBuilders/chats';
|
import { buildApiChatFromPreview } from '../apiBuilders/chats';
|
||||||
import { addUserToLocalDb } from '../helpers';
|
import { addEntitiesWithPhotosToLocalDb, addUserToLocalDb } from '../helpers';
|
||||||
|
|
||||||
export function init() {
|
export function init() {
|
||||||
}
|
}
|
||||||
@ -84,7 +84,7 @@ export async function fetchInlineBotResults({
|
|||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
result.users.map(addUserToLocalDb);
|
addEntitiesWithPhotosToLocalDb(result.users);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
isGallery: Boolean(result.gallery),
|
isGallery: Boolean(result.gallery),
|
||||||
|
|||||||
@ -13,7 +13,7 @@ import {
|
|||||||
} from '../apiBuilders/calls';
|
} from '../apiBuilders/calls';
|
||||||
import { buildApiUser } from '../apiBuilders/users';
|
import { buildApiUser } from '../apiBuilders/users';
|
||||||
import { buildApiChatFromPreview } from '../apiBuilders/chats';
|
import { buildApiChatFromPreview } from '../apiBuilders/chats';
|
||||||
import { addChatToLocalDb, addUserToLocalDb } from '../helpers';
|
import { addEntitiesWithPhotosToLocalDb } from '../helpers';
|
||||||
import { GROUP_CALL_PARTICIPANTS_LIMIT } from '../../../config';
|
import { GROUP_CALL_PARTICIPANTS_LIMIT } from '../../../config';
|
||||||
|
|
||||||
let onUpdate: OnApiUpdate;
|
let onUpdate: OnApiUpdate;
|
||||||
@ -35,8 +35,8 @@ export async function getGroupCall({
|
|||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
result.users.map(addUserToLocalDb);
|
addEntitiesWithPhotosToLocalDb(result.users);
|
||||||
result.chats.map(addChatToLocalDb);
|
addEntitiesWithPhotosToLocalDb(result.chats);
|
||||||
|
|
||||||
const users = result.users.map(buildApiUser).filter<ApiUser>(Boolean as any);
|
const users = result.users.map(buildApiUser).filter<ApiUser>(Boolean as any);
|
||||||
const chats = result.chats.map((c) => buildApiChatFromPreview(c)).filter<ApiChat>(Boolean as any);
|
const chats = result.chats.map((c) => buildApiChatFromPreview(c)).filter<ApiChat>(Boolean as any);
|
||||||
@ -122,8 +122,8 @@ export async function fetchGroupCallParticipants({
|
|||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
result.users.map(addUserToLocalDb);
|
addEntitiesWithPhotosToLocalDb(result.users);
|
||||||
result.chats.map(addChatToLocalDb);
|
addEntitiesWithPhotosToLocalDb(result.chats);
|
||||||
|
|
||||||
const users = result.users.map(buildApiUser).filter<ApiUser>(Boolean as any);
|
const users = result.users.map(buildApiUser).filter<ApiUser>(Boolean as any);
|
||||||
const chats = result.chats.map((c) => buildApiChatFromPreview(c)).filter<ApiChat>(Boolean as any);
|
const chats = result.chats.map((c) => buildApiChatFromPreview(c)).filter<ApiChat>(Boolean as any);
|
||||||
|
|||||||
@ -30,7 +30,6 @@ import {
|
|||||||
import { buildApiMessage, buildMessageDraft } from '../apiBuilders/messages';
|
import { buildApiMessage, buildMessageDraft } from '../apiBuilders/messages';
|
||||||
import { buildApiUser, buildApiUsersAndStatuses } from '../apiBuilders/users';
|
import { buildApiUser, buildApiUsersAndStatuses } from '../apiBuilders/users';
|
||||||
import { buildCollectionByKey } from '../../../util/iteratees';
|
import { buildCollectionByKey } from '../../../util/iteratees';
|
||||||
import localDb from '../localDb';
|
|
||||||
import {
|
import {
|
||||||
buildInputEntity,
|
buildInputEntity,
|
||||||
buildInputPeer,
|
buildInputPeer,
|
||||||
@ -40,7 +39,7 @@ import {
|
|||||||
buildChatBannedRights,
|
buildChatBannedRights,
|
||||||
buildChatAdminRights,
|
buildChatAdminRights,
|
||||||
} from '../gramjsBuilders';
|
} from '../gramjsBuilders';
|
||||||
import { addChatToLocalDb, addMessageToLocalDb } from '../helpers';
|
import { addEntitiesWithPhotosToLocalDb, addMessageToLocalDb } from '../helpers';
|
||||||
import { buildApiPeerId, getApiChatIdFromMtpPeer } from '../apiBuilders/peers';
|
import { buildApiPeerId, getApiChatIdFromMtpPeer } from '../apiBuilders/peers';
|
||||||
|
|
||||||
const MAX_INT_32 = 2 ** 31 - 1;
|
const MAX_INT_32 = 2 ** 31 - 1;
|
||||||
@ -1105,15 +1104,11 @@ function updateLocalDb(result: (
|
|||||||
GramJs.messages.Chats | GramJs.messages.ChatsSlice | GramJs.TypeUpdates
|
GramJs.messages.Chats | GramJs.messages.ChatsSlice | GramJs.TypeUpdates
|
||||||
)) {
|
)) {
|
||||||
if ('users' in result) {
|
if ('users' in result) {
|
||||||
result.users.forEach((user) => {
|
addEntitiesWithPhotosToLocalDb(result.users);
|
||||||
if (user instanceof GramJs.User) {
|
|
||||||
localDb.users[buildApiPeerId(user.id, 'user')] = user;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ('chats' in result) {
|
if ('chats' in result) {
|
||||||
result.chats.forEach(addChatToLocalDb);
|
addEntitiesWithPhotosToLocalDb(result.chats);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ('messages' in result) {
|
if ('messages' in result) {
|
||||||
|
|||||||
@ -18,7 +18,7 @@ import { buildApiUser, buildApiUserFromFull, buildApiUsersAndStatuses } from '..
|
|||||||
import { buildApiChatFromPreview } from '../apiBuilders/chats';
|
import { buildApiChatFromPreview } from '../apiBuilders/chats';
|
||||||
import { buildApiPhoto } from '../apiBuilders/common';
|
import { buildApiPhoto } from '../apiBuilders/common';
|
||||||
import localDb from '../localDb';
|
import localDb from '../localDb';
|
||||||
import { addChatToLocalDb, addPhotoToLocalDb } from '../helpers';
|
import { addEntitiesWithPhotosToLocalDb, addPhotoToLocalDb } from '../helpers';
|
||||||
import { buildApiPeerId } from '../apiBuilders/peers';
|
import { buildApiPeerId } from '../apiBuilders/peers';
|
||||||
|
|
||||||
let onUpdate: OnApiUpdate;
|
let onUpdate: OnApiUpdate;
|
||||||
@ -249,7 +249,7 @@ export async function fetchProfilePhotos(user?: ApiUser, chat?: ApiChat) {
|
|||||||
|
|
||||||
function updateLocalDb(result: (GramJs.photos.Photos | GramJs.photos.PhotosSlice | GramJs.messages.Chats)) {
|
function updateLocalDb(result: (GramJs.photos.Photos | GramJs.photos.PhotosSlice | GramJs.messages.Chats)) {
|
||||||
if ('chats' in result) {
|
if ('chats' in result) {
|
||||||
result.chats.forEach(addChatToLocalDb);
|
addEntitiesWithPhotosToLocalDb(result.chats);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ('photos' in result) {
|
if ('photos' in result) {
|
||||||
|
|||||||
@ -31,7 +31,12 @@ import {
|
|||||||
import localDb from './localDb';
|
import localDb from './localDb';
|
||||||
import { omitVirtualClassFields } from './apiBuilders/helpers';
|
import { omitVirtualClassFields } from './apiBuilders/helpers';
|
||||||
import { DEBUG } from '../../config';
|
import { DEBUG } from '../../config';
|
||||||
import { addMessageToLocalDb, addPhotoToLocalDb, resolveMessageApiChatId } from './helpers';
|
import {
|
||||||
|
addMessageToLocalDb,
|
||||||
|
addEntitiesWithPhotosToLocalDb,
|
||||||
|
addPhotoToLocalDb,
|
||||||
|
resolveMessageApiChatId,
|
||||||
|
} from './helpers';
|
||||||
import { buildApiNotifyException, buildPrivacyKey, buildPrivacyRules } from './apiBuilders/misc';
|
import { buildApiNotifyException, buildPrivacyKey, buildPrivacyRules } from './apiBuilders/misc';
|
||||||
import { buildApiPhoto } from './apiBuilders/common';
|
import { buildApiPhoto } from './apiBuilders/common';
|
||||||
import {
|
import {
|
||||||
@ -56,37 +61,36 @@ export function init(_onUpdate: OnApiUpdate) {
|
|||||||
const sentMessageIds = new Set();
|
const sentMessageIds = new Set();
|
||||||
let serverTimeOffset = 0;
|
let serverTimeOffset = 0;
|
||||||
|
|
||||||
function addEntities(entities: (GramJs.TypeUser | GramJs.TypeChat)[] | undefined) {
|
function dispatchUserAndChatUpdates(entities: (GramJs.TypeUser | GramJs.TypeChat)[]) {
|
||||||
if (entities?.length) {
|
entities
|
||||||
entities
|
.filter((e) => e instanceof GramJs.User)
|
||||||
.filter((e) => e instanceof GramJs.User)
|
.map(buildApiUser)
|
||||||
.map(buildApiUser)
|
.forEach((user) => {
|
||||||
.forEach((user) => {
|
if (!user) {
|
||||||
if (!user) {
|
return;
|
||||||
return;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
onUpdate({
|
onUpdate({
|
||||||
'@type': 'updateUser',
|
'@type': 'updateUser',
|
||||||
id: user.id,
|
id: user.id,
|
||||||
user,
|
user,
|
||||||
});
|
|
||||||
});
|
});
|
||||||
entities
|
});
|
||||||
.filter((e) => e instanceof GramJs.Chat || e instanceof GramJs.Channel)
|
|
||||||
.map((e) => buildApiChatFromPreview(e))
|
|
||||||
.forEach((chat) => {
|
|
||||||
if (!chat) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
onUpdate({
|
entities
|
||||||
'@type': 'updateChat',
|
.filter((e) => e instanceof GramJs.Chat || e instanceof GramJs.Channel)
|
||||||
id: chat.id,
|
.map((e) => buildApiChatFromPreview(e))
|
||||||
chat,
|
.forEach((chat) => {
|
||||||
});
|
if (!chat) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
onUpdate({
|
||||||
|
'@type': 'updateChat',
|
||||||
|
id: chat.id,
|
||||||
|
chat,
|
||||||
});
|
});
|
||||||
}
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export function updater(update: Update, originRequest?: GramJs.AnyRequest) {
|
export function updater(update: Update, originRequest?: GramJs.AnyRequest) {
|
||||||
@ -150,7 +154,11 @@ export function updater(update: Update, originRequest?: GramJs.AnyRequest) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// eslint-disable-next-line no-underscore-dangle
|
// eslint-disable-next-line no-underscore-dangle
|
||||||
addEntities(update._entities);
|
const entities = update._entities;
|
||||||
|
if (entities) {
|
||||||
|
addEntitiesWithPhotosToLocalDb(entities);
|
||||||
|
dispatchUserAndChatUpdates(entities);
|
||||||
|
}
|
||||||
|
|
||||||
if (update instanceof GramJs.UpdateNewScheduledMessage) {
|
if (update instanceof GramJs.UpdateNewScheduledMessage) {
|
||||||
onUpdate({
|
onUpdate({
|
||||||
@ -818,7 +826,11 @@ export function updater(update: Update, originRequest?: GramJs.AnyRequest) {
|
|||||||
});
|
});
|
||||||
} else if (update instanceof GramJs.UpdateGroupCallParticipants) {
|
} else if (update instanceof GramJs.UpdateGroupCallParticipants) {
|
||||||
// eslint-disable-next-line no-underscore-dangle
|
// eslint-disable-next-line no-underscore-dangle
|
||||||
addEntities(update._entities);
|
const entities = update._entities;
|
||||||
|
if (entities) {
|
||||||
|
addEntitiesWithPhotosToLocalDb(entities);
|
||||||
|
dispatchUserAndChatUpdates(entities);
|
||||||
|
}
|
||||||
|
|
||||||
onUpdate({
|
onUpdate({
|
||||||
'@type': 'updateGroupCallParticipants',
|
'@type': 'updateGroupCallParticipants',
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user