Skip to content

Commit c4fcac7

Browse files
committed
feat: add support for audio notifications windows/macOS
1 parent e2c3cce commit c4fcac7

File tree

6 files changed

+31
-6
lines changed

6 files changed

+31
-6
lines changed

_locales/en/messages.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -356,6 +356,7 @@
356356
"appearanceSettingsTitle": "Appearance",
357357
"privacySettingsTitle": "Privacy",
358358
"notificationsSettingsTitle": "Notifications",
359+
"audioNotificationsSettingsTitle": "Audio Notifications",
359360
"notificationsSettingsContent": "Notification Content",
360361
"notificationPreview": "Preview",
361362
"recoveryPhraseEmpty": "Enter your recovery phrase",

ts/components/settings/SessionNotificationGroupSettings.tsx

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import React from 'react';
33
import useUpdate from 'react-use/lib/useUpdate';
44
import styled from 'styled-components';
55
import { SettingsKey } from '../../data/settings-key';
6+
import { isAudioNotificationSupported } from '../../types/Settings';
67
import { Notifications } from '../../util/notifications';
78
import { SessionButton, SessionButtonColor, SessionButtonType } from '../basic/SessionButton';
89
import { SessionRadioGroup } from '../basic/SessionRadioGroup';
@@ -30,10 +31,15 @@ export const SessionNotificationGroupSettings = (props: { hasPassword: boolean |
3031
if (props.hasPassword === null) {
3132
return null;
3233
}
33-
const initialItem =
34+
35+
const initialNotificationEnabled =
3436
window.getSettingValue(SettingsKey.settingsNotification) || NOTIFICATION.MESSAGE;
3537

36-
const notificationsAreEnabled = initialItem && initialItem !== NOTIFICATION.OFF;
38+
const initialAudioNotificationEnabled =
39+
window.getSettingValue(SettingsKey.settingsAudioNotification) || false;
40+
41+
const notificationsAreEnabled =
42+
initialNotificationEnabled && initialNotificationEnabled !== NOTIFICATION.OFF;
3743

3844
const items = [
3945
{
@@ -58,7 +64,7 @@ export const SessionNotificationGroupSettings = (props: { hasPassword: boolean |
5864
{
5965
conversationId: `preview-notification-${Date.now()}`,
6066
message:
61-
items.find(m => m.value === initialItem)?.label ||
67+
items.find(m => m.value === initialNotificationEnabled)?.label ||
6268
window?.i18n?.('messageBody') ||
6369
'Message body',
6470
title: window.i18n('notificationPreview'),
@@ -83,14 +89,27 @@ export const SessionNotificationGroupSettings = (props: { hasPassword: boolean |
8389
title={window.i18n('notificationsSettingsTitle')}
8490
active={notificationsAreEnabled}
8591
/>
92+
{notificationsAreEnabled && isAudioNotificationSupported() && (
93+
<SessionToggleWithDescription
94+
onClickToggle={async () => {
95+
await window.setSettingValue(
96+
SettingsKey.settingsAudioNotification,
97+
!initialAudioNotificationEnabled
98+
);
99+
forceUpdate();
100+
}}
101+
title={window.i18n('audioNotificationsSettingsTitle')}
102+
active={initialAudioNotificationEnabled}
103+
/>
104+
)}
86105
{notificationsAreEnabled ? (
87106
<SessionSettingsItemWrapper
88107
title={window.i18n('notificationsSettingsContent')}
89108
description={window.i18n('notificationSettingsDialog')}
90109
inline={false}
91110
>
92111
<SessionRadioGroup
93-
initialItem={initialItem}
112+
initialItem={initialNotificationEnabled}
94113
group={SettingsKey.settingsNotification}
95114
items={items}
96115
onClick={async (selectedRadioValue: string) => {

ts/data/settings-key.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ const settingsLinkPreview = 'link-preview-setting';
88
const settingsStartInTray = 'start-in-tray-setting';
99
const settingsOpengroupPruning = 'prune-setting';
1010
const settingsNotification = 'notification-setting';
11+
const settingsAudioNotification = 'audio-notification-setting';
1112

1213
export const SettingsKey = {
1314
settingsReadReceipt,
@@ -19,4 +20,5 @@ export const SettingsKey = {
1920
settingsStartInTray,
2021
settingsOpengroupPruning,
2122
settingsNotification,
23+
settingsAudioNotification,
2224
};

ts/types/LocalizerKeys.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ export type LocalizerKeys =
117117
| 'appMenuUnhide'
118118
| 'timerOption_30_minutes_abbreviated'
119119
| 'pruneSettingDescription'
120+
| 'audioNotificationsSettingsTitle'
120121
| 'voiceMessage'
121122
| 'primaryColorPink'
122123
| 'changePasswordTitle'

ts/types/Settings.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import * as OS from '../OS';
22

33
const MIN_WINDOWS_VERSION = '8.0.0';
44

5-
export const isAudioNotificationSupported = () => OS.isWindows(MIN_WINDOWS_VERSION) || OS.isMacOS();
5+
export const isAudioNotificationSupported = () => OS.isWindows(MIN_WINDOWS_VERSION) || OS.isMacOS(); // currently, only linux does not support audio notification natively
66

77
// Using `Notification::tag` has a bug on Windows 7:
88
// https://github.com/electron/electron/issues/11189

ts/util/notifications.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { debounce, last } from 'lodash';
2+
import { SettingsKey } from '../data/settings-key';
23
import { getStatus } from '../notifications';
34
import { UserSetting } from '../notifications/getStatus';
45
import { isMacOS } from '../OS';
@@ -117,7 +118,8 @@ function update(forceRefresh = false) {
117118
}
118119

119120
const isAppFocused = isWindowFocused();
120-
const isAudioNotificationEnabled = (Storage.get('audio-notification') as boolean) || false;
121+
const isAudioNotificationEnabled =
122+
(Storage.get(SettingsKey.settingsAudioNotification) as boolean) || false;
121123
const audioNotificationSupported = isAudioNotificationSupported();
122124
// const isNotificationGroupingSupported = Settings.isNotificationGroupingSupported();
123125
const numNotifications = currentNotifications.length;

0 commit comments

Comments
 (0)