Skip to content

Commit

Permalink
feat(Voiranime): add privacy mode && show button/show timestamp settings
Browse files Browse the repository at this point in the history
  • Loading branch information
skullysmods committed Oct 25, 2024
1 parent ee9a0b4 commit 2698fbb
Show file tree
Hide file tree
Showing 2 changed files with 99 additions and 41 deletions.
28 changes: 25 additions & 3 deletions websites/V/Voiranime/metadata.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
"$schema": "https://schemas.premid.app/metadata/1.11",
"apiVersion": 1,
"author": {
"name": "Kozou",
"id": "379362415428632576"
"name": "Atom Skully",
"id": "671037171611729920"
},
"contributors": [
{
Expand All @@ -13,6 +13,10 @@
{
"name": "RisingSunLight",
"id": "240521747852558347"
},
{
"name": "Kozou",
"id": "379362415428632576"
}
],
"service": "Voiranime",
Expand All @@ -24,7 +28,7 @@
},
"url": "voiranime.com",
"regExp": "([a-z0-9-]+[.])*voiranime[.]com[/]",
"version": "2.1.11",
"version": "2.2.0",
"logo": "https://cdn.rcd.gg/PreMiD/websites/V/Voiranime/assets/logo.png",
"thumbnail": "https://cdn.rcd.gg/PreMiD/websites/V/Voiranime/assets/thumbnail.png",
"color": "#1a1920",
Expand All @@ -40,6 +44,24 @@
{
"id": "lang",
"multiLanguage": true
},
{
"id": "privacy",
"title": "Privacy Mode",
"icon": "fad fa-user-secret",
"value": false
},
{
"id": "timestamps",
"title": "Show Timestamps",
"icon": "fad fa-stopwatch",
"value": true
},
{
"id": "buttons",
"title": "Show Buttons",
"icon": "fas fa-compress-arrows-alt",
"value": true
}
]
}
112 changes: 74 additions & 38 deletions websites/V/Voiranime/presence.ts
Original file line number Diff line number Diff line change
@@ -1,31 +1,44 @@
let video = {
duration: 0,
currentTime: 0,
paused: true,
},
currentLang = "en",
strings: Awaited<ReturnType<typeof getStrings>>;

const presence = new Presence({
clientId: "867411016836186112",
}),
getStrings = async () => {
return presence.getStrings(
{
play: "general.playing",
pause: "general.paused",
home: "general.viewHome",
viewEpisode: "general.buttonViewEpisode",
viewAnime: "general.buttonViewAnime",
watchingAnime: "general.watchingAnime",
browsing: "general.browsing",
viewPage: "general.viewPage",
searchFor: "general.searchFor",
},
currentLang
);
},
pathArr = document.location.pathname.split("/"),
browsingTimestamp = Math.floor(Date.now() / 1000),
pages: Record<string, PresenceData> = {
"liste-danimes": {
details: "Visite la page :",
state: "Listes d'animes",
},
"nouveaux-ajouts": {
details: "Visite la page :",
state: "Nouveaux animes",
},
prochainement: {
details: "Visite la page :",
state: "Prochains animes",
},
};

let video = {
duration: 0,
currentTime: 0,
paused: true,
},
currentLang: string,
strings: { [key: string]: string };

presence.on(
"iFrameData",
(data: { duration: number; currentTime: number; paused: boolean }) => {
Expand All @@ -34,40 +47,40 @@ presence.on(
);

presence.on("UpdateData", async () => {
const [newLang, privacyMode, showTimestamps, showButtons] = await Promise.all(
[
presence.getSetting<string>("lang").catch(() => "en"),
presence.getSetting<boolean>("privacy"),
presence.getSetting<boolean>("timestamps"),
presence.getSetting<boolean>("buttons"),
]
);

if (currentLang !== newLang || !strings) {
currentLang = newLang;
strings = await getStrings();
}

let presenceData: PresenceData = {
details: "Page d'accueil",
details: strings.home,
type: ActivityType.Watching,
largeImageKey:
"https://cdn.rcd.gg/PreMiD/websites/V/Voiranime/assets/logo.png",
startTimestamp: browsingTimestamp,
};
const newLang = await presence.getSetting<string>("lang").catch(() => "en");
if (newLang !== currentLang) {
currentLang = newLang;
strings = await presence.getStrings(
{
browsing: "general.browsing",
watchingMovie: "general.watchingMovie",
watchingSeries: "general.watchingSeries",
buttonViewMovie: "general.buttonViewMovie",
buttonViewSeries: "general.buttonViewSeries",
buttonViewPage: "general.buttonViewPage",
viewPage: "general.viewPage",
playing: "general.playing",
searching: "general.search",
searchFor: "general.searchFor",
play: "general.playing",
pause: "general.paused",
},
newLang
);
}

if (privacyMode) presenceData.details = strings.browsing;
switch (pathArr[1]) {
case "anime": {
const title = document.querySelector("ol > li:nth-child(2) > a");
presenceData.details = "Visite la page de l'anime :";
presenceData.state = document.querySelector(
"div.post-title > h1"
)?.textContent;
if (privacyMode) {
delete presenceData.state;
presenceData.details = strings.browsing;
}
if (
!isNaN(video.duration) &&
title &&
Expand All @@ -92,39 +105,62 @@ presence.on("UpdateData", async () => {
: strings.play;
presenceData.buttons = [
{
label: "Regarder l'épisode",
label: strings.viewEpisode,
url: document.location.href,
},
{
label: "Voir l'anime",
label: strings.viewAnime,
url: title.getAttribute("href"),
},
];
if (video.paused) {
delete presenceData.startTimestamp;
delete presenceData.endTimestamp;
}
if (privacyMode) {
delete presenceData.buttons;
delete presenceData.smallImageKey;
delete presenceData.state;
delete presenceData.startTimestamp;
delete presenceData.endTimestamp;
presenceData.details = strings.watchingAnime;
}
}
break;
}
case "anime-genre":
presenceData.details = "Visite la page :";
presenceData.details = strings.viewPage;
presenceData.state = `Listes d'animes du genre "${
document.querySelector("h1")?.textContent
}"`;
if (privacyMode) {
delete presenceData.state;
presenceData.details = strings.browsing;
}
break;
default:
if (document.location.search.startsWith("?s")) {
presenceData.details = "Recherche un anime :";
presenceData.details = strings.searchFor;
presenceData.state = new URLSearchParams(document.location.search).get(
"s"
);
presenceData.smallImageKey = Assets.Search;
} else if (Object.keys(pages).includes(pathArr[1]))
presenceData = { ...presenceData, ...pages[pathArr[1]] };
presenceData.details = strings.viewPage;
presenceData = { ...presenceData, ...pages[pathArr[1]] };
if (privacyMode) {
delete presenceData.state;
delete presenceData.smallImageKey;
presenceData.details = strings.browsing;
}
break;
}

if (!showButtons || privacyMode) delete presenceData.buttons;
if (!showTimestamps) {
delete presenceData.startTimestamp;
delete presenceData.endTimestamp;
}
if (presenceData.details) presence.setActivity(presenceData);
else presence.setActivity();
});

0 comments on commit 2698fbb

Please sign in to comment.