mirror of
https://github.com/h3poteto/whalebird-desktop
synced 2025-01-27 07:46:15 +01:00
refs #22 Add change account shortcut
This commit is contained in:
parent
79a6d27ff6
commit
79670ab17a
@ -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)
|
||||
|
@ -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' })
|
||||
},
|
||||
|
@ -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'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user