From d60910f533fb88cb6b74db160da34791b0383d8c Mon Sep 17 00:00:00 2001 From: morethanwords Date: Sun, 8 Nov 2020 01:56:37 +0200 Subject: [PATCH] Shared media fixes: Fix load end of document tab Add support for entity-check in links tab --- .../sidebarRight/tabs/sharedMedia.ts | 16 ++++++++------ src/lib/appManagers/appMessagesManager.ts | 21 ++++++++++++------- src/scss/partials/_chatBubble.scss | 7 +------ 3 files changed, 24 insertions(+), 20 deletions(-) diff --git a/src/components/sidebarRight/tabs/sharedMedia.ts b/src/components/sidebarRight/tabs/sharedMedia.ts index f84ea172..7bb43637 100644 --- a/src/components/sidebarRight/tabs/sharedMedia.ts +++ b/src/components/sidebarRight/tabs/sharedMedia.ts @@ -648,7 +648,7 @@ export default class AppSharedMediaTab implements SliderTab { if(!typesToLoad.length) return; - const loadCount = justLoad ? 50 : (appPhotosManager.windowH / 130 | 0) * 3 * 1.25; // that's good for all types + const loadCount = justLoad ? 50 : Math.round((appPhotosManager.windowH / 130 | 0) * 3 * 1.25); // that's good for all types const historyStorage = this.historiesStorage[peerID] ?? (this.historiesStorage[peerID] = {}); @@ -657,27 +657,29 @@ export default class AppSharedMediaTab implements SliderTab { const history = historyStorage[type] ?? (historyStorage[type] = []); - const logStr = `loadSidebarMedia [${type}]: `; + const logStr = 'loadSidebarMedia [' + type + ']: '; // render from cache if(history.length && this.usedFromHistory[type] < history.length && !justLoad) { let messages: any[] = []; let used = Math.max(0, this.usedFromHistory[type]); + let slicedLength = 0; do { let ids = history.slice(used, used + loadCount); this.log(logStr + 'will render from cache', used, history, ids, loadCount); used += ids.length; + slicedLength += ids.length; messages.push(...this.filterMessagesByType(ids, type)); - } while(messages.length < loadCount && used < history.length); + } while(slicedLength < loadCount && used < history.length); // если перебор - if(messages.length > loadCount) { + /* if(slicedLength > loadCount) { let diff = messages.length - loadCount; messages = messages.slice(0, messages.length - diff); used -= diff; - } + } */ this.usedFromHistory[type] = used; //if(messages.length) { @@ -704,7 +706,9 @@ export default class AppSharedMediaTab implements SliderTab { return; } - if(history.length >= value.count) { + // ! Фикс случая, когда не загружаются документы при открытой панели разработчиков (происходит из-за того, что не совпадают критерии отбора документов в getSearch) + if(value.history.length < loadCount) { + //if((value.count || history.length == value.count) && history.length >= value.count) { this.log(logStr + 'loaded all media', value, loadCount); this.loadedAllMedia[type] = true; } diff --git a/src/lib/appManagers/appMessagesManager.ts b/src/lib/appManagers/appMessagesManager.ts index 2eaf5bf1..432f8f83 100644 --- a/src/lib/appManagers/appMessagesManager.ts +++ b/src/lib/appManagers/appMessagesManager.ts @@ -3039,7 +3039,7 @@ export class AppMessagesManager { var neededContents: { [messageMediaType: string]: boolean } = {}, - neededDocTypes: string[] = []; + neededDocTypes: string[] = [], excludeDocTypes: string[] = []; switch(inputFilter._) { case 'inputMessagesFilterPhotos': @@ -3059,6 +3059,7 @@ export class AppMessagesManager { case 'inputMessagesFilterDocument': neededContents['messageMediaDocument'] = true; + excludeDocTypes.push('video'); break; case 'inputMessagesFilterVoice': @@ -3107,16 +3108,20 @@ export class AppMessagesManager { //|| (neededContents['mentioned'] && message.totalEntities.find((e: any) => e._ == 'messageEntityMention')); let found = false; - if(message.media && neededContents[message.media._]) { - if(neededDocTypes.length && - message.media._ == 'messageMediaDocument' && - !neededDocTypes.includes(message.media.document.type)) { - continue; + if(message.media && neededContents[message.media._] && !message.fwd_from) { + if(message.media._ == 'messageMediaDocument') { + if((neededDocTypes.length && !neededDocTypes.includes(message.media.document.type)) + || excludeDocTypes.includes(message.media.document.type)) { + continue; + } } found = true; - } else if(neededContents['url'] && message.message && RichTextProcessor.matchUrl(message.message)) { - found = true; + } else if(neededContents['url'] && message.message) { + const goodEntities = ['messageEntityTextUrl', 'messageEntityUrl']; + if((message.totalEntities as MessageEntity[]).find(e => goodEntities.includes(e._)) || RichTextProcessor.matchUrl(message.message)) { + found = true; + } } else if(neededContents['avatar'] && message.action && ['messageActionChannelEditPhoto', 'messageActionChatEditPhoto'].includes(message.action._)) { found = true; } diff --git a/src/scss/partials/_chatBubble.scss b/src/scss/partials/_chatBubble.scss index 6d5e0663..86f5af3d 100644 --- a/src/scss/partials/_chatBubble.scss +++ b/src/scss/partials/_chatBubble.scss @@ -1682,6 +1682,7 @@ poll-element { display: block; //min-width: 280px; min-width: 330px; + user-select: none; @include respond-to(handhelds) { min-width: 240px; @@ -1694,7 +1695,6 @@ poll-element { .poll { &-title { font-weight: 500; - user-select: none; @include respond-to(handhelds) { max-width: 88%; @@ -1706,7 +1706,6 @@ poll-element { color: #707579; margin-top: 2px; margin-bottom: 7px; - user-select: none; display: flex; position: relative; @@ -1754,7 +1753,6 @@ poll-element { &-text { margin-top: 6px; margin-left: 12px; - user-select: none; } &-percents { @@ -1769,7 +1767,6 @@ poll-element { margin-left: -9px; text-align: right; width: 40px; - user-select: none; } &-selected { @@ -1834,7 +1831,6 @@ poll-element { &-votes-count { color: #707579; font-size: 14px; - user-select: none; padding-top: 1px; } @@ -1877,7 +1873,6 @@ poll-element { //border-bottom-right-radius: 12px; font-size: 1rem; line-height: 37px; - user-select: none; overflow: hidden; }