notebook:
     add [ok]

<- sync
notebook:
     add [ok]
This commit is contained in:
life
2015-01-25 22:07:08 +08:00
parent a137aada9f
commit 72232dc86e
7 changed files with 495 additions and 142 deletions

159
node_modules/notebook.js generated vendored
View File

@@ -1,4 +1,5 @@
var db = require('db');
var async = require('async');
var User = require('user');
var NB = db.notebooks;
@@ -161,14 +162,52 @@ var Notebook = {
});
},
//----------------
// 同步
//----------------
getNotebookByServerNotebookId: function(notebookId, callback) {
var me = this;
NB.findOne({ServerNotebookId: notebookId}, function(err, doc) {
if(err || !doc) {
log('不存在');
callback && callback(false);
} else {
callback && callback(doc);
}
});
},
// 通过ServerNotebookId得到NotebookId
getNotebookIdByServerNotebookId: function(serverNotebookId, callback) {
if(!serverNotebookId) {
return callback(false);
}
NB.findOne({ServerNotebookId: serverNotebookId}, function(err, notebook) {
if(err || !notebook) {
return callback(false);
}
callback(notebook.NotebookId);
});
},
// 发送changes时用 api调用
getServerNotebookIdByNotebookId: function(notebookId, callback) {
if(!serverNotebookId) {
return callback(false);
}
NB.findOne({NotebookId: notebookId}, function(err, notebook) {
if(err || !notebook) {
return callback(false);
}
callback(notebook.ServerNotebookId);
});
},
// 强制删除
deleteNotebookForce: function(notebookId, callback) {
var me = this;
NB.remove({NotebookId: notebookId}, function(err, n) {
NB.remove({ServerNotebookId: notebookId}, function(err, n) {
if(err) {
callback && callback(false);
} else {
@@ -176,41 +215,69 @@ var Notebook = {
}
});
},
// 添加笔记本, notebook object
// 这里的notebook是服务器传过来的数据, 需要fix下,
addNotebookForce: function(notebook, callback) {
NB.insert(notebook, function (err, newDoc) { // Callback is optional
if(err) {
console.log(err);
callback && callback(false);
var me = this;
notebook.ServerNotebookId = notebook.NotebookId;
// notebook.NotebookId = Common.objectId();
notebook.NotebookId = notebook.NotebookId; // 就采用服务器的, 怕失去了层级
me.getNotebookIdByServerNotebookId(notebook.ParentNotebookId, function(parentNotebookId) {
// 如果是第一次添加可能会有问题, 数据库还没有数据, 那么还找不到
if(parentNotebookId) {
notebook.ParentNotebookId = parentNotebookId;
} else {
callback && callback(newDoc);
// 否则, 就用服务器上的
}
NB.insert(notebook, function (err, newDoc) { // Callback is optional
if(err) {
console.log(err);
callback && callback(false);
} else {
callback && callback(newDoc);
}
});
});
},
// 更新笔记本
// 这里的notebook是服务器传过来的数据, 需要fix下,
updateNotebookForce: function(notebook, callback) {
notebook.IsDirty = false;
notebook.LocalIsNew = false;
NB.update({NotebookId: notebook.NotebookId}, {$set: notebook}, {}, function (err, updates) { // Callback is optional
if(err) {
console.log(err);
callback && callback(false);
} else {
callback && callback(notebook);
}
var serverNotebookId = notebook.NotebookId;
me.getNotebookIdByServerNotebookId(notebook.ParentNotebookId, function(parentNotebookId) {
notebook.ParentNotebookId = parentNotebookId;
delete notebook['NotebookId'];
NB.update({ServerNotebookId: serverNotebookId}, {$set: notebook}, {}, function (err, updates) { // Callback is optional
if(err) {
console.log(err);
callback && callback(false);
} else {
callback && callback(notebook);
}
});
});
},
//
// 更新笔记本, NoteId可能也要更改
// notebook是服务器传过来的
updateNotebookForceForSendChange: function(notebookId, notebook, callback) {
notebook.IsDirty = false;
notebook.LocalIsNew = false;
NB.update({NotebookId: notebookId}, {$set: notebook}, {}, function (err, updates) { // Callback is optional
if(err) {
console.log(err);
callback && callback(false);
} else {
callback && callback(notebook);
}
notebook.ServerNotebookId = notebook.NotebookId;
me.getNotebookIdByServerNotebookId(notebook.ParentNotebookId, function(parentNotebookId) {
notebook.ParentNotebookId = parentNotebookId;
NB.update({NotebookId: notebookId}, {$set: notebook}, {}, function (err, n) {
if(err) {
console.log(err);
callback && callback(false);
} else {
callback && callback(notebook);
}
});
});
},
@@ -226,8 +293,58 @@ var Notebook = {
});
},
fixConflicts: function() {
// 处理冲突
// notes是服务器的数据, 与本地的有冲突
// 1) 将本地的note复制一份
// 2) 服务器替换之前
fixConflicts: function(notebookSyncInfo, notebookWeb, callback) {
var me = this;
if(!notebookWeb) {
return callback && callback();
}
// 处理冲突
var conflictNotebooks = notebookSyncInfo.conflicts || [];
log('fix notebook conflicts');
async.eachSeries(conflictNotebooks, function(notebook, cb) {
/*
var noteId = note.NoteId;
// 复制一份
me.copyNoteForConfict(noteId, function(newNote) {
if(newNote) {
// 更新之前的
me.updateNotebookForce(note, function() {
cb();
// 前端来处理, 全量sync时不用前端一个个处理
notebookWeb.fixSyncConflict && notebookWeb.fixSyncConflict(note, newNote);
});
} else {
cb();
}
});
*/
cb();
}, function() {
// 最后调用
callback && callback();
});
// 处理添加的
var adds = notebookSyncInfo.adds;
log('has add...');
log(adds);
notebookWeb.addSync(adds);
log('has changeAdds')
log(notebookSyncInfo.changeAdds)
notebookWeb.addChange(notebookSyncInfo.changeAdds);
log('has updates...');
log(notebookSyncInfo);
log(notebookSyncInfo.updates);
// 处理更新的
notebookWeb.updateSync(notebookSyncInfo.updates);
// 处理删除的
notebookWeb.deleteSync(notebookSyncInfo.deletes);
}
};
module.exports = Notebook;