-
-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* 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
1 parent
5d26a19
commit aa07c8e
Showing
2 changed files
with
193 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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" | ||
] | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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("=", '":"')}"}` | ||
); | ||
} | ||
}); |