mirror of
https://github.com/immich-app/immich.git
synced 2025-06-20 22:12:33 -04:00
wip
This commit is contained in:
parent
9266197cd2
commit
27d390a756
@ -1,9 +1,9 @@
|
|||||||
import 'package:auto_route/auto_route.dart';
|
import 'package:auto_route/auto_route.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:immich_mobile/extensions/asyncvalue_extensions.dart';
|
import 'package:immich_mobile/extensions/asyncvalue_extensions.dart';
|
||||||
import 'package:immich_mobile/extensions/build_context_extensions.dart';
|
import 'package:immich_mobile/extensions/build_context_extensions.dart';
|
||||||
import 'package:immich_mobile/providers/album/album.provider.dart';
|
|
||||||
import 'package:immich_mobile/providers/album/albumv2.provider.dart';
|
import 'package:immich_mobile/providers/album/albumv2.provider.dart';
|
||||||
import 'package:immich_mobile/providers/search/people.provider.dart';
|
import 'package:immich_mobile/providers/search/people.provider.dart';
|
||||||
import 'package:immich_mobile/providers/server_info.provider.dart';
|
import 'package:immich_mobile/providers/server_info.provider.dart';
|
||||||
@ -134,17 +134,29 @@ class PeopleCollectionCard extends ConsumerWidget {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class AlbumsCollectionCard extends ConsumerWidget {
|
class AlbumsCollectionCard extends HookConsumerWidget {
|
||||||
final bool isLocal;
|
final bool isLocal;
|
||||||
|
|
||||||
const AlbumsCollectionCard({super.key, this.isLocal = false});
|
const AlbumsCollectionCard({super.key, this.isLocal = false});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
final albums = isLocal
|
final albums = useState([]);
|
||||||
? ref.watch(albumProviderV2).where((album) => album.isLocal)
|
|
||||||
: ref.watch(albumProviderV2).where((album) => album.isRemote);
|
|
||||||
final size = MediaQuery.of(context).size.width * 0.5 - 20;
|
final size = MediaQuery.of(context).size.width * 0.5 - 20;
|
||||||
|
|
||||||
|
useEffect(
|
||||||
|
() {
|
||||||
|
Future.microtask(() async {
|
||||||
|
albums.value = isLocal
|
||||||
|
? await ref.read(albumProviderV2.notifier).getLocalAlbums()
|
||||||
|
: await ref.read(albumProviderV2.notifier).getRemoteAlbums();
|
||||||
|
});
|
||||||
|
return null;
|
||||||
|
},
|
||||||
|
[],
|
||||||
|
);
|
||||||
|
|
||||||
return GestureDetector(
|
return GestureDetector(
|
||||||
onTap: () => context.pushRoute(
|
onTap: () => context.pushRoute(
|
||||||
isLocal
|
isLocal
|
||||||
@ -167,7 +179,7 @@ class AlbumsCollectionCard extends ConsumerWidget {
|
|||||||
crossAxisSpacing: 8,
|
crossAxisSpacing: 8,
|
||||||
mainAxisSpacing: 8,
|
mainAxisSpacing: 8,
|
||||||
physics: const NeverScrollableScrollPhysics(),
|
physics: const NeverScrollableScrollPhysics(),
|
||||||
children: albums.take(4).map((album) {
|
children: albums.value.take(4).map((album) {
|
||||||
return AlbumThumbnailCard(
|
return AlbumThumbnailCard(
|
||||||
album: album,
|
album: album,
|
||||||
showTitle: false,
|
showTitle: false,
|
||||||
|
@ -26,7 +26,7 @@ class AlbumNotifierV2 extends StateNotifier<List<Album>> {
|
|||||||
final Isar db;
|
final Isar db;
|
||||||
late final StreamSubscription<List<Album>> _streamSub;
|
late final StreamSubscription<List<Album>> _streamSub;
|
||||||
|
|
||||||
Future<void> getAllAlbums() {
|
Future<void> refreshAlbums() {
|
||||||
return Future.wait([
|
return Future.wait([
|
||||||
_albumService.refreshDeviceAlbums(),
|
_albumService.refreshDeviceAlbums(),
|
||||||
_albumService.refreshRemoteAlbums(isShared: true),
|
_albumService.refreshRemoteAlbums(isShared: true),
|
||||||
@ -103,6 +103,14 @@ class AlbumNotifierV2 extends StateNotifier<List<Album>> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<List<Album>> getRemoteAlbums() {
|
||||||
|
return db.albums.filter().remoteIdIsNotNull().findAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<List<Album>> getLocalAlbums() {
|
||||||
|
return db.albums.filter().not().remoteIdIsNotNull().findAll();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
_streamSub.cancel();
|
_streamSub.cancel();
|
||||||
|
@ -2,6 +2,7 @@ import 'package:auto_route/auto_route.dart';
|
|||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:immich_mobile/providers/album/album.provider.dart';
|
import 'package:immich_mobile/providers/album/album.provider.dart';
|
||||||
|
import 'package:immich_mobile/providers/album/albumv2.provider.dart';
|
||||||
import 'package:immich_mobile/providers/memory.provider.dart';
|
import 'package:immich_mobile/providers/memory.provider.dart';
|
||||||
import 'package:immich_mobile/providers/search/people.provider.dart';
|
import 'package:immich_mobile/providers/search/people.provider.dart';
|
||||||
|
|
||||||
@ -50,6 +51,10 @@ class TabNavigationObserver extends AutoRouterObserver {
|
|||||||
ref.read(albumProvider.notifier).getAllAlbums();
|
ref.read(albumProvider.notifier).getAllAlbums();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (route.name == 'CollectionsRoute') {
|
||||||
|
ref.read(albumProviderV2.notifier).refreshAlbums();
|
||||||
|
}
|
||||||
|
|
||||||
if (route.name == 'HomeRoute') {
|
if (route.name == 'HomeRoute') {
|
||||||
ref.invalidate(memoryFutureProvider);
|
ref.invalidate(memoryFutureProvider);
|
||||||
Future(() => ref.read(assetProvider.notifier).getAllAsset());
|
Future(() => ref.read(assetProvider.notifier).getAllAsset());
|
||||||
|
Loading…
x
Reference in New Issue
Block a user