112 lines
3.2 KiB
Dart
112 lines
3.2 KiB
Dart
import '../../core/http/dio_client.dart';
|
|
import '../models/content_provider_config.dart';
|
|
import 'content_provider.dart';
|
|
import 'custom_provider.dart';
|
|
import 'danbooru_provider.dart';
|
|
import 'e621_provider.dart';
|
|
import 'gelbooru_provider.dart';
|
|
import 'kemono_provider.dart';
|
|
import 'moebooru_provider.dart';
|
|
import 'pawchive_provider.dart';
|
|
import 'realbooru_html_provider.dart';
|
|
import 'rule34_provider.dart';
|
|
import 'rule34_paheal_provider.dart';
|
|
|
|
class ProviderFactory {
|
|
ContentProvider create(ContentProviderConfig config) {
|
|
final headers = Map<String, String>.from(config.customHeaders)
|
|
..removeWhere((key, _) => key.startsWith('query.'));
|
|
final queryParameters = {
|
|
for (final entry in config.customHeaders.entries)
|
|
if (entry.key.startsWith('query.') && entry.value.trim().isNotEmpty)
|
|
entry.key.substring('query.'.length): entry.value.trim(),
|
|
};
|
|
final client = DioClient(
|
|
baseUrl: config.baseUrl,
|
|
timeout: Duration(seconds: config.timeoutSeconds),
|
|
headers: headers,
|
|
);
|
|
switch (config.apiType.toLowerCase()) {
|
|
case 'gelbooru':
|
|
return GelbooruProvider(
|
|
id: config.id,
|
|
name: config.name,
|
|
baseUrl: config.baseUrl,
|
|
dioClient: client,
|
|
queryParameters: queryParameters,
|
|
);
|
|
case 'rule34':
|
|
return Rule34Provider(
|
|
id: config.id,
|
|
name: config.name,
|
|
baseUrl: config.baseUrl,
|
|
dioClient: client,
|
|
queryParameters: queryParameters,
|
|
);
|
|
case 'paheal':
|
|
case 'rule34_paheal':
|
|
return Rule34PahealProvider(
|
|
id: config.id,
|
|
name: config.name,
|
|
baseUrl: config.baseUrl,
|
|
dioClient: client,
|
|
);
|
|
case 'realbooru_html':
|
|
return RealbooruHtmlProvider(
|
|
id: config.id,
|
|
name: config.name,
|
|
baseUrl: config.baseUrl,
|
|
dioClient: client,
|
|
);
|
|
case 'danbooru':
|
|
return DanbooruProvider(
|
|
id: config.id,
|
|
name: config.name,
|
|
baseUrl: config.baseUrl,
|
|
dioClient: client,
|
|
queryParameters: queryParameters,
|
|
);
|
|
case 'moebooru':
|
|
return MoebooruProvider(
|
|
id: config.id,
|
|
name: config.name,
|
|
baseUrl: config.baseUrl,
|
|
dioClient: client,
|
|
queryParameters: queryParameters,
|
|
);
|
|
case 'e621':
|
|
return E621Provider(
|
|
id: config.id,
|
|
name: config.name,
|
|
baseUrl: config.baseUrl,
|
|
dioClient: client,
|
|
queryParameters: queryParameters,
|
|
);
|
|
case 'kemono':
|
|
case 'coomer':
|
|
return KemonoProvider(
|
|
id: config.id,
|
|
name: config.name,
|
|
baseUrl: config.baseUrl,
|
|
dioClient: client,
|
|
queryParameters: queryParameters,
|
|
);
|
|
case 'pawchive':
|
|
return PawchiveProvider(
|
|
id: config.id,
|
|
name: config.name,
|
|
baseUrl: config.baseUrl,
|
|
dioClient: client,
|
|
queryParameters: queryParameters,
|
|
);
|
|
default:
|
|
return UnsupportedCustomProvider(
|
|
id: config.id,
|
|
name: config.name,
|
|
baseUrl: config.baseUrl,
|
|
apiType: config.apiType,
|
|
);
|
|
}
|
|
}
|
|
}
|