|
|
|
|
@ -127,7 +127,7 @@ class MovieListScreen extends ConsumerWidget {
|
|
|
|
|
separatorBuilder: (_, __) => const Divider(height: 1),
|
|
|
|
|
itemBuilder: (context, i) {
|
|
|
|
|
final m = itemsSorted[i];
|
|
|
|
|
return ListTile(
|
|
|
|
|
final tile = ListTile(
|
|
|
|
|
tileColor: _statusBg(m.status, context),
|
|
|
|
|
leading: m.posterPath != null
|
|
|
|
|
? ClipRRect(
|
|
|
|
|
@ -187,6 +187,72 @@ class MovieListScreen extends ConsumerWidget {
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
Future<void> setStatus(ItemStatus s) async {
|
|
|
|
|
final messenger = ScaffoldMessenger.of(context);
|
|
|
|
|
try {
|
|
|
|
|
await ref.read(backendApiProvider).setStatus(type: 'movie', refId: m.id, status: s.name);
|
|
|
|
|
ref.invalidate(moviesStreamProvider);
|
|
|
|
|
ref.invalidate(moviesProvider);
|
|
|
|
|
messenger.showSnackBar(SnackBar(content: Text('Status gesetzt: ${s.name}')));
|
|
|
|
|
} catch (e) {
|
|
|
|
|
messenger.showSnackBar(SnackBar(content: Text('Fehler: $e')));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future<void> updateMovie() async {
|
|
|
|
|
final messenger = ScaffoldMessenger.of(context);
|
|
|
|
|
try {
|
|
|
|
|
final tmdb = ref.read(tmdbApiProvider);
|
|
|
|
|
final json = await tmdb.getMovie(m.tmdbId);
|
|
|
|
|
await ref.read(backendApiProvider).upsertMovie(json);
|
|
|
|
|
ref.invalidate(moviesStreamProvider);
|
|
|
|
|
ref.invalidate(moviesProvider);
|
|
|
|
|
messenger.showSnackBar(const SnackBar(content: Text('Film aktualisiert')));
|
|
|
|
|
} catch (e) {
|
|
|
|
|
messenger.showSnackBar(SnackBar(content: Text('Update fehlgeschlagen: $e')));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future<void> deleteMovie() async {
|
|
|
|
|
final confirm = await showDialog<bool>(
|
|
|
|
|
context: context,
|
|
|
|
|
builder: (ctx) => AlertDialog(
|
|
|
|
|
title: const Text('Film löschen?'),
|
|
|
|
|
content: Text(m.title),
|
|
|
|
|
actions: [
|
|
|
|
|
TextButton(onPressed: () => Navigator.of(ctx).pop(false), child: const Text('Abbrechen')),
|
|
|
|
|
FilledButton(onPressed: () => Navigator.of(ctx).pop(true), child: const Text('Löschen')),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
if (confirm != true) return;
|
|
|
|
|
final messenger = ScaffoldMessenger.of(context);
|
|
|
|
|
try {
|
|
|
|
|
await ref.read(backendApiProvider).deleteMovie(m.id);
|
|
|
|
|
ref.invalidate(moviesStreamProvider);
|
|
|
|
|
ref.invalidate(moviesProvider);
|
|
|
|
|
messenger.showSnackBar(const SnackBar(content: Text('Film gelöscht')));
|
|
|
|
|
} catch (e) {
|
|
|
|
|
messenger.showSnackBar(SnackBar(content: Text('Löschen fehlgeschlagen: $e')));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return MenuAnchor(
|
|
|
|
|
menuChildren: [
|
|
|
|
|
MenuItemButton(onPressed: () => setStatus(ItemStatus.Init), child: const Text('set to init')),
|
|
|
|
|
MenuItemButton(onPressed: () => setStatus(ItemStatus.Progress), child: const Text('set to progress')),
|
|
|
|
|
MenuItemButton(onPressed: () => setStatus(ItemStatus.Done), child: const Text('set to done')),
|
|
|
|
|
MenuItemButton(onPressed: updateMovie, child: const Text('update')),
|
|
|
|
|
MenuItemButton(onPressed: deleteMovie, child: const Text('delete')),
|
|
|
|
|
],
|
|
|
|
|
builder: (ctx, controller, child) => GestureDetector(
|
|
|
|
|
onSecondaryTapDown: (_) => controller.open(),
|
|
|
|
|
onSecondaryTapUp: (_) => controller.open(),
|
|
|
|
|
onLongPress: () => controller.open(),
|
|
|
|
|
child: tile,
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
|