49 lines
1.2 KiB
Dart
49 lines
1.2 KiB
Dart
import 'dart:convert';
|
|
|
|
import 'package:http/http.dart' as http;
|
|
import 'package:survive_app/data/endpoint.dart';
|
|
import 'package:survive_app/data/wikipedia/model.dart';
|
|
|
|
abstract class IWikipediaRepository {
|
|
Future<void> downloadArticles();
|
|
Future<List<WikiArticleModel>> queryArticles(WikiArticleQueryModel data);
|
|
}
|
|
|
|
class WikipediaRepository implements IWikipediaRepository {
|
|
@override
|
|
Future<void> downloadArticles() async {
|
|
final url = Uri.parse(WikipediaEndpoints.downloadArticles);
|
|
|
|
try {
|
|
final res = await http.get(url);
|
|
|
|
if (res.statusCode != 200) {
|
|
return Future.value();
|
|
}
|
|
} catch (e) {
|
|
return Future.value();
|
|
}
|
|
}
|
|
|
|
@override
|
|
Future<List<WikiArticleModel>> queryArticles(
|
|
WikiArticleQueryModel data,
|
|
) async {
|
|
final url = Uri.parse(WikipediaEndpoints.getAllArticles(data.title));
|
|
|
|
List<WikiArticleModel> articles = [];
|
|
try {
|
|
final res = await http.get(url);
|
|
final data = jsonDecode(res.body) as List<Map<String, String>>;
|
|
for (final articleMap in data) {
|
|
final a = WikiArticleModel.fromMap(articleMap);
|
|
articles.add(a);
|
|
}
|
|
} catch (e) {
|
|
return articles;
|
|
}
|
|
|
|
return articles;
|
|
}
|
|
}
|