From 0b3574ff9d25a60d64e2813f2b4064e14287187a Mon Sep 17 00:00:00 2001 From: Eduard Kuzmenko Date: Sat, 16 Apr 2022 00:48:39 +0300 Subject: [PATCH] Fix loading top history because of hidden message Support different languages of changelogs --- src/components/chat/topbar.ts | 2 +- src/lib/appManagers/apiUpdatesManager.ts | 62 ++++++++++++++---------- src/lib/appManagers/appImManager.ts | 4 +- src/scripts/generate_changelog.js | 53 ++++++++++++-------- 4 files changed, 74 insertions(+), 47 deletions(-) diff --git a/src/components/chat/topbar.ts b/src/components/chat/topbar.ts index e82ba2d0..57950feb 100644 --- a/src/components/chat/topbar.ts +++ b/src/components/chat/topbar.ts @@ -386,7 +386,7 @@ export default class ChatTopbar { }; }); }, - verify: () => !this.chat.selection.isSelecting && !!Object.keys(this.chat.bubbles.bubbles).length + verify: () => !this.chat.selection.isSelecting && !!this.chat.bubbles.getRenderedLength() }, { icon: 'select', text: 'Chat.Menu.ClearSelection', diff --git a/src/lib/appManagers/apiUpdatesManager.ts b/src/lib/appManagers/apiUpdatesManager.ts index b54c75ef..8736d80d 100644 --- a/src/lib/appManagers/apiUpdatesManager.ts +++ b/src/lib/appManagers/apiUpdatesManager.ts @@ -22,9 +22,9 @@ import appPeersManager from "./appPeersManager"; import appStateManager from './appStateManager'; import serverTimeManager from '../mtproto/serverTimeManager'; import assumeType from '../../helpers/assumeType'; -import noop from '../../helpers/noop'; import RichTextProcessor from '../richtextprocessor'; import App from '../../config/app'; +import filterUnique from '../../helpers/array/filterUnique'; type UpdatesState = { pendingPtsUpdates: (Update & {pts: number, pts_count: number})[], @@ -624,7 +624,7 @@ export class ApiUpdatesManager { rootScope.dispatchEvent(update._, update as any); } - public attach() { + public attach(langCode?: string) { if(this.attached) return; //return; @@ -688,29 +688,41 @@ export class ApiUpdatesManager { // }); if(newVersion) { - this.updatesState.syncLoading.then(() => { - fetch('changelogs/' + newVersion.split(' ')[0] + '.md') - .then(res => (res.status === 200 && res.ok && res.text()) || Promise.reject()) - .then(text => { - const pre = `**Telegram Web${App.suffix} was updated to version ${newVersion}**\n\n`; - - text = pre + text; - - const entities: MessageEntity[] = []; - const message = RichTextProcessor.parseMarkdown(text, entities); - - const update: Update.updateServiceNotification = { - _: 'updateServiceNotification', - entities, - message, - type: 'local', - pFlags: {}, - inbox_date: Date.now() / 1000 | 0, - media: undefined - }; - this.processLocalUpdate(update); - }) - .catch(noop); + this.updatesState.syncLoading.then(async() => { + const getChangelog = (lang: string) => { + fetch(`changelogs/${newVersion.split(' ')[0]}_${lang}.md`) + .then(res => (res.status === 200 && res.ok && res.text()) || Promise.reject()) + .then(text => { + const pre = `**Telegram Web${App.suffix} was updated to version ${newVersion}**\n\n`; + + text = pre + text; + + const entities: MessageEntity[] = []; + const message = RichTextProcessor.parseMarkdown(text, entities); + + const update: Update.updateServiceNotification = { + _: 'updateServiceNotification', + entities, + message, + type: 'local', + pFlags: {}, + inbox_date: Date.now() / 1000 | 0, + media: undefined + }; + + this.processLocalUpdate(update); + }); + }; + + const languages = filterUnique([langCode, 'en']); + for(const language of languages) { + try { + await getChangelog(language); + break; + } catch(err) { + + } + } }); } }); diff --git a/src/lib/appManagers/appImManager.ts b/src/lib/appManagers/appImManager.ts index 497a95e8..13211040 100644 --- a/src/lib/appManagers/appImManager.ts +++ b/src/lib/appManagers/appImManager.ts @@ -150,7 +150,7 @@ export class AppImManager { } constructor() { - apiUpdatesManager.attach(); + apiUpdatesManager.attach(I18n.lastRequestedLangCode); appNotificationsManager.start(); this.log = logger('IM', LogTypes.Log | LogTypes.Warn | LogTypes.Debug | LogTypes.Error); @@ -1164,7 +1164,7 @@ export class AppImManager { const top = chatBubbles.scrollable.scrollTop; const position = { - mids: getObjectKeysAndSort(chatBubbles.bubbles, 'desc'), + mids: getObjectKeysAndSort(chatBubbles.bubbles, 'desc').filter(mid => !chatBubbles.skippedMids.has(mid)), top }; diff --git a/src/scripts/generate_changelog.js b/src/scripts/generate_changelog.js index 5e8e8e6b..5525a7f4 100644 --- a/src/scripts/generate_changelog.js +++ b/src/scripts/generate_changelog.js @@ -7,28 +7,43 @@ // @ts-check const fs = require('fs'); -const text = fs.readFileSync('./CHANGELOG.md').toString('utf-8'); +const fileNames = fs.readdirSync('./'); -const writeTo = `./public/changelogs/{VERSION}.md`; +const logsPath = './public/changelogs/'; +fs.rmSync(logsPath, {force: true, recursive: true}); +fs.mkdirSync(logsPath); -const separator = '### '; -const splitted = text.split(separator); -splitted.forEach(text => { - if(!text.trim()) return; - text = separator + text; - text = text.replace(/^\*/gm, '•'); - const splitted = text.split('\n'); +const processChangelog = (fileName) => { + const text = fs.readFileSync('./' + fileName).toString('utf-8'); - for(let i = splitted.length - 1; i >= 0; --i) { - const line = splitted[i]; - if(!line.trim()) { - splitted.splice(i, 1); - } else { - break; + const lang = (fileName.split('_')[1] || 'en').split('.')[0]; + const writeTo = `${logsPath}${lang}_{VERSION}.md`; + + const separator = '### '; + const splitted = text.split(separator); + splitted.forEach(text => { + if(!text.trim()) return; + text = separator + text; + text = text.replace(/^\*/gm, '•'); + const splitted = text.split('\n'); + + for(let i = splitted.length - 1; i >= 0; --i) { + const line = splitted[i]; + if(!line.trim()) { + splitted.splice(i, 1); + } else { + break; + } } - } + + const firstLine = splitted.shift(); + const version = firstLine.split(' ')[1]; + fs.writeFileSync(writeTo.replace('{VERSION}', version), splitted.join('\n') + '\n'); + }); +}; - const firstLine = splitted.shift(); - const version = firstLine.split(' ')[1]; - fs.writeFileSync(writeTo.replace('{VERSION}', version), splitted.join('\n') + '\n'); +fileNames.forEach(fileName => { + if(fileName.endsWith('.md') && fileName.startsWith('CHANGELOG')) { + processChangelog(fileName); + } });