mirror of
https://github.com/leanote/desktop-app.git
synced 2025-10-17 08:38:18 +00:00
add node_modules
This commit is contained in:
247
node_modules/import.js
generated
vendored
Executable file
247
node_modules/import.js
generated
vendored
Executable file
@@ -0,0 +1,247 @@
|
||||
var xml2js =require('xml2js');
|
||||
var fs = require('fs');
|
||||
var Evt = require('evt');
|
||||
var File = require('file');
|
||||
var Note = require('note');
|
||||
var Web = require('web');
|
||||
var Tag = require('tag');
|
||||
var async = require('async');
|
||||
var Common = require('common');
|
||||
|
||||
var Import = {
|
||||
|
||||
/*
|
||||
'<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n
|
||||
<!DOCTYPE en-note SYSTEM "http://xml.evernote.com/pub/enml2.dtd">\n
|
||||
<en-note>\n
|
||||
<div>简单简历模板</div>\n<div><a href="http://tympanus.net/Development/FullscreenLayoutPageTransitions/">http://tympanus.net/Development/FullscreenLayoutPageTransitions/</a></div>\n<div>优化, 上线</div>\n<div>
|
||||
<en-media type="text/html" style="cursor:pointer;" height="43" hash="bc322a11075e40f3a5b2dce3f2fffcdc"/><br/></div>\n<div>做一个slide的vcard也行啊, 用slide去做</div>\n<div><br/></div>\n<div>
|
||||
<en-media style="height:auto;" width="558" type="image/png" hash="7165072ac950b3f0fe919d45a49c847e"/></div>\n<div>颜色变换, 几套主题</div>\n<div>中间弄个头像</div>\n<div>开始的时候, 头像转转, 随后, 4个卡处渐隐出现</div>\n<div><br/></div>\n
|
||||
</en-note>\n'
|
||||
把<en-note>与</en-note>中间部分抽出
|
||||
|
||||
parsedRes = [{FileId: ""}]
|
||||
*/
|
||||
parseEvernoteContent: function(xml, parsedRes) {
|
||||
var me = this;
|
||||
|
||||
if(!xml) {
|
||||
return '';
|
||||
}
|
||||
// console.log(xml);
|
||||
var ret = /<en\-note.*?>([\s\S]*)<\/en\-note>/.exec(xml)
|
||||
var content = '';
|
||||
if(ret && ret.length == 2) {
|
||||
content = ret[1];
|
||||
}
|
||||
|
||||
if(!content) {
|
||||
return '';
|
||||
}
|
||||
var reg = new RegExp("<en\-media(.*?)\/*>", "g"); // <en-media /> <en-media></en-media>
|
||||
var i = 0;
|
||||
// console.log(content);
|
||||
while(ret = reg.exec(content)) {
|
||||
// ret[1] == type="text/html" style="cursor:pointer;" height="43" hash="bc322a11075e40f3a5b2dce3f2fffcdc"
|
||||
try {
|
||||
var res = parsedRes[i];
|
||||
i++;
|
||||
var fileId = res['FileId'];
|
||||
if(!fileId) {
|
||||
continue;
|
||||
}
|
||||
if(res.IsImage) {
|
||||
var replace = '<img src="' + Evt.getImageLocalUrl(fileId) + '" ' + ret[1] + '>';
|
||||
} else {
|
||||
var replace = '<a href="' + Evt.getAttachLocalUrl(fileId) + '">' + res['Title'] + '</a>'
|
||||
}
|
||||
content = content.replace(ret[0], replace);
|
||||
} catch(e) {
|
||||
console.log(e);
|
||||
};
|
||||
};
|
||||
|
||||
// 如果是<en-media></en-media>, </en-media>匹配不到
|
||||
content = content.replace(/<\/en-media>/g, '');
|
||||
|
||||
|
||||
return content;
|
||||
},
|
||||
|
||||
writeTest: function() {
|
||||
var path = '/Users/life/Desktop/1428226025985_2.png.txt';
|
||||
fs.readFile(path, function(err, xml) {
|
||||
File.writeBase64(xml+"", true, 'png', 'a.png', function(file) {
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
parseEachNote: function(note, callback) {
|
||||
var me = this;
|
||||
|
||||
var jsonNote = {
|
||||
Title: note['title'][0],
|
||||
Tags: note['tag'] || [],
|
||||
Content: note['content'][0]
|
||||
};
|
||||
|
||||
// 文件保存之
|
||||
var resources = note['resource'] || [];
|
||||
var parsedRes = [];
|
||||
var attachs = [];
|
||||
console.log("-----------")
|
||||
console.log(note);
|
||||
console.log(resources);
|
||||
async.eachSeries(resources, function(res, cb) {
|
||||
// console.log(res['data'][0]['$']);
|
||||
/*
|
||||
{ data: [ { _: 'base64字符中','$': { encoding: 'base64' } } ],
|
||||
mime: [ 'image/png' ],
|
||||
width: [ '2398' ],
|
||||
height: [ '1466' ],
|
||||
resource-attributes: [
|
||||
{
|
||||
'file-name': ['Leanote.html']
|
||||
}
|
||||
]
|
||||
}
|
||||
*/
|
||||
try {
|
||||
var base64Str = res['data'][0]['_'];
|
||||
} catch(e) {
|
||||
parsedRes.push({})
|
||||
return cb();
|
||||
}
|
||||
try {
|
||||
var filename = res['resource-attributes'][0]['file-name'][0];
|
||||
} catch(e) {}
|
||||
var isImage = false;
|
||||
var type = '';
|
||||
var mime = res['mime'][0].toLowerCase();
|
||||
if(mime.indexOf('image') == 0) {
|
||||
isImage = true;
|
||||
}
|
||||
type = mime.split('/').pop();
|
||||
if(type == '') {
|
||||
type = 'raw';
|
||||
}
|
||||
|
||||
// console.log(base64Str);
|
||||
// console.log(isImage + "");
|
||||
// console.log(type);
|
||||
// return cb();
|
||||
|
||||
File.writeBase64(base64Str, isImage, type, filename, function(file) {
|
||||
if(file) {
|
||||
parsedRes.push(file);
|
||||
if(!isImage) {
|
||||
attachs.push(file);
|
||||
}
|
||||
} else {
|
||||
console.log('文件保存错误!');
|
||||
}
|
||||
|
||||
cb();
|
||||
});
|
||||
}, function() {
|
||||
// 把content的替换之
|
||||
// console.log('ok, writeBase64 ok');
|
||||
try {
|
||||
console.log(parsedRes);
|
||||
jsonNote.Content = me.parseEvernoteContent(jsonNote.Content, parsedRes);
|
||||
jsonNote.Attachs = attachs;
|
||||
} catch(e) {
|
||||
console.log(e);
|
||||
}
|
||||
console.log(jsonNote);
|
||||
return callback && callback(jsonNote);
|
||||
}
|
||||
);
|
||||
},
|
||||
|
||||
// callback 是全局的
|
||||
// eachFileCallback是每一个文件的
|
||||
// eachNoteFileCallback是每一个笔记的
|
||||
importFromEvernote: function(notebookId, filePaths, callback, eachFileCallback, eachNoteCallback) {
|
||||
var me = this;
|
||||
var filePaths = filePaths.split(';');
|
||||
|
||||
async.eachSeries(filePaths, function(path, cb) {
|
||||
fs.readFile(path, function(err, xml) {
|
||||
me.parseEvernote(notebookId, xml + '', function(ret) {
|
||||
// 单个文件完成
|
||||
eachFileCallback(ret, path)
|
||||
cb();
|
||||
},
|
||||
// 单个笔记
|
||||
function(ret) {
|
||||
eachNoteCallback(ret);
|
||||
});
|
||||
});
|
||||
}, function() {
|
||||
// 全部完成
|
||||
callback(true);
|
||||
});
|
||||
},
|
||||
|
||||
// 解析evernote xml
|
||||
parseEvernote: function (notebookId, xml, callback, eachCallback) {
|
||||
var me = this;
|
||||
xml2js.parseString(xml, function (err, result) {
|
||||
// console.log(result);
|
||||
if(err) {
|
||||
return callback(false);
|
||||
}
|
||||
try {
|
||||
var notes = result['en-export']['note'];
|
||||
} catch(e) {
|
||||
return callback(false);
|
||||
}
|
||||
async.eachSeries(notes, function(note, cb) {
|
||||
me.parseEachNote(note, function(jsonNote) {
|
||||
if(jsonNote) {
|
||||
try {
|
||||
|
||||
// 保存到数据库中
|
||||
jsonNote.NoteId = Common.objectId();
|
||||
jsonNote._id = jsonNote.NoteId;
|
||||
jsonNote.IsNew = true;
|
||||
jsonNote.NotebookId = notebookId;
|
||||
jsonNote.Desc = '';
|
||||
|
||||
// jsonNote.Content = "";
|
||||
// jsonNote.Attachs = null;
|
||||
|
||||
// console.log(jsonNote);
|
||||
|
||||
// eachCallback && eachCallback(false);
|
||||
// return cb();
|
||||
|
||||
// 添加tags
|
||||
if(jsonNote.Tags && jsonNote.Tags.length > 0) {
|
||||
for(var h = 0; h < jsonNote.Tags.length; ++h) {
|
||||
var tagTitle = jsonNote.Tags[h];
|
||||
Tag.addOrUpdateTag(tagTitle, function(tag) {
|
||||
Web.addTag(tag);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Note.updateNoteOrContent(jsonNote, function(insertedNote) {
|
||||
eachCallback && eachCallback(insertedNote);
|
||||
cb();
|
||||
});
|
||||
} catch(e) {
|
||||
console.log(e);
|
||||
}
|
||||
}
|
||||
cb();
|
||||
});
|
||||
}, function() {
|
||||
callback && callback(true);
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = Import;
|
Reference in New Issue
Block a user