mirror of
https://github.com/gabehf/Fladder.git
synced 2026-03-07 21:48:14 -08:00
Init repo
This commit is contained in:
commit
764b6034e3
566 changed files with 212335 additions and 0 deletions
123
lib/providers/auth_provider.dart
Normal file
123
lib/providers/auth_provider.dart
Normal file
|
|
@ -0,0 +1,123 @@
|
|||
import 'dart:developer';
|
||||
|
||||
import 'package:chopper/chopper.dart';
|
||||
import 'package:fladder/models/account_model.dart';
|
||||
import 'package:fladder/models/credentials_model.dart';
|
||||
import 'package:fladder/models/login_screen_model.dart';
|
||||
import 'package:fladder/providers/api_provider.dart';
|
||||
import 'package:fladder/providers/dashboard_provider.dart';
|
||||
import 'package:fladder/providers/favourites_provider.dart';
|
||||
import 'package:fladder/providers/image_provider.dart';
|
||||
import 'package:fladder/providers/service_provider.dart';
|
||||
import 'package:fladder/providers/shared_provider.dart';
|
||||
import 'package:fladder/providers/sync_provider.dart';
|
||||
import 'package:fladder/providers/user_provider.dart';
|
||||
import 'package:fladder/providers/views_provider.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
|
||||
final authProvider = StateNotifierProvider<AuthNotifier, LoginScreenModel>((ref) {
|
||||
return AuthNotifier(ref);
|
||||
});
|
||||
|
||||
class AuthNotifier extends StateNotifier<LoginScreenModel> {
|
||||
AuthNotifier(this.ref)
|
||||
: super(
|
||||
LoginScreenModel(
|
||||
accounts: [],
|
||||
tempCredentials: CredentialsModel.createNewCredentials(),
|
||||
loading: false,
|
||||
),
|
||||
);
|
||||
|
||||
final Ref ref;
|
||||
|
||||
late final JellyService api = ref.read(jellyApiProvider);
|
||||
|
||||
Future<Response<List<AccountModel>>?> getPublicUsers() async {
|
||||
try {
|
||||
var response = await api.usersPublicGet(state.tempCredentials);
|
||||
if (response.isSuccessful && response.body != null) {
|
||||
var models = response.body ?? [];
|
||||
|
||||
return response.copyWith(body: models.toList());
|
||||
}
|
||||
return response.copyWith(body: []);
|
||||
} catch (e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Future<Response<AccountModel>?> authenticateByName(String userName, String password) async {
|
||||
state = state.copyWith(loading: true);
|
||||
clearAllProviders();
|
||||
var response = await api.usersAuthenticateByNamePost(userName: userName, password: password);
|
||||
var serverResponse = await api.systemInfoPublicGet();
|
||||
CredentialsModel credentials = state.tempCredentials;
|
||||
if (response.isSuccessful && (response.body?.accessToken?.isNotEmpty ?? false)) {
|
||||
credentials = credentials.copyWith(
|
||||
token: response.body?.accessToken ?? "",
|
||||
serverId: response.body?.serverId,
|
||||
serverName: serverResponse.body?.serverName ?? "",
|
||||
);
|
||||
var imageUrl = ref.read(imageUtilityProvider).getUserImageUrl(response.body?.user?.id ?? "");
|
||||
AccountModel newUser = AccountModel(
|
||||
name: response.body?.user?.name ?? "",
|
||||
id: response.body?.user?.id ?? "",
|
||||
avatar: imageUrl,
|
||||
credentials: credentials,
|
||||
lastUsed: DateTime.now(),
|
||||
);
|
||||
ref.read(sharedUtilityProvider).addAccount(newUser);
|
||||
ref.read(userProvider.notifier).userState = newUser;
|
||||
state = state.copyWith(loading: false);
|
||||
return Response(response.base, newUser);
|
||||
}
|
||||
state = state.copyWith(loading: false);
|
||||
return Response(response.base, null);
|
||||
}
|
||||
|
||||
Future<Response?> logOutUser() async {
|
||||
if (ref.read(userProvider) != null) {
|
||||
final response = await api.sessionsLogoutPost();
|
||||
if (response.isSuccessful) {
|
||||
log('Logged out');
|
||||
}
|
||||
state = state.copyWith(tempCredentials: CredentialsModel.createNewCredentials());
|
||||
await ref.read(sharedUtilityProvider).removeAccount(ref.read(userProvider));
|
||||
return response;
|
||||
}
|
||||
clearAllProviders();
|
||||
return null;
|
||||
}
|
||||
|
||||
Future<void> switchUser() async {
|
||||
clearAllProviders();
|
||||
}
|
||||
|
||||
void clearAllProviders() {
|
||||
ref.read(dashboardProvider.notifier).clear();
|
||||
ref.read(viewsProvider.notifier).clear();
|
||||
ref.read(favouritesProvider.notifier).clear();
|
||||
ref.read(userProvider.notifier).clear();
|
||||
ref.read(syncProvider.notifier).setup();
|
||||
}
|
||||
|
||||
void setServer(String server) {
|
||||
state = state.copyWith(
|
||||
tempCredentials: state.tempCredentials.copyWith(server: server),
|
||||
);
|
||||
}
|
||||
|
||||
List<AccountModel> getSavedAccounts() {
|
||||
state = state.copyWith(accounts: ref.read(sharedUtilityProvider).getAccounts());
|
||||
return state.accounts;
|
||||
}
|
||||
|
||||
void reOrderUsers(int oldIndex, int newIndex) {
|
||||
final accounts = state.accounts;
|
||||
final original = accounts.elementAt(oldIndex);
|
||||
accounts.removeAt(oldIndex);
|
||||
accounts.insert(newIndex, original);
|
||||
ref.read(sharedUtilityProvider).saveAccounts(accounts);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue