diff --git a/codebook.toml b/codebook.toml new file mode 100644 index 00000000..65b9dc03 --- /dev/null +++ b/codebook.toml @@ -0,0 +1 @@ +words = ["favourite"] diff --git a/materialious/src/lib/components/watch/Author.svelte b/materialious/src/lib/components/watch/Author.svelte index 2265ff89..edaa42a0 100644 --- a/materialious/src/lib/components/watch/Author.svelte +++ b/materialious/src/lib/components/watch/Author.svelte @@ -78,16 +78,18 @@ {$_('unsubscribe')} {/if} - - star - - {favoritedChannel ? $_('unfavouriteChannel') : $_('favouriteChannel')} - - + {#if window.indexedDB} + + star + + {favoritedChannel ? $_('unfavouriteChannel') : $_('favouriteChannel')} + + + {/if} {:else} {$_('subscribe')} diff --git a/materialious/src/lib/dexie.ts b/materialious/src/lib/dexie.ts new file mode 100644 index 00000000..f2501806 --- /dev/null +++ b/materialious/src/lib/dexie.ts @@ -0,0 +1,20 @@ +import type { Table } from 'dexie'; +import Dexie from 'dexie'; + +export interface FavouriteChannels { + channelId: string; + created: Date; +} + +export class MaterialiousDb extends Dexie { + favouriteChannels!: Table; + + constructor() { + super('materialious'); + this.version(1).stores({ + favouriteChannels: 'channelId, created' + }); + } +} + +export const localDb = new MaterialiousDb(); diff --git a/materialious/src/routes/(app)/subscriptions/+page.ts b/materialious/src/routes/(app)/subscriptions/+page.ts index ce3a851f..ab0577be 100644 --- a/materialious/src/routes/(app)/subscriptions/+page.ts +++ b/materialious/src/routes/(app)/subscriptions/+page.ts @@ -9,6 +9,8 @@ import { get } from 'svelte/store'; async function sortVideosByFavourites( videos: (VideoBase | Video | PlaylistPageVideo)[] ): Promise<(VideoBase | Video | PlaylistPageVideo)[]> { + if (!window.indexedDB) return videos; + const favouritedChannels = (await localDb.favouriteChannels.toArray()).map( (channel) => channel.channelId );