mirror of
https://github.com/flynx/ImageGrid.git
synced 2025-10-29 02:10:08 +00:00
updated and migrated file.js
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
69bbc872c6
commit
250869530f
@ -44,7 +44,6 @@ module.skipNested =
|
|||||||
function(paths, index_dir, logger){
|
function(paths, index_dir, logger){
|
||||||
index_dir = index_dir || INDEX_DIR
|
index_dir = index_dir || INDEX_DIR
|
||||||
logger = logger && logger.push('Skipping nested')
|
logger = logger && logger.push('Skipping nested')
|
||||||
|
|
||||||
paths = paths
|
paths = paths
|
||||||
.map(function(p){
|
.map(function(p){
|
||||||
return p.split(index_dir).shift() })
|
return p.split(index_dir).shift() })
|
||||||
@ -82,11 +81,13 @@ function(paths, index_dir, logger){
|
|||||||
// matches manually...
|
// matches manually...
|
||||||
var guaranteeGlobEvents =
|
var guaranteeGlobEvents =
|
||||||
module.guaranteeGlobEvents =
|
module.guaranteeGlobEvents =
|
||||||
function(glob){ return guaranteeEvents('data end', glob) }
|
function(glob){
|
||||||
|
return guaranteeEvents('data end', glob) }
|
||||||
|
|
||||||
var gGlob =
|
var gGlob =
|
||||||
module.gGlob = function(){
|
module.gGlob = function(){
|
||||||
return guaranteeGlobEvents(glob.globStream.apply(null, arguments)) }
|
return guaranteeGlobEvents(
|
||||||
|
glob.globStream.apply(null, arguments)) }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -109,20 +110,21 @@ function(base, index_dir){
|
|||||||
var getIndexes =
|
var getIndexes =
|
||||||
module.getIndexes =
|
module.getIndexes =
|
||||||
function(base, index_dir, logger){
|
function(base, index_dir, logger){
|
||||||
logger = logger && logger.push('Searching')
|
logger = logger
|
||||||
|
&& logger.push('Searching')
|
||||||
return new Promise(function(resolve, reject){
|
return new Promise(function(resolve, reject){
|
||||||
|
var paths = []
|
||||||
listIndexes(base, index_dir)
|
listIndexes(base, index_dir)
|
||||||
.on('error', function(err){
|
.on('error', function(err){
|
||||||
reject(err)
|
reject(err) })
|
||||||
})
|
|
||||||
.on('data', function(path){
|
.on('data', function(path){
|
||||||
logger && logger.emit('found', path)
|
logger
|
||||||
})
|
&& logger.emit('found', path)
|
||||||
.on('end', function(paths){
|
paths.push(path) })
|
||||||
|
.on('end', function(){
|
||||||
// skip nested indexes...
|
// skip nested indexes...
|
||||||
resolve(skipNested(paths, index_dir, logger))
|
resolve(
|
||||||
}) }) }
|
skipNested(paths, index_dir, logger)) }) }) }
|
||||||
|
|
||||||
|
|
||||||
var listPreviews =
|
var listPreviews =
|
||||||
@ -136,7 +138,8 @@ function(base, img_pattern){
|
|||||||
var listJSON =
|
var listJSON =
|
||||||
module.listJSON =
|
module.listJSON =
|
||||||
function(path, pattern){
|
function(path, pattern){
|
||||||
pattern = pattern || '*'
|
pattern = pattern
|
||||||
|
|| '*'
|
||||||
path = util.normalizePath(path)
|
path = util.normalizePath(path)
|
||||||
return gGlob(path +'/'+ pattern +'.json', {strict: false}) }
|
return gGlob(path +'/'+ pattern +'.json', {strict: false}) }
|
||||||
|
|
||||||
@ -153,8 +156,10 @@ function(func){
|
|||||||
return function(){
|
return function(){
|
||||||
var args = [...arguments]
|
var args = [...arguments]
|
||||||
return new Promise(function(resolve, reject){
|
return new Promise(function(resolve, reject){
|
||||||
func.apply(that, args.concat([function(err, res){
|
func.call(that, ...args, function(err, res){
|
||||||
return err ? reject(err) : resolve(res) }])) }) } }
|
return err ?
|
||||||
|
reject(err)
|
||||||
|
: resolve(res) }) }) } }
|
||||||
|
|
||||||
var loadFile = denodeify(fse.readFile)
|
var loadFile = denodeify(fse.readFile)
|
||||||
var writeFile = denodeify(fse.writeFile)
|
var writeFile = denodeify(fse.writeFile)
|
||||||
@ -163,9 +168,8 @@ var ensureDir = denodeify(fse.ensureDir)
|
|||||||
|
|
||||||
// XXX handle errors...
|
// XXX handle errors...
|
||||||
function loadJSON(path){
|
function loadJSON(path){
|
||||||
path = util.normalizePath(path)
|
return loadFile(util.normalizePath(path))
|
||||||
return loadFile(path).then(JSON.parse)
|
.then(JSON.parse) }
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Format:
|
// Format:
|
||||||
@ -189,25 +193,20 @@ var groupByDate =
|
|||||||
module.groupByDate =
|
module.groupByDate =
|
||||||
function(list){
|
function(list){
|
||||||
var res = {}
|
var res = {}
|
||||||
|
|
||||||
list
|
list
|
||||||
.forEach(function(n){
|
.forEach(function(n){
|
||||||
var b = pathlib.basename(n)
|
var b = pathlib.basename(n)
|
||||||
var s = b.split(/[-.]/g).slice(0, -1)
|
var s = b.split(/[-.]/g).slice(0, -1)
|
||||||
|
|
||||||
// no date set...
|
// no date set...
|
||||||
if(s.length == 1){
|
if(s.length == 1){
|
||||||
res.root = res.root || []
|
res.root = res.root
|
||||||
|
|| []
|
||||||
res.root.push(n)
|
res.root.push(n)
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
res[s[0]] = res[s[0]] || []
|
res[s[0]] = res[s[0]]
|
||||||
res[s[0]].push(n)
|
|| []
|
||||||
}
|
res[s[0]].push(n) } })
|
||||||
})
|
return res }
|
||||||
|
|
||||||
return res
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -249,7 +248,11 @@ function(list, from_date, logger){
|
|||||||
.reverse()
|
.reverse()
|
||||||
// skip dates before from_date...
|
// skip dates before from_date...
|
||||||
// NOTE: from_date is included...
|
// NOTE: from_date is included...
|
||||||
.filter(function(d){ return from_date ? d <= from_date || d == 'root' : true })
|
.filter(function(d){
|
||||||
|
return from_date ?
|
||||||
|
d <= from_date
|
||||||
|
|| d == 'root'
|
||||||
|
: true })
|
||||||
.forEach(function(d){
|
.forEach(function(d){
|
||||||
dates[d]
|
dates[d]
|
||||||
.sort()
|
.sort()
|
||||||
@ -265,53 +268,47 @@ function(list, from_date, logger){
|
|||||||
var k = s[1]
|
var k = s[1]
|
||||||
var d = s[2] == 'diff'
|
var d = s[2] == 'diff'
|
||||||
|
|
||||||
k = d ? k : s.slice(1).join('-')
|
k = d ?
|
||||||
|
k
|
||||||
|
: s.slice(1).join('-')
|
||||||
|
|
||||||
// new keyword...
|
// new keyword...
|
||||||
if(index[k] == null){
|
if(index[k] == null){
|
||||||
index[k] = [[d, n]]
|
index[k] = [[d, n]]
|
||||||
logger && logger.emit('queued', n)
|
logger && logger.emit('queued', n)
|
||||||
queued += 1
|
queued += 1
|
||||||
|
|
||||||
// do not add anything past the latest non-diff
|
// do not add anything past the latest non-diff
|
||||||
// for each keyword...
|
// for each keyword...
|
||||||
} else if(index[k].slice(-1)[0][0] == true){
|
} else if(index[k].slice(-1)[0][0] == true){
|
||||||
index[k].push([d, n])
|
index[k].push([d, n])
|
||||||
logger && logger.emit('queued', n)
|
logger && logger.emit('queued', n)
|
||||||
queued += 1
|
queued += 1 } }) })
|
||||||
}
|
|
||||||
}) });
|
|
||||||
|
|
||||||
// add base files back where needed...
|
// add base files back where needed...
|
||||||
// <keyword>.json / non-diff
|
// <keyword>.json / non-diff
|
||||||
(dates.root || [])
|
;(dates.root || [])
|
||||||
.forEach(function(n){
|
.forEach(function(n){
|
||||||
var b = pathlib.basename(n)
|
var b = pathlib.basename(n)
|
||||||
var k = b.split(/\./g)[0]
|
var k = b.split(/\./g)[0]
|
||||||
|
|
||||||
// no diffs...
|
// no diffs...
|
||||||
if(index[k] == null){
|
if(index[k] == null){
|
||||||
index[k] = [[false, n]]
|
index[k] = [[false, n]]
|
||||||
logger && logger.emit('queued', n)
|
logger
|
||||||
|
&& logger.emit('queued', n)
|
||||||
queued += 1
|
queued += 1
|
||||||
|
|
||||||
// add root file if no base is found...
|
// add root file if no base is found...
|
||||||
} else if(index[k].slice(-1)[0][0] == true){
|
} else if(index[k].slice(-1)[0][0] == true){
|
||||||
index[k].push([false, n])
|
index[k].push([false, n])
|
||||||
logger && logger.emit('queued', n)
|
logger
|
||||||
queued += 1
|
&& logger.emit('queued', n)
|
||||||
}
|
queued += 1 } })
|
||||||
})
|
|
||||||
|
|
||||||
// remove the flags...
|
// remove the flags...
|
||||||
for(var k in index){
|
for(var k in index){
|
||||||
index[k] = index[k]
|
index[k] = index[k]
|
||||||
.map(function(e){ return e[1] }) }
|
.map(function(e){
|
||||||
|
return e[1] }) }
|
||||||
logger && logger.emit('files-queued', queued, index)
|
logger
|
||||||
|
&& logger.emit('files-queued', queued, index)
|
||||||
return index
|
return index }
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -326,40 +323,41 @@ function(list, from_date, logger){
|
|||||||
var loadSaveHistoryList =
|
var loadSaveHistoryList =
|
||||||
module.loadSaveHistoryList =
|
module.loadSaveHistoryList =
|
||||||
function(path, index_dir, logger){
|
function(path, index_dir, logger){
|
||||||
logger = logger && logger.push('Save history')
|
logger = logger
|
||||||
|
&& logger.push('Save history')
|
||||||
|
|
||||||
path = util.normalizePath(path)
|
path = util.normalizePath(path)
|
||||||
index_dir = index_dir || INDEX_DIR
|
index_dir = index_dir
|
||||||
|
|| INDEX_DIR
|
||||||
|
|
||||||
return new Promise(function(resolve, reject){
|
return new Promise(function(resolve, reject){
|
||||||
// direct index...
|
// direct index...
|
||||||
if(pathlib.basename(path) == index_dir){
|
if(pathlib.basename(path) == index_dir){
|
||||||
|
var files = []
|
||||||
listJSON(path)
|
listJSON(path)
|
||||||
// XXX handle errors...
|
// XXX handle errors...
|
||||||
.on('error', function(err){
|
.on('error', function(err){
|
||||||
logger && logger.emit('error', err)
|
logger
|
||||||
console.error(err)
|
&& logger.emit('error', err)
|
||||||
})
|
console.error(err) })
|
||||||
.on('end', function(files){
|
.on('data', function(path){
|
||||||
|
paths.push(path) })
|
||||||
|
.on('end', function(){
|
||||||
var data = groupByDate(files)
|
var data = groupByDate(files)
|
||||||
|
|
||||||
// XXX should we mark the root timestamp in any way???
|
// XXX should we mark the root timestamp in any way???
|
||||||
if('root' in data && data.root.length > 0){
|
if('root' in data
|
||||||
|
&& data.root.length > 0){
|
||||||
// XXX handle stat error...
|
// XXX handle stat error...
|
||||||
data[fse.statSync(data.root[0]).birthtime.getTimeStamp()] = data.root
|
data[fse.statSync(data.root[0]).birthtime.getTimeStamp()] = data.root
|
||||||
delete data.root
|
delete data.root }
|
||||||
}
|
resolve(data) })
|
||||||
|
|
||||||
resolve(data)
|
|
||||||
})
|
|
||||||
|
|
||||||
// need to locate indexes...
|
// need to locate indexes...
|
||||||
} else {
|
} else {
|
||||||
var res = {}
|
var res = {}
|
||||||
|
|
||||||
getIndexes(path, index_dir, logger)
|
getIndexes(path, index_dir, logger)
|
||||||
.catch(function(err){
|
.catch(function(err){
|
||||||
logger && logger.emit('error', err)
|
logger
|
||||||
|
&& logger.emit('error', err)
|
||||||
console.error(err) })
|
console.error(err) })
|
||||||
.then(function(paths){
|
.then(function(paths){
|
||||||
// start loading...
|
// start loading...
|
||||||
@ -376,7 +374,8 @@ function(path, index_dir, logger){
|
|||||||
// we do not need to include the index
|
// we do not need to include the index
|
||||||
// itself in the base path...
|
// itself in the base path...
|
||||||
res[p] = obj }) })) })
|
res[p] = obj }) })) })
|
||||||
.then(function(){ resolve(res) }) } }) }
|
.then(function(){
|
||||||
|
resolve(res) }) } }) }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -470,22 +469,25 @@ function(path, index_dir, logger){
|
|||||||
var loadIndex =
|
var loadIndex =
|
||||||
module.loadIndex =
|
module.loadIndex =
|
||||||
function(path, index_dir, from_date, logger){
|
function(path, index_dir, from_date, logger){
|
||||||
logger = logger && logger.push('Index')
|
logger = logger
|
||||||
|
&& logger.push('Index')
|
||||||
|
|
||||||
path = util.normalizePath(path)
|
path = util.normalizePath(path)
|
||||||
|
|
||||||
if(index_dir && index_dir.emit != null){
|
if(index_dir
|
||||||
|
&& index_dir.emit != null){
|
||||||
logger = index_dir
|
logger = index_dir
|
||||||
index_dir = from_date = null
|
index_dir = from_date = null
|
||||||
|
|
||||||
} else if(from_date && from_date.emit != null){
|
} else if(from_date
|
||||||
|
&& from_date.emit != null){
|
||||||
logger = from_date
|
logger = from_date
|
||||||
from_date = null
|
from_date = null }
|
||||||
}
|
|
||||||
//index_dir = index_dir || INDEX_DIR
|
//index_dir = index_dir || INDEX_DIR
|
||||||
index_dir = index_dir === false ?
|
index_dir = index_dir === false ?
|
||||||
index_dir
|
index_dir
|
||||||
: (index_dir || INDEX_DIR)
|
: (index_dir
|
||||||
|
|| INDEX_DIR)
|
||||||
|
|
||||||
// XXX should this be interactive (a-la EventEmitter) or as it is now
|
// XXX should this be interactive (a-la EventEmitter) or as it is now
|
||||||
// return the whole thing as a block (Promise)...
|
// return the whole thing as a block (Promise)...
|
||||||
@ -499,25 +501,29 @@ function(path, index_dir, from_date, logger){
|
|||||||
var p = util.normalizePath(path).split(/[\\\/]/g).slice(-i.length)
|
var p = util.normalizePath(path).split(/[\\\/]/g).slice(-i.length)
|
||||||
|
|
||||||
var explicit_index_dir = !index_dir
|
var explicit_index_dir = !index_dir
|
||||||
|| (i.filter(function(e, j){ return e == p[j] }).length == i.length)
|
|| (i
|
||||||
|
.filter(function(e, j){
|
||||||
|
return e == p[j] })
|
||||||
|
.length == i.length)
|
||||||
|
|
||||||
// we've got an index...
|
// we've got an index...
|
||||||
// XXX do we need to check if it's a dir???
|
// XXX do we need to check if it's a dir???
|
||||||
if(explicit_index_dir){
|
if(explicit_index_dir){
|
||||||
|
logger
|
||||||
|
&& logger.emit('path', path)
|
||||||
|
|
||||||
logger && logger.emit('path', path)
|
var files = []
|
||||||
|
|
||||||
listJSON(path)
|
listJSON(path)
|
||||||
// XXX handle errors...
|
// XXX handle errors...
|
||||||
.on('error', function(err){
|
.on('error', function(err){
|
||||||
logger && logger.emit('error', err)
|
logger
|
||||||
console.error(err)
|
&& logger.emit('error', err)
|
||||||
})
|
console.error(err) })
|
||||||
.on('end', function(files){
|
.on('data', function(path){
|
||||||
|
files.push(path)})
|
||||||
|
.on('end', function(){
|
||||||
var res = {}
|
var res = {}
|
||||||
|
|
||||||
var index = groupByKeyword(files, from_date, logger)
|
var index = groupByKeyword(files, from_date, logger)
|
||||||
|
|
||||||
// load...
|
// load...
|
||||||
Promise
|
Promise
|
||||||
.all(Object.keys(index).map(function(keyword){
|
.all(Object.keys(index).map(function(keyword){
|
||||||
@ -528,12 +534,10 @@ function(path, index_dir, from_date, logger){
|
|||||||
// XXX not sure about this...
|
// XXX not sure about this...
|
||||||
if(keyword == '__dates'){
|
if(keyword == '__dates'){
|
||||||
res.__dates = index.__dates
|
res.__dates = index.__dates
|
||||||
return true
|
return true }
|
||||||
}
|
|
||||||
if(keyword == '__date'){
|
if(keyword == '__date'){
|
||||||
res.__date = index.__date
|
res.__date = index.__date
|
||||||
return true
|
return true }
|
||||||
}
|
|
||||||
|
|
||||||
// NOTE: so far I really do not like how nested and
|
// NOTE: so far I really do not like how nested and
|
||||||
// unreadable the Promise/Deferred code becomes
|
// unreadable the Promise/Deferred code becomes
|
||||||
@ -549,7 +553,6 @@ function(path, index_dir, from_date, logger){
|
|||||||
logger && logger.emit('loaded', keyword, latest)
|
logger && logger.emit('loaded', keyword, latest)
|
||||||
|
|
||||||
var loading = {}
|
var loading = {}
|
||||||
|
|
||||||
// handle diffs...
|
// handle diffs...
|
||||||
return Promise
|
return Promise
|
||||||
// load diffs...
|
// load diffs...
|
||||||
@ -559,47 +562,32 @@ function(path, index_dir, from_date, logger){
|
|||||||
// XXX we should abort loading this index...
|
// XXX we should abort loading this index...
|
||||||
.catch(function(err){
|
.catch(function(err){
|
||||||
logger && logger.emit('error', err)
|
logger && logger.emit('error', err)
|
||||||
console.error(err)
|
console.error(err) })
|
||||||
})
|
|
||||||
.then(function(json){
|
.then(function(json){
|
||||||
// NOTE: we can't merge here
|
// NOTE: we can't merge here
|
||||||
// as the files can be
|
// as the files can be
|
||||||
// read in arbitrary order...
|
// read in arbitrary order...
|
||||||
loading[p] = json
|
loading[p] = json }) }))
|
||||||
})
|
|
||||||
}))
|
|
||||||
// merge diffs...
|
// merge diffs...
|
||||||
.then(function(){
|
.then(function(){
|
||||||
diffs
|
diffs
|
||||||
.reverse()
|
.reverse()
|
||||||
.forEach(function(p){
|
.forEach(function(p){
|
||||||
var json = loading[p]
|
var json = loading[p]
|
||||||
|
|
||||||
for(var n in json){
|
for(var n in json){
|
||||||
data[n] = json[n]
|
data[n] = json[n] }
|
||||||
}
|
logger
|
||||||
|
&& logger.emit('loaded', keyword+'-diff', p) })
|
||||||
logger && logger.emit('loaded', keyword+'-diff', p)
|
res[keyword] = data }) }) }))
|
||||||
})
|
|
||||||
|
|
||||||
res[keyword] = data
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}))
|
|
||||||
.then(function(){
|
.then(function(){
|
||||||
logger && logger.emit('index', path, res)
|
logger
|
||||||
|
&& logger.emit('index', path, res)
|
||||||
var d = {}
|
var d = {}
|
||||||
d[path] = res
|
d[path] = res
|
||||||
|
resolve(d) }) })
|
||||||
resolve(d)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
// no explicit index given -- find all in sub tree...
|
// no explicit index given -- find all in sub tree...
|
||||||
} else {
|
} else {
|
||||||
var res = {}
|
var res = {}
|
||||||
|
|
||||||
// special case: root index...
|
// special case: root index...
|
||||||
if(fse.existsSync(path +'/'+ index_dir)){
|
if(fse.existsSync(path +'/'+ index_dir)){
|
||||||
var n = path +'/'+ index_dir
|
var n = path +'/'+ index_dir
|
||||||
@ -612,36 +600,29 @@ function(path, index_dir, from_date, logger){
|
|||||||
// we do not need to include the index
|
// we do not need to include the index
|
||||||
// itself in the base path...
|
// itself in the base path...
|
||||||
res[path] = obj[n]
|
res[path] = obj[n]
|
||||||
resolve(res)
|
resolve(res) }) }
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// full search...
|
// full search...
|
||||||
getIndexes(path, index_dir, logger)
|
getIndexes(path, index_dir, logger)
|
||||||
.catch(function(err){
|
.catch(function(err){
|
||||||
logger && logger.emit('error', err)
|
logger && logger.emit('error', err)
|
||||||
console.error(err)
|
console.error(err) })
|
||||||
})
|
|
||||||
.then(function(paths){
|
.then(function(paths){
|
||||||
// start loading...
|
// start loading...
|
||||||
Promise.all(paths.map(function(p){
|
Promise
|
||||||
p = util.normalizePath(p)
|
.all(paths.map(function(p){
|
||||||
//var path = pathlib.normalize(p +'/'+ index_dir)
|
p = util.normalizePath(p)
|
||||||
var path = util.normalizePath(p +'/'+ index_dir)
|
//var path = pathlib.normalize(p +'/'+ index_dir)
|
||||||
return loadIndex(path, index_dir, from_date, logger)
|
var path = util.normalizePath(p +'/'+ index_dir)
|
||||||
.then(function(obj){
|
return loadIndex(path, index_dir, from_date, logger)
|
||||||
// NOTE: considering that all the paths within
|
.then(function(obj){
|
||||||
// the index are relative to the preview
|
// NOTE: considering that all the paths within
|
||||||
// dir (the parent dir to the index root)
|
// the index are relative to the preview
|
||||||
// we do not need to include the index
|
// dir (the parent dir to the index root)
|
||||||
// itself in the base path...
|
// we do not need to include the index
|
||||||
res[p] = obj[path]
|
// itself in the base path...
|
||||||
})
|
res[p] = obj[path] }) }))
|
||||||
})).then(function(){ resolve(res) })
|
.then(function(){
|
||||||
})
|
resolve(res) }) }) } }) }
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// get/populate the previews...
|
// get/populate the previews...
|
||||||
@ -663,20 +644,20 @@ function(path, index_dir, from_date, logger){
|
|||||||
var loadPreviews =
|
var loadPreviews =
|
||||||
module.loadPreviews =
|
module.loadPreviews =
|
||||||
function(base, pattern, previews, index_dir, absolute_path){
|
function(base, pattern, previews, index_dir, absolute_path){
|
||||||
previews = previews || {}
|
previews = previews
|
||||||
index_dir = index_dir || INDEX_DIR
|
|| {}
|
||||||
|
index_dir = index_dir
|
||||||
|
|| INDEX_DIR
|
||||||
base = util.normalizePath(base)
|
base = util.normalizePath(base)
|
||||||
pattern = pattern || '*'
|
pattern = pattern
|
||||||
|
|| '*'
|
||||||
|
|
||||||
// we got an explicit index....
|
// we got an explicit index....
|
||||||
if(pathlib.basename(base) == index_dir){
|
if(pathlib.basename(base) == index_dir){
|
||||||
return new Promise(function(resolve, reject){
|
return new Promise(function(resolve, reject){
|
||||||
if(!(base in previews)){
|
if(!(base in previews)){
|
||||||
previews[base] = {}
|
previews[base] = {} }
|
||||||
}
|
|
||||||
|
|
||||||
var images = previews[base]
|
var images = previews[base]
|
||||||
|
|
||||||
listPreviews(base, pattern)
|
listPreviews(base, pattern)
|
||||||
// XXX handle errors....
|
// XXX handle errors....
|
||||||
//.on('error', function(err){
|
//.on('error', function(err){
|
||||||
@ -687,26 +668,18 @@ function(base, pattern, previews, index_dir, absolute_path){
|
|||||||
// get the data we need...
|
// get the data we need...
|
||||||
var gid = pathlib.basename(path).split(' - ')[0]
|
var gid = pathlib.basename(path).split(' - ')[0]
|
||||||
var res = pathlib.basename(pathlib.dirname(path))
|
var res = pathlib.basename(pathlib.dirname(path))
|
||||||
|
|
||||||
// build the structure if it does not exist...
|
// build the structure if it does not exist...
|
||||||
if(!(gid in images)){
|
if(!(gid in images)){
|
||||||
images[gid] = {}
|
images[gid] = {} }
|
||||||
}
|
|
||||||
if(images[gid].preview == null){
|
if(images[gid].preview == null){
|
||||||
images[gid].preview = {}
|
images[gid].preview = {} }
|
||||||
}
|
|
||||||
|
|
||||||
// add a preview...
|
// add a preview...
|
||||||
// NOTE: this will overwrite a previews if they are found in
|
// NOTE: this will overwrite a previews if they are found in
|
||||||
// several locations...
|
// several locations...
|
||||||
images[gid].preview[res] =
|
images[gid].preview[res] =
|
||||||
util.normalizePath(index_dir +'/'+ path.split(index_dir)[1])
|
util.normalizePath(index_dir +'/'+ path.split(index_dir)[1]) })
|
||||||
})
|
|
||||||
.on('end', function(){
|
.on('end', function(){
|
||||||
resolve(previews)
|
resolve(previews) }) })
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
// find all sub indexes...
|
// find all sub indexes...
|
||||||
} else {
|
} else {
|
||||||
return new Promise(function(resolve, reject){
|
return new Promise(function(resolve, reject){
|
||||||
@ -716,17 +689,12 @@ function(base, pattern, previews, index_dir, absolute_path){
|
|||||||
//.on('error', function(err){
|
//.on('error', function(err){
|
||||||
//})
|
//})
|
||||||
.on('data', function(base){
|
.on('data', function(base){
|
||||||
queue.push(loadPreviews(base, pattern, previews, index_dir, absolute_path))
|
queue.push(
|
||||||
})
|
loadPreviews(base, pattern, previews, index_dir, absolute_path)) })
|
||||||
.on('end', function(){
|
.on('end', function(){
|
||||||
Promise.all(queue)
|
Promise.all(queue)
|
||||||
.then(function(){
|
.then(function(){
|
||||||
resolve(previews)
|
resolve(previews) }) }) }) } }
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// XXX
|
// XXX
|
||||||
@ -765,67 +733,69 @@ var FILENAME = '${DATE}-${KEYWORD}.${EXT}'
|
|||||||
var writeIndex =
|
var writeIndex =
|
||||||
module.writeIndex =
|
module.writeIndex =
|
||||||
function(json, path, date, filename_tpl, logger){
|
function(json, path, date, filename_tpl, logger){
|
||||||
logger = logger && logger.push('Index')
|
logger = logger
|
||||||
|
&& logger.push('Index')
|
||||||
|
|
||||||
// XXX get this from args/config...
|
// XXX get this from args/config...
|
||||||
var spaces = null
|
var spaces = null
|
||||||
|
|
||||||
path = util.normalizePath(path)
|
path = util.normalizePath(path)
|
||||||
filename_tpl = filename_tpl || FILENAME
|
filename_tpl = filename_tpl
|
||||||
|
|| FILENAME
|
||||||
// XXX for some reason this gets the unpatched node.js Date, so we
|
// XXX for some reason this gets the unpatched node.js Date, so we
|
||||||
// get the patched date explicitly...
|
// get the patched date explicitly...
|
||||||
date = date || window.Date.timeStamp()
|
date = date
|
||||||
|
|| window.Date.timeStamp()
|
||||||
|
|
||||||
var files = []
|
var files = []
|
||||||
|
|
||||||
// build the path if it does not exist...
|
// build the path if it does not exist...
|
||||||
return ensureDir(path)
|
return ensureDir(path)
|
||||||
.catch(function(err){
|
.catch(function(err){
|
||||||
logger && logger.emit('error', err)
|
logger
|
||||||
console.error(err)
|
&& logger.emit('error', err)
|
||||||
})
|
console.error(err) })
|
||||||
.then(function(){
|
.then(function(){
|
||||||
logger && logger.emit('path', path)
|
logger
|
||||||
|
&& logger.emit('path', path)
|
||||||
|
|
||||||
// write files...
|
// write files...
|
||||||
// NOTE: we are not doing this sequencilly as there will not
|
// NOTE: we are not doing this sequencilly as there will not
|
||||||
// be too many files...
|
// be too many files...
|
||||||
return Promise
|
return Promise
|
||||||
.all(Object.keys(json).map(function(keyword){
|
.all(Object.keys(json)
|
||||||
//var data = JSON.stringify(json[keyword])
|
.map(function(keyword){
|
||||||
var data = JSON.stringify(json[keyword], null, spaces)
|
//var data = JSON.stringify(json[keyword])
|
||||||
|
var data = JSON.stringify(json[keyword], null, spaces)
|
||||||
|
|
||||||
// get the sub-path and keyword...
|
// get the sub-path and keyword...
|
||||||
var sub_path = keyword.split(/[\\\/]/g)
|
var sub_path = keyword.split(/[\\\/]/g)
|
||||||
keyword = sub_path.pop()
|
keyword = sub_path.pop()
|
||||||
sub_path = sub_path.join('/')
|
sub_path = sub_path.join('/')
|
||||||
|
|
||||||
var file = path +'/'+ sub_path +'/'+ (filename_tpl
|
var file = path +'/'+ sub_path +'/'+ (filename_tpl
|
||||||
.replace('${DATE}', date)
|
.replace('${DATE}', date)
|
||||||
.replace('${KEYWORD}', keyword)
|
.replace('${KEYWORD}', keyword)
|
||||||
.replace('${EXT}', 'json'))
|
.replace('${EXT}', 'json'))
|
||||||
|
|
||||||
return ensureDir(pathlib.dirname(file))
|
return ensureDir(pathlib.dirname(file))
|
||||||
.then(function(){
|
.then(function(){
|
||||||
files.push(file)
|
files.push(file)
|
||||||
|
|
||||||
logger && logger.emit('queued', file)
|
logger
|
||||||
|
&& logger.emit('queued', file)
|
||||||
|
|
||||||
return writeFile(file, data, 'utf8')
|
return writeFile(file, data, 'utf8')
|
||||||
.catch(function(err){
|
.catch(function(err){
|
||||||
logger && logger.emit('error', err)
|
logger
|
||||||
console.error(err)
|
&& logger.emit('error', err)
|
||||||
})
|
console.error(err) })
|
||||||
.then(function(){
|
.then(function(){
|
||||||
logger && logger.emit('written', file)
|
logger
|
||||||
})
|
&& logger.emit('written', file) }) }) }))
|
||||||
})
|
.then(function(){
|
||||||
}))
|
logger
|
||||||
.then(function(){
|
&& logger.emit('done', files) }) }) }
|
||||||
logger && logger.emit('done', files)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user