good state

This commit is contained in:
Fabian Freund
2025-03-07 20:35:35 +01:00
parent 70d1c1b50e
commit 25c9faa3ff
50 changed files with 993 additions and 439 deletions
@@ -684,7 +684,7 @@ class _FetchWebFeedProviderElement
Uri get url => (origin as FetchWebFeedProvider).url;
}
String _$articleSearchHash() => r'8bf2c4aa8d8b3918be8a416909535682abfbab35';
String _$articleSearchHash() => r'cc59a5d3c4b926db9f03ed96db592965ff925b04';
abstract class _$ArticleSearch
extends BuildlessAutoDisposeStreamNotifier<List<FeedArticle>> {
@@ -0,0 +1,43 @@
import 'package:lensai/core/logger.dart';
import 'package:lensai/extensions/nullable.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'add_dialog_blocking.g.dart';
@Riverpod(keepAlive: true)
class AddFeedDialogBlocking extends _$AddFeedDialogBlocking {
DateTime? _lastIgnore;
final _ignoredUrls = <Uri, DateTime>{};
void ignore(Uri url) {
final date = DateTime.now();
_lastIgnore = date;
_ignoredUrls[url] = date;
}
bool canPush(Uri url) {
if (_lastIgnore.mapNotNull(
(last) =>
DateTime.now().difference(last) <= const Duration(seconds: 30),
) ??
false) {
logger.i('Blocking add feed default timeout for $url');
return false;
}
if (_ignoredUrls[url].mapNotNull(
(last) =>
DateTime.now().difference(last) <= const Duration(minutes: 5),
) ??
false) {
logger.i('Blocking add feed url specific for $url');
return false;
}
return true;
}
@override
void build() {}
}
@@ -0,0 +1,28 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'add_dialog_blocking.dart';
// **************************************************************************
// RiverpodGenerator
// **************************************************************************
String _$addFeedDialogBlockingHash() =>
r'513071d5e507dd292df6b4a3ee3ef7d2217db5bb';
/// See also [AddFeedDialogBlocking].
@ProviderFor(AddFeedDialogBlocking)
final addFeedDialogBlockingProvider =
NotifierProvider<AddFeedDialogBlocking, void>.internal(
AddFeedDialogBlocking.new,
name: r'addFeedDialogBlockingProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$addFeedDialogBlockingHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef _$AddFeedDialogBlocking = Notifier<void>;
// ignore_for_file: type=lint
// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package
@@ -1,7 +1,6 @@
import 'package:collection/collection.dart';
import 'package:flutter_mozilla_components/flutter_mozilla_components.dart';
import 'package:lensai/core/logger.dart';
import 'package:lensai/extensions/nullable.dart';
import 'package:lensai/features/web_feed/data/models/feed_article.dart';
import 'package:lensai/features/web_feed/data/providers.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
@@ -29,10 +28,10 @@ class ArticleContentProcessorService extends _$ArticleContentProcessorService {
articles
.mapIndexed(
(index, article) => article.copyWith(
contentMarkdown: content[index].markdown.whenNotEmpty,
contentPlain: content[index].plain.whenNotEmpty,
summaryMarkdown: summary[index].markdown.whenNotEmpty,
summaryPlain: summary[index].plain.whenNotEmpty,
contentMarkdown: content[index].markdown ?? '',
contentPlain: content[index].plain,
summaryMarkdown: summary[index].markdown ?? '',
summaryPlain: summary[index].plain,
),
)
.toList(),
@@ -7,7 +7,7 @@ part of 'article_content_processor.dart';
// **************************************************************************
String _$articleContentProcessorServiceHash() =>
r'182cd89e38a0a9a86b7425c16ad2bd1fc39c6704';
r'e7cc3da71f6dcf39b0c10df4dcd061f816d5c12e';
/// See also [ArticleContentProcessorService].
@ProviderFor(ArticleContentProcessorService)