From bc9c83b6c33d460a574fbeb764c23bfbe941b4c0 Mon Sep 17 00:00:00 2001 From: winter Date: Thu, 23 Jan 2025 18:55:52 +0000 Subject: implement blocking users it doesn't work yet for notifications! but i think i got it in most other places --- Digitigrade/Timeline/HomeTimeline.php | 11 ++++++++--- Digitigrade/Timeline/Timeline.php | 23 ++++++++++++++++++++++- 2 files changed, 30 insertions(+), 4 deletions(-) (limited to 'Digitigrade/Timeline') diff --git a/Digitigrade/Timeline/HomeTimeline.php b/Digitigrade/Timeline/HomeTimeline.php index 0867541..9f420e5 100644 --- a/Digitigrade/Timeline/HomeTimeline.php +++ b/Digitigrade/Timeline/HomeTimeline.php @@ -1,6 +1,7 @@ $hti->toTimelineItem(), - HomeTimelineItem::findAllForUser($this->user, $limit, $offset, $when) + return array_filter( + array_map( + fn(HomeTimelineItem $hti) => $hti->toTimelineItem(), + HomeTimelineItem::findAllForUser($this->user, $limit, $offset, $when) + ), + // filter out notes from blocked users + fn(TimelineItem $item) => !($item instanceof Note && $this->user->actor->block($item->author)) ); } } \ No newline at end of file diff --git a/Digitigrade/Timeline/Timeline.php b/Digitigrade/Timeline/Timeline.php index b3def28..f53eaa4 100644 --- a/Digitigrade/Timeline/Timeline.php +++ b/Digitigrade/Timeline/Timeline.php @@ -1,6 +1,9 @@ getItems(self::RESULTS_PER_PAGE, self::RESULTS_PER_PAGE * $page); + return $this->getItemsFiltered(self::RESULTS_PER_PAGE, self::RESULTS_PER_PAGE * $page); + } + + /** + * @return TimelineItem[] + */ + private function getItemsFiltered(int $limit, int $offset): array { + $user = UserAccount::findByCurrentSession(); + $items = $this->getItems($limit, $offset); + if ($user == null) + return $items; + // filter out notes from blocked users + return array_filter($items, function (TimelineItem $item) use ($user) { + $obj = $item->getObject(); + if ($obj instanceof Note && $user->actor->blocks($obj->author)) { + return false; + } + return true; + }); } /** -- cgit v1.3