diff --git a/desuto-viewer/Desuto-webviewer/utils/db.js b/desuto-viewer/Desuto-webviewer/utils/db.js index 5915838..9bdcfd6 100644 --- a/desuto-viewer/Desuto-webviewer/utils/db.js +++ b/desuto-viewer/Desuto-webviewer/utils/db.js @@ -1,152 +1,158 @@ /* DB utility functions */ -var config = require('../config.json'), +var config = require('../config.js'), util = require('util'), fs = require('fs'), path = require('path'), recursive = require('recursive-readdir'), imagesBasePath = config.baseDir + config.convertedDir, overlaysBasePath = config.baseDir + config.overlaysDir; /* Login check */ exports.isLogged = function(req, callback) { function usercallback(user) { if (user === null) { callback(false); } else { callback(true, user); } } exports.getUser(req, usercallback); }; /* Get user */ exports.getUser = function(req, callback) { // get cookie from request var auth = req.cookies['AuthSession']; // no cookie, not logged in if (auth === null) { callback(null); return; } // get CouchDB object var nano = require('nano')({ url: config.couchDBRootURL, cookie: 'AuthSession=' + auth }); // get current session nano.session(function(err, session) { if (err || session.userCtx.name === null) { callback(null); return; } console.log('user is %s and has these roles: %j', session.userCtx.name, session.userCtx.roles); callback(session.userCtx); }); }; /* Get images - beta version using the filesystem */ exports.getImages = function(req, callback) { var images = {}; + let subdir = ''; recursive(imagesBasePath, function(err, files){ console.log(files); - files.forEach(function (file) { - subdir = file.replace(imagesBasePath, '') - subdir = subdir.substring(0, subdir.indexOf('/')) + let images = {}; - if(typeof images[subdir] === "undefined") - images[subdir] = []; + if(files){ + files.forEach(function (file) { + subdir = file.replace(imagesBasePath, ''); + subdir = subdir.substring(0, subdir.indexOf('/')); - images[subdir].push(file.replace(imagesBasePath, '')); - }); + if(typeof images[subdir] === "undefined") + images[subdir] = []; - images[subdir].sort(naturalSorter); + images[subdir].push(file.replace(imagesBasePath, '')); + }); + + if(subdir && images[subdir]) + images[subdir].sort(naturalSorter); + } callback(images); }); }; function naturalSorter(as, bs){ var a, b, a1, b1, i= 0, n, L, rx=/(\.\d+)|(\d+(\.\d+)?)|([^\d.]+)|(\.\D+)|(\.$)/g; if(as=== bs) return 0; a= as.toLowerCase().match(rx); b= bs.toLowerCase().match(rx); L= a.length; while(ib1? 1:-1; } } return b[i]? -1:0; } /* Get features - beta version using the filesystem */ exports.getFeatures = function(req, callback) { var image = req.query.image; var overlays = []; if (fs.existsSync(overlaysBasePath + image)) { var files = fs.readdirSync(overlaysBasePath + image); for (var i in files) { overlays.push(files[i].substr(0, files[i].lastIndexOf('.'))); } } callback(overlays); }; function getDirectories(srcpath) { return fs.readdirSync(srcpath).filter(function(file) { return fs.statSync(path.join(srcpath, file)).isDirectory(); }); } function endsWith(str, suffix) { return str.indexOf(suffix, str.length - suffix.length) !== -1; } /* Get images */ /*exports.getImages = function(req, callback){ // get cookie from request var auth = req.cookies['AuthSession']; // no cookie, not logged in if (auth === null) { callback(null); return; } // get CouchDB object var nano = require('nano')({ url: config.dbProtocol + '://' + config.dbHost + ':' + config.dbPort, cookie: 'AuthSession=' + auth }); // get images var histopatho = nano.use('histopatho'); var images = []; histopatho.list(function(err, body){ if (!err){ body.rows.forEach(function(doc){ console.log(doc.id); images.push(doc.id); }); callback(images); } }); }*/