Files
desktop-app/node_modules/api.js
2015-02-07 00:32:22 +08:00

506 lines
12 KiB
JavaScript

var db = require('db');
var async = require('async');
var User = require('user');
var Note = require('note');
var Notebook = require('notebook');
var Common = require('common');
var Tags = db.tags;
var needle = require('needle');
var fs = require('fs');
function log(o) {
console.log(o);
}
// log(Common);
// log(db);
// log("??")
// 远程数据服务
var Api = {
leanoteUrl: 'http://localhost:9000',
baseUrl: 'http://localhost:9000/api',
getUrl: function(url, param) {
if(!User) {
}
var url = this.baseUrl + '/' + url;
var token = User.getToken();
param = param || {};
param.token = token;
if(param) {
var paramStr = '';
for(var i in param) {
paramStr += i + '=' + param[i] + '&';
}
}
if(url.indexOf('?') >= 0) {
return url + '&' + paramStr;
}
return url + '?' + paramStr;
},
// 登录
auth: function(email, pwd, callback) {
var me = this;
// log({emai: email, pwd: pwd});
// log(this.getUrl('auth/login', {email: email, pwd: pwd}));
needle.get(this.getUrl('auth/login', {email: email, pwd: pwd}), function(error, response) {
if(error) {
return callback && callback(false);
}
// needle.get('http://localhost/phpinfo.php?email=xx', {emai: email, pwd: pwd}, function(error, response) {
var ret = response.body;
// 登录成功, 保存token
// log('login ret');
// log(ret);
if(Common.isOk(ret)) {
ret.Pwd = pwd;
User.setCurUser(ret);
callback && callback(ret);
} else {
log('log failed');
callback && callback(false);
}
});
},
post: function() {
var me = this;
var options = {
headers: { 'X-Custom-Header': 'Bumbaway atuna' }
}
// you can pass params as a string or as an object.
needle.post(me.getUrl('auth/login'), 'foo=bar', options, function(err, resp) {
var ret = resp.body;
log(ret);
});
},
// get图片
getImageTest: function(callback) {
needle.get('http://localhost:9000/images/logo.png', function(err, resp) {
// log(resp.body);
/*
{ 'accept-ranges': 'bytes',
'content-disposition': 'inline; filename="logo.png"',
'content-length': '8583',
'content-type': 'image/png',
date: 'Mon, 19 Jan 2015 15:01:47 GMT',
*/
// log(resp.headers);
fs.writeFile('/Users/life/Desktop/aa.png', resp.body);
});
},
// 测试
uploadImage: function() {
var data = {
foo: 'bar',
cc: [1,2,3,3],
dd: {name: 'life', age: 18},
image: { file: '/Users/life/Desktop/imageplus.png', content_type: 'image/png' }
}
needle.post('http://localhost/phpinfo.php', data, { multipart: true }, function(err, resp, body) {
// needle will read the file and include it in the form-data as binary
console.log(resp.body);
});
},
getSyncNotebooks: function(afterUsn, maxEntry, callback) {
var me = this;
var url = this.getUrl('notebook/getSyncNotebooks', {afterUsn: afterUsn, maxEntry: maxEntry});
needle.get(url, function(error, response) {
if(error) {
return callback && callback(false);
}
var ret = response.body;
log(ret);
log(Common);
if(Common.isOk(ret)) {
callback && callback(ret);
} else {
callback && callback(false);
}
});
},
getSyncNotes: function(afterUsn, maxEntry, callback) {
var me = this;
var url = this.getUrl('note/getSyncNotes', {afterUsn: afterUsn, maxEntry: maxEntry});
log(url);
needle.get(url, function(error, response) {
if(error) {
console.log('note/getSyncNotes');
console.log(error);
return callback && callback(false);
}
var ret = response.body;
if(Common.isOk(ret)) {
callback && callback(ret);
} else {
callback && callback(false);
}
});
},
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--')
var url = this.getUrl('user/getSyncState');
log(url);
needle.get(url, function(error, response) {
if(error) {
return callback && callback(false);
}
var ret = response.body;
log('--getSyncState--ret---')
log(ret);
if(Common.isOk(ret)) {
callback && callback(ret);
} else {
callback && callback(false);
}
});
},
// 获取笔记内容, 获取之后保存到笔记中
getNoteContent: function(noteId, callback) {
var me = this;
var url = this.getUrl('note/getNoteContent', {noteId: noteId});
log(url);
needle.get(url, function(error, response) {
if(error) {
log(error);
return callback && callback(false);
}
var ret = response.body;
log('--------')
log(ret);
if(Common.isOk(ret)) { // {Content: 'xx', NoteId: 'xxx'}
// Note.updateNoteContentForce(noteId, ret.Content, function() {
callback && callback(ret);
// });
} else {
callback && callback(false);
}
});
},
// TODO
// get图片, 获取内容后, 得到所有图片链接, 异步去获取图片, 并修改图片链接,
// 将https://leanote.com/api/resource/getImage?imageId=xx
// 转成app://leanote/public/files, 内部可以是个服务器吗? 请求内部的controller
getImage: function(fileId, callback) {
var me = this;
var url = me.getUrl('file/getImage', {fileId: fileId});
log(url);
needle.get(url, function(err, resp) {
if(err) {
return callback && callback(false);
}
// log(resp.body);
/*
{ 'accept-ranges': 'bytes',
'content-disposition': 'inline; filename="logo.png"',
'content-length': '8583',
'content-type': 'image/png',
date: 'Mon, 19 Jan 2015 15:01:47 GMT',
*/
// log(resp.headers);
if(err) {
callback(false);
} else {
var typeStr = resp.headers['content-type'];
log(resp.headers);
log(typeStr);
var type = 'png';
if(typeStr) {
var typeArr = typeStr.split('/');
if(typeStr.length > 1) {
type = typeArr[1];
}
}
var filename = Common.uuid() + '.' + type;
var imagePath = User.getCurUserImagesPath();
var imagePathAll = imagePath + '/' + filename;
log(imagePathAll);
fs.writeFile(imagePathAll, resp.body, function(err) {
if(err) {
log(err);
log('local save image failed 本地保存失败');
callback(false);
} else {
callback(imagePathAll, filename);
}
});
}
});
},
//------------
// 笔记本操作
//------------
// 添加
addNotebook: function(notebook, callback) {
var me = this;
// notebook.ParentNotebookId是本的, 要得到远程的
Notebook.getServerNotebookIdByNotebookId(notebook.ParentNotebookId, function(serverNotebookId) {
var data = {
title: notebook.Title,
seq: notebook.Seq,
parentNotebookId: serverNotebookId
}
log('add notebook');
log(data);
needle.post(me.getUrl('notebook/addNotebook'), data, {}, function(err, resp) {
if(err) {
return callback(false);
}
var ret = resp.body;
log(ret);
if(Common.isOk(ret)) {
callback(ret);
} else {
callback(false);
}
});
});
},
// 更新
updateNotebook: function(notebook, callback) {
var me = this;
Notebook.getServerNotebookIdByNotebookId(notebook.ParentNotebookId, function(serverNotebookId) {
var data = {
notebookId: notebook.ServerNotebookId,
title: notebook.Title,
usn: notebook.Usn,
seq: notebook.Seq,
parentNotebookId: serverNotebookId || ""
}
log('update notebook');
log(data);
needle.post(me.getUrl('notebook/updateNotebook'), data, {}, function(err, resp) {
if(err) {
log('err');
log(err);
return callback(false);
}
var ret = resp.body;
log('update notebook ret:');
log(ret);
if(Common.isOk(ret)) {
callback(ret);
} else {
callback(false);
}
});
});
},
// 删除
deleteNotebook: function(notebook, callback) {
var me = this;
var data = {notebookId: notebook.ServerNotebookId, usn: notebook.Usn};
log('delete notebook');
needle.post(me.getUrl('notebook/deleteNotebook'), data, {}, function(err, resp) {
if(err) {
return callback(false);
}
var ret = resp.body;
log('delete notebook ret');
log(ret);
if(Common.isOk(ret)) {
// 以后不要再发了
Notebook.setNotDirty(notebook.NotebookId);
callback(ret);
} else {
callback(false);
try {
log('delete notebook conflict');
// 代表冲突了, 那么本地的删除无效, 设为IsDirty为false, 不删除
// 待以后同步
if(ret.Msg == 'conflict') {
log('delete notebook conflict: setNotDirtyNotDelete');
Notebook.setNotDirtyNotDelete(notebook.NotebookId);
} else {
log('delete notebook conflict: setNotDirty');
Notebook.setNotDirty(notebook.NotebookId);
}
} catch(e) {}
}
});
},
//---------
// note
//--------
// 获取笔记
// noteId是serverNoteId
getNote: function(noteId, callback) {
needle.get(this.getUrl('note/getNote', {NoteId: noteId}), function(error, response) {
if(error) {
return callback && callback(false);
}
var ret = response.body;
if(Common.isOk(ret)) {
callback && callback(ret);
} else {
log(error);
callback && callback(false);
}
});
},
// 添加笔记
// 要把文件也发送过去
addNote: function(note, callback) {
var me = this;
// note.NotebookId是本的, 要得到远程的
Notebook.getServerNotebookIdByNotebookId(note.NotebookId, function(serverNotebookId) {
var data = {
Title: note.Title,
NotebookId: serverNotebookId,
Content: note.Content,
IsMarkdown: note.isMarkdown,
Tags: note.Tags,
IsBlog: note.IsBlog,
Files: note.Files,
FileDatas: note.FileDatas
}
// log('add note');
// log(data);
// files处理
var needMultiple = false;
for(var i in data.FileDatas) {
needMultiple = true;
break;
}
// 最终传递的数据
console.log('end transfer data');
console.log(data);
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) {};
});
},
// 更新
updateNote: function(note, callback) {
var me = this;
Notebook.getServerNotebookIdByNotebookId(note.NotebookId, function(serverNotebookId) {
var data = {
noteId: note.ServerNoteId,
notebookId: serverNotebookId || "",
title: note.Title,
usn: note.Usn,
isTrash: note.IsTrash,
content: note.Content,
Files: note.Files,
FileDatas: note.FileDatas
}
console.log('update note :');
console.log(data);
// files处理
var needMultiple = false;
for(var i in data.FileDatas) {
needMultiple = true;
break;
}
needle.post(me.getUrl('note/updateNote'), data, {multipart: needMultiple}, function(err, resp) {
if(err) {
log('err');
log(err);
return callback(false);
}
var ret = resp.body;
log('update note ret:');
log(ret);
callback(ret);
/*
if(Common.isOk(ret)) {
} else {
callback(false);
}
*/
});
});
},
// 删除
deleteTrash: function(note, callback) {
var me = this;
var data = {noteId: note.ServerNoteId, usn: note.Usn};
log('delete note');
// 这里要重新require下, 不然为{}
Note = require('note');
needle.post(me.getUrl('note/deleteTrash'), data, {}, function(err, resp) {
if(err) {
return callback(false);
}
var ret = resp.body;
log('delete note ret');
log(ret);
if(Common.isOk(ret)) {
// 以后不要再发了
Note.setNotDirty(note.NoteId);
callback(ret);
} else {
callback(false);
try {
log('delete note conflict');
// 代表冲突了, 那么本地的删除无效, 设为IsDirty为false, 不删除
// 待以后同步
if(ret.Msg == 'conflict') {
log('delete note conflict: setNotDirtyNotDelete');
Note.setNotDirtyNotDelete(note.NoteId);
} else {
log('delete note conflict: setNotDirty');
Note.setNotDirty(note.NoteId);
}
} catch(e) {}
}
});
},
test: function() {
log("??");
Note = require('note');
log(Note);
}
};
module.exports = Api;