Cache notifications

This commit is contained in:
Michael 2022-05-18 20:05:29 +00:00
parent 7d958e8804
commit 536ce232a7
2 changed files with 31 additions and 16 deletions

View File

@ -25,8 +25,13 @@ use Friendica\App\BaseURL;
use Friendica\BaseFactory; use Friendica\BaseFactory;
use Friendica\Capabilities\ICanCreateFromTableRow; use Friendica\Capabilities\ICanCreateFromTableRow;
use Friendica\Contact\LocalRelationship\Repository\LocalRelationship; use Friendica\Contact\LocalRelationship\Repository\LocalRelationship;
use Friendica\Content\Text\BBCode;
use Friendica\Content\Text\Plaintext; use Friendica\Content\Text\Plaintext;
use Friendica\Core\Cache\Enum\Duration;
use Friendica\Core\Cache\Capability\ICanCache;
use Friendica\Core\L10n; use Friendica\Core\L10n;
use Friendica\Core\System;
use Friendica\DI;
use Friendica\Model\Contact; use Friendica\Model\Contact;
use Friendica\Model\Post; use Friendica\Model\Post;
use Friendica\Model\Verb; use Friendica\Model\Verb;
@ -43,6 +48,8 @@ class Notification extends BaseFactory implements ICanCreateFromTableRow
private $l10n; private $l10n;
/** @var LocalRelationship */ /** @var LocalRelationship */
private $localRelationshipRepo; private $localRelationshipRepo;
/** @var ICanCache */
private $cache;
public function __construct(\Friendica\App\BaseURL $baseUrl, \Friendica\Core\L10n $l10n, \Friendica\Contact\LocalRelationship\Repository\LocalRelationship $localRelationshipRepo, LoggerInterface $logger) public function __construct(\Friendica\App\BaseURL $baseUrl, \Friendica\Core\L10n $l10n, \Friendica\Contact\LocalRelationship\Repository\LocalRelationship $localRelationshipRepo, LoggerInterface $logger)
{ {
@ -51,6 +58,7 @@ class Notification extends BaseFactory implements ICanCreateFromTableRow
$this->baseUrl = $baseUrl; $this->baseUrl = $baseUrl;
$this->l10n = $l10n; $this->l10n = $l10n;
$this->localRelationshipRepo = $localRelationshipRepo; $this->localRelationshipRepo = $localRelationshipRepo;
$this->cache = DI::cache(); // @todo Add the correct mechanism for class construction here
} }
public function createFromTableRow(array $row): Entity\Notification public function createFromTableRow(array $row): Entity\Notification
@ -107,6 +115,13 @@ class Notification extends BaseFactory implements ICanCreateFromTableRow
{ {
$message = []; $message = [];
$cachekey = 'Notification:' . $Notification->id;
$result = $this->cache->get($cachekey);
if (!is_null($result)) {
$this->logger->debug('Blubb-Cache', ['id' => $Notification->id, 'callstack' => System::callstack(20)]);
return $result;
}
$causer = $author = Contact::getById($Notification->actorId, ['id', 'name', 'url', 'contact-type', 'pending']); $causer = $author = Contact::getById($Notification->actorId, ['id', 'name', 'url', 'contact-type', 'pending']);
if (empty($causer)) { if (empty($causer)) {
$this->logger->info('Causer not found', ['contact' => $Notification->actorId]); $this->logger->info('Causer not found', ['contact' => $Notification->actorId]);
@ -170,11 +185,10 @@ class Notification extends BaseFactory implements ICanCreateFromTableRow
$link = $this->baseUrl . '/display/' . urlencode($link_item['guid']); $link = $this->baseUrl . '/display/' . urlencode($link_item['guid']);
$content = Plaintext::getPost($item, 70); $body = BBCode::toPlaintext($item['body'], false);
if (!empty($content['text'])) { $title = Plaintext::shorten($body, 70);
$title = '"' . trim(str_replace("\n", " ", $content['text'])) . '"'; if (!empty($title)) {
} else { $title = '"' . trim(str_replace("\n", " ", $title)) . '"';
$title = '';
} }
$this->logger->debug('Got verb and type', ['verb' => $Notification->verb, 'type' => $Notification->type, 'causer' => $causer['id'], 'author' => $author['id'], 'item' => $item['id'], 'uid' => $Notification->uid]); $this->logger->debug('Got verb and type', ['verb' => $Notification->verb, 'type' => $Notification->type, 'causer' => $causer['id'], 'author' => $author['id'], 'item' => $item['id'], 'uid' => $Notification->uid]);
@ -306,6 +320,8 @@ class Notification extends BaseFactory implements ICanCreateFromTableRow
'[url=' . $link . ']' . $title . '[/url]', '[url=' . $link . ']' . $title . '[/url]',
'[url=' . $author['url'] . ']' . $author['name'] . '[/url]'); '[url=' . $author['url'] . ']' . $author['name'] . '[/url]');
$message['link'] = $link; $message['link'] = $link;
$this->logger->debug('Blubb-Set', ['id' => $Notification->id, 'callstack' => System::callstack(20)]);
$this->cache->set($cachekey, $message, Duration::HOUR);
} else { } else {
$this->logger->debug('Unhandled notification', ['notification' => $Notification]); $this->logger->debug('Unhandled notification', ['notification' => $Notification]);
} }

View File

@ -23,6 +23,7 @@ namespace Friendica\Navigation\Notifications\Repository;
use Friendica\App\BaseURL; use Friendica\App\BaseURL;
use Friendica\BaseRepository; use Friendica\BaseRepository;
use Friendica\Content\Text\BBCode;
use Friendica\Content\Text\Plaintext; use Friendica\Content\Text\Plaintext;
use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\Config\Capability\IManageConfigValues;
use Friendica\Core\Hook; use Friendica\Core\Hook;
@ -301,11 +302,10 @@ class Notify extends BaseRepository
$item_post_type = Model\Item::postType($item, $l10n); $item_post_type = Model\Item::postType($item, $l10n);
$content = Plaintext::getPost($item, 70); $body = BBCode::toPlaintext($item['body'], false);
if (!empty($content['text'])) { $title = Plaintext::shorten($body, 70);
$title = '"' . trim(str_replace("\n", " ", $content['text'])) . '"'; if (!empty($title)) {
} else { $title = '"' . trim(str_replace("\n", " ", $title)) . '"';
$title = '';
} }
// First go for the general message // First go for the general message
@ -710,11 +710,10 @@ class Notify extends BaseRepository
return false; return false;
} }
$content = Plaintext::getPost($item, 70); $body = BBCode::toPlaintext($item['body'], false);
if (!empty($content['text'])) { $title = Plaintext::shorten($body, 70);
$title = '"' . trim(str_replace("\n", " ", $content['text'])) . '"'; if (!empty($title)) {
} else { $title = '"' . trim(str_replace("\n", " ", $title)) . '"';
$title = $item['title'];
} }
// Some mail software relies on subject field for threading. // Some mail software relies on subject field for threading.