From e103c4f777868b041781ca08ca18ef47720656af Mon Sep 17 00:00:00 2001 From: Rohit Sharma Date: Wed, 10 Jun 2020 23:21:11 +0200 Subject: [PATCH] Basic prototype. --- src/server.js | 53 +++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 49 insertions(+), 4 deletions(-) diff --git a/src/server.js b/src/server.js index 6b258e0..0a43745 100644 --- a/src/server.js +++ b/src/server.js @@ -115,7 +115,7 @@ function start(opts) { ); } - let addStyle = (id, item, allowMoreData, reportFonts) => { + const addStyle = (id, item, allowMoreData, reportFonts) => { let success = true; if (item.serve_data !== false) { success = serve_style.add(options, serving.styles, item, id, opts.publicUrl, @@ -188,6 +188,12 @@ function start(opts) { }) ); + const addData = (id, item) => { + startupPromises.push( + serve_data.add(options, serving.data, item, id, opts.publicUrl) + ); + }; + for (const id of Object.keys(data)) { const item = data[id]; if (!item.mbtiles || item.mbtiles.length === 0) { @@ -195,9 +201,48 @@ function start(opts) { continue; } - startupPromises.push( - serve_data.add(options, serving.data, item, id, opts.publicUrl) - ); + addData(id, item); + } + + if (options.serveAllData) { + fs.readdir(options.paths.mbtiles, {withFileTypes: true}, (err, files) => { + if (err) { + return; + } + for (const file of files) { + if (file.isFile() && + path.extname(file.name).toLowerCase() == '.mbtiles') { + let id = path.basename(file.name, '.mbtiles'); + let item = { + mbtiles: file.name + }; + addData(id, item, false, false); + } + } + }); + + const watcher = chokidar.watch(path.join(options.paths.styles, '*.mbtiles'), + { + }); + watcher.on('all', + (eventType, filename) => { + if (filename) { + let id = path.basename(filename, '.mbtiles'); + console.log(`Data "${id}" changed, updating...`); + + serve_style.remove(serving.styles, id); + if (serve_rendered) { + serve_rendered.remove(serving.rendered, id); + } + + if (eventType == "add" || eventType == "change") { + let item = { + mbtiles: filename + }; + addData(id, item); + } + } + }); } if (options.serveAllStyles) {