mirror of
https://github.com/NoCrypt/migu.git
synced 2026-04-20 16:12:31 +00:00
UI: add tag on cards which failed parsing, add times to schedule, add feedback on no audio, detect codec support
This commit is contained in:
parent
c6e7a84dbb
commit
c723415b1a
5 changed files with 44 additions and 7 deletions
|
|
@ -86,6 +86,18 @@
|
|||
|
||||
let fileMedia = null
|
||||
|
||||
const exclusions = ['DTS']
|
||||
|
||||
const video = document.createElement('video')
|
||||
|
||||
if (!video.canPlayType('video/mp4; codecs="hvc1.1.L0.0"')) {
|
||||
exclusions.push('HEVC', 'x265', 'H.265')
|
||||
}
|
||||
if (!video.canPlayType('audio/mp4; codecs="ac-3"')) {
|
||||
exclusions.push('AC3', 'AC-3')
|
||||
}
|
||||
video.remove()
|
||||
|
||||
async function getRSSEntries({ media, episode, mode }) {
|
||||
// mode cuts down on the amt of queries made
|
||||
const titles = createTitle(media).join(')|(')
|
||||
|
|
@ -107,10 +119,12 @@
|
|||
}
|
||||
}
|
||||
|
||||
const excl = ['DTS', 'AC3', 'AC-3', 'HEVC', 'x265', 'H.265'].join('|')
|
||||
const excl = exclusions.join('|')
|
||||
const quality = `"${settings.rssQuality}"` || '"1080p"'
|
||||
const trusted = settings.rssTrusted === true ? 2 : 0
|
||||
const url = new URL(`https://${media.isAdult ? 'sukebei.nyaa.si/?page=rss&c=1_1' : 'nyaa.si/?page=rss&c=1_2'}&f=${trusted}&s=seeders&o=desc&q=(${titles})${ep}${quality}-(${excl})`)
|
||||
const url = new URL(
|
||||
`https://${media.isAdult ? 'sukebei.nyaa.si/?page=rss&c=1_1' : 'nyaa.si/?page=rss&c=1_2'}&f=${trusted}&s=seeders&o=desc&q=(${titles})${ep}${quality}-(${excl})`
|
||||
)
|
||||
|
||||
let nodes = [...(await getRSSContent(url)).querySelectorAll('item')]
|
||||
if (absolute && !settings.rssBatch) {
|
||||
|
|
@ -118,7 +132,9 @@
|
|||
|
||||
const ep = `"+${episodes[1] > 9 ? episodes[1] : `0${episodes[1]}`}+"|"+${episodes[1] > 9 ? episodes[1] : `0${episodes[1]}`}v"`
|
||||
|
||||
const url = new URL(`https://${media.isAdult ? 'sukebei.nyaa.si/?page=rss&c=1_1' : 'nyaa.si/?page=rss&c=1_2'}&f=${trusted}&s=seeders&o=desc&q=(${titles})${ep}${quality}-(${excl})`)
|
||||
const url = new URL(
|
||||
`https://${media.isAdult ? 'sukebei.nyaa.si/?page=rss&c=1_1' : 'nyaa.si/?page=rss&c=1_2'}&f=${trusted}&s=seeders&o=desc&q=(${titles})${ep}${quality}-(${excl})`
|
||||
)
|
||||
nodes = [...nodes, ...(await getRSSContent(url)).querySelectorAll('item')]
|
||||
}
|
||||
if (!nodes?.length) return null
|
||||
|
|
|
|||
|
|
@ -65,6 +65,7 @@
|
|||
import Subtitles from '@/modules/subtitles.js'
|
||||
import { toTS, videoRx, fastPrettyBytes } from '@/modules/util.js'
|
||||
import Keyboard from './Keyboard.svelte'
|
||||
import { addToast } from '../Toasts.svelte'
|
||||
|
||||
import { w2gEmitter } from './watchtogether/WatchTogether.svelte'
|
||||
|
||||
|
|
@ -118,6 +119,16 @@
|
|||
let volume = localStorage.getItem('volume') || 1
|
||||
let playbackRate = 1
|
||||
$: localStorage.setItem('volume', volume || 0)
|
||||
|
||||
function checkAudio() {
|
||||
if ('audioTracks' in HTMLVideoElement.prototype && !video.audioTracks.length) {
|
||||
addToast({
|
||||
text: "This torrent's audio codec is not supported, try a different release by disabling Autoplay Torrents in RSS settings.",
|
||||
title: 'Audio Codec Unsupported',
|
||||
type: 'danger'
|
||||
})
|
||||
}
|
||||
}
|
||||
function getFPS() {
|
||||
video.fps = new Promise(resolve => {
|
||||
let lastmeta = null
|
||||
|
|
@ -823,10 +834,10 @@
|
|||
on:canplay={hideBuffering}
|
||||
on:playing={hideBuffering}
|
||||
on:ended={tryPlayNext}
|
||||
on:loadedmetadata={hideBuffering}
|
||||
on:loadedmetadata={getFPS}
|
||||
on:loadedmetadata={initThumbnails}
|
||||
on:loadedmetadata={autoPlay}
|
||||
on:loadedmetadata={checkAudio}
|
||||
on:leavepictureinpicture={() => (pip = false)} />
|
||||
{#if stats}
|
||||
<div class="position-absolute top-0 bg-tp p-10 m-15 text-monospace rounded z-50">
|
||||
|
|
|
|||
|
|
@ -44,7 +44,12 @@
|
|||
</div>
|
||||
<div class="col-8 h-full card-grid">
|
||||
<div class="px-15 py-10 bg-very-dark">
|
||||
<h5 class="m-0 text-capitalize font-weight-bold">{[card.media.title.userPreferred, card.episodeNumber].filter(s => s).join(' - ')}</h5>
|
||||
<h5 class="m-0 text-capitalize font-weight-bold">
|
||||
{#if card.failed}
|
||||
<span class="badge badge-secondary">Uncertain</span>
|
||||
{/if}
|
||||
{[card.media.title.userPreferred, card.episodeNumber].filter(s => s).join(' - ')}
|
||||
</h5>
|
||||
{#if card.schedule && card.media.nextAiringEpisode}
|
||||
<span class="text-muted font-weight-bold">
|
||||
{'EP ' + card.media.nextAiringEpisode.episode + ' in ' + countdown(card.media.nextAiringEpisode.timeUntilAiring)}
|
||||
|
|
|
|||
|
|
@ -186,6 +186,7 @@
|
|||
lastDate = new Date(+date + entry.timeUntilAiring * 1000)
|
||||
media.push(lastDate.toLocaleDateString('en-US', { weekday: 'long' }))
|
||||
}
|
||||
entry.schedule = true
|
||||
media.push(entry)
|
||||
}
|
||||
return media
|
||||
|
|
|
|||
|
|
@ -149,6 +149,7 @@ export async function resolveFileMedia (opts) {
|
|||
}
|
||||
const fileMedias = []
|
||||
for (const praseObj of parseObjs) {
|
||||
let failed = false
|
||||
let episode
|
||||
let media = assoc[relations[praseObj.anime_title]]
|
||||
// resolve episode, if movie, dont.
|
||||
|
|
@ -173,6 +174,7 @@ export async function resolveFileMedia (opts) {
|
|||
media = result.rootMedia
|
||||
const diff = praseObj.episode_number[1] - result.episode
|
||||
episode = `${praseObj.episode_number[0] - diff} ~ ${result.episode}`
|
||||
failed = result.failed
|
||||
} else {
|
||||
// cant find ep count or range seems fine
|
||||
episode = `${Number(praseObj.episode_number[0])} ~ ${Number(praseObj.episode_number[1])}`
|
||||
|
|
@ -188,6 +190,7 @@ export async function resolveFileMedia (opts) {
|
|||
const result = await resolveSeason({ media: root || media, episode: parseInt(praseObj.episode_number) })
|
||||
media = result.rootMedia
|
||||
episode = result.episode
|
||||
failed = result.failed
|
||||
} else {
|
||||
// cant find ep count or episode seems fine
|
||||
episode = Number(praseObj.episode_number)
|
||||
|
|
@ -203,7 +206,8 @@ export async function resolveFileMedia (opts) {
|
|||
mediaCover: media?.coverImage.medium,
|
||||
name: 'Miru',
|
||||
parseObject: praseObj,
|
||||
media: media
|
||||
media: media,
|
||||
failed
|
||||
})
|
||||
}
|
||||
return fileMedias.length === 1 ? fileMedias[0] : fileMedias
|
||||
|
|
@ -236,7 +240,7 @@ export async function resolveSeason (opts) {
|
|||
increment = increment ?? !prequel
|
||||
|
||||
if (!edge) {
|
||||
const obj = { media, episode: episode - offset, offset, increment, rootMedia }
|
||||
const obj = { media, episode: episode - offset, offset, increment, rootMedia, failed: true }
|
||||
if (!force) {
|
||||
console.warn('Error in parsing!', obj)
|
||||
addToast({
|
||||
|
|
|
|||
Loading…
Reference in a new issue