Merge pull request #867 from h3poteto/iss-850
refs #850 Replace Preferences with typescript
This commit is contained in:
commit
efbb08cdb4
|
@ -29,6 +29,8 @@ module.exports = {
|
||||||
{
|
{
|
||||||
'argsIgnorePattern': '^_'
|
'argsIgnorePattern': '^_'
|
||||||
}
|
}
|
||||||
]
|
],
|
||||||
|
'camelcase': 'off',
|
||||||
|
'@typescript-eslint/camelcase': 'off'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,24 @@
|
||||||
import { createLocalVue } from '@vue/test-utils'
|
import { createLocalVue } from '@vue/test-utils'
|
||||||
import Vuex from 'vuex'
|
import Vuex from 'vuex'
|
||||||
import { ipcMain } from '~/spec/mock/electron'
|
import { ipcMain } from '~/spec/mock/electron'
|
||||||
import Account from '@/store/Preferences/Account'
|
import Account, { AccountState } from '@/store/Preferences/Account'
|
||||||
|
import AccountType from '~/src/types/account'
|
||||||
|
|
||||||
const state = () => {
|
const account: AccountType = {
|
||||||
|
_id: 'sample',
|
||||||
|
baseURL: 'http://example.com',
|
||||||
|
domain: 'example.com',
|
||||||
|
clientId: 'hoge',
|
||||||
|
clientSecret: 'hogehoge',
|
||||||
|
accessToken: null,
|
||||||
|
refreshToken: null,
|
||||||
|
username: null,
|
||||||
|
accountId: null,
|
||||||
|
avatar: null,
|
||||||
|
order: 1
|
||||||
|
}
|
||||||
|
|
||||||
|
const state = (): AccountState => {
|
||||||
return {
|
return {
|
||||||
accounts: [],
|
accounts: [],
|
||||||
accountLoading: false
|
accountLoading: false
|
||||||
|
@ -35,7 +50,7 @@ describe('Account', () => {
|
||||||
|
|
||||||
describe('loadAccounts', () => {
|
describe('loadAccounts', () => {
|
||||||
it('error', async () => {
|
it('error', async () => {
|
||||||
ipcMain.once('list-accounts', (event, _) => {
|
ipcMain.once('list-accounts', (event: any, _) => {
|
||||||
event.sender.send('error-list-accounts', new Error())
|
event.sender.send('error-list-accounts', new Error())
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -45,86 +60,86 @@ describe('Account', () => {
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
it('success', async () => {
|
it('success', async () => {
|
||||||
ipcMain.once('list-accounts', (event, _) => {
|
ipcMain.once('list-accounts', (event: any, _) => {
|
||||||
event.sender.send('response-list-accounts', ['accounts'])
|
event.sender.send('response-list-accounts', [account])
|
||||||
})
|
})
|
||||||
await store.dispatch('Account/loadAccounts')
|
await store.dispatch('Account/loadAccounts')
|
||||||
expect(store.state.Account.accounts).toEqual(['accounts'])
|
expect(store.state.Account.accounts).toEqual([account])
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('removeAccount', () => {
|
describe('removeAccount', () => {
|
||||||
it('error', async () => {
|
it('error', async () => {
|
||||||
ipcMain.once('remove-account', (event, _) => {
|
ipcMain.once('remove-account', (event: any, _) => {
|
||||||
event.sender.send('error-remove-account', new Error())
|
event.sender.send('error-remove-account', new Error())
|
||||||
})
|
})
|
||||||
await store.dispatch('Account/removeAccount', 'account')
|
await store.dispatch('Account/removeAccount', account)
|
||||||
.catch((err: Error) => {
|
.catch((err: Error) => {
|
||||||
expect(err instanceof Error).toEqual(true)
|
expect(err instanceof Error).toEqual(true)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
it('success', async () => {
|
it('success', async () => {
|
||||||
ipcMain.once('remove-account', (event, _) => {
|
ipcMain.once('remove-account', (event: any, _) => {
|
||||||
event.sender.send('response-remove-account', 1)
|
event.sender.send('response-remove-account')
|
||||||
})
|
})
|
||||||
const res = await store.dispatch('Account/removeAccount', 'account')
|
const res = await store.dispatch('Account/removeAccount', account)
|
||||||
expect(res).toEqual(undefined)
|
expect(res).toEqual(undefined)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('forwardAccount', () => {
|
describe('forwardAccount', () => {
|
||||||
it('error', async () => {
|
it('error', async () => {
|
||||||
ipcMain.once('forward-account', (event, _) => {
|
ipcMain.once('forward-account', (event: any, _) => {
|
||||||
event.sender.send('error-forward-account', new Error())
|
event.sender.send('error-forward-account', new Error())
|
||||||
})
|
})
|
||||||
await store.dispatch('Account/forwardAccount', 'account')
|
await store.dispatch('Account/forwardAccount', account)
|
||||||
.catch((err: Error) => {
|
.catch((err: Error) => {
|
||||||
expect(err instanceof Error).toEqual(true)
|
expect(err instanceof Error).toEqual(true)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
it('success', async () => {
|
it('success', async () => {
|
||||||
ipcMain.once('forward-account', (event, _) => {
|
ipcMain.once('forward-account', (event: any, _) => {
|
||||||
event.sender.send('response-forward-account', 1)
|
event.sender.send('response-forward-account')
|
||||||
})
|
})
|
||||||
const res = await store.dispatch('Account/forwardAccount', 'account')
|
const res = await store.dispatch('Account/forwardAccount', account)
|
||||||
expect(res).toEqual(undefined)
|
expect(res).toEqual(undefined)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('backwardAccount', () => {
|
describe('backwardAccount', () => {
|
||||||
it('error', async () => {
|
it('error', async () => {
|
||||||
ipcMain.once('backward-account', (event, _) => {
|
ipcMain.once('backward-account', (event: any, _) => {
|
||||||
event.sender.send('error-backward-account', new Error())
|
event.sender.send('error-backward-account', new Error())
|
||||||
})
|
})
|
||||||
await store.dispatch('Account/backwardAccount', 'account')
|
await store.dispatch('Account/backwardAccount', account)
|
||||||
.catch((err: Error) => {
|
.catch((err: Error) => {
|
||||||
expect(err instanceof Error).toEqual(true)
|
expect(err instanceof Error).toEqual(true)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
it('success', async () => {
|
it('success', async () => {
|
||||||
ipcMain.once('backward-account', (event, _) => {
|
ipcMain.once('backward-account', (event: any, _) => {
|
||||||
event.sender.send('response-backward-account', 1)
|
event.sender.send('response-backward-account')
|
||||||
})
|
})
|
||||||
const res = await store.dispatch('Account/backwardAccount', 'account')
|
const res = await store.dispatch('Account/backwardAccount', account)
|
||||||
expect(res).toEqual(undefined)
|
expect(res).toEqual(undefined)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('removeAllAccounts', () => {
|
describe('removeAllAccounts', () => {
|
||||||
it('error', async () => {
|
it('error', async () => {
|
||||||
ipcMain.once('remove-all-accounts', (event, _) => {
|
ipcMain.once('remove-all-accounts', (event: any, _) => {
|
||||||
event.sender.send('error-remove-all-accounts', new Error())
|
event.sender.send('error-remove-all-accounts', new Error())
|
||||||
})
|
})
|
||||||
await store.dispatch('Account/removeAllAccounts', 'account')
|
await store.dispatch('Account/removeAllAccounts', account)
|
||||||
.catch((err: Error) => {
|
.catch((err: Error) => {
|
||||||
expect(err instanceof Error).toEqual(true)
|
expect(err instanceof Error).toEqual(true)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
it('success', async () => {
|
it('success', async () => {
|
||||||
ipcMain.once('remove-all-accounts', (event, _) => {
|
ipcMain.once('remove-all-accounts', (event: any, _) => {
|
||||||
event.sender.send('response-remove-all-accounts', 1)
|
event.sender.send('response-remove-all-accounts')
|
||||||
})
|
})
|
||||||
const res = await store.dispatch('Account/removeAllAccounts', 'account')
|
const res = await store.dispatch('Account/removeAllAccounts', account)
|
||||||
expect(res).toEqual(undefined)
|
expect(res).toEqual(undefined)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
|
@ -5,10 +5,10 @@ import DisplayStyle from '~/src/constants/displayStyle'
|
||||||
import TimeFormat from '~/src/constants/timeFormat'
|
import TimeFormat from '~/src/constants/timeFormat'
|
||||||
import { LightTheme, DarkTheme } from '~/src/renderer/utils/theme'
|
import { LightTheme, DarkTheme } from '~/src/renderer/utils/theme'
|
||||||
import DefaultFonts from '@/utils/fonts'
|
import DefaultFonts from '@/utils/fonts'
|
||||||
import Appearance from '@/store/Preferences/Appearance'
|
import Appearance, { AppearanceState } from '@/store/Preferences/Appearance'
|
||||||
import { ipcMain } from '~/spec/mock/electron'
|
import { ipcMain } from '~/spec/mock/electron'
|
||||||
|
|
||||||
const state = () => {
|
const state = (): AppearanceState => {
|
||||||
return {
|
return {
|
||||||
appearance: {
|
appearance: {
|
||||||
theme: Theme.Light.key,
|
theme: Theme.Light.key,
|
||||||
|
@ -51,14 +51,14 @@ describe('Preferences/Appearance', () => {
|
||||||
App: App
|
App: App
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
ipcMain.once('update-preferences', (event, config) => {
|
ipcMain.once('update-preferences', (event: any, config: any) => {
|
||||||
event.sender.send('response-update-preferences', config)
|
event.sender.send('response-update-preferences', config)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('load', () => {
|
describe('load', () => {
|
||||||
it('loadAppearance', async () => {
|
it('loadAppearance', async () => {
|
||||||
ipcMain.once('get-preferences', (event, _) => {
|
ipcMain.once('get-preferences', (event: any, _) => {
|
||||||
event.sender.send('response-get-preferences', {
|
event.sender.send('response-get-preferences', {
|
||||||
appearance: {
|
appearance: {
|
||||||
theme: Theme.Dark.key,
|
theme: Theme.Dark.key,
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
import { createLocalVue } from '@vue/test-utils'
|
import { createLocalVue } from '@vue/test-utils'
|
||||||
import Vuex from 'vuex'
|
import Vuex from 'vuex'
|
||||||
import { ipcMain } from '~/spec/mock/electron'
|
import { ipcMain } from '~/spec/mock/electron'
|
||||||
import General from '@/store/Preferences/General'
|
import General, { GeneralState } from '@/store/Preferences/General'
|
||||||
|
|
||||||
const state = () => {
|
const state = (): GeneralState => {
|
||||||
return {
|
return {
|
||||||
general: {
|
general: {
|
||||||
sound: {
|
sound: {
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
import { createLocalVue } from '@vue/test-utils'
|
import { createLocalVue } from '@vue/test-utils'
|
||||||
import Vuex from 'vuex'
|
import Vuex from 'vuex'
|
||||||
import { ipcMain } from '~/spec/mock/electron'
|
import { ipcMain } from '~/spec/mock/electron'
|
||||||
import Language from '@/store/Preferences/Language'
|
import Language, { LanguageState } from '@/store/Preferences/Language'
|
||||||
import DefaultLanguage from '~/src/constants/language'
|
import DefaultLanguage from '~/src/constants/language'
|
||||||
|
|
||||||
const state = () => {
|
const state = (): LanguageState => {
|
||||||
return {
|
return {
|
||||||
language: {
|
language: {
|
||||||
language: DefaultLanguage.en.key
|
language: DefaultLanguage.en.key
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
import { createLocalVue } from '@vue/test-utils'
|
import { createLocalVue } from '@vue/test-utils'
|
||||||
import Vuex from 'vuex'
|
import Vuex from 'vuex'
|
||||||
import { ipcMain } from '~/spec/mock/electron'
|
import { ipcMain } from '~/spec/mock/electron'
|
||||||
import Notification from '@/store/Preferences/Notification'
|
import Notification, { NotificationState } from '@/store/Preferences/Notification'
|
||||||
|
|
||||||
const state = () => {
|
const state = (): NotificationState => {
|
||||||
return {
|
return {
|
||||||
notification: {
|
notification: {
|
||||||
notify: {
|
notify: {
|
||||||
|
|
|
@ -1,8 +1,23 @@
|
||||||
import Account from '@/store/Preferences/Account'
|
import Account, { AccountState, MUTATION_TYPES } from '@/store/Preferences/Account'
|
||||||
|
import AccountType from '~/src/types/account'
|
||||||
|
|
||||||
|
const account: AccountType = {
|
||||||
|
_id: 'sample',
|
||||||
|
baseURL: 'http://example.com',
|
||||||
|
domain: 'example.com',
|
||||||
|
clientId: 'hoge',
|
||||||
|
clientSecret: 'hogehoge',
|
||||||
|
accessToken: null,
|
||||||
|
refreshToken: null,
|
||||||
|
username: null,
|
||||||
|
accountId: null,
|
||||||
|
avatar: null,
|
||||||
|
order: 1
|
||||||
|
}
|
||||||
|
|
||||||
describe('Preferences/Account', () => {
|
describe('Preferences/Account', () => {
|
||||||
describe('mutations', () => {
|
describe('mutations', () => {
|
||||||
let state
|
let state: AccountState
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
state = {
|
state = {
|
||||||
accounts: [],
|
accounts: [],
|
||||||
|
@ -11,13 +26,13 @@ describe('Preferences/Account', () => {
|
||||||
})
|
})
|
||||||
describe('updateAccounts', () => {
|
describe('updateAccounts', () => {
|
||||||
it('should be updated', () => {
|
it('should be updated', () => {
|
||||||
Account.mutations.updateAccounts(state, ['account'])
|
Account.mutations![MUTATION_TYPES.UPDATE_ACCOUNTS](state, [account])
|
||||||
expect(state.accounts).toEqual(['account'])
|
expect(state.accounts).toEqual([account])
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
describe('updateAccountLoading', () => {
|
describe('updateAccountLoading', () => {
|
||||||
it('should be update', () => {
|
it('should be update', () => {
|
||||||
Account.mutations.updateAccountLoading(state, true)
|
Account.mutations![MUTATION_TYPES.UPDATE_ACCOUNT_LOADING](state, true)
|
||||||
expect(state.accountLoading).toEqual(true)
|
expect(state.accountLoading).toEqual(true)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
|
@ -3,10 +3,10 @@ import DisplayStyle from '~/src/constants/displayStyle'
|
||||||
import TimeFormat from '~/src/constants/timeFormat'
|
import TimeFormat from '~/src/constants/timeFormat'
|
||||||
import { LightTheme } from '~/src/renderer/utils/theme'
|
import { LightTheme } from '~/src/renderer/utils/theme'
|
||||||
import DefaultFonts from '@/utils/fonts'
|
import DefaultFonts from '@/utils/fonts'
|
||||||
import Appearance from '@/store/Preferences/Appearance'
|
import Appearance, { AppearanceState, MUTATION_TYPES } from '@/store/Preferences/Appearance'
|
||||||
|
|
||||||
describe('Preferences/Appearance', () => {
|
describe('Preferences/Appearance', () => {
|
||||||
let state
|
let state: AppearanceState
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
state = {
|
state = {
|
||||||
appearance: {
|
appearance: {
|
||||||
|
@ -23,7 +23,7 @@ describe('Preferences/Appearance', () => {
|
||||||
describe('mutations', () => {
|
describe('mutations', () => {
|
||||||
describe('updateAppearance', () => {
|
describe('updateAppearance', () => {
|
||||||
it('should be changed', () => {
|
it('should be changed', () => {
|
||||||
Appearance.mutations.updateAppearance(state, {
|
Appearance.mutations![MUTATION_TYPES.UPDATE_APPEARANCE](state, {
|
||||||
theme: Theme.Dark.key
|
theme: Theme.Dark.key
|
||||||
})
|
})
|
||||||
expect(state.appearance.theme).toEqual(Theme.Dark.key)
|
expect(state.appearance.theme).toEqual(Theme.Dark.key)
|
||||||
|
@ -31,7 +31,7 @@ describe('Preferences/Appearance', () => {
|
||||||
})
|
})
|
||||||
describe('updateFonts', () => {
|
describe('updateFonts', () => {
|
||||||
it('should be changed', () => {
|
it('should be changed', () => {
|
||||||
Appearance.mutations.updateFonts(state, ['font'])
|
Appearance.mutations![MUTATION_TYPES.UPDATE_FONTS](state, ['font'])
|
||||||
expect(state.fonts).toEqual(['font'])
|
expect(state.fonts).toEqual(['font'])
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
|
@ -1,13 +1,18 @@
|
||||||
import General from '@/store/Preferences/General'
|
import General, { GeneralState, MUTATION_TYPES } from '@/store/Preferences/General'
|
||||||
|
|
||||||
describe('Preferences/General', () => {
|
describe('Preferences/General', () => {
|
||||||
let state
|
let state: GeneralState
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
state = {
|
state = {
|
||||||
general: {
|
general: {
|
||||||
sound: {
|
sound: {
|
||||||
fav_rb: true,
|
fav_rb: true,
|
||||||
toot: true
|
toot: true
|
||||||
|
},
|
||||||
|
timeline: {
|
||||||
|
cw: false,
|
||||||
|
nfsw: false,
|
||||||
|
hideAllAttachments: false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
loading: false
|
loading: false
|
||||||
|
@ -16,7 +21,7 @@ describe('Preferences/General', () => {
|
||||||
|
|
||||||
describe('mutations', () => {
|
describe('mutations', () => {
|
||||||
it('updateGeneral', () => {
|
it('updateGeneral', () => {
|
||||||
General.mutations.updateGeneral(state, {
|
General.mutations![MUTATION_TYPES.UPDATE_GENERAL](state, {
|
||||||
sound: {
|
sound: {
|
||||||
fav_rb: false,
|
fav_rb: false,
|
||||||
toot: false
|
toot: false
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
import Language from '@/store/Preferences/Language'
|
import Language, { LanguageState, MUTATION_TYPES } from '@/store/Preferences/Language'
|
||||||
import DefaultLanguage from '~/src/constants/language'
|
import DefaultLanguage from '~/src/constants/language'
|
||||||
|
|
||||||
describe('Preferences/Language', () => {
|
describe('Preferences/Language', () => {
|
||||||
let state
|
let state: LanguageState
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
state = {
|
state = {
|
||||||
language: {
|
language: {
|
||||||
|
@ -13,7 +13,7 @@ describe('Preferences/Language', () => {
|
||||||
describe('mutations', () => {
|
describe('mutations', () => {
|
||||||
describe('updateLanguage', () => {
|
describe('updateLanguage', () => {
|
||||||
it('should be updated', () => {
|
it('should be updated', () => {
|
||||||
Language.mutations.updateLanguage(state, {
|
Language.mutations![MUTATION_TYPES.UPDATE_LANGUAGE](state, {
|
||||||
language: DefaultLanguage.ja.key
|
language: DefaultLanguage.ja.key
|
||||||
})
|
})
|
||||||
expect(state.language.language).toEqual(DefaultLanguage.ja.key)
|
expect(state.language.language).toEqual(DefaultLanguage.ja.key)
|
||||||
|
@ -21,7 +21,7 @@ describe('Preferences/Language', () => {
|
||||||
})
|
})
|
||||||
describe('changeLanguage', () => {
|
describe('changeLanguage', () => {
|
||||||
it('should be changed', () => {
|
it('should be changed', () => {
|
||||||
Language.mutations.changeLanguage(state, DefaultLanguage.ja.key)
|
Language.mutations![MUTATION_TYPES.CHANGE_LANGUAGE](state, DefaultLanguage.ja.key)
|
||||||
expect(state.language.language).toEqual(DefaultLanguage.ja.key)
|
expect(state.language.language).toEqual(DefaultLanguage.ja.key)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import Notification from '@/store/Preferences/Notification'
|
import Notification, { NotificationState, MUTATION_TYPES } from '@/store/Preferences/Notification'
|
||||||
|
|
||||||
describe('Preferences/Notification', () => {
|
describe('Preferences/Notification', () => {
|
||||||
let state
|
let state: NotificationState
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
state = {
|
state = {
|
||||||
notification: {
|
notification: {
|
||||||
|
@ -16,7 +16,7 @@ describe('Preferences/Notification', () => {
|
||||||
})
|
})
|
||||||
describe('mutations', () => {
|
describe('mutations', () => {
|
||||||
it('updateNotification', () => {
|
it('updateNotification', () => {
|
||||||
Notification.mutations.updateNotification(state, {
|
Notification.mutations![MUTATION_TYPES.UPDATE_NOTIFICATION](state, {
|
||||||
notify: {
|
notify: {
|
||||||
reply: false,
|
reply: false,
|
||||||
reblog: false,
|
reblog: false,
|
||||||
|
|
|
@ -3,8 +3,14 @@ import Account from './Preferences/Account'
|
||||||
import Language from './Preferences/Language'
|
import Language from './Preferences/Language'
|
||||||
import Notification from './Preferences/Notification'
|
import Notification from './Preferences/Notification'
|
||||||
import Appearance from './Preferences/Appearance'
|
import Appearance from './Preferences/Appearance'
|
||||||
|
import { Module } from 'vuex'
|
||||||
|
|
||||||
const Preferences = {
|
export interface PreferencesState {}
|
||||||
|
|
||||||
|
const state = (): PreferencesState => ({})
|
||||||
|
|
||||||
|
// TODO: use type of rootState
|
||||||
|
const Preferences: Module<PreferencesState, any> = {
|
||||||
namespaced: true,
|
namespaced: true,
|
||||||
modules: {
|
modules: {
|
||||||
General,
|
General,
|
||||||
|
@ -13,8 +19,7 @@ const Preferences = {
|
||||||
Notification,
|
Notification,
|
||||||
Appearance
|
Appearance
|
||||||
},
|
},
|
||||||
state: {},
|
state: state
|
||||||
mutations: {}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export default Preferences
|
export default Preferences
|
|
@ -1,89 +0,0 @@
|
||||||
import { ipcRenderer } from 'electron'
|
|
||||||
|
|
||||||
const Account = {
|
|
||||||
namespaced: true,
|
|
||||||
state: {
|
|
||||||
accounts: [],
|
|
||||||
accountLoading: false
|
|
||||||
},
|
|
||||||
mutations: {
|
|
||||||
updateAccounts (state, accounts) {
|
|
||||||
state.accounts = accounts
|
|
||||||
},
|
|
||||||
updateAccountLoading (state, value) {
|
|
||||||
state.accountLoading = value
|
|
||||||
}
|
|
||||||
},
|
|
||||||
actions: {
|
|
||||||
loadAccounts ({ commit }) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
ipcRenderer.send('list-accounts', 'list')
|
|
||||||
ipcRenderer.once('error-list-accounts', (event, err) => {
|
|
||||||
ipcRenderer.removeAllListeners('response-list-accounts')
|
|
||||||
reject(err)
|
|
||||||
})
|
|
||||||
ipcRenderer.once('response-list-accounts', (event, accounts) => {
|
|
||||||
ipcRenderer.removeAllListeners('error-list-accounts')
|
|
||||||
commit('updateAccounts', accounts)
|
|
||||||
resolve(accounts)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
},
|
|
||||||
removeAccount (_, account) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
ipcRenderer.send('remove-account', account._id)
|
|
||||||
ipcRenderer.once('error-remove-account', (_, err) => {
|
|
||||||
ipcRenderer.removeAllListeners('response-remove-account')
|
|
||||||
reject(err)
|
|
||||||
})
|
|
||||||
ipcRenderer.once('response-remove-account', () => {
|
|
||||||
ipcRenderer.removeAllListeners('error-remove-account')
|
|
||||||
resolve()
|
|
||||||
})
|
|
||||||
})
|
|
||||||
},
|
|
||||||
forwardAccount (_, account) {
|
|
||||||
console.log(account)
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
ipcRenderer.send('forward-account', account)
|
|
||||||
ipcRenderer.once('error-forward-account', (_, err) => {
|
|
||||||
ipcRenderer.removeAllListeners('response-forward-account')
|
|
||||||
reject(err)
|
|
||||||
})
|
|
||||||
ipcRenderer.once('response-forward-account', () => {
|
|
||||||
ipcRenderer.removeAllListeners('error-forward-account')
|
|
||||||
resolve()
|
|
||||||
})
|
|
||||||
})
|
|
||||||
},
|
|
||||||
backwardAccount (_, account) {
|
|
||||||
console.log(account)
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
ipcRenderer.send('backward-account', account)
|
|
||||||
ipcRenderer.once('error-backward-account', (event, err) => {
|
|
||||||
ipcRenderer.removeAllListeners('response-forward-account')
|
|
||||||
reject(err)
|
|
||||||
})
|
|
||||||
ipcRenderer.once('response-backward-account', () => {
|
|
||||||
ipcRenderer.removeAllListeners('error-backward-account')
|
|
||||||
resolve()
|
|
||||||
})
|
|
||||||
})
|
|
||||||
},
|
|
||||||
removeAllAccounts () {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
ipcRenderer.send('remove-all-accounts')
|
|
||||||
ipcRenderer.once('error-remove-all-accounts', (_, err) => {
|
|
||||||
ipcRenderer.removeAllListeners('response-remove-all-accounts')
|
|
||||||
reject(err)
|
|
||||||
})
|
|
||||||
ipcRenderer.once('response-remove-all-accounts', () => {
|
|
||||||
ipcRenderer.removeAllListeners('error-remove-all-accounts')
|
|
||||||
resolve()
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default Account
|
|
|
@ -0,0 +1,107 @@
|
||||||
|
import { ipcRenderer } from 'electron'
|
||||||
|
import { Module, MutationTree, ActionTree } from 'vuex'
|
||||||
|
import Account from '~/src/types/account'
|
||||||
|
|
||||||
|
export interface AccountState {
|
||||||
|
accounts: Array<Account>,
|
||||||
|
accountLoading: boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
const state = (): AccountState => ({
|
||||||
|
accounts: [],
|
||||||
|
accountLoading: false
|
||||||
|
})
|
||||||
|
|
||||||
|
export const MUTATION_TYPES = {
|
||||||
|
UPDATE_ACCOUNTS: 'updateAccounts',
|
||||||
|
UPDATE_ACCOUNT_LOADING: 'updateAccountLoading'
|
||||||
|
}
|
||||||
|
|
||||||
|
const mutations: MutationTree<AccountState> = {
|
||||||
|
[MUTATION_TYPES.UPDATE_ACCOUNTS]: (state, accounts: Array<Account>) => {
|
||||||
|
state.accounts = accounts
|
||||||
|
},
|
||||||
|
[MUTATION_TYPES.UPDATE_ACCOUNT_LOADING]: (state, value: boolean) => {
|
||||||
|
state.accountLoading = value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: use type of rootState
|
||||||
|
const actions: ActionTree<AccountState, any> = {
|
||||||
|
loadAccounts: ({ commit }): Promise<Array<Account>> => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
ipcRenderer.send('list-accounts', 'list')
|
||||||
|
ipcRenderer.once('error-list-accounts', (_, err: Error) => {
|
||||||
|
ipcRenderer.removeAllListeners('response-list-accounts')
|
||||||
|
reject(err)
|
||||||
|
})
|
||||||
|
ipcRenderer.once('response-list-accounts', (_, accounts: Array<Account>) => {
|
||||||
|
ipcRenderer.removeAllListeners('error-list-accounts')
|
||||||
|
commit(MUTATION_TYPES.UPDATE_ACCOUNTS, accounts)
|
||||||
|
resolve(accounts)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
removeAccount: (_, account: Account) => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
ipcRenderer.send('remove-account', account._id)
|
||||||
|
ipcRenderer.once('error-remove-account', (_, err: Error) => {
|
||||||
|
ipcRenderer.removeAllListeners('response-remove-account')
|
||||||
|
reject(err)
|
||||||
|
})
|
||||||
|
ipcRenderer.once('response-remove-account', () => {
|
||||||
|
ipcRenderer.removeAllListeners('error-remove-account')
|
||||||
|
resolve()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
forwardAccount: (_, account: Account) => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
ipcRenderer.send('forward-account', account)
|
||||||
|
ipcRenderer.once('error-forward-account', (_, err: Error) => {
|
||||||
|
ipcRenderer.removeAllListeners('response-forward-account')
|
||||||
|
reject(err)
|
||||||
|
})
|
||||||
|
ipcRenderer.once('response-forward-account', () => {
|
||||||
|
ipcRenderer.removeAllListeners('error-forward-account')
|
||||||
|
resolve()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
backwardAccount: (_, account: Account) => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
ipcRenderer.send('backward-account', account)
|
||||||
|
ipcRenderer.once('error-backward-account', (_, err: Error) => {
|
||||||
|
ipcRenderer.removeAllListeners('response-forward-account')
|
||||||
|
reject(err)
|
||||||
|
})
|
||||||
|
ipcRenderer.once('response-backward-account', () => {
|
||||||
|
ipcRenderer.removeAllListeners('error-backward-account')
|
||||||
|
resolve()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
removeAllAccounts: () => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
ipcRenderer.send('remove-all-accounts')
|
||||||
|
ipcRenderer.once('error-remove-all-accounts', (_, err: Error) => {
|
||||||
|
ipcRenderer.removeAllListeners('response-remove-all-accounts')
|
||||||
|
reject(err)
|
||||||
|
})
|
||||||
|
ipcRenderer.once('response-remove-all-accounts', () => {
|
||||||
|
ipcRenderer.removeAllListeners('error-remove-all-accounts')
|
||||||
|
resolve()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: use type of rootState
|
||||||
|
const account: Module<AccountState, any> = {
|
||||||
|
namespaced: true,
|
||||||
|
state: state,
|
||||||
|
mutations: mutations,
|
||||||
|
actions: actions
|
||||||
|
}
|
||||||
|
|
||||||
|
export default account
|
|
@ -1,186 +0,0 @@
|
||||||
import { ipcRenderer } from 'electron'
|
|
||||||
import DisplayStyle from '~/src/constants/displayStyle'
|
|
||||||
import Theme from '~/src/constants/theme'
|
|
||||||
import TimeFormat from '~/src/constants/timeFormat'
|
|
||||||
import { LightTheme } from '~/src/renderer/utils/theme'
|
|
||||||
import DefaultFonts from '../../utils/fonts'
|
|
||||||
|
|
||||||
export default {
|
|
||||||
namespaced: true,
|
|
||||||
state: {
|
|
||||||
appearance: {
|
|
||||||
theme: Theme.Light.key,
|
|
||||||
fontSize: 14,
|
|
||||||
displayNameStyle: DisplayStyle.DisplayNameAndUsername.value,
|
|
||||||
timeFormat: TimeFormat.Absolute.value,
|
|
||||||
customThemeColor: LightTheme,
|
|
||||||
font: DefaultFonts[0]
|
|
||||||
},
|
|
||||||
fonts: []
|
|
||||||
},
|
|
||||||
mutations: {
|
|
||||||
updateAppearance (state, conf) {
|
|
||||||
state.appearance = conf
|
|
||||||
},
|
|
||||||
updateFonts (state, fonts) {
|
|
||||||
state.fonts = fonts
|
|
||||||
}
|
|
||||||
},
|
|
||||||
actions: {
|
|
||||||
loadAppearance ({ commit }) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
ipcRenderer.send('get-preferences')
|
|
||||||
ipcRenderer.once('error-get-preferences', (event, err) => {
|
|
||||||
ipcRenderer.removeAllListeners('response-get-preferences')
|
|
||||||
reject(err)
|
|
||||||
})
|
|
||||||
ipcRenderer.once('response-get-preferences', (event, conf) => {
|
|
||||||
ipcRenderer.removeAllListeners('error-get-preferences')
|
|
||||||
commit('updateAppearance', conf.appearance)
|
|
||||||
resolve(conf)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
},
|
|
||||||
loadFonts ({ commit }) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
ipcRenderer.send('list-fonts')
|
|
||||||
ipcRenderer.once('error-list-fonts', (event, err) => {
|
|
||||||
ipcRenderer.removeAllListeners('response-list-fonts')
|
|
||||||
reject(err)
|
|
||||||
})
|
|
||||||
ipcRenderer.once('response-list-fonts', (event, fonts) => {
|
|
||||||
ipcRenderer.removeAllListeners('error-list-fonts')
|
|
||||||
commit('updateFonts', [DefaultFonts[0]].concat(fonts))
|
|
||||||
resolve(fonts)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
},
|
|
||||||
updateTheme ({ dispatch, commit, state }, theme) {
|
|
||||||
const newAppearance = Object.assign({}, state.appearance, {
|
|
||||||
theme: theme
|
|
||||||
})
|
|
||||||
const config = {
|
|
||||||
appearance: newAppearance
|
|
||||||
}
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
ipcRenderer.send('update-preferences', config)
|
|
||||||
ipcRenderer.once('error-update-preferences', (event, err) => {
|
|
||||||
ipcRenderer.removeAllListeners('response-update-preferences', err)
|
|
||||||
reject(err)
|
|
||||||
})
|
|
||||||
ipcRenderer.once('response-update-preferences', (event, conf) => {
|
|
||||||
ipcRenderer.removeAllListeners('error-update-preferences')
|
|
||||||
commit('updateAppearance', conf.appearance)
|
|
||||||
dispatch('App/loadPreferences', null, { root: true })
|
|
||||||
resolve(conf.appearance)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
},
|
|
||||||
updateFontSize ({ dispatch, commit, state }, fontSize) {
|
|
||||||
const newAppearance = Object.assign({}, state.appearance, {
|
|
||||||
fontSize: fontSize
|
|
||||||
})
|
|
||||||
const config = {
|
|
||||||
appearance: newAppearance
|
|
||||||
}
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
ipcRenderer.send('update-preferences', config)
|
|
||||||
ipcRenderer.once('error-update-preferences', (event, err) => {
|
|
||||||
ipcRenderer.removeAllListeners('response-update-preferences')
|
|
||||||
reject(err)
|
|
||||||
})
|
|
||||||
ipcRenderer.once('response-update-preferences', (event, conf) => {
|
|
||||||
ipcRenderer.removeAllListeners('error-update-preferences')
|
|
||||||
commit('updateAppearance', conf.appearance)
|
|
||||||
dispatch('App/loadPreferences', null, { root: true })
|
|
||||||
resolve(conf.appearance)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
},
|
|
||||||
updateDisplayNameStyle ({ dispatch, commit, state }, value) {
|
|
||||||
const newAppearance = Object.assign({}, state.appearance, {
|
|
||||||
displayNameStyle: value
|
|
||||||
})
|
|
||||||
const config = {
|
|
||||||
appearance: newAppearance
|
|
||||||
}
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
ipcRenderer.send('update-preferences', config)
|
|
||||||
ipcRenderer.once('error-update-preferences', (event, err) => {
|
|
||||||
ipcRenderer.removeAllListeners('response-update-preferences')
|
|
||||||
reject(err)
|
|
||||||
})
|
|
||||||
ipcRenderer.once('response-update-preferences', (event, conf) => {
|
|
||||||
ipcRenderer.removeAllListeners('error-update-preferences')
|
|
||||||
dispatch('App/loadPreferences', null, { root: true })
|
|
||||||
commit('updateAppearance', conf.appearance)
|
|
||||||
resolve(conf.appearance)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
},
|
|
||||||
updateTimeFormat ({ dispatch, commit, state }, value) {
|
|
||||||
const newAppearance = Object.assign({}, state.appearance, {
|
|
||||||
timeFormat: value
|
|
||||||
})
|
|
||||||
const config = {
|
|
||||||
appearance: newAppearance
|
|
||||||
}
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
ipcRenderer.send('update-preferences', config)
|
|
||||||
ipcRenderer.once('error-update-preferences', (event, err) => {
|
|
||||||
ipcRenderer.removeAllListeners('response-update-preferences')
|
|
||||||
reject(err)
|
|
||||||
})
|
|
||||||
ipcRenderer.once('response-update-preferences', (event, conf) => {
|
|
||||||
ipcRenderer.removeAllListeners('error-update-preferences')
|
|
||||||
dispatch('App/loadPreferences', null, { root: true })
|
|
||||||
commit('updateAppearance', conf.appearance)
|
|
||||||
resolve(conf.appearance)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
},
|
|
||||||
updateCustomThemeColor ({ dispatch, state, commit }, value) {
|
|
||||||
const newCustom = Object.assign({}, state.appearance.customThemeColor, value)
|
|
||||||
const newAppearance = Object.assign({}, state.appearance, {
|
|
||||||
customThemeColor: newCustom
|
|
||||||
})
|
|
||||||
const config = {
|
|
||||||
appearance: newAppearance
|
|
||||||
}
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
ipcRenderer.send('update-preferences', config)
|
|
||||||
ipcRenderer.once('error-update-preferences', (event, err) => {
|
|
||||||
ipcRenderer.removeAllListeners('response-update-preferences')
|
|
||||||
reject(err)
|
|
||||||
})
|
|
||||||
ipcRenderer.once('response-update-preferences', (event, conf) => {
|
|
||||||
ipcRenderer.removeAllListeners('error-update-preferences')
|
|
||||||
commit('updateAppearance', conf.appearance)
|
|
||||||
dispatch('App/loadPreferences', null, { root: true })
|
|
||||||
resolve(conf.appearance)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
},
|
|
||||||
updateFont ({ dispatch, state, commit }, value) {
|
|
||||||
const newAppearance = Object.assign({}, state.appearance, {
|
|
||||||
font: value
|
|
||||||
})
|
|
||||||
const config = {
|
|
||||||
appearance: newAppearance
|
|
||||||
}
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
ipcRenderer.send('update-preferences', config)
|
|
||||||
ipcRenderer.once('error-update-preferences', (event, err) => {
|
|
||||||
ipcRenderer.removeAllListeners('response-update-preferences')
|
|
||||||
reject(err)
|
|
||||||
})
|
|
||||||
ipcRenderer.once('response-update-preferences', (event, conf) => {
|
|
||||||
ipcRenderer.removeAllListeners('error-update-preferences')
|
|
||||||
commit('updateAppearance', conf.appearance)
|
|
||||||
dispatch('App/loadPreferences', null, { root: true })
|
|
||||||
resolve(conf.appearance)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,229 @@
|
||||||
|
import { ipcRenderer } from 'electron'
|
||||||
|
import DisplayStyle from '~/src/constants/displayStyle'
|
||||||
|
import Theme from '~/src/constants/theme'
|
||||||
|
import TimeFormat from '~/src/constants/timeFormat'
|
||||||
|
import { LightTheme } from '@/utils/theme'
|
||||||
|
import DefaultFonts from '@/utils/fonts'
|
||||||
|
import { Module, MutationTree, ActionTree } from 'vuex'
|
||||||
|
|
||||||
|
interface ColorThemeSet {
|
||||||
|
background_color: string,
|
||||||
|
selected_background_color: string,
|
||||||
|
global_header_color: string,
|
||||||
|
side_menu_color: string,
|
||||||
|
primary_color: string,
|
||||||
|
regular_color: string,
|
||||||
|
secondary_color: string,
|
||||||
|
border_color: string,
|
||||||
|
header_menu_color: string,
|
||||||
|
wrapper_mask_color: string
|
||||||
|
}
|
||||||
|
|
||||||
|
interface AppearanceSet {
|
||||||
|
theme: string,
|
||||||
|
fontSize: number,
|
||||||
|
displayNameStyle: number,
|
||||||
|
timeFormat: number,
|
||||||
|
customThemeColor: ColorThemeSet,
|
||||||
|
font: string
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface AppearanceState {
|
||||||
|
appearance: AppearanceSet,
|
||||||
|
fonts: Array<string>
|
||||||
|
}
|
||||||
|
|
||||||
|
const state = (): AppearanceState => ({
|
||||||
|
appearance: {
|
||||||
|
theme: Theme.Light.key,
|
||||||
|
fontSize: 14,
|
||||||
|
displayNameStyle: DisplayStyle.DisplayNameAndUsername.value,
|
||||||
|
timeFormat: TimeFormat.Absolute.value,
|
||||||
|
customThemeColor: LightTheme,
|
||||||
|
font: DefaultFonts[0]
|
||||||
|
},
|
||||||
|
fonts: []
|
||||||
|
})
|
||||||
|
|
||||||
|
export const MUTATION_TYPES = {
|
||||||
|
UPDATE_APPEARANCE: 'updateAppearance',
|
||||||
|
UPDATE_FONTS: 'updateFonts'
|
||||||
|
}
|
||||||
|
|
||||||
|
const mutations: MutationTree<AppearanceState> = {
|
||||||
|
[MUTATION_TYPES.UPDATE_APPEARANCE]: (state, conf: AppearanceSet) => {
|
||||||
|
state.appearance = conf
|
||||||
|
},
|
||||||
|
[MUTATION_TYPES.UPDATE_FONTS]: (state, fonts: Array<string>) => {
|
||||||
|
state.fonts = fonts
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: use type of rootState
|
||||||
|
const actions: ActionTree<AppearanceState, any> = {
|
||||||
|
loadAppearance: ({ commit }) => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
ipcRenderer.send('get-preferences')
|
||||||
|
ipcRenderer.once('error-get-preferences', (_, err: Error) => {
|
||||||
|
ipcRenderer.removeAllListeners('response-get-preferences')
|
||||||
|
reject(err)
|
||||||
|
})
|
||||||
|
ipcRenderer.once('response-get-preferences', (_, conf: any) => {
|
||||||
|
ipcRenderer.removeAllListeners('error-get-preferences')
|
||||||
|
commit(MUTATION_TYPES.UPDATE_APPEARANCE, conf.appearance as AppearanceSet)
|
||||||
|
resolve(conf)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
loadFonts: ({ commit }) => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
ipcRenderer.send('list-fonts')
|
||||||
|
ipcRenderer.once('error-list-fonts', (_, err: Error) => {
|
||||||
|
ipcRenderer.removeAllListeners('response-list-fonts')
|
||||||
|
reject(err)
|
||||||
|
})
|
||||||
|
ipcRenderer.once('response-list-fonts', (_, fonts: Array<string>) => {
|
||||||
|
ipcRenderer.removeAllListeners('error-list-fonts')
|
||||||
|
commit(MUTATION_TYPES.UPDATE_FONTS, [DefaultFonts[0]].concat(fonts))
|
||||||
|
resolve(fonts)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
updateTheme: ({ dispatch, commit, state }, themeKey: string) => {
|
||||||
|
const newAppearance: AppearanceSet = Object.assign({}, state.appearance, {
|
||||||
|
theme: themeKey
|
||||||
|
})
|
||||||
|
const config = {
|
||||||
|
appearance: newAppearance
|
||||||
|
}
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
ipcRenderer.send('update-preferences', config)
|
||||||
|
ipcRenderer.once('error-update-preferences', (_, err: Error) => {
|
||||||
|
ipcRenderer.removeAllListeners('response-update-preferences')
|
||||||
|
reject(err)
|
||||||
|
})
|
||||||
|
ipcRenderer.once('response-update-preferences', (_, conf: any) => {
|
||||||
|
ipcRenderer.removeAllListeners('error-update-preferences')
|
||||||
|
commit(MUTATION_TYPES.UPDATE_APPEARANCE, conf.appearance as AppearanceSet)
|
||||||
|
dispatch('App/loadPreferences', null, { root: true })
|
||||||
|
resolve(conf.appearance)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
updateFontSize: ({ dispatch, commit, state }, fontSize: number) => {
|
||||||
|
const newAppearance: AppearanceSet = Object.assign({}, state.appearance, {
|
||||||
|
fontSize: fontSize
|
||||||
|
})
|
||||||
|
const config = {
|
||||||
|
appearance: newAppearance
|
||||||
|
}
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
ipcRenderer.send('update-preferences', config)
|
||||||
|
ipcRenderer.once('error-update-preferences', (_, err: Error) => {
|
||||||
|
ipcRenderer.removeAllListeners('response-update-preferences')
|
||||||
|
reject(err)
|
||||||
|
})
|
||||||
|
ipcRenderer.once('response-update-preferences', (_, conf: any) => {
|
||||||
|
ipcRenderer.removeAllListeners('error-update-preferences')
|
||||||
|
commit(MUTATION_TYPES.UPDATE_APPEARANCE, conf.appearance as AppearanceSet)
|
||||||
|
dispatch('App/loadPreferences', null, { root: true })
|
||||||
|
resolve(conf.appearance)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
updateDisplayNameStyle: ({ dispatch, commit, state }, value: number) => {
|
||||||
|
const newAppearance: AppearanceSet = Object.assign({}, state.appearance, {
|
||||||
|
displayNameStyle: value
|
||||||
|
})
|
||||||
|
const config = {
|
||||||
|
appearance: newAppearance
|
||||||
|
}
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
ipcRenderer.send('update-preferences', config)
|
||||||
|
ipcRenderer.once('error-update-preferences', (_, err: Error) => {
|
||||||
|
ipcRenderer.removeAllListeners('response-update-preferences')
|
||||||
|
reject(err)
|
||||||
|
})
|
||||||
|
ipcRenderer.once('response-update-preferences', (_, conf: any) => {
|
||||||
|
ipcRenderer.removeAllListeners('error-update-preferences')
|
||||||
|
dispatch('App/loadPreferences', null, { root: true })
|
||||||
|
commit(MUTATION_TYPES.UPDATE_APPEARANCE, conf.appearance as AppearanceSet)
|
||||||
|
resolve(conf.appearance)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
updateTimeFormat: ({ dispatch, commit, state }, value: number) => {
|
||||||
|
const newAppearance: AppearanceSet = Object.assign({}, state.appearance, {
|
||||||
|
timeFormat: value
|
||||||
|
})
|
||||||
|
const config = {
|
||||||
|
appearance: newAppearance
|
||||||
|
}
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
ipcRenderer.send('update-preferences', config)
|
||||||
|
ipcRenderer.once('error-update-preferences', (_, err: Error) => {
|
||||||
|
ipcRenderer.removeAllListeners('response-update-preferences')
|
||||||
|
reject(err)
|
||||||
|
})
|
||||||
|
ipcRenderer.once('response-update-preferences', (_, conf: any) => {
|
||||||
|
ipcRenderer.removeAllListeners('error-update-preferences')
|
||||||
|
dispatch('App/loadPreferences', null, { root: true })
|
||||||
|
commit(MUTATION_TYPES.UPDATE_APPEARANCE, conf.appearance as AppearanceSet)
|
||||||
|
resolve(conf.appearance)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
updateCustomThemeColor: ({ dispatch, state, commit }, value: object) => {
|
||||||
|
const newCustom: ColorThemeSet = Object.assign({}, state.appearance.customThemeColor, value)
|
||||||
|
const newAppearance: AppearanceSet = Object.assign({}, state.appearance, {
|
||||||
|
customThemeColor: newCustom
|
||||||
|
})
|
||||||
|
const config = {
|
||||||
|
appearance: newAppearance
|
||||||
|
}
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
ipcRenderer.send('update-preferences', config)
|
||||||
|
ipcRenderer.once('error-update-preferences', (_, err: Error) => {
|
||||||
|
ipcRenderer.removeAllListeners('response-update-preferences')
|
||||||
|
reject(err)
|
||||||
|
})
|
||||||
|
ipcRenderer.once('response-update-preferences', (_, conf: any) => {
|
||||||
|
ipcRenderer.removeAllListeners('error-update-preferences')
|
||||||
|
commit(MUTATION_TYPES.UPDATE_APPEARANCE, conf.appearance as AppearanceSet)
|
||||||
|
dispatch('App/loadPreferences', null, { root: true })
|
||||||
|
resolve(conf.appearance)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
updateFont: ({ dispatch, state, commit }, value: string) => {
|
||||||
|
const newAppearance: AppearanceSet = Object.assign({}, state.appearance, {
|
||||||
|
font: value
|
||||||
|
})
|
||||||
|
const config = {
|
||||||
|
appearance: newAppearance
|
||||||
|
}
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
ipcRenderer.send('update-preferences', config)
|
||||||
|
ipcRenderer.once('error-update-preferences', (_, err: Error) => {
|
||||||
|
ipcRenderer.removeAllListeners('response-update-preferences')
|
||||||
|
reject(err)
|
||||||
|
})
|
||||||
|
ipcRenderer.once('response-update-preferences', (_, conf: any) => {
|
||||||
|
ipcRenderer.removeAllListeners('error-update-preferences')
|
||||||
|
commit(MUTATION_TYPES.UPDATE_APPEARANCE, conf.appearance as AppearanceSet)
|
||||||
|
dispatch('App/loadPreferences', null, { root: true })
|
||||||
|
resolve(conf.appearance)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: use type of rootState
|
||||||
|
const Appearance: Module<AppearanceState, any> = {
|
||||||
|
namespaced: true,
|
||||||
|
state: state,
|
||||||
|
mutations: mutations,
|
||||||
|
actions: actions
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Appearance
|
|
@ -1,97 +0,0 @@
|
||||||
import { ipcRenderer } from 'electron'
|
|
||||||
|
|
||||||
const General = {
|
|
||||||
namespaced: true,
|
|
||||||
state: {
|
|
||||||
general: {
|
|
||||||
sound: {
|
|
||||||
fav_rb: true,
|
|
||||||
toot: true
|
|
||||||
},
|
|
||||||
timeline: {
|
|
||||||
cw: false,
|
|
||||||
nfsw: false,
|
|
||||||
hideAllAttachments: false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
loading: false
|
|
||||||
},
|
|
||||||
mutations: {
|
|
||||||
updateGeneral (state, conf) {
|
|
||||||
state.general = conf
|
|
||||||
},
|
|
||||||
changeLoading (state, value) {
|
|
||||||
state.loading = value
|
|
||||||
}
|
|
||||||
},
|
|
||||||
actions: {
|
|
||||||
loadGeneral ({ commit }) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
commit('changeLoading', true)
|
|
||||||
ipcRenderer.send('get-preferences')
|
|
||||||
ipcRenderer.once('error-get-preferences', (event, err) => {
|
|
||||||
ipcRenderer.removeAllListeners('response-get-preferences')
|
|
||||||
commit('changeLoading', false)
|
|
||||||
reject(err)
|
|
||||||
})
|
|
||||||
ipcRenderer.once('response-get-preferences', (event, conf) => {
|
|
||||||
ipcRenderer.removeAllListeners('error-get-preferences')
|
|
||||||
commit('updateGeneral', conf.general)
|
|
||||||
commit('changeLoading', false)
|
|
||||||
resolve(conf)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
},
|
|
||||||
updateSound ({ commit, state }, sound) {
|
|
||||||
commit('changeLoading', true)
|
|
||||||
const newSound = Object.assign({}, state.general.sound, sound)
|
|
||||||
const newGeneral = Object.assign({}, state.general, {
|
|
||||||
sound: newSound
|
|
||||||
})
|
|
||||||
const config = {
|
|
||||||
general: newGeneral
|
|
||||||
}
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
ipcRenderer.send('update-preferences', config)
|
|
||||||
ipcRenderer.once('error-update-preferences', (event, err) => {
|
|
||||||
ipcRenderer.removeAllListeners('response-update-preferences')
|
|
||||||
commit('changeLoading', false)
|
|
||||||
reject(err)
|
|
||||||
})
|
|
||||||
ipcRenderer.once('response-update-preferences', (event, conf) => {
|
|
||||||
ipcRenderer.removeAllListeners('error-update-preferences')
|
|
||||||
commit('updateGeneral', conf.general)
|
|
||||||
commit('changeLoading', false)
|
|
||||||
resolve(conf)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
},
|
|
||||||
updateTimeline ({ commit, state, dispatch }, timeline) {
|
|
||||||
commit('changeLoading', true)
|
|
||||||
const newTimeline = Object.assign({}, state.general.timeline, timeline)
|
|
||||||
const newGeneral = Object.assign({}, state.general, {
|
|
||||||
timeline: newTimeline
|
|
||||||
})
|
|
||||||
const config = {
|
|
||||||
general: newGeneral
|
|
||||||
}
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
ipcRenderer.once('error-update-preferences', (event, err) => {
|
|
||||||
ipcRenderer.removeAllListeners('response-update-preferences')
|
|
||||||
commit('changeLoading', false)
|
|
||||||
reject(err)
|
|
||||||
})
|
|
||||||
ipcRenderer.once('response-update-preferences', (event, conf) => {
|
|
||||||
ipcRenderer.removeAllListeners('error-update-preferences')
|
|
||||||
commit('updateGeneral', conf.general)
|
|
||||||
commit('changeLoading', false)
|
|
||||||
dispatch('App/loadPreferences', null, { root: true })
|
|
||||||
resolve(conf)
|
|
||||||
})
|
|
||||||
ipcRenderer.send('update-preferences', config)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default General
|
|
|
@ -0,0 +1,129 @@
|
||||||
|
import { ipcRenderer } from 'electron'
|
||||||
|
import { Module, MutationTree, ActionTree } from 'vuex'
|
||||||
|
|
||||||
|
interface Sound {
|
||||||
|
fav_rb: boolean,
|
||||||
|
toot: boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Timeline {
|
||||||
|
cw: boolean,
|
||||||
|
nfsw: boolean,
|
||||||
|
hideAllAttachments: boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
interface GeneralSet {
|
||||||
|
sound: Sound,
|
||||||
|
timeline: Timeline
|
||||||
|
}
|
||||||
|
export interface GeneralState {
|
||||||
|
general: GeneralSet,
|
||||||
|
loading: boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
const state = (): GeneralState => ({
|
||||||
|
general: {
|
||||||
|
sound: {
|
||||||
|
fav_rb: true,
|
||||||
|
toot: true
|
||||||
|
},
|
||||||
|
timeline: {
|
||||||
|
cw: false,
|
||||||
|
nfsw: false,
|
||||||
|
hideAllAttachments: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
loading: false
|
||||||
|
})
|
||||||
|
|
||||||
|
export const MUTATION_TYPES = {
|
||||||
|
UPDATE_GENERAL: 'updateGeneral',
|
||||||
|
CHANGE_LOADING: 'changeLoading'
|
||||||
|
}
|
||||||
|
|
||||||
|
const mutations: MutationTree<GeneralState> = {
|
||||||
|
[MUTATION_TYPES.UPDATE_GENERAL]: (state, conf: GeneralSet) => {
|
||||||
|
state.general = conf
|
||||||
|
},
|
||||||
|
[MUTATION_TYPES.CHANGE_LOADING]: (state, value: boolean) => {
|
||||||
|
state.loading = value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: use type of rootState
|
||||||
|
const actions: ActionTree<GeneralState, any> = {
|
||||||
|
loadGeneral: ({ commit }) => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
commit(MUTATION_TYPES.CHANGE_LOADING, true)
|
||||||
|
ipcRenderer.send('get-preferences')
|
||||||
|
ipcRenderer.once('error-get-preferences', (_, err: Error) => {
|
||||||
|
ipcRenderer.removeAllListeners('response-get-preferences')
|
||||||
|
commit(MUTATION_TYPES.CHANGE_LOADING, false)
|
||||||
|
reject(err)
|
||||||
|
})
|
||||||
|
ipcRenderer.once('response-get-preferences', (_, conf: any) => {
|
||||||
|
ipcRenderer.removeAllListeners('error-get-preferences')
|
||||||
|
commit(MUTATION_TYPES.UPDATE_GENERAL, conf.general as GeneralSet)
|
||||||
|
commit(MUTATION_TYPES.CHANGE_LOADING, false)
|
||||||
|
resolve(conf)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
updateSound: ({ commit, state }, sound: object) => {
|
||||||
|
commit(MUTATION_TYPES.CHANGE_LOADING, true)
|
||||||
|
const newSound: Sound = Object.assign({}, state.general.sound, sound)
|
||||||
|
const newGeneral: GeneralSet = Object.assign({}, state.general, {
|
||||||
|
sound: newSound
|
||||||
|
})
|
||||||
|
const config = {
|
||||||
|
general: newGeneral
|
||||||
|
}
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
ipcRenderer.send('update-preferences', config)
|
||||||
|
ipcRenderer.once('error-update-preferences', (_, err: Error) => {
|
||||||
|
ipcRenderer.removeAllListeners('response-update-preferences')
|
||||||
|
commit(MUTATION_TYPES.CHANGE_LOADING, false)
|
||||||
|
reject(err)
|
||||||
|
})
|
||||||
|
ipcRenderer.once('response-update-preferences', (_, conf: any) => {
|
||||||
|
ipcRenderer.removeAllListeners('error-update-preferences')
|
||||||
|
commit(MUTATION_TYPES.UPDATE_GENERAL, conf.general as GeneralSet)
|
||||||
|
commit(MUTATION_TYPES.CHANGE_LOADING, false)
|
||||||
|
resolve(conf)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
updateTimeline: ({ commit, state, dispatch }, timeline: object) => {
|
||||||
|
commit(MUTATION_TYPES.CHANGE_LOADING, true)
|
||||||
|
const newTimeline: Timeline = Object.assign({}, state.general.timeline, timeline)
|
||||||
|
const newGeneral: GeneralSet = Object.assign({}, state.general, {
|
||||||
|
timeline: newTimeline
|
||||||
|
})
|
||||||
|
const config = {
|
||||||
|
general: newGeneral
|
||||||
|
}
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
ipcRenderer.once('error-update-preferences', (_, err: Error) => {
|
||||||
|
ipcRenderer.removeAllListeners('response-update-preferences')
|
||||||
|
commit('changeLoading', false)
|
||||||
|
reject(err)
|
||||||
|
})
|
||||||
|
ipcRenderer.once('response-update-preferences', (_, conf: any) => {
|
||||||
|
ipcRenderer.removeAllListeners('error-update-preferences')
|
||||||
|
commit(MUTATION_TYPES.UPDATE_GENERAL, conf.general as GeneralSet)
|
||||||
|
commit(MUTATION_TYPES.CHANGE_LOADING, false)
|
||||||
|
dispatch('App/loadPreferences', null, { root: true })
|
||||||
|
resolve(conf)
|
||||||
|
})
|
||||||
|
ipcRenderer.send('update-preferences', config)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const General: Module<GeneralState, any> = {
|
||||||
|
namespaced: true,
|
||||||
|
state: state,
|
||||||
|
mutations: mutations,
|
||||||
|
actions: actions
|
||||||
|
}
|
||||||
|
|
||||||
|
export default General
|
|
@ -1,47 +0,0 @@
|
||||||
import { ipcRenderer } from 'electron'
|
|
||||||
import Language from '~/src/constants/language'
|
|
||||||
|
|
||||||
export default {
|
|
||||||
namespaced: true,
|
|
||||||
state: {
|
|
||||||
language: {
|
|
||||||
language: Language.en.key
|
|
||||||
}
|
|
||||||
},
|
|
||||||
mutations: {
|
|
||||||
updateLanguage (state, conf) {
|
|
||||||
state.language = conf
|
|
||||||
},
|
|
||||||
changeLanguage (state, key) {
|
|
||||||
state.language.language = key
|
|
||||||
}
|
|
||||||
},
|
|
||||||
actions: {
|
|
||||||
loadLanguage ({ commit }) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
ipcRenderer.send('get-preferences')
|
|
||||||
ipcRenderer.once('error-get-preferences', (event, err) => {
|
|
||||||
ipcRenderer.removeAllListeners('response-get-preferences')
|
|
||||||
reject(err)
|
|
||||||
})
|
|
||||||
ipcRenderer.once('response-get-preferences', (event, conf) => {
|
|
||||||
ipcRenderer.removeAllListeners('error-get-preferences')
|
|
||||||
commit('updateLanguage', conf.language)
|
|
||||||
resolve(conf)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
},
|
|
||||||
changeLanguage ({ commit }, key) {
|
|
||||||
return new Promise(resolve => {
|
|
||||||
ipcRenderer.send('change-language', key)
|
|
||||||
ipcRenderer.once('response-change-language', (event, value) => {
|
|
||||||
commit('changeLanguage', value)
|
|
||||||
resolve(value)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
},
|
|
||||||
relaunch () {
|
|
||||||
ipcRenderer.send('relaunch')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,69 @@
|
||||||
|
import { ipcRenderer } from 'electron'
|
||||||
|
import Language from '~/src/constants/language'
|
||||||
|
import { Module, MutationTree, ActionTree } from 'vuex'
|
||||||
|
|
||||||
|
interface LanguageSet {
|
||||||
|
language: string
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface LanguageState {
|
||||||
|
language: LanguageSet
|
||||||
|
}
|
||||||
|
|
||||||
|
const state: LanguageState = {
|
||||||
|
language: {
|
||||||
|
language: Language.en.key
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export const MUTATION_TYPES = {
|
||||||
|
UPDATE_LANGUAGE: 'updateLanguage',
|
||||||
|
CHANGE_LANGUAGE: 'changeLanguage'
|
||||||
|
}
|
||||||
|
|
||||||
|
const mutations: MutationTree<LanguageState> = {
|
||||||
|
[MUTATION_TYPES.UPDATE_LANGUAGE]: (state, conf: LanguageSet) => {
|
||||||
|
state.language = conf
|
||||||
|
},
|
||||||
|
[MUTATION_TYPES.CHANGE_LANGUAGE]: (state, key: string) => {
|
||||||
|
state.language.language = key
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: use type of rootState
|
||||||
|
const actions: ActionTree<LanguageState, any> = {
|
||||||
|
loadLanguage: ({ commit }) => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
ipcRenderer.send('get-preferences')
|
||||||
|
ipcRenderer.once('error-get-preferences', (_, err: Error) => {
|
||||||
|
ipcRenderer.removeAllListeners('response-get-preferences')
|
||||||
|
reject(err)
|
||||||
|
})
|
||||||
|
ipcRenderer.once('response-get-preferences', (_, conf: any) => {
|
||||||
|
ipcRenderer.removeAllListeners('error-get-preferences')
|
||||||
|
commit(MUTATION_TYPES.UPDATE_LANGUAGE, conf.language as LanguageSet)
|
||||||
|
resolve(conf)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
changeLanguage: ({ commit }, key: string) => {
|
||||||
|
return new Promise(resolve => {
|
||||||
|
ipcRenderer.send('change-language', key)
|
||||||
|
ipcRenderer.once('response-change-language', (_, value: string) => {
|
||||||
|
commit(MUTATION_TYPES.CHANGE_LANGUAGE, value)
|
||||||
|
resolve(value)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
relaunch: () => {
|
||||||
|
ipcRenderer.send('relaunch')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: use type of rootState
|
||||||
|
export default {
|
||||||
|
namespaced: true,
|
||||||
|
state: state,
|
||||||
|
mutations: mutations,
|
||||||
|
actions: actions
|
||||||
|
} as Module<LanguageState, any>
|
|
@ -1,53 +0,0 @@
|
||||||
import { ipcRenderer } from 'electron'
|
|
||||||
|
|
||||||
export default {
|
|
||||||
namespaced: true,
|
|
||||||
state: {
|
|
||||||
notification: {
|
|
||||||
notify: {
|
|
||||||
reply: true,
|
|
||||||
reblog: true,
|
|
||||||
favourite: true,
|
|
||||||
follow: true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
mutations: {
|
|
||||||
updateNotification (state, notification) {
|
|
||||||
state.notification = notification
|
|
||||||
}
|
|
||||||
},
|
|
||||||
actions: {
|
|
||||||
loadNotification ({ commit }) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
ipcRenderer.send('get-preferences')
|
|
||||||
ipcRenderer.once('error-get-preferences', (event, err) => {
|
|
||||||
ipcRenderer.removeAllListeners('response-get-preferences')
|
|
||||||
reject(err)
|
|
||||||
})
|
|
||||||
ipcRenderer.once('response-get-preferences', (event, conf) => {
|
|
||||||
ipcRenderer.removeAllListeners('error-get-preferences')
|
|
||||||
commit('updateNotification', conf.notification)
|
|
||||||
resolve(conf)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
},
|
|
||||||
updateNotify ({ commit, state, dispatch }, notify) {
|
|
||||||
const newNotify = Object.assign({}, state.notification.notify, notify)
|
|
||||||
const newNotification = Object.assign({}, state.notification, {
|
|
||||||
notify: newNotify
|
|
||||||
})
|
|
||||||
const config = {
|
|
||||||
notification: newNotification
|
|
||||||
}
|
|
||||||
return new Promise(resolve => {
|
|
||||||
ipcRenderer.send('update-preferences', config)
|
|
||||||
ipcRenderer.once('response-update-preferences', (event, conf) => {
|
|
||||||
commit('updateNotification', conf.notification)
|
|
||||||
dispatch('App/loadPreferences', null, { root: true })
|
|
||||||
resolve(conf.notification)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,81 @@
|
||||||
|
import { ipcRenderer } from 'electron'
|
||||||
|
import { Module, MutationTree, ActionTree } from 'vuex'
|
||||||
|
|
||||||
|
interface Notify {
|
||||||
|
reply: boolean,
|
||||||
|
reblog: boolean,
|
||||||
|
favourite: boolean,
|
||||||
|
follow: boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Notification {
|
||||||
|
notify: Notify
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface NotificationState {
|
||||||
|
notification: Notification
|
||||||
|
}
|
||||||
|
|
||||||
|
const state: NotificationState = {
|
||||||
|
notification: {
|
||||||
|
notify: {
|
||||||
|
reply: true,
|
||||||
|
reblog: true,
|
||||||
|
favourite: true,
|
||||||
|
follow: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export const MUTATION_TYPES = {
|
||||||
|
UPDATE_NOTIFICATION: 'updateNotification'
|
||||||
|
}
|
||||||
|
|
||||||
|
const mutations: MutationTree<NotificationState> = {
|
||||||
|
[MUTATION_TYPES.UPDATE_NOTIFICATION]: (state, notification: Notification) => {
|
||||||
|
state.notification = notification
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: use type of rootState
|
||||||
|
const actions: ActionTree<NotificationState, any> = {
|
||||||
|
loadNotification: ({ commit }) => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
ipcRenderer.send('get-preferences')
|
||||||
|
ipcRenderer.once('error-get-preferences', (_, err: Error) => {
|
||||||
|
ipcRenderer.removeAllListeners('response-get-preferences')
|
||||||
|
reject(err)
|
||||||
|
})
|
||||||
|
ipcRenderer.once('response-get-preferences', (_, conf: any) => {
|
||||||
|
ipcRenderer.removeAllListeners('error-get-preferences')
|
||||||
|
commit(MUTATION_TYPES.UPDATE_NOTIFICATION, conf.notification as Notification)
|
||||||
|
resolve(conf)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
updateNotify: ({ commit, state, dispatch }, notify: object) => {
|
||||||
|
const newNotify: Notify = Object.assign({}, state.notification.notify, notify)
|
||||||
|
const newNotification: Notification = Object.assign({}, state.notification, {
|
||||||
|
notify: newNotify
|
||||||
|
})
|
||||||
|
const config = {
|
||||||
|
notification: newNotification
|
||||||
|
}
|
||||||
|
return new Promise(resolve => {
|
||||||
|
ipcRenderer.send('update-preferences', config)
|
||||||
|
ipcRenderer.once('response-update-preferences', (_, conf: any) => {
|
||||||
|
commit(MUTATION_TYPES.UPDATE_NOTIFICATION, conf.notification as Notification)
|
||||||
|
dispatch('App/loadPreferences', null, { root: true })
|
||||||
|
resolve(conf.notification)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: use type of rootState
|
||||||
|
export default {
|
||||||
|
namespaced: true,
|
||||||
|
state: state,
|
||||||
|
mutations: mutations,
|
||||||
|
actions: actions
|
||||||
|
} as Module<NotificationState, any>
|
|
@ -1,18 +0,0 @@
|
||||||
import General from './Settings/General'
|
|
||||||
import Timeline from './Settings/Timeline'
|
|
||||||
|
|
||||||
export default {
|
|
||||||
namespaced: true,
|
|
||||||
modules: {
|
|
||||||
General,
|
|
||||||
Timeline
|
|
||||||
},
|
|
||||||
state: {
|
|
||||||
accountID: null
|
|
||||||
},
|
|
||||||
mutations: {
|
|
||||||
changeAccountID (state, id) {
|
|
||||||
state.accountID = id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
import General from './Settings/General'
|
||||||
|
import Timeline from './Settings/Timeline'
|
||||||
|
import { Module, MutationTree } from 'vuex'
|
||||||
|
|
||||||
|
export interface SettingsState {
|
||||||
|
accountID: number | null
|
||||||
|
}
|
||||||
|
|
||||||
|
const state = (): SettingsState => ({
|
||||||
|
accountID: null
|
||||||
|
})
|
||||||
|
|
||||||
|
export const MUTATION_TYPES = {
|
||||||
|
CHANGE_ACCOUNT_ID: 'changeAccountID'
|
||||||
|
}
|
||||||
|
|
||||||
|
const mutations: MutationTree<SettingsState> = {
|
||||||
|
[MUTATION_TYPES.CHANGE_ACCOUNT_ID]: (state, id: number) => {
|
||||||
|
state.accountID = id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: use type of rootState
|
||||||
|
const Settings: Module<SettingsState, any> = {
|
||||||
|
namespaced: true,
|
||||||
|
modules: {
|
||||||
|
General,
|
||||||
|
Timeline
|
||||||
|
},
|
||||||
|
state: state,
|
||||||
|
mutations: mutations
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Settings
|
|
@ -1,68 +0,0 @@
|
||||||
import Mastodon from 'megalodon'
|
|
||||||
import Visibility from '~/src/constants/visibility'
|
|
||||||
|
|
||||||
export default {
|
|
||||||
namespaced: true,
|
|
||||||
state: {
|
|
||||||
visibility: Visibility.Public.value,
|
|
||||||
sensitive: false
|
|
||||||
},
|
|
||||||
mutations: {
|
|
||||||
changeVisibility (state, value) {
|
|
||||||
state.visibility = value
|
|
||||||
},
|
|
||||||
changeSensitive (state, value) {
|
|
||||||
state.sensitive = value
|
|
||||||
}
|
|
||||||
},
|
|
||||||
actions: {
|
|
||||||
fetchSettings ({ commit, rootState }) {
|
|
||||||
const client = new Mastodon(
|
|
||||||
rootState.TimelineSpace.account.accessToken,
|
|
||||||
rootState.TimelineSpace.account.baseURL + '/api/v1'
|
|
||||||
)
|
|
||||||
return client.get('/accounts/verify_credentials')
|
|
||||||
.then(res => {
|
|
||||||
const visibility = Object.values(Visibility).find((v) => {
|
|
||||||
return v.key === res.data.source.privacy
|
|
||||||
})
|
|
||||||
commit('changeVisibility', visibility.value)
|
|
||||||
commit('changeSensitive', res.data.source.sensitive)
|
|
||||||
return res.data
|
|
||||||
})
|
|
||||||
},
|
|
||||||
setVisibility ({ commit, rootState }, value) {
|
|
||||||
const client = new Mastodon(
|
|
||||||
rootState.TimelineSpace.account.accessToken,
|
|
||||||
rootState.TimelineSpace.account.baseURL + '/api/v1'
|
|
||||||
)
|
|
||||||
const visibility = Object.values(Visibility).find((v) => {
|
|
||||||
return v.value === value
|
|
||||||
})
|
|
||||||
return client.patch('/accounts/update_credentials', {
|
|
||||||
source: {
|
|
||||||
privacy: visibility.key
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.then(res => {
|
|
||||||
commit('changeVisibility', visibility.value)
|
|
||||||
return res.data
|
|
||||||
})
|
|
||||||
},
|
|
||||||
setSensitive ({ commit, rootState }, value) {
|
|
||||||
const client = new Mastodon(
|
|
||||||
rootState.TimelineSpace.account.accessToken,
|
|
||||||
rootState.TimelineSpace.account.baseURL + '/api/v1'
|
|
||||||
)
|
|
||||||
return client.patch('/accounts/update_credentials', {
|
|
||||||
source: {
|
|
||||||
sensitive: value
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.then(res => {
|
|
||||||
commit('changeSensitive', value)
|
|
||||||
return res.data
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,84 @@
|
||||||
|
import Mastodon, { Account } from 'megalodon'
|
||||||
|
import Visibilities from '~/src/constants/visibility'
|
||||||
|
import { Module, MutationTree, ActionTree } from 'vuex'
|
||||||
|
import Visibility from '~/src/types/visibility'
|
||||||
|
|
||||||
|
export interface GeneralState {
|
||||||
|
visibility: number,
|
||||||
|
sensitive: boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
const state = (): GeneralState => ({
|
||||||
|
visibility: Visibilities.Public.value,
|
||||||
|
sensitive: false
|
||||||
|
})
|
||||||
|
|
||||||
|
export const MUTATION_TYPES = {
|
||||||
|
CHANGE_VISIBILITY: 'changeVisibility',
|
||||||
|
CHANGE_SENSITIVE: 'changeSensitive'
|
||||||
|
}
|
||||||
|
|
||||||
|
const mutations: MutationTree<GeneralState> = {
|
||||||
|
[MUTATION_TYPES.CHANGE_VISIBILITY]: (state, value: number) => {
|
||||||
|
state.visibility = value
|
||||||
|
},
|
||||||
|
[MUTATION_TYPES.CHANGE_SENSITIVE]: (state, value: boolean) => {
|
||||||
|
state.sensitive = value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: use type of rootState
|
||||||
|
const actions: ActionTree<GeneralState, any> = {
|
||||||
|
fetchSettings: async ({ commit, rootState }): Promise<Account> => {
|
||||||
|
const client = new Mastodon(
|
||||||
|
rootState.TimelineSpace.account.accessToken,
|
||||||
|
rootState.TimelineSpace.account.baseURL + '/api/v1'
|
||||||
|
)
|
||||||
|
const res = await client.get<Account>('/accounts/verify_credentials')
|
||||||
|
const visibility: Visibility | undefined = Object.values(Visibilities as Array<Visibility>).find((v) => {
|
||||||
|
return v.key === res.data.source!.privacy
|
||||||
|
})
|
||||||
|
commit(MUTATION_TYPES.CHANGE_VISIBILITY, visibility!.value)
|
||||||
|
commit(MUTATION_TYPES.CHANGE_SENSITIVE, res.data.source!.sensitive)
|
||||||
|
return res.data
|
||||||
|
},
|
||||||
|
setVisibility: async ({ commit, rootState }, value: number) => {
|
||||||
|
const client = new Mastodon(
|
||||||
|
rootState.TimelineSpace.account.accessToken,
|
||||||
|
rootState.TimelineSpace.account.baseURL + '/api/v1'
|
||||||
|
)
|
||||||
|
const visibility = Object.values(Visibilities as Array<Visibility>).find((v) => {
|
||||||
|
return v.value === value
|
||||||
|
})
|
||||||
|
const res = await client.patch<Account>('/accounts/update_credentials', {
|
||||||
|
source: {
|
||||||
|
privacy: visibility!.key
|
||||||
|
}
|
||||||
|
})
|
||||||
|
commit(MUTATION_TYPES.CHANGE_VISIBILITY, visibility!.value)
|
||||||
|
return res.data
|
||||||
|
},
|
||||||
|
setSensitive: async ({ commit, rootState }, value: boolean) => {
|
||||||
|
const client = new Mastodon(
|
||||||
|
rootState.TimelineSpace.account.accessToken,
|
||||||
|
rootState.TimelineSpace.account.baseURL + '/api/v1'
|
||||||
|
)
|
||||||
|
const res = await client.patch<Account>('/accounts/update_credentials', {
|
||||||
|
source: {
|
||||||
|
sensitive: value
|
||||||
|
}
|
||||||
|
})
|
||||||
|
commit(MUTATION_TYPES.CHANGE_SENSITIVE, value)
|
||||||
|
return res.data
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: use type of rootState
|
||||||
|
const General: Module<GeneralState, any> = {
|
||||||
|
namespaced: true,
|
||||||
|
state: state,
|
||||||
|
mutations: mutations,
|
||||||
|
actions: actions
|
||||||
|
}
|
||||||
|
|
||||||
|
export default General
|
|
@ -1,56 +0,0 @@
|
||||||
import { ipcRenderer } from 'electron'
|
|
||||||
import unreadSettings from '~/src/constants/unreadNotification'
|
|
||||||
|
|
||||||
export default {
|
|
||||||
namespaced: true,
|
|
||||||
state: {
|
|
||||||
unreadNotification: {
|
|
||||||
direct: unreadSettings.Direct.default,
|
|
||||||
local: unreadSettings.Local.default,
|
|
||||||
public: unreadSettings.Public.default
|
|
||||||
}
|
|
||||||
},
|
|
||||||
mutations: {
|
|
||||||
updateUnreadNotification (state, settings) {
|
|
||||||
state.unreadNotification = settings
|
|
||||||
}
|
|
||||||
},
|
|
||||||
actions: {
|
|
||||||
loadUnreadNotification ({ commit, rootState }) {
|
|
||||||
return new Promise(resolve => {
|
|
||||||
ipcRenderer.once('response-get-unread-notification', (_, settings) => {
|
|
||||||
ipcRenderer.removeAllListeners('error-get-unread-notification')
|
|
||||||
commit('updateUnreadNotification', settings)
|
|
||||||
resolve(settings)
|
|
||||||
})
|
|
||||||
ipcRenderer.once('error-get-unread-notification', () => {
|
|
||||||
ipcRenderer.removeAllListeners('response-get-unread-notification')
|
|
||||||
commit('updateUnreadNotification', {
|
|
||||||
direct: unreadSettings.Direct.default,
|
|
||||||
local: unreadSettings.Local.default,
|
|
||||||
public: unreadSettings.Public.default
|
|
||||||
})
|
|
||||||
resolve(null)
|
|
||||||
})
|
|
||||||
ipcRenderer.send('get-unread-notification', rootState.Settings.accountID)
|
|
||||||
})
|
|
||||||
},
|
|
||||||
changeUnreadNotification ({ dispatch, state, rootState }, timeline) {
|
|
||||||
const settings = Object.assign({}, state.unreadNotification, timeline, {
|
|
||||||
accountID: rootState.Settings.accountID
|
|
||||||
})
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
ipcRenderer.once('response-update-unread-notification', () => {
|
|
||||||
ipcRenderer.removeAllListeners('error-update-unread-notification')
|
|
||||||
dispatch('loadUnreadNotification')
|
|
||||||
resolve(settings)
|
|
||||||
})
|
|
||||||
ipcRenderer.once('error-update-unread-notification', (_, err) => {
|
|
||||||
ipcRenderer.removeAllListeners('response-update-unread-notification')
|
|
||||||
reject(err)
|
|
||||||
})
|
|
||||||
ipcRenderer.send('update-unread-notification', settings)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,82 @@
|
||||||
|
import { ipcRenderer } from 'electron'
|
||||||
|
import unreadSettings from '~/src/constants/unreadNotification'
|
||||||
|
import { Module, MutationTree, ActionTree } from 'vuex'
|
||||||
|
|
||||||
|
interface UnreadNotification {
|
||||||
|
direct: boolean,
|
||||||
|
local: boolean,
|
||||||
|
public: boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface TimelineState {
|
||||||
|
unreadNotification: UnreadNotification
|
||||||
|
}
|
||||||
|
|
||||||
|
const state = (): TimelineState => ({
|
||||||
|
unreadNotification: {
|
||||||
|
direct: unreadSettings.Direct.default,
|
||||||
|
local: unreadSettings.Local.default,
|
||||||
|
public: unreadSettings.Public.default
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
export const MUTATION_TYPES = {
|
||||||
|
UPDATE_UNREAD_NOTIFICATION: 'updateUnreadNotification'
|
||||||
|
}
|
||||||
|
|
||||||
|
const mutations: MutationTree<TimelineState> = {
|
||||||
|
[MUTATION_TYPES.UPDATE_UNREAD_NOTIFICATION]: (state, settings: UnreadNotification) => {
|
||||||
|
state.unreadNotification = settings
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: use type of rootState
|
||||||
|
const actions: ActionTree<TimelineState, any> = {
|
||||||
|
loadUnreadNotification: ({ commit, rootState }): Promise<boolean> => {
|
||||||
|
return new Promise(resolve => {
|
||||||
|
ipcRenderer.once('response-get-unread-notification', (_, settings: UnreadNotification) => {
|
||||||
|
ipcRenderer.removeAllListeners('error-get-unread-notification')
|
||||||
|
commit(MUTATION_TYPES.UPDATE_UNREAD_NOTIFICATION, settings)
|
||||||
|
resolve(true)
|
||||||
|
})
|
||||||
|
ipcRenderer.once('error-get-unread-notification', () => {
|
||||||
|
ipcRenderer.removeAllListeners('response-get-unread-notification')
|
||||||
|
const settings: UnreadNotification = {
|
||||||
|
direct: unreadSettings.Direct.default,
|
||||||
|
local: unreadSettings.Local.default,
|
||||||
|
public: unreadSettings.Public.default
|
||||||
|
}
|
||||||
|
commit(MUTATION_TYPES.UPDATE_UNREAD_NOTIFICATION, settings)
|
||||||
|
resolve(false)
|
||||||
|
})
|
||||||
|
ipcRenderer.send('get-unread-notification', rootState.Settings.accountID)
|
||||||
|
})
|
||||||
|
},
|
||||||
|
changeUnreadNotification: ({ dispatch, state, rootState }, timeline: object): Promise<boolean> => {
|
||||||
|
const settings = Object.assign({}, state.unreadNotification, timeline, {
|
||||||
|
accountID: rootState.Settings.accountID
|
||||||
|
})
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
ipcRenderer.once('response-update-unread-notification', () => {
|
||||||
|
ipcRenderer.removeAllListeners('error-update-unread-notification')
|
||||||
|
dispatch('loadUnreadNotification')
|
||||||
|
resolve(true)
|
||||||
|
})
|
||||||
|
ipcRenderer.once('error-update-unread-notification', (_, err: Error) => {
|
||||||
|
ipcRenderer.removeAllListeners('response-update-unread-notification')
|
||||||
|
reject(err)
|
||||||
|
})
|
||||||
|
ipcRenderer.send('update-unread-notification', settings)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Todo: use type of rootState
|
||||||
|
const Timeline: Module<TimelineState, any> = {
|
||||||
|
namespaced: true,
|
||||||
|
state: state,
|
||||||
|
mutations: mutations,
|
||||||
|
actions: actions
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Timeline
|
|
@ -0,0 +1,5 @@
|
||||||
|
export default interface Visibility {
|
||||||
|
name: string,
|
||||||
|
value: number,
|
||||||
|
key: string
|
||||||
|
}
|
Loading…
Reference in New Issue