| 16 | | if(modelName != "GearsORM_Log" && modelName != "sqlite_master")//skip Log and sqlite_master tables |
| 17 | | GearsORM._models[modelName].addListener("onAfterSave",function(instance) |
| 18 | | { |
| 19 | | GearsORM.Sync._onChange(instance,1); |
| 20 | | }) |
| 21 | | .addListener("onBeforeRemove",function(instance)//this is not the best need to be sure that it was removed |
| 22 | | { |
| 23 | | GearsORM.Sync._onChange(instance,0); |
| 24 | | }); |
| | 22 | { |
| | 23 | var model = GearsORM._models[modelName]; |
| | 24 | if(model.options.log && !model.options._logSetupDone)//log only tables with log option set to true |
| | 25 | model.addListener("onAfterSave",function(instance) |
| | 26 | { |
| | 27 | GearsORM.Sync._onChange(instance, |
| | 28 | GearsORM.getDB().lastInsertRowId == instance.rowid ? |
| | 29 | GearsORM.Sync.ACTIONS.INSERT : GearsORM.Sync.ACTIONS.UPDATE ); |
| | 30 | }) |
| | 31 | .addListener("onBeforeRemove",function(instance)//this is not the best need to be sure that it was removed |
| | 32 | { |
| | 33 | GearsORM.Sync._onChange(instance,GearsORM.Sync.ACTIONS.DELETE); |
| | 34 | }).options._logSetupDone = true; |
| | 35 | } |
| 34 | | if(!saved)//remove log about save when object is deleted |
| 35 | | GearsORM.Sync.Log.remove("modelName = ? AND id = ? AND saved = ?",[modelName,id,1]); |
| | 45 | if(action == GearsORM.Sync.ACTIONS.DELETE)//remove log when object is deleted |
| | 46 | GearsORM.Sync.Log.remove("modelName = ? AND id = ? AND action <> ?",[modelName,id,GearsORM.Sync.ACTIONS.DELETE]); |
| | 47 | }, |
| | 48 | syncUp:function() |
| | 49 | { |
| | 50 | var objectIDS = {},objects={},deletedObjects={}; |
| | 51 | GearsORM.Sync.Log.select().each(function(log) |
| | 52 | { |
| | 53 | if(log.action == GearsORM.Sync.ACTIONS.DELETE) |
| | 54 | { |
| | 55 | if(!deletedObjects[log.modelName]) deletedObjects[log.modelName] = [log.id]; |
| | 56 | else deletedObjects[log.modelName].push(log.id); |
| | 57 | } |
| | 58 | else |
| | 59 | { |
| | 60 | if(!objectIDS[log.modelName]) objectIDS[log.modelName] = [log.id]; |
| | 61 | else objectIDS[log.modelName].push(log.id); |
| | 62 | } |
| | 63 | }); |
| | 64 | GearsORM.Transaction(function() |
| | 65 | { |
| | 66 | for(var modelName in objectIDS) |
| | 67 | //TODO:add a new method to return objects as raw objects |
| | 68 | objects[modelName] = GearsORM._models[modelName].select("rowid IN (" + objectIDS[modelName].join(",")+ ")").toArray(); |
| | 69 | }); |
| | 70 | objects.deletedObjects = deletedObjects; |
| | 71 | return objects; |
| | 72 | }, |
| | 73 | syncDown:function(syncObject) |
| | 74 | { |
| | 75 | GearsORM.Transaction(function() |
| | 76 | { |
| | 77 | var deletedObjects = syncObject.deletedObjects; |
| | 78 | delete syncObject.deletedObjects; |
| | 79 | //save new objects |
| | 80 | for(var modelName in syncObject) |
| | 81 | { |
| | 82 | var model = GearsORM._models[modelName],l=syncObject[modelName],ln=l.length; |
| | 83 | for(var i=0;ln>i;i++) |
| | 84 | { |
| | 85 | new model(l[i]).save(); |
| | 86 | } |
| | 87 | } |
| | 88 | //delete old objects |
| | 89 | for(var modelName in deletedObjects) |
| | 90 | GearsORM._models[modelName].remove("rowid IN ("+deletedObjects[modelName].join(",")+")"); |
| | 91 | //clean up log |
| | 92 | GearsORM.Sync.Log.remove(); |
| | 93 | }); |