mirror of
https://github.com/tooot-app/app
synced 2025-06-05 22:19:13 +02:00
Lots of updates
This commit is contained in:
0
src/startup/Main.tsx
Normal file
0
src/startup/Main.tsx
Normal file
12
src/startup/audio.ts
Normal file
12
src/startup/audio.ts
Normal file
@ -0,0 +1,12 @@
|
||||
import { Audio } from 'expo-av'
|
||||
import log from "./log"
|
||||
|
||||
const audio = () => {
|
||||
log('log', 'audio', 'setting audio playback default options')
|
||||
Audio.setAudioModeAsync({
|
||||
playsInSilentModeIOS: true,
|
||||
interruptionModeIOS: 1
|
||||
})
|
||||
}
|
||||
|
||||
export default audio
|
41
src/startup/checkSecureStorageVersion.ts
Normal file
41
src/startup/checkSecureStorageVersion.ts
Normal file
@ -0,0 +1,41 @@
|
||||
import AsyncStorage from '@react-native-async-storage/async-storage'
|
||||
import { persistor } from '@root/store'
|
||||
import log from './log'
|
||||
|
||||
// Used to upgrade/invalidate secure storage
|
||||
|
||||
const dataKey = '@mastodon_app_database_version'
|
||||
const currentVersion = '20210105'
|
||||
|
||||
const checkSecureStorageVersion = async (): Promise<any> => {
|
||||
log(
|
||||
'log',
|
||||
'checkSecureStorageVersion',
|
||||
'Start checking secure storage version'
|
||||
)
|
||||
try {
|
||||
const value = await AsyncStorage.getItem(dataKey)
|
||||
if (value !== currentVersion) {
|
||||
log(
|
||||
'warn',
|
||||
'checkSecureStorageVersion',
|
||||
`Version does not match. Prev: ${value}. Current: ${currentVersion}.`
|
||||
)
|
||||
persistor.purge()
|
||||
try {
|
||||
await AsyncStorage.setItem(dataKey, currentVersion)
|
||||
} catch (e) {
|
||||
log('error', 'checkSecureStorageVersion', 'Storing storage data error')
|
||||
return Promise.reject()
|
||||
}
|
||||
} else {
|
||||
log('log', 'checkSecureStorageVersion', 'Storing storage version matched')
|
||||
}
|
||||
return Promise.resolve()
|
||||
} catch (e) {
|
||||
log('error', 'checkSecureStorageVersion', 'Getting storage data error')
|
||||
return Promise.reject()
|
||||
}
|
||||
}
|
||||
|
||||
export default checkSecureStorageVersion
|
18
src/startup/dev.ts
Normal file
18
src/startup/dev.ts
Normal file
@ -0,0 +1,18 @@
|
||||
import * as Analytics from 'expo-firebase-analytics'
|
||||
import React from 'react'
|
||||
import log from './log'
|
||||
|
||||
const dev = () => {
|
||||
if (__DEV__) {
|
||||
Analytics.setDebugModeEnabled(true)
|
||||
|
||||
log('log', 'devs', 'initializing wdyr')
|
||||
const whyDidYouRender = require('@welldone-software/why-did-you-render')
|
||||
whyDidYouRender(React, {
|
||||
trackHooks: true,
|
||||
hotReloadBufferMs: 1000
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
export default dev
|
37
src/startup/log.ts
Normal file
37
src/startup/log.ts
Normal file
@ -0,0 +1,37 @@
|
||||
import chalk from 'chalk'
|
||||
|
||||
const ctx = new chalk.Instance({ level: 3 })
|
||||
|
||||
const log = (type: 'log' | 'warn' | 'error', func: string, message: string) => {
|
||||
switch (type) {
|
||||
case 'log':
|
||||
console.log(
|
||||
ctx.bgBlue.white.bold(' Start up ') +
|
||||
' ' +
|
||||
ctx.bgBlueBright.black(` ${func} `) +
|
||||
' ' +
|
||||
message
|
||||
)
|
||||
break
|
||||
case 'warn':
|
||||
console.warn(
|
||||
ctx.bgYellow.white.bold(' Start up ') +
|
||||
' ' +
|
||||
ctx.bgYellowBright.black(` ${func} `) +
|
||||
' ' +
|
||||
message
|
||||
)
|
||||
break
|
||||
case 'error':
|
||||
console.error(
|
||||
ctx.bgRed.white.bold(' Start up ') +
|
||||
' ' +
|
||||
ctx.bgRedBright.black(` ${func} `) +
|
||||
' ' +
|
||||
message
|
||||
)
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
export default log
|
61
src/startup/netInfo.ts
Normal file
61
src/startup/netInfo.ts
Normal file
@ -0,0 +1,61 @@
|
||||
import client from '@api/client'
|
||||
import NetInfo from '@react-native-community/netinfo'
|
||||
import { store } from '@root/store'
|
||||
import { localRemoveInstance } from '@utils/slices/instancesSlice'
|
||||
import log from './log'
|
||||
|
||||
const netInfo = async (): Promise<{
|
||||
connected: boolean
|
||||
corrupted?: string
|
||||
}> => {
|
||||
log('log', 'netInfo', 'initializing')
|
||||
const netInfo = await NetInfo.fetch()
|
||||
const activeIndex = store.getState().instances.local?.activeIndex
|
||||
|
||||
if (netInfo.isConnected) {
|
||||
log('log', 'netInfo', 'network connected')
|
||||
if (activeIndex) {
|
||||
log('log', 'netInfo', 'checking locally stored credentials')
|
||||
return client<Mastodon.Account>({
|
||||
method: 'get',
|
||||
instance: 'local',
|
||||
url: `accounts/verify_credentials`
|
||||
})
|
||||
.then(res => {
|
||||
log('log', 'netInfo', 'local credential check passed')
|
||||
if (
|
||||
res.id !==
|
||||
store.getState().instances.local?.instances[activeIndex].account.id
|
||||
) {
|
||||
log('error', 'netInfo', 'local id does not match remote id')
|
||||
store.dispatch(localRemoveInstance(activeIndex))
|
||||
return Promise.resolve({ connected: true, corruputed: '' })
|
||||
} else {
|
||||
return Promise.resolve({ connected: true })
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
log('error', 'netInfo', 'local credential check failed')
|
||||
if (
|
||||
error.status &&
|
||||
typeof error.status === 'number' &&
|
||||
error.status === 401
|
||||
) {
|
||||
store.dispatch(localRemoveInstance(activeIndex))
|
||||
}
|
||||
return Promise.resolve({
|
||||
connected: true,
|
||||
corrupted: error.data.error
|
||||
})
|
||||
})
|
||||
} else {
|
||||
log('log', 'netInfo', 'no local credential found')
|
||||
return Promise.resolve({ connected: true })
|
||||
}
|
||||
} else {
|
||||
log('warn', 'netInfo', 'network not connected')
|
||||
return Promise.resolve({ connected: true })
|
||||
}
|
||||
}
|
||||
|
||||
export default netInfo
|
15
src/startup/onlineStatus.ts
Normal file
15
src/startup/onlineStatus.ts
Normal file
@ -0,0 +1,15 @@
|
||||
import NetInfo from '@react-native-community/netinfo'
|
||||
import { onlineManager } from 'react-query'
|
||||
import log from './log'
|
||||
|
||||
const onlineStatus = () =>
|
||||
onlineManager.setEventListener(setOnline => {
|
||||
log('log', 'onlineStatus', 'added onlineManager listener')
|
||||
return NetInfo.addEventListener(state => {
|
||||
log('log', 'onlineStatus', `setting online state ${state.isConnected}`)
|
||||
// @ts-ignore
|
||||
setOnline(state.isConnected)
|
||||
})
|
||||
})
|
||||
|
||||
export default onlineStatus
|
14
src/startup/sentry.ts
Normal file
14
src/startup/sentry.ts
Normal file
@ -0,0 +1,14 @@
|
||||
import * as Sentry from 'sentry-expo'
|
||||
import log from "./log"
|
||||
|
||||
const sentry = () => {
|
||||
log('log', 'Sentry', 'initializing')
|
||||
Sentry.init({
|
||||
dsn:
|
||||
'https://c9e29aa05f774aca8f36def98244ce04@o389581.ingest.sentry.io/5571975',
|
||||
enableInExpoDevelopment: false,
|
||||
debug: __DEV__
|
||||
})
|
||||
}
|
||||
|
||||
export default sentry
|
Reference in New Issue
Block a user