полноценное управление папками, режимы чтения для каждого чата

This commit is contained in:
needle10
2025-11-17 23:31:25 +03:00
parent 95fdbe4079
commit e5b97208ad
4 changed files with 982 additions and 14 deletions

View File

@@ -0,0 +1,102 @@
import 'dart:convert';
import 'package:shared_preferences/shared_preferences.dart';
class ChatReadSettings {
final bool readOnAction; // Чтение при отправке сообщения
final bool readOnEnter; // Чтение при входе в чат
final bool disabled; // Отключено чтение вообще
ChatReadSettings({
this.readOnAction = true,
this.readOnEnter = true,
this.disabled = false,
});
Map<String, dynamic> toJson() {
return {
'readOnAction': readOnAction,
'readOnEnter': readOnEnter,
'disabled': disabled,
};
}
factory ChatReadSettings.fromJson(Map<String, dynamic> json) {
return ChatReadSettings(
readOnAction: json['readOnAction'] ?? true,
readOnEnter: json['readOnEnter'] ?? true,
disabled: json['disabled'] ?? false,
);
}
ChatReadSettings copyWith({
bool? readOnAction,
bool? readOnEnter,
bool? disabled,
}) {
return ChatReadSettings(
readOnAction: readOnAction ?? this.readOnAction,
readOnEnter: readOnEnter ?? this.readOnEnter,
disabled: disabled ?? this.disabled,
);
}
}
class ChatReadSettingsService {
static final ChatReadSettingsService instance = ChatReadSettingsService._();
ChatReadSettingsService._();
static const String _prefix = 'chat_read_settings_';
Future<bool> hasCustomSettings(int chatId) async {
try {
final prefs = await SharedPreferences.getInstance();
final key = '$_prefix$chatId';
return prefs.containsKey(key);
} catch (e) {
return false;
}
}
/// Получить настройки чтения для чата
/// Если настроек нет, возвращает null (значит использовать глобальные)
Future<ChatReadSettings?> getSettings(int chatId) async {
try {
final prefs = await SharedPreferences.getInstance();
final key = '$_prefix$chatId';
final jsonString = prefs.getString(key);
if (jsonString == null) {
return null;
}
final json = jsonDecode(jsonString) as Map<String, dynamic>;
return ChatReadSettings.fromJson(json);
} catch (e) {
print('Ошибка загрузки настроек чтения для чата $chatId: $e');
return null;
}
}
/// Сохранить настройки чтения для чата
Future<void> saveSettings(int chatId, ChatReadSettings settings) async {
try {
final prefs = await SharedPreferences.getInstance();
final key = '$_prefix$chatId';
final jsonString = jsonEncode(settings.toJson());
await prefs.setString(key, jsonString);
} catch (e) {
print('Ошибка сохранения настроек чтения для чата $chatId: $e');
}
}
/// Удалить настройки для чата (вернуть к значениям по умолчанию)
Future<void> resetSettings(int chatId) async {
try {
final prefs = await SharedPreferences.getInstance();
final key = '$_prefix$chatId';
await prefs.remove(key);
} catch (e) {
print('Ошибка сброса настроек чтения для чата $chatId: $e');
}
}
}