Skip to content

Commit 94e06a8

Browse files
committed
Fix: File backup function is abnormal #50
1 parent c8c98c7 commit 94e06a8

File tree

10 files changed

+81
-46
lines changed

10 files changed

+81
-46
lines changed

app/src/define.ts

+4
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,10 @@ export let sReleasesUrl = "https://github.com/NaoTu/DesktopNaotu/releases";
5353
*/
5454
export let sExportTitle = "KityMinder";
5555

56+
/**
57+
* 操作状态
58+
*/
59+
export type StatusList = "none" | "opening" | "closing" | "saving";
5660
//#endregion
5761

5862
//#region 2. 可能变化的部分

app/src/index.ts

+9-5
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { openFileByDrop, openKm } from "./lib/file";
77
import { saveDialog } from "./lib/dialog";
88
import { monitorExitRequest } from "./lib/exit";
99
import { naotuBase } from "./lib/base";
10-
import { onSelectedNodeItem } from "./lib/minder";
10+
import { onSelectedNodeItem, hasData } from "./lib/minder";
1111
import { remote } from "electron";
1212
import { shortcutDialog } from "./ui/shortcut";
1313

@@ -41,12 +41,16 @@ $(function() {
4141
if (minder != null) {
4242
// auto saving
4343
minder.on("contentchange", function(argv: any) {
44-
logger.info(`invoked contentchange()`);
44+
// 操作完成之后才触发事件
45+
if (naotuBase.getState() == "none") {
46+
logger.info(`invoked contentchange()`);
4547

46-
naotuBase.OnEdited();
48+
naotuBase.OnEdited();
4749

48-
if (naotuConf.getModel().isAutoSave) {
49-
saveDialog();
50+
// 即使开启自动保存,必须有数据才保存
51+
if (naotuConf.getModel().isAutoSave) {
52+
saveDialog();
53+
}
5054
}
5155
});
5256

app/src/lib/base.ts

+10-8
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { addRecentlyRecord } from "./recently";
2+
import { StatusList } from "../define";
23

34
/**
45
* 当做状态机类用
@@ -18,19 +19,19 @@ class NaotuBase {
1819
if (value) addRecentlyRecord(value);
1920
}
2021

22+
private _state: StatusList;
23+
public getState() {
24+
return this._state;
25+
}
26+
public setState(str: StatusList) {
27+
this._state = str;
28+
}
29+
2130
// 保存序号
2231
private _savedNum: number;
2332
// 修改序号
2433
private _changedNum: number;
2534

26-
/**
27-
* 打开时调用
28-
*/
29-
public OnOpened() {
30-
// 打开时,会出发2次修改,需豁免
31-
this._changedNum -= 2;
32-
}
33-
3435
/**
3536
* 保存时调用
3637
*/
@@ -61,6 +62,7 @@ class NaotuBase {
6162
* 私有的构造方法
6263
*/
6364
private constructor() {
65+
this._state = "none";
6466
this._kmPath = null;
6567
this._changedNum = 0;
6668
this._savedNum = 0;

app/src/lib/electron.ts

+7-6
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,16 @@ export function getAppInstance() {
1414
* @param fileName 文件路径
1515
*/
1616
export function showFileName(fileName: string) {
17-
if (fileName != undefined) {
17+
let title = "";
18+
if (fileName) {
1819
let index = fileName.lastIndexOf("/");
1920

2021
if (fileName.lastIndexOf("\\") > -1) index = fileName.lastIndexOf("\\");
21-
let title = fileName.substring(index + 1) + " - " + I18n.__("sAppName");
22+
title = fileName.substring(index + 1) + " - ";
23+
}
2224

23-
let appInstance = getAppInstance();
24-
if (appInstance) {
25-
appInstance.setTitle(title);
26-
}
25+
let appInstance = getAppInstance();
26+
if (appInstance) {
27+
appInstance.setTitle(title + I18n.__("sAppName"));
2728
}
2829
}

app/src/lib/file.ts

+19-4
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,16 @@ export function openKm(filePath: string) {
1515
logger.info(`open file: ${filePath}`);
1616
if (!existsSync(filePath)) throw new Error(`file not found, ${filePath}`);
1717

18+
// 开启状态保护
19+
naotuBase.setState("opening");
20+
21+
naotuBase.setCurrentKm(filePath);
22+
1823
setMinder(readJson(filePath));
1924

2025
showFileName(filePath);
21-
22-
naotuBase.setCurrentKm(filePath);
26+
27+
naotuBase.setState("none");
2328
} catch (error) {
2429
logger.error("openKm error, ", error);
2530
}
@@ -31,12 +36,22 @@ export function openKm(filePath: string) {
3136
*/
3237
export function saveKm(filePath: string) {
3338
try {
34-
writeJson(filePath, getMinder());
39+
var minder = getMinder();
3540

36-
showFileName(filePath);
41+
// 修改内容时,记录日志
42+
logger.info(`${filePath} => ${JSON.stringify(minder)}`);
43+
44+
naotuBase.setState("saving");
3745

3846
naotuBase.setCurrentKm(filePath);
47+
48+
writeJson(filePath, minder);
49+
50+
showFileName(filePath);
51+
3952
naotuBase.OnSaved();
53+
54+
naotuBase.setState("none");
4055
} catch (error) {
4156
logger.error("saveKm error, ", error);
4257
}

app/src/lib/minder.ts

-3
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,6 @@ import { logger } from "../core/logger";
1010

1111
export function setMinder(json: JSON | any) {
1212
editor.minder.importJson(json);
13-
14-
// 触发打开方法
15-
naotuBase.OnOpened();
1613
}
1714

1815
export function getMinder() {

app/src/lib/window.ts

+17-12
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { copy, writeText, writeBuffer } from "../core/io";
55
import execAsync from "../core/exec";
66
import { logger } from "../core/logger";
77
import { initRoot, getDefaultPath } from "./minder";
8-
import { getAppInstance } from "./electron";
8+
import { getAppInstance, showFileName } from "./electron";
99
import { basename } from "path";
1010

1111
//#region 3. 窗口对话框相关
@@ -46,6 +46,19 @@ export function newDialog() {
4646
});
4747
}
4848

49+
function doCloseFile() {
50+
naotuBase.setState("closing");
51+
52+
// 若已保存,则直接初始化
53+
initRoot();
54+
55+
showFileName("");
56+
57+
logger.info(`关闭文件: "${naotuBase.getCurrentKm()}"`);
58+
59+
naotuBase.setState("none");
60+
}
61+
4962
/**
5063
* 关闭文件
5164
*
@@ -55,20 +68,13 @@ export function newDialog() {
5568
export function closeFile() {
5669
// 如果关闭成功,也触发一次保存事件
5770
if (naotuBase.HasSaved()) {
58-
// 若已保存,则直接初始化
59-
initRoot();
60-
61-
naotuBase.OnSaved();
62-
logger.info(`关闭文件: "${naotuBase.getCurrentKm()}"`);
71+
doCloseFile();
6372
} else {
6473
bootbox.confirm({
6574
message: I18n.__("sCloseTip"),
6675
callback: (result: boolean) => {
6776
if (result) {
68-
initRoot();
69-
70-
naotuBase.OnSaved();
71-
logger.info(`关闭文件: "${naotuBase.getCurrentKm()}"`);
77+
doCloseFile();
7278
}
7379
}
7480
});
@@ -207,5 +213,4 @@ export function minwin() {
207213
}
208214
}
209215

210-
211-
//#endregion
216+
//#endregion

app/src/version.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export let version = [3, 2, 0, 512];
1+
export let version = [3, 2, 1, 513];

doc/History.md

+7
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,13 @@
1414

1515
## 更新记录
1616

17+
### 3.2.1-Beta / 2018-12-27
18+
19+
- 新增 记录内容日志
20+
- 修复 关闭文件时产生新文件
21+
- 修复 开启自动保存后,产生新文件
22+
- 修复 关闭文件时,标题显示不正确
23+
1724
### 3.2.0-Beta / 2018-12-24
1825

1926
- 采用新技术(typescript)重构软件以提高稳定性

package.json

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
{
22
"name": "desktopnaotu",
3-
"version": "3.2.0",
3+
"version": "3.2.1",
44
"description": "桌面版脑图",
55
"main": "dist/main.js",
66
"scripts": {
77
"start": "gulp default",
8-
"packwin32": "electron-packager ./ DesktopNaotu --asar=true --platform=win32 --arch=ia32 --out=../OutApp --icon=app/static/favicon.ico --electron-version=3.0.10 --app-version=3.2.0 --ignore=\"(.git|screenshot|doc|src|app|bower_components|electron-packager)\" --overwrite --prune",
9-
"packwin32dev": "electron-packager ./ DesktopNaotu --platform=win32 --arch=ia32 --out=../OutApp --icon=app/static/favicon.ico --electron-version=3.0.10 --app-version=3.2.0 --ignore=\"(.git|screenshot|doc|bower_components|electron-packager)\" --overwrite --prune",
10-
"packwin64": "electron-packager ./ DesktopNaotu --asar=true --platform=win32 --arch=x64 --out=../OutApp --icon=app/static/favicon.ico --electron-version=3.0.10 --app-version=3.2.0 --ignore=\"(.git|screenshot|doc|src|app|bower_components|electron-packager)\" --overwrite --prune",
11-
"packwin64dev": "electron-packager ./ DesktopNaotu --platform=win32 --arch=x64 --out=../OutApp --icon=app/static/favicon.ico --electron-version=3.0.10 --app-version=3.2.0 --ignore=\"(.git|screenshot|doc|bower_components|electron-packager)\" --overwrite --prune",
12-
"packmacos": "electron-packager ./ DesktopNaotu --asar=true --platform=darwin --arch=x64 --out=../OutApp --icon=app/static/favicon.icns --electron-version=3.0.10 --app-version=3.2.0 --ignore=\"(.git|screenshot|doc|src|app|bower_components|electron-packager)\" --overwrite --prune",
13-
"packlinux": "electron-packager ./ DesktopNaotu --asar=true --platform=linux --arch=x64 --out=../OutApp --icon=app/static/favicon.png --electron-version=3.0.10 --app-version=3.2.0 --ignore=\"(.git|screenshot|doc|src|app|bower_components|electron-packager)\" --overwrite --prune"
8+
"packwin32": "electron-packager ./ DesktopNaotu --asar=true --platform=win32 --arch=ia32 --out=../OutApp --icon=app/static/favicon.ico --electron-version=3.0.10 --app-version=3.2.1 --ignore=\"(.git|screenshot|doc|src|app|bower_components|electron-packager)\" --overwrite --prune",
9+
"packwin32dev": "electron-packager ./ DesktopNaotu --platform=win32 --arch=ia32 --out=../OutApp --icon=app/static/favicon.ico --electron-version=3.0.10 --app-version=3.2.1 --ignore=\"(.git|screenshot|doc|bower_components|electron-packager)\" --overwrite --prune",
10+
"packwin64": "electron-packager ./ DesktopNaotu --asar=true --platform=win32 --arch=x64 --out=../OutApp --icon=app/static/favicon.ico --electron-version=3.0.10 --app-version=3.2.1 --ignore=\"(.git|screenshot|doc|src|app|bower_components|electron-packager)\" --overwrite --prune",
11+
"packwin64dev": "electron-packager ./ DesktopNaotu --platform=win32 --arch=x64 --out=../OutApp --icon=app/static/favicon.ico --electron-version=3.0.10 --app-version=3.2.1 --ignore=\"(.git|screenshot|doc|bower_components|electron-packager)\" --overwrite --prune",
12+
"packmacos": "electron-packager ./ DesktopNaotu --asar=true --platform=darwin --arch=x64 --out=../OutApp --icon=app/static/favicon.icns --electron-version=3.0.10 --app-version=3.2.1 --ignore=\"(.git|screenshot|doc|src|app|bower_components|electron-packager)\" --overwrite --prune",
13+
"packlinux": "electron-packager ./ DesktopNaotu --asar=true --platform=linux --arch=x64 --out=../OutApp --icon=app/static/favicon.png --electron-version=3.0.10 --app-version=3.2.1 --ignore=\"(.git|screenshot|doc|src|app|bower_components|electron-packager)\" --overwrite --prune"
1414
},
1515
"repository": {
1616
"type": "git",

0 commit comments

Comments
 (0)