loris/lib/business_logic/settings.dart

143 lines
4.4 KiB
Dart
Raw Normal View History

2022-07-03 13:47:24 +00:00
import 'package:flutter/painting.dart';
2022-06-30 15:34:09 +00:00
import 'package:shared_preferences/shared_preferences.dart';
2022-07-04 20:39:25 +00:00
import '../business_logic/auth/oauth.dart' as oauth;
2022-06-30 15:34:09 +00:00
2022-08-13 16:14:12 +00:00
class AccountSettings {
final String identity;
2022-08-12 17:00:09 +00:00
late String instanceUrl;
static const String instanceUrlKey = "instance-url";
late String authCode;
static const String authCodeKey = "authcode";
late String clientSecret;
static const clientSecretKey = "client-secret";
late String clientId;
static const clientIdKey = "client-id";
late String token;
static const tokenKey = "access-token";
2022-08-13 16:14:12 +00:00
late SharedPreferences prefs;
AccountSettings._create(this.identity);
static Future<AccountSettings> create(String identity) async {
AccountSettings settings = AccountSettings._create(identity);
settings.prefs = await SharedPreferences.getInstance();
settings.clientSecret =
settings.prefs.getString("${settings.identity}.$clientSecretKey") ?? "";
2022-08-13 16:14:12 +00:00
settings.clientId =
settings.prefs.getString("${settings.identity}.$clientIdKey") ?? "";
2022-08-13 16:14:12 +00:00
settings.token =
settings.prefs.getString("${settings.identity}.$tokenKey") ?? "";
2022-08-13 16:14:12 +00:00
settings.instanceUrl =
settings.prefs.getString("${settings.identity}.$instanceUrlKey") ??
2022-08-13 16:14:12 +00:00
"example.com";
settings.authCode =
settings.prefs.getString("${settings.identity}.$authCodeKey") ?? "";
2022-08-13 16:14:12 +00:00
return settings;
}
Future<void> delete() async {
2022-08-14 11:32:26 +00:00
await prefs.remove("$identity.$instanceUrlKey");
await prefs.remove("$identity.$authCodeKey");
await prefs.remove("$identity.$clientSecretKey");
await prefs.remove("$identity.$clientIdKey");
await prefs.remove("$identity.$tokenKey");
}
2022-08-13 16:14:12 +00:00
Future<bool> saveInstanceUrl(String url) async {
instanceUrl = url;
return await prefs.setString("$identity.$instanceUrlKey", url);
2022-08-13 16:14:12 +00:00
}
Future<bool> saveAuthCode(String code) async {
authCode = code;
return await prefs.setString("$identity.$authCodeKey", code);
2022-08-13 16:14:12 +00:00
}
Future<void> saveApp(oauth.App app) async {
clientId = app.clientId;
clientSecret = app.clientSecret;
2022-08-14 11:32:26 +00:00
await prefs.setString("$identity.$clientSecretKey", app.clientSecret);
await prefs.setString("$identity.$clientIdKey", app.clientId);
2022-08-13 16:14:12 +00:00
}
Future<bool> saveToken(String token) async {
this.token = token;
return await prefs.setString("$identity.$tokenKey", token);
2022-08-13 16:14:12 +00:00
}
}
class Settings {
late Locale locale;
static const localeKey = "active-locale";
2022-08-12 17:00:09 +00:00
late int batchSize;
static const batchSizeKey = "post-batch-size";
2022-08-13 16:14:12 +00:00
late Map<String, AccountSettings> identities = {};
static const identitiesKey = "identities";
late String activeIdentity = "";
static const activeIdentityKey = "active-identity";
2022-08-12 17:00:09 +00:00
late SharedPreferences prefs;
2022-06-30 15:34:09 +00:00
2022-08-12 17:00:09 +00:00
Settings._create();
2022-06-30 15:34:09 +00:00
2022-08-12 17:00:09 +00:00
static Future<Settings> create() async {
Settings settings = Settings._create();
2022-07-01 14:14:13 +00:00
2022-08-12 17:00:09 +00:00
settings.prefs = await SharedPreferences.getInstance();
settings.locale = Locale(settings.prefs.getString(localeKey) ?? "en");
2022-08-13 16:14:12 +00:00
2022-08-12 17:00:09 +00:00
settings.batchSize = settings.prefs.getInt(batchSizeKey) ?? 20;
if (settings.batchSize < 5) {
settings.batchSize = 5;
}
2022-07-01 14:14:13 +00:00
2022-08-13 16:14:12 +00:00
List<String> identityList =
settings.prefs.getStringList(identitiesKey) ?? [];
settings.identities = {};
for (int i = 0; i < identityList.length; i++) {
settings.identities.addAll(
{identityList[i]: await AccountSettings.create(identityList[i])});
}
settings.activeIdentity = settings.prefs.getString(activeIdentityKey) ?? "";
2022-08-12 17:00:09 +00:00
return settings;
2022-07-01 14:14:13 +00:00
}
2022-07-03 13:47:24 +00:00
2022-08-13 16:14:12 +00:00
Future<bool> addNewIdentity(String key) async {
List<String> a = identities.keys.toList();
2022-08-14 14:34:28 +00:00
a.removeWhere((element) {
return element == key;
});
2022-08-13 16:14:12 +00:00
a.add(key);
identities.addAll({key: await AccountSettings.create(key)});
2022-07-04 20:39:25 +00:00
2022-08-13 16:14:12 +00:00
return prefs.setStringList(identitiesKey, a);
2022-07-04 20:39:25 +00:00
}
2022-08-12 17:00:09 +00:00
Future<bool> saveLocale(String locale) async {
this.locale = Locale(locale);
return await prefs.setString(localeKey, locale);
2022-07-04 20:39:25 +00:00
}
2022-08-13 16:14:12 +00:00
Future<bool> saveActiveIdentity(String identity) {
activeIdentity = identity;
return prefs.setString(activeIdentityKey, identity);
2022-08-12 17:00:09 +00:00
}
2022-08-10 16:47:34 +00:00
2022-08-12 17:00:09 +00:00
Future<bool> saveBatchSize(int size) async {
batchSize = size;
return await prefs.setInt(batchSizeKey, size);
}
Future<bool> removeIdentity(String key) async {
2022-08-14 11:32:26 +00:00
await identities[key]!.delete();
identities.remove(key);
2022-08-14 11:32:26 +00:00
if (identities.isNotEmpty) {
activeIdentity = identities.keys.first;
}
return await prefs.setStringList(
identitiesKey,
identities.keys.toList(),
);
}
2022-08-10 16:47:34 +00:00
}