Add Notifications.getStatus

This commit is contained in:
Daniel Gasienica 2018-05-02 18:03:26 -04:00
parent 5fe5320760
commit d5b391757d
3 changed files with 64 additions and 0 deletions

View file

@ -200,6 +200,7 @@ window.Signal.Migrations.Migrations0DatabaseWithAttachmentData = require('./js/m
window.Signal.Migrations.Migrations1DatabaseWithoutAttachmentData = require('./js/modules/migrations/migrations_1_database_without_attachment_data');
window.Signal.Migrations.upgradeMessageSchema = upgradeMessageSchema;
window.Signal.Notifications = require('./ts/notifications');
window.Signal.OS = require('./js/modules/os');
window.Signal.Settings = require('./js/modules/settings');
window.Signal.Startup = require('./js/modules/startup');

View file

@ -0,0 +1,60 @@
interface Environment {
isAppFocused: boolean;
isAudioNotificationEnabled: boolean;
isAudioNotificationSupported: boolean;
isEnabled: boolean;
numNotifications: number;
userSetting: UserSetting;
}
interface Status {
shouldClearNotifications: boolean;
shouldPlayNotificationSound: boolean;
shouldShowNotifications: boolean;
type: Type;
}
type UserSetting = 'off' | 'count' | 'name' | 'message';
type Type =
| 'ok'
| 'disabled'
| 'appIsFocused'
| 'noNotifications'
| 'userSetting';
export const getStatus = (environment: Environment): Status => {
const type = ((): Type => {
if (!environment.isEnabled) {
return 'disabled';
}
const hasNotifications = environment.numNotifications > 0;
if (!hasNotifications) {
return 'noNotifications';
}
if (environment.isAppFocused) {
return 'appIsFocused';
}
if (environment.userSetting === 'off') {
return 'userSetting';
}
return 'ok';
})();
const shouldPlayNotificationSound =
environment.isAudioNotificationSupported &&
environment.isAudioNotificationEnabled;
const shouldShowNotifications = type === 'ok';
const shouldClearNotifications = type === 'appIsFocused';
return {
shouldClearNotifications,
shouldPlayNotificationSound,
shouldShowNotifications,
type,
};
};

View file

@ -0,0 +1,3 @@
import { getStatus } from './getStatus';
export { getStatus };