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.
 
 
 

330 lines
8.2 KiB

// pm2 restart kplayer
// /srv/samba/daten/node
var express = require('express');
var fs = require("fs");
var path = require("path");
var queue = require('queue');
var wget = require('wget-improved');
var downloadUrl = function(url, dest) {
return function(cb) {
try {
// you can also change the mapping url to file here by changing the function
var download = wget.download(url, dest, {});
download.on('end', function() {
() => console.log("done downloading")
});
} catch (e) {
}
};
};
var q = queue();
//change this one as needed.
q.concurrency = 2;
//q.start();
const { exec } = 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 = 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))
})
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('/webdl', 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('/pushdl', function (req, res) {
var p = req.query.url
var n = "/srv/samba/ren/webdl/" + req.query.name
q.push(downloadUrl(p,n));
console.log("all urls pushed");
// q.start()
})
app.get('/queuelen', function (req, res) {
res.end("Len" + q.length)
})
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")
})
//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 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)
})