fix: pagination bug on misskey favourites

This commit is contained in:
mae taylor 2025-07-23 22:10:01 +01:00
parent cd5dc461f6
commit 19be3779e3
Signed by: mae
GPG key ID: 3C80D76BA7A3B9BD
2 changed files with 30 additions and 15 deletions

View file

@ -285,13 +285,17 @@ export async function getTimeline(host, token, timeline, max_id, local_only, rem
headers: { "Authorization": token ? `Bearer ${token}` : null } headers: { "Authorization": token ? `Bearer ${token}` : null }
}) })
let links = _parseLinkHeader(data.headers.get("Link")); let res = {
data: await data.json()
}
return { if(data.headers.has("Link")) {
data: await data.json(), let links = _parseLinkHeader(data.headers.get("Link"));
prev: links.find(f=>f.rel=="prev"), res["prev"] = links.find(f=>f.rel=="prev");
next: links.find(f=>f.rel=="next") res["next"] = links.find(f=>f.rel=="next");
}; }
return res;
} }
/** /**
@ -312,14 +316,18 @@ export async function getFavourites(host, token, max_id) {
method: 'GET', method: 'GET',
headers: { "Authorization": token ? `Bearer ${token}` : null } headers: { "Authorization": token ? `Bearer ${token}` : null }
}) })
let res = {
data: await data.json()
}
let links = _parseLinkHeader(data.headers.get("Link")); if(data.headers.has("Link")) {
let links = _parseLinkHeader(data.headers.get("Link"));
res["prev"] = links.find(f=>f.rel=="prev");
res["next"] = links.find(f=>f.rel=="next");
}
return { return res;
data: await data.json(),
prev: links.find(f=>f.rel=="prev"),
next: links.find(f=>f.rel=="next")
};
} }
/** /**

View file

@ -10,12 +10,15 @@ export const timeline = writable([]);
const lang = Lang(); const lang = Lang();
let loading = false; let loading = false;
let last_post = false; let last_post = false; // last post marker, used for fetching next sequence of posts
let at_end = false; // at end of timeline, no next param to paginate
export async function getTimeline(timelineType = "home", clean, localOnly = false, remoteOnly = false) { export async function getTimeline(timelineType = "home", clean, localOnly = false, remoteOnly = false) {
if (loading) return; // no spamming!! if (loading) return; // no spamming!!
loading = true; loading = true;
if(at_end) return;
if(clean) { if(clean) {
timeline.set([]); timeline.set([]);
last_post = false; last_post = false;
@ -49,9 +52,12 @@ export async function getTimeline(timelineType = "home", clean, localOnly = fals
return; return;
} }
if (!clean) { if (!clean && timeline_data.next) {
last_post = timeline_data.next.url.searchParams.get("max_id") last_post = timeline_data.next.url.searchParams.get("max_id")
} } else if(!timeline_data.next) {
console.log(timeline_data)
at_end = true;
}
for (let i in timeline_data.data) { for (let i in timeline_data.data) {
const post_data = timeline_data.data[i]; const post_data = timeline_data.data[i];
@ -75,4 +81,5 @@ export async function getTimeline(timelineType = "home", clean, localOnly = fals
export function clearTimeline() { export function clearTimeline() {
timeline.set([]); timeline.set([]);
last_post = false; last_post = false;
at_end = false;
} }