From 0c5160bf0220841d81d370c8e6d2c2ae0ff02ace Mon Sep 17 00:00:00 2001 From: Fabian Freund Date: Fri, 21 Nov 2025 06:16:55 +0100 Subject: [PATCH] prevent existing bangs from getting overridden --- .../bangs/domain/repositories/data.dart | 8 +++++++ .../bangs/domain/repositories/data.g.dart | 2 +- .../bangs/presentation/screens/edit.dart | 24 +++++++++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/app/lib/features/bangs/domain/repositories/data.dart b/app/lib/features/bangs/domain/repositories/data.dart index 3d106b55..77cb6f7a 100644 --- a/app/lib/features/bangs/domain/repositories/data.dart +++ b/app/lib/features/bangs/domain/repositories/data.dart @@ -142,6 +142,14 @@ class BangDataRepository extends _$BangDataRepository { .deleteWhere((t) => t.trigger.equals(trigger)); } + Future getBang(BangKey key) { + return ref + .read(bangDatabaseProvider) + .bangDao + .getBangData(key.group, key.trigger) + .getSingleOrNull(); + } + Future upsertBang(Bang bang) { return ref.read(bangDatabaseProvider).bangDao.upsertBang(bang); } diff --git a/app/lib/features/bangs/domain/repositories/data.g.dart b/app/lib/features/bangs/domain/repositories/data.g.dart index 58d251f8..f6544e02 100644 --- a/app/lib/features/bangs/domain/repositories/data.g.dart +++ b/app/lib/features/bangs/domain/repositories/data.g.dart @@ -42,7 +42,7 @@ final class BangDataRepositoryProvider } String _$bangDataRepositoryHash() => - r'f071d3c4ab8218d52d55acb3de8e01fd7a204e4d'; + r'e3833d71ca51bfe51feb9f137e154dfebf8b053d'; abstract class _$BangDataRepository extends $Notifier { void build(); diff --git a/app/lib/features/bangs/presentation/screens/edit.dart b/app/lib/features/bangs/presentation/screens/edit.dart index 9ed51a40..2e53e1dc 100644 --- a/app/lib/features/bangs/presentation/screens/edit.dart +++ b/app/lib/features/bangs/presentation/screens/edit.dart @@ -10,6 +10,7 @@ import 'package:weblibre/features/bangs/data/models/bang_key.dart'; import 'package:weblibre/features/bangs/domain/providers/bangs.dart'; import 'package:weblibre/features/bangs/domain/repositories/data.dart'; import 'package:weblibre/utils/form_validators.dart'; +import 'package:weblibre/utils/ui_helper.dart' as ui_helper; class EditBangScreen extends HookConsumerWidget { final Bang? initialBang; @@ -44,6 +45,29 @@ class EditBangScreen extends HookConsumerWidget { IconButton( onPressed: () async { if (formKey.currentState?.validate() ?? false) { + final existingBang = await ref + .read(bangDataRepositoryProvider.notifier) + .getBang( + BangKey( + group: BangGroup.user, + trigger: triggerTextController.text, + ), + ); + + if ((initialBang == null && existingBang != null) || + (initialBang != null && + existingBang != null && + existingBang.trigger != initialBang!.trigger)) { + if (context.mounted) { + ui_helper.showErrorMessage( + context, + 'A Bang with Trigger "${triggerTextController.text}" does already exist', + ); + } + + return; + } + final uri = Uri.parse(urlTextController.text); final bang = Bang(