Skip to content

Commit

Permalink
fix(federation): Mark notifications for federated rooms read similarly
Browse files Browse the repository at this point in the history
Signed-off-by: Joas Schilling <coding@schilljs.com>
  • Loading branch information
nickvergessen committed Mar 19, 2024
1 parent dbb094d commit 97e1921
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 1 deletion.
12 changes: 12 additions & 0 deletions lib/Federation/Proxy/TalkV1/Controller/ChatController.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,11 @@

namespace OCA\Talk\Federation\Proxy\TalkV1\Controller;

use OCA\Talk\Chat\Notifier;
use OCA\Talk\Exceptions\CannotReachRemoteException;
use OCA\Talk\Federation\Proxy\TalkV1\ProxyRequest;
use OCA\Talk\Federation\Proxy\TalkV1\UserConverter;
use OCA\Talk\Model\Attendee;
use OCA\Talk\Participant;
use OCA\Talk\ResponseDefinitions;
use OCA\Talk\Room;
Expand All @@ -52,6 +54,7 @@ public function __construct(
protected UserConverter $userConverter,
protected ParticipantService $participantService,
protected RoomFormatter $roomFormatter,
protected Notifier $notifier,
ICacheFactory $cacheFactory,
) {
$this->proxyCacheMessages = $cacheFactory->isAvailable() ? $cacheFactory->createDistributed('talk/pcm/') : null;
Expand Down Expand Up @@ -139,6 +142,11 @@ public function receiveMessages(
int $markNotificationsAsRead): DataResponse {
$cacheKey = sha1(json_encode([$room->getRemoteServer(), $room->getRemoteToken()]));


if ($lookIntoFuture && $markNotificationsAsRead && $participant->getAttendee()->getActorType() === Attendee::ACTOR_USERS) {
$this->notifier->markMentionNotificationsRead($room, $participant->getAttendee()->getActorId());
}

if ($lookIntoFuture) {
if ($this->proxyCacheMessages instanceof ICache) {
for ($i = 0; $i <= $timeout; $i++) {
Expand Down Expand Up @@ -232,6 +240,10 @@ public function getMessageContext(Room $room, Participant $participant, int $mes
],
);

if ($participant->getAttendee()->getActorType() === Attendee::ACTOR_USERS) {
$this->notifier->markMentionNotificationsRead($room, $participant->getAttendee()->getActorId());
}

if ($proxy->getStatusCode() === Http::STATUS_NOT_MODIFIED) {
return new DataResponse([], Http::STATUS_NOT_MODIFIED);
}
Expand Down
2 changes: 1 addition & 1 deletion lib/Notification/Listener.php
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ protected function markInvitationRead(Room $room, IUser $user): void {
* Reaction: "{user} reacted with {reaction} in {call}"
*
* We should not mark reactions read based on the read-status of the comment
* they apply to, but the point in time when the reaction as done.
* they apply to, but the point in time when the reaction was done.
* However, these messages are not visible and don't update the read marker,
* so we purge them on joining the conversation.
* This already happened before on the initial loading of a chat with
Expand Down

0 comments on commit 97e1921

Please sign in to comment.