mirror of
https://github.com/leanote/desktop-app.git
synced 2025-10-15 07:31:33 +00:00
<- sync tag ok
This commit is contained in:
52
node_modules/api.js
generated
vendored
52
node_modules/api.js
generated
vendored
@@ -135,6 +135,25 @@ var Api = {
|
||||
}
|
||||
});
|
||||
},
|
||||
getSyncTags: function(afterUsn, maxEntry, callback) {
|
||||
var me = this;
|
||||
var url = this.getUrl('tag/getSyncTags', {afterUsn: afterUsn, maxEntry: maxEntry});
|
||||
log(url);
|
||||
needle.get(url, function(error, response) {
|
||||
if(error) {
|
||||
console.log('tag/getSyncTags');
|
||||
console.log(error);
|
||||
return callback && callback(false);
|
||||
}
|
||||
var ret = response.body;
|
||||
console.log(ret);
|
||||
if(Common.isOk(ret)) {
|
||||
callback && callback(ret);
|
||||
} else {
|
||||
callback && callback(false);
|
||||
}
|
||||
});
|
||||
},
|
||||
getLastSyncState: function(callback) {
|
||||
var me = this;
|
||||
log('--getSyncState--')
|
||||
@@ -375,22 +394,23 @@ var Api = {
|
||||
console.log('end transfer data');
|
||||
console.log(data);
|
||||
|
||||
needle.post(me.getUrl('note/addNote'), data, {multipart: needMultiple}, function(err, resp) {
|
||||
if(err) {
|
||||
return callback(false);
|
||||
}
|
||||
var ret = resp.body;
|
||||
log('add note ret');
|
||||
log(ret);
|
||||
log('add note ret<-');
|
||||
if(Common.isOk(ret)) {
|
||||
// 将serverId保存
|
||||
callback(ret);
|
||||
} else {
|
||||
callback(false);
|
||||
}
|
||||
});
|
||||
|
||||
try {
|
||||
needle.post(me.getUrl('note/addNote'), data, {multipart: needMultiple}, function(err, resp) {
|
||||
if(err) {
|
||||
return callback(false);
|
||||
}
|
||||
var ret = resp.body;
|
||||
log('add note ret');
|
||||
log(ret);
|
||||
log('add note ret<-');
|
||||
if(Common.isOk(ret)) {
|
||||
// 将serverId保存
|
||||
callback(ret);
|
||||
} else {
|
||||
callback(false);
|
||||
}
|
||||
});
|
||||
} catch(e) {};
|
||||
});
|
||||
},
|
||||
|
||||
|
22
node_modules/note.js
generated
vendored
22
node_modules/note.js
generated
vendored
@@ -769,16 +769,22 @@ var Note = {
|
||||
// console.log(file);
|
||||
// 要传数据的
|
||||
if(file.IsDirty) {
|
||||
// TODO
|
||||
if(file.Path.indexOf('data/') == 0) {
|
||||
file.Path = Evt.getAbsolutePath(file.Path);
|
||||
}
|
||||
fs.exists(file.Path, function(isExists) {
|
||||
needTransferFiles[file.FileId] = {
|
||||
file: file.Path,
|
||||
content_type: 'application/' + file.Type // TODO
|
||||
if(isExists) {
|
||||
needTransferFiles[file.FileId] = {
|
||||
file: file.Path,
|
||||
content_type: 'application/' + file.Type // TODO
|
||||
}
|
||||
if(file.Title) {
|
||||
needTransferFiles[file.FileId].filename = file.Title;
|
||||
}
|
||||
needFile.HasBody = true;
|
||||
needPostFilesAttr.push(needFile);
|
||||
}
|
||||
if(file.Title) {
|
||||
needTransferFiles[file.FileId].filename = file.Title;
|
||||
}
|
||||
needFile.HasBody = true;
|
||||
needPostFilesAttr.push(needFile);
|
||||
return cb();
|
||||
});
|
||||
} else {
|
||||
|
132
node_modules/sync.js
generated
vendored
132
node_modules/sync.js
generated
vendored
@@ -2,12 +2,14 @@ var db = require('db');
|
||||
var async = require('async');
|
||||
var Common = require('common');
|
||||
var User = require('user');
|
||||
var Tag = require('tag');
|
||||
var Tags = db.tags;
|
||||
var needle = require('needle');
|
||||
var fs = require('fs');
|
||||
var Api = require('api');
|
||||
var Notebook = require('notebook');
|
||||
var Note = require('note');
|
||||
var Web = require('web');
|
||||
|
||||
function log(o) {
|
||||
console.log(o);
|
||||
@@ -41,6 +43,11 @@ var Sync = {
|
||||
_totalSyncNoteNum: 0, // 需要同步的数量
|
||||
_noteMaxEntry: 1,
|
||||
|
||||
// tag
|
||||
_syncTagIsLastChunk: false,
|
||||
_totalSyncTagNum: 0, // 需要同步的数量
|
||||
_tagMaxEntry: 1,
|
||||
|
||||
_initSyncInfo: function() {
|
||||
var me = this;
|
||||
|
||||
@@ -56,6 +63,12 @@ var Sync = {
|
||||
me._totalHasSyncNoteNum = 0;
|
||||
me._lockNote = 1;
|
||||
|
||||
// tag
|
||||
me._syncTagIsLastChunk = false;
|
||||
me._totalSyncTagNum = 0;
|
||||
me._totalHasSyncTagNum = 0;
|
||||
me._lockTag = 1;
|
||||
|
||||
// 同步信息
|
||||
me._syncInfo = {
|
||||
notebook: {ok: false, changeAdds: [], changeConflicts: [], changeNeedAdds: [], adds: [], deletes: [], updates: []},
|
||||
@@ -317,12 +330,115 @@ var Sync = {
|
||||
});
|
||||
},
|
||||
|
||||
|
||||
|
||||
//----------------
|
||||
// 同步标签
|
||||
syncTag: function(afterUsn, callback) {
|
||||
callback && callback(true);
|
||||
// ---------------
|
||||
// 增加, 有锁
|
||||
_lockTag: 1,
|
||||
_addSyncTagNum: function() {
|
||||
var me = this;
|
||||
if(me._lockTag) {
|
||||
me._lockTag = 0;
|
||||
me._totalHasSyncTagNum++;
|
||||
me._lockTag = 1;
|
||||
} else {
|
||||
me._addSyncTagNum();
|
||||
}
|
||||
},
|
||||
|
||||
// 同步标签到本地
|
||||
_syncTagToLocal: function(tags, callback) {
|
||||
var me = this;
|
||||
function canCall(isEmpty) {
|
||||
// 为空时来判断是最后一次了, 可以之前的还没处理完
|
||||
if(isEmpty && me._totalHasSyncTagNum < me._totalSyncTagNum) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 是最后一块, 且
|
||||
me._addSyncTagNum();
|
||||
// log('tags: ' + me._totalHasSyncNoteNum + ' ' + me._totalSyncNoteNum + ' ' + me._syncNoteIsLastChunk);
|
||||
if(me._syncTagIsLastChunk && me._totalHasSyncTagNum >= me._totalSyncTagNum) {
|
||||
// 防止多次callback
|
||||
if(!me._syncInfo.tag.ok) {
|
||||
log('tag->next');
|
||||
me._syncInfo.tag.ok = true;
|
||||
callback && callback(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 为什么会出现最后 > 的情况, 是因为这里length == 0 也判断了
|
||||
if(!tags || tags.length == 0) {
|
||||
return canCall(true);
|
||||
}
|
||||
|
||||
for(var i in tags) {
|
||||
var tag = tags[i];
|
||||
// 得到本地的, 与之对比
|
||||
|
||||
(function(tag) {
|
||||
|
||||
var usn = tag.Usn;
|
||||
var tagId = tag.TagId;
|
||||
|
||||
// 1) 服务器端删除了, 本地肯定删除
|
||||
if(tag.IsDeleted) {
|
||||
log('delete tag: ');
|
||||
log(tag);
|
||||
Tag.deleteTag(tag.Tag, function() {
|
||||
me._syncInfo.tag.deletes.push(tag.Tag);
|
||||
canCall();
|
||||
}, true);
|
||||
return;
|
||||
}
|
||||
// 2) 查看本地的, 与本地合并
|
||||
Tag.getTag(tag.Tag, function(tagLocal) {
|
||||
// 2.1 本地没有, 表示是新建
|
||||
if(!tagLocal) {
|
||||
log('add tag: ...')
|
||||
Tag.addOrUpdateTag(tag.Tag, function(tagAdded) {
|
||||
me._syncInfo.tag.adds.push(tagAdded);
|
||||
return canCall();
|
||||
}, true);
|
||||
} else {
|
||||
// 本地有, 不用操作
|
||||
}
|
||||
});
|
||||
})(tag);
|
||||
}
|
||||
},
|
||||
syncTag: function(afterUsn, callback) {
|
||||
var me = this;
|
||||
Api.getSyncTags(afterUsn, me._tagMaxEntry, function(tags) {
|
||||
log('syncTags------------------------------------')
|
||||
log(tags);
|
||||
if(Common.isOk(tags)) {
|
||||
me._totalSyncTagNum += tags.length;
|
||||
// 证明可能还有要同步的
|
||||
if(tags.length == me._tagMaxEntry) {
|
||||
me._syncTagToLocal(tags, callback);
|
||||
var last = tags[tags.length-1];
|
||||
me.syncTag(last.Usn, callback);
|
||||
} else {
|
||||
log('no more');
|
||||
me._syncTagIsLastChunk = true;
|
||||
me._syncTagToLocal(tags, callback);
|
||||
}
|
||||
} else {
|
||||
// 同步失败
|
||||
me._syncInfo.tag.ok = false;
|
||||
me._syncInfo.tag.msg = "cann't get all chunks";
|
||||
console.log(tags);
|
||||
console.log('tags eeeeeeeeeeeeeeeeeerrror')
|
||||
callback && callback(false);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
//----------
|
||||
|
||||
// 记录LastSyncUsn, LastUpdateTime 同步时间
|
||||
updateLastSyncState: function(callback) {
|
||||
var me = this;
|
||||
@@ -384,6 +500,9 @@ var Sync = {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 添加或删除一些tag
|
||||
Web.addOrDeleteTagFromSync(me._syncInfo.tag);
|
||||
},
|
||||
|
||||
// 增量同步
|
||||
@@ -405,14 +524,14 @@ var Sync = {
|
||||
// 同步笔记本
|
||||
me.syncNotebook(lastSyncUsn, function(ok) {
|
||||
if(ok) {
|
||||
log('-------incr notebook ok-----------')
|
||||
log('-------incr notebook ok-----------' + lastSyncUsn)
|
||||
// 同步笔记
|
||||
me.syncNote(lastSyncUsn, function(ok) {
|
||||
if(ok) {
|
||||
log('-------incr note ok-----------')
|
||||
log('-------incr note ok-----------' + lastSyncUsn)
|
||||
// 同步标签
|
||||
me.syncTag(lastSyncUsn, function() {
|
||||
log('-------incr tag ok-----------')
|
||||
log('-------incr tag ok-----------' + lastSyncUsn)
|
||||
// 更新上次同步时间
|
||||
me.updateLastSyncState(function() {
|
||||
// send changes
|
||||
@@ -647,6 +766,7 @@ var Sync = {
|
||||
log('send changes before...')
|
||||
// 先处理冲突, 可以同时进行
|
||||
me.fixConflicts(function() {
|
||||
return;
|
||||
// send changes
|
||||
log('send changes');
|
||||
me._initSyncInfo(); // 重新初始化[]
|
||||
|
22
node_modules/tag.js
generated
vendored
22
node_modules/tag.js
generated
vendored
@@ -19,7 +19,7 @@ Count 笔记数
|
||||
var Tag = {
|
||||
|
||||
// 添加或更新标签
|
||||
addOrUpdateTag: function(title, callback) {
|
||||
addOrUpdateTag: function(title, callback, isForce) {
|
||||
var userId = User.getCurActiveUserId();
|
||||
Tags.findOne({UserId: userId, Tag: title}, function(err, tag) {
|
||||
// 存在, 则更新该tag下的笔记数量
|
||||
@@ -38,7 +38,7 @@ var Tag = {
|
||||
TagId: Common.objectId(),
|
||||
UserId: userId,
|
||||
Tag: title,
|
||||
IsDirty: true, // 新添加的
|
||||
IsDirty: !isForce, // 新添加的
|
||||
Count: 1,
|
||||
LocalIsDelete: false,
|
||||
CreatedTime: date,
|
||||
@@ -64,24 +64,34 @@ var Tag = {
|
||||
},
|
||||
|
||||
// 删除标签, 更新为LocaleIsDelete = true
|
||||
deleteTag: function(title, callback) {
|
||||
deleteTag: function(title, callback, isForce) {
|
||||
var me = this;
|
||||
Tags.update({UserId: User.getCurActiveUserId(), Tag: title}, {$set: {LocalIsDelete: true, UpdatedTime: new Date()}}, function() {
|
||||
Tags.update({UserId: User.getCurActiveUserId(), Tag: title}, {$set: {LocalIsDelete: true, IsDirty: !isForce, UpdatedTime: new Date()}}, function() {
|
||||
});
|
||||
// 笔记本
|
||||
//
|
||||
Note.updateNoteToDeleteTag(title, function(updates) {
|
||||
callback(updates);
|
||||
callback && callback(updates);
|
||||
});
|
||||
},
|
||||
|
||||
// 更新标签的数量, 在彻底删除笔记时调用
|
||||
updateTagCount: function(title, count) {
|
||||
userId = User.getCurActiveUserId();
|
||||
// 更新Tag's Count
|
||||
Tags.update({UserId: userId, Tag: title}, {$set: {Count: cnt}});
|
||||
// 更新web
|
||||
Web.updateTagCount({Tag: title, Count: cnt});
|
||||
},
|
||||
|
||||
getTag: function(title, callback) {
|
||||
userId = User.getCurActiveUserId();
|
||||
Tags.findOne({UserId: userId, Tag: title}, function(err, tag) {
|
||||
if(err || !tag) {
|
||||
return callback && callback(false);
|
||||
}
|
||||
callback && callback(tag);
|
||||
});
|
||||
}
|
||||
/*
|
||||
// 添加多个标签
|
||||
addTags: function(titles) {
|
||||
|
9
node_modules/web.js
generated
vendored
9
node_modules/web.js
generated
vendored
@@ -23,6 +23,15 @@ var Web = {
|
||||
updateTagCount: function(tag) {
|
||||
var me = this;
|
||||
me.Tag.updateTagCount(tag);
|
||||
},
|
||||
|
||||
//
|
||||
addOrDeleteTagFromSync: function(tagSyncInfo) {
|
||||
var me = this;
|
||||
var adds = tagSyncInfo.adds;
|
||||
me.Tag.addTagsNav(adds);
|
||||
var deletes = tagSyncInfo.deletes;
|
||||
me.Tag.deleteTagsNav(deletes);
|
||||
}
|
||||
};
|
||||
module.exports = Web;
|
||||
|
Reference in New Issue
Block a user