{{ video.description }}
@@ -247,13 +168,6 @@ const shows = [ } } -.disclaimer { - margin-top: 3rem; - text-align: center; - color: rgba(255, 255, 255, 0.4); - font-style: italic; -} - @media (width > 60rem) { .featured { margin: 7rem 0 10em; diff --git a/app/plugins/tv.ts b/app/plugins/tv.ts index 774ed91c..2f811729 100644 --- a/app/plugins/tv.ts +++ b/app/plugins/tv.ts @@ -1,6 +1,8 @@ import { authentication, createDirectus, rest } from '@directus/sdk'; import Queue from 'p-queue'; +import { destroy as destroyBunnyChat } from '~/composables/useBunnyChat'; + import type { Schema } from '~~/types/schema'; const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); @@ -35,6 +37,12 @@ export default defineNuxtPlugin((nuxtApp) => { }); } + if (import.meta.client) { + nuxtApp.hook('app:unmount', () => { + destroyBunnyChat(); + }); + } + return { provide: { directusTv } }; }); diff --git a/app/utils/bunnyShows.ts b/app/utils/bunnyShows.ts new file mode 100644 index 00000000..b41721d7 --- /dev/null +++ b/app/utils/bunnyShows.ts @@ -0,0 +1,97 @@ +export interface BunnyVideo { + slug: string; + youtubeId: string; + title: string; + description: string; +} + +export interface BunnyShow { + title: string; + videos: BunnyVideo[]; +} + +export const shows: BunnyShow[] = [ + { + title: 'Bunnies Being Bunnies', + videos: [ + { + slug: 'bunny-stream-1', + youtubeId: 'WtM4OW2qVjY', + title: 'The Great Hop', + description: 'A bunny does what bunnies do best.', + }, + { + slug: 'bunny-stream-12', + youtubeId: 'aWYcjCt4cqc', + title: 'Live and Unfiltered', + description: 'No script. No plan. Pure bunny.', + }, + { + slug: 'bunny-stream-4', + youtubeId: 'pguISUUXWHc', + title: 'Zoomies: Unlocked', + description: 'No warning. Full speed. No regrets.', + }, + { + slug: 'bunny-stream-6', + youtubeId: 'HLL5uGs_mSg', + title: 'The Nose Twitch Chronicles', + description: 'Sniffing everything. Trusting nothing.', + }, + ], + }, + { + title: 'Flop Era', + videos: [ + { + slug: 'bunny-stream-2', + youtubeId: 'f_b_MtB2tws', + title: 'Flop Era', + description: 'Maximum flop. Minimum effort.', + }, + { + slug: 'bunny-stream-3', + youtubeId: 'VjqBt9lbOT0', + title: 'Lettuce Dreams', + description: 'A meditation on greens.', + }, + { + slug: 'bunny-stream-5', + youtubeId: 'urANZiTyBD4', + title: 'Binky Season', + description: 'Pure joy, no explanation needed.', + }, + { + slug: 'bunny-stream-8', + youtubeId: 'EY89M2qRNlc', + title: 'Disapproving Stare', + description: 'You have been judged.', + }, + ], + }, + { + title: 'Bad Bunny', + videos: [ + { + slug: 'bunny-stream-7', + youtubeId: 'ouuPSxE1hK4', + title: 'Cardboard Palace', + description: 'One box. Infinite possibilities.', + }, + { + slug: 'bunny-stream-9', + youtubeId: 'vmbyVU9w47Y', + title: 'Pelo Suave', + description: 'Softest fur in the game.', + }, + { + slug: 'bunny-stream-11', + youtubeId: 'H7-7TXXnw8I', + title: 'Conejito Malcriado', + description: 'Raised in the wild. Answers to no one.', + }, + ], + }, +]; + +export const allVideos = shows.flatMap((s) => s.videos);