Skip to content

Commit 3934c37

Browse files
committed
ignore sensitive-only restricted if can change
1 parent 05f6c35 commit 3934c37

File tree

5 files changed

+34
-24
lines changed

5 files changed

+34
-24
lines changed

src/components/chat/chat.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -865,7 +865,6 @@ export default class Chat extends EventListenerBase<{
865865
const [
866866
noForwards,
867867
restrictions,
868-
isRestricted,
869868
isLikeGroup,
870869
isRealGroup,
871870
_,
@@ -881,7 +880,6 @@ export default class Chat extends EventListenerBase<{
881880
] = await m(Promise.all([
882881
this.managers.appPeersManager.noForwards(peerId),
883882
this.managers.appPeersManager.getPeerRestrictions(peerId),
884-
this.managers.appPeersManager.isPeerRestricted(peerId),
885883
this._isLikeGroup(peerId),
886884
this.managers.appPeersManager.isAnyGroup(peerId),
887885
this.setAutoDownloadMedia(),
@@ -915,7 +913,7 @@ export default class Chat extends EventListenerBase<{
915913
this.isPremiumRequired = isPremiumRequired;
916914
this.starsAmount = starsAmount;
917915

918-
this.isRestricted = isRestricted;
916+
this.isRestricted = await this.managers.appPeersManager.isPeerRestricted(peerId); // need sensitiveContentSettings
919917
this.sensitiveContentSettings = sensitiveContentSettings;
920918
ignoreRestrictionReasons(this.sensitiveContentSettings.ignoreRestrictionReasons);
921919
this.isSensitive = isSensitive(restrictions);

src/components/chat/input.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4103,7 +4103,7 @@ export default class ChatInput {
41034103
fastRaf(() => {
41044104
focus && placeCaretAtEnd(this.messageInput);
41054105
this.processingDraftMessage = draftMessage;
4106-
this.setEffect(draftMessage.effect);
4106+
if(draftMessage) this.setEffect(draftMessage.effect);
41074107
this.onMessageInput();
41084108
this.processingDraftMessage = undefined;
41094109
this.messageInput.scrollTop = this.messageInput.scrollHeight;

src/lib/appManagers/appPeersManager.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import isPeerRestricted from './utils/peers/isPeerRestricted';
2323
import getPeerPhoto from './utils/peers/getPeerPhoto';
2424
import getServerMessageId from './utils/messageId/getServerMessageId';
2525
import MTProtoMessagePort from '../mtproto/mtprotoMessagePort';
26+
import {SensitiveContentSettings} from './appPrivacyManager';
2627

2728
export type PeerType = 'channel' | 'chat' | 'megagroup' | 'group' | 'saved' | 'savedDialog';
2829
export class AppPeersManager extends AppManager {
@@ -165,7 +166,9 @@ export class AppPeersManager extends AppManager {
165166
}
166167

167168
public isPeerRestricted(peerId: PeerId) {
168-
return isPeerRestricted(this.getPeer(peerId));
169+
const settings = this.appPrivacyManager.getSensitiveContentSettings();
170+
const canChangeSensitive = (settings as SensitiveContentSettings).sensitiveCanChange ?? false;
171+
return isPeerRestricted(this.getPeer(peerId), canChangeSensitive);
169172
}
170173

171174
public isPeerPublic(peerId: PeerId) {

src/lib/appManagers/appPrivacyManager.ts

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -102,26 +102,31 @@ export class AppPrivacyManager extends AppManager {
102102
return this.apiManager.invokeApi('account.setGlobalPrivacySettings', {settings});
103103
}
104104

105-
public async getSensitiveContentSettings() {
105+
private _getSensitiveContentSettingsPromise: Promise<SensitiveContentSettings> | null = null;
106+
public getSensitiveContentSettings() {
106107
if(this.sensitiveContentSettings) return this.sensitiveContentSettings;
107-
const [contentSettings, state, appConfig] = await Promise.all([
108+
if(this._getSensitiveContentSettingsPromise) return this._getSensitiveContentSettingsPromise;
109+
110+
return this._getSensitiveContentSettingsPromise = Promise.all([
108111
this.apiManager.invokeApi('account.getContentSettings'),
109112
this.appStateManager.getState(),
110113
this.apiManager.getAppConfig()
111-
]);
112-
113-
this.sensitiveContentSettings = {
114-
sensitiveEnabled: contentSettings.pFlags.sensitive_enabled ?? false,
115-
sensitiveCanChange: contentSettings.pFlags.sensitive_can_change ?? false,
116-
// ignoreRestrictionReasons: [],
117-
// needAgeVerification: true,
118-
// ageVerified: false
119-
ignoreRestrictionReasons: appConfig.ignore_restriction_reasons ?? [],
120-
needAgeVerification: appConfig.need_age_video_verification ?? false,
121-
ageVerified: !!state.ageVerification
122-
};
123-
124-
return this.sensitiveContentSettings;
114+
]).then(([contentSettings, state, appConfig]) => {
115+
this.sensitiveContentSettings = {
116+
sensitiveEnabled: contentSettings.pFlags.sensitive_enabled ?? false,
117+
sensitiveCanChange: contentSettings.pFlags.sensitive_can_change ?? false,
118+
// ignoreRestrictionReasons: [],
119+
// needAgeVerification: true,
120+
// ageVerified: false
121+
ignoreRestrictionReasons: appConfig.ignore_restriction_reasons ?? [],
122+
needAgeVerification: appConfig.need_age_video_verification ?? false,
123+
ageVerified: !!state.ageVerification
124+
};
125+
126+
return this.sensitiveContentSettings;
127+
}).finally(() => {
128+
this._getSensitiveContentSettingsPromise = null;
129+
});;
125130
}
126131

127132
public async setContentSettings(settings: AccountSetContentSettings) {
Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
import {isRestricted} from '../../../../helpers/restrictions';
22
import {Chat, User} from '../../../../layer';
33

4-
export default function isPeerRestricted(peer: Chat | User) {
5-
const restrictionReasons = (peer as Chat.channel)?.restriction_reason;
6-
return !!(restrictionReasons && (peer as Chat.channel).pFlags.restricted && isRestricted(restrictionReasons));
4+
export default function isPeerRestricted(peer: Chat | User, canChangeSensitive = true) {
5+
let restrictionReasons = (peer as Chat.channel | User.user)?.restriction_reason;
6+
if(!(restrictionReasons && (peer as Chat.channel | User.user).pFlags.restricted)) return false;
7+
if(canChangeSensitive) {
8+
restrictionReasons = restrictionReasons.filter((reason) => reason.reason !== 'sensitive');
9+
}
10+
return isRestricted(restrictionReasons);
711
}

0 commit comments

Comments
 (0)