add pick default reaction
This commit is contained in:
parent
22eaa6cade
commit
a18300f0f1
|
@ -10,6 +10,7 @@ class AccountsStore extends _AccountsStore with _$AccountsStore {}
|
|||
|
||||
abstract class _AccountsStore with Store {
|
||||
ReactionDisposer _saveReactionDisposer;
|
||||
ReactionDisposer _pickDefaultsDisposer;
|
||||
|
||||
_AccountsStore() {
|
||||
// persistently save settings each time they are changed
|
||||
|
@ -24,10 +25,98 @@ abstract class _AccountsStore with Store {
|
|||
],
|
||||
(_) => save(),
|
||||
);
|
||||
|
||||
// check if there's a default profile and if not, select one
|
||||
_pickDefaultsDisposer = reaction(
|
||||
(_) => [
|
||||
users.forEach((k, submap) =>
|
||||
MapEntry(k, submap.forEach((k2, v2) => MapEntry(k2, v2)))),
|
||||
tokens.forEach((k, submap) =>
|
||||
MapEntry(k, submap.forEach((k2, v2) => MapEntry(k2, v2)))),
|
||||
], (_) {
|
||||
if (users.isEmpty) {
|
||||
// if empty clear def users
|
||||
_defaultAccount = null;
|
||||
_defaultAccounts = ObservableMap();
|
||||
return;
|
||||
}
|
||||
|
||||
// == SET LOCAL DEFAULTS ==
|
||||
|
||||
// go through instances
|
||||
for (final instanceUrl in users.keys) {
|
||||
// if this instance is already in defaults
|
||||
if (_defaultAccounts.keys.contains(instanceUrl)) {
|
||||
// if this account wasn't removed, skip
|
||||
if (users[instanceUrl].keys.contains(_defaultAccounts[instanceUrl])) {
|
||||
continue;
|
||||
}
|
||||
// if every account was removed,
|
||||
if (users[instanceUrl].isEmpty) {
|
||||
_defaultAccounts.remove(instanceUrl);
|
||||
continue;
|
||||
}
|
||||
_defaultAccounts[instanceUrl] = users[instanceUrl].entries.first.key;
|
||||
} else {
|
||||
// select first account in this instance, if any
|
||||
if (users[instanceUrl].isEmpty) {
|
||||
continue;
|
||||
}
|
||||
|
||||
_defaultAccounts[instanceUrl] = users[instanceUrl].entries.first.key;
|
||||
}
|
||||
}
|
||||
|
||||
// clean up
|
||||
for (final instance in _defaultAccounts.keys) {
|
||||
if (!users.keys.contains(instance)) {
|
||||
_defaultAccounts.remove(instance);
|
||||
}
|
||||
}
|
||||
|
||||
// == SET GLOBAL DEFAULT ==
|
||||
|
||||
if (_defaultAccount == null) {
|
||||
// select first account of first instance
|
||||
for (final instance in users.keys) {
|
||||
if (users[instance].isNotEmpty) {
|
||||
_defaultAccount = '$instance@${users[instance].keys.first}';
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
final instance = _defaultAccount.split('@')[1];
|
||||
final username = _defaultAccount.split('@')[0];
|
||||
|
||||
final containsDefaultInstance = users.keys.contains(instance);
|
||||
|
||||
// if default instance is even added
|
||||
if (containsDefaultInstance && users[instance].isNotEmpty) {
|
||||
if (users[instance].containsKey(username)) return;
|
||||
// select new profile
|
||||
final newDefault = users[instance].entries.first;
|
||||
_defaultAccount = '${newDefault.value.name}@${newDefault.key}';
|
||||
return;
|
||||
} else {
|
||||
// if default instance is not even added
|
||||
// select first account of first instance
|
||||
|
||||
for (final user in users.entries) {
|
||||
if (user.value.entries.isEmpty) continue;
|
||||
|
||||
final newDefault = user.value.entries.first;
|
||||
_defaultAccount = '${newDefault.value.name}@${newDefault.key}';
|
||||
return;
|
||||
}
|
||||
_defaultAccount = null;
|
||||
return;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void dispose() {
|
||||
_saveReactionDisposer();
|
||||
_pickDefaultsDisposer();
|
||||
}
|
||||
|
||||
void load() async {
|
||||
|
@ -122,11 +211,13 @@ abstract class _AccountsStore with Store {
|
|||
return tokens[instanceUrl][_defaultAccounts[instanceUrl]];
|
||||
}).value;
|
||||
|
||||
/// sets globally default account
|
||||
@action
|
||||
void setDefaultAccount(String instanceUrl, String username) {
|
||||
_defaultAccount = '$username@$instanceUrl';
|
||||
}
|
||||
|
||||
/// sets default account for given instance
|
||||
@action
|
||||
void setDefaultAccountFor(String instanceUrl, String username) {
|
||||
_defaultAccounts[instanceUrl] = username;
|
||||
|
@ -167,15 +258,6 @@ abstract class _AccountsStore with Store {
|
|||
final userData =
|
||||
await lemmy.getSite(auth: token.raw).then((value) => value.myUser);
|
||||
|
||||
// first account for this instance
|
||||
if (users[instanceUrl].isEmpty) {
|
||||
// first account ever
|
||||
if (hasNoAccount) {
|
||||
setDefaultAccount(instanceUrl, userData.name);
|
||||
}
|
||||
|
||||
setDefaultAccountFor(instanceUrl, userData.name);
|
||||
}
|
||||
users[instanceUrl][userData.name] = userData;
|
||||
tokens[instanceUrl][userData.name] = token;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue