mirror of
https://github.com/ThaUnknown/miru.git
synced 2026-08-20 02:46:00 +00:00
this doesnt work because their API is shit :)
This commit is contained in:
parent
70d178999f
commit
2de4a9ffb3
5 changed files with 86 additions and 74 deletions
|
|
@ -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(() => {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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, " ")
|
||||
|
|
@ -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)
|
||||
}
|
||||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
Loading…
Reference in a new issue