AIConfig model
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
|
|
||||||
import 'package:shared_preferences/shared_preferences.dart';
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
|
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/ai_scribe_config.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/default_preferences_config.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/default_preferences_config.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/empty_preferences_config.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/empty_preferences_config.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/preferences_config.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/preferences_config.dart';
|
||||||
@@ -17,6 +18,8 @@ class PreferencesSettingManager {
|
|||||||
'${_preferencesSettingKey}_SPAM_REPORT';
|
'${_preferencesSettingKey}_SPAM_REPORT';
|
||||||
static const String _preferencesSettingTextFormattingMenuKey =
|
static const String _preferencesSettingTextFormattingMenuKey =
|
||||||
'${_preferencesSettingKey}_TEXT_FORMATTING_MENU';
|
'${_preferencesSettingKey}_TEXT_FORMATTING_MENU';
|
||||||
|
static const String _preferencesSettingAIScribeKey =
|
||||||
|
'${_preferencesSettingKey}_AI_SCRIBE';
|
||||||
|
|
||||||
const PreferencesSettingManager(this._sharedPreferences);
|
const PreferencesSettingManager(this._sharedPreferences);
|
||||||
|
|
||||||
@@ -41,6 +44,8 @@ class PreferencesSettingManager {
|
|||||||
return SpamReportConfig.fromJson(jsonDecoded);
|
return SpamReportConfig.fromJson(jsonDecoded);
|
||||||
case _preferencesSettingTextFormattingMenuKey:
|
case _preferencesSettingTextFormattingMenuKey:
|
||||||
return TextFormattingMenuConfig.fromJson(jsonDecoded);
|
return TextFormattingMenuConfig.fromJson(jsonDecoded);
|
||||||
|
case _preferencesSettingAIScribeKey:
|
||||||
|
return AIScribeConfig.fromJson(jsonDecoded);
|
||||||
default:
|
default:
|
||||||
return DefaultPreferencesConfig.fromJson(jsonDecoded);
|
return DefaultPreferencesConfig.fromJson(jsonDecoded);
|
||||||
}
|
}
|
||||||
@@ -71,6 +76,11 @@ class PreferencesSettingManager {
|
|||||||
_preferencesSettingTextFormattingMenuKey,
|
_preferencesSettingTextFormattingMenuKey,
|
||||||
jsonEncode(config.toJson()),
|
jsonEncode(config.toJson()),
|
||||||
);
|
);
|
||||||
|
} else if (config is AIScribeConfig) {
|
||||||
|
await _sharedPreferences.setString(
|
||||||
|
_preferencesSettingAIScribeKey,
|
||||||
|
jsonEncode(config.toJson()),
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
await _sharedPreferences.setString(
|
await _sharedPreferences.setString(
|
||||||
_preferencesSettingKey,
|
_preferencesSettingKey,
|
||||||
@@ -138,4 +148,24 @@ class PreferencesSettingManager {
|
|||||||
final updatedConfig = currentConfig.copyWith(isDisplayed: isDisplayed);
|
final updatedConfig = currentConfig.copyWith(isDisplayed: isDisplayed);
|
||||||
await savePreferences(updatedConfig);
|
await savePreferences(updatedConfig);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<AIScribeConfig> getAIScribeConfig() async {
|
||||||
|
await _sharedPreferences.reload();
|
||||||
|
|
||||||
|
final jsonString = _sharedPreferences.getString(
|
||||||
|
_preferencesSettingAIScribeKey,
|
||||||
|
);
|
||||||
|
|
||||||
|
return jsonString == null
|
||||||
|
? AIScribeConfig.initial()
|
||||||
|
: AIScribeConfig.fromJson(jsonDecode(jsonString));
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> updateAIScribe(bool isEnabled) async {
|
||||||
|
final currentConfig = await getAIScribeConfig();
|
||||||
|
final updatedConfig = currentConfig.copyWith(isEnabled: isEnabled);
|
||||||
|
await savePreferences(updatedConfig);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
import 'package:json_annotation/json_annotation.dart';
|
||||||
|
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/preferences_config.dart';
|
||||||
|
|
||||||
|
part 'ai_scribe_config.g.dart';
|
||||||
|
|
||||||
|
@JsonSerializable()
|
||||||
|
class AIScribeConfig extends PreferencesConfig {
|
||||||
|
final bool isEnabled;
|
||||||
|
|
||||||
|
AIScribeConfig({
|
||||||
|
this.isEnabled = true,
|
||||||
|
});
|
||||||
|
|
||||||
|
factory AIScribeConfig.initial() => AIScribeConfig();
|
||||||
|
|
||||||
|
factory AIScribeConfig.fromJson(Map<String, dynamic> json) =>
|
||||||
|
_$AIScribeConfigFromJson(json);
|
||||||
|
|
||||||
|
@override
|
||||||
|
Map<String, dynamic> toJson() => _$AIScribeConfigToJson(this);
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object> get props => [isEnabled];
|
||||||
|
}
|
||||||
|
|
||||||
|
extension AIScribeConfigExtension on AIScribeConfig {
|
||||||
|
AIScribeConfig copyWith({
|
||||||
|
bool? isEnabled,
|
||||||
|
}) {
|
||||||
|
return AIScribeConfig(
|
||||||
|
isEnabled: isEnabled ?? this.isEnabled,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
import 'package:collection/collection.dart';
|
import 'package:collection/collection.dart';
|
||||||
import 'package:equatable/equatable.dart';
|
import 'package:equatable/equatable.dart';
|
||||||
|
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/ai_scribe_config.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/preferences_config.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/preferences_config.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/spam_report_config.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/spam_report_config.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/text_formatting_menu_config.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/text_formatting_menu_config.dart';
|
||||||
@@ -15,6 +16,7 @@ class PreferencesSetting with EquatableMixin {
|
|||||||
ThreadDetailConfig.initial(),
|
ThreadDetailConfig.initial(),
|
||||||
SpamReportConfig.initial(),
|
SpamReportConfig.initial(),
|
||||||
TextFormattingMenuConfig.initial(),
|
TextFormattingMenuConfig.initial(),
|
||||||
|
AIScribeConfig.initial(),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -48,6 +50,16 @@ class PreferencesSetting with EquatableMixin {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AIScribeConfig get aiScribeConfig {
|
||||||
|
final aiConfig =
|
||||||
|
configs.firstWhereOrNull((config) => config is AIScribeConfig);
|
||||||
|
if (aiConfig != null) {
|
||||||
|
return aiConfig as AIScribeConfig;
|
||||||
|
} else {
|
||||||
|
return AIScribeConfig.initial();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<Object?> get props => [configs];
|
List<Object?> get props => [configs];
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user