diff --git a/src/assets/css/chat.scss b/src/assets/css/chat.scss index aa85d82..71afe9e 100644 --- a/src/assets/css/chat.scss +++ b/src/assets/css/chat.scss @@ -445,6 +445,19 @@ $admin-fg: white; user-select: text; } +.notice { + font-family: "Inter", sans-serif; + font-weight: 300; + font-size: 15 * $chat-text-size; + background-color: #090909; + color: white; + text-align: start; + margin: 20px; + user-select: text; + padding: 16px; + border-radius: 20px; +} + .audio-player { width: 100%; position: absolute; diff --git a/src/assets/icons/timer.svg b/src/assets/icons/timer.svg new file mode 100644 index 0000000..054a588 --- /dev/null +++ b/src/assets/icons/timer.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/translations/en.json b/src/assets/translations/en.json index 450611a..dfc1035 100644 --- a/src/assets/translations/en.json +++ b/src/assets/translations/en.json @@ -12,7 +12,8 @@ "back": "BACK", "login": "Login", "logout": "Logout", - "new_room": "New Room" + "new_room": "New Room", + "undo": "Undo" }, "message": { "you": "You", @@ -157,7 +158,12 @@ "purge_room": { "title": "Delete room?", "info": "All members and messages will be removed. This action cannot be undone.", - "button": "Delete" + "button": "Delete", + "n_seconds": "{seconds} seconds", + "self_destruct": "Room will self destruct in seconds.", + "deleting": "Deleting room:", + "notified": "We've notified members.", + "room_deletion_notice": "Time to say goodbye! This room has been deleted by {user}. It will self destruct in seconds." }, "goodbye": { "room_deleted": "Room deleted.", diff --git a/src/components/Chat.vue b/src/components/Chat.vue index 68b513a..ca00fc7 100644 --- a/src/components/Chat.vue +++ b/src/components/Chat.vue @@ -459,6 +459,7 @@ import RoomJoinRules from "./messages/RoomJoinRules.vue"; import RoomPowerLevelsChanged from "./messages/RoomPowerLevelsChanged.vue"; import RoomGuestAccessChanged from "./messages/RoomGuestAccessChanged.vue"; import RoomEncrypted from "./messages/RoomEncrypted.vue"; +import RoomDeletionNotice from "./messages/RoomDeletionNotice.vue"; import DebugEvent from "./messages/DebugEvent.vue"; import util from "../plugins/utils"; import MessageOperations from "./messages/MessageOperations.vue"; @@ -539,6 +540,7 @@ export default { RoomPowerLevelsChanged, RoomGuestAccessChanged, RoomEncrypted, + RoomDeletionNotice, DebugEvent, MessageOperations, MessageOperationsPicker, @@ -1064,6 +1066,23 @@ export default { case "m.room.encryption": return RoomEncrypted; + + case "im.keanu.room_deletion_notice": { + // Custom event for notice 30 seconds before a room is deleted/purged. + const deletionNotices = this.room.currentState.getStateEvents( + "im.keanu.room_deletion_notice" + ); + if ( + deletionNotices && + deletionNotices.length > 0 && + deletionNotices[deletionNotices.length - 1] == event + ) { + // This is the latest/last one. Look at the status flag. Show nothing if it is "cancel". + if (event.getContent().status != "cancel") { + return RoomDeletionNotice; + } + } + } } return this.debugging ? DebugEvent : null; }, diff --git a/src/components/PurgeRoomDialog.vue b/src/components/PurgeRoomDialog.vue index a8ead50..74f99ea 100644 --- a/src/components/PurgeRoomDialog.vue +++ b/src/components/PurgeRoomDialog.vue @@ -1,6 +1,6 @@