1
0
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:
Zhiyuan Zheng
2021-01-07 19:13:09 +01:00
parent dcb36a682d
commit 4b99813bb7
104 changed files with 2463 additions and 1619 deletions

0
src/startup/Main.tsx Normal file
View File

12
src/startup/audio.ts Normal file
View 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

View 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
View 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
View 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
View 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

View 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
View 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