Skip to content

Commit

Permalink
fix(fmovies): fix presence bug (#7516)
Browse files Browse the repository at this point in the history
fix(FMovies): fix presence bug
  • Loading branch information
Dark_Ville authored Jul 26, 2023
1 parent 85cf406 commit ee74992
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 62 deletions.
2 changes: 1 addition & 1 deletion websites/F/FMovies/metadata.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
131 changes: 70 additions & 61 deletions websites/F/FMovies/presence.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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<boolean>("buttons"),
presence.getSetting<boolean>("image"),
]);

if (pathname === "/home") presenceData.details = "Browsing";
else if (pathname.startsWith("/series/")) {
const title = document.querySelector<HTMLHeadingElement>(
"#watch > div.container > div.watch-extra > div.bl-1 > section.info > div.info > h1"
),
season = document.querySelector<HTMLSpanElement>(".value"),
episode = document.querySelector<HTMLAnchorElement>("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<HTMLHeadingElement>(
"#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<HTMLSpanElement>(".value")?.textContent ??
document
.querySelector('[class="season-view"]')
?.textContent?.match(/[0-9]{1,}/gm)?.[0];
let episode =
document.querySelector<HTMLAnchorElement>("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";
Expand All @@ -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);
});

0 comments on commit ee74992

Please sign in to comment.