diff --git a/src/App.vue b/src/App.vue index 63e9a66..d57b87c 100644 --- a/src/App.vue +++ b/src/App.vue @@ -11,13 +11,11 @@ import config from "./assets/config"; export default { name: "App", + beforeMount() { + // Set language + this.$i18n.locale = this.$store.state.language || "en"; + }, mounted() { - // Set RTL mode if flag given in config. TODO: this should be based on language, not a global setting. - // - if (config.rtl) { - this.$vuetify.rtl = true; - document.documentElement.setAttribute("dir", "rtl"); - } if ( window.location.protocol == "http" && !window.location.hostname.endsWith(".onion") @@ -63,6 +61,20 @@ export default { }, }, watch: { + "$i18n.locale": { + handler(val) { + // Locale changed, check file if RTL + var isRTL = this.$i18n.messages[val].language_is_rtl || false; + if (isRTL) { + this.$vuetify.rtl = true; + document.documentElement.setAttribute("dir", "rtl"); + } else { + this.$vuetify.rtl = false; + document.documentElement.removeAttribute("dir"); + } + }, + immediate: true, + }, title(title) { document.title = title; }, diff --git a/src/assets/css/chat.scss b/src/assets/css/chat.scss index aa85d82..73a17fe 100644 --- a/src/assets/css/chat.scss +++ b/src/assets/css/chat.scss @@ -3,6 +3,27 @@ $admin-bg: black; $admin-fg: white; +.home { + .v-card { + background-color: white; + box-shadow: 0px 1px 4px rgba(0, 0, 0, 0.25) !important; + border-radius: 18px; + padding-bottom: 10px; + .v-item-group > div:not(:last-of-type):after { + /* divider */ + position: absolute; + content: " "; + display: block; + bottom: 0px; + height: 1px; + left: 0px; + right: 0px; + min-height: 1px; + background-color: #e1e1e1; + } + } +} + .chat-header { margin: 0; padding: 0; @@ -445,6 +466,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; @@ -962,6 +996,10 @@ $admin-fg: white; padding-top: 10px; } +.avatar-22 { + font-size: 14 * $chat-text-size !important; +} + .avatar-32 { font-size: 18 * $chat-text-size !important; } @@ -971,7 +1009,8 @@ $admin-fg: white; } .avatar-32.clickable, -.avatar-48.clickable { +.avatar-48.clickable, +.clickable { cursor: pointer; &:hover { opacity: 0.7; 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/icons/trash.svg b/src/assets/icons/trash.svg new file mode 100644 index 0000000..275eaa2 --- /dev/null +++ b/src/assets/icons/trash.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/icons/trash_black.svg b/src/assets/icons/trash_black.svg new file mode 100644 index 0000000..024337a --- /dev/null +++ b/src/assets/icons/trash_black.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/translations/bo.json b/src/assets/translations/bo.json index 2678fe8..a7017aa 100644 --- a/src/assets/translations/bo.json +++ b/src/assets/translations/bo.json @@ -6,25 +6,26 @@ "video_file": "བརྙན་ཟློས་ཡིག་ཆ།" }, "room_info": { - "title": "གནས་ཚུལ།", + "title": "ཁ་བརྡ་ཁང་གི་ཞིབ་ཕྲའི་གནས་ཚུལ།", "version_info": "གྷར་ཌིན་ལས་འཆར་གྱིས་ནུས་ཤུགས་བསྩལ། ཐོན་རིམ། : {version}", "leave_room_info": "གསལ་བཤད། གོ་རིམ་འདི་ཕྱིར་ཟློག་ཐབས་མེད། ཁྱེད་རང་ཕྱིར་ཐོན་རྒྱུ་ཡིན་མིན་དང་གླེང་མོལ་ཁག་གཏན་དུ་གསུབ་རྒྱུ་ཡིན་མིན་ཁག་ཐེག་བྱོས།", - "leave_room": "ཚོགས་པ་ནས་ཕྱིར་ཐོན།", + "leave_room": "ཕྱིར་ཐོན།", "view_profile": "ལྟ་ཞིབ།", "identity_temporary": "ཁྱེད་ཀྱི་ངོ་བོ {displayName} འདི་གནས་སྐབས་ཙམ་ཡིན། ཁྱེད་ཀྱིས་སོ་སོའི་མིང་དང་གསང་ཚིག་བརྗེས་ཏེ་འདི་ཉར་ཚགས་བྱེད་ཆོག", "identity": "ཁྱེད་རང་{displayName} མིང་ཐོག་ནས་ནང་འཛུལ་བྱེད་བཞིན་འདུག", "my_profile": "ངའི་ཡིག་ཆ།", - "show_all": "ཚང་མ་སྟོན།", + "show_all": "ཚང་མ་སྟོན། >", "hide_all": "སྦེད།", "user_you": "{user} (ཁྱེད་རང་།)", "user": "{user}", "members": "ཚོགས་མི་ཁག", - "purge": "ཁ་བརྡ་ཁང་གཏོར།", + "purge": "ཁ་བརྡ་ཁང་མེད་པར་བཟོས།", "link_copied": "འབྲེལ་ཐག་པར་བཤུས་བརྒྱབ་ཚར།", - "join_public": "འབྲེལ་ཐག་ཡོད་པའི་མི་གང་རུང་འཛུལ་ཆོག", - "join_invite": "གདན་ཞུ་ཁོ་ན་བརྒྱུད་དེ་མ་གཏོགས་ཁ་བརྡ་ཁང་ནང་དུ་འཛུལ་མི་ཐུབ།", - "permissions": "ཆོག་མཆན་ཁག", - "created_by": "{user} བཟོས།" + "join_public": "འབྲེལ་ཐག་ཡོད་པའི་མི་གང་རུང་།", + "join_invite": "ཁ་སྣོན་བྱས་པའི་གྲོགས་ཁོ་ན།", + "permissions": "ནང་འཛུལ་གྱི་ཆོག་མཆན་ཁག", + "created_by": "{user} བཟོས།", + "copy_link": "གདན་ཞུ་འབྲེལ་ཐག་པར་བཤུས་རྒྱོབས།" }, "invite": { "done": "ཚར་སོང་།", @@ -57,8 +58,10 @@ "join_permissions_info": "ཆོག་མཆན་འདི་དག་གིས་ཚོགས་པའི་ནང་མི་ཇི་ལྟར་འཛུལ་ཐུབ་མིན་དང་། མི་གཞན་དག་ཇི་ལྟར་ལས་སླ་པོའི་ཐོག་ནས་གདན་ཞུ་བྱེད་ཐུབ་མིན་སོགས་ཐག་གཅོད་བྱེད་ཀྱི་ཡོད། ཆོག་མཆན་དེ་དག་ག་དུས་ཡིན་ཡང་འགྱུར་བ་གཏོང་ཆོག", "set_join_permissions": "ནང་འཛུལ་གྱི་ཆོག་མཆན་སྒྲིག་འགོད་བྱོས།", "join_permissions": "ནང་འཛུལ་གྱི་ཆོག་མཆན་ཁག", - "new_room": "ཚོགས་པ་གསར་པ།", - "name_room": "ཚོགས་པར་མིང་ཐོགས།" + "new_room": "ཁ་བརྡ་ཁང་གསར་པ།", + "name_room": "ཚོགས་པར་མིང་ཐོགས།", + "room_topic": "གལ་ཏེ་འདོད་པ་ཡོད་ན། ཚོགས་པའི་སྐོར་གྱི་འགྲེལ་བཤད་ཐུང་ངུ་ཞིག་འབྲི་ཆོག", + "create": "བཟོས།" }, "menu": { "logout": "ཕྱིར་ཐོན།", @@ -70,8 +73,9 @@ "send": "ཐོངས།", "back": "ཕྱིར་ལོག", "cancel": "ཕྱིར་འཐེན།", - "reply": "ལན་འདེབས། ཡ་ལན།", - "start_private_chat": "སྤྱོད་མཁན་འདི་སྒེར་ལ་ཁ་བརྡ་བྱོས།" + "reply": "ཡ་ལན།", + "start_private_chat": "སྤྱོད་མཁན་འདི་སྒེར་ལ་ཁ་བརྡ་བྱོས།", + "new_room": "ཁ་བརྡ་ཁང་གསར་པ།" }, "profile": { "change_password": "གསང་ཚིག་རྗེས།", @@ -91,16 +95,25 @@ "title": "ཡོ་ཆས་ཁག" }, "room_welcome": { - "info_permissions": "ཁྱེད་ཀྱིས་ག་དུས་ཡིན་ཡང་ཚོགས་པའི་སྒྲིག་བཀོད་ཀྱི་ནང་ནས་'ནང་འཛུལ་གྱི་ཆོག་མཆན' དང 'ཁ་བརྡའི་ཟིན་ཐོར'འགྱུར་བ་གཏོང་ཆོག", + "info_permissions": "ཁྱེད་ཀྱིས་ག་དུས་ཡིན་ཡང་སྒྲིག་བཀོད་ཀྱི་ཁོངས་ནས་ཁ་བརྡ་ཁང་གི་'ནང་འཛུལ་གྱི་ཆོག་མཆན'ལ་འགྱུར་བ་གཏོང་ཆོག", "join_invite": "ཁྱེད་ཀྱིས་གདན་ཞུ་གནང་བའི་མི་ཁོ་ན་མ་གཏོགས་འཛུལ་མི་ཐུབ།", - "join_public": "སུ་ཡིན་རུང་འབྲེལ་ཐག་འདིའི་ཐོག་ལ་མནན་ཏེ་འཛུལ་ཆོག: {link}", - "info": "འདིར་ཁྱེད་ཀྱི་ཚོགས་པའི་སྐོར་ལ་ཤེས་དགོས་པའི་དོན་དག་འགའ་ཡོད།:", + "join_public": "སུ་ཡིན་རུང་འབྲེལ་ཐག་འདིའི་ཐོག་ལ་མནན་ཏེ་འཛུལ་ཆོག: {link}.", + "info": "འདིར་ཁྱེད་ཀྱིས་སོ་སོའི་ཚོགས་པའི་སྐོར་ལ་ཤེས་དགོས་པའི་དོན་དག་འགའ་ཡོད།:", "welcome": "དགའ་བསུ་ཞུ།", - "got_it": "ཧ་གོ་སོང་།" + "got_it": "ཧ་གོ་སོང་།", + "room_history_joined": "ཚོགས་མི་ཁག་ཁ་བརྡ་ཁང་དུ་ཞུགས་པའི་རྗེས་སུ། ད་གཟོད་དེའི་ནང་དུ་བཏང་ཡོད་པའི་འཕྲིན་ཐུང་ཁག་མཐོང་ཐུབ།", + "room_history_is": "ཁ་བརྡ་ཁང་གི་ཟིན་ཐོ་ནི། {type}.", + "encrypted": "འཕྲིན་ཐུང་ཁག་ལ་སྣེ་གཉིས་བར་གྱི་གསང་སྡོམ་བྱས་ཡོད།" }, "room": { "leave": "ཕྱིར་ཐོན།", - "members": "ཚོགས་མི་མི་འདུག| ཚོགས་མི༡| ཚོགས་མིའི {count}" + "members": "ཚོགས་མི་མི་འདུག| ཚོགས་མི༡| ཚོགས་མིའི {count}", + "room_list_rooms": "ཁ་བརྡ་ཁང་།", + "room_list_invites": "གདན་ཞུ་ཁག", + "purge_failed": "ཁ་བརྡ་ཁང་བཤིག་ཐུབ་མ་སོང་།", + "purge_removing_members": "ཚོགས་མི་ཁག་ཕྱིར་འདོན།", + "purge_redacting_events": "ཁ་བརྡ་གཙང་གསུབ།", + "purge_set_room_state": "ཁ་བརྡ་ཁང་གི་རྣམ་པ་སྒྲིག་འགོད།" }, "message": { "users_are_typing": "{count} ཚོགས་མི་ཡིས་གཏགས་བཞིན་འདུག", @@ -136,7 +149,9 @@ "user_created_room": "{user} ཁ་བརྡ་བྱ་སའི་ཁང་པ་བཟོས་སོང་།", "you": "ཁྱེད་རང་།", "user_powerlevel_change_from_to": "{powerOld} ཡི{user} ནས {powerNew}་ལ།", - "room_powerlevel_change": "{user} {changes} ཡི་སྟོབས་ཤུགས་གནས་རིམ་བརྗེས་སོང་།" + "room_powerlevel_change": "{user} {changes} ཡི་སྟོབས་ཤུགས་གནས་རིམ་བརྗེས་སོང་།", + "user_changed_guest_access_open": "{user} མགྲོན་པོ་ཁ་བརྡ་ཁང་དུ་འཛུལ་བཅུག་སོང་།", + "user_changed_guest_access_closed": "{user} མགྲོན་པོ་ཁ་བརྡ་ཁང་དུ་འཛུལ་བཅུག་མ་སོང་།" }, "Keanu Weblite": "ཀེ་ཨ་ནུ་དྲ་གནས།", "power_level": { @@ -160,8 +175,8 @@ }, "purge_room": { "button": "ཁ་བརྡ་ཁང་གཏོར།", - "info": "བྱེད་ལས་འདིས་ཚོགས་མི་ཚང་མ་ཡོད་པའི་ཚོགས་པ་འདི་སྒོ་རྒྱག་ངེས། དེ་ཕྱིར་ལྡོག་ཐབས་མེད།", - "title": "ཁ་བརྡ་ཁང་གཏོར་རྒྱུ་ཡིན་ནམ།" + "info": "འདིས་ཚོགས་མི་ཚང་མ་ཡོད་པའི་ཚོགས་པ་འདི་སྒོ་རྒྱག་ངེས། དེ་ཕྱིར་ཟློག་ཐབས་མེད།", + "title": "ཁ་བརྡ་ཁང་མེད་པར་བཟོ་རྒྱུ་ཡིན་ནམ།" }, "leave": { "leave": "ཕྱིར་ཐོན།", @@ -182,5 +197,15 @@ "shared_computer": "མཉམ་སྤྱོད་བྱས་པའི་རྩིས་འཕྲུལ་ཞིག་བཀོལ་བཞིན་པ།", "user_name_label": "སྤྱོད་མིང་།", "title": "{roomName} ནང་དུ་ཕེབས་པར་དགའ་བསུ་ཞུ།" + }, + "profile_info_popup": { + "powered_by": "ཁ་བརྡ་ཁང་འདི་{product} ནུས་ཤུགས་བསྩལ་ཡོད། {productLink} ནས་དེ་ལས་མང་བ་སྦྱོང་ཆོག་ལ། མདུན་དུ་བསྐྱོད་དེ་ཁ་བརྡ་ཁང་གཞན་ཞིག་བསྐྲུན་ཆོག", + "new_room": "ཁ་བརྡ་ཁང་གསར་པ།", + "want_more": "དེ་ལས་མང་བ་དགོས་སམ།", + "logout": "ཕྱིར་ཐོན།", + "edit_profile": "སྒེར་གྱི་ཡིག་ཆ་བཅོས་སྒྲིག", + "identity_temporary": "{displayName}", + "identity": "{displayName}", + "you_are": "ཁྱེད་ནི་" } } diff --git a/src/assets/translations/en.json b/src/assets/translations/en.json index 81074f8..d8f6962 100644 --- a/src/assets/translations/en.json +++ b/src/assets/translations/en.json @@ -1,4 +1,5 @@ { + "language_display_name": "English", "Keanu Weblite": "Keanu Weblite", "menu": { "start_private_chat": "Private chat with this user", @@ -12,7 +13,8 @@ "back": "BACK", "login": "Login", "logout": "Logout", - "new_room": "New Room" + "new_room": "New Room", + "undo": "Undo" }, "message": { "you": "You", @@ -112,6 +114,7 @@ "set_password": "Set password", "change_name": "Change name", "change_password": "Change password", + "select_language": "Language", "password_old": "Old password", "password_new": "New password", "password_repeat": "Repeat new password", @@ -135,7 +138,8 @@ "join": "Join room", "join_guest": "Join as guest", "status_logging_in": "Logging in...", - "status_joining": "Joining room..." + "status_joining": "Joining room...", + "join_failed": "Failed to join room." }, "invite": { "title": "Add Friends", @@ -156,8 +160,18 @@ }, "purge_room": { "title": "Delete room?", - "info": "This will close the room for all members. It cannot be undone.", - "button": "Delete room" + "info": "All members and messages will be removed. This action cannot be undone.", + "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.", + "close_tab": "Close browser tab", + "view_other_rooms": "View other rooms" }, "room_info": { "title": "Room Details", diff --git a/src/assets/translations/es.json b/src/assets/translations/es.json index 130d099..acf51ec 100644 --- a/src/assets/translations/es.json +++ b/src/assets/translations/es.json @@ -1,4 +1,5 @@ { + "language_display_name": "Español", "room_info": { "identity": "Has iniciado sesión como {displayName}.", "my_profile": "Mi perfil", @@ -183,4 +184,4 @@ "view_details": "Ver detalles", "this_room": "Este grupo" } -} +} \ No newline at end of file diff --git a/src/assets/translations/ug.json b/src/assets/translations/ug.json index 28745e2..4db410e 100644 --- a/src/assets/translations/ug.json +++ b/src/assets/translations/ug.json @@ -1,4 +1,5 @@ { + "language_is_rtl": true, "menu": { "ok": "تامام", "download": "چۈشۈرۈش", @@ -6,4 +7,4 @@ "edit": "تەھرىر" }, "Keanu Weblite": "Keanu Weblite" -} +} \ No newline at end of file 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/Home.vue b/src/components/Home.vue index 9109fa0..5c40319 100644 --- a/src/components/Home.vue +++ b/src/components/Home.vue @@ -1,13 +1,24 @@ diff --git a/src/components/Join.vue b/src/components/Join.vue index b49d2ca..e11557f 100644 --- a/src/components/Join.vue +++ b/src/components/Join.vue @@ -399,7 +399,7 @@ export default { // TODO - handle error console.log("Failed to join room", err); this.loading = false; - this.loadingMessage = err.toString(); + this.loadingMessage = this.$t("join.join_failed"); }); }, diff --git a/src/components/LeaveRoomDialog.vue b/src/components/LeaveRoomDialog.vue index 6e49df6..1f99c3e 100644 --- a/src/components/LeaveRoomDialog.vue +++ b/src/components/LeaveRoomDialog.vue @@ -4,27 +4,35 @@ @@ -35,7 +43,7 @@ block class="text-button" @click="showDialog = false" - >{{$t('leave.go_back')}}{{ $t("leave.go_back") }} @@ -45,7 +53,7 @@ block class="filled-button" @click.stop="onLeaveRoom()" - >{{$t('leave.leave')}}{{ $t("leave.leave") }} diff --git a/src/components/Profile.vue b/src/components/Profile.vue index fa85bc4..3d7fe06 100644 --- a/src/components/Profile.vue +++ b/src/components/Profile.vue @@ -62,6 +62,11 @@ :icon="'edit'" :text="$t('profile.change_name')" /> + @@ -138,10 +143,16 @@ + + @@ -80,5 +173,4 @@ export default { .slow-fade-enter, .slow-fade-leave-to /* .fade-leave-active below version 2.1.8 */ { opacity: 0; } - \ No newline at end of file diff --git a/src/components/SelectLanguageDialog.vue b/src/components/SelectLanguageDialog.vue new file mode 100644 index 0000000..422b6fb --- /dev/null +++ b/src/components/SelectLanguageDialog.vue @@ -0,0 +1,58 @@ + + + + + diff --git a/src/components/YouAre.vue b/src/components/YouAre.vue new file mode 100644 index 0000000..35112a8 --- /dev/null +++ b/src/components/YouAre.vue @@ -0,0 +1,59 @@ + + + + \ No newline at end of file diff --git a/src/components/messages/RoomDeletionNotice.vue b/src/components/messages/RoomDeletionNotice.vue new file mode 100644 index 0000000..9a2f476 --- /dev/null +++ b/src/components/messages/RoomDeletionNotice.vue @@ -0,0 +1,23 @@ + + + + + \ No newline at end of file diff --git a/src/router/index.js b/src/router/index.js index a69fbc1..29af606 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -74,6 +74,7 @@ const routes = [ path: '/goodbye', name: 'Goodbye', component: () => import('../components/QuoteView.vue'), + props: true } ] @@ -82,7 +83,7 @@ const router = new VueRouter({ }); router.beforeEach((to, from, next) => { - const publicPages = ['/login','/createroom']; + const publicPages = ['/login', '/createroom']; var authRequired = !publicPages.includes(to.path); const loggedIn = router.app.$store.state.auth.user; @@ -113,7 +114,7 @@ router.beforeEach((to, from, next) => { } }); -router.getRoomLink = function(roomId) { +router.getRoomLink = function (roomId) { return window.location.origin + window.location.pathname + "#/room/" + encodeURIComponent(util.sanitizeRoomId(roomId)); } diff --git a/src/services/matrix.service.js b/src/services/matrix.service.js index 9190fd3..9440f6b 100644 --- a/src/services/matrix.service.js +++ b/src/services/matrix.service.js @@ -332,6 +332,17 @@ export default { } } break; + + case "m.room.member": { + if (this.currentRoom && event.getRoomId() == this.currentRoom.roomId) { // Don't use this.currentRoomId, may be an alias. We need the real id! + if (event.getContent().membership == "leave" && (event.getPrevContent() || {}).membership == "join" && event.getStateKey() == this.currentUserId && event.getSender() != this.currentUserId) { + // We were kicked + const wasPurged = (event.getContent().reason == "Room Deleted"); + this.$navigation.push({ name: "Goodbye", params: { roomWasPurged: wasPurged } }, -1); + } + } + } + break; } this.updateNotificationCount(); }, @@ -502,7 +513,7 @@ export default { ); const self = this; - console.log("Purge: set invite only"); + //console.log("Purge: set invite only"); statusCallback(this.$t('room.purge_set_room_state')); this.matrixClient.sendStateEvent( roomId, @@ -511,7 +522,7 @@ export default { "" ) .then(() => { - console.log("Purge: forbid guest access"); + //console.log("Purge: forbid guest access"); return this.matrixClient.sendStateEvent( roomId, "m.room.guest_access", @@ -520,20 +531,20 @@ export default { ); }) .then(() => { - console.log("Purge: set history visibility to 'joined'"); + //console.log("Purge: set history visibility to 'joined'"); return this.matrixClient.sendStateEvent(roomId, "m.room.history_visibility", { history_visibility: "joined", }); }) .then(() => { - console.log("Purge: create timeline"); + //console.log("Purge: create timeline"); return timelineWindow.load(null, 100) }) .then(() => { const getMoreIfAvailable = function _getMoreIfAvailable() { if (timelineWindow.canPaginate(EventTimeline.BACKWARDS) ) { - console.log("Purge: page back"); + //console.log("Purge: page back"); return timelineWindow .paginate(EventTimeline.BACKWARDS, 100, true, 5) .then((ignoredsuccess) => { @@ -546,7 +557,7 @@ export default { return getMoreIfAvailable(); }) .then(() => { - console.log("Purge: redact events"); + //console.log("Purge: redact events"); statusCallback(this.$t('room.purge_redacting_events')); // First ignore unknown device errors this.matrixClient.setGlobalErrorOnUnknownDevices(false); @@ -560,7 +571,7 @@ export default { return Promise.all(redactionPromises); }) .then(() => { - console.log("Purge: kick members"); + //console.log("Purge: kick members"); statusCallback(this.$t('room.purge_removing_members')); var joined = room.getMembersWithMembership("join"); var invited = room.getMembersWithMembership("invite"); @@ -569,7 +580,7 @@ export default { var kickPromises = []; members.forEach(member => { if (member.userId != self.currentUserId) { - kickPromises.push(this.matrixClient.kick(roomId, member.userId)); + kickPromises.push(this.matrixClient.kick(roomId, member.userId, "Room Deleted")); } }); return Promise.all(kickPromises); @@ -577,6 +588,9 @@ export default { .then(() => { statusCallback(null); this.matrixClient.setGlobalErrorOnUnknownDevices(oldGlobalErrorSetting); + return this.leaveRoom(roomId); + }) + .then(() => { resolve(true); // Done! }) .catch((err) => { diff --git a/src/store/index.js b/src/store/index.js index 8bcc535..1c63471 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -37,6 +37,7 @@ const vuexPersistLocalStorage = new VuexPersist({ reducer: state => { if (state.useLocalStorage) { return { + language: state.language, currentRoomId: state.currentRoomId, }; } else { @@ -51,6 +52,7 @@ const vuexPersistSessionStorage = new VuexPersist({ reducer: state => { if (!state.useLocalStorage) { return { + language: state.language, currentRoomId: state.currentRoomId, }; } else { @@ -62,7 +64,7 @@ const vuexPersistSessionStorage = new VuexPersist({ const defaultUseSessionStorage = (sessionStorage.getItem('user') != null); export default new Vuex.Store({ - state: { currentRoomId: null, auth: null, tempuser: null, useLocalStorage: !defaultUseSessionStorage }, + state: { language: 'en', currentRoomId: null, auth: null, tempuser: null, useLocalStorage: !defaultUseSessionStorage }, mutations: { loginSuccess(state, user) { state.auth.status.loggedIn = true; @@ -76,6 +78,9 @@ export default new Vuex.Store({ state.auth.status.loggedIn = false; state.auth.user = null; }, + setLanguage(state, locale) { + state.language = locale; + }, setCurrentRoomId(state, roomId) { state.currentRoomId = roomId; },