storing collections in index done, still needs testing...

Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
Alex A. Naanou 2017-10-02 01:35:09 +03:00
parent dd0b7f0842
commit ec748636f2
5 changed files with 96 additions and 11 deletions

View File

@ -657,6 +657,10 @@ core.ImageGridFeatures.Feature({
var changes = res.changes var changes = res.changes
if(!changes){
return
}
// data... // data...
if(changes === true || changes.data){ if(changes === true || changes.data){
res.index.data = res.raw.data res.index.data = res.raw.data
@ -1289,6 +1293,10 @@ module.TagsEdit = core.ImageGridFeatures.Feature({
function(res){ function(res){
var changes = res.changes var changes = res.changes
if(!changes){
return
}
if((changes === true || changes.tags) && res.raw.data.tags){ if((changes === true || changes.tags) && res.raw.data.tags){
res.index.tags = res.raw.data.tags res.index.tags = res.raw.data.tags
} }

View File

@ -1100,23 +1100,73 @@ module.Collection = core.ImageGridFeatures.Feature({
} }
}], }],
// update current collection changes...
//
// This will:
// 1) update .changes['collection: <gid>'] with the current
// loaded .changes state...
// 2) in 'base' mode, update the res.changes with base data
// changes...
//
// NOTE: we do not need to do anything on the .load(..) side...
['json.pre',
function(mode){
var cur = this.collection || MAIN_COLLECTION_TITLE
if(cur == null || cur == MAIN_COLLECTION_TITLE){
return
}
var changes = this.changes
// everything/nothing changed -- nothing to do...
if(!changes || changes === true || changes[cur] === true){
return
}
var gid = this.collectionGID
var id = 'collection: '+ JSON.stringify(gid)
var change_tags = this.config['collection-transfer-changes'] || ['data']
var changed = change_tags
.filter(function(tag){
return changes[tag] === true })
if(changed.length){
this.changes[id] = (this.changes[id] || [])
.concat(changed)
.unique() }
// reset the base change tags to the base data (from collection data)...
if(mode == 'base'){
return function(res){
var base_id = 'collection: '+ JSON.stringify(MAIN_COLLECTION_GID)
var base = this.changes[base_id] || []
// no need to save the base collection changes...
delete res.changes[base_id]
// clear...
change_tags.forEach(function(tag){
delete res.changes[tag] })
// set...
base.forEach(function(tag){
res.changes[tag] = true })
}
}
}],
// XXX account for 'base' mode changes... (???)
// use : .config['collection-transfer-changes']
// XXX might be a good idea to replace 'full' with changes to
// override .changes...
// XXX need to account for collection local .changes...
// XXX might be a good idea to build local changes in 'prepareIndexForWrite.pre'...
// ...or build and include .changes in .json(..)
['prepareIndexForWrite', ['prepareIndexForWrite',
function(res){ function(res){
if(!res.changes){
return
}
var that = this var that = this
var changed = res.changes === true var changed = res.changes === true
|| res.changes.collections || res.changes.collections
var collections = this.collections var collections = this.collections
// collections partially changed... // collections partially changed...
var partial = Object.keys(this.collections) var partial = Object.keys(collections || {})
.filter(function(t){ .filter(function(t){
return res.changes['collection: ' return res.changes['collection: '
+ JSON.stringify(collections[t].gid)] }) + JSON.stringify(collections[t].gid)] })
@ -1143,6 +1193,8 @@ module.Collection = core.ImageGridFeatures.Feature({
.forEach(function(title){ .forEach(function(title){
index[collections[title].gid || title] = title }) index[collections[title].gid || title] = title })
var change_tags = this.config['collection-transfer-changes'] || ['data']
changed changed
// skip the raw field... // skip the raw field...
.filter(function(k){ .filter(function(k){
@ -1176,12 +1228,16 @@ module.Collection = core.ImageGridFeatures.Feature({
var prepared = that.prepareIndexForWrite(raw, local_changes).index var prepared = that.prepareIndexForWrite(raw, local_changes).index
// move the collection data to collection path... // move the collection data to collection path...
// XXX do we need to cleanup metadata???
Object.keys(prepared) Object.keys(prepared)
.forEach(function(key){ .forEach(function(key){
res.index[path +'/'+ key] = prepared[key] res.index[path +'/'+ key] = prepared[key]
delete metadata[key] delete metadata[key]
}) })
// cleanup metadata...
// XXX do we need this???
change_tags.forEach(function(key){
delete metadata[key]
})
}) })
} }
}], }],

View File

@ -968,6 +968,22 @@ module.Changes = ImageGridFeatures.Feature({
], ],
actions: ChangesActions, actions: ChangesActions,
handlers: [
// handle changes...
['json',
function(res, mode){
if(this.changes != null){
res.changes = JSON.parse(JSON.stringify(this.changes))
}
}],
['load',
function(_, data){
if(data.changes){
this.changes = JSON.parse(JSON.stringify(data.changes))
}
}],
],
}) })

View File

@ -152,8 +152,9 @@ var IndexFormatActions = actions.Actions({
function(json, changes){ function(json, changes){
json = json || this.json('base') json = json || this.json('base')
changes = changes !== undefined ? changes changes = changes !== undefined ? changes
: this.hasOwnProperty('changes') ? this.changes : json.changes
: null //: this.hasOwnProperty('changes') ? this.changes
//: null
changes = changes === null ? true : changes changes = changes === null ? true : changes
return { return {
date: json.date || Date.timeStamp(), date: json.date || Date.timeStamp(),

View File

@ -539,6 +539,10 @@ module.Sort = core.ImageGridFeatures.Feature({
function(res){ function(res){
var c = res.changes var c = res.changes
if(!c){
return
}
;['sort_order', 'sort_cache'] ;['sort_order', 'sort_cache']
.forEach(function(attr){ .forEach(function(attr){
if((c === true || c[attr]) && res.raw.data[attr]){ if((c === true || c[attr]) && res.raw.data[attr]){