aboutsummaryrefslogtreecommitdiffhomepage
path: root/Digitigrade/Timeline
diff options
context:
space:
mode:
Diffstat (limited to 'Digitigrade/Timeline')
-rw-r--r--Digitigrade/Timeline/HomeTimeline.php11
-rw-r--r--Digitigrade/Timeline/Timeline.php23
2 files changed, 30 insertions, 4 deletions
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 @@
<?php
namespace Digitigrade\Timeline;
+use Digitigrade\Model\Note;
use Digitigrade\Model\UserAccount;
use Digitigrade\Model\HomeTimelineItem;
@@ -19,9 +20,13 @@ class HomeTimeline extends Timeline {
}
public function getItemsSince(\DateTimeInterface $when, ?int $limit = null, int $offset = 0): array {
- return array_map(
- fn(HomeTimelineItem $hti) => $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 @@
<?php
namespace Digitigrade\Timeline;
+use Digitigrade\Model\Note;
+use Digitigrade\Model\UserAccount;
+
abstract class Timeline {
// TODO: currently making this number up. probably should be modifiable somewhere
private const RESULTS_PER_PAGE = 50;
@@ -11,7 +14,25 @@ abstract class Timeline {
* @return TimelineItem[]
*/
public function getPage(int $page = 0): array {
- return $this->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;
+ });
}
/**