incr 同步完成, 待send changes

This commit is contained in:
life
2015-01-24 14:41:24 +08:00
parent 6aef83697c
commit 93e5d7be6e
12 changed files with 411 additions and 62 deletions

107
node_modules/sync.js generated vendored
View File

@@ -79,8 +79,11 @@ var Sync = {
me._addSyncNotebookNum();
log(me._totalHasSyncNotebookNum + ' ' + me._totalSyncNotebookNum);
if(me._syncNotebookIsLastChunk && me._totalHasSyncNotebookNum >= me._totalSyncNotebookNum) {
me._syncInfo.notebook.ok = true;
callback && callback(true);
// 防止多次callback
if(!me._syncInfo.notebook.ok) {
me._syncInfo.notebook.ok = true;
callback && callback(true);
}
}
}
@@ -184,18 +187,28 @@ var Sync = {
// 同步笔记到本地
_syncNoteToLocal: function(notes, callback) {
var me = this;
function canCall() {
function canCall(isEmpty) {
// 为空时来判断是最后一次了, 可以之前的还没处理完
if(isEmpty && me._totalHasSyncNoteNum < me._totalSyncNoteNum) {
return;
}
// 是最后一块, 且
me._addSyncNoteNum();
log('notes: ' + me._totalHasSyncNoteNum + ' ' + me._totalSyncNoteNum + ' ' + me._syncNoteIsLastChunk);
// log('notes: ' + me._totalHasSyncNoteNum + ' ' + me._totalSyncNoteNum + ' ' + me._syncNoteIsLastChunk);
if(me._syncNoteIsLastChunk && me._totalHasSyncNoteNum >= me._totalSyncNoteNum) {
me._syncInfo.note.ok = true;
callback && callback(true);
// 防止多次callback
if(!me._syncInfo.note.ok) {
log('note->next');
me._syncInfo.note.ok = true;
callback && callback(true);
}
}
}
// 为什么会出现最后 > 的情况, 是因为这里length == 0 也判断了
if(!notes || notes.length == 0) {
return canCall();
return canCall(true);
}
for(var i in notes) {
@@ -229,7 +242,7 @@ var Sync = {
} else {
// 2.2 本地是否修改了, 冲突, 报告给前端, 前端处理
// 冲突, 将本地修改的笔记复制一份(设置冲突字段, ConflictNoteId), 远程的覆盖本地的
if(note.IsDirty) {
if(noteLocal.IsDirty) {
log('冲突....')
me._syncInfo.note.conflicts.push(note);
return canCall();
@@ -258,7 +271,7 @@ var Sync = {
me._totalSyncNoteNum += notes.length;
// 证明可能还有要同步的
if(notes.length == me._noteMaxEntry) {
me._syncNoteToLocal(notes);
me._syncNoteToLocal(notes, callback);
var last = notes[notes.length-1];
me.syncNote(last.Usn, callback);
} else {
@@ -281,6 +294,11 @@ var Sync = {
callback && callback(true);
},
// 记录LastSyncUsn, LastUpdateTime 同步时间
updateLastSyncState: function() {
var me = this;
User.updateLastSyncState();
},
// 全量同步
fullSync: function(callback) {
@@ -296,7 +314,11 @@ var Sync = {
if(ok) {
// 同步标签
me.syncTag(-1, function() {
callback && callback(me._syncInfo);
// 更新上次同步时间
me.updateLastSyncState();
// send changes
me.sendChanges(callback);
});
} else {
callback && callback(me._syncInfo);
@@ -309,30 +331,71 @@ var Sync = {
});
},
// 增量同步
incrSync: function() {
_notebookWeb: null,
_noteWeb: null,
// 处理冲突
fixConflicts: function() {
var me = this;
log('--------------')
log(me._syncInfo);
log(me._syncInfo.note.updates);
Notebook.fixConflicts(me._syncInfo.notebook, me._notebookWeb);
Note.fixConflicts(me._syncInfo.note, me._noteWeb);
},
// 增量同步
incrSync: function(notebookWeb, noteWeb) {
var me = this;
me._notebookWeb = notebookWeb;
me._noteWeb = noteWeb;
me._initSyncInfo();
log('full sync start');
log('inc sync start');
// 得到当前LastSyncUsn
User.getLastSyncInfo(function(lastSyncUsn, lastSyncTime) {
User.getLastSyncState(function(lastSyncUsn, lastSyncTime) {
// 没有上次同步的时间, 则需要进行一次全量同步, 不可能会发生
if(!lastSyncUsn) {
log('error!!');
return;
}
// 同步笔记本
me.syncNotebook(-1, function() {
// 同步笔记
me.syncNote(-1, function() {
// 同步标签
me.syncTag(-1, function() {
callback && callback(me._syncInfo);
me.syncNotebook(lastSyncUsn, function(ok) {
if(ok) {
log('-------incr notebook ok-----------')
// 同步笔记
me.syncNote(lastSyncUsn, function(ok) {
if(ok) {
log('-------incr note ok-----------')
// 同步标签
me.syncTag(lastSyncUsn, function() {
log('-------incr tag ok-----------')
// 更新上次同步时间
me.updateLastSyncState();
// send changes
me.sendChanges();
});
} else {
log('-------incr note not ok-----------')
me.fixConflicts();
}
});
});
} else {
me.fixConflicts();
}
});
});
},
// 发送改变
sendChanges: function() {
sendChanges: function(callback) {
var me = this;
// 先处理冲突
me.fixConflicts();
callback && callback();
}
};