Skip to content

Commit

Permalink
feat(라프텔): new presence (#7525)
Browse files Browse the repository at this point in the history
* feat(라프텔): new presence

* fix: logo image size

* fix: prettier code

* fix: deepscan issues

* perf: timestamp

* fix: deepscan

* fix: code prettier

* fix: suggested change

* feat(라프텔): new presence

* fix: logo image size

* fix: prettier code

* fix: deepscan issues

* perf: timestamp

* fix: deepscan

* fix: code prettier

* fix: suggested change

* fix: language

* fix: language code

* fix: language code

* fix: language code

* fix: language code

* fix: presence.ts

destructure document.location

* fix: presence.ts

use camelCase

* fix: presence.ts

combine 'const' statement one-var

* fix: presence.ts

update

* fix: presence.ts

combine 'const' statement one-var

* fix: presence.ts

use camelCase

* fix: presence.ts

update types

* fix: presence

Use eslint igonre
  • Loading branch information
remuring9999 authored Jul 31, 2023
1 parent 5d26a19 commit aa07c8e
Show file tree
Hide file tree
Showing 2 changed files with 193 additions and 0 deletions.
23 changes: 23 additions & 0 deletions websites/#/라프텔/metadata.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"$schema": "https://schemas.premid.app/metadata/1.9",
"author": {
"id": "868016688090710067",
"name": "remuring_"
},
"service": "라프텔",
"altnames": ["laftel"],
"description": {
"en": "Korean animation OTT streaming service.",
"ko_KR": "한국에서 서비스하는 애니 OTT 스트리밍 서비스"
},
"url": "laftel.net",
"version": "1.0.0",
"logo": "https://i.imgur.com/PDh4ncE.jpg",
"thumbnail": "https://i.imgur.com/u227QRb.jpg",
"color": "#816BFF",
"category": "anime",
"tags": [
"anime",
"videos"
]
}
170 changes: 170 additions & 0 deletions websites/#/라프텔/presence.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
const presence = new Presence({
clientId: "1133347072200949770",
});

let prevData = "",
animeData: detail = {},
animeDataEpisode: episode = {};

/* eslint-disable camelcase */
type detail = {
id?: string;
name?: string;
img?: string;
is_ending?: boolean;
animation_info?: {
air_year_quarter?: string;
};
meta_info?: {
avg_rating?: string;
};
};

type episode = {
id?: string;
title?: string;
subject?: string;
episode_num?: string;
};
/* eslint-enable camelcase */

presence.on("UpdateData", async () => {
const { pathname, search } = document.location,
presenceData: PresenceData = {
largeImageKey: "https://i.imgur.com/PDh4ncE.jpg",
};

if (pathname === "/") {
presenceData.smallImageKey = Assets.Search;
presenceData.smallImageText = "둘러보는중";
presenceData.details = "홈";
} else if (pathname.startsWith("/search")) {
presenceData.details = "라프텔 검색";
presenceData.smallImageKey = Assets.Search;
presenceData.smallImageText = "검색중";
presenceData.state = `"${getQuery().keyword}"`;
} else if (pathname.match(/^\/item\/\d/)) {
if (prevData === pathname && animeData.name) {
presenceData.details = animeData.name;
presenceData.largeImageKey = animeData.img;
presenceData.smallImageKey = Assets.VideoCall;
presenceData.smallImageText = animeData.is_ending ? "완결작품" : "방영중";
presenceData.state = animeData.animation_info.air_year_quarter;

presenceData.buttons = [
{
label: "감상하기",
url: `https://laftel.net/item/${animeData.id}`,
},
{
label: `별점 ${animeData.meta_info.avg_rating}점`,
url: `https://laftel.net/item/${animeData.id}/review`,
},
];
} else {
prevData = pathname;
animeData = await (
await fetch(
`https://laftel.net/api/v1.0/items/${pathname.split("/")[2]}/detail/`,
{
headers: {
laftel: "TeJava",
},
}
)
).json();

presenceData.details = animeData.name;
presenceData.largeImageKey = animeData.img;
presenceData.smallImageKey = Assets.VideoCall;
presenceData.smallImageText = animeData.is_ending ? "완결작품" : "방영중";
presenceData.state = animeData.animation_info.air_year_quarter;

presenceData.buttons = [
{
label: "감상하기",
url: `https://laftel.net/item/${animeData.id}`,
},
{
label: `별점 ${animeData.meta_info.avg_rating}점`,
url: `https://laftel.net/item/${animeData.id}/review`,
},
];
}
} else if (pathname.match(/\/player\/\d*\/\d/)) {
const video: HTMLVideoElement = document.querySelector("video");
if (video && !isNaN(video.duration)) {
if (prevData !== pathname) {
prevData = pathname;
animeDataEpisode = await (
await fetch(
`https://laftel.net/api/episodes/v1/${pathname.split("/")[3]}`,
{
headers: {
laftel: "TeJava",
},
}
)
).json();
}

if (!animeData.id) {
animeData = await (
await fetch(
`https://laftel.net/api/v1.0/items/${
pathname.split("/")[2]
}/detail/`,
{
headers: {
laftel: "TeJava",
},
}
)
).json();
}

presenceData.details = `${animeDataEpisode.title}`;
presenceData.state = `${animeDataEpisode.episode_num}${animeDataEpisode.subject}`;
presenceData.largeImageKey = animeData.img;

presenceData.buttons = [
{
label: "자세히 보기",
url: `https://laftel.net/item/${animeData.id}`,
},
{
label: `${animeDataEpisode.episode_num}화 감상하기`,
url: `https://laftel.net/player/${animeData.id}/${animeDataEpisode.id}`,
},
];
if (
video.currentTime > 0 &&
!video.paused &&
!video.ended &&
video.readyState > 2
) {
[presenceData.startTimestamp, presenceData.endTimestamp] =
presence.getTimestamps(
Math.floor(video.currentTime),
Math.floor(video.duration)
);
presenceData.smallImageKey = Assets.Play;
presenceData.smallImageText = "재생중";
} else {
presenceData.state = "일시 정지됨";
presenceData.smallImageKey = Assets.Pause;
}
}
}

presence.setActivity(presenceData);

function getQuery() {
return JSON.parse(
`{"${decodeURI(search.substring(1))
.replaceAll('"', '\\"')
.replaceAll("&", '","')
.replaceAll("=", '":"')}"}`
);
}
});

0 comments on commit aa07c8e

Please sign in to comment.