From 46f1f93329216f1b106dfe6e5140bd1420b6354c Mon Sep 17 00:00:00 2001 From: ari melody Date: Fri, 21 Jun 2024 05:38:34 +0100 Subject: [PATCH] deferred post loading in timeline --- src/Feed.svelte | 31 +++++++++++++++++++++++-------- src/client/api.js | 2 ++ 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/src/Feed.svelte b/src/Feed.svelte index 4fb1558..cafdfa0 100644 --- a/src/Feed.svelte +++ b/src/Feed.svelte @@ -2,6 +2,7 @@ import Post from './post/Post.svelte'; import Error from './Error.svelte'; import { Client } from './client/client.js'; + import { parsePost } from './client/api.js'; let client = Client.get(); let posts = []; @@ -13,18 +14,32 @@ if (loading) return; // no spamming!! loading = true; - let new_posts = []; - if (posts.length === 0) new_posts = await client.getTimeline() - else new_posts = await client.getTimeline(posts[posts.length - 1].id); - - if (!new_posts) { - console.error(`Failed to retrieve timeline posts.`); + let timeline_data; + if (posts.length === 0) timeline_data = await client.getTimeline() + else timeline_data = await client.getTimeline(posts[posts.length - 1].id); + + if (!timeline_data) { + console.error(`Failed to retrieve timeline.`); loading = false; return; } - posts = [...posts, ...new_posts]; - + for (let i in timeline_data) { + const post_data = timeline_data[i]; + const post = await parsePost(post_data, 1); + if (!post) { + if (post === null || post === undefined) { + if (post_data.id) { + console.warn("Failed to parse post #" + post_data.id); + } else { + console.warn("Failed to parse post:"); + console.warn(post_data); + } + } + continue; + } + posts = [...posts, post]; + } loading = false; } diff --git a/src/client/api.js b/src/client/api.js index eb56d12..c6985c7 100644 --- a/src/client/api.js +++ b/src/client/api.js @@ -92,6 +92,8 @@ export async function getTimeline(last_post_id) { headers: { "Authorization": "Bearer " + client.app.token } }).then(res => res.json()); + return data; + let posts = []; for (let i in data) { const post_data = data[i];