TF-3977 Separate settings keys for easier in conflict

This commit is contained in:
dab246
2025-09-09 11:12:57 +07:00
committed by Dat H. Pham
parent 7fdfb97fc5
commit 5a88f3c36f
27 changed files with 290 additions and 206 deletions
@@ -1,50 +0,0 @@
import 'package:equatable/equatable.dart';
import 'package:json_annotation/json_annotation.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/model/preferences/preferences_setting.dart';
part 'preferences_root.g.dart';
@JsonSerializable(explicitToJson: true)
class PreferencesRoot with EquatableMixin {
final PreferencesSetting setting;
PreferencesRoot({required this.setting});
factory PreferencesRoot.initial() {
return PreferencesRoot(
setting: PreferencesSetting.initial(),
);
}
factory PreferencesRoot.fromJson(Map<String, dynamic> json) =>
_$PreferencesRootFromJson(json);
Map<String, dynamic> toJson() => _$PreferencesRootToJson(this);
@override
List<Object?> get props => [setting];
}
extension PreferencesRootExtension on PreferencesRoot {
PreferencesRoot copyWith({PreferencesSetting? setting}) {
return PreferencesRoot(
setting: setting ?? this.setting,
);
}
PreferencesRoot updateThreadDetail(bool enabled) {
return copyWith(setting: setting.updateThreadDetail(enabled));
}
PreferencesRoot updateSpamReport({
bool? isEnabled,
int? lastTimeDismissedMilliseconds,
}) {
return copyWith(
setting: setting.updateSpamReport(
isEnabled: isEnabled,
lastTimeDismissedMilliseconds: lastTimeDismissedMilliseconds,
),
);
}
}
@@ -1,61 +0,0 @@
import 'package:equatable/equatable.dart';
import 'package:json_annotation/json_annotation.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/model/preferences/spam_report_config.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/model/preferences/thread_detail_config.dart';
part 'preferences_setting.g.dart';
@JsonSerializable(explicitToJson: true)
class PreferencesSetting with EquatableMixin {
final ThreadDetailConfig threadDetail;
final SpamReportConfig spamReport;
PreferencesSetting({
required this.threadDetail,
required this.spamReport,
});
factory PreferencesSetting.initial() {
return PreferencesSetting(
threadDetail: ThreadDetailConfig.initial(),
spamReport: SpamReportConfig.initial(),
);
}
factory PreferencesSetting.fromJson(Map<String, dynamic> json) =>
_$PreferencesSettingFromJson(json);
Map<String, dynamic> toJson() => _$PreferencesSettingToJson(this);
@override
List<Object?> get props => [threadDetail, spamReport];
}
extension PreferencesSettingExtension on PreferencesSetting {
PreferencesSetting copyWith({
ThreadDetailConfig? threadDetail,
SpamReportConfig? spamReport,
}) {
return PreferencesSetting(
threadDetail: threadDetail ?? this.threadDetail,
spamReport: spamReport ?? this.spamReport,
);
}
PreferencesSetting updateThreadDetail(bool enabled) {
return copyWith(threadDetail: threadDetail.copyWith(isEnabled: enabled));
}
PreferencesSetting updateSpamReport({
bool? isEnabled,
int? lastTimeDismissedMilliseconds,
}) {
return copyWith(
spamReport: spamReport.copyWith(
isEnabled: isEnabled ?? spamReport.isEnabled,
lastTimeDismissedMilliseconds: lastTimeDismissedMilliseconds ??
spamReport.lastTimeDismissedMilliseconds,
),
);
}
}
@@ -1,47 +0,0 @@
import 'package:equatable/equatable.dart';
import 'package:json_annotation/json_annotation.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/spam_report_state.dart';
part 'spam_report_config.g.dart';
@JsonSerializable()
class SpamReportConfig with EquatableMixin {
final bool isEnabled;
final int lastTimeDismissedMilliseconds;
SpamReportConfig({
this.isEnabled = true,
this.lastTimeDismissedMilliseconds = 0,
});
factory SpamReportConfig.initial() {
return SpamReportConfig(
isEnabled: true,
lastTimeDismissedMilliseconds: 0,
);
}
factory SpamReportConfig.fromJson(Map<String, dynamic> json) =>
_$SpamReportConfigFromJson(json);
Map<String, dynamic> toJson() => _$SpamReportConfigToJson(this);
@override
List<Object> get props => [isEnabled, lastTimeDismissedMilliseconds];
}
extension SpamReportConfigExtension on SpamReportConfig {
SpamReportConfig copyWith({
bool? isEnabled,
int? lastTimeDismissedMilliseconds,
}) {
return SpamReportConfig(
isEnabled: isEnabled ?? this.isEnabled,
lastTimeDismissedMilliseconds:
lastTimeDismissedMilliseconds ?? this.lastTimeDismissedMilliseconds,
);
}
SpamReportState get spamReportState =>
isEnabled ? SpamReportState.enabled : SpamReportState.disabled;
}
@@ -1,33 +0,0 @@
import 'package:equatable/equatable.dart';
import 'package:json_annotation/json_annotation.dart';
part 'thread_detail_config.g.dart';
@JsonSerializable()
class ThreadDetailConfig with EquatableMixin {
final bool isEnabled;
ThreadDetailConfig({this.isEnabled = false});
factory ThreadDetailConfig.initial() {
return ThreadDetailConfig(
isEnabled: false,
);
}
factory ThreadDetailConfig.fromJson(Map<String, dynamic> json) =>
_$ThreadDetailConfigFromJson(json);
Map<String, dynamic> toJson() => _$ThreadDetailConfigToJson(this);
@override
List<Object> get props => [isEnabled];
}
extension ThreadDetailConfigExtension on ThreadDetailConfig {
ThreadDetailConfig copyWith({bool? isEnabled}) {
return ThreadDetailConfig(
isEnabled: isEnabled ?? this.isEnabled,
);
}
}
@@ -1,7 +1,7 @@
import 'package:server_settings/server_settings/tmail_server_settings.dart';
import 'package:server_settings/server_settings/tmail_server_settings_extension.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/model/preferences/preferences_setting.dart';
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/preferences_setting.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
enum PreferencesOptionType {
@@ -63,9 +63,9 @@ enum PreferencesOptionType {
case PreferencesOptionType.senderPriority:
return settingOption?.isDisplaySenderPriority ?? false;
case PreferencesOptionType.thread:
return preferencesSetting.threadDetail.isEnabled;
return preferencesSetting.threadConfig.isEnabled;
case PreferencesOptionType.spamReport:
return preferencesSetting.spamReport.isEnabled;
return preferencesSetting.spamReportConfig.isEnabled;
}
}
}