Attach device token on App Entry (#6176)

This commit is contained in:
Elias Nahum
2022-04-18 08:49:04 -04:00
committed by GitHub
parent 5c59ac2ba3
commit 1a5583034e
4 changed files with 31 additions and 5 deletions

View File

@@ -12,15 +12,20 @@ import {getCurrentUser} from '@queries/servers/user';
import {deleteV1Data} from '@utils/file';
import {isTablet} from '@utils/helpers';
import {AppEntryData, AppEntryError, deferredAppEntryActions, fetchAppEntryData, syncOtherServers, teamsToRemove} from './common';
import {AppEntryData, AppEntryError, deferredAppEntryActions, fetchAppEntryData, registerDeviceToken, syncOtherServers, teamsToRemove} from './common';
export async function appEntry(serverUrl: string, since = 0) {
const operator = DatabaseManager.serverDatabases[serverUrl]?.operator;
if (!operator) {
return {error: `${serverUrl} database not found`};
}
const {database} = operator;
if (!since) {
registerDeviceToken(serverUrl);
}
// clear lastUnreadChannelId
const removeLastUnreadChannelId = await prepareCommonSystemValues(operator, {lastUnreadChannelId: ''});
if (removeLastUnreadChannelId) {

View File

@@ -13,6 +13,7 @@ import {getPreferenceValue, getTeammateNameDisplaySetting} from '@helpers/api/pr
import {selectDefaultTeam} from '@helpers/api/team';
import {DEFAULT_LOCALE} from '@i18n';
import NetworkManager from '@managers/network_manager';
import {getDeviceToken} from '@queries/app/global';
import {queryAllServers} from '@queries/app/servers';
import {queryAllChannelsForTeam} from '@queries/servers/channel';
import {getConfig} from '@queries/servers/system';
@@ -231,12 +232,32 @@ export async function deferredAppEntryActions(
updateAllUsersSince(serverUrl, since);
}
export const registerDeviceToken = async (serverUrl: string) => {
let client;
try {
client = NetworkManager.getClient(serverUrl);
} catch (error) {
return {error};
}
const appDatabase = DatabaseManager.appDatabase?.database;
if (appDatabase) {
const deviceToken = await getDeviceToken(appDatabase);
if (deviceToken) {
client.attachDevice(deviceToken);
}
}
return {error: undefined};
};
export const syncOtherServers = async (serverUrl: string) => {
const database = DatabaseManager.appDatabase?.database;
if (database) {
const servers = await queryAllServers(database);
for (const server of servers) {
if (server.url !== serverUrl && server.lastActiveAt > 0) {
registerDeviceToken(server.url);
syncAllChannelMembers(server.url);
}
}

View File

@@ -10,7 +10,7 @@ import DatabaseManager from '@database/manager';
import {getServerCredentials} from '@init/credentials';
import NetworkManager from '@managers/network_manager';
import WebsocketManager from '@managers/websocket_manager';
import {queryDeviceToken} from '@queries/app/global';
import {getDeviceToken} from '@queries/app/global';
import {getCurrentUserId, getCommonSystemValues} from '@queries/servers/system';
import {getCSRFFromCookie} from '@utils/security';
@@ -113,7 +113,7 @@ export const login = async (serverUrl: string, {ldapOnly = false, loginId, mfaTo
}
try {
deviceToken = await queryDeviceToken(appDatabase);
deviceToken = await getDeviceToken(appDatabase);
user = await client.login(
loginId,
password,
@@ -218,7 +218,7 @@ export const ssoLogin = async (serverUrl: string, serverDisplayName: string, ser
displayName: serverDisplayName,
},
});
deviceToken = await queryDeviceToken(database);
deviceToken = await getDeviceToken(database);
user = await client.getMe();
await server?.operator.handleUsers({users: [user], prepareRecordsOnly: false});
await server?.operator.handleSystem({

View File

@@ -9,7 +9,7 @@ import type Global from '@typings/database/models/app/global';
const {APP: {GLOBAL}} = MM_TABLES;
export const queryDeviceToken = async (appDatabase: Database) => {
export const getDeviceToken = async (appDatabase: Database) => {
try {
const tokens = await appDatabase.get(GLOBAL).find(GLOBAL_IDENTIFIERS.DEVICE_TOKEN) as Global;
return tokens?.value || '';