diff --git a/src/components/main/Main.tsx b/src/components/main/Main.tsx index 454867023..0bf221b27 100644 --- a/src/components/main/Main.tsx +++ b/src/components/main/Main.tsx @@ -390,11 +390,12 @@ const Main: FC = ({ // Parse deep link useEffect(() => { + if (!isSynced) return; const parsedInitialLocationHash = parseInitialLocationHash(); if (parsedInitialLocationHash?.tgaddr) { processDeepLink(decodeURIComponent(parsedInitialLocationHash.tgaddr)); } - }, []); + }, [isSynced]); useEffect(() => { return window.electron?.on(ElectronEvent.DEEPLINK, (link: string) => { diff --git a/src/components/middle/MessageListBotInfo.module.scss b/src/components/middle/MessageListBotInfo.module.scss index b17265703..98760cf64 100644 --- a/src/components/middle/MessageListBotInfo.module.scss +++ b/src/components/middle/MessageListBotInfo.module.scss @@ -29,7 +29,7 @@ margin-bottom: 0.25rem; } -.image { +.media { max-width: 100%; - height: auto; + height: auto !important; } diff --git a/src/components/middle/MessageListBotInfo.tsx b/src/components/middle/MessageListBotInfo.tsx index ed378b919..952ad35b8 100644 --- a/src/components/middle/MessageListBotInfo.tsx +++ b/src/components/middle/MessageListBotInfo.tsx @@ -71,7 +71,7 @@ const MessageListBotInfo: FC = ({ > {botInfoPhotoUrl && ( = ({ {botInfoGifUrl && ( = ({ )} {botInfoDimensions && !botInfoPhotoUrl && !botInfoGifUrl && ( )} {botInfo.description && ( diff --git a/src/global/actions/api/bots.ts b/src/global/actions/api/bots.ts index a305967b3..d63de7446 100644 --- a/src/global/actions/api/bots.ts +++ b/src/global/actions/api/bots.ts @@ -35,6 +35,7 @@ import { selectDraft, selectIsTrustedBot, selectMessageReplyInfo, + selectPeer, selectSendAs, selectTabState, selectUser, @@ -529,7 +530,7 @@ addActionHandler('requestWebView', async (global, actions, payload): Promise => { - const { hash } = payload || {}; - const result = await loadAttachBots(global, hash); +addActionHandler('loadAttachBots', async (global): Promise => { + await loadAttachBots(global); requestActionTimeout({ action: 'loadAttachBots', - payload: { hash: result?.hash }, + payload: undefined, }, GENERAL_REFETCH_INTERVAL); }); diff --git a/src/global/actions/api/chats.ts b/src/global/actions/api/chats.ts index 5f6dec28f..738122796 100644 --- a/src/global/actions/api/chats.ts +++ b/src/global/actions/api/chats.ts @@ -3039,11 +3039,11 @@ async function openChatByUsername( if (startAttach !== undefined && !attach) { const bot = await getAttachBotOrNotify(global, actions, username, tabId); - if (!currentChat || !bot) return; + if (!bot) return; actions.callAttachBot({ bot, - chatId: currentChat.id, + chatId: currentChat?.id || bot.id, startParam: startAttach, tabId, }); diff --git a/src/global/actions/apiUpdaters/misc.ts b/src/global/actions/apiUpdaters/misc.ts index e7d6ed782..339b670cc 100644 --- a/src/global/actions/apiUpdaters/misc.ts +++ b/src/global/actions/apiUpdaters/misc.ts @@ -153,7 +153,7 @@ addActionHandler('apiUpdate', (global, actions, update): ActionReturnType => { break; case 'updateAttachMenuBots': - actions.loadAttachBots({ hash: global.attachMenu.hash }); + actions.loadAttachBots(); break; case 'updatePremiumFloodWait': { diff --git a/src/global/cache.ts b/src/global/cache.ts index f18ac4984..bc03b15e6 100644 --- a/src/global/cache.ts +++ b/src/global/cache.ts @@ -266,6 +266,7 @@ export function serializeGlobal(global: T) { 'authPhoneNumber', 'authRememberMe', 'authNearestCountry', + 'attachMenu', 'currentUserId', 'contactList', 'topPeers', @@ -343,11 +344,14 @@ function reduceUsers(global: T): GlobalState['users'] { .map((message) => message.content.storyData?.peerId || message.content.webPage?.story?.peerId) .filter((id): id is string => Boolean(id) && isUserId(id)); + const attachBotIds = Object.keys(global.attachMenu?.bots || {}); + const idsToSave = unique([ ...currentUserId ? [currentUserId] : [], ...currentChatIds, ...chatStoriesUserIds, ...visibleUserIds || [], + ...attachBotIds, ...global.topPeers.userIds || [], ...getOrderedIds(ARCHIVED_FOLDER_ID)?.slice(0, GLOBAL_STATE_CACHE_ARCHIVED_CHAT_LIST_LIMIT).filter(isUserId) || [], ...getOrderedIds(ALL_FOLDER_ID)?.filter(isUserId) || [], diff --git a/src/global/types.ts b/src/global/types.ts index 3915b514a..ef05a3d45 100644 --- a/src/global/types.ts +++ b/src/global/types.ts @@ -1561,7 +1561,7 @@ export interface ActionPayloads { attach?: string; startApp?: string; text?: string; - originalParts?: string[]; + originalParts?: (string | undefined)[]; } & WithTabId; processBoostParameters: { usernameOrId: string; @@ -2753,9 +2753,7 @@ export interface ActionPayloads { buttonText: string; }; - loadAttachBots: { - hash?: string; - } | undefined; + loadAttachBots: undefined; toggleAttachBot: { botId: string; diff --git a/src/util/deepLinkParser.ts b/src/util/deepLinkParser.ts index 43100f6df..46afd165e 100644 --- a/src/util/deepLinkParser.ts +++ b/src/util/deepLinkParser.ts @@ -61,6 +61,7 @@ interface PublicUsernameOrBotLink { username: string; start?: string; startApp?: string; + appName?: string; startAttach?: string; attach?: string; text?: string; @@ -197,6 +198,7 @@ function parseTgLink(url: URL) { username: queryParams.domain, start: queryParams.start, text: queryParams.text, + appName: queryParams.appname, startApp: queryParams.startapp, startAttach: queryParams.startattach, attach: queryParams.attach, @@ -289,6 +291,7 @@ function parseHttpLink(url: URL) { start: queryParams.start, text: queryParams.text, startApp: queryParams.startapp, + appName: undefined, startAttach: queryParams.startattach, attach: queryParams.attach, }); @@ -519,6 +522,7 @@ function buildPublicUsernameOrBotLink( startApp, startAttach, attach, + appName, } = params; if (!username) { return undefined; @@ -531,6 +535,7 @@ function buildPublicUsernameOrBotLink( username, start, startApp, + appName, startAttach, attach, text, diff --git a/src/util/deeplink.ts b/src/util/deeplink.ts index a75c107d7..be5ee80da 100644 --- a/src/util/deeplink.ts +++ b/src/util/deeplink.ts @@ -25,6 +25,7 @@ export const processDeepLink = (url: string): boolean => { startApp: parsedLink.startApp, startAttach: parsedLink.startAttach, attach: parsedLink.attach, + originalParts: [parsedLink.username, parsedLink.appName], }); return true; case 'businessChatLink':