| 115 | | st.syncMachine = new SyncMachine(st.serverType,{ |
| 116 | | start: function() { |
| 117 | | return this.openHost(st.serverHost,"openWorkspace"); |
| 118 | | }, |
| 119 | | openWorkspace: function() { |
| 120 | | return this.openWorkspace(st.serverWorkspace,"getTiddlerList"); |
| 121 | | }, |
| 122 | | getTiddlerList: function() { |
| 123 | | return this.getTiddlerList("onGetTiddlerList"); |
| 124 | | }, |
| 125 | | onGetTiddlerList: function(context) { |
| 126 | | var tiddlers = context.tiddlers; |
| 127 | | for(var i=0; i<st.syncItems.length; i++) { |
| 128 | | var si = st.syncItems[i]; |
| 129 | | var f = tiddlers.findByField("title",si.title); |
| 130 | | if(f !== null) { |
| 131 | | if(tiddlers[f].fields['server.page.revision'] > si.tiddler.fields['server.page.revision']) { |
| 132 | | si.syncStatus = config.macros.sync.syncStatusList[si.isTouched ? 'changedBoth' : 'changedServer']; |
| 133 | | } |
| 134 | | } else { |
| 135 | | si.syncStatus = config.macros.sync.syncStatusList.notFound; |
| | 116 | |
| | 117 | var openWorkspaceCallback = function(context,syncItems) { |
| | 118 | if(context.status) { |
| | 119 | context.adaptor.getTiddlerList(context,syncItems,getTiddlerListCallback); |
| | 120 | return true; |
| | 121 | } |
| | 122 | displayMessage(context.statusText); |
| | 123 | return false; |
| | 124 | }; |
| | 125 | |
| | 126 | var getTiddlerListCallback = function(context,sycnItems) { |
| | 127 | if(!context.status) { |
| | 128 | displayMessage(context.statusText); |
| | 129 | return false; |
| | 130 | } |
| | 131 | syncItems = context.userParams; |
| | 132 | var tiddlers = context.tiddlers; |
| | 133 | for(var i=0; i<syncItems.length; i++) { |
| | 134 | var si = syncItems[i]; |
| | 135 | var f = tiddlers.findByField("title",si.title); |
| | 136 | if(f !== null) { |
| | 137 | if(tiddlers[f].fields['server.page.revision'] > si.tiddler.fields['server.page.revision']) { |
| | 138 | si.syncStatus = config.macros.sync.syncStatusList[si.isTouched ? 'changedBoth' : 'changedServer']; |
| 139 | | }, |
| 140 | | getTiddler: function(title) { |
| 141 | | return this.getTiddler(title,"onGetTiddler"); |
| 142 | | }, |
| 143 | | onGetTiddler: function(context) { |
| 144 | | var tiddler = context.tiddler; |
| 145 | | var syncItem = st.syncItems.findByField("title",tiddler.title); |
| 146 | | if(syncItem !== null) { |
| 147 | | syncItem = st.syncItems[syncItem]; |
| 148 | | store.saveTiddler(tiddler.title, tiddler.title, tiddler.text, tiddler.modifier, tiddler.modified, tiddler.tags, tiddler.fields, true, tiddler.created); |
| 149 | | syncItem.syncStatus = config.macros.sync.syncStatusList.gotFromServer; |
| 150 | | config.macros.sync.updateSyncStatus(syncItem); |
| 151 | | } |
| 152 | | }, |
| 153 | | putTiddler: function(tiddler) { |
| 154 | | return this.putTiddler(tiddler,"onPutTiddler"); |
| 155 | | }, |
| 156 | | onPutTiddler: function(context) { |
| 157 | | var title = context.title; |
| 158 | | var syncItem = st.syncItems.findByField("title",title); |
| 159 | | if(syncItem !== null) { |
| 160 | | syncItem = st.syncItems[syncItem]; |
| 161 | | store.resetTiddler(title); |
| 162 | | if(context.status) { |
| 163 | | syncItem.syncStatus = config.macros.sync.syncStatusList.putToServer; |
| 164 | | config.macros.sync.updateSyncStatus(syncItem); |
| 165 | | } |
| 166 | | } |
| | 143 | config.macros.sync.updateSyncStatus(si); |
| | 163 | var getTiddlerCallback = function(context,syncItem) { |
| | 164 | if(syncItem) { |
| | 165 | var tiddler = context.tiddler; |
| | 166 | store.saveTiddler(tiddler.title,tiddler.title,tiddler.text,tiddler.modifier,tiddler.modified,tiddler.tags,tiddler.fields,true,tiddler.created); |
| | 167 | syncItem.syncStatus = config.macros.sync.syncStatusList.gotFromServer; |
| | 168 | config.macros.sync.updateSyncStatus(syncItem); |
| | 169 | } |
| | 170 | }; |
| | 171 | var putTiddlerCallback = function(context,syncItem) { |
| | 172 | if(syncItem) { |
| | 173 | store.resetTiddler(context.title); |
| | 174 | syncItem.syncStatus = config.macros.sync.syncStatusList.putToServer; |
| | 175 | config.macros.sync.updateSyncStatus(syncItem); |
| | 176 | } |
| | 177 | }; |
| | 178 | |
| 208 | | |
| 209 | | function SyncMachine(serverType,steps) |
| 210 | | { |
| 211 | | this.serverType = serverType; |
| 212 | | this.adaptor = new config.adaptors[serverType](); |
| 213 | | this.steps = steps; |
| 214 | | } |
| 215 | | |
| 216 | | SyncMachine.prototype.go = function(step,context) |
| 217 | | { |
| 218 | | var r = context ? context.status : null; |
| 219 | | if(typeof r == "string") { |
| 220 | | this.invokeError(r); |
| 221 | | return r; |
| 222 | | } |
| 223 | | var h = this.steps[step ? step : "start"]; |
| 224 | | if(!h) |
| 225 | | return null; |
| 226 | | r = h.call(this,context); |
| 227 | | if(typeof r == "string") |
| 228 | | this.invokeError(r); |
| 229 | | return r; |
| 230 | | }; |
| 231 | | |
| 232 | | SyncMachine.prototype.invokeError = function(message) |
| 233 | | { |
| 234 | | if(this.steps.error) |
| 235 | | this.steps.error(message); |
| 236 | | }; |
| 237 | | |
| 238 | | SyncMachine.prototype.openHost = function(host,nextStep) |
| 239 | | { |
| 240 | | var me = this; |
| 241 | | return me.adaptor.openHost(host,null,null,function(context) {me.go(nextStep,context);}); |
| 242 | | }; |
| 243 | | |
| 244 | | SyncMachine.prototype.getWorkspaceList = function(nextStep) |
| 245 | | { |
| 246 | | var me = this; |
| 247 | | return me.adaptor.getWorkspaceList(null,null,function(context) {me.go(nextStep,context);}); |
| 248 | | }; |
| 249 | | |
| 250 | | SyncMachine.prototype.openWorkspace = function(workspace,nextStep) |
| 251 | | { |
| 252 | | var me = this; |
| 253 | | return me.adaptor.openWorkspace(workspace,null,null,function(context) {me.go(nextStep,context);}); |
| 254 | | }; |
| 255 | | |
| 256 | | SyncMachine.prototype.getTiddlerList = function(nextStep) |
| 257 | | { |
| 258 | | var me = this; |
| 259 | | return me.adaptor.getTiddlerList(null,null,function(context) {me.go(nextStep,context);}); |
| 260 | | }; |
| 261 | | |
| 262 | | SyncMachine.prototype.generateTiddlerInfo = function(tiddler) |
| 263 | | { |
| 264 | | return this.adaptor.generateTiddlerInfo(tiddler); |
| 265 | | }; |
| 266 | | |
| 267 | | SyncMachine.prototype.getTiddler = function(title,nextStep) |
| 268 | | { |
| 269 | | var me = this; |
| 270 | | return me.adaptor.getTiddler(title,null,null,function(context) {me.go(nextStep,context);}); |
| 271 | | }; |
| 272 | | |
| 273 | | SyncMachine.prototype.putTiddler = function(tiddler,nextStep) |
| 274 | | { |
| 275 | | var me = this; |
| 276 | | return me.adaptor.putTiddler(tiddler,null,null,function(context) {me.go(nextStep,context);}); |
| 277 | | }; |
| 278 | | |