Browse Source

Fix loading top history because of hidden message

Support different languages of changelogs
master
Eduard Kuzmenko 3 years ago
parent
commit
0b3574ff9d
  1. 2
      src/components/chat/topbar.ts
  2. 62
      src/lib/appManagers/apiUpdatesManager.ts
  3. 4
      src/lib/appManagers/appImManager.ts
  4. 59
      src/scripts/generate_changelog.js

2
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', icon: 'select',
text: 'Chat.Menu.ClearSelection', text: 'Chat.Menu.ClearSelection',

62
src/lib/appManagers/apiUpdatesManager.ts

@ -22,9 +22,9 @@ import appPeersManager from "./appPeersManager";
import appStateManager from './appStateManager'; import appStateManager from './appStateManager';
import serverTimeManager from '../mtproto/serverTimeManager'; import serverTimeManager from '../mtproto/serverTimeManager';
import assumeType from '../../helpers/assumeType'; import assumeType from '../../helpers/assumeType';
import noop from '../../helpers/noop';
import RichTextProcessor from '../richtextprocessor'; import RichTextProcessor from '../richtextprocessor';
import App from '../../config/app'; import App from '../../config/app';
import filterUnique from '../../helpers/array/filterUnique';
type UpdatesState = { type UpdatesState = {
pendingPtsUpdates: (Update & {pts: number, pts_count: number})[], pendingPtsUpdates: (Update & {pts: number, pts_count: number})[],
@ -624,7 +624,7 @@ export class ApiUpdatesManager {
rootScope.dispatchEvent(update._, update as any); rootScope.dispatchEvent(update._, update as any);
} }
public attach() { public attach(langCode?: string) {
if(this.attached) return; if(this.attached) return;
//return; //return;
@ -688,29 +688,41 @@ export class ApiUpdatesManager {
// }); // });
if(newVersion) { if(newVersion) {
this.updatesState.syncLoading.then(() => { this.updatesState.syncLoading.then(async() => {
fetch('changelogs/' + newVersion.split(' ')[0] + '.md') const getChangelog = (lang: string) => {
.then(res => (res.status === 200 && res.ok && res.text()) || Promise.reject()) fetch(`changelogs/${newVersion.split(' ')[0]}_${lang}.md`)
.then(text => { .then(res => (res.status === 200 && res.ok && res.text()) || Promise.reject())
const pre = `**Telegram Web${App.suffix} was updated to version ${newVersion}**\n\n`; .then(text => {
const pre = `**Telegram Web${App.suffix} was updated to version ${newVersion}**\n\n`;
text = pre + text;
text = pre + text;
const entities: MessageEntity[] = [];
const message = RichTextProcessor.parseMarkdown(text, entities); const entities: MessageEntity[] = [];
const message = RichTextProcessor.parseMarkdown(text, entities);
const update: Update.updateServiceNotification = {
_: 'updateServiceNotification', const update: Update.updateServiceNotification = {
entities, _: 'updateServiceNotification',
message, entities,
type: 'local', message,
pFlags: {}, type: 'local',
inbox_date: Date.now() / 1000 | 0, pFlags: {},
media: undefined inbox_date: Date.now() / 1000 | 0,
}; media: undefined
this.processLocalUpdate(update); };
})
.catch(noop); this.processLocalUpdate(update);
});
};
const languages = filterUnique([langCode, 'en']);
for(const language of languages) {
try {
await getChangelog(language);
break;
} catch(err) {
}
}
}); });
} }
}); });

4
src/lib/appManagers/appImManager.ts

@ -150,7 +150,7 @@ export class AppImManager {
} }
constructor() { constructor() {
apiUpdatesManager.attach(); apiUpdatesManager.attach(I18n.lastRequestedLangCode);
appNotificationsManager.start(); appNotificationsManager.start();
this.log = logger('IM', LogTypes.Log | LogTypes.Warn | LogTypes.Debug | LogTypes.Error); 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 top = chatBubbles.scrollable.scrollTop;
const position = { const position = {
mids: getObjectKeysAndSort(chatBubbles.bubbles, 'desc'), mids: getObjectKeysAndSort(chatBubbles.bubbles, 'desc').filter(mid => !chatBubbles.skippedMids.has(mid)),
top top
}; };

59
src/scripts/generate_changelog.js

@ -7,28 +7,43 @@
// @ts-check // @ts-check
const fs = require('fs'); 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});
const separator = '### '; fs.mkdirSync(logsPath);
const splitted = text.split(separator);
splitted.forEach(text => { const processChangelog = (fileName) => {
if(!text.trim()) return; const text = fs.readFileSync('./' + fileName).toString('utf-8');
text = separator + text;
text = text.replace(/^\*/gm, '•'); const lang = (fileName.split('_')[1] || 'en').split('.')[0];
const splitted = text.split('\n'); const writeTo = `${logsPath}${lang}_{VERSION}.md`;
for(let i = splitted.length - 1; i >= 0; --i) { const separator = '### ';
const line = splitted[i]; const splitted = text.split(separator);
if(!line.trim()) { splitted.forEach(text => {
splitted.splice(i, 1); if(!text.trim()) return;
} else { text = separator + text;
break; 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 firstLine = splitted.shift();
const version = firstLine.split(' ')[1]; const version = firstLine.split(' ')[1];
fs.writeFileSync(writeTo.replace('{VERSION}', version), splitted.join('\n') + '\n'); fs.writeFileSync(writeTo.replace('{VERSION}', version), splitted.join('\n') + '\n');
});
};
fileNames.forEach(fileName => {
if(fileName.endsWith('.md') && fileName.startsWith('CHANGELOG')) {
processChangelog(fileName);
}
}); });

Loading…
Cancel
Save