webframe/index.js

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}`));