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:
ThaUnknown 2022-05-02 19:44:02 +02:00
parent c6e7a84dbb
commit c723415b1a
5 changed files with 44 additions and 7 deletions

View file

@ -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

View file

@ -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">

View file

@ -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)}

View file

@ -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

View file

@ -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({