95 lines
2.3 KiB
Dart
95 lines
2.3 KiB
Dart
import '../../core/errors/app_exception.dart';
|
|
import '../models/post.dart';
|
|
import '../models/post_comment.dart';
|
|
import '../models/provider_health.dart';
|
|
import '../models/top_period_filter.dart';
|
|
import 'content_provider.dart';
|
|
|
|
class CustomProvider implements ContentProvider, CommentProvider {
|
|
CustomProvider(this._delegate);
|
|
|
|
final ContentProvider _delegate;
|
|
|
|
@override
|
|
String get id => _delegate.id;
|
|
@override
|
|
String get name => _delegate.name;
|
|
@override
|
|
String get baseUrl => _delegate.baseUrl;
|
|
|
|
@override
|
|
Future<List<Post>> searchPosts({
|
|
required List<String> tags,
|
|
required int page,
|
|
int limit = 50,
|
|
String? rating,
|
|
TopPeriodFilter topPeriod = TopPeriodFilter.none,
|
|
}) =>
|
|
_delegate.searchPosts(
|
|
tags: tags,
|
|
page: page,
|
|
limit: limit,
|
|
rating: rating,
|
|
topPeriod: topPeriod,
|
|
);
|
|
|
|
@override
|
|
Future<Post?> getPost(String id) => _delegate.getPost(id);
|
|
|
|
@override
|
|
Future<ProviderHealth> checkHealth() => _delegate.checkHealth();
|
|
|
|
@override
|
|
Future<List<PostComment>> getComments(String postId) {
|
|
final delegate = _delegate;
|
|
if (delegate is CommentProvider) {
|
|
return (delegate as CommentProvider).getComments(postId);
|
|
}
|
|
return Future.value(const []);
|
|
}
|
|
}
|
|
|
|
class UnsupportedCustomProvider implements ContentProvider {
|
|
UnsupportedCustomProvider({
|
|
required this.id,
|
|
required this.name,
|
|
required this.baseUrl,
|
|
required this.apiType,
|
|
});
|
|
|
|
@override
|
|
final String id;
|
|
@override
|
|
final String name;
|
|
@override
|
|
final String baseUrl;
|
|
final String apiType;
|
|
|
|
@override
|
|
Future<List<Post>> searchPosts({
|
|
required List<String> tags,
|
|
required int page,
|
|
int limit = 50,
|
|
String? rating,
|
|
TopPeriodFilter topPeriod = TopPeriodFilter.none,
|
|
}) async {
|
|
throw ProviderUnavailableException(
|
|
'Unsupported provider apiType: $apiType');
|
|
}
|
|
|
|
@override
|
|
Future<Post?> getPost(String id) async {
|
|
throw ProviderUnavailableException(
|
|
'Unsupported provider apiType: $apiType');
|
|
}
|
|
|
|
@override
|
|
Future<ProviderHealth> checkHealth() async => ProviderHealth(
|
|
providerId: id,
|
|
status: ProviderStatus.offline,
|
|
pingMs: 0,
|
|
lastCheckedAt: DateTime.now(),
|
|
errorMessage: 'Unsupported provider apiType: $apiType',
|
|
);
|
|
}
|