78 lines
2.1 KiB
Dart
78 lines
2.1 KiB
Dart
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
import 'package:worldhopper/models/opds_feed.dart';
|
|
import 'package:worldhopper/repositories/opds_repository.dart';
|
|
|
|
/// Provider for OPDSRepository instance
|
|
final opdsRepositoryProvider = Provider<OPDSRepository>((ref) {
|
|
return OPDSRepository();
|
|
});
|
|
|
|
/// Provider for fetching a feed from a server
|
|
final opdsFeedProvider = FutureProvider.family<OPDSFeed, FeedRequest>(
|
|
(ref, request) async {
|
|
final repository = ref.watch(opdsRepositoryProvider);
|
|
return await repository.fetchFeed(
|
|
request.serverId,
|
|
request.url,
|
|
forceRefresh: request.forceRefresh,
|
|
);
|
|
},
|
|
);
|
|
|
|
/// Provider for fetching the root feed of a server
|
|
final opdsRootFeedProvider = FutureProvider.family<OPDSFeed, RootFeedRequest>(
|
|
(ref, request) async {
|
|
final repository = ref.watch(opdsRepositoryProvider);
|
|
return await repository.fetchRootFeed(
|
|
request.serverId,
|
|
forceRefresh: request.forceRefresh,
|
|
);
|
|
},
|
|
);
|
|
|
|
/// Request object for fetching feeds
|
|
class FeedRequest {
|
|
final String serverId;
|
|
final String url;
|
|
final bool forceRefresh;
|
|
|
|
const FeedRequest({
|
|
required this.serverId,
|
|
required this.url,
|
|
this.forceRefresh = false,
|
|
});
|
|
|
|
@override
|
|
bool operator ==(Object other) =>
|
|
identical(this, other) ||
|
|
other is FeedRequest &&
|
|
runtimeType == other.runtimeType &&
|
|
serverId == other.serverId &&
|
|
url == other.url &&
|
|
forceRefresh == other.forceRefresh;
|
|
|
|
@override
|
|
int get hashCode => serverId.hashCode ^ url.hashCode ^ forceRefresh.hashCode;
|
|
}
|
|
|
|
/// Request object for fetching root feeds
|
|
class RootFeedRequest {
|
|
final String serverId;
|
|
final bool forceRefresh;
|
|
|
|
const RootFeedRequest({
|
|
required this.serverId,
|
|
this.forceRefresh = false,
|
|
});
|
|
|
|
@override
|
|
bool operator ==(Object other) =>
|
|
identical(this, other) ||
|
|
other is RootFeedRequest &&
|
|
runtimeType == other.runtimeType &&
|
|
serverId == other.serverId &&
|
|
forceRefresh == other.forceRefresh;
|
|
|
|
@override
|
|
int get hashCode => serverId.hashCode ^ forceRefresh.hashCode;
|
|
}
|