Gekidou Android share extension (#6803)

* Refactor app database queries to not require the app database as argument

* Android Share Extension and fix notifications prompt

* feedback review
This commit is contained in:
Elias Nahum
2022-11-30 23:18:56 +02:00
committed by GitHub
parent c1f480de31
commit 6eadc527bb
86 changed files with 4116 additions and 383 deletions

View File

@@ -22,7 +22,7 @@ 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 {getAllServers} from '@queries/app/servers';
import {prepareMyChannelsForTeam, queryAllChannelsForTeam, queryChannelsById} from '@queries/servers/channel';
import {prepareModels, truncateCrtRelatedTables} from '@queries/servers/entry';
import {getHasCRTChanged} from '@queries/servers/preference';
@@ -362,27 +362,21 @@ export const registerDeviceToken = async (serverUrl: string) => {
return {error};
}
const appDatabase = DatabaseManager.appDatabase?.database;
if (appDatabase) {
const deviceToken = await getDeviceToken(appDatabase);
if (deviceToken) {
client.attachDevice(deviceToken);
}
const deviceToken = await getDeviceToken();
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);
syncAllChannelMembersAndThreads(server.url);
autoUpdateTimezone(server.url);
}
const servers = await getAllServers();
for (const server of servers) {
if (server.url !== serverUrl && server.lastActiveAt > 0) {
registerDeviceToken(server.url);
syncAllChannelMembersAndThreads(server.url);
autoUpdateTimezone(server.url);
}
}
};
@@ -479,12 +473,7 @@ export async function verifyPushProxy(serverUrl: string) {
return;
}
const appDatabase = DatabaseManager.appDatabase?.database;
if (!appDatabase) {
return;
}
const deviceId = await getDeviceToken(appDatabase);
const deviceId = await getDeviceToken();
if (!deviceId) {
return;
}

View File

@@ -27,12 +27,7 @@ async function getDeviceIdForPing(serverUrl: string, checkDeviceId: boolean) {
}
}
const appDatabase = DatabaseManager.appDatabase?.database;
if (!appDatabase) {
return '';
}
return getDeviceToken(appDatabase);
return getDeviceToken();
}
// Default timeout interval for ping is 5 seconds

View File

@@ -12,7 +12,7 @@ import PushNotifications from '@init/push_notifications';
import NetworkManager from '@managers/network_manager';
import WebsocketManager from '@managers/websocket_manager';
import {getDeviceToken} from '@queries/app/global';
import {queryServerName} from '@queries/app/servers';
import {getServerDisplayName} from '@queries/app/servers';
import {getCurrentUserId, getExpiredSession, getConfig, getLicense} from '@queries/servers/system';
import {getCurrentUser} from '@queries/servers/user';
import EphemeralStore from '@store/ephemeral_store';
@@ -124,7 +124,7 @@ export const login = async (serverUrl: string, {ldapOnly = false, loginId, mfaTo
}
try {
deviceToken = await getDeviceToken(appDatabase);
deviceToken = await getDeviceToken();
user = await client.login(
loginId,
password,
@@ -204,11 +204,10 @@ export const cancelSessionNotification = async (serverUrl: string) => {
export const scheduleSessionNotification = async (serverUrl: string) => {
try {
const {database: appDatabase} = DatabaseManager.getAppDatabaseAndOperator();
const {database, operator} = DatabaseManager.getServerDatabaseAndOperator(serverUrl);
const sessions = await fetchSessions(serverUrl, 'me');
const user = await getCurrentUser(database);
const serverName = await queryServerName(appDatabase, serverUrl);
const serverName = await getServerDisplayName(serverUrl);
await cancelSessionNotification(serverUrl);
@@ -286,7 +285,7 @@ export const ssoLogin = async (serverUrl: string, serverDisplayName: string, ser
displayName: serverDisplayName,
},
});
deviceToken = await getDeviceToken(database);
deviceToken = await getDeviceToken();
user = await client.getMe();
await server?.operator.handleUsers({users: [user], prepareRecordsOnly: false});
await server?.operator.handleSystem({
@@ -312,9 +311,8 @@ export const ssoLogin = async (serverUrl: string, serverDisplayName: string, ser
async function findSession(serverUrl: string, sessions: Session[]) {
try {
const {database} = DatabaseManager.getServerDatabaseAndOperator(serverUrl);
const {database: appDatabase} = DatabaseManager.getAppDatabaseAndOperator();
const expiredSession = await getExpiredSession(database);
const deviceToken = await getDeviceToken(appDatabase);
const deviceToken = await getDeviceToken();
// First try and find the session by the given identifier hyqddef7jjdktqiyy36gxa8sqy
let session = sessions.find((s) => s.id === expiredSession?.id);