feat: resolve adult media

fix: episode list issues
This commit is contained in:
ThaUnknown 2023-09-25 11:17:29 +02:00
parent 9e96c21605
commit 9a339342aa
7 changed files with 28 additions and 16 deletions

View file

@ -1,6 +1,6 @@
{
"name": "Miru",
"version": "4.4.11",
"version": "4.4.12",
"author": "ThaUnknown_ <ThaUnknown@users.noreply.github.com>",
"description": "Stream anime torrents, real-time with no waiting for downloads.",
"main": "build/main.js",

View file

@ -40,8 +40,8 @@ export default class {
this.discord.subscribe('ACTIVITY_JOIN')
this.discord.subscribe('ACTIVITY_SPECTATE')
})
this.discord.on('ACTIVITY_JOIN', (args) => {
this.window.webContents.send('w2glink', args.secret)
this.discord.on('ACTIVITY_JOIN', ({ secret }) => {
this.window.webContents.send('w2glink', secret)
})
this.loginRPC()

View file

@ -71,7 +71,7 @@ function createWindow () {
mainWindow = null
try {
webtorrentWindow.webContents.postMessage('destroy', null)
} catch(e) {}
} catch (e) {}
app.quit()
})

View file

@ -305,13 +305,14 @@ export async function alRequest (opts) {
switch (opts.method) {
case 'SearchName': {
variables.search = opts.name
variables.isAdult = variables.isAdult ?? false
query = /* js */`
query($page: Int, $perPage: Int, $sort: [MediaSort], $search: String, $status: [MediaStatus], $year: Int){
query($page: Int, $perPage: Int, $sort: [MediaSort], $search: String, $status: [MediaStatus], $year: Int, $isAdult: Boolean){
Page(page: $page, perPage: $perPage){
pageInfo{
hasNextPage
},
media(type: ANIME, search: $search, sort: $sort, status_in: $status, isAdult: false, format_not: MUSIC, seasonYear: $year){
media(type: ANIME, search: $search, sort: $sort, status_in: $status, isAdult: $isAdult, format_not: MUSIC, seasonYear: $year){
${queryObjects}
}
}

View file

@ -212,6 +212,11 @@ async function resolveTitle (parseObject) {
media = (await alSearch(method)).data.Page.media[0]
}
}
// check adult
if (!media) {
method.isAdult = true
media = (await alSearch(method)).data.Page.media[0]
}
} catch (e) { }
if (media) relations[getRelationKey(parseObject)] = media

View file

@ -3,32 +3,38 @@
import { click } from '@/modules/click.js'
import { getEpisodeNumberByAirDate } from '@/modules/providers/tosho.js'
import { alRequest } from '@/modules/anilist'
import { media } from '../Player/MediaHandler.svelte'
export let id
export let media
const id = media.id
const duration = media.duration
export let episodeCount
export let userProgress = 0
export let duration
export let play
const episodeList = Array.from({ length: episodeCount }, (_, i) => ({ episode: i + 1 }))
const episodeList = Array.from({ length: episodeCount }, (_, i) => ({
episode: i + 1, image: null, summary: null, rating: null, title: null, length: null, airdate: null, airingAt: null
}))
async function load () {
const episodesPromise = alRequest({ method: 'Episodes', id })
const res = await fetch('https://api.ani.zip/mappings?anilist_id=' + id)
const { episodes, specialCount, episodeCount } = await res.json()
const settled = (await episodesPromise).data.Page?.airingSchedules
const alEpisodes = settled?.length ? settled : episodeList
let alEpisodes = episodeList
if (!(media.episodes && media.episodes === episodeCount && media.status === 'FINISHED')) {
const settled = (await alRequest({ method: 'Episodes', id })).data.Page?.airingSchedules
if (settled?.length) alEpisodes = settled
}
for (const { episode, airingAt } of alEpisodes) {
const alDate = new Date((airingAt || 0) * 1000)
const needsValidation = !(!specialCount || (media.episodes && media.episodes === episodeCount && episodes[Number(episode)]))
const { image, summary, rating, title, length, airdate } = needsValidation ? getEpisodeNumberByAirDate(alDate, episodes, episode) : (episodes[Number(episode)] || {})
episodeList[episode - 1] = { episode, image, summary, rating, title, length: length || duration, airdate: +alDate || airdate }
episodeList[episode - 1] = { episode, image, summary, rating, title, length: length || duration, airdate: +alDate || airdate, airingAt: +alDate || airdate }
}
}
load()

View file

@ -170,7 +170,7 @@
</ToggleList>
</div>
<div class='col-5 d-flex flex-column pl-20'>
<EpisodeList id={media.id} userProgress={media.mediaListEntry && media.mediaListEntry.status === 'CURRENT' && media.mediaListEntry.progress} episodeCount={getMediaMaxEp(media)} duration={media.duration} {play} />
<EpisodeList {media} userProgress={media.mediaListEntry && media.mediaListEntry.status === 'CURRENT' && media.mediaListEntry.progress} episodeCount={getMediaMaxEp(media)} {play} />
</div>
</div>
</div>