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> getArticleListStream({int Function(ArticleModel, ArticleModel) sortCompare = defaultSortCompare}) async*{ List yieldArticles = []; List allWordpressArticles = []; List savedArticles = await DataConnector.getJsonEncodableList(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> getSearchResultListStream(String searchWord, {int Function(ArticleModel, ArticleModel) sortCompare = defaultSortCompare}) async*{ List 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> getOrganisationArticleListStream(RepresentedOrganisationModel organisation, {int Function(ArticleModel, ArticleModel) sortCompare = defaultSortCompare}) async*{ List yieldArticles = []; List allWordpressArticles = []; List savedArticles = await DataConnector.getJsonEncodableList(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> getFavoriteArticleListStream({int Function(ArticleModel, ArticleModel) sortCompare = defaultSortCompare}) async*{ var favoriteOrganisations = List.empty(growable: true); for (RepresentedOrganisationModel organisation in RepresentedOrganisationModel.values) { if(await organisation.favorized) favoriteOrganisations.add(organisation); } List yieldArticles = []; List allWordpressArticles = []; List savedArticles = await DataConnector.getJsonEncodableList(SystemStrings.dataFavoriteArticles, [], ArticleModel.fromJson); List 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); } } }