68 lines
		
	
	
		
			No EOL
		
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			No EOL
		
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import { getVerifyCredentials } from '../../../_utils/mastodon/user'
 | 
						|
import { store } from '../../../_store/store'
 | 
						|
import { switchToTheme } from '../../../_utils/themeEngine'
 | 
						|
import { toast } from '../../../_utils/toast'
 | 
						|
import { database } from '../../../_utils/database/database'
 | 
						|
import { goto } from 'sapper/runtime.js'
 | 
						|
import pAny from 'p-any'
 | 
						|
 | 
						|
export function changeTheme(instanceName, newTheme) {
 | 
						|
  let instanceThemes = store.get('instanceThemes')
 | 
						|
  instanceThemes[instanceName] = newTheme
 | 
						|
  store.set({instanceThemes: instanceThemes})
 | 
						|
  store.save()
 | 
						|
  if (instanceName === store.get('currentInstance')) {
 | 
						|
    switchToTheme(newTheme)
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
export function switchToInstance(instanceName) {
 | 
						|
  let instanceThemes = store.get('instanceThemes')
 | 
						|
  store.set({currentInstance: instanceName})
 | 
						|
  store.save()
 | 
						|
  switchToTheme(instanceThemes[instanceName])
 | 
						|
}
 | 
						|
 | 
						|
export async function logOutOfInstance(instanceName) {
 | 
						|
  let loggedInInstances = store.get('loggedInInstances')
 | 
						|
  let instanceThemes = store.get('instanceThemes')
 | 
						|
  let loggedInInstancesInOrder = store.get('loggedInInstancesInOrder')
 | 
						|
  let currentInstance = store.get('currentInstance')
 | 
						|
  loggedInInstancesInOrder.splice(loggedInInstancesInOrder.indexOf(instanceName), 1)
 | 
						|
  let newInstance = instanceName === currentInstance ?
 | 
						|
    loggedInInstancesInOrder[0] :
 | 
						|
    currentInstance
 | 
						|
  delete loggedInInstances[instanceName]
 | 
						|
  delete instanceThemes[instanceName]
 | 
						|
  store.set({
 | 
						|
    loggedInInstances: loggedInInstances,
 | 
						|
    instanceThemes: instanceThemes,
 | 
						|
    loggedInInstancesInOrder: loggedInInstancesInOrder,
 | 
						|
    currentInstance: newInstance
 | 
						|
  })
 | 
						|
  store.save()
 | 
						|
  toast.say(`Logged out of ${instanceName}`)
 | 
						|
  switchToTheme(instanceThemes[newInstance] || 'default')
 | 
						|
  await database.clearDatabaseForInstance(instanceName)
 | 
						|
  goto('/settings/instances')
 | 
						|
}
 | 
						|
 | 
						|
function setStoreVerifyCredentials(instanceName, thisVerifyCredentials) {
 | 
						|
  let verifyCredentials = store.get('verifyCredentials') || {}
 | 
						|
  verifyCredentials[instanceName] = thisVerifyCredentials
 | 
						|
  store.set({verifyCredentials: verifyCredentials})
 | 
						|
}
 | 
						|
 | 
						|
export async function updateVerifyCredentialsForInstance(instanceName) {
 | 
						|
  let loggedInInstances = store.get('loggedInInstances')
 | 
						|
  let instanceData = loggedInInstances[instanceName]
 | 
						|
  await pAny([
 | 
						|
    database.getInstanceVerifyCredentials(instanceName).then(verifyCredentials => {
 | 
						|
      setStoreVerifyCredentials(instanceName, verifyCredentials)
 | 
						|
    }),
 | 
						|
    getVerifyCredentials(instanceName, instanceData.access_token).then(verifyCredentials => {
 | 
						|
      setStoreVerifyCredentials(instanceName, verifyCredentials)
 | 
						|
      return database.setInstanceVerifyCredentials(instanceName, verifyCredentials)
 | 
						|
    })
 | 
						|
  ])
 | 
						|
} |