Files
desktop-app/node_modules/notebook.js
life 1d015642a6 notebook, note同步
note待同步内容, 图片
2015-01-22 00:41:49 +08:00

192 lines
5.4 KiB
JavaScript

var db = require('db');
var User = require('user');
var NB = db.notebooks;
function log(o) {console.log(o);}
/*
字段:
_id, // NotebookId表示是服务端Id, _id表示本地的id, 不一样
IsDeleted bool, // 是否已删除, true表示本地已删除, 未同步
LocalUsn int 本地Usn, 递增, 用于记录从上次同步后是否已修改, 若 > lastUpdateCount则表示已修改
NotebookId bson.ObjectId `bson:"_id,omitempty"` // 必须要设置bson:"_id" 不然mgo不会认为是主键
UserId bson.ObjectId `bson:"UserId"`
ParentNotebookId bson.ObjectId `bson:"ParentNotebookId,omitempty"` // 上级
Seq int `Seq` // 排序
Title string `Title` // 标题
UrlTitle string `UrlTitle` // Url标题 2014/11.11加
NumberNotes int `NumberNotes` // 笔记数
IsTrash bool `IsTrash,omitempty` // 是否是trash, 默认是false
IsBlog bool `IsBlog,omitempty` // 是否是Blog 2013/12/29 新加
CreatedTime time.Time `CreatedTime,omitempty`
UpdatedTime time.Time `UpdatedTime,omitempty`
// 2015/1/15, 更新序号
Usn int `Usn` // UpdateSequenceNum, 与服务器端保存一致
*/
// 排序笔记本和子笔记本
function sortNotebooks(notebooks) {
notebooks.sort(function(a, b) {
return a.Seq - b.Seq;
});
for(var i in notebooks) {
var notebook = notebooks[i];
if(notebook.Subs.length > 0) {
sortNotebooks(notebook.Subs);
}
}
}
// 笔记本服务
var Notebook = {
addNotebookTest: function() {
var doc = {
// _id: "xxxxx",
hello: 'world'
, n: 5
, today: new Date()
, nedbIsAwesome: true
, notthere: null
, notToBeSaved: undefined // Will not be saved
, fruits: [ 'apple', 'orange', 'pear' ]
, infos: { name: 'nedb' }
};
console.log("save before")
NB.insert(doc, function (err, newDoc) { // Callback is optional
// newDoc is the newly inserted document, including its _id
// newDoc has no key called notToBeSaved since its value was undefined
console.log(err);
console.log(newDoc);
});
},
// 得到用户下所有的notebook
// 排序好之后返回
getNotebooks: function(callback) {
var userId = User.getCurActiveUserId();
NB.find({UserId: userId}, function(err, notebooks) {
if(err) {
log(err);
return callback && callback(false);
}
// log(notebooks);
// 整理成层级关系, 并排序
// 1. 建立map
var notebooksMap = {};
for(var i in notebooks) {
var notebook = notebooks[i];
notebook.Subs = [];
notebooksMap[notebook.NotebookId] = notebook;
}
// 2. 追加到父下
var isolatedNotebooks = []; // 独立的, 没有父的, 第一级
for(var notebookId in notebooksMap) {
var notebook = notebooksMap[notebookId];
var parentNotebookId = notebook.ParentNotebookId;
if(parentNotebookId && notebooksMap[parentNotebookId]) {
notebooksMap[parentNotebookId].Subs.push(notebook);
} else {
isolatedNotebooks.push(notebook);
}
}
// 3. 排序
sortNotebooks(isolatedNotebooks);
// log(notebooks);
// log(notebooksMap['1'].Subs);
callback && callback(isolatedNotebooks);
});
},
// 新建笔记本
addNotebook: function(notebookId, title, parentNotebookId, callback) {
var notebook = {
Title: title,
Seq: -1,
UserId: User.getCurActiveUserId(),
ParentNotebookId: parentNotebookId,
IsDirty: true, // 必须, 同步后才为非dirty状态
// TODO UrlTitle
}
if(notebookId) {
notebook['NotebookId'] = notebookId;
}
NB.insert(notebook, function (err, newDoc) { // Callback is optional
if(err) {
console.log(err);
callback && callback(false);
} else {
callback && callback(newDoc);
}
});
},
// 重新统计笔记本的笔记数据
reCountNotebookNumberNotes: function(notebookId) {
db.notes.count({NotebookId: notebookId, IsTrash: false}, function(err, count) {
if(err) {
log(err);
return;
}
log("count");
log(notebookId);
log(count);
NB.update({NotebookId: notebookId}, {$set: {NumberNotes: count}}, {})
});
},
// 得到笔记本
getNotebook: function(notebookId, callback) {
var me = this;
NB.findOne({NotebookId: notebookId}, function(err, doc) {
if(err || !doc) {
log('不存在');
callback && callback(false);
} else {
callback && callback(doc);
}
});
},
//----------------
// 同步
//----------------
// 强制删除
deleteNotebookForce: function(notebookId, callback) {
var me = this;
NB.remove({NotebookId: notebookId}, function(err, n) {
if(err) {
callback && callback(false);
} else {
callback && callback(true);
}
});
},
// 添加笔记本, notebook object
addNotebookForce: function(notebook, callback) {
NB.insert(notebook, function (err, newDoc) { // Callback is optional
if(err) {
console.log(err);
callback && callback(false);
} else {
callback && callback(newDoc);
}
});
},
// 更新笔记本
updateNotebookForce: function(notebook, callback) {
notebook.IsDirty = 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);
}
});
},
};
module.exports = Notebook;