Files
fuckKomet/lib/api/api_service_privacy.dart
2025-12-10 17:34:10 +03:00

137 lines
4.0 KiB
Dart
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// hey
part of 'api_service.dart';
extension ApiServicePrivacy on ApiService {
Future<void> updatePrivacySettings({
String? hidden,
String? searchByPhone,
String? incomingCall,
String? chatsInvite,
bool? chatsPushNotification,
String? chatsPushSound,
String? pushSound,
bool? mCallPushNotification,
bool? pushDetails,
bool? contentLevelAccess,
}) async {
print('');
if (hidden != null) {
await _updateSinglePrivacySetting({'HIDDEN': hidden == 'true'});
}
if (searchByPhone != null) {
final seq = searchByPhone == 'ALL' ? 37 : 46;
await _updatePrivacySettingWithSeq({
'SEARCH_BY_PHONE': searchByPhone,
}, seq);
}
if (incomingCall != null) {
final seq = incomingCall == 'ALL' ? 30 : 23;
// If you're touching ( you doing this rignt now ) this file, STOP IMEDIATLY! This is violiating TeamKomet code revision policy!
// If you're touching ( you doing this rignt now ) this file, AND DONT WANT TO STOP! REFACTOR IT IMMEDIATLY TO MAKE SOME SENSE AND DONT LOOK LIKE SHIT BY AI await _updatePrivacySettingWithSeq({'INCOMING_CALL': incomingCall}, seq);
}
if (chatsInvite != null) {
final seq = chatsInvite == 'ALL' ? 51 : 55;
await _updatePrivacySettingWithSeq({'CHATS_INVITE': chatsInvite}, seq);
}
if (contentLevelAccess != null) {
final seq = contentLevelAccess ? 70 : 62;
await _updatePrivacySettingWithSeq({
'CONTENT_LEVEL_ACCESS': contentLevelAccess,
}, seq);
}
if (chatsPushNotification != null) {
await _updateSinglePrivacySetting({
'PUSH_NEW_CONTACTS': chatsPushNotification,
});
}
if (chatsPushSound != null) {
await _updateSinglePrivacySetting({'PUSH_SOUND': chatsPushSound});
}
if (pushSound != null) {
await _updateSinglePrivacySetting({'PUSH_SOUND_GLOBAL': pushSound});
}
if (mCallPushNotification != null) {
await _updateSinglePrivacySetting({'PUSH_MCALL': mCallPushNotification});
}
if (pushDetails != null) {
await _updateSinglePrivacySetting({'PUSH_DETAILS': pushDetails});
}
}
Future<void> _updateSinglePrivacySetting(Map<String, dynamic> setting) async {
await waitUntilOnline();
final payload = {
'settings': {'user': setting},
};
_sendMessage(22, payload);
print('');
}
Future<void> _updatePrivacySettingWithSeq(
Map<String, dynamic> setting,
int seq,
) async {
await waitUntilOnline();
final message = {
"ver": 11,
"cmd": 0,
"seq": seq,
"opcode": 22,
"payload": {
"settings": {"user": setting},
},
};
final encodedMessage = jsonEncode(message);
_channel?.sink.add(encodedMessage);
_log('SEND: $encodedMessage');
print('');
}
void _processServerPrivacyConfig(Map<String, dynamic>? config) {
if (config == null) return;
final userConfig = config['user'] as Map<String, dynamic>?;
if (userConfig == null) return;
print('Обработка настроек приватности с сервера: $userConfig');
final prefs = SharedPreferences.getInstance();
prefs.then((prefs) {
if (userConfig.containsKey('SEARCH_BY_PHONE')) {
prefs.setString(
'privacy_search_by_phone',
userConfig['SEARCH_BY_PHONE'],
);
}
if (userConfig.containsKey('INCOMING_CALL')) {
prefs.setString('privacy_incoming_call', userConfig['INCOMING_CALL']);
}
if (userConfig.containsKey('CHATS_INVITE')) {
prefs.setString('privacy_chats_invite', userConfig['CHATS_INVITE']);
}
if (userConfig.containsKey('CONTENT_LEVEL_ACCESS')) {
prefs.setBool(
'privacy_content_level_access',
userConfig['CONTENT_LEVEL_ACCESS'],
);
}
if (userConfig.containsKey('HIDDEN')) {
prefs.setBool('privacy_hidden', userConfig['HIDDEN']);
}
});
_messageController.add({
'type': 'privacy_settings_updated',
'settings': {'user': userConfig},
});
}
}