feat: partial favourites
This commit is contained in:
parent
c51a0b1e5d
commit
99def58c8b
3 changed files with 81 additions and 8 deletions
|
@ -242,6 +242,8 @@ export async function rejectFollowRequest(host, token, account_id) {
|
|||
* @param {string} token - The application token.
|
||||
* @param {string} timeline - The name of the timeline to pull (default "home").
|
||||
* @param {string} max_id - If provided, only shows posts after this ID.
|
||||
* @param {boolean} local_only - If provided, only shows posts from the local instance
|
||||
* @param {boolean} remote_only - If provided, only shows posts from other instances
|
||||
*/
|
||||
export async function getTimeline(host, token, timeline, max_id, local_only, remote_only) {
|
||||
let url = `https://${host}/api/v1/timelines/${timeline || "home"}`;
|
||||
|
@ -558,3 +560,25 @@ export async function getUserPinnedPosts(host, token, user_id) {
|
|||
|
||||
return data;
|
||||
}
|
||||
|
||||
/**
|
||||
* GET /api/v1/favourites
|
||||
* @param {string} host - The domain of the target server.
|
||||
* @param {string} token - The application token.
|
||||
* @param {string} max_id - If provided, only shows posts after this ID.
|
||||
*/
|
||||
export async function getFavourites(host, token, timeline, max_id) {
|
||||
let url = `https://${host}/api/v1/favourites`;
|
||||
|
||||
let params = new URLSearchParams();
|
||||
if (max_id) params.append("max_id", max_id);
|
||||
const params_string = params.toString();
|
||||
if (params_string) url += '?' + params_string;
|
||||
|
||||
const data = await fetch(url, {
|
||||
method: 'GET',
|
||||
headers: { "Authorization": token ? `Bearer ${token}` : null }
|
||||
}).then(res => res.json());
|
||||
|
||||
return data;
|
||||
}
|
||||
|
|
|
@ -19,7 +19,18 @@ export async function getTimeline(timelineType = "home", clean, localOnly = fals
|
|||
if (!clean && get(timeline).length > 0)
|
||||
last_post = get(timeline)[get(timeline).length - 1].id;
|
||||
|
||||
const timeline_data = await api.getTimeline(
|
||||
let timeline_data;
|
||||
switch(timelineType) {
|
||||
case "favourites":
|
||||
timeline_data = await api.getFavourites(
|
||||
get(server).host,
|
||||
get(app).token,
|
||||
last_post,
|
||||
)
|
||||
break;
|
||||
|
||||
default:
|
||||
timeline_data = await api.getTimeline(
|
||||
get(server).host,
|
||||
get(app).token,
|
||||
timelineType,
|
||||
|
@ -27,6 +38,8 @@ export async function getTimeline(timelineType = "home", clean, localOnly = fals
|
|||
localOnly,
|
||||
remoteOnly
|
||||
);
|
||||
break;
|
||||
}
|
||||
|
||||
if (!timeline_data) {
|
||||
console.error(lang.string('logs.timeline_fetch_failed'));
|
||||
|
|
36
src/routes/favourites/+page.svelte
Normal file
36
src/routes/favourites/+page.svelte
Normal file
|
@ -0,0 +1,36 @@
|
|||
<script>
|
||||
import { page } from '$app/stores';
|
||||
import { account } from '@cf/store/account.js';
|
||||
import { timeline, getTimeline } from '$lib/timeline.js';
|
||||
|
||||
import Button from '@cf/ui/Button.svelte';
|
||||
import Post from '@cf/ui/post/Post.svelte';
|
||||
import PageHeader from '@cf/ui/core/PageHeader.svelte';
|
||||
|
||||
import Lang from '$lib/lang';
|
||||
|
||||
const lang = Lang();
|
||||
if (!$account) goto("/");
|
||||
|
||||
getTimeline("favourites");
|
||||
|
||||
document.addEventListener('scroll', () => {
|
||||
if ($account && $page.url.pathname !== "/favourites") return;
|
||||
if (window.innerHeight + window.scrollY >= document.body.offsetHeight - 2048) {
|
||||
getTimeline("favourites");
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<PageHeader title={lang.string(`navigation.favourites`)}/>
|
||||
|
||||
<div id="feed" role="feed">
|
||||
{#if $timeline.length <= 0}
|
||||
<div class="loading throb">
|
||||
<span>{lang.string('timeline.fetching')}</span>
|
||||
</div>
|
||||
{/if}
|
||||
{#each $timeline as post}
|
||||
<Post post_data={post} />
|
||||
{/each}
|
||||
</div>
|
Loading…
Add table
Add a link
Reference in a new issue