Add similar posts, provider hints and app icon

This commit is contained in:
2026-05-24 16:53:22 +03:00
parent 73a991e3a8
commit 52f2c6669c
17 changed files with 769 additions and 295 deletions
+38 -4
View File
@@ -97,8 +97,8 @@ class ProviderManager {
providers.where((provider) => provider.id == providerId).toList();
}
final posts = <Post>[];
final seen = <String>{};
final providerResults = <List<Post>>[];
for (final provider in providers) {
try {
final providerPosts = await provider.searchPosts(
@@ -108,9 +108,7 @@ class ProviderManager {
rating: rating,
topPeriod: topPeriod,
);
for (final post in providerPosts) {
if (seen.add(post.cacheKey)) posts.add(post);
}
providerResults.add(providerPosts);
await _repository.saveDiagnostics(
ProviderDiagnostics(
providerId: provider.id,
@@ -138,9 +136,45 @@ class ProviderManager {
);
}
}
final posts = providerId == null
? _interleaveProviderResults(providerResults, seen)
: _flattenProviderResults(providerResults, seen);
return Success(posts);
}
List<Post> _flattenProviderResults(
List<List<Post>> results, Set<String> seen) {
final posts = <Post>[];
for (final providerPosts in results) {
for (final post in providerPosts) {
if (seen.add(post.cacheKey)) posts.add(post);
}
}
return posts;
}
List<Post> _interleaveProviderResults(
List<List<Post>> results,
Set<String> seen,
) {
final posts = <Post>[];
var index = 0;
while (true) {
var added = false;
for (final providerPosts in results) {
if (index >= providerPosts.length) continue;
final post = providerPosts[index];
if (seen.add(post.cacheKey)) {
posts.add(post);
added = true;
}
}
if (!added && results.every((items) => index >= items.length)) break;
index++;
}
return posts;
}
Future<Result<List<PostComment>>> getComments(
String providerId,
String postId,