mattermost-mobile/app/requests/remote/push_notification.ts
Elias Nahum 17e832e689
[Gekidou] Refactor storage layer (#5471)
* Refactored storage layer - in progress

* Refactored DatabaseManager & Operators

* Renamed isRecordAppEqualToRaw to isRecordInfoEqualToRaw

* Review feedback

* Update app/database/models/app/info.ts

Co-authored-by: Miguel Alatzar <migbot@users.noreply.github.com>

* Update app/database/models/server/my_team.ts

Co-authored-by: Miguel Alatzar <migbot@users.noreply.github.com>

Co-authored-by: Avinash Lingaloo <>
Co-authored-by: Miguel Alatzar <migbot@users.noreply.github.com>
2021-06-21 17:06:18 -04:00

78 lines
2.7 KiB
TypeScript

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import moment from 'moment-timezone';
import {IntlShape} from 'react-intl';
import {Client4} from '@client/rest';
import DatabaseManager from '@database/manager';
import PushNotifications from '@init/push_notifications';
import {getCommonSystemValues} from '@app/queries/servers/system';
import {getSessions} from '@requests/remote/user';
import {Config} from '@typings/database/models/servers/config';
import {isMinimumServerVersion} from '@utils/helpers';
const MAJOR_VERSION = 5;
const MINOR_VERSION = 24;
const sortByNewest = (a: any, b: any) => {
if (a.create_at > b.create_at) {
return -1;
}
return 1;
};
export const scheduleExpiredNotification = async (serverUrl: string, intl: IntlShape) => {
const database = DatabaseManager.serverDatabases[serverUrl].database;
const {currentUserId, config}: {currentUserId: string, config: Partial<Config>} = await getCommonSystemValues(database);
if (isMinimumServerVersion(Client4.serverVersion, MAJOR_VERSION, MINOR_VERSION) && config.ExtendSessionLengthWithActivity === 'true') {
PushNotifications.cancelAllLocalNotifications();
return null;
}
const timeOut = setTimeout(async () => {
clearTimeout(timeOut);
let sessions: any;
try {
sessions = await getSessions(serverUrl, currentUserId);
} catch (e) {
// console.warn('Failed to get current session', e);
return;
}
if (!Array.isArray(sessions?.data)) {
return;
}
const session = sessions.data.sort(sortByNewest)[0];
const expiresAt = session?.expires_at || 0; //eslint-disable-line camelcase
const expiresInDays = parseInt(String(Math.ceil(Math.abs(moment.duration(moment().diff(expiresAt)).asDays()))), 10);
const message = intl.formatMessage(
{
id: 'mobile.session_expired',
defaultMessage: 'Session Expired: Please log in to continue receiving notifications. Sessions for {siteName} are configured to expire every {daysCount, number} {daysCount, plural, one {day} other {days}}.'},
{
siteName: config.SiteName,
daysCount: expiresInDays,
},
);
if (expiresAt) {
PushNotifications.scheduleNotification({
fireDate: expiresAt,
body: message,
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
userInfo: {
local: true,
},
});
}
}, 20000);
return null;
};