refs #22 Add change account shortcut

This commit is contained in:
AkiraFukushima 2018-03-21 12:22:45 +09:00
parent 79a6d27ff6
commit 79670ab17a
4 changed files with 142 additions and 112 deletions

View File

@ -26,110 +26,138 @@ let db = new Datastore({
autoload: true
})
async function listAccounts () {
try {
const account = new Account(db)
const accounts = await account.listAccounts()
return accounts
} catch (err) {
return []
}
}
function createWindow () {
/**
* Set menu
* List accounts
*/
const template = [
{
label: 'Whalebird',
submenu: [
{
label: 'About Whalebird',
role: 'about'
},
{
type: 'separator'
},
{
label: 'Quit',
accelerator: 'CmdOrCtrl+Q',
role: 'quit'
}
]
},
{
label: 'Toot',
submenu: [
{
label: 'New Toot',
accelerator: 'CmdOrCtrl+N',
listAccounts()
.then((accounts) => {
const accountsChange = accounts.map((a, index) => {
return {
label: a.domain,
accelerator: `CmdOrCtrl+${index + 1}`,
click: () => {
mainWindow.webContents.send('CmdOrCtrl+N')
mainWindow.webContents.send('change-account', Object.assign(a, { index: index }))
}
}
]
},
{
label: 'Edit',
submenu: [
})
/**
* Set menu
*/
const template = [
{
label: 'Undo',
accelerator: 'CmdOrCtrl+Z',
role: 'undo'
label: 'Whalebird',
submenu: [
{
label: 'About Whalebird',
role: 'about'
},
{
type: 'separator'
},
{
label: 'Quit',
accelerator: 'CmdOrCtrl+Q',
role: 'quit'
}
]
},
{
label: 'Redo',
accelerator: 'Shift+CmdOrCtrl+Z',
role: 'redo'
label: 'Toot',
submenu: [
{
label: 'New Toot',
accelerator: 'CmdOrCtrl+N',
click: () => {
mainWindow.webContents.send('CmdOrCtrl+N')
}
}
]
},
{
type: 'separator'
label: 'Edit',
submenu: [
{
label: 'Undo',
accelerator: 'CmdOrCtrl+Z',
role: 'undo'
},
{
label: 'Redo',
accelerator: 'Shift+CmdOrCtrl+Z',
role: 'redo'
},
{
type: 'separator'
},
{
label: 'Cut',
accelerator: 'CmdOrCtrl+X',
role: 'cut'
},
{
label: 'Copy',
accelerator: 'CmdOrCtrl+C',
role: 'copy'
},
{
label: 'Paste',
accelerator: 'CmdOrCtrl+V',
role: 'paste'
},
{
label: 'Select All',
accelerator: 'CmdOrCtrl+A',
role: 'selectall'
}
]
},
{
label: 'Cut',
accelerator: 'CmdOrCtrl+X',
role: 'cut'
},
{
label: 'Copy',
accelerator: 'CmdOrCtrl+C',
role: 'copy'
},
{
label: 'Paste',
accelerator: 'CmdOrCtrl+V',
role: 'paste'
},
{
label: 'Select All',
accelerator: 'CmdOrCtrl+A',
role: 'selectall'
label: 'Window',
submenu: [
{
label: 'Close Window',
role: 'close'
},
{
label: 'Minimize',
role: 'minimize'
},
{
type: 'separator'
}
].concat(accountsChange)
}
]
},
{
label: 'Window',
submenu: [
{
label: 'Close Window',
role: 'close'
},
{
label: 'Minimize',
role: 'minimize'
}
]
}
]
const menu = Menu.buildFromTemplate(template)
Menu.setApplicationMenu(menu)
const menu = Menu.buildFromTemplate(template)
Menu.setApplicationMenu(menu)
/**
* Initial window options
*/
mainWindow = new BrowserWindow({
height: 563,
useContentSize: true,
width: 1000
})
/**
* Initial window options
*/
mainWindow = new BrowserWindow({
height: 563,
useContentSize: true,
width: 1000
})
mainWindow.loadURL(winURL)
mainWindow.loadURL(winURL)
mainWindow.on('closed', () => {
mainWindow = null
})
mainWindow.on('closed', () => {
mainWindow = null
})
})
}
app.on('ready', createWindow)

View File

@ -3,7 +3,7 @@
<el-menu
:default-active="defaultActive"
class="el-menu-vertical account-menu"
:collapse="isCollapse"
:collapse="true"
:route="true"
background-color="#4a5664"
text-color="#909399"
@ -28,35 +28,27 @@ import { mapState } from 'vuex'
export default {
name: 'global-header',
data () {
return {
isCollapse: true,
defaultActive: '0'
}
},
computed: {
...mapState({
defaultActive: state => state.GlobalHeader.defaultActive,
accounts: state => state.GlobalHeader.accounts
})
},
created () {
const loading = this.$loading({
lock: true,
text: 'Loading',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
})
this.$store.dispatch('GlobalHeader/listAccounts')
.then((accounts) => {
loading.close()
return this.$router.push({ path: `/${accounts[0]._id}/home` })
})
.catch(() => {
loading.close()
return this.$router.push({ path: '/login' })
})
this.initialize()
},
methods: {
async initialize () {
await this.$store.dispatch('GlobalHeader/removeShortcutEvents')
this.$store.dispatch('GlobalHeader/watchShortcutEvents')
try {
const accounts = await this.$store.dispatch('GlobalHeader/listAccounts')
return this.$router.push({ path: `/${accounts[0]._id}/home` })
} catch (err) {
return this.$router.push({ path: '/login' })
}
},
login () {
return this.$router.push({ path: '/login' })
},

View File

@ -1,11 +1,16 @@
import { ipcRenderer } from 'electron'
import router from '../router'
const GlobalHeader = {
namespaced: true,
state: {
defaultActive: '0',
accounts: []
},
mutations: {
changeDefaultActive (state, index) {
state.defaultActive = index
},
updateAccounts (state, accounts) {
state.accounts = accounts
}
@ -22,6 +27,16 @@ const GlobalHeader = {
resolve(accounts)
})
})
},
watchShortcutEvents ({ commit }) {
ipcRenderer.on('change-account', (event, account) => {
router.push(`/${account._id}/home`)
commit('changeDefaultActive', account.index.toString())
})
},
async removeShortcutEvents () {
ipcRenderer.removeAllListeners('change-account')
return 'removeShortcutEvents'
}
}
}

View File

@ -142,14 +142,9 @@ const TimelineSpace = {
ipcRenderer.on('CmdOrCtrl+N', () => {
commit('TimelineSpace/NewTootModal/changeModal', true, { root: true })
})
ipcRenderer.on('CmdOrCtrl+R', () => {
// TODO: reply window
console.log('reply')
})
},
async removeShortcutEvents () {
ipcRenderer.removeAllListeners('CmdOrCtrl+N')
ipcRenderer.removeAllListeners('CmdOrCtrl+R')
return 'removeShortcutEvents'
},
fetchHomeTimeline ({ commit }, account) {