From a951c84e48af21849ae44f97dcf8724fcd2e73c7 Mon Sep 17 00:00:00 2001 From: ryanzhao Date: Wed, 28 Jul 2021 16:13:43 +1000 Subject: [PATCH 1/5] prepare for push notification filter --- .../NotificationServiceExtension.swift | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/SessionNotificationServiceExtension/NotificationServiceExtension.swift b/SessionNotificationServiceExtension/NotificationServiceExtension.swift index 38e2f6966..35cd7f1ac 100644 --- a/SessionNotificationServiceExtension/NotificationServiceExtension.swift +++ b/SessionNotificationServiceExtension/NotificationServiceExtension.swift @@ -14,6 +14,7 @@ public final class NotificationServiceExtension : UNNotificationServiceExtension override public func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) { self.contentHandler = contentHandler self.notificationContent = request.content.mutableCopy() as? UNMutableNotificationContent + let userPublicKey = SNGeneralUtilities.getUserPublicKey() // Abort if the main app is running var isMainAppAndActive = false @@ -36,6 +37,10 @@ public final class NotificationServiceExtension : UNNotificationServiceExtension do { let (message, proto) = try MessageReceiver.parse(envelopeAsData, openGroupMessageServerID: nil, using: transaction) let senderPublicKey = message.sender! + if (senderPublicKey == userPublicKey) { + // Ignore PNs of messages sent from current user. + return self.completeSilenty() + } var senderDisplayName = Storage.shared.getContact(with: senderPublicKey)?.displayName(for: .regular) ?? senderPublicKey let snippet: String var userInfo: [String:Any] = [ NotificationServiceExtension.isFromRemoteKey : true ] @@ -56,6 +61,10 @@ public final class NotificationServiceExtension : UNNotificationServiceExtension if let thread = TSThread.fetch(uniqueId: threadID, transaction: transaction), let group = thread as? TSGroupThread, group.groupModel.groupType == .closedGroup { // Should always be true because we don't get PNs for open groups senderDisplayName = String(format: NotificationStrings.incomingGroupMessageTitleFormat, senderDisplayName, group.groupModel.groupName ?? MessageStrings.newGroupDefaultTitle) + if let messageBody = tsIncomingMessage.previewText(with: transaction).filterForDisplay, !messageBody.contains("@\(userPublicKey)") && group.isOnlyNotifyMentions { + // Ignore PNs if the group is set to only notify mentions + return self.completeSilenty() + } } case let closedGroupControlMessage as ClosedGroupControlMessage: // TODO: We could consider actually handling the update here. Not sure if there's enough time though, seeing as though From ad351d8009ebb9b11a34f5ca0338ce83ccc619a7 Mon Sep 17 00:00:00 2001 From: Ryan Zhao Date: Thu, 29 Jul 2021 10:46:00 +1000 Subject: [PATCH 2/5] clean --- .../NotifyMentions.imageset/Contents.json | 15 ++------------- .../ic_notification_mentions-1.png | Bin 2527 -> 0 bytes .../ic_notification_mentions-2.png | Bin 2527 -> 0 bytes .../ic_notification_mentions.png | Bin 2527 -> 0 bytes .../ic_notifications_mentions.pdf | Bin 0 -> 1599 bytes .../NotificationServiceExtension.swift | 2 +- 6 files changed, 3 insertions(+), 14 deletions(-) delete mode 100644 Session/Meta/Images.xcassets/Session/NotifyMentions.imageset/ic_notification_mentions-1.png delete mode 100644 Session/Meta/Images.xcassets/Session/NotifyMentions.imageset/ic_notification_mentions-2.png delete mode 100644 Session/Meta/Images.xcassets/Session/NotifyMentions.imageset/ic_notification_mentions.png create mode 100644 Session/Meta/Images.xcassets/Session/NotifyMentions.imageset/ic_notifications_mentions.pdf diff --git a/Session/Meta/Images.xcassets/Session/NotifyMentions.imageset/Contents.json b/Session/Meta/Images.xcassets/Session/NotifyMentions.imageset/Contents.json index 60527f39d..87de6e895 100644 --- a/Session/Meta/Images.xcassets/Session/NotifyMentions.imageset/Contents.json +++ b/Session/Meta/Images.xcassets/Session/NotifyMentions.imageset/Contents.json @@ -1,19 +1,8 @@ { "images" : [ { - "filename" : "ic_notification_mentions.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "ic_notification_mentions-1.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "ic_notification_mentions-2.png", - "idiom" : "universal", - "scale" : "3x" + "filename" : "ic_notifications_mentions.pdf", + "idiom" : "universal" } ], "info" : { diff --git a/Session/Meta/Images.xcassets/Session/NotifyMentions.imageset/ic_notification_mentions-1.png b/Session/Meta/Images.xcassets/Session/NotifyMentions.imageset/ic_notification_mentions-1.png deleted file mode 100644 index fe39a8b3566e28a7e49d515e69bfe566a6311dc5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2527 zcmV<52_W`~P)EX>4Tx04R}tkvmAkP!xv$rb%@B6cQ)SShDfJi*c4AUmwAfDc| z4bJ<-5muB{;&b9rlP*a7$aTfzH_io@1)do()2Vsl2(egbW2KE*(bR~ih@+~eQ@)V# zSmnIMSu0mr^Pc>L;hes*%yn8rNMI35kRU=q6(y8mBSyPUiiH%N$9?>Ru3sXTLaq`R zITlcX2HEw4|H1FsTKUNdFDV=cI$s>;V;BhS0*#vEd>=bb;{*sk16O*>U#SB#pQP7X zTJ#9$-3BhMTbi;5Tk8{ps& z7%5Qpy3f12+UNFfPjh}hj&gFc8p;+|00006VoOIv00000008+zyMF)x010qNS#tmY z4c7nw4c7reD4Tcy000McNlirueSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00*~8L_t(|+U=cbY!*cr$A2v#1zH5<5QG+yHlPTiaww!g zyim~?Q9M4NVmydMjA9gx;t>-N#E_5}i6B9ZNCXv#oQjD+ASjU|oC+u+61neE+WKMU z4KJ@VyR*Bq@6pabnJ=3;cAx*wv(G%wGqaEzxEA;j*bbZm4gjlxSApg@#D)gI6rc*I z(Ue2L5GN}8$Opdm5PWi}1|D@Hvy0J&!cUYlKxZd5J17DU2PB{d_|l2a4u*yheqt6B z<(i(&MqC%NT|=OYBOp3jMrhmG5fB~qBDAgV2yn>xx21lDW=}I94>%5-t4l9J9?&27 z0N5JR0!oy#z;fVLkMXVmo&csxm&Rd@MYR$53V0dl8Ijzq#KrRAc0?3U_!50FrOFvGH#qt+$eacv^fC*Bq*czuA_!hV!7lnT(u-mfWYoxj; zPBAcsAv~uwF_mgyW<;|&ZD=fYZXAMG2{cU_tBw2)n702HSPLwbWhL-C-d@<`@;5Lb zn}vTRupuVlujj&;z>UCupEieqsR%c=*W23&ChYuz&t*y3?- z?`4DVJI46t*8pQuX4z3qy|vQrw~Ycsm{fOvqcSP{A`1(u6TkwgS8tc!k>+wS)Ff$| z7kTLC+0sKAC!Uo0U$q{&DN_V|5kc^)rTJ*8r$5p3Gb4>F*P$8`{vZSKiD4lHzZn=D zaI68+7EkSKen@@aB!W%fq_fauvAI*xer7s^ zUnMxQ4|VMV}uTw7Vsw52{)&$oyu*V9hLu9iIk#n4uBI>Z+MdZGGB39PlMk zmCp@GSfOYaE80l2%k&|}MI3LOqR**5ZTbMGJ??1_@VzvBH)=laiSnk;Sa+qHfUyCD zzs|ynbiJbA-ad;aodekD~nwpLUbeML^F0Z~try;|)^u`?1g4s1o4V0Au#n_?h~7w7EN71iTyI z!`scmc%u}3Kjl%spQ8Sj5NdFu#`CE|>vR#Y+K_;sER8o=(RaB={dW}gM}`=;y+ZYE z^l5X*kASFoK}GyO2CKsiO9ZG^x%)io7b~tU4KeN>>0nGoiBFq-Cd>J#`rl+KR|E4b z5m2bOcEZO*RtYl<{#3kxg&y^f#Z5q0!+L9_kH`k90zOBD;#yc2b%DnHphIQ05U|SP zH|MyaTJll@Wg*S&QrjQUs05fsntrx;&j%IPymawa#kG4wjN8k=)sc1rOmAqL#e3eN zxOSCC{rQS(BM`3hAb3M_y=g#|Wfi7LPd0P*`zreX#;1)c9dQxn5wnpV&o)fcrWs;O zZLI5nGluR5n`s&a3jfRzpAYL`&AojGT;ii4#^4<{*rk~T)8bx;Sl9h+*vK6yq%OY10CAv`UrX z7B*Jk)z&&1W1e?u8!b`CAN<0RoiX>^>Y{iP@Qy3!h^bWs0L)U1waUP01L^%q)rEocv0YCb*-GomtKQAHyCk;*2xbo*` z0}rHJJ1tew2E#sj0QX4s)DCe#$bLiwZ80KDS>e&X8}N`^i?oqO$9B2?SgdiK)QTB^ z6qst~%O2ET&{~CTAOPT5kLlmm5fDECAa*jU#@^}Urf>vULR0j+A5S1QWjF$2#$|YK zcU^|L``i%_5^a3k2UWlvM8a*pBOo3$LnK?7>?xiOJcbCZwg4`21lU0y@KOkuL739Y z5uit@hZoclkVf8Sh=1EOOg8}~ zh)l2!I9MaWbRE!93cr1bF&ZJxhfd%mBC!@k(rWUaujEt9&vK!+^$6#)jL#sVU2uMX zKqg3-g*f#k^l>zKhQeP??qr&s;(RJ$6&G$5O(wXK^LrPH3Ab?%ITIcvrZa(xG0Um1 z>t!w?r_>2QgJq6Q5}feUM1pRY;IG7U+H7q{7et!mqNrx5Gd07bBuHiFjLTtXoP#4E z_n}(}k9VR8jm=I34h{|u4kpOUqI+pVxZ@;s*b98-C^km}%+K>TDf4pSp|fcnP>I1g zn*p%f5fB^;v$U@|gMpUR&pzV+eO0Z6jlEn?J28ewCq$NVSm7_B7XJA<6RIf8517~E peF~yO0CY$E(>F*surSvi@;@hP47aC4OdEX>4Tx04R}tkvmAkP!xv$rb%@B6cQ)SShDfJi*c4AUmwAfDc| z4bJ<-5muB{;&b9rlP*a7$aTfzH_io@1)do()2Vsl2(egbW2KE*(bR~ih@+~eQ@)V# zSmnIMSu0mr^Pc>L;hes*%yn8rNMI35kRU=q6(y8mBSyPUiiH%N$9?>Ru3sXTLaq`R zITlcX2HEw4|H1FsTKUNdFDV=cI$s>;V;BhS0*#vEd>=bb;{*sk16O*>U#SB#pQP7X zTJ#9$-3BhMTbi;5Tk8{ps& z7%5Qpy3f12+UNFfPjh}hj&gFc8p;+|00006VoOIv00000008+zyMF)x010qNS#tmY z4c7nw4c7reD4Tcy000McNlirueSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00*~8L_t(|+U=cbY!*cr$A2v#1zH5<5QG+yHlPTiaww!g zyim~?Q9M4NVmydMjA9gx;t>-N#E_5}i6B9ZNCXv#oQjD+ASjU|oC+u+61neE+WKMU z4KJ@VyR*Bq@6pabnJ=3;cAx*wv(G%wGqaEzxEA;j*bbZm4gjlxSApg@#D)gI6rc*I z(Ue2L5GN}8$Opdm5PWi}1|D@Hvy0J&!cUYlKxZd5J17DU2PB{d_|l2a4u*yheqt6B z<(i(&MqC%NT|=OYBOp3jMrhmG5fB~qBDAgV2yn>xx21lDW=}I94>%5-t4l9J9?&27 z0N5JR0!oy#z;fVLkMXVmo&csxm&Rd@MYR$53V0dl8Ijzq#KrRAc0?3U_!50FrOFvGH#qt+$eacv^fC*Bq*czuA_!hV!7lnT(u-mfWYoxj; zPBAcsAv~uwF_mgyW<;|&ZD=fYZXAMG2{cU_tBw2)n702HSPLwbWhL-C-d@<`@;5Lb zn}vTRupuVlujj&;z>UCupEieqsR%c=*W23&ChYuz&t*y3?- z?`4DVJI46t*8pQuX4z3qy|vQrw~Ycsm{fOvqcSP{A`1(u6TkwgS8tc!k>+wS)Ff$| z7kTLC+0sKAC!Uo0U$q{&DN_V|5kc^)rTJ*8r$5p3Gb4>F*P$8`{vZSKiD4lHzZn=D zaI68+7EkSKen@@aB!W%fq_fauvAI*xer7s^ zUnMxQ4|VMV}uTw7Vsw52{)&$oyu*V9hLu9iIk#n4uBI>Z+MdZGGB39PlMk zmCp@GSfOYaE80l2%k&|}MI3LOqR**5ZTbMGJ??1_@VzvBH)=laiSnk;Sa+qHfUyCD zzs|ynbiJbA-ad;aodekD~nwpLUbeML^F0Z~try;|)^u`?1g4s1o4V0Au#n_?h~7w7EN71iTyI z!`scmc%u}3Kjl%spQ8Sj5NdFu#`CE|>vR#Y+K_;sER8o=(RaB={dW}gM}`=;y+ZYE z^l5X*kASFoK}GyO2CKsiO9ZG^x%)io7b~tU4KeN>>0nGoiBFq-Cd>J#`rl+KR|E4b z5m2bOcEZO*RtYl<{#3kxg&y^f#Z5q0!+L9_kH`k90zOBD;#yc2b%DnHphIQ05U|SP zH|MyaTJll@Wg*S&QrjQUs05fsntrx;&j%IPymawa#kG4wjN8k=)sc1rOmAqL#e3eN zxOSCC{rQS(BM`3hAb3M_y=g#|Wfi7LPd0P*`zreX#;1)c9dQxn5wnpV&o)fcrWs;O zZLI5nGluR5n`s&a3jfRzpAYL`&AojGT;ii4#^4<{*rk~T)8bx;Sl9h+*vK6yq%OY10CAv`UrX z7B*Jk)z&&1W1e?u8!b`CAN<0RoiX>^>Y{iP@Qy3!h^bWs0L)U1waUP01L^%q)rEocv0YCb*-GomtKQAHyCk;*2xbo*` z0}rHJJ1tew2E#sj0QX4s)DCe#$bLiwZ80KDS>e&X8}N`^i?oqO$9B2?SgdiK)QTB^ z6qst~%O2ET&{~CTAOPT5kLlmm5fDECAa*jU#@^}Urf>vULR0j+A5S1QWjF$2#$|YK zcU^|L``i%_5^a3k2UWlvM8a*pBOo3$LnK?7>?xiOJcbCZwg4`21lU0y@KOkuL739Y z5uit@hZoclkVf8Sh=1EOOg8}~ zh)l2!I9MaWbRE!93cr1bF&ZJxhfd%mBC!@k(rWUaujEt9&vK!+^$6#)jL#sVU2uMX zKqg3-g*f#k^l>zKhQeP??qr&s;(RJ$6&G$5O(wXK^LrPH3Ab?%ITIcvrZa(xG0Um1 z>t!w?r_>2QgJq6Q5}feUM1pRY;IG7U+H7q{7et!mqNrx5Gd07bBuHiFjLTtXoP#4E z_n}(}k9VR8jm=I34h{|u4kpOUqI+pVxZ@;s*b98-C^km}%+K>TDf4pSp|fcnP>I1g zn*p%f5fB^;v$U@|gMpUR&pzV+eO0Z6jlEn?J28ewCq$NVSm7_B7XJA<6RIf8517~E peF~yO0CY$E(>F*surSvi@;@hP47aC4OdEX>4Tx04R}tkvmAkP!xv$rb%@B6cQ)SShDfJi*c4AUmwAfDc| z4bJ<-5muB{;&b9rlP*a7$aTfzH_io@1)do()2Vsl2(egbW2KE*(bR~ih@+~eQ@)V# zSmnIMSu0mr^Pc>L;hes*%yn8rNMI35kRU=q6(y8mBSyPUiiH%N$9?>Ru3sXTLaq`R zITlcX2HEw4|H1FsTKUNdFDV=cI$s>;V;BhS0*#vEd>=bb;{*sk16O*>U#SB#pQP7X zTJ#9$-3BhMTbi;5Tk8{ps& z7%5Qpy3f12+UNFfPjh}hj&gFc8p;+|00006VoOIv00000008+zyMF)x010qNS#tmY z4c7nw4c7reD4Tcy000McNlirueSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00*~8L_t(|+U=cbY!*cr$A2v#1zH5<5QG+yHlPTiaww!g zyim~?Q9M4NVmydMjA9gx;t>-N#E_5}i6B9ZNCXv#oQjD+ASjU|oC+u+61neE+WKMU z4KJ@VyR*Bq@6pabnJ=3;cAx*wv(G%wGqaEzxEA;j*bbZm4gjlxSApg@#D)gI6rc*I z(Ue2L5GN}8$Opdm5PWi}1|D@Hvy0J&!cUYlKxZd5J17DU2PB{d_|l2a4u*yheqt6B z<(i(&MqC%NT|=OYBOp3jMrhmG5fB~qBDAgV2yn>xx21lDW=}I94>%5-t4l9J9?&27 z0N5JR0!oy#z;fVLkMXVmo&csxm&Rd@MYR$53V0dl8Ijzq#KrRAc0?3U_!50FrOFvGH#qt+$eacv^fC*Bq*czuA_!hV!7lnT(u-mfWYoxj; zPBAcsAv~uwF_mgyW<;|&ZD=fYZXAMG2{cU_tBw2)n702HSPLwbWhL-C-d@<`@;5Lb zn}vTRupuVlujj&;z>UCupEieqsR%c=*W23&ChYuz&t*y3?- z?`4DVJI46t*8pQuX4z3qy|vQrw~Ycsm{fOvqcSP{A`1(u6TkwgS8tc!k>+wS)Ff$| z7kTLC+0sKAC!Uo0U$q{&DN_V|5kc^)rTJ*8r$5p3Gb4>F*P$8`{vZSKiD4lHzZn=D zaI68+7EkSKen@@aB!W%fq_fauvAI*xer7s^ zUnMxQ4|VMV}uTw7Vsw52{)&$oyu*V9hLu9iIk#n4uBI>Z+MdZGGB39PlMk zmCp@GSfOYaE80l2%k&|}MI3LOqR**5ZTbMGJ??1_@VzvBH)=laiSnk;Sa+qHfUyCD zzs|ynbiJbA-ad;aodekD~nwpLUbeML^F0Z~try;|)^u`?1g4s1o4V0Au#n_?h~7w7EN71iTyI z!`scmc%u}3Kjl%spQ8Sj5NdFu#`CE|>vR#Y+K_;sER8o=(RaB={dW}gM}`=;y+ZYE z^l5X*kASFoK}GyO2CKsiO9ZG^x%)io7b~tU4KeN>>0nGoiBFq-Cd>J#`rl+KR|E4b z5m2bOcEZO*RtYl<{#3kxg&y^f#Z5q0!+L9_kH`k90zOBD;#yc2b%DnHphIQ05U|SP zH|MyaTJll@Wg*S&QrjQUs05fsntrx;&j%IPymawa#kG4wjN8k=)sc1rOmAqL#e3eN zxOSCC{rQS(BM`3hAb3M_y=g#|Wfi7LPd0P*`zreX#;1)c9dQxn5wnpV&o)fcrWs;O zZLI5nGluR5n`s&a3jfRzpAYL`&AojGT;ii4#^4<{*rk~T)8bx;Sl9h+*vK6yq%OY10CAv`UrX z7B*Jk)z&&1W1e?u8!b`CAN<0RoiX>^>Y{iP@Qy3!h^bWs0L)U1waUP01L^%q)rEocv0YCb*-GomtKQAHyCk;*2xbo*` z0}rHJJ1tew2E#sj0QX4s)DCe#$bLiwZ80KDS>e&X8}N`^i?oqO$9B2?SgdiK)QTB^ z6qst~%O2ET&{~CTAOPT5kLlmm5fDECAa*jU#@^}Urf>vULR0j+A5S1QWjF$2#$|YK zcU^|L``i%_5^a3k2UWlvM8a*pBOo3$LnK?7>?xiOJcbCZwg4`21lU0y@KOkuL739Y z5uit@hZoclkVf8Sh=1EOOg8}~ zh)l2!I9MaWbRE!93cr1bF&ZJxhfd%mBC!@k(rWUaujEt9&vK!+^$6#)jL#sVU2uMX zKqg3-g*f#k^l>zKhQeP??qr&s;(RJ$6&G$5O(wXK^LrPH3Ab?%ITIcvrZa(xG0Um1 z>t!w?r_>2QgJq6Q5}feUM1pRY;IG7U+H7q{7et!mqNrx5Gd07bBuHiFjLTtXoP#4E z_n}(}k9VR8jm=I34h{|u4kpOUqI+pVxZ@;s*b98-C^km}%+K>TDf4pSp|fcnP>I1g zn*p%f5fB^;v$U@|gMpUR&pzV+eO0Z6jlEn?J28ewCq$NVSm7_B7XJA<6RIf8517~E peF~yO0CY$E(>F*surSvi@;@hP47aC4Odo&pa2$#fI^JA_@Ho^ z<>cAeJ(r@FcRg6`*qh^@O83`KG>Y+|oa5Vv_OSc<7f;=`ExkTD*j5m^+>gi%!$1D! zVK&vE-ApZU^}aNxA$YJx<=@uW-BOp8zCJMOlhUZ(#$4)>=_ljr75j!G}Xt zO=ZsrJ50sN#!CPay|B4Hzj8f9K@O zu8_DM=5AMTgW^MFWJ^h;3gdo1n_#uQ@bB2bmqbtH;BdSpr?sj+#V=mezcKa2E2Q70 zS8fLQwWv=ttsSv1E|pi@Nw3>@S$F>D&p#9QHkfa1uT3~~YL`WqIdUfc*!t(URSyT! zZ$@ou%P4*rJbE=?_>Vgkzs`*bPtBDTov#ZD$S=;DQ@{J7I_8IK3%e$7fWZUvh=Rkm zi-*g$uz2Ua68c=}M=Q&|-aB#gsnB^ub^8Tn^=-wz4%zAprcU2b+y5U=w)f+{-+xT(rneT&i?4h)@`i^zPo&F{+Ts*2h^{p z8v~EsU)}x0Te(fK*B41l;XxZ>MLQ3s<+Z*y+#VD#5P5&Wvs3cp&HFk^!f)VT>{wKT zv3BD$S>PL@8R8a_kX>>ajqcHjnjxW^c1eXoa;5+&2jb!o02j^>@Bnc2DnJ6cFj#O>c-H zAJi&%2YsVW|DS&p8|o>bLmCE^s@&|r-D#RRy9TjIq**B?q$E^=-Y6LDHL*`u6h2+? zv{lUrjFmIF>qSIzPE+R*;R<;+A0vPggDFohK+ENn9OMHprlR4$fflgOU<&GSjHV$6 zXXz0n9GF=cO(|z%h_#Pl6yakl@Qm5Y^6t-krn!iPDI>b*IZgnma1W~Pb~ UDKNa?u8^eU3M?WbDP4>G2YGc2X#fBK literal 0 HcmV?d00001 diff --git a/SessionNotificationServiceExtension/NotificationServiceExtension.swift b/SessionNotificationServiceExtension/NotificationServiceExtension.swift index 35cd7f1ac..2cb60549b 100644 --- a/SessionNotificationServiceExtension/NotificationServiceExtension.swift +++ b/SessionNotificationServiceExtension/NotificationServiceExtension.swift @@ -61,7 +61,7 @@ public final class NotificationServiceExtension : UNNotificationServiceExtension if let thread = TSThread.fetch(uniqueId: threadID, transaction: transaction), let group = thread as? TSGroupThread, group.groupModel.groupType == .closedGroup { // Should always be true because we don't get PNs for open groups senderDisplayName = String(format: NotificationStrings.incomingGroupMessageTitleFormat, senderDisplayName, group.groupModel.groupName ?? MessageStrings.newGroupDefaultTitle) - if let messageBody = tsIncomingMessage.previewText(with: transaction).filterForDisplay, !messageBody.contains("@\(userPublicKey)") && group.isOnlyNotifyMentions { + if let messageBody = tsIncomingMessage.previewText(with: transaction).filterForDisplay, !messageBody.contains("@\(userPublicKey)") && group.isOnlyNotifyingForMentions { // Ignore PNs if the group is set to only notify mentions return self.completeSilenty() } From 12a995bc917c39fcc856e47cc1c2466b9677af86 Mon Sep 17 00:00:00 2001 From: Ryan Zhao Date: Tue, 3 Aug 2021 13:47:11 +1000 Subject: [PATCH 3/5] enable only notify mention for closed groups --- .../Settings/OWSConversationSettingsViewController.m | 2 +- .../Meta/SessionNotificationServiceExtension.entitlements | 2 ++ .../NotificationServiceExtension.swift | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Session/Conversations/Settings/OWSConversationSettingsViewController.m b/Session/Conversations/Settings/OWSConversationSettingsViewController.m index 3d303ca9d..33a3823fa 100644 --- a/Session/Conversations/Settings/OWSConversationSettingsViewController.m +++ b/Session/Conversations/Settings/OWSConversationSettingsViewController.m @@ -515,7 +515,7 @@ CGFloat kIconViewLength = 24; [weakSelf.navigationController pushViewController:vc animated:YES]; }]]; - if (self.isOpenGroup) { + if (self.isGroupThread) { // Notification Settings [section addItem:[OWSTableItem itemWithCustomCellBlock:^{ UITableViewCell *cell = [OWSTableItem newCell]; diff --git a/SessionNotificationServiceExtension/Meta/SessionNotificationServiceExtension.entitlements b/SessionNotificationServiceExtension/Meta/SessionNotificationServiceExtension.entitlements index 758088249..71a223d61 100644 --- a/SessionNotificationServiceExtension/Meta/SessionNotificationServiceExtension.entitlements +++ b/SessionNotificationServiceExtension/Meta/SessionNotificationServiceExtension.entitlements @@ -2,6 +2,8 @@ + com.apple.developer.usernotifications.filtering + aps-environment development com.apple.security.application-groups diff --git a/SessionNotificationServiceExtension/NotificationServiceExtension.swift b/SessionNotificationServiceExtension/NotificationServiceExtension.swift index 2cb60549b..fd51ffd0b 100644 --- a/SessionNotificationServiceExtension/NotificationServiceExtension.swift +++ b/SessionNotificationServiceExtension/NotificationServiceExtension.swift @@ -61,7 +61,7 @@ public final class NotificationServiceExtension : UNNotificationServiceExtension if let thread = TSThread.fetch(uniqueId: threadID, transaction: transaction), let group = thread as? TSGroupThread, group.groupModel.groupType == .closedGroup { // Should always be true because we don't get PNs for open groups senderDisplayName = String(format: NotificationStrings.incomingGroupMessageTitleFormat, senderDisplayName, group.groupModel.groupName ?? MessageStrings.newGroupDefaultTitle) - if let messageBody = tsIncomingMessage.previewText(with: transaction).filterForDisplay, !messageBody.contains("@\(userPublicKey)") && group.isOnlyNotifyingForMentions { + if group.isOnlyNotifyingForMentions && !tsIncomingMessage.isUserMentioned { // Ignore PNs if the group is set to only notify mentions return self.completeSilenty() } From 7c82ede432223ab603c1b766a8ca2281fa98e664 Mon Sep 17 00:00:00 2001 From: Ryan Zhao Date: Tue, 3 Aug 2021 14:25:10 +1000 Subject: [PATCH 4/5] fix a minor mention issue that it won't show the name if there is no white space after a mention --- Session/Utilities/MentionUtilities.swift | 2 +- .../NotificationServiceExtension.swift | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Session/Utilities/MentionUtilities.swift b/Session/Utilities/MentionUtilities.swift index 5c888b09d..0faeb712a 100644 --- a/Session/Utilities/MentionUtilities.swift +++ b/Session/Utilities/MentionUtilities.swift @@ -14,7 +14,7 @@ public final class MentionUtilities : NSObject { MentionsManager.populateUserPublicKeyCacheIfNeeded(for: threadID, in: transaction) } var string = string - let regex = try! NSRegularExpression(pattern: "@[0-9a-fA-F]*", options: []) + let regex = try! NSRegularExpression(pattern: "@[0-9a-fA-F]{66}", options: []) let knownPublicKeys = MentionsManager.userPublicKeyCache[threadID] ?? [] // Should always be populated at this point var mentions: [(range: NSRange, publicKey: String)] = [] var outerMatch = regex.firstMatch(in: string, options: .withoutAnchoringBounds, range: NSRange(location: 0, length: string.utf16.count)) diff --git a/SessionNotificationServiceExtension/NotificationServiceExtension.swift b/SessionNotificationServiceExtension/NotificationServiceExtension.swift index fd51ffd0b..9565a7be4 100644 --- a/SessionNotificationServiceExtension/NotificationServiceExtension.swift +++ b/SessionNotificationServiceExtension/NotificationServiceExtension.swift @@ -201,7 +201,7 @@ private extension String { func replacingMentions(for threadID: String, using transaction: YapDatabaseReadWriteTransaction) -> String { MentionsManager.populateUserPublicKeyCacheIfNeeded(for: threadID, in: transaction) var result = self - let regex = try! NSRegularExpression(pattern: "@[0-9a-fA-F]*", options: []) + let regex = try! NSRegularExpression(pattern: "@[0-9a-fA-F]{66}", options: []) let knownPublicKeys = MentionsManager.userPublicKeyCache[threadID] ?? [] var mentions: [(range: NSRange, publicKey: String)] = [] var m0 = regex.firstMatch(in: result, options: .withoutAnchoringBounds, range: NSRange(location: 0, length: result.utf16.count)) From 36f592be4b9eea1ddcb82114663f21f296d40bcb Mon Sep 17 00:00:00 2001 From: Ryan Zhao Date: Tue, 3 Aug 2021 14:26:59 +1000 Subject: [PATCH 5/5] clean --- Session/Utilities/MentionUtilities.swift | 5 ----- 1 file changed, 5 deletions(-) diff --git a/Session/Utilities/MentionUtilities.swift b/Session/Utilities/MentionUtilities.swift index 0faeb712a..f0f5be6c8 100644 --- a/Session/Utilities/MentionUtilities.swift +++ b/Session/Utilities/MentionUtilities.swift @@ -44,9 +44,4 @@ public final class MentionUtilities : NSObject { } return result } - - public static func isUserMentioned(in string: String) -> Bool { - let userPublicKey = getUserHexEncodedPublicKey() - return string.contains("@\(userPublicKey)") - } }