62 lines
1.8 KiB
JavaScript
62 lines
1.8 KiB
JavaScript
require('dotenv').config();
|
|
const { createClient } = require('webdav');
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
// init db
|
|
const low = require('lowdb');
|
|
const FileSync = require('lowdb/adapters/FileSync');
|
|
const adapter = new FileSync('db.json');
|
|
const db = low(adapter);
|
|
db.defaults({ files: [], count: 0}).write();
|
|
|
|
// create webdav-client
|
|
const client = createClient(
|
|
process.env.WEBDAV_URL,
|
|
{
|
|
username: process.env.WEBDAV_USER,
|
|
password: process.env.WEBDAV_PW
|
|
}
|
|
);
|
|
|
|
|
|
async function listDir(dir = process.env.WEBFRAME_PATH) {
|
|
const directoryItems = await client.getDirectoryContents(dir);
|
|
return directoryItems;
|
|
}
|
|
|
|
function dlFile(file, dir = process.env.WEBFRAME_PATH) {
|
|
return client.createReadStream(dir+'/'+file).pipe(fs.createWriteStream('./files/'+file));
|
|
}
|
|
|
|
function loadImages() {
|
|
client.exists(process.env.WEBFRAME_PATH).then(async data => {
|
|
if (data) {
|
|
const list = await listDir(process.env.WEBFRAME_PATH);
|
|
list.forEach(file => {
|
|
const inDb = db.get('files').find({ basename: file.basename }).value() !== undefined ? true : false;
|
|
if (!inDb) {
|
|
console.log('Downloaded new File:', file.basename);
|
|
dlFile(file.basename);
|
|
db.get('files').push(file).write();
|
|
db.update('count', n => n + 1).write();
|
|
}
|
|
});
|
|
}
|
|
});
|
|
setTimeout(() => loadImages(), process.env.POLL_TIMEOUT);
|
|
}
|
|
|
|
loadImages();
|
|
|
|
// webserver
|
|
const express = require('express');
|
|
const app = express();
|
|
|
|
app.use('/files', express.static(path.join(__dirname, 'files')));
|
|
app.get('/api/files', (req, res) => {
|
|
res.json({resource: db.get('files').value()});
|
|
});
|
|
app.use(express.static(path.join(__dirname, 'public')));
|
|
app.listen(process.env.PORT, () => console.log(`Example app listening at http://localhost:${process.env.PORT}`));
|
|
|