diff --git a/core/modules/server/routes/get-tiddlers-json.js b/core/modules/server/routes/get-tiddlers-json.js index 2c730e066..203900346 100644 --- a/core/modules/server/routes/get-tiddlers-json.js +++ b/core/modules/server/routes/get-tiddlers-json.js @@ -28,6 +28,9 @@ exports.handler = function(request,response,state) { return; } } + if(state.wiki.getTiddlerText("$:/config/SyncSystemTiddlersFromServer") === "no") { + filter += "+[!is[system]]"; + } var excludeFields = (state.queryParameters.exclude || "text").split(","), titles = state.wiki.filterTiddlers(filter); response.writeHead(200, {"Content-Type": "application/json"}); diff --git a/core/modules/syncer.js b/core/modules/syncer.js index 1ad9c3474..d5eae1f48 100644 --- a/core/modules/syncer.js +++ b/core/modules/syncer.js @@ -305,7 +305,8 @@ Syncer.prototype.syncFromServer = function() { self.pollTimerId = null; self.syncFromServer.call(self); },self.pollTimerInterval); - }; + }, + syncSystemFromServer = (self.wiki.getTiddlerText("$:/config/SyncSystemTiddlersFromServer") === "yes" ? true : false); if(this.syncadaptor && this.syncadaptor.getUpdatedTiddlers) { this.logger.log("Retrieving updated tiddler list"); cancelNextSync(); @@ -320,9 +321,11 @@ Syncer.prototype.syncFromServer = function() { self.titlesToBeLoaded[title] = true; }); $tw.utils.each(updates.deletions,function(title) { - delete self.tiddlerInfo[title]; - self.logger.log("Deleting tiddler missing from server:",title); - self.wiki.deleteTiddler(title); + if(syncSystemFromServer || !self.wiki.isSystemTiddler(title)) { + delete self.tiddlerInfo[title]; + self.logger.log("Deleting tiddler missing from server:",title); + self.wiki.deleteTiddler(title); + } }); if(updates.modifications.length > 0 || updates.deletions.length > 0) { self.processTaskQueue(); @@ -365,9 +368,11 @@ Syncer.prototype.syncFromServer = function() { } // Delete any tiddlers that were previously reported but missing this time $tw.utils.each(previousTitles,function(title) { - delete self.tiddlerInfo[title]; - self.logger.log("Deleting tiddler missing from server:",title); - self.wiki.deleteTiddler(title); + if(syncSystemFromServer || !self.wiki.isSystemTiddler(title)) { + delete self.tiddlerInfo[title]; + self.logger.log("Deleting tiddler missing from server:",title); + self.wiki.deleteTiddler(title); + } }); self.processTaskQueue(); }); diff --git a/core/wiki/config/SyncFilter.tid b/core/wiki/config/SyncFilter.tid index 41d71537c..06b3f192f 100644 --- a/core/wiki/config/SyncFilter.tid +++ b/core/wiki/config/SyncFilter.tid @@ -1,3 +1,3 @@ title: $:/config/SyncFilter -[is[tiddler]] -[[$:/core]] -[prefix[$:/StoryList]] -[prefix[$:/HistoryList]] -[status[pending]plugin-type[import]] -[[$:/isEncrypted]] -[prefix[$:/status/]] -[prefix[$:/state/]] -[prefix[$:/temp/]] +[is[tiddler]] -[[$:/core]] -[[$:/library/sjcl.js]] -[prefix[$:/boot/]] -[prefix[$:/HistoryList]] -[status[pending]plugin-type[import]] -[[$:/isEncrypted]] -[prefix[$:/status/]] -[prefix[$:/state/]] -[prefix[$:/temp/]] diff --git a/core/wiki/config/SyncSystemTiddlersFromServer.tid b/core/wiki/config/SyncSystemTiddlersFromServer.tid new file mode 100644 index 000000000..32fcb7a46 --- /dev/null +++ b/core/wiki/config/SyncSystemTiddlersFromServer.tid @@ -0,0 +1,3 @@ +title: $:/config/SyncSystemTiddlersFromServer + +no \ No newline at end of file