]> git.mxchange.org Git - friendica.git/commitdiff
Cache notifications
authorMichael <heluecht@pirati.ca>
Wed, 18 May 2022 20:05:29 +0000 (20:05 +0000)
committerMichael <heluecht@pirati.ca>
Wed, 18 May 2022 20:05:29 +0000 (20:05 +0000)
src/Navigation/Notifications/Factory/Notification.php
src/Navigation/Notifications/Repository/Notify.php

index ea74357c03c79d1553d473e3ee750f802b34a604..84db494e53dc92149ca653b39f9ea38306de4f63 100644 (file)
@@ -25,8 +25,13 @@ use Friendica\App\BaseURL;
 use Friendica\BaseFactory;
 use Friendica\Capabilities\ICanCreateFromTableRow;
 use Friendica\Contact\LocalRelationship\Repository\LocalRelationship;
+use Friendica\Content\Text\BBCode;
 use Friendica\Content\Text\Plaintext;
+use Friendica\Core\Cache\Enum\Duration;
+use Friendica\Core\Cache\Capability\ICanCache;
 use Friendica\Core\L10n;
+use Friendica\Core\System;
+use Friendica\DI;
 use Friendica\Model\Contact;
 use Friendica\Model\Post;
 use Friendica\Model\Verb;
@@ -43,6 +48,8 @@ class Notification extends BaseFactory implements ICanCreateFromTableRow
        private $l10n;
        /** @var LocalRelationship */
        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)
        {
@@ -51,6 +58,7 @@ class Notification extends BaseFactory implements ICanCreateFromTableRow
                $this->baseUrl = $baseUrl;
                $this->l10n = $l10n;
                $this->localRelationshipRepo = $localRelationshipRepo;
+               $this->cache = DI::cache(); // @todo Add the correct mechanism for class construction here
        }
 
        public function createFromTableRow(array $row): Entity\Notification
@@ -107,6 +115,13 @@ class Notification extends BaseFactory implements ICanCreateFromTableRow
        {
                $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']);
                if (empty($causer)) {
                        $this->logger->info('Causer not found', ['contact' => $Notification->actorId]);
@@ -132,7 +147,7 @@ class Notification extends BaseFactory implements ICanCreateFromTableRow
                                $this->logger->info('Thread is ignored', ['parent-uri-id' => $Notification->parentUriId, 'type' => $Notification->type]);
                                return $message;
                        }
-       
+
                        if (in_array($Notification->type, [Post\UserNotification::TYPE_THREAD_COMMENT, Post\UserNotification::TYPE_COMMENT_PARTICIPATION, Post\UserNotification::TYPE_ACTIVITY_PARTICIPATION, Post\UserNotification::TYPE_EXPLICIT_TAGGED])) {
                                $item = Post::selectFirst([], ['uri-id' => $Notification->parentUriId, 'uid' => [0, $Notification->uid]], ['order' => ['uid' => true]]);
                                if (empty($item)) {
@@ -170,11 +185,10 @@ class Notification extends BaseFactory implements ICanCreateFromTableRow
 
                        $link = $this->baseUrl . '/display/' . urlencode($link_item['guid']);
 
-                       $content = Plaintext::getPost($item, 70);
-                       if (!empty($content['text'])) {
-                               $title = '"' . trim(str_replace("\n", " ", $content['text'])) . '"';
-                       } else {
-                               $title = '';
+                       $body = BBCode::toPlaintext($item['body'], false);
+                       $title = Plaintext::shorten($body, 70);
+                       if (!empty($title)) {
+                               $title = '"' . trim(str_replace("\n", " ", $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]);
@@ -306,6 +320,8 @@ class Notification extends BaseFactory implements ICanCreateFromTableRow
                                '[url=' . $link . ']' . $title . '[/url]',
                                '[url=' . $author['url'] . ']' . $author['name'] . '[/url]');
                        $message['link'] = $link;
+                       $this->logger->debug('Blubb-Set', ['id' => $Notification->id, 'callstack' => System::callstack(20)]);
+                       $this->cache->set($cachekey, $message, Duration::HOUR);
                } else {
                        $this->logger->debug('Unhandled notification', ['notification' => $Notification]);
                }
index 9773b6446aed29d2275e9e2f78ed10cc481f8685..c114375be7775331687318c9106dafa4ac8682cd 100644 (file)
@@ -23,6 +23,7 @@ namespace Friendica\Navigation\Notifications\Repository;
 
 use Friendica\App\BaseURL;
 use Friendica\BaseRepository;
+use Friendica\Content\Text\BBCode;
 use Friendica\Content\Text\Plaintext;
 use Friendica\Core\Config\Capability\IManageConfigValues;
 use Friendica\Core\Hook;
@@ -301,11 +302,10 @@ class Notify extends BaseRepository
 
                                $item_post_type = Model\Item::postType($item, $l10n);
 
-                               $content = Plaintext::getPost($item, 70);
-                               if (!empty($content['text'])) {
-                                       $title = '"' . trim(str_replace("\n", " ", $content['text'])) . '"';
-                               } else {
-                                       $title = '';
+                               $body = BBCode::toPlaintext($item['body'], false);
+                               $title = Plaintext::shorten($body, 70);
+                               if (!empty($title)) {
+                                       $title = '"' . trim(str_replace("\n", " ", $title)) . '"';
                                }
 
                                // First go for the general message
@@ -710,11 +710,10 @@ class Notify extends BaseRepository
                        return false;
                }
 
-               $content = Plaintext::getPost($item, 70);
-               if (!empty($content['text'])) {
-                       $title = '"' . trim(str_replace("\n", " ", $content['text'])) . '"';
-               } else {
-                       $title = $item['title'];
+               $body = BBCode::toPlaintext($item['body'], false);
+               $title = Plaintext::shorten($body, 70);
+               if (!empty($title)) {
+                       $title = '"' . trim(str_replace("\n", " ", $title)) . '"';
                }
 
                // Some mail software relies on subject field for threading.