Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/spreed.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorJoas Schilling <213943+nickvergessen@users.noreply.github.com>2021-12-07 14:02:42 +0300
committerGitHub <noreply@github.com>2021-12-07 14:02:42 +0300
commit07048b2709890c166eb59f3683c0c9118902f70e (patch)
treee4f294f3058d3304a8eb586a2a002f3ac48a5a3d /lib
parent3635f89b21a6af0eb376efb44de7dfa993671188 (diff)
parent030d59719ac3d3c4722bdc9035574d777f502687 (diff)
Merge pull request #6625 from nextcloud/bugfix/6621/recognize-shares-as-unread-messages
Recognize voice messages, object and file shares as unread messages
Diffstat (limited to 'lib')
-rw-r--r--lib/Chat/ChatManager.php15
-rw-r--r--lib/Chat/CommentsManager.php26
-rw-r--r--lib/Chat/MessageParser.php7
3 files changed, 44 insertions, 4 deletions
diff --git a/lib/Chat/ChatManager.php b/lib/Chat/ChatManager.php
index ec38cc887..92fd17fe4 100644
--- a/lib/Chat/ChatManager.php
+++ b/lib/Chat/ChatManager.php
@@ -64,7 +64,8 @@ class ChatManager {
public const GEO_LOCATION_VALIDATOR = '/^geo:-?\d{1,2}(\.\d+)?,-?\d{1,3}(\.\d+)?(,-?\d+(\.\d+)?)?(;crs=wgs84)?(;u=\d+(\.\d+)?)?$/i';
- /** @var ICommentsManager */
+ /** @var ICommentsManager|CommentsManager
+ */
private $commentsManager;
/** @var IEventDispatcher */
private $dispatcher;
@@ -141,7 +142,15 @@ class ChatManager {
if ($parentId !== null) {
$comment->setParentId((string) $parentId);
}
- $comment->setVerb('system');
+
+ $messageDecoded = json_decode($message, true);
+ $messageType = $messageDecoded['message'] ?? '';
+
+ if ($messageType === 'object_shared' || $messageType === 'file_shared') {
+ $comment->setVerb('object_shared');
+ } else {
+ $comment->setVerb('system');
+ }
$event = new ChatEvent($chat, $comment);
$this->dispatcher->dispatch(self::EVENT_BEFORE_SYSTEM_MESSAGE_SEND, $event);
@@ -359,7 +368,7 @@ class ChatManager {
$key = $chat->getId() . '-' . $lastReadMessage;
$unreadCount = $this->unreadCountCache->get($key);
if ($unreadCount === null) {
- $unreadCount = $this->commentsManager->getNumberOfCommentsForObjectSinceComment('chat', (string) $chat->getId(), $lastReadMessage, 'comment');
+ $unreadCount = $this->commentsManager->getNumberOfCommentsWithVerbsForObjectSinceComment('chat', (string) $chat->getId(), $lastReadMessage, ['comment', 'object_shared']);
$this->unreadCountCache->set($key, $unreadCount, 1800);
}
return $unreadCount;
diff --git a/lib/Chat/CommentsManager.php b/lib/Chat/CommentsManager.php
index 12a758e86..8ad4f849b 100644
--- a/lib/Chat/CommentsManager.php
+++ b/lib/Chat/CommentsManager.php
@@ -26,6 +26,7 @@ namespace OCA\Talk\Chat;
use OC\Comments\Comment;
use OC\Comments\Manager;
use OCP\Comments\IComment;
+use OCP\DB\QueryBuilder\IQueryBuilder;
class CommentsManager extends Manager {
/**
@@ -39,4 +40,29 @@ class CommentsManager extends Manager {
$comment->setMessage($message, ChatManager::MAX_CHAT_LENGTH);
return $comment;
}
+
+ /**
+ * TODO Remove when server version with https://github.com/nextcloud/server/pull/29921 is required
+ *
+ * @param string $objectType
+ * @param string $objectId
+ * @param int $lastRead
+ * @param string[] $verbs
+ * @return int
+ */
+ public function getNumberOfCommentsWithVerbsForObjectSinceComment(string $objectType, string $objectId, int $lastRead, array $verbs): int {
+ $query = $this->dbConn->getQueryBuilder();
+ $query->select($query->func()->count('id', 'num_messages'))
+ ->from('comments')
+ ->where($query->expr()->eq('object_type', $query->createNamedParameter($objectType)))
+ ->andWhere($query->expr()->eq('object_id', $query->createNamedParameter($objectId)))
+ ->andWhere($query->expr()->gt('id', $query->createNamedParameter($lastRead)))
+ ->andWhere($query->expr()->in('verb', $query->createNamedParameter($verbs, IQueryBuilder::PARAM_STR_ARRAY)));
+
+ $result = $query->executeQuery();
+ $data = $result->fetch();
+ $result->closeCursor();
+
+ return (int) ($data['num_messages'] ?? 0);
+ }
}
diff --git a/lib/Chat/MessageParser.php b/lib/Chat/MessageParser.php
index ff944c2f4..db142107e 100644
--- a/lib/Chat/MessageParser.php
+++ b/lib/Chat/MessageParser.php
@@ -64,7 +64,12 @@ class MessageParser {
public function parseMessage(Message $message): void {
$message->setMessage($message->getComment()->getMessage(), []);
- $message->setMessageType($message->getComment()->getVerb());
+
+ $verb = $message->getComment()->getVerb();
+ if ($verb === 'object_shared') {
+ $verb = 'system';
+ }
+ $message->setMessageType($verb);
$this->setActor($message);
$event = new ChatMessageEvent($message);