lange Filmliste
This commit is contained in:
@@ -8,6 +8,15 @@ final movieFilterProvider = StateProvider<ItemStatus?>((_) => null);
|
||||
final moviesProvider = FutureProvider.autoDispose<List<Movie>>((ref) async {
|
||||
final backend = ref.watch(backendApiProvider);
|
||||
final st = ref.watch(movieFilterProvider);
|
||||
final list = await backend.getMovies(status: st?.name);
|
||||
return list.map(Movie.fromJson).toList();
|
||||
});
|
||||
// Page through results to avoid large single-response 500s on the server
|
||||
const pageSize = 500;
|
||||
var offset = 0;
|
||||
final all = <Map<String, dynamic>>[];
|
||||
while (true) {
|
||||
final page = await backend.getMovies(status: st?.name, offset: offset, limit: pageSize);
|
||||
all.addAll(page);
|
||||
if (page.length < pageSize) break;
|
||||
offset += pageSize;
|
||||
}
|
||||
return all.map(Movie.fromJson).toList();
|
||||
});
|
||||
|
||||
@@ -21,14 +21,22 @@ class _MovieAddScreenState extends ConsumerState<MovieAddScreen> {
|
||||
Set<int> _existing = {};
|
||||
|
||||
Future<void> _loadExisting() async {
|
||||
// Fetch a larger set directly from backend to avoid pagination gaps
|
||||
// Page through backend results to build tmdb_id set without huge single response
|
||||
final backend = ref.read(backendApiProvider);
|
||||
final list = await backend.getMovies(limit: 5000);
|
||||
const pageSize = 500;
|
||||
var offset = 0;
|
||||
final ids = <int>{};
|
||||
while (true) {
|
||||
final page = await backend.getMovies(offset: offset, limit: pageSize);
|
||||
for (final m in page) {
|
||||
final v = (m['tmdb_id'] as num?)?.toInt();
|
||||
if (v != null) ids.add(v);
|
||||
}
|
||||
if (page.length < pageSize) break;
|
||||
offset += pageSize;
|
||||
}
|
||||
setState(() {
|
||||
_existing = list
|
||||
.map((m) => (m['tmdb_id'] as num))
|
||||
.map((n) => n.toInt())
|
||||
.toSet();
|
||||
_existing = ids;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user