web deploy

This commit is contained in:
2025-11-04 20:32:40 +01:00
parent 2cf1fb648c
commit f7839d1dfb
5 changed files with 153 additions and 16 deletions
@@ -127,7 +127,34 @@ class _MovieDetailScreenState extends ConsumerState<MovieDetailScreen> {
label: const Text('Speichern'),
)
: null,
body: SizedBox.expand(
body: MenuAnchor(
menuChildren: [
MenuItemButton(
child: const Text('update'),
onPressed: () 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);
if (!mounted) return;
setState(() => _tmdb = json);
ref.invalidate(moviesStreamProvider);
ref.invalidate(moviesProvider);
messenger.showSnackBar(const SnackBar(content: Text('TMDB Daten aktualisiert')));
} catch (e) {
messenger.showSnackBar(SnackBar(content: Text('TMDB Update fehlgeschlagen: $e')));
}
},
),
],
builder: (ctx, controller, child) => GestureDetector(
onSecondaryTapDown: (_) => controller.open(),
onSecondaryTapUp: (_) => controller.open(),
onLongPress: () => controller.open(),
child: child!,
),
child: SizedBox.expand(
child: Container(
decoration: (backdrop != null || poster != null)
? BoxDecoration(
@@ -248,7 +275,7 @@ class _MovieDetailScreenState extends ConsumerState<MovieDetailScreen> {
),
),
),
);
));
}
Widget _statusSelector(ItemStatus current) {
@@ -215,6 +215,7 @@ class MovieListScreen extends ConsumerWidget {
}
Future<void> deleteMovie() async {
final messenger = ScaffoldMessenger.of(context);
final confirm = await showDialog<bool>(
context: context,
builder: (ctx) => AlertDialog(
@@ -226,8 +227,8 @@ class MovieListScreen extends ConsumerWidget {
],
),
);
if (!context.mounted) return;
if (confirm != true) return;
final messenger = ScaffoldMessenger.of(context);
try {
await ref.read(backendApiProvider).deleteMovie(m.id);
ref.invalidate(moviesStreamProvider);
@@ -2,7 +2,6 @@ import 'dart:convert';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart' as widgets;
import '../../../core/status.dart';
import '../../movies/presentation/widgets/status_chip.dart';
@@ -504,6 +503,7 @@ class SeriesListScreen extends ConsumerWidget {
onPressed: () async {
final sid = int.tryParse(showKey.split('##').last);
if (sid == null) return;
final messenger = ScaffoldMessenger.of(context);
final confirm = await showDialog<bool>(
context: context,
builder: (ctx) => AlertDialog(
@@ -515,8 +515,8 @@ class SeriesListScreen extends ConsumerWidget {
],
),
);
if (!context.mounted) return;
if (confirm != true) return;
final messenger = ScaffoldMessenger.of(context);
try {
final backend = ref.read(backendApiProvider);
await backend.deleteShow(sid);
@@ -650,6 +650,7 @@ class SeriesListScreen extends ConsumerWidget {
onPressed: () async {
final sid = int.tryParse(showKey.split('##').last);
if (sid == null) return;
final messenger = ScaffoldMessenger.of(context);
final confirm = await showDialog<bool>(
context: context,
builder: (ctx) => AlertDialog(
@@ -661,8 +662,8 @@ class SeriesListScreen extends ConsumerWidget {
],
),
);
if (confirm != true) return;
final messenger = ScaffoldMessenger.of(context);
if (!context.mounted) return;
if (confirm != true) return;
try { final backend = ref.read(backendApiProvider); await backend.deleteShow(sid); ref.invalidate(seriesGroupedProvider); ref.invalidate(seriesSummaryProvider); messenger.showSnackBar(const SnackBar(content: Text('Serie gelöscht')));} catch (e) { messenger.showSnackBar(SnackBar(content: Text('Löschen fehlgeschlagen: $e')));}
},
),
@@ -724,7 +725,7 @@ class SeriesListScreen extends ConsumerWidget {
MenuItemButton(
child: const Text('delete'),
onPressed: () async {
final sid = int.tryParse(showKey.split('##').last); if (sid == null) return; final confirm = await showDialog<bool>(context: context, builder: (ctx) => AlertDialog(title: const Text('Serie löschen?'), content: Text(displayName), 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 { final backend = ref.read(backendApiProvider); await backend.deleteShow(sid); ref.invalidate(seriesGroupedProvider); ref.invalidate(seriesSummaryProvider); messenger.showSnackBar(const SnackBar(content: Text('Serie gelöscht')));} catch (e) { messenger.showSnackBar(SnackBar(content: Text('Löschen fehlgeschlagen: $e')));}
final sid = int.tryParse(showKey.split('##').last); if (sid == null) return; final confirm = await showDialog<bool>(context: context, builder: (ctx) => AlertDialog(title: const Text('Serie löschen?'), content: Text(displayName), 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 (!context.mounted) return; if (confirm != true) return; final messenger = ScaffoldMessenger.of(context); try { final backend = ref.read(backendApiProvider); await backend.deleteShow(sid); ref.invalidate(seriesGroupedProvider); ref.invalidate(seriesSummaryProvider); messenger.showSnackBar(const SnackBar(content: Text('Serie gelöscht')));} catch (e) { messenger.showSnackBar(SnackBar(content: Text('Löschen fehlgeschlagen: $e')));}
},
),
MenuItemButton(
@@ -1410,10 +1411,11 @@ extension _SeriesContextMenu on SeriesListScreen {
],
),
);
if (confirm != true) return;
final messenger = ScaffoldMessenger.of(context);
try {
final backend = ref.read(backendApiProvider);
if (!context.mounted) return;
if (confirm != true) return;
final messenger = ScaffoldMessenger.of(context);
try {
final backend = ref.read(backendApiProvider);
await backend.deleteShow(sid);
// ignore: unused_result
ref.invalidate(seriesGroupedProvider);
@@ -1439,12 +1441,17 @@ extension _SeriesContextMenu on SeriesListScreen {
}
return [
MenuItemButton(child: const Text('set all progress to done'), onPressed: setAllProgressToDone),
MenuItemButton(child: const Text('update'), onPressed: performUpdate),
MenuItemButton(child: const Text('delete'), onPressed: performDelete),
MenuItemButton(child: const Text('open download path'), onPressed: openDownload),
MenuItemButton(onPressed: setAllProgressToDone, child: const Text('set all progress to done')),
MenuItemButton(onPressed: performUpdate, child: const Text('update')),
MenuItemButton(onPressed: performDelete, child: const Text('delete')),
MenuItemButton(onPressed: openDownload, child: const Text('open download path')),
];
}
}