new sort now online, still needs testing and revision...

Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
Alex A. Naanou 2018-10-22 11:47:10 +03:00
parent d554876f4c
commit 76cbfd80a2

View File

@ -78,7 +78,7 @@ module.SortActions = actions.Actions({
// var st = s.trim()
// st[0].toUpperCase() == st[0]
'Date':
'metadata.createDate birthtime ctime name-sequence keep-position reverse',
'image-date name-sequence keep-position reverse',
'File date':
'birthtime ctime keep-position reverse',
'File sequence number (with overflow)':
@ -118,12 +118,13 @@ module.SortActions = actions.Actions({
__sort_methods__: {
// aliases...
'image-date':
'image-create-date image-modify-date',
//'image-create-date image-modify-date',
'image-create-date',
'image-create-date':
'metadata.createDate birthtime ctime name-sequence keep-position',
// XXX
'image-modify-date':
'metadata.createDate birthtime ctime name-sequence keep-position',
//'image-modify-date':
// 'metadata.createDate birthtime ctime name-sequence keep-position',
// XXX make sequence sort methods compatible with repeating numbers,
// i.e. for file names like DSC_1234 sorting more than 10K files
@ -292,56 +293,40 @@ module.SortActions = actions.Actions({
this.data.sort_method = typeof(method) == typeof('str') ? method : method.join(' ')
var splitMethods = function(m){
return m instanceof Array ? m :
return (m instanceof Array ?
m
: typeof(m) == typeof('str') ?
m
.split(/'([^']*)'|"([^"]*)"| +/)
.filter(function(e){
return e && e.trim() != '' && !/['"]/.test(e) }) }
// XXX
return e && e.trim() != '' && !/['"]/.test(e) })
: [])
.reduce(function(r, e){
return r.concat(e instanceof Array ? e : [e]) }, []) }
var expandMethods = function(m, seen){
seen = seen || new Set()
if(seen.has(m)){
seen = seen || []
if(seen.indexOf(m) >= 0){
throw new Error('Sort method loop detected.')
} else {
seen.add(m)
}
var methods = that.config['sort-methods'] || []
return (m instanceof Array ? m : splitMethods(m))
.map(function(m){
var a = SortActions.__sort_methods__[m]
|| (that.__sort_methods__ && that.__sort_methods__[m])
// expand local aliases...
return m in that.config['sort-methods'] ?
expandMethods(that.config['split-methods'], seen)
return m in methods ?
expandMethods(methods[m], seen.concat([m]))
// expand system aliases...
: typeof(a) == typeof('str') ?
expandMethods(a, seen)
expandMethods(a, seen.concat([m]))
: a instanceof Array ?
a
: m })
// merge...
.reduce(function(r, e){
return e instanceof Array ? r.concat(e) : r.push(e) }, []) }
return r.concat(e instanceof Array ? e : [e]) }, []) }
// expand method names...
// XXX should this be recursive???
method = splitMethods(method)
.map(function(m){
return m in that.config['sort-methods'] ?
splitMethods(that.config['split-methods']) : m })
// expand system aliases...
/*
method = method
.map(function(m){
var a = (SortActions.__sort_methods__[m]
|| (that.__sort_methods__ && that.__sort_methods__[m])
return typeof(a) == typeof('str') ?
splitMethods(a)
: a instanceof Array ?
a
: m })
.reduce(function(r, e){
return e instanceof Array ? r.concat(e) : r.push(e) }, [])
//*/
method = expandMethods(method)
// get the reverse arity...
var i = method.indexOf('reverse')
@ -360,6 +345,7 @@ module.SortActions = actions.Actions({
// build the compare routine...
method = method
// remove duplicate methods...
// XXX should we keep the last occurrence or the first occurrence???
.unique()
.map(function(m){
return (SortActions.__sort_methods__[m]