send changes note.update [ok]

This commit is contained in:
life
2015-01-26 23:42:56 +08:00
parent b65a997cc8
commit 218671f53a
5 changed files with 133 additions and 18 deletions

28
node_modules/api.js generated vendored
View File

@@ -322,18 +322,34 @@ var Api = {
//--------
// 获取笔记
// noteId是serverNoteId
getNote: function(noteId, callback) {
needle.get(this.getUrl('note/getNote', {NoteId: noteId}), function(error, response) {
if(error) {
return callback && callback(false);
}
var ret = response.body;
if(Common.isOk(ret)) {
callback && callback(ret);
} else {
log(error);
callback && callback(false);
}
});
},
// 添加
addNote: function(note, callback) {
var me = this;
// note.NotebookId是本的, 要得到远程的
Notebook.getServerNotebookIdByNotebookId(notebook.NotebookId, function(serverNotebookId) {
Notebook.getServerNotebookIdByNotebookId(note.NotebookId, function(serverNotebookId) {
var data = {
title: note.Title,
notebookId: serverNotebookId
notebookId: serverNotebookId,
content: note.Content,
isMarkdown: note.isMarkdown,
Tags: note.Tags,
IsBlog: note.IsBlog
}
log('add note');
log(data);
@@ -342,6 +358,7 @@ var Api = {
return callback(false);
}
var ret = resp.body;
log('add note ret');
log(ret);
if(Common.isOk(ret)) {
callback(ret);
@@ -354,13 +371,14 @@ var Api = {
// 更新
updateNote: function(note, callback) {
var me = this;
Notebook.getServerNotebookIdByNotebookId(notebook.NotebookId, function(serverNotebookId) {
Notebook.getServerNotebookIdByNotebookId(note.NotebookId, function(serverNotebookId) {
var data = {
noteId: note.ServerNoteId,
notebookId: serverNotebookId || "",
title: note.Title,
usn: note.Usn,
isTrash: note.IsTrash
isTrash: note.IsTrash,
content: note.Content
}
log('update note');
log(data);

47
node_modules/note.js generated vendored
View File

@@ -329,6 +329,23 @@ var Note = {
});
},
// 添加修改ServerNoteId; 更新修改usn
updateNoteForceForSendChange: function(note, callback) {
var me = this;
note.IsDirty = false;
note.InitSync = false;
note.LocalIsNew = false;
Notes.update({NoteId: note.NoteId}, {$set: note}, function(err, n) {
if(err || !n) {
log('updateNoteForceForSendChange err');
log(err);
return callback && callback(false);
}
return callback && callback(true);
});
},
// 服务器上的数据
// 为冲突更新, note已有有NoteId, ServerNoteId, 但NotebookId是服务器端的
updateNoteForceForConflict: function(note, callback) {
@@ -338,7 +355,7 @@ var Note = {
note.LocalIsNew = false;
Notebook.getNotebookIdByServerNotebookId(note.NotebookId, function(localNotebookId) {
note['NotebookId'] = localNotebookId;
Notes.update({NoteId: localNoteId}, {$set: note}, {}, function (err, cnt) { // Callback is optional
Notes.update({NoteId: note.NoteId}, {$set: note}, {}, function (err, cnt) { // Callback is optional
if(err) {
console.log(err);
callback && callback(false);
@@ -392,20 +409,21 @@ var Note = {
var conflictNotes = noteSyncInfo.conflicts;
log('fix note conflicts');
log(conflictNotes);
// 这里为什么要同步? 因为fixConflicts后要进行send changes, 这些有冲突的不能发送changes
if(conflictNotes) {
async.eachSeries(conflictNotes, function(note, cb) {
var noteId = note.NoteId;
async.eachSeries(conflictNotes, function(note, cb) { // note是服务器上最新的
var noteId = note.NoteId; // 本地noteId
// 复制一份
me.copyNoteForConfict(noteId, function(newNote) {
if(newNote) {
// 更新之前的
me.updateNoteForceForConflict(note, function(err, note2) {
cb();
if(!err) {
me.updateNoteForceForConflict(note, function(note2) {
if(note2) {
// 前端来处理, 全量sync时不用前端一个个处理
noteWeb && noteWeb.fixSyncConflict(note2, newNote);
}
cb();
});
} else {
cb();
@@ -473,13 +491,26 @@ var Note = {
// 处理删除的
noteWeb.deleteSync(noteSyncInfo.deletes);
},
// 获得用户修改的笔记
getDirtyNotes: function(callback) {
Notes.find({UserId: User.getCurActiveUserId(), IsDirty: true}, function(err, notes) {
if(err) {
log(err);
return callback && callback(false);
} else {
callback(notes);
}
});
},
// 在send delete笔记时成功
setNotDirty: function(noteId) {
NB.update({NoteId: noteId}, {$set:{IsDirty: false}})
Notes.update({NoteId: noteId}, {$set:{IsDirty: false}})
},
// 在send delete笔记时有冲突, 设为不删除
setNotDirtyNotDelete: function(noteId) {
NB.update({NoteId: noteId}, {$set:{IsDirty: false, LocalIsDelete: false}})
Notes.update({NoteId: noteId}, {$set:{IsDirty: false, LocalIsDelete: false}})
},
setIsNew: function(noteId) {
Notes.update({NoteId: noteId}, {$set:{LocalIsNew: true, IsDirty: true}})

4
node_modules/notebook.js generated vendored
View File

@@ -280,13 +280,13 @@ var Notebook = {
//
// 更新笔记本, NoteId可能也要更改
// 更新笔记本, NotebookId可能也要更改
// notebook是服务器传过来的
updateNotebookForceForSendChange: function(notebookId, notebook, callback) {
var me = this;
notebook.IsDirty = false;
notebook.LocalIsNew = false;
notebook.ServerNotebookId = notebook.NotebookId;
notebook.ServerNotebookId = notebook.NotebookId; // ? 怎么可能要改呢? 因为这可能是添加后的笔记本
me.getNotebookIdByServerNotebookId(notebook.ParentNotebookId, function(parentNotebookId) {
notebook.ParentNotebookId = parentNotebookId;
NB.update({NotebookId: notebookId}, {$set: notebook}, {}, function (err, n) {

59
node_modules/sync.js generated vendored
View File

@@ -268,7 +268,7 @@ var Sync = {
// 2.2 本地是否修改了, 冲突, 报告给前端, 前端处理
// 冲突, 将本地修改的笔记复制一份(设置冲突字段, ConflictNoteId), 远程的覆盖本地的
if(noteLocal.IsDirty) {
log('冲突....')
log('note 冲突....')
note.ServerNoteId = note.NoteId;
note.NoteId = noteLocal.NoteId;
me._syncInfo.note.conflicts.push(note);
@@ -477,6 +477,7 @@ var Sync = {
}
else {
// 更新
// TODO 后端updateNotebook只要传Usn回来即可
Notebook.updateNotebookForceForSendChange(notebook.NotebookId, newNotebook);
if(notebook.LocalIsNew) {
@@ -527,14 +528,67 @@ var Sync = {
// 调api, 所有执行后再callback();
// 一个一个同步执行, 因为要有
async.eachSeries(notes, function(note, cb) {
/*
var api = Api.updateNote;
if(note.LocalIsNew) {
api = Api.addNote;
} else if(note.LocalIsDelete) {
api = Api.deleteNote;
}
*/
api.call(Api, note, function(newNote) {
if(note.LocalIsNew) {
// 添加
Api.addNote(note, function(newNote) {
if(!Common.isOk(newNote)) {
return cb();
}
newNote.ServerNoteId = newNote.NoteId;
newNote.NoteId = note.NoteId;
me._syncInfo.note.changeAdds.push(newNote);
Note.updateNoteForceForSendChange(newNote);
me.checkNeedIncSyncAgain(newNote.Usn);
cb();
});
} else if(note.LocalIsDelete) {
// 删除, 不管它了
// TODO
Api.deleteTrash(note, function(ret) {
if(!Common.isOk(ret)) {
return cb();
}
});
} else {
// 更新
Api.updateNote(note, function(ret) {
if(!Common.isOk(ret)) {
if(typeof ret == 'object') {
if(ret.msg == 'conflict') {
me._syncInfo.note.changeConflicts.push(note);
}
else if(newNote.Msg == 'notExists') {
// 可能服务器上已删除, 此时应该要作为添加而不是更新
me._syncInfo.note.changeNeedAdds.push(note);
}
}
return cb();
}
// 更新成功
Note.updateNoteForceForSendChange({NoteId: note.NoteId, Usn: ret.Usn});
me.checkNeedIncSyncAgain(ret.Usn);
return cb();
});
}
//...... 过时
/*
api.call(Api, note, function(ret) {
// 更新失败
if(!newNote) {
return cb();
@@ -573,6 +627,7 @@ var Sync = {
}
cb();
});
*/
}, function() {
callback && callback();
});

13
test.js
View File

@@ -3,6 +3,7 @@
var Notebook = require('notebook');
var Note = require('note');
var Api = require('api');
var User = require('user');
var Server = require('server');
/*
@@ -10,11 +11,21 @@ Notebook.addNotebook("1", "life");
Notebook.addNotebook("2", "生活");
Notebook.addNotebook("3", "工作");
Notebook.addNotebook("4", "life2", "1");
*/
Api.addNotebook({
Title: "哈哈"
}, function() {});
*/
User.userId = '54bdc65599c37b0da9000002';
console.log(User.getCurActiveUserId());
Note.getDirtyNotes(function(ret) {
console.log(ret);
});
/*
Note.getNoteByServerNoteId("54c6313799c37bdeec000008", function(ret){
console.log(ret);
});
*/
// Api.auth('c@a.com', 'abc123');