diff --git a/src/components/Chat.vue b/src/components/Chat.vue index ee5e208..1e20735 100644 --- a/src/components/Chat.vue +++ b/src/components/Chat.vue @@ -3,10 +3,12 @@ + + + @@ -349,6 +354,7 @@ import AudioLayout from "./AudioLayout.vue"; import FileDropLayout from "./file_mode/FileDropLayout"; import roomTypeMixin from "./roomTypeMixin"; import roomMembersMixin from "./roomMembersMixin"; +import PurgeRoomDialog from "../components/PurgeRoomDialog"; const sizeOf = require("image-size"); const dataUriToBuffer = require("data-uri-to-buffer"); @@ -400,7 +406,8 @@ export default { CreatePollDialog, AudioLayout, FileDropLayout, - UserProfileDialog + UserProfileDialog, + PurgeRoomDialog, }, data() { @@ -483,7 +490,8 @@ export default { * A timer to handle message retention/auto deletion */ retentionTimer: null, - showProfileDialog: false + showProfileDialog: false, + showPurgeConfirmation: false, }; }, @@ -873,7 +881,11 @@ export default { * Set events to display. At the same time, filter out messages that are past rentention period etc. */ setEvents(events) { - this.events = this.removeTimedOutEvents(events); + this.events = this.filterOutOldAndInvisible(events); + }, + + filterOutOldAndInvisible(events) { + return this.removeTimedOutEvents(events.filter((e) => e.messageVisibility().visible)); }, updateRetentionTimer(maybeEvent) { @@ -901,14 +913,18 @@ export default { } return events.filter((e) => { if (maxLifetime > 0 && !e.isState()) { // Keep all state events - return e.getLocalAge() < maxLifetime; + if (e.getLocalAge() < maxLifetime) { + return true; + } + e.applyVisibilityEvent({ visible: false, eventId: e.getId(), reason: null}); + return true; } return true; }); }, onRetentionTimer() { - const events = this.removeTimedOutEvents(this.events); + const events = this.filterOutOldAndInvisible(this.events); if (events.length != this.events.length) { this.events = events; // Changed } diff --git a/src/components/ChatHeader.vue b/src/components/ChatHeader.vue index e075d06..d619e93 100644 --- a/src/components/ChatHeader.vue +++ b/src/components/ChatHeader.vue @@ -39,7 +39,7 @@ + @click.stop="$emit('purge')"> $vuetify.icons.ic_moderator-delete @@ -65,9 +65,6 @@ - - - @@ -78,7 +75,6 @@ import LeaveRoomDialog from "../components/LeaveRoomDialog"; import ProfileInfoPopup from "../components/ProfileInfoPopup"; import MoreMenuPopup from "../components/MoreMenuPopup"; import profileInfoMixin from "../components/profileInfoMixin"; -import PurgeRoomDialog from "../components/PurgeRoomDialog"; import RoomExport from "../components/RoomExport"; import roomInfoMixin from "./roomInfoMixin"; @@ -90,7 +86,6 @@ export default { LeaveRoomDialog, ProfileInfoPopup, MoreMenuPopup, - PurgeRoomDialog, RoomExport }, data() { @@ -98,7 +93,6 @@ export default { memberCount: null, showLeaveConfirmation: false, showProfileInfo: false, - showPurgeConfirmation: false, showMoreMenu: false, downloadingChat: false, showMissedItemsInfo: false, diff --git a/src/components/ChatHeaderPrivate.vue b/src/components/ChatHeaderPrivate.vue index 133de7a..dd196cb 100644 --- a/src/components/ChatHeaderPrivate.vue +++ b/src/components/ChatHeaderPrivate.vue @@ -44,7 +44,7 @@ + @click.stop="$emit('purge')"> $vuetify.icons.ic_moderator-delete