From ee74992ba3c18168c439d89d757e6ea6fb318ecb Mon Sep 17 00:00:00 2001 From: Dark_Ville <42322979+DarkVillager@users.noreply.github.com> Date: Wed, 26 Jul 2023 08:12:52 +0200 Subject: [PATCH] fix(fmovies): fix presence bug (#7516) fix(FMovies): fix presence bug --- websites/F/FMovies/metadata.json | 2 +- websites/F/FMovies/presence.ts | 131 +++++++++++++++++-------------- 2 files changed, 71 insertions(+), 62 deletions(-) diff --git a/websites/F/FMovies/metadata.json b/websites/F/FMovies/metadata.json index 96044d294004..88305d851609 100644 --- a/websites/F/FMovies/metadata.json +++ b/websites/F/FMovies/metadata.json @@ -9,7 +9,7 @@ "en": "Watch online movies for free, watch movies free in high quality without registration. Just a better place for watching online movies for free. Fmovies.to, FFmovies.is, FFmovies.to" }, "url": "fmovies.to", - "version": "1.0.11", + "version": "1.1.0", "logo": "https://cdn.rcd.gg/PreMiD/websites/F/FMovies/assets/logo.png", "thumbnail": "https://cdn.rcd.gg/PreMiD/websites/F/FMovies/assets/thumbnail.jpeg", "color": "#1BB3C6", diff --git a/websites/F/FMovies/presence.ts b/websites/F/FMovies/presence.ts index 8f9036606742..82a319692ec3 100644 --- a/websites/F/FMovies/presence.ts +++ b/websites/F/FMovies/presence.ts @@ -16,76 +16,82 @@ presence.on( } ); +function setCommonData( + presenceData: PresenceData, + document: Document, + iFrameData: { currTime: number; duration: number; paused: boolean }, + href: string +) { + if (document) { + delete presenceData.startTimestamp; + presenceData.details = + document.querySelector('[itemprop="image"]')?.getAttribute("alt") ?? + document.querySelector('[itemprop="name"]')?.textContent ?? + "Unknown"; + presenceData.largeImageKey = + document.querySelector('[itemprop="image"]')?.getAttribute("src") ?? + Assets.Logo; + if (iFrameData && !iFrameData.paused) { + [, presenceData.endTimestamp] = presence.getTimestamps( + iFrameData.currTime, + iFrameData.duration + ); + presenceData.smallImageKey = Assets.Play; + } else presenceData.smallImageKey = Assets.Pause; + presenceData.buttons = [ + { + label: href.includes("movie") ? "Watch Movie" : "Watch Series", + url: href, + }, + ]; + } + return presenceData; +} + +const enum Assets { + Logo = "https://cdn.rcd.gg/PreMiD/websites/F/FMovies/assets/logo.png", +} + presence.on("UpdateData", async () => { const presenceData: PresenceData = { startTimestamp: browsingTimestamp, - largeImageKey: - "https://cdn.rcd.gg/PreMiD/websites/F/FMovies/assets/logo.png", + largeImageKey: Assets.Logo, }, - { pathname, href } = document.location, + { href, pathname } = document.location, [buttons, image] = await Promise.all([ presence.getSetting("buttons"), presence.getSetting("image"), ]); - if (pathname === "/home") presenceData.details = "Browsing"; - else if (pathname.startsWith("/series/")) { - const title = document.querySelector( - "#watch > div.container > div.watch-extra > div.bl-1 > section.info > div.info > h1" - ), - season = document.querySelector(".value"), - episode = document.querySelector("a.active"); - if (title) presenceData.details = title.textContent; - if (season) { - presenceData.state = season.textContent.split("-")[0].trim(); - if (episode) presenceData.state += ` - ${episode.textContent.trim()}`; - } - if (image) { - presenceData.largeImageKey = document - .querySelector("meta[property='og:image']") - .getAttribute("content"); - } - if (!iFrameData?.paused) { - [, presenceData.endTimestamp] = presence.getTimestamps( - iFrameData.currTime, - iFrameData.duration - ); - presenceData.smallImageKey = Assets.Play; - } else presenceData.smallImageKey = Assets.Pause; - if (buttons) { - presenceData.buttons = [ - { - label: "Watch Series", - url: href, - }, - ]; - } - } else if (pathname.startsWith("/movie/")) { - const title = document.querySelector( - "#watch > div.container > div.watch-extra > div.bl-1 > section.info > div.info > h1" - ); - if (title) presenceData.details = title.textContent; - if (image) { - presenceData.largeImageKey = document - .querySelector("meta[property='og:image']") - .getAttribute("content"); - } - if (iFrameData && !iFrameData.paused) { - [, presenceData.endTimestamp] = presence.getTimestamps( - iFrameData.currTime, - iFrameData.duration - ); - presenceData.smallImageKey = Assets.Play; - } else presenceData.smallImageKey = Assets.Pause; - if (buttons) { - presenceData.buttons = [ - { - label: "Watch Movie", - url: href, - }, - ]; + if (pathname.includes("/series/") || pathname.includes("/tv/")) { + const season = + document.querySelector(".value")?.textContent ?? + document + .querySelector('[class="season-view"]') + ?.textContent?.match(/[0-9]{1,}/gm)?.[0]; + let episode = + document.querySelector("a.active")?.textContent ?? + document.querySelector('[class="watch"]')?.getAttribute("data-ep"); + if (season || episode) { + if (episode.includes(":")) { + episode = episode + .split(":")?.[0] + .replace(/episode(s)?/gi, "") + .trim(); + } + presenceData.state = + episode && season + ? `S${season}:E${episode}` + : episode && !season + ? `Episode ${episode}` + : !episode && season + ? `Season ${season}` + : ""; } - } else if (pathname === "/user/profile") + setCommonData(presenceData, document, iFrameData, href); + } else if (pathname.startsWith("/movie/")) + setCommonData(presenceData, document, iFrameData, href); + else if (pathname === "/user/profile") presenceData.details = "Checking Profile"; else if (pathname === "/user/watchlist") presenceData.details = "Checking Watchlist"; @@ -94,8 +100,11 @@ presence.on("UpdateData", async () => { if (genre) { presenceData.details = genre.textContent; presenceData.smallImageKey = Assets.Search; - } + } else presenceData.details = "Browsing"; } + if (presenceData.buttons && !buttons) delete presenceData.buttons; + if (presenceData.largeImageKey !== Assets.Logo && !image) + presenceData.largeImageKey = Assets.Logo; presence.setActivity(presenceData); });