//-- //-- Sync macro //-- // Synchronisation handlers config.syncers = {}; // Sync state. //# Members: //# syncList - List of sync objects (title, tiddler, server, workspace, page, revision) //# wizard - reference to wizard object //# listView - DOM element of the listView table var currSync = null; // sync macro config.macros.sync.handler = function(place,macroName,params,wikifier,paramString,tiddler) { if(!wikifier.isStatic) this.startSync(place); }; config.macros.sync.cancelSync = function() { currSync = null; }; config.macros.sync.startSync = function(place) { if(currSync) config.macros.sync.cancelSync(); currSync = {}; currSync.syncList = this.getSyncableTiddlers(); currSync.syncTasks = this.createSyncTasks(currSync.syncList); this.preProcessSyncableTiddlers(currSync.syncList); var wizard = new Wizard(); currSync.wizard = wizard; wizard.createWizard(place,this.wizardTitle); wizard.addStep(this.step1Title,this.step1Html); var markList = wizard.getElement("markList"); var listWrapper = document.createElement("div"); markList.parentNode.insertBefore(listWrapper,markList); currSync.listView = ListView.create(listWrapper,currSync.syncList,this.listViewTemplate); this.processSyncableTiddlers(currSync.syncList); wizard.setButtons([{caption: this.syncLabel, tooltip: this.syncPrompt, onClick: this.doSync}]); }; config.macros.sync.getSyncableTiddlers = function() { var list = []; store.forEachTiddler(function(title,tiddler) { var syncItem = {}; syncItem.serverType = tiddler.getServerType(); syncItem.serverHost = tiddler.fields['server.host']; if(syncItem.serverType && syncItem.serverHost) { syncItem.adaptor = new config.adaptors[syncItem.serverType](); syncItem.serverHost = syncItem.adaptor.fullHostName(syncItem.serverHost); syncItem.serverWorkspace = tiddler.fields['server.workspace']; syncItem.tiddler = tiddler; syncItem.title = tiddler.title; syncItem.isTouched = tiddler.isTouched(); syncItem.selected = syncItem.isTouched; syncItem.syncStatus = config.macros.sync.syncStatusList[syncItem.isTouched ? "changedLocally" : "none"]; syncItem.status = syncItem.syncStatus.text; list.push(syncItem); } }); list.sort(function(a,b) {return a.title < b.title ? -1 : (a.title == b.title ? 0 : +1);}); return list; }; config.macros.sync.preProcessSyncableTiddlers = function(syncList) { var i; for(i=0; i si.tiddler.fields['server.page.revision']) { si.syncStatus = me.syncStatusList[si.isTouched ? 'changedBoth' : 'changedServer']; } } else { si.syncStatus = me.syncStatusList.notFound; } me.updateSyncStatus(si); } return true; }; var openWorkspaceCallback = function(context,syncItems) { if(context.status) { context.adaptor.getTiddlerList(context,syncItems,getTiddlerListCallback); return true; } displayMessage(context.statusText); return false; }; var context = {host:st.serverHost,workspace:st.serverWorkspace}; syncItem.adaptor.openHost(st.serverHost); syncItem.adaptor.openWorkspace(st.serverWorkspace,context,st.syncItems,openWorkspaceCallback); return st; }; config.macros.sync.updateSyncStatus = function(syncItem) { var e = syncItem.colElements["status"]; jQuery(e).empty(); createTiddlyText(e,syncItem.syncStatus.text); syncItem.rowElement.style.display = syncItem.syncStatus.display; if(syncItem.syncStatus.className) syncItem.rowElement.className = syncItem.syncStatus.className; }; config.macros.sync.doSync = function(e) { var me = config.macros.sync; var getTiddlerCallback = function(context,syncItem) { if(syncItem) { var tiddler = context.tiddler; store.saveTiddler(tiddler.title,tiddler.title,tiddler.text,tiddler.modifier,tiddler.modified,tiddler.tags,tiddler.fields,true,tiddler.created); syncItem.syncStatus = me.syncStatusList.gotFromServer; me.updateSyncStatus(syncItem); } }; var putTiddlerCallback = function(context,syncItem) { if(syncItem) { store.resetTiddler(context.title); syncItem.syncStatus = me.syncStatusList.putToServer; me.updateSyncStatus(syncItem); } }; var rowNames = ListView.getSelectedRows(currSync.listView); var i,sl = me.syncStatusList; for(i=0; i