diff --git a/lib/AP.php b/lib/AP.php index 5db1eabc..80859eae 100644 --- a/lib/AP.php +++ b/lib/AP.php @@ -73,6 +73,7 @@ use OCA\Social\Model\ActivityPub\Object\Image; use OCA\Social\Model\ActivityPub\Object\Note; use OCA\Social\Model\ActivityPub\Internal\SocialAppNotification; use OCA\Social\Model\ActivityPub\Object\Tombstone; +use OCA\Social\Model\ActivityPub\Stream; use OCA\Social\Service\ConfigService; use OCP\AppFramework\QueryException; @@ -317,6 +318,10 @@ class AP { $item = new SocialAppNotification(); break; + case Stream::TYPE: + $item = new Stream(); + break; + case Person::TYPE: $item = new Person(); break; diff --git a/lib/Db/StreamRequest.php b/lib/Db/StreamRequest.php index 1555c19a..592a3389 100644 --- a/lib/Db/StreamRequest.php +++ b/lib/Db/StreamRequest.php @@ -473,7 +473,7 @@ class StreamRequest extends StreamRequestBuilder { $streams = []; $cursor = $qb->execute(); while ($data = $cursor->fetch()) { - $streams[] = $this->parseStreamSelectSql($data); + $streams[] = $this->parseStreamSelectSql($data, Note::TYPE); } $cursor->closeCursor(); diff --git a/lib/Db/StreamRequestBuilder.php b/lib/Db/StreamRequestBuilder.php index f4cbbe61..bfeeff68 100644 --- a/lib/Db/StreamRequestBuilder.php +++ b/lib/Db/StreamRequestBuilder.php @@ -32,6 +32,7 @@ namespace OCA\Social\Db; use daita\MySmallPhpTools\Traits\TArrayTools; use Doctrine\DBAL\Query\QueryBuilder; +use OCA\Social\AP; use OCA\Social\Exceptions\InvalidResourceException; use OCA\Social\Model\ActivityPub\ACore; use OCA\Social\Model\ActivityPub\Actor\Person; @@ -385,11 +386,15 @@ class StreamRequestBuilder extends CoreRequestBuilder { /** * @param array $data + * @param string $as * * @return Stream + * @throws ItemUnknownException + * @throws SocialAppConfigException */ - protected function parseStreamSelectSql($data): Stream { - $item = new Stream(); + protected function parseStreamSelectSql(array $data, string $as = Stream::TYPE): Stream { + /** @var Stream $item */ + $item = AP::$activityPub->getItemFromType($as); $item->importFromDatabase($data); $instances = json_decode($this->get('instances', $data, '[]'), true); diff --git a/lib/Model/ActivityPub/Stream.php b/lib/Model/ActivityPub/Stream.php index 8c40d0bf..d961f78c 100644 --- a/lib/Model/ActivityPub/Stream.php +++ b/lib/Model/ActivityPub/Stream.php @@ -41,6 +41,9 @@ use OCA\Social\Model\StreamAction; class Stream extends ACore implements JsonSerializable { + const TYPE = 'Stream'; + + const TYPE_PUBLIC = 'public'; const TYPE_UNLISTED = 'unlisted'; const TYPE_FOLLOWERS = 'followers';