raspi-back/app/app.js

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