工作端,添加、移除旧项目时,更新本地服务器文库地址记录

This commit is contained in:
TevinLi 2016-08-26 23:49:06 +08:00
parent 02f23b38a4
commit 65e007c331
5 changed files with 85 additions and 31 deletions

View File

@ -16,13 +16,15 @@ module.exports = {
subscriptions: null,
//目录树的引用
treeView: null,
//当文库数量变化时
onLibrariesChange: null,
//监听发起
start: function (state) {
if (state.libraryList.length == 0) {
return;
}
var that = this;
//循环检查library
//检查library是否仍然存在,删除不存在的库
state.libraryList = directories.eachLibrary(state.libraryList);
var libraryMD5 = {};
for (var i = 0; i < state.libraryList.length; i++) {
@ -32,7 +34,7 @@ module.exports = {
//监听用户操作
this.subscriptions = new CompositeDisposable();
this.subscriptions.add(atom.commands.onDidDispatch(function (e) {
console.log('commands:', e.type);
//console.log('commands:', e.type);
//重命名、新增文件夹或文件、创建副本事件
if (/core\:confirm/.test(e.type) && e.target.className == 'editor mini is-focused') {
that.toCheckLib(state);
@ -45,12 +47,36 @@ module.exports = {
else if (e.type == 'tree-view:remove-project-folder') {
}
}));
//当编辑器打开一个文件时
this.subscriptions.add(atom.workspace.onDidOpen(function (e) {
//当编辑器打开一个文件时的回调
this.subscriptions.add(atom.workspace.onDidOpen(function () {
}));
//当项目(路径)数量变化(即添加或删除项目)时
this.subscriptions.add(atom.project.onDidChangePaths(function (e) {
console.log(e);
//当项目(路径)数量变化时的回调(即添加或删除项目)
this.subscriptions.add(atom.project.onDidChangePaths(function (list) {
//文库列表比对,移除失效,添加新增
var list2 = [];
for (var i = 0; i < list.length; i++) {
list[i] = list[i].replace(/\\/g, '/') + '/library/';
for (var j = 0; j < state.libraryList.length; j++) {
if (list[i] == state.libraryList[j]) {
list2.push(state.libraryList[j]);
list[i] = null;
}
}
}
for (var k = 0; k < list.length; k++) {
if (list[k] && directories.isAmWiki(list[k])) {
list2.push(list[k]);
}
}
state.libraryList = list2;
//MD5同步变化
var libraryMD5 = {};
for (var ii = 0; ii < state.libraryList.length; ii++) {
libraryMD5[state.libraryList[ii]] = state.libraryMD5[state.libraryList[ii]];
}
state.libraryMD5 = libraryMD5;
//回调通知 main.js 文库数已变化
that.onLibrariesChange && that.onLibrariesChange();
}));
//从树形模块监听拖拽操作
atom.packages.activatePackage('tree-view').then(function (pkg) {
@ -155,6 +181,6 @@ module.exports = {
},
//释放监听
destroy: function () {
this.subscriptions.dispose();
this.subscriptions && this.subscriptions.dispose();
}
};

View File

@ -53,7 +53,7 @@ module.exports = {
files.push(path4);
}
}
} catch(err) {
} catch (err) {
callback(err);
return;
}
@ -78,6 +78,7 @@ module.exports = {
eachLibrary: function (list, stepCallback) {
var list2 = [];
var path = '';
var atomProjects = atom.project.getPaths();
for (var i = 0; i < list.length; i++) {
//路径缺乏library字段弃用
if (list[i].indexOf('library') < 0) {
@ -89,13 +90,25 @@ module.exports = {
continue;
}
//路径重复弃用
var hsPath = false;
var pathRepeat = false;
for (var j = 0; j < list2.length; j++) {
if (list2[j] == list[i]) {
hsPath = true;
pathRepeat = true;
break;
}
}
if (hsPath) {
if (pathRepeat) {
continue;
}
//如果atom已经移除此项目弃用
var pathUseful = false;
for (var k = 0; k < atomProjects.length; k++) {
if (atomProjects[k].replace(/\\/g, '/') + '/library/' == path) {
pathUseful = true;
break;
}
}
if (!pathUseful) {
continue;
}
//有用路径
@ -103,5 +116,16 @@ module.exports = {
stepCallback && stepCallback(list[i]);
}
return list2;
},
//判断一个文件夹是否为文库项目
isAmWiki: function (path) {
path = path.indexOf('library') < 0 ? path : path.split('library')[0];
var states = [
fs.existsSync(path + '/library/'),
fs.existsSync(path + '/amWiki/'),
fs.existsSync(path + '/config.json'),
fs.existsSync(path + '/index.html')
];
return states[0] && states[1] && states[2] && states[3];
}
};

View File

@ -30,38 +30,43 @@ module.exports = {
activate: function (state) {
var that = this;
this.state = state;
this.state.libraryList = this.state.libraryList || []; //文库列表记录
this.state.libraryMD5 = this.state.libraryMD5 || {}; //文库文件MD5
//文库列表记录
this.state.libraryList = this.state.libraryList || [];
//文库列表地址MD5检查文库变化时创建
this.state.libraryMD5 = this.state.libraryMD5 || {};
//amWiki命令
this.subscriptions = new CompositeDisposable();
this.subscriptions.add(atom.commands.add('atom-workspace', {
//命令基于当前config.json创建wiki
'amWiki:create': function (e) {
'amWiki:create': function () {
creator.create(that.state);
},
//命令在当前文档上抓取h2、h3为页内目录
'amWiki:catalogue': function (e) {
'amWiki:catalogue': function () {
catalogue.make();
},
//命令,手动更新当前文库导航
'amWiki:makeNav': function (e) {
'amWiki:makeNav': function () {
makeNav.update(that.state);
},
//命令,粘帖截图
'amWiki:paste': function (e) {
'amWiki:paste': function () {
pasterImg.paster();
},
//命令启动node静态服务器
'amWiki:runServer': function (e) {
'amWiki:runServer': function () {
webServer.run(that.state.libraryList);
},
//命令,浏览打开当前页面
'amWiki:browser': function (e) {
'amWiki:browser': function () {
webServer.browser(that.state.libraryList);
}
}));
//自动化模块启动
automatic.start(this.state);
automatic.onLibrariesChange = function () {
webServer.updateMap(that.state.libraryList);
};
},
//当atom即将关闭终止所有监听
deactivate: function () {

View File

@ -14,18 +14,12 @@ module.exports = {
return;
}
var grammar = editor.getGrammar();
if (!grammar) {
return;
}
if (grammar.scopeName !== 'source.gfm') {
return;
}
if (editor.getPath().indexOf('library') < 0) {
alert('只有当你打开一个位于library文件夹下的文件时才能更新导航文件');
if (!grammar || grammar.scopeName !== 'source.gfm' || editor.getPath().indexOf('library') < 0) {
alert('只有当你打开library文件夹下的文档时才能手动更新导航文件');
return;
}
this.refresh(editor.getPath(), function (libPath) {
//如果当前文库没有监听,恢复监听
//如果当前文库没有记录,添加记录
var hs, i;
i = 0;
hs = false;

View File

@ -122,13 +122,18 @@ module.exports = {
}).listen(5171);
console.info('Server running at http://' + getLocalIP() + ':5171/');
},
//启动服务器
run: function (list) {
//更新映射列表
updateMap: function(list) {
this.mappingList = {};
for (var i = 0; i < list.length; i++) {
var path = list[i].replace('library/', '');
//缩短数字并设置为地址映射名
this.mappingList['wiki' + this.createMappingId(path)] = path;
}
},
//启动服务器
run: function (list) {
this.updateMap(list);
if (!this.server) {
this.createServer();
}