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

@@ -1,7 +1,7 @@
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import {Database, Q} from '@nozbe/watermelondb';
import {Q} from '@nozbe/watermelondb';
import {of as of$} from 'rxjs';
import {switchMap} from 'rxjs/operators';
@@ -12,9 +12,10 @@ import type GlobalModel from '@typings/database/models/app/global';
const {APP: {GLOBAL}} = MM_TABLES;
export const getDeviceToken = async (appDatabase: Database): Promise<string> => {
export const getDeviceToken = async (): Promise<string> => {
try {
const tokens = await appDatabase.get<GlobalModel>(GLOBAL).find(GLOBAL_IDENTIFIERS.DEVICE_TOKEN);
const {database} = DatabaseManager.getAppDatabaseAndOperator();
const tokens = await database.get<GlobalModel>(GLOBAL).find(GLOBAL_IDENTIFIERS.DEVICE_TOKEN);
return tokens?.value || '';
} catch {
return '';

View File

@@ -1,7 +1,8 @@
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import {Database, Q} from '@nozbe/watermelondb';
import {Q} from '@nozbe/watermelondb';
import {of as of$, switchMap, distinctUntilChanged} from 'rxjs';
import {SupportedServer} from '@constants';
import {MM_TABLES} from '@constants/database';
@@ -13,18 +14,51 @@ import type ServerModel from '@typings/database/models/app/servers';
const {APP: {SERVERS}} = MM_TABLES;
export const queryServer = async (appDatabase: Database, serverUrl: string) => {
const servers = (await appDatabase.get<ServerModel>(SERVERS).query(Q.where('url', serverUrl)).fetch());
return servers?.[0];
};
export const queryAllServers = async (appDatabase: Database) => {
return appDatabase.get<ServerModel>(MM_TABLES.APP.SERVERS).query().fetch();
};
export const queryActiveServer = async (appDatabase: Database) => {
export const queryServerDisplayName = (serverUrl: string) => {
try {
const servers = await queryAllServers(appDatabase);
const {database} = DatabaseManager.getAppDatabaseAndOperator();
return database.get<ServerModel>(SERVERS).query(Q.where('url', serverUrl));
} catch {
return undefined;
}
};
export const queryAllActiveServers = () => {
try {
const {database} = DatabaseManager.getAppDatabaseAndOperator();
return database.get<ServerModel>(MM_TABLES.APP.SERVERS).query(
Q.and(
Q.where('identifier', Q.notEq('')),
Q.where('last_active_at', Q.gt(0)),
),
);
} catch {
return undefined;
}
};
export const getServer = async (serverUrl: string) => {
try {
const {database} = DatabaseManager.getAppDatabaseAndOperator();
const servers = (await database.get<ServerModel>(SERVERS).query(Q.where('url', serverUrl)).fetch());
return servers?.[0];
} catch {
return undefined;
}
};
export const getAllServers = async () => {
try {
const {database} = DatabaseManager.getAppDatabaseAndOperator();
return database.get<ServerModel>(MM_TABLES.APP.SERVERS).query().fetch();
} catch {
return [];
}
};
export const getActiveServer = async () => {
try {
const servers = await getAllServers();
const server = servers?.filter((s) => s.identifier)?.reduce((a, b) => (b.lastActiveAt > a.lastActiveAt ? b : a));
return server;
} catch {
@@ -32,45 +66,45 @@ export const queryActiveServer = async (appDatabase: Database) => {
}
};
export const getActiveServerUrl = async (appDatabase: Database) => {
const server = await queryActiveServer(appDatabase);
export const getActiveServerUrl = async () => {
const server = await getActiveServer();
return server?.url || '';
};
export const queryServerByIdentifier = async (appDatabase: Database, identifier: string) => {
export const getServerByIdentifier = async (identifier: string) => {
try {
const servers = (await appDatabase.get<ServerModel>(SERVERS).query(Q.where('identifier', identifier)).fetch());
const {database} = DatabaseManager.getAppDatabaseAndOperator();
const servers = (await database.get<ServerModel>(SERVERS).query(Q.where('identifier', identifier)).fetch());
return servers?.[0];
} catch {
return undefined;
}
};
export const queryServerByDisplayName = async (appDatabase: Database, displayName: string) => {
const servers = await queryAllServers(appDatabase);
export const getServerByDisplayName = async (displayName: string) => {
const servers = await getAllServers();
const server = servers.find((s) => s.displayName.toLowerCase() === displayName.toLowerCase());
return server;
};
export const queryServerName = async (appDatabase: Database, serverUrl: string) => {
try {
const servers = (await appDatabase.get<ServerModel>(SERVERS).query(Q.where('url', serverUrl)).fetch());
return servers?.[0].displayName;
} catch {
return serverUrl;
}
export const getServerDisplayName = async (serverUrl: string) => {
const servers = await queryServerDisplayName(serverUrl)?.fetch();
return servers?.[0].displayName || serverUrl;
};
export const observeServerDisplayName = (serverUrl: string) => {
return queryServerDisplayName(serverUrl)?.observeWithColumns(['display_name']).pipe(
switchMap((s) => of$(s.length ? s[0].displayName : serverUrl)),
distinctUntilChanged(),
);
};
export const observeAllActiveServers = () => {
return queryAllActiveServers()?.observe() || of$([]);
};
export const areAllServersSupported = async () => {
let appDatabase;
try {
const databaseAndOperator = DatabaseManager.getAppDatabaseAndOperator();
appDatabase = databaseAndOperator.database;
} catch {
return false;
}
const servers = await queryAllServers(appDatabase);
const servers = await getAllServers();
for await (const s of servers) {
if (s.lastActiveAt) {
try {