Skip to content

Commit

Permalink
添加文档锁机制,避免文档保存覆盖新文档的问题
Browse files Browse the repository at this point in the history
问题详细描述:

1. A 文档已编辑
2. A 文档企图自动保存
3. 用户点新建文档 B
4. 提示 A 文档还未保存
5. 用户忽略或设置浏览器屏蔽弹出对话框
6. 文档 B 已创建
7. 文档 A 保存完成,更新当前文档为文档 A,但是此时文档内容是文档 B
8. 文档内容进行了修改,自动保存,覆盖掉原来真实的文档 A
  • Loading branch information
techird committed Feb 2, 2015
1 parent 6f37669 commit 676ed66
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 4 deletions.
14 changes: 11 additions & 3 deletions ui/doc.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ KityMinder.registerUI('doc', function(minder) {

function preCommonLength(a, b) {
var i = 0;
while((i in a) && (i in b) && a[i] == b[i]) i++;
while ((i in a) && (i in b) && a[i] == b[i]) i++;
return (i in b) ? 0 : i;
}

Expand All @@ -41,6 +41,11 @@ KityMinder.registerUI('doc', function(minder) {
}
}

var locked = false;

ret.lock = function() { locked = true; };
ret.unlock = function() { locked = false; };

/**
* 加载文档
*
Expand All @@ -58,6 +63,8 @@ KityMinder.registerUI('doc', function(minder) {
* @return {Promise<doc>} 返回解析完之后的文档对象,解析的结果为 doc.data
*/
function load(doc) {
if (locked) return Promise.reject(new Error('doc was locked'));

var restore = doc;

current = doc;
Expand All @@ -84,7 +91,7 @@ KityMinder.registerUI('doc', function(minder) {
}).then(function(doc) {
loading = false;
if (doc)
notice.info( minder.getLang('ui.load_success', doc.title ) );
notice.info(minder.getLang('ui.load_success', doc.title));
return doc;
});
}
Expand All @@ -105,6 +112,7 @@ KityMinder.registerUI('doc', function(minder) {

function checkSaved(noConfirm) {
if (!fio.user.current()) return true;
if (locked) return false;
if (noConfirm) return current.saved;
return current.saved || window.confirm(minder.getLang('ui.unsavedcontent', '* ' + current.title));
}
Expand Down Expand Up @@ -132,6 +140,6 @@ KityMinder.registerUI('doc', function(minder) {
ret.save = save;
ret.current = getCurrent;
ret.checkSaved = checkSaved;

return ret;
});
2 changes: 2 additions & 0 deletions ui/menu/save/netdisk.js
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,7 @@ KityMinder.registerUI('menu/save/netdisk', function(minder) {
if (saving) return;

saving = true;
$doc.lock();

if ($mask) $mask.addClass('loading');

Expand All @@ -214,6 +215,7 @@ KityMinder.registerUI('menu/save/netdisk', function(minder) {
doc.protocol = protocol;

$doc.save(doc);
$doc.unlock();

//notice.info(msg || minder.getLang('ui.save_success', doc.title, file.modifyTime.toLocaleTimeString()));

Expand Down
2 changes: 1 addition & 1 deletion ui/menu/share/view.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ KityMinder.registerUI('menu/share/view', function (minder) {

var pattern = /(?:shareId|share_id)=(\w+)([&#]|$)/;
var match = pattern.exec(window.location) || pattern.exec(document.referrer);

if (!match) return Promise.resolve(null);

shareId = match[1];
Expand Down

0 comments on commit 676ed66

Please sign in to comment.