diff --git a/lib/l10n/intl_ar.arb b/lib/l10n/intl_ar.arb index 3cdf1f1f5..e3a0058c1 100644 --- a/lib/l10n/intl_ar.arb +++ b/lib/l10n/intl_ar.arb @@ -1966,8 +1966,6 @@ "@start": {}, "reportUser": "التبيلغ عن المستخدم", "@reportUser": {}, - "openChat": "فتح المحادثة", - "@openChat": {}, "pinMessage": "تثبيت في الغرفة", "@pinMessage": {}, "confirmEventUnpin": "هل أنت متأكد من إلغاء تثبيت الحدث بشكل دائم؟", diff --git a/lib/l10n/intl_be.arb b/lib/l10n/intl_be.arb index 7d256e694..7e2321ee6 100644 --- a/lib/l10n/intl_be.arb +++ b/lib/l10n/intl_be.arb @@ -1473,7 +1473,6 @@ "removeFromSpace": "Выдаліць з прасторы", "start": "Пачаць", "pleaseEnterRecoveryKeyDescription": "Каб разблакіраваць вашы мінулыя паведамленні, калі ласка, увядзіце ключ аднаўлення, што быў згенерыраваны ў мінулай сесіі. Ключ аднаўлення гэта НЕ ваш пароль.", - "openChat": "Адкрыць чат", "markAsRead": "Адзначыць як прачытанае", "reportUser": "Паскардзіцца на карыстальніка", "dismiss": "Адхіліць", diff --git a/lib/l10n/intl_bo.arb b/lib/l10n/intl_bo.arb index 1b3c33259..81b7e27f3 100644 --- a/lib/l10n/intl_bo.arb +++ b/lib/l10n/intl_bo.arb @@ -1801,7 +1801,6 @@ "placeholders": {} }, "@storeInSecureStorageDescription": {}, - "@openChat": {}, "@kickUserDescription": {}, "@sendAMessage": { "type": "String", diff --git a/lib/l10n/intl_ca.arb b/lib/l10n/intl_ca.arb index b5006b9bc..a68ae02dd 100644 --- a/lib/l10n/intl_ca.arb +++ b/lib/l10n/intl_ca.arb @@ -2169,7 +2169,6 @@ "custom": "Personalitzat", "noBackupWarning": "Compte! Si no actives la còpia de seguretat dels xats, perdràs accés als teus missatges xifrats. És molt recomanable activar-ho abans de tancar la sessió.", "storeInSecureStorageDescription": "Desa la clau de recuperació en l'emmagatzematge segur d'aquest dispositiu.", - "openChat": "Obre el xat", "kickUserDescription": "Li usuàrïi ha estat expulsadi però no vetadi. Als xats públics, pot tornar-hi a entrar en qualsevol moment.", "importNow": "Importa-ho ara", "pinMessage": "Fixa a la sala", diff --git a/lib/l10n/intl_cs.arb b/lib/l10n/intl_cs.arb index fb5f161d8..e089c495b 100644 --- a/lib/l10n/intl_cs.arb +++ b/lib/l10n/intl_cs.arb @@ -1913,7 +1913,6 @@ }, "markAsRead": "Označit jako přečtené", "reportUser": "Nahlásit uživatele", - "openChat": "Otevřete chat", "dismiss": "Zavrhnout", "reactedWith": "{sender} reagoval s {reaction}", "@reactedWith": { diff --git a/lib/l10n/intl_de.arb b/lib/l10n/intl_de.arb index a1054580e..765d27d4e 100644 --- a/lib/l10n/intl_de.arb +++ b/lib/l10n/intl_de.arb @@ -1937,7 +1937,6 @@ }, "markAsRead": "Als gelesen markiert", "reportUser": "Benutzer melden", - "openChat": "Chat öffnen", "confirmEventUnpin": "Möchtest du das Ereignis wirklich dauerhaft lösen?", "dismiss": "Verwerfen", "youKicked": "👞 Du hast {user} rausgeworfen", diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb index e0a449bfe..495d17286 100644 --- a/lib/l10n/intl_en.arb +++ b/lib/l10n/intl_en.arb @@ -2063,7 +2063,6 @@ "removeFromSpace": "Remove from space", "start": "Start", "pleaseEnterRecoveryKeyDescription": "To unlock your old messages, please enter your recovery key that has been generated in a previous session. Your recovery key is NOT your password.", - "openChat": "Open Chat", "markAsRead": "Mark as read", "reportUser": "Report user", "dismiss": "Dismiss", diff --git a/lib/l10n/intl_es.arb b/lib/l10n/intl_es.arb index 48f5f3db7..7cf665cf2 100644 --- a/lib/l10n/intl_es.arb +++ b/lib/l10n/intl_es.arb @@ -1968,7 +1968,6 @@ "replace": "Reemplazar", "unsupportedAndroidVersionLong": "Esta característica requiere una versión más reciente de Android. Por favor, compruebe las actualizaciones o la compatibilidad de LineageOS.", "storeSecurlyOnThisDevice": "Almacenar de forma segura en este dispositivo", - "openChat": "Abrir chat", "screenSharingDetail": "Usted está compartiendo su pantalla en FluffyChat", "dismiss": "Descartar", "unsupportedAndroidVersion": "Versión de Android no compatible", diff --git a/lib/l10n/intl_et.arb b/lib/l10n/intl_et.arb index 7aad9f09d..dbf2cedb5 100644 --- a/lib/l10n/intl_et.arb +++ b/lib/l10n/intl_et.arb @@ -1913,7 +1913,6 @@ }, "markAsRead": "Märgi loetuks", "reportUser": "Teata kasutajast", - "openChat": "Ava vestlus", "dismiss": "Loobu", "reactedWith": "{sender} reageeris nii {reaction}", "@reactedWith": { diff --git a/lib/l10n/intl_eu.arb b/lib/l10n/intl_eu.arb index 72e115679..9337a66f8 100644 --- a/lib/l10n/intl_eu.arb +++ b/lib/l10n/intl_eu.arb @@ -1935,7 +1935,6 @@ "removeFromSpace": "Kendu gunetik", "start": "Hasi", "reportUser": "Salatu erabiltzailea", - "openChat": "Ireki txata", "youJoinedTheChat": "Txatera batu zara", "youAcceptedTheInvitation": "👍 Gonbidapena onartu duzu", "youBannedUser": "{user}(r)i debekua ezarri diozu", diff --git a/lib/l10n/intl_fa.arb b/lib/l10n/intl_fa.arb index 4b5ec5e3a..cd640503f 100644 --- a/lib/l10n/intl_fa.arb +++ b/lib/l10n/intl_fa.arb @@ -1904,7 +1904,6 @@ "type": "String", "placeholders": {} }, - "openChat": "باز کردن چت", "dismiss": "رد کردن", "unsupportedAndroidVersion": "نسخه اندروید پشتیبانی‌نشده", "youUnbannedUser": "شما محرومیت {user} را برداشتید", diff --git a/lib/l10n/intl_fi.arb b/lib/l10n/intl_fi.arb index 9717bf9e0..338647c30 100644 --- a/lib/l10n/intl_fi.arb +++ b/lib/l10n/intl_fi.arb @@ -1962,8 +1962,6 @@ } } }, - "openChat": "Avaa Keskustelu", - "@openChat": {}, "pinMessage": "Kiinnitä huoneeseen", "@pinMessage": {}, "confirmEventUnpin": "Haluatko varmasti irrottaa tapahtuman pysyvästi?", diff --git a/lib/l10n/intl_fr.arb b/lib/l10n/intl_fr.arb index 8a96d0a48..c3af0b766 100644 --- a/lib/l10n/intl_fr.arb +++ b/lib/l10n/intl_fr.arb @@ -1940,8 +1940,6 @@ "@markAsRead": {}, "reportUser": "Signaler l'utilisateur/trice", "@reportUser": {}, - "openChat": "Ouvrir la discussion", - "@openChat": {}, "reactedWith": "{sender} a réagi avec {reaction}", "@reactedWith": { "type": "String", diff --git a/lib/l10n/intl_ga.arb b/lib/l10n/intl_ga.arb index d123cd001..11b3fc526 100644 --- a/lib/l10n/intl_ga.arb +++ b/lib/l10n/intl_ga.arb @@ -2024,7 +2024,6 @@ "messageInfo": "Eolas teachtaireachta", "messageType": "Cineál Teachtaireachta", "pleaseEnterRecoveryKeyDescription": "Chun do sheanteachtaireachtaí a dhíghlasáil, cuir isteach d'eochair athshlánaithe a gineadh i seisiún eile. NÍ do phasfhocal í d'eochair athshlánaithe.", - "openChat": "Oscail Comhrá", "unsupportedAndroidVersionLong": "Éilíonn an ghné seo leagan Android níos nuaí. Seiceáil le haghaidh nuashonruithe nó tacaíocht Lineage OS.", "experimentalVideoCalls": "Glaonna físe turgnamhacha", "invitedBy": "📩 Cuireadh ó {user}", diff --git a/lib/l10n/intl_gl.arb b/lib/l10n/intl_gl.arb index 7c52c9267..32cae0628 100644 --- a/lib/l10n/intl_gl.arb +++ b/lib/l10n/intl_gl.arb @@ -1910,7 +1910,6 @@ "dismiss": "Desbotar", "markAsRead": "Marcar como lido", "reportUser": "Denunciar usuaria", - "openChat": "Abrir Conversa", "voiceCall": "Chamada de voz", "emojis": "Emojis", "placeCall": "Chamar", diff --git a/lib/l10n/intl_hr.arb b/lib/l10n/intl_hr.arb index 826e97a13..36bf354f0 100644 --- a/lib/l10n/intl_hr.arb +++ b/lib/l10n/intl_hr.arb @@ -1908,7 +1908,6 @@ }, "markAsRead": "Označi kao pročitano", "reportUser": "Prijavi korisnika", - "openChat": "Otvori chat", "dismiss": "Odbaci", "unsupportedAndroidVersion": "Nepodržana Android verzija", "unsupportedAndroidVersionLong": "Ova funkcija zahtijeva noviju verziju Androida. Provjeri, postoje li nove verzije ili podrška za Lineage OS.", diff --git a/lib/l10n/intl_hu.arb b/lib/l10n/intl_hu.arb index 35f6fac4e..bc731dfc9 100644 --- a/lib/l10n/intl_hu.arb +++ b/lib/l10n/intl_hu.arb @@ -2279,8 +2279,6 @@ "@noBackupWarning": {}, "storeInSecureStorageDescription": "Tárolja a visszaállítási kulcsot az eszköz biztonsági tárjában.", "@storeInSecureStorageDescription": {}, - "openChat": "Csevegés megnyitása", - "@openChat": {}, "kickUserDescription": "A felhasználó kirúgásra került a csevegésből, de nincs kitiltva. Publikus csevegés esetén a felhasználó bármikor visszatérhet.", "@kickUserDescription": {}, "importNow": "Importálás most", diff --git a/lib/l10n/intl_id.arb b/lib/l10n/intl_id.arb index 62b7f6c24..3be296152 100644 --- a/lib/l10n/intl_id.arb +++ b/lib/l10n/intl_id.arb @@ -1913,7 +1913,6 @@ "dismiss": "Abaikan", "markAsRead": "Tandai sebagai dibaca", "reportUser": "Laporkan pengguna", - "openChat": "Buka Chat", "reactedWith": "{sender} bereaksi dengan {reaction}", "@reactedWith": { "type": "String", diff --git a/lib/l10n/intl_ie.arb b/lib/l10n/intl_ie.arb index 82c58d9ea..4482db24f 100644 --- a/lib/l10n/intl_ie.arb +++ b/lib/l10n/intl_ie.arb @@ -578,8 +578,6 @@ "type": "String", "placeholders": {} }, - "openChat": "Aperter li conversation", - "@openChat": {}, "reportMessage": "Raportar li missage", "@reportMessage": { "type": "String", diff --git a/lib/l10n/intl_it.arb b/lib/l10n/intl_it.arb index 34091e2a1..e86a13f17 100644 --- a/lib/l10n/intl_it.arb +++ b/lib/l10n/intl_it.arb @@ -2278,8 +2278,6 @@ "@noBackupWarning": {}, "storeInSecureStorageDescription": "Salva la chiave di recupero nell'archivio sicuro di questo dispositivo.", "@storeInSecureStorageDescription": {}, - "openChat": "Apri la Chat", - "@openChat": {}, "kickUserDescription": "L'utente è stato rimosso, ma non bannato. Nelle chat pubbliche, l'utente potrà rientrare quando vuole.", "@kickUserDescription": {}, "importNow": "Importa ora", diff --git a/lib/l10n/intl_ja.arb b/lib/l10n/intl_ja.arb index f70920522..9e9348cee 100644 --- a/lib/l10n/intl_ja.arb +++ b/lib/l10n/intl_ja.arb @@ -1841,7 +1841,6 @@ "openGallery": "ギャラリーを開く", "removeFromSpace": "スペースから削除", "pleaseEnterRecoveryKeyDescription": "古いメッセージを解除するには、以前のセッションで生成されたリカバリーキーを入力してください。リカバリーキーはパスワードではありません。", - "openChat": "チャットを開く", "experimentalVideoCalls": "実験的なビデオ通話", "youAcceptedTheInvitation": "👍 招待を承諾しました", "youUnbannedUser": "{user} の禁止を解除しました", diff --git a/lib/l10n/intl_kab.arb b/lib/l10n/intl_kab.arb index cd79af77a..8571de388 100644 --- a/lib/l10n/intl_kab.arb +++ b/lib/l10n/intl_kab.arb @@ -1183,7 +1183,6 @@ "openGallery": "Ldi timidelt", "removeFromSpace": "Kkes seg tallunt", "start": "Senker", - "openChat": "Ldi Adiwenni", "markAsRead": "Creḍ amzun yettwaɣṛa", "reportUser": "Cetki aseqdac", "dismiss": "Agi", diff --git a/lib/l10n/intl_ko.arb b/lib/l10n/intl_ko.arb index 054ad723d..adfd781db 100644 --- a/lib/l10n/intl_ko.arb +++ b/lib/l10n/intl_ko.arb @@ -1939,8 +1939,6 @@ "@markAsRead": {}, "reportUser": "유저 신고", "@reportUser": {}, - "openChat": "채팅 열기", - "@openChat": {}, "reactedWith": "{sender}가 {reaction}로 반응함", "@reactedWith": { "type": "String", diff --git a/lib/l10n/intl_lt.arb b/lib/l10n/intl_lt.arb index 8818df1d3..6c4dea07f 100644 --- a/lib/l10n/intl_lt.arb +++ b/lib/l10n/intl_lt.arb @@ -1391,8 +1391,6 @@ } } }, - "openChat": "Atverti pokalbį", - "@openChat": {}, "reportUser": "Pranešti apie vartotoją", "@reportUser": {}, "dismiss": "Atsisakyti", diff --git a/lib/l10n/intl_lv.arb b/lib/l10n/intl_lv.arb index 252f56b2b..cae1c044e 100644 --- a/lib/l10n/intl_lv.arb +++ b/lib/l10n/intl_lv.arb @@ -2117,7 +2117,6 @@ "placeholders": {} }, "storeInSecureStorageDescription": "Glabāt atkopes atslēgu šīs ierīces drošajā krātuvē.", - "openChat": "Atvērt tērzēšanu", "kickUserDescription": "Lietotājs ir izmests no tērzēšanas, bet piekļuve nav liegta. Publiskās tērzēšanās lietotājs var atkārtoti pievienoties jebkurā laikā.", "sendAMessage": "Nosūtīt ziņu", "@sendAMessage": { diff --git a/lib/l10n/intl_nb.arb b/lib/l10n/intl_nb.arb index 57d8a2c06..f5c50cdd9 100644 --- a/lib/l10n/intl_nb.arb +++ b/lib/l10n/intl_nb.arb @@ -1694,7 +1694,6 @@ "placeholders": {} }, "dismiss": "Avvis", - "openChat": "Åpne chat", "reopenChat": "Gjenåpne chat", "changeTheDescriptionOfTheGroup": "Endre beskrivelsen til chatten", "inviteOtherUsers": "Inviter andre brukere til denne chatten", diff --git a/lib/l10n/intl_nl.arb b/lib/l10n/intl_nl.arb index 37eb55a0b..9d90b0bb7 100644 --- a/lib/l10n/intl_nl.arb +++ b/lib/l10n/intl_nl.arb @@ -1913,7 +1913,6 @@ "dismiss": "Sluiten", "markAsRead": "Markeer als gelezen", "reportUser": "Persoon rapporteren", - "openChat": "Chat openen", "reactedWith": "{sender} reageerde met {reaction}", "@reactedWith": { "type": "String", diff --git a/lib/l10n/intl_pl.arb b/lib/l10n/intl_pl.arb index ea70d2a50..74d386e4d 100644 --- a/lib/l10n/intl_pl.arb +++ b/lib/l10n/intl_pl.arb @@ -1909,7 +1909,6 @@ "type": "String", "placeholders": {} }, - "openChat": "Otwórz czat", "supposedMxid": "To powinno być {mxid}", "@supposedMxid": { "type": "String", diff --git a/lib/l10n/intl_pt_BR.arb b/lib/l10n/intl_pt_BR.arb index 64ee26337..03b566b55 100644 --- a/lib/l10n/intl_pt_BR.arb +++ b/lib/l10n/intl_pt_BR.arb @@ -1912,7 +1912,6 @@ "openGallery": "Abrir galeria", "markAsRead": "Marcar como lido", "dismiss": "Descartar", - "openChat": "Abrir conversa", "reportUser": "Denunciar usuário", "emojis": "Emojis", "placeCall": "Chamar", diff --git a/lib/l10n/intl_ro.arb b/lib/l10n/intl_ro.arb index 252e16a04..6c8347c3f 100644 --- a/lib/l10n/intl_ro.arb +++ b/lib/l10n/intl_ro.arb @@ -540,8 +540,6 @@ } } }, - "openChat": "Deschideți Chat", - "@openChat": {}, "youBannedUser": "Ați interzis pe {user}", "@youBannedUser": { "placeholders": { diff --git a/lib/l10n/intl_ru.arb b/lib/l10n/intl_ru.arb index 0f0459738..71894d450 100644 --- a/lib/l10n/intl_ru.arb +++ b/lib/l10n/intl_ru.arb @@ -1905,7 +1905,6 @@ "dismiss": "Отклонить", "markAsRead": "Отметить как прочитанное", "reportUser": "Сообщить о пользователе", - "openChat": "Открыть чат", "reactedWith": "{sender} реагирует с {reaction}", "@reactedWith": { "type": "String", diff --git a/lib/l10n/intl_sv.arb b/lib/l10n/intl_sv.arb index 92f49a20b..5c1f3942b 100644 --- a/lib/l10n/intl_sv.arb +++ b/lib/l10n/intl_sv.arb @@ -1908,7 +1908,6 @@ }, "link": "Länk", "reportUser": "Rapportera användare", - "openChat": "Öppna Chatt", "sendOnEnter": "Skicka med Enter", "scanQrCode": "Skanna QR-kod", "yourChatBackupHasBeenSetUp": "Din chatt-backup har konfigurerats.", diff --git a/lib/l10n/intl_ta.arb b/lib/l10n/intl_ta.arb index 20e9d9a62..e1f537be2 100644 --- a/lib/l10n/intl_ta.arb +++ b/lib/l10n/intl_ta.arb @@ -820,7 +820,6 @@ "placeholders": {} }, "time": "நேரம்", - "openChat": "திறந்த அரட்டை", "markAsRead": "படித்தபடி குறி", "reportUser": "பயனர் புகாரளிக்கவும்", "dismiss": "தள்ளுபடி", diff --git a/lib/l10n/intl_th.arb b/lib/l10n/intl_th.arb index 9926ae59e..8a97d4bc3 100644 --- a/lib/l10n/intl_th.arb +++ b/lib/l10n/intl_th.arb @@ -1859,7 +1859,6 @@ "placeholders": {} }, "@storeInSecureStorageDescription": {}, - "@openChat": {}, "@kickUserDescription": {}, "@sendAMessage": { "type": "String", diff --git a/lib/l10n/intl_tr.arb b/lib/l10n/intl_tr.arb index 7373b3e72..cd793fa8f 100644 --- a/lib/l10n/intl_tr.arb +++ b/lib/l10n/intl_tr.arb @@ -1940,8 +1940,6 @@ "@markAsRead": {}, "reportUser": "Kullanıcıyı bildir", "@reportUser": {}, - "openChat": "Sohbeti Aç", - "@openChat": {}, "reactedWith": "{sender}, {reaction} ile tepki verdi", "@reactedWith": { "type": "String", diff --git a/lib/l10n/intl_uk.arb b/lib/l10n/intl_uk.arb index 6c18756bc..19e6c97c0 100644 --- a/lib/l10n/intl_uk.arb +++ b/lib/l10n/intl_uk.arb @@ -1914,7 +1914,6 @@ "dismiss": "Відхилити", "markAsRead": "Позначити прочитаним", "reportUser": "Поскаржився на користувача", - "openChat": "Відкрити бесіду", "reactedWith": "{sender} реагує з {reaction}", "@reactedWith": { "type": "String", diff --git a/lib/l10n/intl_uz.arb b/lib/l10n/intl_uz.arb index 53e7829dc..5f830f87c 100644 --- a/lib/l10n/intl_uz.arb +++ b/lib/l10n/intl_uz.arb @@ -2093,7 +2093,6 @@ } }, "newSpaceDescription": "Maydonlar sizga suhbatlaringizni birlashtirish va shaxsiy yoki ommaviy hamjamiyatlarni yaratish imkonini beradi.", - "openChat": "Suhbatni ochish", "youJoinedTheChat": "Siz suhbatga qoʻshildingiz", "encryptThisChat": "Bu suhbatni shifrlash", "disableEncryptionWarning": "Xavfsizlik nuqtai nazaridan, agar u ilgari yoqilgan boʻlsa, suhbatda shifrlashni oʻchirib qoʻyolmaysiz.", diff --git a/lib/l10n/intl_zh.arb b/lib/l10n/intl_zh.arb index 42272a2c9..9809e73e3 100644 --- a/lib/l10n/intl_zh.arb +++ b/lib/l10n/intl_zh.arb @@ -1914,7 +1914,6 @@ "dismiss": "忽略", "markAsRead": "标为已读", "reportUser": "举报用户", - "openChat": "打开聊天", "reactedWith": "{sender} 回应了 {reaction}", "@reactedWith": { "type": "String", diff --git a/lib/l10n/intl_zh_Hant.arb b/lib/l10n/intl_zh_Hant.arb index d94ea9320..2bc414536 100644 --- a/lib/l10n/intl_zh_Hant.arb +++ b/lib/l10n/intl_zh_Hant.arb @@ -2564,8 +2564,6 @@ "@spaces": {}, "start": "開始", "@start": {}, - "openChat": "開啟聊天室", - "@openChat": {}, "unreadChatsInApp": "{appname}:{unread} 未讀聊天室", "@unreadChatsInApp": { "type": "String", diff --git a/lib/utils/client_manager.dart b/lib/utils/client_manager.dart index 2d455f999..0b03352f6 100644 --- a/lib/utils/client_manager.dart +++ b/lib/utils/client_manager.dart @@ -3,10 +3,7 @@ // // SPDX-License-Identifier: AGPL-3.0-or-later -import 'dart:io'; - import 'package:collection/collection.dart'; -import 'package:desktop_notifications/desktop_notifications.dart'; import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/custom_http_client.dart'; @@ -158,15 +155,6 @@ abstract class ClientManager { html.Notification(title, body: body); return; } - if (Platform.isLinux) { - await NotificationsClient().notify( - title, - body: body, - appName: AppSettings.applicationName.value, - hints: [NotificationHint.soundName('message-new-instant')], - ); - return; - } final flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin(); diff --git a/lib/utils/notification_background_handler.dart b/lib/utils/notification_background_handler.dart index 15ac52033..9e5a23ec3 100644 --- a/lib/utils/notification_background_handler.dart +++ b/lib/utils/notification_background_handler.dart @@ -191,8 +191,14 @@ Future notificationTap( ); case FluffyChatNotificationActions.mute: await room.setPushRuleState(PushRuleState.mentionsOnly); + case FluffyChatNotificationActions.open: + router?.go( + client.getRoomById(roomId)?.membership == Membership.invite + ? '/rooms?client=${client.clientName}' + : '/rooms/$roomId?client=${client.clientName}', + ); } } } -enum FluffyChatNotificationActions { markAsRead, reply, mute } +enum FluffyChatNotificationActions { markAsRead, reply, mute, open } diff --git a/lib/widgets/local_notifications_extension.dart b/lib/widgets/local_notifications_extension.dart index 964dcf0c1..840a7d4b9 100644 --- a/lib/widgets/local_notifications_extension.dart +++ b/lib/widgets/local_notifications_extension.dart @@ -3,20 +3,16 @@ // // SPDX-License-Identifier: AGPL-3.0-or-later -import 'dart:io'; - -import 'package:collection/collection.dart'; -import 'package:desktop_notifications/desktop_notifications.dart'; import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/client_download_content_extension.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; +import 'package:fluffychat/utils/notification_background_handler.dart'; import 'package:fluffychat/utils/push_helper.dart'; -import 'package:fluffychat/widgets/fluffy_chat_app.dart'; import 'package:fluffychat/widgets/matrix.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:image/image.dart'; +import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:matrix/matrix.dart'; import 'package:universal_html/html.dart' as html; @@ -47,54 +43,15 @@ extension LocalNotificationsExtension on MatrixState { hideEdit: true, removeMarkdown: true, ); + final avatarUrl = event.room.avatar; - if (kIsWeb) { - final avatarUrl = event.senderFromMemoryOrFallback.avatarUrl; - Uri? thumbnailUri; - - if (avatarUrl != null) { - const size = 128; - const thumbnailMethod = ThumbnailMethod.crop; - // Pre-cache so that we can later just set the thumbnail uri as icon: - try { - await client.downloadMxcCached( - avatarUrl, - width: size, - height: size, - thumbnailMethod: thumbnailMethod, - isThumbnail: true, - rounded: true, - ); - } catch (e, s) { - Logs().d('Unable to pre-download avatar for web notification', e, s); - } - - thumbnailUri = await event.senderFromMemoryOrFallback.avatarUrl - ?.getThumbnailUri( - client, - width: size, - height: size, - method: thumbnailMethod, - ); - } + const size = 128; + const thumbnailMethod = ThumbnailMethod.crop; - if (AppSettings.webNotificationSound.value) _audioPlayer.play(); - - html.Notification( - title, - body: body, - icon: thumbnailUri?.toString(), - tag: event.room.id, - ); - } else if (Platform.isLinux) { - final avatarUrl = event.room.avatar; - final hints = [NotificationHint.soundName('message-new-instant')]; - - if (avatarUrl != null) { - const size = notificationAvatarDimension; - const thumbnailMethod = ThumbnailMethod.crop; - // Pre-cache so that we can later just set the thumbnail uri as icon: - final data = await client.downloadMxcCached( + if (avatarUrl != null) { + // Pre-cache so that we can later just set the thumbnail uri as icon: + try { + await client.downloadMxcCached( avatarUrl, width: size, height: size, @@ -102,66 +59,54 @@ extension LocalNotificationsExtension on MatrixState { isThumbnail: true, rounded: true, ); - - final image = decodeImage(data); - if (image != null) { - final realData = image.getBytes(order: ChannelOrder.rgba); - hints.add( - NotificationHint.imageData( - image.width, - image.height, - realData, - hasAlpha: true, - channels: 4, - ), - ); - } + } catch (e, s) { + Logs().d('Unable to pre-download avatar for web notification', e, s); } - final notification = await linuxNotifications!.notify( + } + + if (kIsWeb) { + final thumbnailUri = await avatarUrl?.getThumbnailUri( + client, + width: size, + height: size, + method: thumbnailMethod, + ); + + if (AppSettings.webNotificationSound.value) _audioPlayer.play(); + + html.Notification( title, body: body, - replacesId: linuxNotificationIds[roomId] ?? 0, - appName: AppSettings.applicationName.value, - appIcon: 'fluffychat', - actions: [ - NotificationAction( - DesktopNotificationActions.openChat.name, - l10n.openChat, - ), - NotificationAction( - DesktopNotificationActions.seen.name, - l10n.markAsRead, - ), - ], - hints: hints, + icon: thumbnailUri?.toString(), + tag: event.room.id, ); - notification.action.then((actionStr) { - var action = DesktopNotificationActions.values.singleWhereOrNull( - (a) => a.name == actionStr, - ); - if (action == null && actionStr == 'default') { - action = DesktopNotificationActions.openChat; - } - switch (action!) { - case DesktopNotificationActions.seen: - event.room.setReadMarker( - event.eventId, - mRead: event.eventId, - public: AppSettings.sendPublicReadReceipts.value, - ); - break; - case DesktopNotificationActions.openChat: - setActiveClient(event.room.client); - - FluffyChatApp.router.go( - '/rooms/${event.room.id}?client=${event.room.client.clientName}', - ); - break; - } - }); - linuxNotificationIds[roomId] = notification.id; + return; } + + FlutterLocalNotificationsPlugin().show( + id: event.room.id.hashCode, + title: title, + body: body, + notificationDetails: NotificationDetails( + linux: LinuxNotificationDetails( + sound: ThemeLinuxSound('message-new-instant'), + actions: [ + LinuxNotificationAction( + key: FluffyChatNotificationActions.markAsRead.name, + label: l10n.markAsRead, + ), + LinuxNotificationAction( + key: FluffyChatNotificationActions.mute.name, + label: l10n.mute, + ), + ], + ), + ), + payload: FluffyChatPushPayload( + client.clientName, + event.room.id, + event.eventId, + ).toString(), + ); } } - -enum DesktopNotificationActions { seen, openChat } diff --git a/lib/widgets/matrix.dart b/lib/widgets/matrix.dart index 686782026..5dbd7a00f 100644 --- a/lib/widgets/matrix.dart +++ b/lib/widgets/matrix.dart @@ -7,11 +7,11 @@ import 'dart:async'; import 'dart:convert'; import 'package:collection/collection.dart'; -import 'package:desktop_notifications/desktop_notifications.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/client_manager.dart'; import 'package:fluffychat/utils/init_with_restore.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_file_extension.dart'; +import 'package:fluffychat/utils/notification_background_handler.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/utils/uia_request_manager.dart'; import 'package:fluffychat/utils/voip_plugin.dart'; @@ -20,6 +20,7 @@ import 'package:fluffychat/widgets/fluffy_chat_app.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:image_picker/image_picker.dart'; import 'package:intl/intl.dart'; import 'package:just_audio/just_audio.dart'; @@ -205,11 +206,6 @@ class MatrixState extends State with WidgetsBindingObserver { return route.split('/')[2]; } - final linuxNotifications = PlatformInfos.isLinux - ? NotificationsClient() - : null; - final Map linuxNotificationIds = {}; - @override void initState() { super.initState(); @@ -289,6 +285,19 @@ class MatrixState extends State with WidgetsBindingObserver { }); onUiaRequest[name] ??= c.onUiaRequest.stream.listen(uiaRequestHandler); if (PlatformInfos.isWeb || PlatformInfos.isLinux) { + FlutterLocalNotificationsPlugin().initialize( + settings: InitializationSettings( + linux: LinuxInitializationSettings( + defaultActionName: FluffyChatNotificationActions.open.name, + ), + ), + onDidReceiveNotificationResponse: (response) => notificationTap( + response, + clients: widget.clients, + router: FluffyChatApp.router, + l10n: null, + ), + ); c.onSync.stream.first.then((s) { html.Notification.requestPermission(); onNotification[name] ??= c.onNotification.stream.listen( @@ -381,8 +390,6 @@ class MatrixState extends State with WidgetsBindingObserver { onLogoutSub.values.map((s) => s.cancel()); onNotification.values.map((s) => s.cancel()); - linuxNotifications?.close(); - super.dispose(); } diff --git a/pubspec.lock b/pubspec.lock index 24f1e7fe6..18c509c9d 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -305,14 +305,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.7.1" - desktop_notifications: - dependency: "direct main" - description: - name: desktop_notifications - sha256: "6d92694ad6e9297a862c5ff7dd6b8ff64c819972557754769f819d2209612927" - url: "https://pub.dev" - source: hosted - version: "0.6.3" desktop_webview_window: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 59104b023..9508540e1 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -23,7 +23,6 @@ dependencies: collection: ^1.18.0 cross_file: ^0.3.5 desktop_drop: ^0.7.1 - desktop_notifications: ^0.6.3 device_info_plus: ^12.4.0 dynamic_color: ^1.8.1 emoji_picker_flutter: ^4.4.0