Skip to content

Commit a51e63d

Browse files
authored
feat(JKAnime): add user settings, improve support for iframe, add better description! (#10346)
1 parent 1b21e4d commit a51e63d

File tree

2 files changed

+64
-15
lines changed

2 files changed

+64
-15
lines changed

websites/J/JKAnime/metadata.json

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
},
1313
"url": "jkanime.net",
1414
"regExp": "^https?[:][/][/]([a-z0-9-]+[.])*jkanime[.]net[/]",
15-
"version": "1.1.0",
15+
"version": "1.2.0",
1616
"logo": "https://cdn.rcd.gg/PreMiD/websites/J/JKAnime/assets/logo.png",
1717
"thumbnail": "https://cdn.rcd.gg/PreMiD/websites/J/JKAnime/assets/thumbnail.png",
1818
"color": "#000000",
@@ -23,5 +23,29 @@
2323
"video"
2424
],
2525
"iframe": true,
26-
"iFrameRegExp": "(.*\\.)?jkanime\\.net"
26+
"iFrameRegExp": "(^|\\.)?(jkanime\\.net|mega\\.nz|sfastwish\\.com|flaswish\\.com|vidhidevip\\.com|callistanise\\.com|mdbekjwqa\\.pw|mp4upload\\.com|streamtape\\.com|dsvplay\\.com|myvidplay\\.com)",
27+
"settings": [
28+
{
29+
"id": "useAnimeCover",
30+
"title": "Show Cover",
31+
"icon": "fad fa-images",
32+
"value": true
33+
},
34+
{
35+
"id": "usePresenceName",
36+
"title": "Show Title as Presence",
37+
"icon": "fad fa-user-edit",
38+
"value": true
39+
},
40+
{
41+
"id": "logoType",
42+
"title": "Icon",
43+
"icon": "fad fa-images",
44+
"value": 0,
45+
"values": [
46+
"Animated",
47+
"Still"
48+
]
49+
}
50+
]
2751
}

websites/J/JKAnime/presence.ts

Lines changed: 38 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,14 @@ let cache: {
2121
episodio: string
2222
season: string
2323
bannerImg: string
24+
descAnime: string
2425
} = {
2526
text: '',
2627
nombreAnime: '',
2728
episodio: '',
2829
season: '',
2930
bannerImg: ActivityAssets.Gif,
31+
descAnime: '',
3032
}
3133

3234
async function getEpisodeInfo(text: string) {
@@ -36,13 +38,16 @@ async function getEpisodeInfo(text: string) {
3638
episodio: cache.episodio,
3739
season: cache.season,
3840
bannerImg: cache.bannerImg,
41+
descAnime: cache.descAnime,
3942
}
4043
}
41-
const [episodioParte, tituloCompleto] = text.split(' - ')
42-
const episodio = episodioParte?.trim() || ''
43-
const seasonMatch = tituloCompleto?.match(/Season\s*(\d+)/i)
44-
const nombreAnime = tituloCompleto?.replace(/Season\s*\d+/i, '').trim() || ''
45-
const season = seasonMatch ? `Season ${seasonMatch[1]}` : 'Season 1'
44+
const currentEpisode = document.querySelector(
45+
'#episodes-content li.list-group-item.current',
46+
)
47+
const episodio = currentEpisode?.querySelector('h5')?.textContent?.trim() || 'Episodio 1'
48+
const nombreAnime = document.querySelector('.video_i a')?.textContent?.trim() || ''
49+
const season = 'Season 1'
50+
const descAnime = document.querySelector('.video_i p')?.textContent?.trim() || ''
4651

4752
const bannerElement = document.querySelector('div.video_t > a > img')
4853
const bannerImg = bannerElement?.getAttribute('src') || ActivityAssets.Gif
@@ -53,13 +58,15 @@ async function getEpisodeInfo(text: string) {
5358
episodio,
5459
season,
5560
bannerImg,
61+
descAnime,
5662
}
5763

5864
return {
5965
nombreAnime,
6066
episodio,
6167
season,
6268
bannerImg,
69+
descAnime,
6370
}
6471
}
6572

@@ -73,11 +80,17 @@ presence.on('iFrameData', (data: any) => {
7380
})
7481

7582
presence.on('UpdateData', async () => {
83+
const [useAnimeCover, usePresenceName, logoType] = await Promise.all([
84+
presence.getSetting<boolean>('useAnimeCover'),
85+
presence.getSetting<boolean>('usePresenceName'),
86+
presence.getSetting<number>('logoType'),
87+
])
88+
7689
const { pathname } = document.location
7790
const presenceData: PresenceData = {
7891
details: 'Navegando',
7992
state: 'Pagina de Inicio',
80-
largeImageKey: ActivityAssets.Gif,
93+
largeImageKey: [ActivityAssets.Gif, ActivityAssets.Logo][logoType] || ActivityAssets.Logo,
8194
type: ActivityType.Watching,
8295
startTimestamp: browsingTimestamp,
8396
smallImageKey: Assets.Reading,
@@ -89,11 +102,23 @@ presence.on('UpdateData', async () => {
89102
const textoTest = bc.textContent
90103
const episodeData = await getEpisodeInfo(textoTest)
91104

92-
presenceData.name = episodeData?.nombreAnime
93-
presenceData.details = `${episodeData?.episodio} - ${episodeData.season}`
94-
presenceData.state = 'JKAnime'
95-
presenceData.largeImageKey = episodeData?.bannerImg
96-
presenceData.largeImageText = `Viendo: ${episodeData?.nombreAnime}`
105+
if (usePresenceName) {
106+
presenceData.name = episodeData?.nombreAnime
107+
}
108+
else {
109+
presenceData.name = 'JKAnime'
110+
}
111+
112+
if (useAnimeCover) {
113+
presenceData.largeImageKey = episodeData?.bannerImg
114+
}
115+
else {
116+
presenceData.largeImageKey = [ActivityAssets.Gif, ActivityAssets.Logo][logoType] || ActivityAssets.Logo
117+
}
118+
119+
presenceData.details = episodeData?.nombreAnime
120+
presenceData.state = episodeData?.descAnime
121+
presenceData.largeImageText = `${episodeData.season.toString()}, ${episodeData.episodio.toString()}`
97122

98123
if (iframePlayback) {
99124
presenceData.smallImageKey = isPaused ? Assets.Pause : Assets.Play
@@ -205,11 +230,11 @@ presence.on('UpdateData', async () => {
205230
presence.setActivity(presenceData)
206231
return
207232
}
208-
else if (pathname.includes('/') && !/\/\d+\/?$/.test(pathname)) {
233+
else if (pathname.includes('/') && !/\/\d+\/?$/.test(pathname) && !pathname.includes('/pelicula/')) {
209234
const animeTitle = pathname.split('/')[1] || ''
210235

211236
if (animeTitle) {
212-
const title = document.querySelector('div.anime_info > h3')?.textContent
237+
const title = document.querySelector('div.anime_info > h3')?.textContent || 'Comunidad'
213238

214239
presenceData.details = 'Viendo Descripción'
215240
presenceData.state = `Leyendo sobre: ${title}`

0 commit comments

Comments
 (0)