forked from Ivasoft/mattermost-mobile
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:
@@ -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 '';
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user