Refactor main/index, remove unused function

This commit is contained in:
AkiraFukushima 2018-03-09 17:08:27 +09:00
parent bee36b5514
commit c2305197e4
7 changed files with 100 additions and 97 deletions

45
src/main/account.js Normal file
View File

@ -0,0 +1,45 @@
import empty from 'is-empty'
export default class Account {
constructor (db) {
this.db = db
}
listInstances () {
return new Promise((resolve, reject) => {
this.db.find({accessToken: { $ne: '' }}, (err, doc) => {
if (err) return reject(err)
if (empty(doc)) return reject(new EmptyRecordError('empty'))
const instances = doc.map((e, i, array) => {
return { baseURL: e.baseURL, id: e._id }
})
resolve(instances)
})
})
}
getInstance (id) {
return new Promise((resolve, reject) => {
this.db.findOne(
{
_id: id
},
(err, doc) => {
if (err) return reject(err)
if (empty(doc)) return reject(new EmptyRecordError('empty'))
const instance = {
baseURL: doc.baseURL,
id: doc.id
}
resolve(instance)
}
)
})
}
}
class EmptyRecordError {
constructor (message) {
this.message = message
}
}

View File

@ -1,5 +1,4 @@
import Mastodon from 'mastodon-api'
import empty from 'is-empty'
const appName = 'whalebird'
const scope = 'read write follow'
@ -57,39 +56,5 @@ export default class Authentication {
})
})
}
// TODO: このクラスにいる必要性がない,外に出したい
listInstances () {
return new Promise((resolve, reject) => {
this.db.find({accessToken: { $ne: '' }}, (err, doc) => {
if (err) return reject(err)
if (empty(doc)) reject(new EmptyTokenError('empty'))
const instances = doc.map((e, i, array) => {
return { baseURL: e.baseURL, id: e._id }
})
resolve(instances)
})
})
}
loadTokenFromLocal () {
return new Promise((resolve, reject) => {
this.db.findOne(
{
baseURL: this.baseURL
},
(err, doc) => {
if (err) return reject(err)
return resolve(doc.accessToken)
}
)
})
}
// TODO: Refresh access token when expired
}
class EmptyTokenError {
constructor (message) {
this.message = message
}
}

View File

@ -6,6 +6,7 @@ import storage from 'electron-json-storage'
import empty from 'is-empty'
import Authentication from './auth'
import Account from './account'
/**
* Set `__static` path to static files in production
@ -58,81 +59,70 @@ app.on('activate', () => {
let auth = new Authentication(db)
// TODO: error handling
ipcMain.on('get-auth-link', (event, domain) => {
ipcMain.on('get-auth-url', (event, domain) => {
auth.getAuthorizationUrl(`https://${domain}`)
.catch(err => console.error(err))
.catch((err) => {
console.error(err)
event.sender.send('error-get-auth-url', err)
})
.then((url) => {
console.log(url)
event.sender.send('auth-link-reply', url)
event.sender.send('response-get-auth-url', url)
shell.openExternal(url)
})
})
// TODO: error handling
ipcMain.on('get-access-token', (event, code) => {
auth.getAccessToken(code)
.catch(err => console.error(err))
.catch((err) => {
console.error(err)
event.sender.send('error-get-access-token', err)
})
.then((token) => {
db.findOne({
accessToken: token
}, (err, doc) => {
if (err) return event.sender.send('error-access-token', err)
if (empty(doc)) return event.sender.send('error-access-token', 'error document is empty')
event.sender.send('access-token-reply', doc._id)
if (err) return event.sender.send('error-get-access-token', err)
if (empty(doc)) return event.sender.send('error-get-access-token', 'error document is empty')
event.sender.send('response-get-access-token', doc._id)
})
})
})
ipcMain.on('load-access-token', (event, _) => {
auth.loadTokenFromLocal()
.catch((err) => {
console.errror(err)
event.sender.send('error-access-token', err)
})
.then((token) => {
event.sender.send('local-access-token', token)
})
})
ipcMain.on('list-instances', (event, _) => {
auth.listInstances()
.catch((err) => {
console.error(err)
event.sender.send('empty-instances', err)
})
.then((instances) => {
event.sender.send('instances', instances)
})
})
// storage access
ipcMain.on('get-instance-token', (event, _) => {
// json storage
ipcMain.on('get-social-token', (event, _) => {
storage.get('config', (err, data) => {
if (err || empty(data)) {
console.log(err)
event.sender.send('error-instance-token', err)
event.sender.send('error-get-social-token', err)
} else {
event.sender.send('instance-token', data.token)
event.sender.send('response-get-social-token', data.token)
}
})
})
// db
// nedb
ipcMain.on('list-instances', (event, _) => {
const account = new Account(db)
account.listInstances()
.catch((err) => {
console.error(err)
event.sender.send('error-list-instances', err)
})
.then((instances) => {
event.sender.send('response-list-instances', instances)
})
})
ipcMain.on('get-instance', (event, id) => {
db.findOne(
{
_id: id
},
(err, doc) => {
if (err || empty(doc)) return event.sender.send('empty-instance', err)
const instance = {
baseURL: doc.baseURL,
id: doc.id
}
event.sender.send('instance', instance)
}
)
const account = new Account(db)
account.getInstance(id)
.catch((err) => {
event.sender.send('error-get-instance', err)
})
.then((instance) => {
event.sender.send('response-get-instance', instance)
})
})
/**

View File

@ -8,11 +8,11 @@ const Authorize = {
submit ({ commit }, code) {
return new Promise((resolve, reject) => {
ipcRenderer.send('get-access-token', code)
ipcRenderer.on('access-token-reply', (event, arg) => {
console.log(arg)
resolve(arg)
ipcRenderer.on('response-get-access-token', (event, id) => {
console.log(id)
resolve(id)
})
ipcRenderer.on('error-access-token', (event, err) => {
ipcRenderer.on('error-get-access-token', (event, err) => {
console.log(err)
})
})

View File

@ -14,10 +14,10 @@ const GlobalHeader = {
listInstances ({ commit }) {
return new Promise((resolve, reject) => {
ipcRenderer.send('list-instances', 'list')
ipcRenderer.on('empty-instances', (event, err) => {
ipcRenderer.on('error-list-instances', (event, err) => {
reject(err)
})
ipcRenderer.on('instances', (event, instances) => {
ipcRenderer.on('response-list-instances', (event, instances) => {
commit('updateInstances', instances)
resolve(instances)
})

View File

@ -17,8 +17,8 @@ const Login = {
},
actions: {
searchInstance ({ commit }, domain) {
ipcRenderer.send('get-instance-token', 'get')
ipcRenderer.on('instance-token', (event, token) => {
ipcRenderer.send('get-social-token', 'get')
ipcRenderer.on('response-get-social-token', (event, token) => {
axios
.get(`https://instances.social/api/1.0/instances/search?q=${domain}`, {
'headers': { 'Authorization': `Bearer ${token}` }
@ -31,9 +31,12 @@ const Login = {
},
fetchLogin ({ commit }, instance) {
return new Promise((resolve, reject) => {
ipcRenderer.send('get-auth-link', instance)
ipcRenderer.on('auth-link-reply', (event, arg) => {
resolve(arg)
ipcRenderer.send('get-auth-url', instance)
ipcRenderer.on('error-get-auth-url', (event, err) => {
reject(err)
})
ipcRenderer.on('response-get-auth-url', (event, url) => {
resolve(url)
})
})
},

View File

@ -16,11 +16,11 @@ const SideMenu = {
actions: {
fetchInstance ({ commit }, id) {
ipcRenderer.send('get-instance', id)
ipcRenderer.on('empty-instance', (event, err) => {
ipcRenderer.on('error-get-instance', (event, err) => {
// TODO: handle error
console.log(err)
})
ipcRenderer.on('instance', (event, instance) => {
ipcRenderer.on('response-get-instance', (event, instance) => {
commit('updateInstance', instance)
})
}