diff options
author | marco <marcoambrosini@pm.me> | 2020-09-17 13:09:00 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-09-17 13:09:00 +0300 |
commit | a4dd707ac4b44ff8ac20586d526da3a3ade01e91 (patch) | |
tree | e2f224a8bcdefbcec7e429d0aa412a1d15486f34 | |
parent | 9350964ca078c068966cc00542c137a4bcf96f42 (diff) | |
parent | 291e2c75f7b97cd8c1194b5a54cbf6b97193e981 (diff) |
Merge pull request #4170 from nextcloud/bugfix/noid/update-statuses-when-we-know
Update statuses when we got new information with a participant refresh
-rw-r--r-- | lib/Controller/ChatController.php | 1 | ||||
-rw-r--r-- | lib/Controller/RoomController.php | 8 | ||||
-rw-r--r-- | src/components/RightSidebar/Participants/ParticipantsTab.vue | 11 |
3 files changed, 17 insertions, 3 deletions
diff --git a/lib/Controller/ChatController.php b/lib/Controller/ChatController.php index fafc7a66a..5777a1bd1 100644 --- a/lib/Controller/ChatController.php +++ b/lib/Controller/ChatController.php @@ -488,6 +488,7 @@ class ChatController extends AEnvironmentAwareController { $data['status'] = $statuses[$data['id']]->getStatus(); $data['statusIcon'] = $statuses[$data['id']]->getIcon(); $data['statusMessage'] = $statuses[$data['id']]->getMessage(); + $data['statusClearAt'] = $statuses[$data['id']]->getClearAt(); } $output[] = $data; diff --git a/lib/Controller/RoomController.php b/lib/Controller/RoomController.php index 84843edae..766d6a4d8 100644 --- a/lib/Controller/RoomController.php +++ b/lib/Controller/RoomController.php @@ -838,15 +838,16 @@ class RoomController extends AEnvironmentAwareController { $maxPingAge = $this->timeFactory->getTime() - 100; $participants = $this->room->getParticipantsLegacy(); - $results = []; + $results = $headers = $statuses = []; - $statuses = []; if ($this->userId !== null && $includeStatus && count($participants['users']) < 100 && $this->appManager->isEnabledForUser('user_status')) { $userIds = array_map('strval', array_keys($participants['users'])); $statuses = $this->statusManager->getUserStatuses($userIds); + + $headers['X-Nextcloud-Has-User-Statuses'] = true; } foreach ($participants['users'] as $userId => $participant) { @@ -867,6 +868,7 @@ class RoomController extends AEnvironmentAwareController { $participant['status'] = $statuses[$userId]->getStatus(); $participant['statusIcon'] = $statuses[$userId]->getIcon(); $participant['statusMessage'] = $statuses[$userId]->getMessage(); + $participant['statusClearAt'] = $statuses[$userId]->getClearAt(); } $results[] = $participant; @@ -895,7 +897,7 @@ class RoomController extends AEnvironmentAwareController { $this->room->cleanGuestParticipants(); } - return new DataResponse($results); + return new DataResponse($results, Http::STATUS_OK, $headers); } /** diff --git a/src/components/RightSidebar/Participants/ParticipantsTab.vue b/src/components/RightSidebar/Participants/ParticipantsTab.vue index 6397e7da9..bc874f095 100644 --- a/src/components/RightSidebar/Participants/ParticipantsTab.vue +++ b/src/components/RightSidebar/Participants/ParticipantsTab.vue @@ -61,6 +61,7 @@ import Hex from 'crypto-js/enc-hex' import CancelableRequest from '../../../utils/cancelableRequest' import Axios from '@nextcloud/axios' import { showError } from '@nextcloud/dialogs' +import { emit } from '@nextcloud/event-bus' import ParticipantsSearchResults from './ParticipantsSearchResults/ParticipantsSearchResults' export default { @@ -228,6 +229,8 @@ export default { this.cancelGetParticipants = cancel const participants = await request(token) this.$store.dispatch('purgeParticipantsStore', token) + + const hasUserStatuses = !!participants.headers['x-nextcloud-has-user-statuses'] participants.data.ocs.data.forEach(participant => { this.$store.dispatch('addParticipant', { token: token, @@ -240,6 +243,14 @@ export default { actorId: Hex.stringify(SHA1(participant.sessionId)), actorDisplayName: participant.displayName, }) + } else if (hasUserStatuses) { + emit('user_status:status.updated', { + status: participant.status, + message: participant.statusMessage, + icon: participant.statusIcon, + clearAt: participant.statusClearAt, + userId: participant.userId, + }) } }) this.participantsInitialised = true |