better feed fetching
This commit is contained in:
@@ -17,6 +17,7 @@
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import 'package:fast_equatable/fast_equatable.dart';
|
||||
import 'package:nullability/nullability.dart';
|
||||
import 'package:riverpod/riverpod.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
@@ -46,34 +47,6 @@ class CompletePageInfo extends _$CompletePageInfo {
|
||||
return AsyncData(cached);
|
||||
}
|
||||
|
||||
// ref.listen(
|
||||
// fireImmediately: true,
|
||||
// pageInfoProvider(cached.url, isImageRequest: false),
|
||||
// (previous, next) {
|
||||
// if (next.hasValue) {
|
||||
// final current = stateOrNull?.value ?? cached;
|
||||
|
||||
// state = AsyncData(
|
||||
// current.copyWith(
|
||||
// //Cached is preferred as this comes from gecko and is more likely to be correct compared to manual request
|
||||
// favicon: current.favicon ?? next.value!.favicon,
|
||||
// feeds: current.feeds ?? next.value!.feeds,
|
||||
// title: current.title.whenNotEmpty ?? next.value!.title,
|
||||
// ),
|
||||
// );
|
||||
// } else {
|
||||
// state = next;
|
||||
// }
|
||||
// },
|
||||
// onError: (error, stackTrace) {
|
||||
// logger.e(
|
||||
// 'Error listening to pageInfoProvider',
|
||||
// error: error,
|
||||
// stackTrace: stackTrace,
|
||||
// );
|
||||
// },
|
||||
// );
|
||||
|
||||
ref.listen(
|
||||
fireImmediately: true,
|
||||
tabStateProvider(cached.id).select((value) => value?.title),
|
||||
@@ -150,3 +123,19 @@ Future<WebPageInfo> pageInfo(
|
||||
|
||||
return result.value;
|
||||
}
|
||||
|
||||
@Riverpod()
|
||||
AsyncValue<EquatableValue<Set<Uri>?>> websiteFeedProvider(
|
||||
Ref ref,
|
||||
String tabId,
|
||||
) {
|
||||
final tabState = ref.watch(tabStateProvider(tabId))!;
|
||||
final feeds = ref.watch(
|
||||
pageInfoProvider(
|
||||
tabState.url,
|
||||
isImageRequest: false,
|
||||
).select((value) => value.whenData((data) => EquatableValue(data.feeds))),
|
||||
);
|
||||
|
||||
return feeds;
|
||||
}
|
||||
|
||||
@@ -189,3 +189,92 @@ final class PageInfoFamily extends $Family
|
||||
@override
|
||||
String toString() => r'pageInfoProvider';
|
||||
}
|
||||
|
||||
@ProviderFor(websiteFeedProvider)
|
||||
const websiteFeedProviderProvider = WebsiteFeedProviderFamily._();
|
||||
|
||||
final class WebsiteFeedProviderProvider
|
||||
extends
|
||||
$FunctionalProvider<
|
||||
AsyncValue<EquatableValue<Set<Uri>?>>,
|
||||
AsyncValue<EquatableValue<Set<Uri>?>>,
|
||||
AsyncValue<EquatableValue<Set<Uri>?>>
|
||||
>
|
||||
with $Provider<AsyncValue<EquatableValue<Set<Uri>?>>> {
|
||||
const WebsiteFeedProviderProvider._({
|
||||
required WebsiteFeedProviderFamily super.from,
|
||||
required String super.argument,
|
||||
}) : super(
|
||||
retry: null,
|
||||
name: r'websiteFeedProviderProvider',
|
||||
isAutoDispose: true,
|
||||
dependencies: null,
|
||||
$allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
@override
|
||||
String debugGetCreateSourceHash() => _$websiteFeedProviderHash();
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return r'websiteFeedProviderProvider'
|
||||
''
|
||||
'($argument)';
|
||||
}
|
||||
|
||||
@$internal
|
||||
@override
|
||||
$ProviderElement<AsyncValue<EquatableValue<Set<Uri>?>>> $createElement(
|
||||
$ProviderPointer pointer,
|
||||
) => $ProviderElement(pointer);
|
||||
|
||||
@override
|
||||
AsyncValue<EquatableValue<Set<Uri>?>> create(Ref ref) {
|
||||
final argument = this.argument as String;
|
||||
return websiteFeedProvider(ref, argument);
|
||||
}
|
||||
|
||||
/// {@macro riverpod.override_with_value}
|
||||
Override overrideWithValue(AsyncValue<EquatableValue<Set<Uri>?>> value) {
|
||||
return $ProviderOverride(
|
||||
origin: this,
|
||||
providerOverride:
|
||||
$SyncValueProvider<AsyncValue<EquatableValue<Set<Uri>?>>>(value),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return other is WebsiteFeedProviderProvider && other.argument == argument;
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return argument.hashCode;
|
||||
}
|
||||
}
|
||||
|
||||
String _$websiteFeedProviderHash() =>
|
||||
r'b8ad81b883acee41f420af9aeca254fbd29b3107';
|
||||
|
||||
final class WebsiteFeedProviderFamily extends $Family
|
||||
with
|
||||
$FunctionalFamilyOverride<
|
||||
AsyncValue<EquatableValue<Set<Uri>?>>,
|
||||
String
|
||||
> {
|
||||
const WebsiteFeedProviderFamily._()
|
||||
: super(
|
||||
retry: null,
|
||||
name: r'websiteFeedProviderProvider',
|
||||
dependencies: null,
|
||||
$allTransitiveDependencies: null,
|
||||
isAutoDispose: true,
|
||||
);
|
||||
|
||||
WebsiteFeedProviderProvider call(String tabId) =>
|
||||
WebsiteFeedProviderProvider._(argument: tabId, from: this);
|
||||
|
||||
@override
|
||||
String toString() => r'websiteFeedProviderProvider';
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user