tooot/src/utils/slices/instances/updatePushDecode.ts

93 lines
3.3 KiB
TypeScript
Raw Normal View History

2021-06-21 11:59:29 +02:00
import apiTooot from '@api/tooot'
2021-02-27 16:33:54 +01:00
import { createAsyncThunk } from '@reduxjs/toolkit'
2021-03-02 01:17:06 +01:00
import i18n from '@root/i18n/i18n'
2021-02-27 16:33:54 +01:00
import { RootState } from '@root/store'
2022-01-02 22:28:33 +01:00
import { isDevelopment } from '@utils/checkEnvironment'
2021-02-27 16:33:54 +01:00
import * as Notifications from 'expo-notifications'
2021-03-02 01:17:06 +01:00
import { Platform } from 'react-native'
2021-06-21 11:59:29 +02:00
import { getInstance, Instance } from '../instancesSlice'
2021-03-02 01:17:06 +01:00
import androidDefaults from './push/androidDefaults'
2021-02-27 16:33:54 +01:00
export const updateInstancePushDecode = createAsyncThunk(
'instances/updatePushDecode',
async (
2021-03-02 01:17:06 +01:00
disable: boolean,
2021-02-27 16:33:54 +01:00
{ getState }
2021-08-29 15:25:38 +02:00
): Promise<{ disable: Instance['push']['decode']['value'] }> => {
2021-02-27 16:33:54 +01:00
const state = getState() as RootState
const instance = getInstance(state)
if (!instance?.url || !instance.account.id || !instance.push.keys) {
return Promise.reject()
}
2022-01-02 22:28:33 +01:00
const expoToken = isDevelopment
2022-01-04 09:09:45 +01:00
? 'DEVELOPMENT_TOKEN_1'
: (
await Notifications.getExpoPushTokenAsync({
experienceId: '@xmflsct/tooot'
})
).data
2021-02-27 16:33:54 +01:00
2021-06-21 11:59:29 +02:00
await apiTooot({
2021-12-06 21:25:09 +01:00
method: 'put',
url: `/push/update-decode/${expoToken}/${instance.url}/${instance.account.id}`,
2021-02-27 16:33:54 +01:00
body: {
2021-12-12 22:09:18 +01:00
auth: !disable ? null : instance.push.keys.auth
2022-01-04 09:09:45 +01:00
}
2021-02-27 16:33:54 +01:00
})
2021-03-02 01:17:06 +01:00
if (Platform.OS === 'android') {
const accountFull = `@${instance.account.acct}@${instance.uri}`
switch (disable) {
case true:
Notifications.deleteNotificationChannelAsync(`${accountFull}_default`)
Notifications.setNotificationChannelAsync(`${accountFull}_follow`, {
groupId: accountFull,
name: i18n.t('meSettingsPush:content.follow.heading'),
...androidDefaults
})
Notifications.setNotificationChannelAsync(
`${accountFull}_favourite`,
{
groupId: accountFull,
name: i18n.t('meSettingsPush:content.favourite.heading'),
...androidDefaults
}
)
Notifications.setNotificationChannelAsync(`${accountFull}_reblog`, {
groupId: accountFull,
name: i18n.t('meSettingsPush:content.reblog.heading'),
...androidDefaults
})
Notifications.setNotificationChannelAsync(`${accountFull}_mention`, {
groupId: accountFull,
name: i18n.t('meSettingsPush:content.mention.heading'),
...androidDefaults
})
Notifications.setNotificationChannelAsync(`${accountFull}_poll`, {
groupId: accountFull,
name: i18n.t('meSettingsPush:content.poll.heading'),
...androidDefaults
})
break
case false:
Notifications.setNotificationChannelAsync(`${accountFull}_default`, {
groupId: accountFull,
name: i18n.t('meSettingsPush:content.default.heading'),
...androidDefaults
})
Notifications.deleteNotificationChannelAsync(`${accountFull}_follow`)
Notifications.deleteNotificationChannelAsync(
`${accountFull}_favourite`
)
Notifications.deleteNotificationChannelAsync(`${accountFull}_reblog`)
Notifications.deleteNotificationChannelAsync(`${accountFull}_mention`)
Notifications.deleteNotificationChannelAsync(`${accountFull}_poll`)
break
}
}
2021-08-29 15:25:38 +02:00
return Promise.resolve({ disable })
2021-02-27 16:33:54 +01:00
}
)