mirror of
https://github.com/Dr-Blank/Vaani.git
synced 2025-12-08 20:19:29 +00:00
fix: reuse onboarding components on server manager page
This commit is contained in:
parent
a05f095892
commit
5c74abc201
9 changed files with 401 additions and 455 deletions
|
|
@ -1,92 +0,0 @@
|
|||
import 'package:logging/logging.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
import 'package:vaani/api/server_provider.dart'
|
||||
show audiobookShelfServerProvider;
|
||||
import 'package:vaani/db/storage.dart';
|
||||
import 'package:vaani/settings/api_settings_provider.dart';
|
||||
import 'package:vaani/settings/models/audiobookshelf_server.dart';
|
||||
import 'package:vaani/settings/models/authenticated_user.dart' as model;
|
||||
import 'package:vaani/shared/extensions/obfuscation.dart';
|
||||
|
||||
part 'authenticated_user_provider.g.dart';
|
||||
|
||||
final _box = AvailableHiveBoxes.authenticatedUserBox;
|
||||
|
||||
final _logger = Logger('authenticated_user_provider');
|
||||
|
||||
/// provides with a set of authenticated users
|
||||
@riverpod
|
||||
class AuthenticatedUser extends _$AuthenticatedUser {
|
||||
@override
|
||||
Set<model.AuthenticatedUser> build() {
|
||||
ref.listenSelf((_, __) {
|
||||
writeStateToBox();
|
||||
});
|
||||
// get the app settings
|
||||
final apiSettings = ref.read(apiSettingsProvider);
|
||||
|
||||
final availUsers = readFromBoxOrCreate();
|
||||
if (apiSettings.activeUser != null) {
|
||||
availUsers.add(apiSettings.activeUser!);
|
||||
}
|
||||
return availUsers;
|
||||
}
|
||||
|
||||
Set<model.AuthenticatedUser> readFromBoxOrCreate() {
|
||||
if (_box.isNotEmpty) {
|
||||
final foundData = _box.getRange(0, _box.length);
|
||||
_logger.fine(
|
||||
'found users in box: ${foundData.obfuscate()}',
|
||||
);
|
||||
return foundData.toSet();
|
||||
} else {
|
||||
_logger.fine('no settings found in box');
|
||||
return {};
|
||||
}
|
||||
}
|
||||
|
||||
void writeStateToBox() {
|
||||
_box.clear();
|
||||
if (state.isEmpty) {
|
||||
return;
|
||||
}
|
||||
_box.addAll(state);
|
||||
_logger.fine('writing state to box: ${state.obfuscate()}');
|
||||
}
|
||||
|
||||
void addUser(model.AuthenticatedUser user, {bool setActive = false}) {
|
||||
state = state..add(user);
|
||||
if (setActive) {
|
||||
final apiSettings = ref.read(apiSettingsProvider);
|
||||
ref.read(apiSettingsProvider.notifier).updateState(
|
||||
apiSettings.copyWith(
|
||||
activeUser: user,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
void removeUsersOfServer(AudiobookShelfServer registeredServer) {
|
||||
state = state.where((user) => user.server != registeredServer).toSet();
|
||||
// remove the server from the server provider
|
||||
final serverProvider = ref.read(audiobookShelfServerProvider);
|
||||
if (serverProvider.contains(registeredServer)) {
|
||||
ref
|
||||
.read(audiobookShelfServerProvider.notifier)
|
||||
.removeServer(registeredServer);
|
||||
}
|
||||
}
|
||||
|
||||
void removeUser(model.AuthenticatedUser user) {
|
||||
state = state.where((u) => u != user).toSet();
|
||||
// also remove the user from the active user
|
||||
final apiSettings = ref.read(apiSettingsProvider);
|
||||
if (apiSettings.activeUser == user) {
|
||||
ref.read(apiSettingsProvider.notifier).updateState(
|
||||
apiSettings.copyWith(
|
||||
activeUser: null,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue