Swift Media Player
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

607 lines
16 KiB

// pm2 restart kplayer
// /srv/samba/daten/node
var express = require('express');
var fs = require("fs");
var path = require("path");
const { exec, execSync} = require('child_process');
const bodyParser= require('body-parser')
const multer = require('multer');
var app = express();
app.use(bodyParser.urlencoded({extended: true}))
app.get('/', function(req, res) {
res.json({ message: 'WELCOME' });
});
function isVideoFolder(address) {
return getFiles(address).filter(dirent => dirent.name.endsWith(".mp4")).length > 0
}
function hasPics(address) {
return getFiles(address).filter(dirent => dirent.name.endsWith(".jpg")).length > 0
}
function getFiles(address) {
try {
return fs.readdirSync(address, {withFileTypes: true})
}
catch {
return []
}
// .filter(dirent => dirent.isDirectory())
// .map(dirent => dirent.name);
}
app.get('/listfiles/*', function (req, res) {
var address = decodeURIComponent(req.path.substr(10))
console.log("listdirs " + address);
if (!req.path.startsWith("/listfiles/srv/samba/ren/")) {
res.end("Access denied")
return
}
var result = [];
try {
var files = getFiles(address)
files.forEach(function(file){
var filename = path.resolve(address, file.name)
console.log(filename)
result.push(filename)
})
}
catch {
}
res.end(JSON.stringify(result))
})
app.get('/listdirs/*', function (req, res) {
var address = req.path.substr(9)
console.log("listdirs " + address);
if (!req.path.startsWith("/listdirs/srv/samba/ren/")) {
res.end("Access denied")
return
}
var files = getFiles(address)
var leaf = true
var result = [];
files.forEach(function(file){
var filename = file.name
var filetype = "folder"
var pics = false
if ((file.isDirectory() || file.isSymbolicLink()) && !filename.startsWith(".")) {
var folders = getFiles(address + "/" + filename)
if (folders.filter(dirent => dirent.name.endsWith(".mp4")).length > 0) {
filetype = "video"
}
else if (folders.filter(dirent => dirent.name.endsWith(".html")).length > 0) {
filetype = "web"
}
// else if (folders.filter(dirent => dirent.name.endsWith(".jpg")).length > 0) {
else {
folders.forEach(function (f) {
if (f.isDirectory()) {
if (hasPics(address + "/" + filename + "/" + f.name)) {
filetype = "pictures"
}
}
})
}
console.log(filename)
result.push([filename, filetype])
}
})
res.end(JSON.stringify(result))
})
app.get('/listpicdirs/*', function (req, res) {
var address = req.path.substr(12)
console.log("listdirs " + address);
if (!req.path.startsWith("/listpicdirs/srv/samba/ren/")) {
res.end("Access denied")
return
}
var files = getFiles(address)
var result = [];
files.forEach(function(file){
var filename = file.name
var filetype = "folder"
var pics = false
if ((file.isDirectory() || file.isSymbolicLink()) && !filename.startsWith(".")) {
var folders = getFiles(address + "/" + filename)
var hasFav = true
folders.forEach(function (f) {
if (hasFav && f.name.toLowerCase().endsWith(".jpg")) {
var p = address + "/" + filename
p = p.replace("/srv/samba/ren", "/srv/samba/ren/favpic")
var fav = getFiles(p)
fav.forEach(function (g) {
result.push(address + "/" + filename + "/" + g.name)
console.log("f--" + g.name)
hasFav = false
})
if (hasFav) {
console.log("--" + f.name)
var n = address + "/" + filename + "/" + f.name
var r = n.replace("/srv/samba/ren", "/srv/samba/ren/thumbs")
if (fs.existsSync(r)) {
n = r
}
result.push(n)
hasFav = false
}
}
})
console.log(filename)
}
})
res.end(JSON.stringify(result))
})
app.get('/listvideos/*', function (req, res) {
var address = decodeURIComponent(req.path.substr(11))
console.log("listdirs " + address);
if (!req.path.startsWith("/listvideos/srv/samba/ren/")) {
res.end("Access denied")
return
}
var result = [];
try {
var files = getFiles(address)
files.forEach(function(file){
var filename = path.resolve(address, file.name)
console.log(filename)
if (filename.endsWith(".mp4"))
result.push(filename)
if (filename.endsWith(".m4v"))
result.push(filename)
})
}
catch {
}
res.end(JSON.stringify(result))
})
/*
@RequestMapping (method = RequestMethod.GET, value = "/listpicdirs/**")
@ResponseBody List<String> listpicdirs(HttpServletRequest request, HttpServletResponse response) {
String address = (String) request.getAttribute(
HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE);
address = address["/service/listpicdirs".length()..-1]
String filter = null
if (address.indexOf("*") > 0) {
def param = address.split(Pattern.quote("*"))
address = param[0]
filter = param[1].toLowerCase()
println "filter !" + filter + "!"
}
println "listpicdirs " + address;
def b = []
new File(address).eachDirRecurse() { file ->
if (filter && !file.name.toLowerCase().contains(filter)) {
// ignore
}
else {
def f = file.list()
for (String fi : f) {
if (fi.toLowerCase().endsWith(".jpg")) {
boolean hasFav = false
def p = file.absolutePath
if (p.indexOf("/favpic/") < 0) {
p = p.replace("/srv/samba/ren", "/srv/samba/ren/favpic")
def l = new File(p).list()
for (i in l) {
b << file.absolutePath + "/" + i
hasFav = true
}
}
if (!hasFav) {
b << file.absolutePath + "/" + fi
}
break;
}
}
}
}
return b
}
@RequestMapping (method = RequestMethod.GET, value = "/listvideos/**")
@ResponseBody List<String> listvideos(HttpServletRequest request, HttpServletResponse response) {
String address = (String) request.getAttribute(
HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE);
address = address["/service/listvideos".length()..-1]
println "listvideos " + address;
String filter = null
if (address.indexOf("*") > 0) {
def param = address.split(Pattern.quote("*"))
address = param[0]
filter = param[1].toLowerCase()
println "filter !" + filter + "!"
}
def b = []
new File(address).eachFileRecurse() { file ->
if (filter && !file.name.toLowerCase().contains(filter)) {
// ignore
}
else {
if (!file.name.startsWith(".")) {
if (file.name.toLowerCase().endsWith("mp4")) b << file.absolutePath
if (file.name.toLowerCase().endsWith("m4v")) b << file.absolutePath
}
}
}
return b
}
* */
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'uploads')
},
filename: function (req, file, cb) {
cb(null, file.fieldname + '-' + Date.now())
}
})
var upload = multer({ storage: storage })
app.get('/alive', function (req, res) {
let date = new Date()
var d = date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds() + "\n"
console.log(d)
var p = '/mnt/archive/ren/kink_archiv/alive.txt'
fs.writeFileSync(p, d, { mode: 0o755 });
// fs.unlinkSync(p);
p = '/mnt/backup/ren/alive.txt'
fs.writeFileSync(p, d, { mode: 0o755 });
// fs.unlinkSync(p);
p = '/mnt/work/ren/exotic/alive.txt'
fs.writeFileSync(p, d, { mode: 0o755 });
// fs.unlinkSync(p);
res.send("ok")
})
app.get('/ffmpeg', function (req, res) {
var p = req.query.url
var n = "/srv/samba/ren/webdl" + req.query.name + ".mp4"
var cmd = 'ffmpeg -i "'+p+'" -codec copy "'+n+'"'
console.log(cmd)
exec(cmd, (err, stdout, stderr) => {
if (err) {
console.log(err)
// node couldn't execute the command
return;
}
// the *entire* stdout and stderr (buffered)
console.log(`stdout: ${stdout}`);
console.log(`stderr: ${stderr}`);
});
res.send(p)
})
app.get('/wgetcount', function (req, res) {
var cmd = 'ps -fA | grep wget | wc -l'
console.log(cmd)
const execSync = require('child_process').execSync;
var code = execSync(cmd);
res.end(code)
})
app.get('/killffmpeg', function (req, res) {
var cmd = 'kill `pidof ffmpeg`'
console.log(cmd)
const execSync = require('child_process').execSync;
exec(cmd, (err, stdout, stderr) => {
// the *entire* stdout and stderr (buffered)
console.log(`stdout: ${stdout}`);
console.log(`stderr: ${stderr}`);
if (err) {
console.log(err)
// node couldn't execute the command
return;
}
});
res.end(cmd)
})
app.get('/webdl1', function (req, res) {
var p = req.query.url
var n = "/srv/samba/ren/webdl/" + req.query.name
const lastSegment = n.split("/").pop();
console.log(lastSegment);
if (fs.existsSync(n)) {
res.send("exists")
return
}
if (fs.existsSync("/srv/samba/ren/work/facial2/"+lastSegment)) {
res.send("exists")
return
}
if (fs.existsSync("/srv/samba/ren/knk_archiv3/facial/"+lastSegment)) {
res.send("exists")
return
}
if (fs.existsSync("/srv/samba/ren/knk_archiv4/face/"+lastSegment)) {
res.send("exists")
return
}
if (fs.existsSync("/srv/samba/ren/knk_archiv4/sub/"+lastSegment)) {
res.send("exists")
return
}
if (fs.existsSync("/srv/samba/ren/knk_archiv4/sub2/"+lastSegment)) {
res.send("exists")
return
}
var cmd = 'wget -b -O "'+n+'" '
if (req.query.cookies) {
cmd = cmd + '--header="Cookie: ' + req.query.cookies + '" '
}
cmd = cmd + '"'+p+'"'
console.log(cmd)
exec(cmd, (err, stdout, stderr) => {
if (err) {
console.log(err)
// node couldn't execute the command
return;
}
// the *entire* stdout and stderr (buffered)
console.log(`stdout: ${stdout}`);
console.log(`stderr: ${stderr}`);
});
res.send(p)
})
app.get('/deleteThumb/*', function (req, res) {
if (req.path.startsWith("/deleteThumb/srv/samba/ren/thumb/")) {
var p = req.path.substr(12)
fs.unlinkSync(p)
console.log("removed " + p)
}
res.send("ok")
})
app.get('/black/*', function (req, res) {
if (req.path.startsWith("/black/srv/samba/ren/")) {
var p = req.path.substr(6)
fs.appendFileSync('/srv/samba/ren/black.txt', 'rm '+p+'\ntouch '+p+'.black\n');
}
res.send("ok")
})
app.get('/cut', function (req, res) {
var p = req.query.line
fs.appendFileSync('/srv/samba/ren/cut.txt', p+'\n');
res.send("ok")
})
app.get('/truncate', function (req, res) {
var p = req.query.line
var s = req.query.start
var n = p.replace(".mp4", ".orig.mp4")
var cmd = 'mv "'+p+'" "' + n + '"; ffmpeg -i "'+n+'" -ss ' + s + ' -codec copy -movflags faststart "'+p+'"'
console.log(cmd)
exec(cmd, (err, stdout, stderr) => {
if (err) {
console.log(err)
// node couldn't execute the command
return;
}
// the *entire* stdout and stderr (buffered)
console.log(`stdout: ${stdout}`);
console.log(`stderr: ${stderr}`);
});
res.send("ok")
})
//createDirectories(pathname) {}
app.post('/upload', upload.any() , (req, res, next) => {
// const file = req.file
var files = req.files;
var newPath = req.body.name
console.log(newPath)
if(files){
files.forEach(function(file){
//Move file to the deployment folder.
const __dirname = path.resolve();
var pathname = newPath.substring(0, newPath.lastIndexOf('/'))
console.log(pathname);
fs.mkdir(path.resolve(__dirname, pathname), { recursive: true }, e => {
if (e) {
console.error(e);
} else {
console.log(pathname);
}
});
// createDirectories(newPath)
fs.renameSync(file.path, newPath);
console.log(file.path);
});
}
res.send("ok")
})
var running = []
function countWget() {
var cmd = 'ps -fA | grep wget | wc -l'
console.log(cmd)
const execSync = require('child_process').execSync;
var code = execSync(cmd);
return parseInt("" + code) - 2
}
var downloadUrl = async function(job) {
console.log("download " + job.url)
await new Promise(resolve => setTimeout(resolve, 5000));
console.log("downloaded " + job.url)
}
function downloadWget(job) {
running.push(job)
var joburl = job.url
var cmd = 'wget -b -O "'+job.folder+'" '
cmd = cmd + '--header="Cookie: ' + job.cookie + '" '
cmd = cmd + '"'+joburl+'"'
console.log(cmd)
exec(cmd, (err, stdout, stderr) => {
running = running.filter(function(el) { return el.url != joburl; });
if (err) {
console.log(err)
// node couldn't execute the command
return;
}
// the *entire* stdout and stderr (buffered)
console.log(`stdout: ${stdout}`);
console.log(`stderr: ${stderr}`);
});
}
var q = [];
app.get('/webdl', function (req, res) {
var p = req.query.url
var n = "/srv/samba/ren/webdl/" + req.query.name
var c = req.query.cookies
if (fs.existsSync(n)) {
res.send("exists")
return
}
if (q.filter((i) => i.folder === n).length > 0) {
res.send("exists")
return
}
q.push({url: p, folder: n, cookie: c});
console.log("all urls pushed");
res.end("ok")
})
app.get('/queuelen', function (req, res) {
for (var job of running) {
res.write(job.url+"\n")
}
res.write("---\n")
for (var job of q) {
res.write(job.url+"\n")
}
res.end("Len " + q.length)
})
function mainloop() {
var cnt = countWget()
if (cnt < 2 && q.length > 0) {
var job = q.shift()
downloadWget(job)
}
setTimeout(function () {
// Do Something Here
// Then recall the parent function to
// create a recursive loop.
mainloop();
}, 1000);
}
mainloop()
var server = app.listen(8081, function () {
var host = server.address().address
var port = server.address().port
console.log("Server listening at http://%s:%s", host, port)
})