enhance(timeline): タブがバックグラウンドから戻ってきた時、ノートの取得をまとめて行うように (MisskeyIO#960)

This commit is contained in:
あわわわとーにゅ 2025-04-01 02:56:21 +09:00 committed by GitHub
parent eb5e94dbf8
commit d36be50b1c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -71,12 +71,7 @@ const tlComponent = shallowRef<InstanceType<typeof MkNotes>>();
let tlNotesCount = 0;
const notVisibleNoteData = new Array<object>();
async function prepend(data) {
if (tlComponent.value == null) return;
let note = data;
if (!document.hidden) {
async function fulfillNoteData(data) {
//
// minimizeid
if (!data.visibility) {
@ -88,10 +83,22 @@ async function prepend(data) {
'X-Client-Transaction-Id': generateClientTransactionId('misskey'),
},
});
if (!res.ok) return;
note = deepMerge(data, await res.json());
if (!res.ok) return null;
return deepMerge(data, await res.json());
}
return data;
}
async function prepend(data) {
if (tlComponent.value == null) return;
let note = data;
if (!document.hidden) {
note = await fulfillNoteData(data);
if (note == null) return;
tlNotesCount++;
if (instance.notesPerOneAd > 0 && tlNotesCount % instance.notesPerOneAd === 0) {
@ -119,17 +126,21 @@ async function loadUnloadedNotes() {
if (tlComponent.value == null) return;
if (notVisibleNoteData.length === 0) return;
if (notVisibleNoteData.length >= 10) {
tlComponent.value.pagingComponent?.deleteItem();
tlComponent.value.pagingComponent?.stopFetch();
}
try {
const items = [...notVisibleNoteData];
notVisibleNoteData.length = 0;
while (notVisibleNoteData.length > 0) {
await prepend(notVisibleNoteData.shift());
}
const notes = await Promise.allSettled(items.map(fulfillNoteData));
if (items.length >= 10) tlComponent.value.pagingComponent?.deleteItem();
for (const note of notes.filter(i => i.status === 'fulfilled' && i.value != null)) {
await prepend((note as PromiseFulfilledResult<object>).value);
}
} finally {
tlComponent.value.pagingComponent?.startFetch();
}
}
let connection: Misskey.ChannelConnection | null = null;
let connection2: Misskey.ChannelConnection | null = null;