1
0
mirror of https://github.com/immich-app/immich.git synced 2024-12-24 10:37:28 +02:00
immich/mobile/lib/shared/providers/user.provider.dart

75 lines
2.0 KiB
Dart
Raw Normal View History

import 'dart:async';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:immich_mobile/shared/models/store.dart';
import 'package:immich_mobile/shared/models/user.dart';
import 'package:immich_mobile/shared/providers/api.provider.dart';
import 'package:immich_mobile/shared/providers/db.provider.dart';
import 'package:immich_mobile/shared/services/api.service.dart';
import 'package:isar/isar.dart';
class CurrentUserProvider extends StateNotifier<User?> {
CurrentUserProvider(this._apiService) : super(null) {
state = Store.tryGet(StoreKey.currentUser);
streamSub =
Store.watch(StoreKey.currentUser).listen((user) => state = user);
}
final ApiService _apiService;
late final StreamSubscription<User?> streamSub;
refresh() async {
try {
final user = await _apiService.userApi.getMyUserInfo();
if (user != null) {
Store.put(
StoreKey.currentUser,
User.fromUserDto(user),
);
}
} catch (_) {}
}
@override
void dispose() {
streamSub.cancel();
super.dispose();
}
}
final currentUserProvider =
StateNotifierProvider<CurrentUserProvider, User?>((ref) {
return CurrentUserProvider(
ref.watch(apiServiceProvider),
);
});
class TimelineUserIdsProvider extends StateNotifier<List<int>> {
TimelineUserIdsProvider(Isar db, User? currentUser) : super([]) {
final query = db.users
.filter()
.inTimelineEqualTo(true)
.or()
.isarIdEqualTo(currentUser?.isarId ?? Isar.autoIncrement)
.isarIdProperty();
query.findAll().then((users) => state = users);
streamSub = query.watch().listen((users) => state = users);
}
late final StreamSubscription<List<int>> streamSub;
@override
void dispose() {
streamSub.cancel();
super.dispose();
}
}
final timelineUsersIdsProvider =
StateNotifierProvider<TimelineUserIdsProvider, List<int>>((ref) {
return TimelineUserIdsProvider(
ref.watch(dbProvider),
ref.watch(currentUserProvider),
);
});