Files
2026-02-13 15:53:22 +01:00

83 lines
4.6 KiB
Dart

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);
}
}
}