Pinafore-Web-Client-Frontend/routes/_actions/instances.js

98 lines
3.5 KiB
JavaScript
Raw Normal View History

import { getVerifyCredentials } from '../_api/user'
import { store } from '../_store/store'
import { switchToTheme } from '../_utils/themeEngine'
import { toast } from '../_utils/toast'
import { database } from '../_database/database'
2018-01-27 23:45:51 +01:00
import { goto } from 'sapper/runtime.js'
import { cacheFirstUpdateAfter } from '../_utils/sync'
2018-02-11 22:46:57 +01:00
import { getInstanceInfo } from '../_api/instance'
2018-01-27 23:45:51 +01:00
2018-02-09 07:29:29 +01:00
export function changeTheme (instanceName, newTheme) {
2018-01-27 23:45:51 +01:00
let instanceThemes = store.get('instanceThemes')
instanceThemes[instanceName] = newTheme
store.set({instanceThemes: instanceThemes})
store.save()
if (instanceName === store.get('currentInstance')) {
switchToTheme(newTheme)
}
}
2018-02-09 07:29:29 +01:00
export function switchToInstance (instanceName) {
2018-01-27 23:45:51 +01:00
let instanceThemes = store.get('instanceThemes')
2018-02-27 07:22:56 +01:00
store.set({
currentInstance: instanceName,
searchResults: null,
queryInSearch: '',
2018-02-28 06:01:01 +01:00
rawComposeText: ''
2018-02-27 07:22:56 +01:00
})
2018-01-27 23:45:51 +01:00
store.save()
switchToTheme(instanceThemes[instanceName])
}
2018-02-09 07:29:29 +01:00
export async function logOutOfInstance (instanceName) {
2018-01-27 23:45:51 +01:00
let loggedInInstances = store.get('loggedInInstances')
let instanceThemes = store.get('instanceThemes')
let loggedInInstancesInOrder = store.get('loggedInInstancesInOrder')
let composeText = store.get('composeText')
let uploadedMedia = store.get('uploadedMedia')
2018-01-27 23:45:51 +01:00
let currentInstance = store.get('currentInstance')
loggedInInstancesInOrder.splice(loggedInInstancesInOrder.indexOf(instanceName), 1)
2018-02-09 07:29:29 +01:00
let newInstance = instanceName === currentInstance
? loggedInInstancesInOrder[0]
: currentInstance
2018-01-27 23:45:51 +01:00
delete loggedInInstances[instanceName]
delete instanceThemes[instanceName]
delete composeText[instanceName]
delete uploadedMedia[instanceName]
2018-01-27 23:45:51 +01:00
store.set({
loggedInInstances: loggedInInstances,
instanceThemes: instanceThemes,
loggedInInstancesInOrder: loggedInInstancesInOrder,
2018-02-11 19:35:25 +01:00
currentInstance: newInstance,
searchResults: null,
2018-02-27 07:22:56 +01:00
queryInSearch: '',
rawComposeText: '',
composeText: composeText,
uploadedMedia: uploadedMedia
2018-01-27 23:45:51 +01:00
})
store.save()
toast.say(`Logged out of ${instanceName}`)
switchToTheme(instanceThemes[newInstance] || 'default')
await database.clearDatabaseForInstance(instanceName)
goto('/settings/instances')
}
2018-02-09 07:29:29 +01:00
function setStoreVerifyCredentials (instanceName, thisVerifyCredentials) {
2018-03-03 22:23:26 +01:00
let verifyCredentials = store.get('verifyCredentials')
2018-01-27 23:45:51 +01:00
verifyCredentials[instanceName] = thisVerifyCredentials
store.set({verifyCredentials: verifyCredentials})
}
2018-02-09 07:29:29 +01:00
export async function updateVerifyCredentialsForInstance (instanceName) {
2018-01-27 23:45:51 +01:00
let loggedInInstances = store.get('loggedInInstances')
let accessToken = loggedInInstances[instanceName].access_token
await cacheFirstUpdateAfter(
() => getVerifyCredentials(instanceName, accessToken),
() => database.getInstanceVerifyCredentials(instanceName),
verifyCredentials => database.setInstanceVerifyCredentials(instanceName, verifyCredentials),
verifyCredentials => setStoreVerifyCredentials(instanceName, verifyCredentials)
)
2018-02-09 07:29:29 +01:00
}
2018-02-11 22:46:57 +01:00
2018-02-26 01:26:43 +01:00
export async function updateVerifyCredentialsForCurrentInstance () {
await updateVerifyCredentialsForInstance(store.get('currentInstance'))
}
2018-02-11 23:11:03 +01:00
export async function updateInstanceInfo (instanceName) {
2018-02-11 22:46:57 +01:00
await cacheFirstUpdateAfter(
() => getInstanceInfo(instanceName),
() => database.getInstanceInfo(instanceName),
info => database.setInstanceInfo(instanceName, info),
info => {
let instanceInfos = store.get('instanceInfos')
instanceInfos[instanceName] = info
store.set({instanceInfos: instanceInfos})
}
)
2018-02-11 23:11:03 +01:00
}