[ENTITY][Note][CONFIG] Use getListPartialCache for getReplies. Add feeds/cached_replies config entry to control how many replies get cached

This commit is contained in:
Hugo Sales 2022-02-27 21:50:42 +00:00
parent 85ce6bfd41
commit d5f90a1206
Signed by untrusted user: someonewithpc
GPG Key ID: 7D0C7EAFC9D835A0
2 changed files with 18 additions and 9 deletions

View File

@ -275,6 +275,7 @@ parameters:
feeds: feeds:
entries_per_page: 32 entries_per_page: 32
cached_replies: 8
plugin_tree_notes: plugin_tree_notes:
feed_replies: 3 feed_replies: 3

View File

@ -28,10 +28,10 @@ use App\Core\Cache;
use App\Core\DB\DB; use App\Core\DB\DB;
use App\Core\Entity; use App\Core\Entity;
use App\Core\Event; use App\Core\Event;
use function App\Core\I18n\_m;
use App\Core\Log; use App\Core\Log;
use App\Core\Router\Router; use App\Core\Router\Router;
use App\Core\VisibilityScope; use App\Core\VisibilityScope;
use App\Util\Common;
use App\Util\Exception\ClientException; use App\Util\Exception\ClientException;
use App\Util\Exception\NoSuchNoteException; use App\Util\Exception\NoSuchNoteException;
use App\Util\Formatting; use App\Util\Formatting;
@ -39,9 +39,10 @@ use Component\Avatar\Avatar;
use Component\Conversation\Entity\Conversation; use Component\Conversation\Entity\Conversation;
use Component\Language\Entity\Language; use Component\Language\Entity\Language;
use Component\Notification\Entity\Attention; use Component\Notification\Entity\Attention;
use DateTimeInterface;
use function mb_substr;
use const PREG_SPLIT_NO_EMPTY; use const PREG_SPLIT_NO_EMPTY;
use DateTimeInterface;
use function App\Core\I18n\_m;
use function mb_substr;
/** /**
* Entity for notes * Entity for notes
@ -406,13 +407,20 @@ class Note extends Entity
*/ */
public function getReplies(int $offset = 0, int $limit = null): array public function getReplies(int $offset = 0, int $limit = null): array
{ {
return Cache::getList(self::cacheKeys($this->getId())['replies'], return Cache::getListPartialCache(
fn () => DB::findBy(self::class, [ key: self::cacheKeys($this->getId())['replies'],
'reply_to' => $this->getId() calculate: function (int $limit, int $offset) {
], return DB::findBy(
order_by: ['created' => 'ASC', 'id' => 'ASC']), self::class,
['reply_to' => $this->getId()],
order_by: ['created' => 'ASC', 'id' => 'ASC'],
limit: $limit,
offset: $offset
);
},
max_cache_count: Common::config('feeds', 'cached_replies'),
left: $offset, left: $offset,
right: $limit right: $limit - $offset
); );
} }