97 lines
3.8 KiB
JavaScript
Executable File
97 lines
3.8 KiB
JavaScript
Executable File
const express = require("express");
|
|
const app = express();
|
|
const path = require("path");
|
|
const user = require("./routes/user");
|
|
const admin = require("./routes/admin");
|
|
const info = require("./routes/info");
|
|
const files = require("./routes/files");
|
|
const shopping = require("./routes/shopping");
|
|
const pwman = require("./routes/pwman");
|
|
const remotecontrol = require("./routes/remotecontrol")
|
|
const { stat } = require("fs");
|
|
app.use(express.json())
|
|
app.use((req, res, next) => {
|
|
res.header("Access-Control-Allow-Origin", "*");
|
|
res.header("Access-Control-Allow-Headers", "*");
|
|
if (req.method === "OPTIONS") {
|
|
res.header("Access-Control-Allow-Methods", "PUT, POST, PATCH, DELETE, GET");
|
|
return res.status(200).json({});
|
|
}
|
|
next();
|
|
})
|
|
app.use("/user", user)
|
|
app.use("/admin", admin)
|
|
app.use("/info", info)
|
|
app.use("/files", files)
|
|
app.use("/shopping", shopping)
|
|
app.use("/pwman", pwman)
|
|
app.use("/remotecontrol", remotecontrol)
|
|
app.use("/", (req, res) => {
|
|
if(req.headers["user-agent"]&&req.headers["user-agent"].match(/SMART\-TV/)){
|
|
res.write("<html>")
|
|
require("./routes/sourceslist").getSources(`${req.query.devicename||req.socket.remoteAddress}`).forEach((line, index)=>{
|
|
console.log(line)
|
|
res.write(`<button id="btn${index}" style="color: red; padding: 10px; margin: 10px; border-radius: 7px; font-size: 30px" >play/pause ${line.split("%2f")[line.split("%2f").length-1].split("?")[0]}</button>
|
|
<div id="zone${index}" ></div>
|
|
<script>
|
|
let playing${index} = false;
|
|
let loaded${index} = false;
|
|
let loading${index} = false;
|
|
document.getElementById("btn${index}").addEventListener("click", ()=>{
|
|
let video = document.getElementById("vid${index}")
|
|
console.log(video, loaded${index})
|
|
const div = document.getElementById("zone${index}");
|
|
if(!loaded${index}&&!loading${index}){
|
|
document.getElementById("btn${index}").setAttribute("style", document.getElementById("btn${index}").getAttribute("style").replace("color: red", "color: yellow"));
|
|
loading${index} = true;
|
|
video = document.createElement("video");
|
|
video.setAttribute("width", "100%");
|
|
video.setAttribute("id", "vid${index}")
|
|
video.innerHTML=\`<source src="${line.replace("./", "")}" type="video/mp4">\`
|
|
video.setAttribute("controls", true)
|
|
video.addEventListener("loadeddata", ()=>{
|
|
div.append(video);
|
|
loaded${index}=true;
|
|
document.getElementById("btn${index}").setAttribute("style", document.getElementById("btn${index}").getAttribute("style").replace("color: yellow", "color: green"));
|
|
const hideBtn=document.createElement("button");
|
|
hideBtn.addEventListener("click", ()=>{
|
|
if(video.getAttribute("style")&&video.getAttribute("style").includes("display: none")){
|
|
video.setAttribute("style", video.getAttribute("style")?video.getAttribute("style").replace("; display: none", ""):"")
|
|
}else{
|
|
video.setAttribute("style", video.getAttribute("style")?"":video.getAttribute("style")+"; display: none");
|
|
}
|
|
})
|
|
hideBtn.setAttribute("style", "padding: 10px; margin: 10px; border-radius: 7px; font-size: 30px")
|
|
hideBtn.innerHTML="verstecken/zeigen";
|
|
div.append(hideBtn)
|
|
})
|
|
}else if (loaded${index}){
|
|
if(playing${index}){
|
|
video.pause()
|
|
playing${index}=false;
|
|
}else{
|
|
video.play();
|
|
playing${index}=true;
|
|
}
|
|
}
|
|
|
|
})</script> `)
|
|
})
|
|
res.write("</html>")
|
|
res.end()
|
|
}else{
|
|
stat(`./htdocs${req.url}`, (err, stat) => {
|
|
if (err || stat.isDirectory()) {
|
|
//console.log("no such file")
|
|
res.sendFile(path.resolve(`./htdocs/index.html`))
|
|
} else {
|
|
//console.log("found file")
|
|
res.sendFile(path.resolve(`./htdocs${req.url}`))
|
|
}
|
|
})
|
|
}
|
|
|
|
})
|
|
|
|
module.exports = app
|