this doesnt work because their API is shit :)

This commit is contained in:
ThaUnknown 2020-10-20 08:30:42 +02:00
parent 70d178999f
commit 2de4a9ffb3
5 changed files with 86 additions and 74 deletions

View file

@ -142,7 +142,7 @@ async function searchAnime(a) {
try {
alResponse.data.Page.media.forEach(media => {
let template = cardCreator(media)
template.onclick = function () {
template.onclick = () => {
viewAnime(media)
}
frag.appendChild(template)
@ -179,7 +179,7 @@ function viewAnime(media) {
document.querySelector(".view .title").textContent = media.title.english || media.title.romaji
document.querySelector(".view .desc").innerHTML = media.description || ""
document.querySelector(".view .details").innerHTML = ""
document.querySelector(".view #play").onclick = function () { nyaaSearch(media, document.querySelector(".view #ep").value); halfmoon.toggleModal("view") }
document.querySelector(".view #play").onclick = () => { nyaaSearch(media, document.querySelector(".view #ep").value); halfmoon.toggleModal("view") }
detailsCreator(media)
document.querySelector(".view #ep").value = 1
document.querySelector(".view #ep").max = media.episodes || 999
@ -254,11 +254,8 @@ function cardCreator(media, regexParse) {
}
let skeletonCard = cardCreator()
const DOMPARSER = new DOMParser().parseFromString.bind(new DOMParser())
var selected;
async function nyaaSearch(media, episode) {
if (parseInt(episode) < 10) {
episode = `0${episode}`
@ -287,7 +284,7 @@ async function nyaaSearch(media, episode) {
table.textContent = ""
table.appendChild(results)
halfmoon.toggleModal("tsearch")
selected = [media, parseInt(episode)]
playerData.selected = [media, parseInt(episode)]
}
}
@ -352,8 +349,8 @@ async function hsRss(url) {
}
let media = store[regexParse[2]],
template = cardCreator(media, regexParse)
template.onclick = function () {
selected = [regexParse[2], regexParse[4]]
template.onclick = () => {
playerData.selected = [regexParse[2], regexParse[4]]
addTorrent(i('link').textContent)
}
frag.appendChild(template)
@ -366,7 +363,7 @@ async function hsRss(url) {
})
}
}
refRel.onclick = function () {
refRel.onclick = () => {
hsRss(`https://subsplease.org/rss/?r=${settings.torrent1}`)
}
setInterval(() => {

View file

@ -1,9 +1,14 @@
const controls = document.getElementsByClassName('ctrl')
for (let item of controls) {
item.addEventListener("click", function () {
let func = this.dataset.name;
window[func]()
})
}
// event listeners
volume.addEventListener("input", function () {
updateVolume()
});
volume.addEventListener("input", ()=> updateVolume());
progress.addEventListener("input", dragBar);
progress.addEventListener("mouseup", dragBarEnd);
progress.addEventListener("touchend", dragBarEnd);
@ -13,19 +18,8 @@ ptoggle.addEventListener("click", btnpp);
ptoggle.addEventListener("dblclick", btnfull);
player.addEventListener("fullscreenchange", updateFullscreen)
for (let item of controls) {
item.addEventListener("click", function () {
let func = this.dataset.name;
window[func]()
})
}
let playerData = {
tracks: [],
headers: undefined,
subtitles: [],
subtitleStream: undefined,
octopusInstance: undefined,
nowPlaying: undefined
octopusInstance: undefined
}
function resetVideo() {
@ -33,10 +27,13 @@ function resetVideo() {
playerData = {
tracks: [],
headers: undefined,
styles: undefined,
subtitles: [],
subtitleStream: undefined,
octopusInstance: undefined,
nowPlaying: undefined
nowPlaying: undefined,
selected: undefined,
thumbnails: []
}
video.pause()
video.src = "";
@ -81,7 +78,7 @@ function updateDisplay() {
function dragBar() {
video.pause()
updateBar(progress.value / 10)
let bg = thumbnails[Math.floor(currentTime / 5)]
let bg = playerData.thumbnails[Math.floor(currentTime / 5)]
thumb.src = bg || " "
}
@ -109,18 +106,14 @@ function updateBar(progressPercent) {
}
// dynamic thumbnails
let thumbnails = []
let ratio
let canvas = document.createElement("canvas")
let context = canvas.getContext('2d')
let w = 150, h
let h
function initThumbnail() {
if (settings.player5) {
thumbnails = []
ratio = video.videoWidth / video.videoHeight;
h = parseInt(w / ratio)
canvas.width = w;
h = parseInt(150 / (video.videoWidth / video.videoHeight))
canvas.width = 150;
canvas.height = h;
thumb.style.setProperty("--height", h + "px");
}
@ -129,10 +122,10 @@ function initThumbnail() {
function createThumbnail(vid) {
if (settings.player5) {
let index = Math.floor(vid.currentTime / 5)
if (!thumbnails[index] && h) {
context.fillRect(0, 0, w, h);
context.drawImage(vid, 0, 0, w, h);
thumbnails[index] = canvas.toDataURL("image/jpeg")
if (!playerData.thumbnails[index] && h) {
context.fillRect(0, 0, 150, h);
context.drawImage(vid, 0, 0, 150, h);
playerData.thumbnails[index] = canvas.toDataURL("image/jpeg")
}
}
}
@ -140,7 +133,7 @@ function createThumbnail(vid) {
function finishThumbnails(file) {
if (settings.player5) {
let thumbVid = document.createElement("video")
thumbnails = []
playerData.thumbnails = []
file.getBlobURL((err, url) => {
thumbVid.src = url
})
@ -206,8 +199,6 @@ function resetTimer() {
immerseTime = setTimeout(immersePlayer, parseInt(settings.player2) * 1000)
}
let islooped;
function toTS(sec) {
if (Number.isNaN(sec) || sec < 0) {
return "00:00";
@ -270,9 +261,9 @@ function btnmute() {
}
}
let level
function updateVolume(a) {
let level
if (a == null) {
level = volume.value;
} else {
@ -331,7 +322,7 @@ function btncap() {
off = document.createElement("a")
off.classList.add("dropdown-item", "pointer", "text-white")
off.innerHTML = "OFF"
off.onclick = function () {
off.onclick = () => {
selectLang("OFF")
}
frag.appendChild(off)
@ -347,7 +338,7 @@ function btncap() {
} else {
template.classList.add("text-muted")
}
template.onclick = function () {
template.onclick = () => {
selectLang(track.language)
}
frag.appendChild(template)
@ -371,7 +362,7 @@ function selectLang(lang) {
// keybinds
document.onkeydown = function (a) {
document.onkeydown = (a) => {
if (document.location.href.endsWith("#player")) {
switch (a.key) {
case " ":
@ -404,6 +395,12 @@ document.onkeydown = function (a) {
case "ArrowRight":
seek(parseInt(settings.player3));
break;
case "ArrowUp":
updateVolume(parseInt(volume.value)+5)
break;
case "ArrowDown":
updateVolume(parseInt(volume.value)-5)
break;
}
}
}
@ -441,10 +438,10 @@ function updatePositionState() {
if ('mediaSession' in navigator) {
navigator.mediaSession.setActionHandler('play', btnpp);
navigator.mediaSession.setActionHandler('pause', btnpp);
navigator.mediaSession.setActionHandler('seekbackward', function () {
navigator.mediaSession.setActionHandler('seekbackward', () => {
seek(-parseInt(settings.player3));
});
navigator.mediaSession.setActionHandler('seekforward', function () {
navigator.mediaSession.setActionHandler('seekforward', () => {
seek(parseInt(settings.player3));
});
navigator.mediaSession.setActionHandler('nexttrack', btnnext);

View file

@ -12,8 +12,19 @@ function subStream(stream) {
if (!playerData.headers) {
playerData.headers = []
}
if (!playerData.octopusInstance) {
let dummyEvent = "Comment: 0,0:00:00.00,0:00:00.01,Default,,0000,0000,0000,,."
let options = {
video: video,
subContent: track.header.slice(0, -1) + dummyEvent,
fonts: ["https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmEU9fBBc4.woff2"],
workerUrl: 'js/subtitles-octopus-worker.js'
// lossyRender: 'true'
};
playerData.octopusInstance = new SubtitlesOctopus(options);
playerData.octopusInstance.getStyles()
}
playerData.headers[track.number] = track.header
playerData.subtitles[track.number] = []
} else {
playerData.tracks[track.number] = video.addTextTrack('captions', track.type, track.language);
let spacerCue = new VTTCue(0.1, 9999, "&nbsp;")
@ -27,11 +38,29 @@ function subStream(stream) {
})
}
playerData.subtitleStream.on('subtitle', function (subtitle, trackNumber) {
let formatSub = "Dialogue: " + subtitle.layer + "," + new Date(subtitle.time).toISOString().slice(12, -1).slice(0,-1) + "," + new Date(subtitle.time + subtitle.duration).toISOString().slice(12, -1).slice(0,-1) + "," + subtitle.style + "," + subtitle.name + "," + subtitle.marginL + "," + subtitle.marginR + "," + subtitle.marginV + "," + subtitle.effect + "," + subtitle.text
if (playerData.headers) {
if (!playerData.subtitles[trackNumber].includes(formatSub)) {
playerData.subtitles[trackNumber].push(formatSub)
renderSubs.call(null, 3)
let formatSub = {
Start: subtitle.time,
Duration: subtitle.duration,
ReadOrder: playerData.subtitles.length,
Layer: parseInt(subtitle.layer),
Style: playerData.styles.findIndex(style => style.Name == subtitle.style)+1 || 1,
Name: subtitle.name || " ",
MarginL: parseInt(subtitle.marginL),
MarginR: parseInt(subtitle.marginR),
MarginV: parseInt(subtitle.marginV),
Effect: subtitle.effect || " ",
Text: subtitle.text
}
if (!playerData.subtitles.includes(formatSub, 0)) {
console.log(formatSub)
console.log("pushing")
playerData.octopusInstance.getEvents()
playerData.subtitles.push(formatSub)
playerData.octopusInstance.createEvent(formatSub)
// setHeader.call(null, 3)
} else {
console.log("no")
}
} else {
if (!Object.values(playerData.tracks[trackNumber].cues).some(c => c.text == subtitle.text && c.startTime == subtitle.time / 1000 && c.endTime == (subtitle.time + subtitle.duration) / 1000)) {
@ -43,17 +72,7 @@ function subStream(stream) {
stream.pipe(playerData.subtitleStream)
}
}
function renderSubs(trackNumber) {
let trackContent = playerData.headers[trackNumber].slice(0,-1)+playerData.subtitles[trackNumber].join("\n")
if (!playerData.octopusInstance) {
let options = {
video: video,
subContent: trackContent,
fonts: ["https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmEU9fBBc4.woff2"],
workerUrl: 'js/subtitles-octopus-worker.js'
};
playerData.octopusInstance = new SubtitlesOctopus(options);
} else {
playerData.octopusInstance.setTrack(trackContent)
}
function setHeader(trackNumber) {
let trackContent = playerData.headers[trackNumber].slice(0, -1)
playerData.octopusInstance.setTrack(trackContent)
}

View file

@ -9,7 +9,6 @@ var SubtitlesOctopus = function (options) {
}
} catch (e) {
}
console.log("WebAssembly support detected: " + (supportsWebAssembly ? "yes" : "no"));
var self = this;
self.canvas = options.canvas; // HTML canvas element (optional if video specified)
@ -36,7 +35,7 @@ var SubtitlesOctopus = function (options) {
self.hasAlphaBug = false;
(function() {
(function () {
if (typeof ImageData.prototype.constructor === 'function') {
try {
// try actually calling ImageData, as on some browsers it's reported
@ -384,8 +383,8 @@ var SubtitlesOctopus = function (options) {
break;
}
case 'get-styles': {
console.log(data.target);
console.log(data.styles);
playerData.styles = data.styles
break;
}
default:
@ -414,10 +413,10 @@ var SubtitlesOctopus = function (options) {
if (
self.canvas.width != width ||
self.canvas.height != height ||
self.canvas.style.top != top ||
self.canvas.style.left != left
self.canvas.width != width ||
self.canvas.height != height ||
self.canvas.style.top != top ||
self.canvas.style.left != left
) {
self.canvas.width = width;
self.canvas.height = height;

View file

@ -59,10 +59,10 @@ async function addTorrent(magnet) {
halfmoon.hideModal("tsearch")
document.location.href = "#player"
resetVideo()
selected ? selPlaying(selected) : ""
playerData.selected ? selPlaying(playerData.selected) : ""
await sw
client.add(magnet, function (torrent) {
torrent.on('noPeers', function () {
torrent.on('noPeers', () => {
if (client.torrents[0].progress != 1) {
halfmoon.initStickyAlert({
content: `Couldn't find peers for <span class="text-break">${torrent.infoHash}</span>! Try a torrent with more seeders.`,
@ -78,7 +78,7 @@ async function addTorrent(magnet) {
videoFile = file
}
})
torrent.on('done', function () {
torrent.on('done', () => {
halfmoon.initStickyAlert({
content: `<span class="text-break">${torrent.infoHash}</span> has finished downloading. Now seeding.`,
title: "Download Complete",