From b34c8f9f9a42ac5a3023a1cd9c20ea682577e4d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Calvi=C3=B1o=20S=C3=A1nchez?= Date: Fri, 11 Sep 2020 17:30:17 +0200 Subject: [PATCH 1/2] Move network event handlers to their own methods MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This will be needed to unsubscribe the handlers, as it was not possible to refer to the arrow functions from other parts of the code. Signed-off-by: Daniel Calviño Sánchez --- src/components/MessagesList/MessagesList.vue | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/components/MessagesList/MessagesList.vue b/src/components/MessagesList/MessagesList.vue index 826b20fa3e4..8ef2a58a9a3 100644 --- a/src/components/MessagesList/MessagesList.vue +++ b/src/components/MessagesList/MessagesList.vue @@ -233,14 +233,8 @@ export default { this.scrollToBottom() EventBus.$on('scrollChatToBottom', this.handleScrollChatToBottomEvent) - subscribe('networkOffline', () => { - console.debug('Canceling message request as we are offline') - this.cancelLookForNewMessages() - }) - subscribe('networkOnline', () => { - console.debug('Restarting polling of new chat messages') - this.getNewMessages() - }) + subscribe('networkOffline', this.handleNetworkOffline) + subscribe('networkOnline', this.handleNetworkOnline) }, beforeDestroy() { EventBus.$off('scrollChatToBottom', this.handleScrollChatToBottomEvent) @@ -595,6 +589,16 @@ export default { getFirstKnownMessageId() { return this.messagesList[0].id.toString() }, + + handleNetworkOffline() { + console.debug('Canceling message request as we are offline') + this.cancelLookForNewMessages() + }, + + handleNetworkOnline() { + console.debug('Restarting polling of new chat messages') + this.getNewMessages() + }, }, } From bbd0277f1057fb5c2cbe5431349c43cbfa6eec18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Calvi=C3=B1o=20S=C3=A1nchez?= Date: Fri, 11 Sep 2020 17:31:59 +0200 Subject: [PATCH 2/2] Unsubscribe handlers for network events before component destruction MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This fixes a memory leak of the message list as well as any other component that the message list is part of (like the chat view due to the parent component reference of Vue). Signed-off-by: Daniel Calviño Sánchez --- src/components/MessagesList/MessagesList.vue | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/components/MessagesList/MessagesList.vue b/src/components/MessagesList/MessagesList.vue index 8ef2a58a9a3..710c796325c 100644 --- a/src/components/MessagesList/MessagesList.vue +++ b/src/components/MessagesList/MessagesList.vue @@ -69,7 +69,7 @@ import MessagesGroup from './MessagesGroup/MessagesGroup' import { fetchMessages, lookForNewMessages } from '../../services/messagesService' import CancelableRequest from '../../utils/cancelableRequest' import Axios from '@nextcloud/axios' -import { subscribe } from '@nextcloud/event-bus' +import { subscribe, unsubscribe } from '@nextcloud/event-bus' import isInLobby from '../../mixins/isInLobby' import debounce from 'debounce' import { EventBus } from '../../services/EventBus' @@ -239,6 +239,9 @@ export default { beforeDestroy() { EventBus.$off('scrollChatToBottom', this.handleScrollChatToBottomEvent) this.cancelLookForNewMessages() + + unsubscribe('networkOffline', this.handleNetworkOffline) + unsubscribe('networkOnline', this.handleNetworkOnline) }, methods: {