123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739 |
- const presence = new Presence({
- clientId: "930914836773224498",
- }),
- browsingStamp = Math.floor(Date.now() / 1000);
- let remaining = 0,
- leftTimestamp = 0,
- player = {
- total: "",
- elapsed: "",
- isPlaying: false,
- },
- video = {
- currentTime: 0,
- duration: 0,
- paused: true,
- };
- enum OtherAssets {
- airborne = "https://cdn.rcd.gg/PreMiD/websites/F/Flightradar24/assets/0.png",
- arriving = "https://cdn.rcd.gg/PreMiD/websites/F/Flightradar24/assets/1.png",
- departing = "https://cdn.rcd.gg/PreMiD/websites/F/Flightradar24/assets/2.png",
- diverting = "https://cdn.rcd.gg/PreMiD/websites/F/Flightradar24/assets/3.png",
- onground = "https://cdn.rcd.gg/PreMiD/websites/F/Flightradar24/assets/4.png",
- }
- presence.on(
- "iFrameData",
- (data: {
- elapsed: string;
- total: string;
- isPlaying: boolean;
- currentTime: number;
- duration: number;
- paused: boolean;
- }) => {
- (player = {
- total: data.total,
- elapsed: data.elapsed,
- isPlaying: data.isPlaying,
- }),
- (video = {
- currentTime: data.currentTime,
- duration: data.duration,
- paused: data.paused,
- });
- }
- );
- presence.on("UpdateData", async () => {
- const [elapsed, buttons, images, timeLeft] = await Promise.all([
- presence.getSetting<boolean>("elapsed"),
- presence.getSetting<boolean>("buttons"),
- presence.getSetting<boolean>("images"),
- presence.getSetting<boolean>("timeLeft"),
- ]),
- presenceData: PresenceData = {
- largeImageKey:
- "https://cdn.rcd.gg/PreMiD/websites/F/Flightradar24/assets/logo.png",
- startTimestamp: browsingStamp,
- };
- switch (document.location.hostname.split(".")[0]) {
- case "www":
- switch (document.location.pathname.split("/")[1]) {
- case "data":
- switch (document.location.pathname.split("/")[2]) {
- case "airports":
- if (document.location.pathname === "/data/airports")
- presenceData.details = "Browsing Airports";
- else if (
- document.querySelector("[data-testid='cnt-subpage-title']")
- ) {
- presenceData.details = `Browsing ${
- document.querySelector("[data-testid='cnt-subpage-title']")
- .firstElementChild.firstChild.textContent
- }`;
- presenceData.state = `${
- document.querySelector("small").textContent.split(" ")[1]
- } ${document
- .querySelector("small")
- .textContent.split(" ")[2][0]
- .toUpperCase()}${document
- .querySelector("small")
- .textContent.split(" ")[2]
- .slice(1)}`;
- } else if (document.querySelector(".airport-name")) {
- presenceData.details = `Viewing ${
- document.querySelector(".airport-name").textContent
- }`;
- presenceData.state = document.querySelector<HTMLAnchorElement>(
- ".btn.active"
- ).childNodes[2]
- ? document.querySelector<HTMLAnchorElement>(".btn.active")
- .childNodes[2].textContent
- : document.querySelector<HTMLAnchorElement>(".btn.active")
- .textContent;
- presenceData.buttons = [
- {
- label: "View Airport",
- url: document.location.href,
- },
- ];
- } else presenceData.details = "Browsing Airports";
- break;
- case "airlines":
- if (document.querySelector(".airline-name")) {
- presenceData.details = `Viewing ${
- document.querySelector(".airline-name").textContent
- }`;
- presenceData.state = document.querySelector<HTMLAnchorElement>(
- ".btn.active"
- ).childNodes[2]
- ? document.querySelector<HTMLAnchorElement>(".btn.active")
- .childNodes[2].textContent
- : document.querySelector<HTMLAnchorElement>(".btn.active")
- .textContent;
- presenceData.buttons = [
- {
- label: "View Airline",
- url: document.location.href,
- },
- ];
- } else presenceData.details = "Browsing Airlines";
- break;
- case "aircraft":
- if (
- document.querySelector("[data-testid='cnt-subpage-title'] > h1")
- ) {
- presenceData.details = `Viewing ${document
- .querySelector("[data-testid='cnt-subpage-title'] > h1 ")
- .textContent.replace("Production lists - ", "")}`;
- presenceData.buttons = [
- {
- label: "View Page",
- url: document.location.href,
- },
- ];
- } else if (
- document.querySelector("[data-testid='cnt-subpage-info'] > h1")
- ) {
- presenceData.details = `Viewing ${document
- .querySelector("[data-testid='cnt-subpage-info'] > h1 ")
- .textContent.replace(
- "Flight history for aircraft -",
- "Aircraft"
- )}`;
- if (
- images &&
- document.querySelector(".img-responsive") &&
- document.querySelector<HTMLImageElement>(".img-responsive")
- .src !== ""
- ) {
- presenceData.largeImageKey =
- document.querySelector<HTMLImageElement>(
- ".img-responsive"
- ).src;
- }
- presenceData.buttons = [
- {
- label: "View Aircraft",
- url: document.location.href,
- },
- ];
- } else presenceData.details = "Browsing Aircraft";
- break;
- case "flights":
- if (
- document.querySelector("[data-testid='cnt-subpage-info'] > h1")
- ) {
- presenceData.details = `Viewing ${document
- .querySelector("[data-testid='cnt-subpage-info'] > h1 ")
- .textContent.match(/(flight .+$)/g)}`;
- presenceData.state = `${document
- .querySelector("[data-testid='cnt-subpage-info'] > h1 ")
- .textContent.replace(/(flight .+$)/g, "")
- .replace("Flight history for ", "")}`;
- presenceData.buttons = [
- {
- label: "View Page",
- url: document.location.href,
- },
- ];
- } else presenceData.details = "Browsing Flights";
- break;
- case "pinned":
- if (
- document.querySelector("[data-testid='cnt-subpage-info'] > h1")
- ) {
- presenceData.details = `Viewing ${document
- .querySelector("[data-testid='cnt-subpage-info'] > h1 ")
- .textContent.replace(
- "Flight history for aircraft -",
- "Aircraft"
- )}`;
- if (
- images &&
- document.querySelector(".img-responsive") &&
- document.querySelector<HTMLImageElement>(".img-responsive")
- .src !== ""
- ) {
- presenceData.largeImageKey =
- document.querySelector<HTMLImageElement>(
- ".img-responsive"
- ).src;
- }
- presenceData.buttons = [
- {
- label: "View Aircraft",
- url: document.location.href,
- },
- ];
- } else presenceData.details = "Browsing Pinned Flights";
- break;
- case "statistics":
- presenceData.details = "Viewing Statistics";
- break;
- case null:
- presenceData.details = "Searching Data";
- break;
- default:
- presenceData.details = "Searching Data";
- break;
- }
- break;
- case "apps":
- presenceData.details = "Viewing Mobile Apps";
- presenceData.state = document.querySelector("a.active").textContent;
- break;
- case "add-coverage":
- presenceData.details = "Viewing Add Coverage";
- break;
- case "apply-for-receiver":
- presenceData.details = "Viewing Apply For Receiver";
- break;
- case "share-your-data":
- presenceData.details = "Viewing Share Data";
- presenceData.state = document.querySelector("li.active").textContent;
- break;
- case "build-your-own":
- presenceData.details = "Viewing Build Your Own";
- presenceData.state = document.querySelector("li.active").textContent;
- break;
- case "share-statistics":
- presenceData.details = "Viewing Data Statistics";
- presenceData.state = `${
- document.querySelector("a.active").textContent.split(" ")[0]
- } ${document
- .querySelector("a.active")
- .textContent.split(" ")[1][0]
- .toUpperCase()}${document
- .querySelector("a.active")
- .textContent.split(" ")[1]
- .slice(1)}`;
- break;
- case "premium":
- presenceData.details = "Viewing Subscription Plans";
- break;
- case "about":
- presenceData.details = "Viewing About Flightradar24";
- break;
- case "how-it-works":
- presenceData.details = "Viewing How It Works";
- break;
- case "glossary":
- presenceData.details = "Viewing Glossary";
- break;
- case "faq":
- presenceData.details = "Viewing FAQ";
- break;
- case "contact-us":
- presenceData.details = "Viewing Contact Us";
- break;
- case "privacy-policy":
- presenceData.details = "Viewing Privacy Policy";
- break;
- case "terms-and-conditions":
- presenceData.details = "Viewing Terms of Service";
- break;
- case "commercial-services":
- if (
- document.location.pathname === "/commercial-services/data-services"
- )
- presenceData.details = "Viewing Data Services";
- else if (
- document.location.pathname ===
- "/commercial-services/app-integration"
- )
- presenceData.details = "Viewing App Integration";
- break;
- case "blog":
- switch (document.location.pathname) {
- case "/blog/": {
- presenceData.details = "Browsing Blog Posts";
- break;
- }
- case "/blog/newsletter/": {
- presenceData.details = "Viewing Newsletter";
- break;
- }
- case "/blog/avtalk-podcast/": {
- presenceData.details = "Viewing Podcast";
- break;
- }
- default:
- if (document.querySelector("iframe.blubrryplayer")) {
- [presenceData.details, presenceData.state] = document
- .querySelector(
- ".elementor-heading-title.elementor-size-default"
- )
- .textContent.split(":");
- if (player.isPlaying) {
- presenceData.smallImageKey = Assets.Play;
- presenceData.smallImageText = "Playing";
- [presenceData.startTimestamp, presenceData.endTimestamp] =
- presence.getTimestamps(
- presence.timestampFromFormat(player.total),
- presence.timestampFromFormat(player.elapsed)
- );
- } else {
- presenceData.smallImageKey = Assets.Pause;
- presenceData.smallImageText = "Paused";
- }
- } else if (
- document.querySelector(
- "h1.elementor-heading-title.elementor-size-default > i.fas.fa-video"
- )
- ) {
- if (video.duration !== 0) {
- [presenceData.startTimestamp, presenceData.endTimestamp] =
- presence.getTimestamps(
- presence.timestampFromFormat(player.total),
- presence.timestampFromFormat(player.elapsed)
- );
- } else if (document.querySelector("video")) {
- [presenceData.startTimestamp, presenceData.endTimestamp] =
- presence.getTimestampsfromMedia(
- document.querySelector<HTMLMediaElement>("video")
- );
- } else {
- presenceData.details = "Viewing Blog Post";
- presenceData.state = document.querySelector(
- "h1.elementor-heading-title.elementor-size-default"
- ).textContent;
- presenceData.buttons = [
- {
- label: "View Page",
- url: document.location.href,
- },
- ];
- }
- presenceData.details = "Watching Video";
- presenceData.state = document
- .querySelector(
- "h1.elementor-heading-title.elementor-size-default"
- )
- .textContent.replace("Video: ", "");
- if (video.duration !== 0) {
- presenceData.buttons = [
- {
- label: "View Page",
- url: document.location.href,
- },
- {
- label: "Watch Video",
- url: `https://www.youtube.com/watch?v=${
- document
- .querySelector<HTMLVideoElement>(
- "iframe.elementor-video"
- )
- .src.split("/")[4]
- .split("?")[0]
- }`,
- },
- ];
- } else if (document.querySelector("video")) {
- presenceData.buttons = [
- {
- label: "View Page",
- url: document.location.href,
- },
- {
- label: "Watch Video",
- url: document.querySelector<HTMLMetaElement>(
- "meta[itemprop='url']"
- ).content,
- },
- ];
- }
- if (video.duration !== 0) {
- if (video.paused) {
- presenceData.smallImageKey = Assets.Pause;
- presenceData.smallImageText = "Paused";
- } else {
- presenceData.smallImageKey = Assets.Play;
- presenceData.smallImageText = "Playing";
- }
- } else if (document.querySelector("video")) {
- if (
- document.querySelector<HTMLMediaElement>("video").paused
- ) {
- presenceData.smallImageKey = Assets.Pause;
- presenceData.smallImageText = "Paused";
- } else {
- presenceData.smallImageKey = Assets.Play;
- presenceData.smallImageText = "Playing";
- }
- }
- } else {
- presenceData.details = "Viewing Blog Post";
- presenceData.state = document.querySelector(
- "h1.elementor-heading-title.elementor-size-default"
- ).textContent;
- presenceData.buttons = [
- {
- label: "View Page",
- url: document.location.href,
- },
- ];
- }
- }
- break;
- default:
- if (
- document.querySelector(
- "[data-testid='view-selector-toggle'] > span:nth-child(2)"
- ).textContent === "Multi"
- ) {
- presenceData.details = `Viewing ${
- document.querySelector(
- "[data-testid='view-selector-toggle'] > span:nth-child(2)"
- ).textContent
- } Mode`;
- if (
- document.querySelector("[data-testid='multiselect__info-panel']")
- ) {
- presenceData.buttons = [
- {
- label: "View Page",
- url: document.location.href,
- },
- ];
- if (
- document.querySelectorAll(
- "[data-testid='multiselect__info-panel']"
- ).length === 1
- ) {
- presenceData.state = `Tracking ${document
- .querySelectorAll("[data-testid='multiselect__info-panel']")
- .length.toString()} Flight`;
- } else if (
- document.querySelectorAll(
- "[data-testid='multiselect__info-panel']"
- ).length >= 2
- ) {
- presenceData.state = `Tracking ${document
- .querySelectorAll("[data-testid='multiselect__info-panel']")
- .length.toString()} Flights`;
- }
- }
- } else if (
- document.querySelector(
- "[data-testid='view-selector-toggle'] > span:nth-child(2)"
- ).textContent === "Map"
- ) {
- presenceData.details = `Viewing ${
- document.querySelector(
- "[data-testid='view-selector-toggle'] > span:nth-child(2)"
- ).textContent
- } Mode`;
- if (document.querySelector("[data-testid='aircraft-panel']")) {
- if (
- document.querySelector(
- "[data-testid='aircraft-panel__header__callsign']"
- ).textContent === "N/A"
- ) {
- presenceData.details = `Tracking ${
- document.querySelector(
- "[data-testid='aircraft-panel__registration']"
- ).textContent
- }`;
- } else {
- presenceData.details = `Tracking ${
- document.querySelector(
- "[data-testid='aircraft-panel__header__callsign']"
- ).textContent
- }`;
- }
- presenceData.smallImageKey =
- OtherAssets[
- document
- .querySelector(
- "[data-testid='aircraft-panel'] [data-testid='base-tooltip__content']"
- )
- .textContent.toLocaleLowerCase()
- .replaceAll(" ", "") as keyof typeof OtherAssets
- ];
- presenceData.smallImageText = document.querySelector(
- "[data-testid='aircraft-panel'] [data-testid='base-tooltip__content']"
- ).textContent;
- if (
- document.querySelector(
- "[data-testid='aircraft-panel__flight-time-remaining'] > span"
- )
- ) {
- if (
- remaining !==
- parseInt(
- document
- .querySelector(
- "[data-testid='aircraft-panel__flight-time-remaining'] > span"
- )
- .textContent.slice(5)
- .split(":")[0]
- ) *
- 3600 +
- parseInt(
- document
- .querySelector(
- "[data-testid='aircraft-panel__flight-time-remaining'] > span"
- )
- .textContent.slice(5)
- .split(":")[1]
- ) *
- 60
- ) {
- remaining =
- parseInt(
- document
- .querySelector(
- "[data-testid='aircraft-panel__flight-time-remaining'] > span"
- )
- .textContent.slice(5)
- .split(":")[0]
- ) *
- 3600 +
- parseInt(
- document
- .querySelector(
- "[data-testid='aircraft-panel__flight-time-remaining'] > span"
- )
- .textContent.slice(5)
- .split(":")[1]
- ) *
- 60;
- leftTimestamp = Math.floor(Date.now() / 1000) + remaining;
- presenceData.endTimestamp = leftTimestamp;
- } else presenceData.endTimestamp = leftTimestamp;
- }
- if (
- images &&
- document.querySelector<HTMLAnchorElement>(
- "[data-testid='aircraft-panel__image-link']"
- ).href !== "https://www.jetphotos.com/addphotos/" &&
- document.querySelector<HTMLAnchorElement>(
- "[data-testid='aircraft-panel__image-link']"
- ).href !== ""
- ) {
- presenceData.largeImageKey =
- document.querySelector<HTMLImageElement>(
- "[data-testid='aircraft-panel__image-link'] > img"
- ).src;
- }
- presenceData.buttons = [
- {
- label: "View Page",
- url: document.location.href,
- },
- ];
- } else if (
- document.querySelector("[data-testid='airport-panel']")
- ) {
- presenceData.details = `Tracking ${
- document.querySelector(
- "[data-testid='airport-panel__header__name']"
- ).textContent
- }`;
- if (document.querySelector("span[class='AM']")) {
- presenceData.state = `${
- document.querySelector("span[class='AM']").textContent
- }am | ${
- document
- .querySelector(".pnl-component.airport-info > .time > span")
- .textContent.split("|")[1]
- } | ${
- document
- .querySelector(".pnl-component.airport-info > .time > span")
- .textContent.split("|")[2]
- }`;
- } else if (document.querySelector("span[class='PM']")) {
- presenceData.state = `${
- document.querySelector("span[class='PM']").textContent
- }pm | ${
- document
- .querySelector(".pnl-component.airport-info > .time > span")
- .textContent.split("|")[1]
- } | ${
- document
- .querySelector(".pnl-component.airport-info > .time > span")
- .textContent.split("|")[2]
- }`;
- }
- if (
- images &&
- document.querySelector<HTMLAnchorElement>(
- "[data-testid='airport-panel__image-link']"
- ).href !== "https://www.jetphotos.com/addphotos/" &&
- document.querySelector<HTMLAnchorElement>(
- "[data-testid='airport-panel__image-link']"
- ).href !== ""
- ) {
- presenceData.largeImageKey =
- document.querySelector<HTMLImageElement>(
- "[data-testid='airport-panel__image-link'] > img"
- ).src;
- }
- presenceData.buttons = [
- {
- label: "View Page",
- url: document.location.href,
- },
- ];
- }
- } else {
- presenceData.details = "Unsupported Page";
- presenceData.state = document.location.pathname;
- }
- break;
- }
- if (document.querySelector("[class='session-timeout-modal visible']"))
- presenceData.details = "Session Timed Out";
- break;
- case "forum":
- if (document.location.pathname === "/") {
- presenceData.details = `Viewing ${
- document.querySelector(".ui-state-active").textContent
- }`;
- } else if (document.location.pathname.split("/")[1] === "member") {
- presenceData.details = `Viewing ${
- document.querySelector(".ui-state-active").textContent
- } Of User`;
- presenceData.state = document.querySelector(".username").textContent;
- presenceData.buttons = [
- {
- label: "View Profile",
- url: document.location.href,
- },
- ];
- } else if (
- document.querySelector(".widget-tabs-nav > ul > .ui-state-active") &&
- document.querySelector("h1.main-title")
- ) {
- presenceData.details = `Viewing ${
- document.querySelector(".widget-tabs-nav > ul > .ui-state-active")
- .textContent
- } Of`;
- presenceData.state =
- document.querySelectorAll("h1.main-title")[1].textContent;
- presenceData.buttons = [
- {
- label: "View Page",
- url: document.location.href,
- },
- ];
- } else if (document.querySelector("h1.main-title")) {
- presenceData.details = `Viewing ${
- document.querySelectorAll("h1.main-title")[1].textContent
- }`;
- presenceData.buttons = [
- {
- label: "View Page",
- url: document.location.href,
- },
- ];
- } else {
- presenceData.details = "Unsupported Page";
- presenceData.state = document.location.pathname;
- }
- if (
- document.location.pathname.split("/")[1] === "search" &&
- document.querySelector(".search-controls-keywords")
- ) {
- presenceData.state = document.querySelector(
- ".search-controls-keywords"
- ).lastChild.textContent;
- }
- break;
- case "my":
- if (document.location.pathname.split("/")[1] === "settings") {
- presenceData.details = "Viewing Settings";
- presenceData.state = document.querySelector("li.active").textContent;
- } else if (document.location.pathname.split("/")[1] === "friends")
- presenceData.details = "Viewing Friends";
- else if (document.location.pathname.split("/")[1] === "add-flight")
- presenceData.details = "Adding Flight To Log";
- else if (document.location.pathname !== "/") {
- presenceData.details = `Viewing Profile Of ${
- document.querySelector("h3").textContent
- }`;
- presenceData.state = document.querySelector("h2").textContent;
- presenceData.buttons = [
- {
- label: "View Page",
- url: document.location.href,
- },
- ];
- if (images) {
- presenceData.largeImageKey = document
- .querySelector<HTMLImageElement>("img.avatar")
- .src.replace("=64", "=1024")
- .replace("=64", "=1024");
- }
- } else presenceData.details = "Viewing Logbook Homepage";
- break;
- case "careers":
- presenceData.details = "Careers at Flightradar24";
- if (document.location.pathname === "/jobs")
- presenceData.state = "Browsing Jobs";
- else if (document.querySelector("span.textFitted")) {
- presenceData.state =
- document.querySelector("span.textFitted").textContent;
- } else
- presenceData.state = document.querySelectorAll("h2")[1].textContent;
- break;
- default:
- presenceData.details = "Unsupported Subdomain";
- presenceData.state = document.location.hostname;
- break;
- }
- if (!elapsed) delete presenceData.startTimestamp;
- if (!timeLeft) delete presenceData.endTimestamp;
- if (!buttons && presenceData.buttons) delete presenceData.buttons;
- presence.setActivity(presenceData);
- });
|