initial
This commit is contained in:
83
lib/appflow/controller/articles.dart
Normal file
83
lib/appflow/controller/articles.dart
Normal file
@@ -0,0 +1,83 @@
|
||||
import 'package:hiddingsel_app/appflow/controller/network/wordpress.dart';
|
||||
import 'package:hiddingsel_app/appflow/model/articles.dart';
|
||||
import 'package:hiddingsel_app/appflow/model/represented_organisations.dart';
|
||||
import 'package:hiddingsel_app/constants/constant.dart';
|
||||
|
||||
import '../../services/storage.dart';
|
||||
|
||||
class ArticleController {
|
||||
|
||||
static int defaultSortCompare(ArticleModel a, ArticleModel b) => b.publishedAt.compareTo(a.publishedAt);
|
||||
|
||||
static Stream<List<ArticleModel>> getArticleListStream({int Function(ArticleModel, ArticleModel) sortCompare = defaultSortCompare}) async*{
|
||||
|
||||
List<ArticleModel> yieldArticles = [];
|
||||
List<ArticleModel> allWordpressArticles = [];
|
||||
List<ArticleModel> savedArticles = await DataConnector.getJsonEncodableList<ArticleModel>(SystemStrings.dataArticles, [], ArticleModel.fromJson);
|
||||
yield yieldArticles..addAll(savedArticles)..sort(sortCompare);
|
||||
|
||||
for (var page = 0, perPage = 10; page < 10; page++) {
|
||||
var wordpressArticles = await WordpressController.getArticles(page, perPage);
|
||||
var newWordpressArticles = wordpressArticles.where((a) => !yieldArticles.contains(a)).toList();
|
||||
if (newWordpressArticles.isNotEmpty) {
|
||||
yield yieldArticles..addAll(newWordpressArticles)..sort(sortCompare);
|
||||
}
|
||||
allWordpressArticles = allWordpressArticles..addAll(wordpressArticles)..sort(sortCompare);
|
||||
DataConnector.saveJsonEncodable(SystemStrings.dataArticles, allWordpressArticles);
|
||||
}
|
||||
}
|
||||
|
||||
static Stream<List<ArticleModel>> getSearchResultListStream(String searchWord, {int Function(ArticleModel, ArticleModel) sortCompare = defaultSortCompare}) async*{
|
||||
|
||||
List<ArticleModel> yieldArticles = [];
|
||||
for (var page = 0, perPage = 10; page < 3; page++) {
|
||||
var wordpressArticles = await WordpressController.searchArticles(page, perPage, searchWord);
|
||||
var newWordpressArticles = wordpressArticles.where((a) => !yieldArticles.contains(a)).toList();
|
||||
if (newWordpressArticles.isNotEmpty) {
|
||||
yield yieldArticles..addAll(newWordpressArticles)..sort(sortCompare);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static Stream<List<ArticleModel>> getOrganisationArticleListStream(RepresentedOrganisationModel organisation, {int Function(ArticleModel, ArticleModel) sortCompare = defaultSortCompare}) async*{
|
||||
|
||||
List<ArticleModel> yieldArticles = [];
|
||||
List<ArticleModel> allWordpressArticles = [];
|
||||
List<ArticleModel> savedArticles = await DataConnector.getJsonEncodableList<ArticleModel>(SystemStrings.dataArticles + organisation.id, [], ArticleModel.fromJson);
|
||||
yield yieldArticles..addAll(savedArticles)..sort(sortCompare);
|
||||
|
||||
for (var page = 0, perPage = 10; page < 10; page++) {
|
||||
var wordpressArticles = await WordpressController.getArticlesFromOrganisations(page, perPage, [organisation]);
|
||||
var newWordpressArticles = wordpressArticles.where((a) => !yieldArticles.contains(a)).toList();
|
||||
if (newWordpressArticles.isNotEmpty) {
|
||||
yield yieldArticles..addAll(newWordpressArticles)..sort(sortCompare);
|
||||
}
|
||||
allWordpressArticles = allWordpressArticles..addAll(wordpressArticles)..sort(sortCompare);
|
||||
DataConnector.saveJsonEncodable(SystemStrings.dataArticles + organisation.id, allWordpressArticles);
|
||||
}
|
||||
}
|
||||
|
||||
static Stream<List<ArticleModel>> getFavoriteArticleListStream({int Function(ArticleModel, ArticleModel) sortCompare = defaultSortCompare}) async*{
|
||||
|
||||
var favoriteOrganisations = List<RepresentedOrganisationModel>.empty(growable: true);
|
||||
for (RepresentedOrganisationModel organisation in RepresentedOrganisationModel.values) {
|
||||
if(await organisation.favorized) favoriteOrganisations.add(organisation);
|
||||
}
|
||||
|
||||
List<ArticleModel> yieldArticles = [];
|
||||
List<ArticleModel> allWordpressArticles = [];
|
||||
List<ArticleModel> savedArticles = await DataConnector.getJsonEncodableList<ArticleModel>(SystemStrings.dataFavoriteArticles, [], ArticleModel.fromJson);
|
||||
List<ArticleModel> savedFavoriteArticles = savedArticles.where((e) => e.categories.any((orga) => favoriteOrganisations.contains(orga))).toList();
|
||||
yield yieldArticles..addAll(savedFavoriteArticles)..sort(sortCompare);
|
||||
|
||||
for (var page = 0, perPage = 10; page < 10; page++) {
|
||||
var wordpressArticles = await WordpressController.getArticlesFromOrganisations(page, perPage, favoriteOrganisations);
|
||||
var newWordpressArticles = wordpressArticles.where((a) => !yieldArticles.contains(a)).toList();
|
||||
if (newWordpressArticles.isNotEmpty) {
|
||||
yield yieldArticles..addAll(newWordpressArticles)..sort(sortCompare);
|
||||
}
|
||||
allWordpressArticles = allWordpressArticles..addAll(wordpressArticles)..sort(sortCompare);
|
||||
DataConnector.saveJsonEncodable(SystemStrings.dataFavoriteArticles, allWordpressArticles);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user