diff --git a/websites/O/OKISO/metadata.json b/websites/O/OKISO/metadata.json new file mode 100644 index 000000000000..3315263c6dc7 --- /dev/null +++ b/websites/O/OKISO/metadata.json @@ -0,0 +1,27 @@ +{ + "$schema": "https://schemas.premid.app/metadata/1.16", + "apiVersion": 1, + "author": { + "name": "OKISO", + "id": "274178934143451137" + }, + "service": "OKISO", + "description": { + "en": "Shows what you're watching on okiso.net" + }, + "url": [ + "okiso.net", + "localhost" + ], + "regExp": ".*(okiso\\.net|localhost).*", + "version": "1.0.0", + "logo": "https://i.imgur.com/LLE4SVZ.png", + "thumbnail": "https://i.imgur.com/LLE4SVZ.png", + "color": "#FF7EB3", + "category": "music", + "tags": [ + "music", + "vtuber", + "streaming" + ] +} \ No newline at end of file diff --git a/websites/O/OKISO/presence.ts b/websites/O/OKISO/presence.ts new file mode 100644 index 000000000000..9c72e40dfd4e --- /dev/null +++ b/websites/O/OKISO/presence.ts @@ -0,0 +1,93 @@ +import { Presence, PresenceData, ActivityType, Assets, getTimestampsFromMedia } from 'premid' + +// Initialize without a custom clientId to use official PreMiD Application +const presence = new Presence() +const browsingTimestamp = Math.floor(Date.now() / 1000) + +enum ActivityAssets { + Logo = 'logo', +} + +presence.on('UpdateData', async () => { + const { pathname } = document.location + + // Initialize basic presence + const presenceData = { + largeImageKey: ActivityAssets.Logo, + largeImageText: 'okiso.net', + startTimestamp: browsingTimestamp, + buttons: [ + { label: 'Visit okiso.net', url: `https://okiso.net${pathname === '/' ? '' : pathname}` } + ] + } as any + + // ─── Home Page ─── + if (pathname === '/') { + // Check for Terms Modal + const termsModal = document.querySelector('[data-premid-modal="terms"]') + if (termsModal) { + presenceData.details = 'Reading Content Terms' + presenceData.state = 'Legal & Guidelines' + } else { + // Check for live broadcast + const isLive = document.querySelector('[data-premid-live="true"]') + if (isLive) { + presenceData.details = 'Watching Live Broadcast' + presenceData.state = '🔴 LIVE on Twitch' + presenceData.smallImageKey = Assets.Live + presenceData.smallImageText = 'Live' + delete presenceData.startTimestamp + } else { + // Check for video playback + const videoPlayer = document.querySelector('[data-premid-title]') + if (videoPlayer) { + const videoTitle = videoPlayer.getAttribute('data-premid-title') + const paused = videoPlayer.getAttribute('data-premid-paused') === 'true' + + presenceData.details = videoTitle || 'Watching a Video' + presenceData.smallImageKey = paused ? Assets.Pause : Assets.Play + presenceData.smallImageText = paused ? 'Paused' : 'Playing' + + if (!paused) { + const video = document.querySelector('[data-premid-title] video') + if (video) { + [presenceData.startTimestamp, presenceData.endTimestamp] = getTimestampsFromMedia(video) + } + } + + presenceData.state = paused ? '⏸ Paused' : '▶ Playing' + } else { + presenceData.details = 'Browsing' + presenceData.state = 'Home Page' + } + } + } + } + // ─── Discography (3D Gallery) ─── + else if (pathname === '/releases') { + presenceData.details = 'Exploring the 3D Audio Archive' + presenceData.state = 'Interactive Discography' + } + // ─── Individual Release Page ─── + else if (pathname.startsWith('/releases/')) { + const releaseEl = document.querySelector('[data-premid-release-title]') + const releaseTitle = releaseEl?.getAttribute('data-premid-release-title') + presenceData.details = 'Viewing Release' + presenceData.state = releaseTitle ? `🎵 ${releaseTitle}` : 'Release Page' + } + // ─── Upcoming Page ─── + else if (pathname === '/upcoming') { + presenceData.details = 'Browsing' + presenceData.state = 'Upcoming Releases' + } + // ─── Fallback ─── + else { + presenceData.details = document.title || 'Browsing' + presenceData.state = 'okiso.net' + } + + if (presenceData.details) + presence.setActivity(presenceData) + else + presence.setActivity() +}) \ No newline at end of file diff --git a/websites/O/OKISO/tsconfig.json b/websites/O/OKISO/tsconfig.json new file mode 100644 index 000000000000..afe02ee3c34c --- /dev/null +++ b/websites/O/OKISO/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/" + } +} \ No newline at end of file