From 3085ca5159ba40cb8f7e0c388961562552c8a938 Mon Sep 17 00:00:00 2001 From: Peter Strick Date: Thu, 26 Sep 2024 11:50:47 +0200 Subject: [PATCH 1/5] feat(YTPLR): add Presence --- websites/Y/YTPLR/iframe.ts | 14 ++++++ websites/Y/YTPLR/metadata.json | 32 +++++++++++++ websites/Y/YTPLR/presence.ts | 82 ++++++++++++++++++++++++++++++++++ 3 files changed, 128 insertions(+) create mode 100644 websites/Y/YTPLR/iframe.ts create mode 100644 websites/Y/YTPLR/metadata.json create mode 100644 websites/Y/YTPLR/presence.ts diff --git a/websites/Y/YTPLR/iframe.ts b/websites/Y/YTPLR/iframe.ts new file mode 100644 index 000000000000..7d9be61c9c56 --- /dev/null +++ b/websites/Y/YTPLR/iframe.ts @@ -0,0 +1,14 @@ +const iframe = new iFrame(); +iframe.on("UpdateData", async () => { + const videoElement: HTMLVideoElement = + document.querySelector(".video-stream"); + if (!videoElement) return; + + iframe.send({ + title: document.querySelector("div.ytp-title-text > a") + .textContent, + duration: videoElement.duration, + currentTime: videoElement.currentTime, + paused: videoElement.paused, + }); +}); diff --git a/websites/Y/YTPLR/metadata.json b/websites/Y/YTPLR/metadata.json new file mode 100644 index 000000000000..5628228c15a4 --- /dev/null +++ b/websites/Y/YTPLR/metadata.json @@ -0,0 +1,32 @@ +{ + "$schema": "https://schemas.premid.app/metadata/1.10", + "author": { + "name": "uwu_peter", + "id": "762219738570555412" + }, + "service": "YTPLR", + "description": { + "en": "Shuffles a YouTube Playlist in random order" + }, + "url": "youtube-playlist-randomizer.bitbucket.io", + "version": "1.1.8", + "logo": "https://youtube-playlist-randomizer.bitbucket.io/music-icon.png", + "thumbnail": "https://i.imgur.com/VhkOWl2.png", + "color": "#ff6d70", + "tags": [ + "video", + "media" + ], + "settings": [ + { + "id": "buttons", + "title": "Show Buttons", + "icon": "fas fa-compress-arrows-alt", + "value": true + } + ], + "category": "videos", + "iFrameRegExp": ".*", + "iframe": true, + "readLogs": false +} \ No newline at end of file diff --git a/websites/Y/YTPLR/presence.ts b/websites/Y/YTPLR/presence.ts new file mode 100644 index 000000000000..0496c64d423b --- /dev/null +++ b/websites/Y/YTPLR/presence.ts @@ -0,0 +1,82 @@ +const presence = new Presence({ + clientId: "1284161421957136486", + }), + strings = presence.getStrings({ + play: "Watching", + pause: "Paused", + }), + browsingTimestamp = Math.floor(Date.now() / 1000); + +let videoTitle: string, + videoCurrentTime: number, + videoDuration: number, + videoPaused: boolean, + videoPlaylistTotal: number, + videoPlaylistID: string, + videoPlaylistTitle: string; + +interface DataInterface { + title: string; + currentTime: number; + duration: number; + paused: boolean; +} + +const enum Assets { + Logo = "https://youtube-playlist-randomizer.bitbucket.io/music-icon.png", +} + +presence.on("iFrameData", (data: DataInterface) => { + videoTitle = data.title; + videoCurrentTime = data.currentTime; + videoDuration = data.duration; + videoPaused = data.paused; + videoPlaylistTotal = parseInt(document.querySelector("#all").textContent); + videoPlaylistID = (document.querySelector("#pid") as HTMLInputElement).value; + videoPlaylistTitle = document.querySelector("#title").textContent; +}); + +presence.on("UpdateData", async () => { + const presenceData: PresenceData = { + largeImageKey: Assets.Logo, + }, + [startTimestamp, endTimestamp] = presence.getTimestamps( + Math.floor(videoCurrentTime), + Math.floor(videoDuration) + ), + [showButtons] = await Promise.all([ + presence.getSetting("buttons"), + ]); + + if (videoTitle) { + presenceData.type = ActivityType.Watching; + presenceData.details = `Shuffling ${videoPlaylistTotal} Videos`; + presenceData.state = videoTitle; + presenceData.smallImageKey = videoPaused ? Assets.Pause : Assets.Play; + presenceData.smallImageText = videoPaused + ? (await strings).pause + : (await strings).play; + + if (!videoPaused) { + presenceData.startTimestamp = startTimestamp; + presenceData.endTimestamp = endTimestamp; + } else { + delete presenceData.startTimestamp; + delete presenceData.endTimestamp; + } + + if (videoPlaylistID && showButtons) { + presenceData.buttons = [ + { + label: `Shuffle ${videoPlaylistTitle}`, + url: `https://youtube-playlist-randomizer.bitbucket.io/?pid=${videoPlaylistID}&autostart`, + }, + ]; + } else delete presenceData.buttons; + } else presenceData.startTimestamp = browsingTimestamp; + + presenceData.state = `"${presenceData.state}"`; + + if (presenceData.details) presence.setActivity(presenceData); + else presence.setActivity(); +}); From 5dd4f4b0902b364777f70790de7d3cd433058b54 Mon Sep 17 00:00:00 2001 From: Peter Strick Date: Thu, 26 Sep 2024 12:00:12 +0200 Subject: [PATCH 2/5] fix(YTLPR): fix metadata --- websites/Y/YTPLR/metadata.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/websites/Y/YTPLR/metadata.json b/websites/Y/YTPLR/metadata.json index 5628228c15a4..080799950dc9 100644 --- a/websites/Y/YTPLR/metadata.json +++ b/websites/Y/YTPLR/metadata.json @@ -1,5 +1,6 @@ { - "$schema": "https://schemas.premid.app/metadata/1.10", + "$schema": "https://schemas.premid.app/metadata/1.11", + "apiVersion": 1, "author": { "name": "uwu_peter", "id": "762219738570555412" From da0d61168c9ae05179b1cec686d00f0b7afc1d72 Mon Sep 17 00:00:00 2001 From: Peter Strick Date: Thu, 26 Sep 2024 12:07:47 +0200 Subject: [PATCH 3/5] fix(YTPLR): set Version to 1.0.0 --- websites/Y/YTPLR/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/websites/Y/YTPLR/metadata.json b/websites/Y/YTPLR/metadata.json index 080799950dc9..fc72fee91121 100644 --- a/websites/Y/YTPLR/metadata.json +++ b/websites/Y/YTPLR/metadata.json @@ -10,7 +10,7 @@ "en": "Shuffles a YouTube Playlist in random order" }, "url": "youtube-playlist-randomizer.bitbucket.io", - "version": "1.1.8", + "version": "1.0.0", "logo": "https://youtube-playlist-randomizer.bitbucket.io/music-icon.png", "thumbnail": "https://i.imgur.com/VhkOWl2.png", "color": "#ff6d70", From 47277254666bbe5c5d8318cb5b1dd882f8791024 Mon Sep 17 00:00:00 2001 From: Peter Strick Date: Fri, 27 Sep 2024 08:13:20 +0200 Subject: [PATCH 4/5] fix(YTPLR): fix proposed Changes --- websites/Y/YTPLR/metadata.json | 5 ++--- websites/Y/YTPLR/presence.ts | 10 ++++------ 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/websites/Y/YTPLR/metadata.json b/websites/Y/YTPLR/metadata.json index fc72fee91121..a76dfd6d2bb8 100644 --- a/websites/Y/YTPLR/metadata.json +++ b/websites/Y/YTPLR/metadata.json @@ -11,7 +11,7 @@ }, "url": "youtube-playlist-randomizer.bitbucket.io", "version": "1.0.0", - "logo": "https://youtube-playlist-randomizer.bitbucket.io/music-icon.png", + "logo": "https://i.imgur.com/hsDOqgw.png", "thumbnail": "https://i.imgur.com/VhkOWl2.png", "color": "#ff6d70", "tags": [ @@ -28,6 +28,5 @@ ], "category": "videos", "iFrameRegExp": ".*", - "iframe": true, - "readLogs": false + "iframe": true } \ No newline at end of file diff --git a/websites/Y/YTPLR/presence.ts b/websites/Y/YTPLR/presence.ts index 0496c64d423b..4e36368bac4e 100644 --- a/websites/Y/YTPLR/presence.ts +++ b/websites/Y/YTPLR/presence.ts @@ -2,8 +2,8 @@ const presence = new Presence({ clientId: "1284161421957136486", }), strings = presence.getStrings({ - play: "Watching", - pause: "Paused", + play: "general.watchingVid", + pause: "general.paused", }), browsingTimestamp = Math.floor(Date.now() / 1000); @@ -32,7 +32,7 @@ presence.on("iFrameData", (data: DataInterface) => { videoDuration = data.duration; videoPaused = data.paused; videoPlaylistTotal = parseInt(document.querySelector("#all").textContent); - videoPlaylistID = (document.querySelector("#pid") as HTMLInputElement).value; + videoPlaylistID = document.querySelector("#pid").value; videoPlaylistTitle = document.querySelector("#title").textContent; }); @@ -44,9 +44,7 @@ presence.on("UpdateData", async () => { Math.floor(videoCurrentTime), Math.floor(videoDuration) ), - [showButtons] = await Promise.all([ - presence.getSetting("buttons"), - ]); + showButtons = await presence.getSetting("buttons"); if (videoTitle) { presenceData.type = ActivityType.Watching; From fe3573cb96e8b3d683b8ab1d92c7b13be6b5222d Mon Sep 17 00:00:00 2001 From: Peter Strick Date: Sun, 29 Sep 2024 12:54:45 +0200 Subject: [PATCH 5/5] fix(YTPLR): add proposed Changes from Bas --- websites/Y/YTPLR/metadata.json | 3 ++- websites/Y/YTPLR/presence.ts | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/websites/Y/YTPLR/metadata.json b/websites/Y/YTPLR/metadata.json index a76dfd6d2bb8..6c004a73fc10 100644 --- a/websites/Y/YTPLR/metadata.json +++ b/websites/Y/YTPLR/metadata.json @@ -6,6 +6,7 @@ "id": "762219738570555412" }, "service": "YTPLR", + "altnames": ["YouTube Playlist Randomizer"], "description": { "en": "Shuffles a YouTube Playlist in random order" }, @@ -27,6 +28,6 @@ } ], "category": "videos", - "iFrameRegExp": ".*", + "iFrameRegExp": "youtube[-]playlist[-]randomizer[.]bitbucket[.]io", "iframe": true } \ No newline at end of file diff --git a/websites/Y/YTPLR/presence.ts b/websites/Y/YTPLR/presence.ts index 4e36368bac4e..869c462c5f52 100644 --- a/websites/Y/YTPLR/presence.ts +++ b/websites/Y/YTPLR/presence.ts @@ -23,7 +23,7 @@ interface DataInterface { } const enum Assets { - Logo = "https://youtube-playlist-randomizer.bitbucket.io/music-icon.png", + Logo = "https://i.imgur.com/hsDOqgw.png", } presence.on("iFrameData", (data: DataInterface) => {