fix: Library screen causing server to go down because of api calls (#602)

This commit is contained in:
PartyDonut 2025-11-10 21:24:35 +01:00 committed by GitHub
parent a4ec2637fc
commit ed3d51bfed
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 90 additions and 78 deletions

View file

@ -45,6 +45,11 @@ class _LibraryScreenState extends ConsumerState<LibraryScreen> with SingleTicker
@override
Widget build(BuildContext context) {
ref.listen(libraryScreenProvider, (previous, next) {
if ((previous?.viewType.length ?? 0) < next.viewType.length) {
refreshKey?.currentState?.show();
}
});
final libraryScreenState = ref.watch(libraryScreenProvider);
final views = libraryScreenState.views;
final recommendations = libraryScreenState.recommendations;
@ -133,9 +138,7 @@ class _LibraryScreenState extends ConsumerState<LibraryScreen> with SingleTicker
)))
.toList(),
selectedValues: viewTypes,
onSelected: (value) {
ref.read(libraryScreenProvider.notifier).setViewType(value);
},
onSelected: (value) => ref.read(libraryScreenProvider.notifier).setViewType(value),
),
const Padding(
padding: EdgeInsets.symmetric(horizontal: 4.0),
@ -155,74 +158,71 @@ class _LibraryScreenState extends ConsumerState<LibraryScreen> with SingleTicker
SliverFillRemaining(
child: Center(child: Text(context.localized.noResults)),
),
if (viewTypes.contains(LibraryViewType.recommended)) ...[
if (recommendations.isNotEmpty)
...recommendations.where((element) => element.posters.isNotEmpty).map(
(element) {
return SliverToBoxAdapter(
if (viewTypes.contains(LibraryViewType.recommended) && recommendations.isNotEmpty) ...[
...recommendations.where((element) => element.posters.isNotEmpty).map(
(element) {
return SliverToBoxAdapter(
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 8.0),
child: PosterRow(
contentPadding: padding,
posters: element.posters,
primaryPosters: element.name is Resume,
label: element.type != null
? "${element.type?.label(context)} - ${element.name.label(context)}"
: element.name.label(context),
),
),
);
},
),
],
if (viewTypes.contains(LibraryViewType.favourites) && favourites.isNotEmpty)
SliverToBoxAdapter(
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 8.0),
child: PosterRow(
contentPadding: padding,
onLabelClick: () => context.pushRoute(
LibrarySearchRoute(
viewModelId: libraryScreenState.selectedViewModel?.id ?? "",
).withFilter(
const LibraryFilterModel(
favourites: true,
recursive: true,
),
),
),
posters: favourites,
label: context.localized.favorites,
),
),
),
if (viewTypes.contains(LibraryViewType.genres) && genres.isNotEmpty) ...[
...genres.where((element) => element.posters.isNotEmpty).map(
(element) => SliverToBoxAdapter(
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 8.0),
child: PosterRow(
contentPadding: padding,
posters: element.posters,
primaryPosters: element.name is Resume,
onLabelClick: () => context.pushRoute(
LibrarySearchRoute(
viewModelId: libraryScreenState.selectedViewModel?.id ?? "",
).withFilter(
LibraryFilterModel(
recursive: true,
genres: {(element.name as Other).customLabel: true},
),
),
),
label: element.type != null
? "${element.type?.label(context)} - ${element.name.label(context)}"
: element.name.label(context),
),
),
);
},
),
],
if (viewTypes.contains(LibraryViewType.favourites))
if (favourites.isNotEmpty)
SliverToBoxAdapter(
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 8.0),
child: PosterRow(
contentPadding: padding,
onLabelClick: () => context.pushRoute(
LibrarySearchRoute(
viewModelId: libraryScreenState.selectedViewModel?.id ?? "",
).withFilter(
const LibraryFilterModel(
favourites: true,
recursive: true,
),
),
),
posters: favourites,
label: context.localized.favorites,
),
),
),
if (viewTypes.contains(LibraryViewType.genres)) ...[
if (genres.isNotEmpty)
...genres.where((element) => element.posters.isNotEmpty).map(
(element) => SliverToBoxAdapter(
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 8.0),
child: PosterRow(
contentPadding: padding,
posters: element.posters,
onLabelClick: () => context.pushRoute(
LibrarySearchRoute(
viewModelId: libraryScreenState.selectedViewModel?.id ?? "",
).withFilter(
LibraryFilterModel(
recursive: true,
genres: {(element.name as Other).customLabel: true},
),
),
),
label: element.type != null
? "${element.type?.label(context)} - ${element.name.label(context)}"
: element.name.label(context),
),
),
),
)
)
],
const DefautlSliverBottomPadding(),
],