prevent existing bangs from getting overridden

This commit is contained in:
Fabian Freund
2025-11-21 06:16:55 +01:00
parent 34d10d2b00
commit 0c5160bf02
3 changed files with 33 additions and 1 deletions
@@ -142,6 +142,14 @@ class BangDataRepository extends _$BangDataRepository {
.deleteWhere((t) => t.trigger.equals(trigger));
}
Future<BangData?> getBang(BangKey key) {
return ref
.read(bangDatabaseProvider)
.bangDao
.getBangData(key.group, key.trigger)
.getSingleOrNull();
}
Future<void> upsertBang(Bang bang) {
return ref.read(bangDatabaseProvider).bangDao.upsertBang(bang);
}
@@ -42,7 +42,7 @@ final class BangDataRepositoryProvider
}
String _$bangDataRepositoryHash() =>
r'f071d3c4ab8218d52d55acb3de8e01fd7a204e4d';
r'e3833d71ca51bfe51feb9f137e154dfebf8b053d';
abstract class _$BangDataRepository extends $Notifier<void> {
void build();
@@ -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(