better feed fetching

This commit is contained in:
Fabian Freund
2025-11-05 07:58:06 +01:00
parent 2bfb3fdf87
commit 2edfa7251b
3 changed files with 126 additions and 49 deletions
@@ -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;
}