diff --git a/src/lib/client/api.js b/src/lib/client/api.js index c3accbb..09e6514 100644 --- a/src/lib/client/api.js +++ b/src/lib/client/api.js @@ -1,8 +1,9 @@ -import { client } from '../client/client.js'; +import { client } from '$lib/client/client.js'; +import { user } from '$lib/stores/user.js'; import { capabilities } from '../client/instance.js'; -import Post from '../post.js'; -import User from '../user/user.js'; -import Emoji from '../emoji.js'; +import Post from '$lib/post.js'; +import User from '$lib/user/user.js'; +import Emoji from '$lib/emoji.js'; import { get } from 'svelte/store'; export async function createApp(host) { @@ -92,7 +93,7 @@ export async function verifyCredentials() { } export async function getNotifications(since_id, limit, types) { - if (!get(client).user) return false; + if (!get(user)) return false; let url = `https://${get(client).instance.host}/api/v1/notifications`; @@ -112,6 +113,7 @@ export async function getNotifications(since_id, limit, types) { } export async function getTimeline(last_post_id) { + if (!get(user)) return false; let url = `https://${get(client).instance.host}/api/v1/timelines/home`; if (last_post_id) url += "?max_id=" + last_post_id; const data = await fetch(url, { diff --git a/src/lib/client/client.js b/src/lib/client/client.js index 3ac4269..e6d79ac 100644 --- a/src/lib/client/client.js +++ b/src/lib/client/client.js @@ -2,7 +2,7 @@ import { Instance, server_types } from './instance.js'; import * as api from './api.js'; import { get, writable } from 'svelte/store'; import { last_read_notif_id } from '$lib/notifications.js'; -import { user } from '$lib/stores/user.js'; +import { user, logged_in } from '$lib/stores/user.js'; export const client = writable(false); @@ -206,6 +206,7 @@ export class Client { console.warn("Failed to log out correctly; ditching the old tokens anyways."); } localStorage.removeItem(save_name); + logged_in.set(false); client.set(new Client()); console.log("Logged out successfully."); } diff --git a/src/lib/notifications.js b/src/lib/notifications.js index 5d16795..bbdc69f 100644 --- a/src/lib/notifications.js +++ b/src/lib/notifications.js @@ -29,7 +29,7 @@ export async function getNotifications() { } } } - notif.status = await api.parsePost(notif.status, 0, false); + notif.status = notif.status ? await api.parsePost(notif.status, 0, false) : null; notifications.update(notifications => [...notifications, notif]); } last_read_notif_id.set(data[0].id); diff --git a/src/lib/stores/user.js b/src/lib/stores/user.js index 6648031..fb9c2c4 100644 --- a/src/lib/stores/user.js +++ b/src/lib/stores/user.js @@ -1,4 +1,22 @@ -import { writable } from 'svelte/store'; +import { client } from '$lib/client/client.js'; +import * as api from '$lib/client/api.js'; +import { get, writable } from 'svelte/store'; export let user = writable(0); export let logged_in = writable(false); + +export async function getUser() { + // already known + if (get(user)) return get(user); + + // cannot provide- not logged in + if (!get(client).app || !get(client).app.token) return false; + + // logged in- attempt to retrieve using token + const data = await api.verifyCredentials(); + if (!data) return false; + + user.set(await api.parseUser(data)); + console.log(`Logged in as @${get(user).username}@${get(user).host}`); + return get(user); +} diff --git a/src/lib/ui/Navigation.svelte b/src/lib/ui/Navigation.svelte index 4c8344b..c4ce6e5 100644 --- a/src/lib/ui/Navigation.svelte +++ b/src/lib/ui/Navigation.svelte @@ -3,6 +3,7 @@ import Button from './Button.svelte'; import Feed from './Feed.svelte'; import { client } from '$lib/client/client.js'; + import { user } from '$lib/stores/user.js'; import { play_sound } from '$lib/sound.js'; import { getTimeline } from '$lib/timeline.js'; import { getNotifications } from '$lib/notifications.js'; @@ -150,11 +151,11 @@
diff --git a/src/lib/ui/Notification.svelte b/src/lib/ui/Notification.svelte index dd29e6f..bfec23f 100644 --- a/src/lib/ui/Notification.svelte +++ b/src/lib/ui/Notification.svelte @@ -48,7 +48,7 @@ } - +