From e5a8bf40c86002973f7b7ed1d86b10063750bc9e Mon Sep 17 00:00:00 2001 From: Christian Pauly Date: Sat, 27 Jun 2020 10:15:37 +0200 Subject: [PATCH] Implement web notifications --- CHANGELOG.md | 4 ++++ assets/sounds/notification.wav | Bin 0 -> 25248 bytes lib/components/matrix.dart | 39 ++++++++++++++++++++++++++++++++- pubspec.lock | 22 +++++++++---------- pubspec.yaml | 1 + 5 files changed, 54 insertions(+), 12 deletions(-) create mode 100644 assets/sounds/notification.wav diff --git a/CHANGELOG.md b/CHANGELOG.md index bbb2254..deaa328 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# Version 0.16.0 - 2020-07-?? +### Features +- Implement web notifications + # Version 0.15.1 - 2020-06-26 ### Fixes: - Fix a big with account data being stored incorrectly diff --git a/assets/sounds/notification.wav b/assets/sounds/notification.wav new file mode 100644 index 0000000000000000000000000000000000000000..15d9235d592e31b4110860ddcb07d4590d9878ac GIT binary patch literal 25248 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 literal 0 HcmV?d00001 diff --git a/lib/components/matrix.dart b/lib/components/matrix.dart index 93bc680..510f666 100644 --- a/lib/components/matrix.dart +++ b/lib/components/matrix.dart @@ -9,7 +9,7 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:localstorage/localstorage.dart'; import 'package:url_launcher/url_launcher.dart'; - +import 'package:universal_html/prefer_universal/html.dart' as html; import '../l10n/l10n.dart'; import '../utils/beautify_string_extension.dart'; import '../utils/famedlysdk_store.dart'; @@ -101,6 +101,7 @@ class MatrixState extends State { StreamSubscription onRoomKeyRequestSub; StreamSubscription onKeyVerificationRequestSub; StreamSubscription onJitsiCallSub; + StreamSubscription onNotification; void onJitsiCall(EventUpdate eventUpdate) { final event = Event.fromJson( @@ -157,6 +158,28 @@ class MatrixState extends State { return; } + void _showWebNotification(EventUpdate eventUpdate) async { + final room = client.getRoomById(eventUpdate.roomID); + final event = Event.fromJson(eventUpdate.content, room); + final body = event.getLocalizedBody( + L10n.of(context), + withSenderNamePrefix: + !room.isDirectChat || room.lastEvent.senderId == client.userID, + ); + html.AudioElement() + ..src = 'assets/assets/sounds/notification.wav' + ..autoplay = true + ..load(); + html.Notification( + room.getLocalizedDisplayname(L10n.of(context)), + body: body, + icon: event.sender.avatarUrl?.getThumbnail(client, + width: 64, height: 64, method: ThumbnailMethod.crop) ?? + room.avatar?.getThumbnail(client, + width: 64, height: 64, method: ThumbnailMethod.crop), + ); + } + @override void initState() { store = widget.store ?? Store(); @@ -234,6 +257,19 @@ class MatrixState extends State { renderHtml = render == '1'; }); } + if (kIsWeb) { + client.onSync.stream.first.then((s) { + html.Notification.requestPermission(); + onNotification ??= client.onEvent.stream + .where((e) => + e.roomID != activeRoomId && + e.type == 'timeline' && + [EventTypes.Message, EventTypes.Sticker, EventTypes.Encrypted] + .contains(e.eventType) && + e.content['sender'] != client.userID) + .listen(_showWebNotification); + }); + } super.initState(); } @@ -242,6 +278,7 @@ class MatrixState extends State { onRoomKeyRequestSub?.cancel(); onKeyVerificationRequestSub?.cancel(); onJitsiCallSub?.cancel(); + onNotification?.cancel(); super.dispose(); } diff --git a/pubspec.lock b/pubspec.lock index b6f0e7e..435aa3e 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -157,6 +157,13 @@ packages: url: "https://github.com/simolus3/moor.git" source: git version: "1.0.0" + fake_async: + dependency: transitive + description: + name: fake_async + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" famedlysdk: dependency: "direct main" description: @@ -539,7 +546,7 @@ packages: name: path url: "https://pub.dartlang.org" source: hosted - version: "1.6.4" + version: "1.7.0" path_drawing: dependency: transitive description: @@ -617,13 +624,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.4.2" - quiver: - dependency: transitive - description: - name: quiver - url: "https://pub.dartlang.org" - source: hosted - version: "2.1.3" random_string: dependency: "direct main" description: @@ -761,21 +761,21 @@ packages: name: test url: "https://pub.dartlang.org" source: hosted - version: "1.14.4" + version: "1.14.7" test_api: dependency: transitive description: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.2.15" + version: "0.2.16" test_core: dependency: transitive description: name: test_core url: "https://pub.dartlang.org" source: hosted - version: "0.3.4" + version: "0.3.7" typed_data: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 92fc15d..de870ec 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -93,6 +93,7 @@ flutter: # To add assets to your application, add an assets section, like this: assets: - assets/ + - assets/sounds/ - assets/js/ - assets/js/package/