orchard/resources/lyrics/youtube.html
2021-11-19 17:02:28 -06:00

121 lines
No EOL
5.5 KiB
HTML

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Lyrics</title>
<script type="text/javascript" src="../js/lyrics.js"></script>
<link rel="stylesheet" href="../css/lyricer.css">
<link href="https://fonts.googleapis.com/css?family=M+PLUS+1p" rel="stylesheet">
</head>
<body style="margin: 0;">
<img style="" id="backgroundImage" alt="Background Image"></img>
<div style="width: 100%; height: 100%; opacity: 0.8; z-index: 1; background-color: rgba(0, 0, 0, 0.5); position: absolute;"></div>
<div id="lyricer">
</div>
<script type="text/javascript">
const { ipcRenderer } = require('electron');
const yt = require('youtube-search-without-api-key');
var text = "";
var lrcfile = "";
var lrc = new Lyricer();
var prevartist = '';
var prevtrack = '';
var prevlyrics = ['','','','','']; //track, artist, songid, lyrics, translated lyrics
var globaltoken = '';
function revisedRandId() {
return Math.random().toString(36).replace(/[^a-z]+/g, '').substr(2, 10);
}
async function getYTSubs(track, artist, lang) {
console.log(decodeURIComponent(track) +" "+ decodeURIComponent(artist) + " official video");
const videos = await yt.search(decodeURIComponent(track) +" "+ decodeURIComponent(artist) + " official video");
try{
if (videos != null & videos.length > 0){
var id = videos[0]['id']['videoId'];
getYTTrans(id,lang);
}
}catch(e){}
}
function getYTTrans(id, lang){
if (lang != "disabled" && id != ''){
var url2 = `http://video.google.com/timedtext?lang=${lang}&v=${id}`;
var req2 = new XMLHttpRequest();
req2.open('GET', url2, true);
req2.onload = function() {
const ttmlLyrics = this.responseText;
let lyrics = "";
const parser = new DOMParser();
const doc = parser.parseFromString(ttmlLyrics, "text/xml");
const lyricsLines = doc.getElementsByTagName('text');
const endTime = [0];
try {
for (let element of lyricsLines) {
rawTime = element.getAttribute('start').match(/(\d+:)?(\d+:)?(\d+)(\.\d+)?/);
hours = (rawTime[2] != null) ? (rawTime[1].replace(":", "")) : "0";
minutes = (rawTime[2] != null) ? (hours * 60 + rawTime[2].replace(":", "") * 1 + ":") : ((rawTime[1] != null) ? rawTime[1] : "00:");
seconds = (rawTime[3] != null) ? (rawTime[3]) : "00";
milliseconds = (rawTime[4] != null) ? (rawTime[4]) : ".000";
lrcTime = minutes + seconds + milliseconds;
const rawTime2 = element.getAttribute('dur').match(/(\d+:)?(\d+:)?(\d+)(\.\d+)?/);
const hours2 = (rawTime2[2] != null) ? (rawTime2[1].replace(":", "")) : "0";
const minutes2 = (rawTime2[2] != null) ? (hours2 * 60 + rawTime2[2].replace(":", "") * 1 + ":") : ((rawTime2[1] != null) ? rawTime2[1] : "00:");
const seconds2 = (rawTime2[3] != null) ? (rawTime2[3]) : "00";
const milliseconds2 = (rawTime2[4] != null) ? (rawTime2[4]) : ".000";
const lrcTime2 = minutes2 + seconds2 + milliseconds2;
if (minutes.replace(":", "") * 60 + seconds * 1 - endTime[endTime.length - 1] > 10) {
const time = endTime[endTime.length - 1];
const minutes = Math.floor(time / 60);
const secs = time - minutes * 60;
lyrics = lyrics.concat(`[${minutes}:${secs}]lrcInstrumental` + "\r\n");
}
endTime.push(minutes.replace(":", "") * 60 + minutes2.replace(":", "") * 60 + seconds2 * 1 + seconds * 1);
lyrics = lyrics.concat(`[${lrcTime}]${element.textContent}` + "\r\n");
}
if (lyrics != ""){
console.log(lyrics);
ipcRenderer.send('LyricsHandlerNE',lyrics);
}
} catch(e) {
lyrics = "";
for (let element of lyricsLines) {
rawTime = element.getAttribute('begin').match(/(\d+:)?(\d+:)?(\d+)(\.\d+)?/);
hours = (rawTime[2] != null) ? (rawTime[1].replace(":", "")) : "0";
minutes = (rawTime[2] != null) ? (hours * 60 + rawTime[2].replace(":", "") * 1 + ":") : ((rawTime[1] != null) ? rawTime[1] : "00:");
seconds = (rawTime[3] != null) ? (rawTime[3]) : "00";
milliseconds = (rawTime[4] != null) ? (rawTime[4]) : ".000";
lrcTime = minutes + seconds + milliseconds;
lyrics = lyrics.concat(`[${lrcTime}]${element.textContent}` + "\r\n");
}
if (lyrics != ""){
console.log(lyrics);
ipcRenderer.send('LyricsHandlerNE',lyrics);
}
}
if (lyrics == ""){
ipcRenderer.send('LyricsYTFailed',"");
console.log('yt no found')
}
// window.close();
}
req2.send();
}
}
ipcRenderer.on('ytcors', function (event, track, artist, lang) {
console.log("hello");
if (track != "" && track != "No Title Found"){
console.log("we good");
getYTSubs(track, artist, lang)
}
});
lrc.setLrc(text);
</script>
</body>
</html>