-
-
{{$t('menu.logout')}}
+
+
+
+ {{ $t("room.room_list_rooms") }}
+
+
+
+
@@ -23,30 +34,32 @@
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 @@
👋
- {{$t('leave.title_public',{user: $matrix.currentUserDisplayName})}}
+ {{
+ $t("leave.title_public", { user: $matrix.currentUserDisplayName })
+ }}
-
-
- {{ $matrix.currentUserDisplayName }}
-
-
- {{ $t('leave.create_account') }}
-
+
+
+ {{ $matrix.currentUserDisplayName }}
+
+
+ {{
+ $t("leave.create_account")
+ }}
+
- {{$t('leave.text_public')}}
+ {{ $t("leave.text_public") }}
lock
- {{$t('leave.title_invite',{user: $matrix.currentUserDisplayName})}}
- {{$t('leave.text_invite')}}
+
+ {{
+ $t("leave.title_invite", { user: $matrix.currentUserDisplayName })
+ }}
+
+ {{ $t("leave.text_invite") }}
@@ -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 @@
+
+
+
+ {{ $t("profile.select_language") }}
+
+
+
+
+ {{ $t("menu.ok") }}
+
+
+
+
+
+
+
+
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 @@
+
+
+
{{ $t("profile_info_popup.you_are") }}
+
+
+
+ {{ displayName }}
+
+
+
+
+
+
+ {{ displayName }}
+
+
+
+
+
+ {{ userAvatarLetter }}
+
+
+
+
+
+
+
\ 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 @@
+
+
+
+ 👋
+ {{
+ $t("purge_room.room_deletion_notice", {
+ user: stateEventDisplayName(event),
+ })
+ }}
+
+
+
+
+
+
\ 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;
},