Browse Source

Preload more shared media

Fix shared media load
master
morethanwords 4 years ago
parent
commit
47f41e1a45
  1. 32
      src/components/sidebarRight/tabs/sharedMedia.ts

32
src/components/sidebarRight/tabs/sharedMedia.ts

@ -134,7 +134,7 @@ export default class AppSharedMediaTab implements SliderTab {
this.scroll = new Scrollable(this.container, 'SR', undefined, 400); this.scroll = new Scrollable(this.container, 'SR', undefined, 400);
this.scroll.onScrolledBottom = () => { this.scroll.onScrolledBottom = () => {
if(this.sharedMediaSelected && this.sharedMediaSelected.childElementCount/* && false */) { if(this.sharedMediaSelected && this.sharedMediaSelected.childElementCount/* && false */) {
this.log('onScrolledBottom will load media'); //this.log('onScrolledBottom will load media');
this.loadSidebarMedia(true); this.loadSidebarMedia(true);
} }
}; };
@ -641,7 +641,7 @@ export default class AppSharedMediaTab implements SliderTab {
} }
} }
public loadSidebarMedia(single = false) { public loadSidebarMedia(single = false, justLoad = false) {
if(testScroll/* || 1 == 1 */) { if(testScroll/* || 1 == 1 */) {
return; return;
} }
@ -651,10 +651,12 @@ export default class AppSharedMediaTab implements SliderTab {
const peerID = this.peerID; const peerID = this.peerID;
let typesToLoad = single ? [this.sharedMediaType] : this.sharedMediaTypes; let typesToLoad = single ? [this.sharedMediaType] : this.sharedMediaTypes;
typesToLoad = typesToLoad.filter(type => !this.loadedAllMedia[type]); typesToLoad = typesToLoad.filter(type => !this.loadedAllMedia[type]
|| this.usedFromHistory[type] < this.historiesStorage[peerID][type].length);
if(!typesToLoad.length) return; if(!typesToLoad.length) return;
const loadCount = (appPhotosManager.windowH / 130 | 0) * 3; // that's good for all types const loadCount = justLoad ? 50 : (appPhotosManager.windowH / 130 | 0) * 3 * 1.25; // that's good for all types
const historyStorage = this.historiesStorage[peerID] ?? (this.historiesStorage[peerID] = {}); const historyStorage = this.historiesStorage[peerID] ?? (this.historiesStorage[peerID] = {});
@ -666,7 +668,7 @@ export default class AppSharedMediaTab implements SliderTab {
const logStr = `loadSidebarMedia [${type}]: `; const logStr = `loadSidebarMedia [${type}]: `;
// render from cache // render from cache
if(history.length && this.usedFromHistory[type] < history.length) { if(history.length && this.usedFromHistory[type] < history.length && !justLoad) {
let messages: any[] = []; let messages: any[] = [];
let used = Math.max(0, this.usedFromHistory[type]); let used = Math.max(0, this.usedFromHistory[type]);
@ -709,14 +711,30 @@ export default class AppSharedMediaTab implements SliderTab {
this.log.warn('peer changed'); this.log.warn('peer changed');
return; return;
} }
if(value.history.length < loadCount) { if(history.length >= value.count) {
this.log(logStr + 'loaded all media', value, loadCount); this.log(logStr + 'loaded all media', value, loadCount);
this.loadedAllMedia[type] = true; this.loadedAllMedia[type] = true;
} }
if(justLoad) {
return Promise.resolve();
}
this.usedFromHistory[type] = history.length; this.usedFromHistory[type] = history.length;
if(!this.loadedAllMedia[type]) {
this.loadSidebarMediaPromises[type].then(() => {
setTimeout(() => {
this.log('will preload more');
this.loadSidebarMedia(true, true).then(() => {
this.log('preloaded more');
this.scroll.checkForTriggers();
});
}, 0);
});
}
//if(value.history.length) { //if(value.history.length) {
return this.performSearchResult(this.filterMessagesByType(value.history, type), type); return this.performSearchResult(this.filterMessagesByType(value.history, type), type);
//} //}

Loading…
Cancel
Save