mirror of
https://github.com/twonlyapp/twonly-app.git
synced 2026-07-18 01:14:07 +00:00
filter annouced users
This commit is contained in:
parent
07037537e1
commit
511490b649
1 changed files with 42 additions and 13 deletions
|
|
@ -1,4 +1,5 @@
|
||||||
import 'package:drift/drift.dart';
|
import 'package:drift/drift.dart';
|
||||||
|
import 'package:twonly/locator.dart';
|
||||||
import 'package:twonly/src/database/tables/contacts.table.dart';
|
import 'package:twonly/src/database/tables/contacts.table.dart';
|
||||||
import 'package:twonly/src/database/tables/user_discovery.table.dart';
|
import 'package:twonly/src/database/tables/user_discovery.table.dart';
|
||||||
import 'package:twonly/src/database/twonly.db.dart';
|
import 'package:twonly/src/database/twonly.db.dart';
|
||||||
|
|
@ -184,23 +185,51 @@ class UserDiscoveryDao extends DatabaseAccessor<TwonlyDB>
|
||||||
results[user]!.add(relationData);
|
results[user]!.add(relationData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final threshold = userService.currentUser.userDiscoveryThreshold;
|
||||||
|
results.removeWhere((user, relations) => relations.length < threshold);
|
||||||
|
|
||||||
return results;
|
return results;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
Stream<int> watchNewAnnouncementsWithDataCount() {
|
Stream<int> watchNewAnnouncementsWithDataCount() {
|
||||||
final countExp = userDiscoveryAnnouncedUsers.announcedUserId.count();
|
final announcedContact = alias(contacts, 'announcedContact');
|
||||||
|
final query =
|
||||||
|
select(userDiscoveryAnnouncedUsers).join([
|
||||||
|
innerJoin(
|
||||||
|
userDiscoveryUserRelations,
|
||||||
|
userDiscoveryUserRelations.announcedUserId.equalsExp(
|
||||||
|
userDiscoveryAnnouncedUsers.announcedUserId,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
leftOuterJoin(
|
||||||
|
announcedContact,
|
||||||
|
announcedContact.userId.equalsExp(
|
||||||
|
userDiscoveryAnnouncedUsers.announcedUserId,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
])..where(
|
||||||
|
// Filters: Has a username AND has not been shown to the user yet AND is not an existing contact
|
||||||
|
userDiscoveryAnnouncedUsers.username.isNotNull() &
|
||||||
|
userDiscoveryAnnouncedUsers.wasShownToTheUser.equals(false) &
|
||||||
|
userDiscoveryAnnouncedUsers.isHidden.equals(false) &
|
||||||
|
(announcedContact.userId.isNull() |
|
||||||
|
announcedContact.deletedByUser.equals(true)),
|
||||||
|
);
|
||||||
|
|
||||||
final query = selectOnly(userDiscoveryAnnouncedUsers)
|
return query.watch().map((rows) {
|
||||||
..addColumns([countExp])
|
final relationCounts = <int, int>{};
|
||||||
..where(
|
for (final row in rows) {
|
||||||
// Filters: Has a username AND has not been shown to the user yet
|
final announcedUserId = row
|
||||||
userDiscoveryAnnouncedUsers.username.isNotNull() &
|
.readTable(userDiscoveryAnnouncedUsers)
|
||||||
userDiscoveryAnnouncedUsers.wasShownToTheUser.equals(false) &
|
.announcedUserId;
|
||||||
userDiscoveryAnnouncedUsers.isHidden.equals(false),
|
relationCounts[announcedUserId] =
|
||||||
);
|
(relationCounts[announcedUserId] ?? 0) + 1;
|
||||||
|
}
|
||||||
|
|
||||||
return query.watchSingle().map((row) => row.read(countExp) ?? 0);
|
final threshold = userService.currentUser.userDiscoveryThreshold;
|
||||||
|
return relationCounts.values.where((count) => count >= threshold).length;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> markAllValidAnnouncedUsersAsShown() async {
|
Future<void> markAllValidAnnouncedUsersAsShown() async {
|
||||||
|
|
@ -235,9 +264,9 @@ class UserDiscoveryDao extends DatabaseAccessor<TwonlyDB>
|
||||||
}
|
}
|
||||||
|
|
||||||
Stream<UserDiscoveryAnnouncedUser?> watchAnnouncedUser(int id) {
|
Stream<UserDiscoveryAnnouncedUser?> watchAnnouncedUser(int id) {
|
||||||
return (select(userDiscoveryAnnouncedUsers)
|
return (select(
|
||||||
..where((tbl) => tbl.announcedUserId.equals(id)))
|
userDiscoveryAnnouncedUsers,
|
||||||
.watchSingleOrNull();
|
)..where((tbl) => tbl.announcedUserId.equals(id))).watchSingleOrNull();
|
||||||
}
|
}
|
||||||
|
|
||||||
Stream<List<UserDiscoveryAnnouncedUser>> watchAllAnnouncedUsers() =>
|
Stream<List<UserDiscoveryAnnouncedUser>> watchAllAnnouncedUsers() =>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue