@@ -72,7 +72,7 @@ import wrapDocument from './wrappers/document';
72
72
import wrapPhoto from './wrappers/photo' ;
73
73
import wrapVideo from './wrappers/video' ;
74
74
import noop from '../helpers/noop' ;
75
- import wrapMediaSpoiler , { onMediaSpoilerClick } from './wrappers/mediaSpoiler' ;
75
+ import wrapMediaSpoiler , { hasSensitiveSpoiler , onMediaSpoilerClick } from './wrappers/mediaSpoiler' ;
76
76
import filterAsync from '../helpers/array/filterAsync' ;
77
77
import ChatContextMenu , { getSponsoredMessageButtons } from './chat/contextMenu' ;
78
78
import PopupElement from './popups' ;
@@ -101,6 +101,10 @@ import PopupReportAd from './popups/reportAd';
101
101
import createContextMenu from '../helpers/dom/createContextMenu' ;
102
102
import ButtonMenuToggle from './buttonMenuToggle' ;
103
103
import EmptySearchPlaceholder from './emptySearchPlaceholder' ;
104
+ import { SensitiveContentSettings } from '../lib/appManagers/appPrivacyManager' ;
105
+ import { ignoreRestrictionReasons , isSensitive } from '../helpers/restrictions' ;
106
+ import { isMessageSensitive } from '../lib/appManagers/utils/messages/isMessageRestricted' ;
107
+ import { MediaSearchContext } from './appMediaPlaybackController' ;
104
108
105
109
// const testScroll = false;
106
110
@@ -245,13 +249,13 @@ class SearchContextMenu {
245
249
} , {
246
250
icon : 'download' ,
247
251
text : 'MediaViewer.Context.Download' ,
248
- onClick : ( ) => ChatContextMenu . onDownloadClick ( this . message , this . noForwards ) ,
249
- verify : ( ) => ! this . searchSuper . selection . isSelecting && ChatContextMenu . canDownload ( this . message , undefined , this . noForwards )
252
+ onClick : ( ) => ChatContextMenu . onDownloadClick ( this . message , this . noForwards , this . attachTo ) ,
253
+ verify : ( ) => ! this . searchSuper . selection . isSelecting && ChatContextMenu . canDownload ( this . message , undefined , this . noForwards , this . attachTo )
250
254
} , {
251
255
icon : 'download' ,
252
256
text : 'Message.Context.Selection.Download' ,
253
- onClick : ( ) => ChatContextMenu . onDownloadClick ( this . selectedMessages , this . noForwards ) ,
254
- verify : ( ) => this . searchSuper . selection . isSelecting && ChatContextMenu . canDownload ( this . selectedMessages , undefined , this . noForwards ) ,
257
+ onClick : ( ) => ChatContextMenu . onDownloadClick ( this . selectedMessages , this . noForwards , this . attachTo ) ,
258
+ verify : ( ) => this . searchSuper . selection . isSelecting && ChatContextMenu . canDownload ( this . selectedMessages , undefined , this . noForwards , this . attachTo ) ,
255
259
withSelection : true
256
260
} , {
257
261
icon : 'message' ,
@@ -408,6 +412,9 @@ export default class AppSearchSuper {
408
412
private log = logger ( 'SEARCH-SUPER' ) ;
409
413
public selectTab : ReturnType < typeof horizontalMenu > ;
410
414
415
+ private sensitiveContentSettings : SensitiveContentSettings ;
416
+ private isChatSensitive : boolean ;
417
+
411
418
private monthContainers : Partial < {
412
419
[ type in SearchSuperType ] : {
413
420
[ timestamp : number ] : {
@@ -710,29 +717,35 @@ export default class AppSearchSuper {
710
717
if ( mediaSpoiler ) {
711
718
onMediaSpoilerClick ( {
712
719
event : e ,
713
- mediaSpoiler
720
+ mediaSpoiler,
721
+ sensitiveSettings : this . sensitiveContentSettings
714
722
} )
715
723
return ;
716
724
}
717
725
718
726
const peerId = target . dataset . peerId . toPeerId ( ) ;
727
+ const message = await this . managers . appMessagesManager . getMessageByPeer ( peerId , mid ) ;
728
+ const skipSensitive = ! this . isChatSensitive && ! isMessageSensitive ( message ) ;
719
729
720
730
const targets = ( Array . from ( this . tabs [ inputFilter ] . querySelectorAll ( '.' + targetClassName ) ) as HTMLElement [ ] ) . map ( ( el ) => {
721
731
const containerEl = findUpClassName ( el , className ) ;
732
+ if ( skipSensitive && hasSensitiveSpoiler ( containerEl ) ) {
733
+ return ;
734
+ }
735
+
722
736
return {
723
737
element : el ,
724
738
mid : + containerEl . dataset . mid ,
725
739
peerId : containerEl . dataset . peerId . toPeerId ( )
726
740
} ;
727
- } ) ;
741
+ } ) . filter ( Boolean ) ;
728
742
729
743
// const ids = Object.keys(this.mediaDivsByIds).map((k) => +k).sort((a, b) => a - b);
730
744
const idx = targets . findIndex ( ( item ) => item . mid === mid && item . peerId === peerId ) ;
731
745
732
746
const mediaTab = this . mediaTabs . find ( ( mediaTab ) => mediaTab . inputFilter === inputFilter ) ;
733
- const message = await this . managers . appMessagesManager . getMessageByPeer ( peerId , mid ) ;
734
747
new AppMediaViewer ( )
735
- . setSearchContext ( this . copySearchContext ( inputFilter , this . nextRates [ mediaTab . type ] ) )
748
+ . setSearchContext ( this . copySearchContext ( inputFilter , this . nextRates [ mediaTab . type ] , skipSensitive ) )
736
749
. openMedia ( {
737
750
message,
738
751
target : targets [ idx ] . element ,
@@ -773,6 +786,10 @@ export default class AppSearchSuper {
773
786
} , ( ) => {
774
787
this . lazyLoadQueue . unlockAndRefresh ( ) ; // ! maybe not so efficient
775
788
} , this . listenerSetter ) ;
789
+
790
+ this . listenerSetter . add ( rootScope ) ( 'sensitive_content_settings' , ( sensitiveContentSettings ) => {
791
+ this . sensitiveContentSettings = sensitiveContentSettings ;
792
+ } ) ;
776
793
}
777
794
778
795
private scrollToStart ( ) {
@@ -887,11 +904,14 @@ export default class AppSearchSuper {
887
904
} ) ;
888
905
}
889
906
890
- if ( ( message . media as MessageMedia . messageMediaPhoto ) . pFlags . spoiler ) {
907
+ const sensitive = this . isChatSensitive || isMessageSensitive ( message ) ;
908
+
909
+ if ( ( message . media as MessageMedia . messageMediaPhoto ) . pFlags . spoiler || sensitive ) {
891
910
const mediaSpoiler = await wrapMediaSpoiler ( {
892
911
animationGroup : 'chat' ,
893
912
media,
894
913
middleware,
914
+ sensitive,
895
915
width : 140 ,
896
916
height : 140 ,
897
917
multiply : 0.3
@@ -922,7 +942,7 @@ export default class AppSearchSuper {
922
942
fontWeight : 400 ,
923
943
voiceAsMusic : true ,
924
944
showSender,
925
- searchContext : this . copySearchContext ( inputFilter , this . nextRates . files ) ,
945
+ searchContext : this . copySearchContext ( inputFilter , this . nextRates . files , false ) ,
926
946
lazyLoadQueue : this . lazyLoadQueue ,
927
947
autoDownloadSize : 0 ,
928
948
getSize : ( ) => 320
@@ -2264,7 +2284,9 @@ export default class AppSearchSuper {
2264
2284
canViewGroups ,
2265
2285
canViewStories ,
2266
2286
canViewSimilar ,
2267
- giftsCount
2287
+ giftsCount ,
2288
+ sensitiveContentSettings ,
2289
+ chatRestrictions
2268
2290
] = await Promise . all ( [
2269
2291
this . managers . appMessagesManager . getSearchCounters ( peerId , filters , undefined , threadId ) ,
2270
2292
this . canViewSavedDialogs ( ) ,
@@ -2273,13 +2295,19 @@ export default class AppSearchSuper {
2273
2295
this . canViewGroups ( ) ,
2274
2296
this . canViewStories ( ) ,
2275
2297
this . canViewSimilar ( ) ,
2276
- this . getGiftsCount ( )
2298
+ this . getGiftsCount ( ) ,
2299
+ this . managers . appPrivacyManager . getSensitiveContentSettings ( ) ,
2300
+ this . managers . appPeersManager . getPeerRestrictions ( peerId )
2277
2301
] ) ;
2278
2302
2279
2303
if ( ! middleware ( ) ) {
2280
2304
return ;
2281
2305
}
2282
2306
2307
+ this . sensitiveContentSettings = sensitiveContentSettings ;
2308
+ ignoreRestrictionReasons ( this . sensitiveContentSettings . ignoreRestrictionReasons ) ;
2309
+ this . isChatSensitive = isSensitive ( chatRestrictions ) ;
2310
+
2283
2311
if ( this . loadMutex ) {
2284
2312
await this . loadMutex ;
2285
2313
@@ -2660,10 +2688,11 @@ export default class AppSearchSuper {
2660
2688
} */
2661
2689
}
2662
2690
2663
- private copySearchContext ( newInputFilter : MyInputMessagesFilter , nextRate : number ) {
2664
- const context = copy ( this . searchContext ) ;
2691
+ private copySearchContext ( newInputFilter : MyInputMessagesFilter , nextRate : number , skipSensitive : boolean ) {
2692
+ const context = copy ( this . searchContext ) as MediaSearchContext ;
2665
2693
context . inputFilter = { _ : newInputFilter } ;
2666
2694
context . nextRate = nextRate ;
2695
+ context . skipSensitive = skipSensitive ;
2667
2696
return context ;
2668
2697
}
2669
2698
0 commit comments