improved uri parsing

This commit is contained in:
Fabian Freund
2026-02-27 08:31:19 +01:00
parent d24675094d
commit d25229cb95
19 changed files with 1132 additions and 95 deletions
@@ -24,7 +24,6 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:weblibre/core/routing/routes.dart';
import 'package:weblibre/features/web_feed/domain/providers/add_dialog_blocking.dart';
import 'package:weblibre/utils/form_validators.dart';
import 'package:weblibre/utils/uri_parser.dart' as uri_parser;
class AddFeedDialog extends HookConsumerWidget {
final Uri? initialUri;
@@ -83,9 +82,16 @@ class AddFeedDialog extends HookConsumerWidget {
TextButton(
onPressed: () {
if (formKey.currentState?.validate() == true) {
FeedCreateRoute(
feedId: uri_parser.tryParseUrl(textController.text)!,
).pushReplacement(context);
final feedId = parseValidatedUrl(
textController.text,
eagerParsing: false,
onlyHttpProtocol: true,
);
if (feedId == null) {
return;
}
FeedCreateRoute(feedId: feedId).pushReplacement(context);
}
},
child: const Text('Add'),
@@ -34,7 +34,6 @@ import 'package:weblibre/features/web_feed/presentation/widgets/tag_field.dart';
import 'package:weblibre/presentation/widgets/failure_widget.dart';
import 'package:weblibre/presentation/widgets/url_icon.dart';
import 'package:weblibre/utils/form_validators.dart';
import 'package:weblibre/utils/uri_parser.dart' as uri_parser;
enum _DialogMode { create, edit }
@@ -156,19 +155,22 @@ class _FeedEditContent extends HookConsumerWidget {
onPressed: () async {
if (formKey.currentState?.validate() ?? false) {
final feedData = FeedData(
url: uri_parser.tryParseUrl(
url: parseValidatedUrl(
urlTextController.text,
eagerParsing: true,
eagerParsing: false,
onlyHttpProtocol: true,
)!,
authors: initialFeed.authors,
description: descriptionTextController.text.whenNotEmpty,
icon: uri_parser.tryParseUrl(
icon: parseValidatedUrl(
iconUrlTextController.text,
eagerParsing: true,
eagerParsing: false,
onlyHttpProtocol: true,
),
siteLink: uri_parser.tryParseUrl(
siteLink: parseValidatedUrl(
siteLinkTextController.text,
eagerParsing: true,
eagerParsing: false,
onlyHttpProtocol: true,
),
tags: tags.value.map((tag) => FeedCategory(id: tag)).toList(),
title: titleTextController.text.whenNotEmpty,