diff --git a/src/components/rememberMeMixin.js b/src/components/rememberMeMixin.js
index ffade3a..a093c2f 100644
--- a/src/components/rememberMeMixin.js
+++ b/src/components/rememberMeMixin.js
@@ -4,9 +4,18 @@ export default {
rememberMe: this.$store.state.useLocalStorage
}
},
- methods: {
- onRememberMe(val) {
- this.$store.commit("setUseLocalStorage", val);
+ watch: {
+ rememberMe(val) {
+ if (val != this.$store.state.useLocalStorage) {
+ this.$store.commit("setUseLocalStorage", val);
+ }
+ },
+ "$store.state.useLocalStorage": {
+ handler(val) {
+ if (val != this.rememberMe) {
+ this.rememberMe = val;
+ }
+ }
}
}
}
\ No newline at end of file
diff --git a/src/components/welcome_headers/WelcomeHeaderChannel.vue b/src/components/welcome_headers/WelcomeHeaderChannel.vue
index 2362189..4477d94 100644
--- a/src/components/welcome_headers/WelcomeHeaderChannel.vue
+++ b/src/components/welcome_headers/WelcomeHeaderChannel.vue
@@ -4,7 +4,7 @@
-
{{ publicRoomLink }}
+
{{ publicRoomLink }}
{{
$t("room_info.link_copied") }}
diff --git a/src/components/welcome_headers/WelcomeHeaderRoom.vue b/src/components/welcome_headers/WelcomeHeaderRoom.vue
index 70362c8..6f86f7e 100644
--- a/src/components/welcome_headers/WelcomeHeaderRoom.vue
+++ b/src/components/welcome_headers/WelcomeHeaderRoom.vue
@@ -5,7 +5,7 @@
-
{{ publicRoomLink }}
+
{{ publicRoomLink }}
{
@@ -264,14 +270,12 @@ export default {
});
},
- getMatrixClient(user) {
+ async getMatrixClient(user) {
if (user === undefined) {
user = this.$store.state.auth.user;
}
if (this.matrixClientReady) {
- return new Promise((resolve, ignoredreject) => {
- resolve(user);
- });
+ return user;
} else if (this.matrixClient) {
return new Promise((resolve, ignoredreject) => {
this.matrixClient.once("Matrix.initialized", (ignoredclient) => {
@@ -281,62 +285,62 @@ export default {
}
const matrixStore = new sdk.MemoryStore(this.$store.getters.storage);
+ const cryptoStore = this.createCryptoStore();
- return util.getMatrixBaseUrl(user, this.$config).then((baseUrl) => {
- var opts = {
- baseUrl: baseUrl,
- userId: user.user_id,
- store: matrixStore,
- deviceId: user.device_id,
- accessToken: user.access_token,
- timelineSupport: true,
- unstableClientRelationAggregation: true,
- cryptoStore: this.createCryptoStore()
- //useAuthorizationHeader: true
- };
- this.matrixClient = sdk.createClient(opts);
- // if (user.is_guest) {
- // this.matrixClient.setGuest(true);
- // }
- console.error("Created client", this.matrixClient);
- return this.matrixClient
- .initRustCrypto()
- .then(() => {
- console.log("Crypto initialized");
-
- this.addMatrixClientListeners(this.matrixClient);
-
- this.matrixClient.startClient();
- return this.matrixClient;
- })
- .then((matrixClient) => {
- if (matrixClient.isInitialSyncComplete()) {
- console.log("Initial sync done already!");
- return matrixClient;
- } else {
- return new Promise((resolve, reject) => {
- matrixClient.once("sync", function (state, ignoredprevState, ignoredres) {
- console.log(state); // state will be 'PREPARED' when the client is ready to use
- if (state == "PREPARED") {
- resolve(matrixClient);
- } else if (state == "ERROR") {
- reject("Error syncing");
- }
- });
- });
+ if (cryptoStore) {
+ const migrationState = await cryptoStore.getMigrationState();
+ if (migrationState >= 0) {
+ const store = this.$store.getters.storage;
+ // Rust crypto migration is broken, needs the sessionId to be set. So do that here, if needed.
+ for (let i = 0; i < store.length; ++i) {
+ const key = store.key(i);
+ if (key.startsWith("crypto.sessions/")) {
+ const sessions = JSON.parse(store.getItem(key));
+ for (let sessionId of Object.keys(sessions)) {
+ sessions[sessionId].sessionId = sessionId;
+ sessions[sessionId].deviceKey = key.substring("crypto.sessions/".length);
+ }
+ store.setItem(key, JSON.stringify(sessions));
}
- })
- .then(() => {
- return this.matrixClient.isVersionSupported("v1.11");
- })
- .then((authedMediaSupported) => {
- this.useAuthedMedia = authedMediaSupported;
+ }
+ }
+ }
- // Ready to use! Start by loading rooms.
- this.initClient();
- return user;
+ const baseUrl = await util.getMatrixBaseUrl(user, this.$config);
+ var opts = {
+ baseUrl: baseUrl,
+ userId: user.user_id,
+ store: matrixStore,
+ deviceId: user.device_id,
+ accessToken: user.access_token,
+ timelineSupport: true,
+ unstableClientRelationAggregation: true,
+ cryptoStore: cryptoStore
+ //useAuthorizationHeader: true
+ };
+ const matrixClient = sdk.createClient(opts);
+ this.matrixClient = matrixClient;
+ await this.matrixClient.initRustCrypto({useIndexedDB: this.rememberMe});// storageKey: cryptoStorageKey});
+ console.log("Crypto initialized");
+ this.addMatrixClientListeners(this.matrixClient);
+ this.matrixClient.startClient();
+ if (!this.matrixClient.isInitialSyncComplete()) {
+ await new Promise((resolve, reject) => {
+ this.matrixClient.once("sync", function (state, ignoredprevState, ignoredres) {
+ console.log(state); // state will be 'PREPARED' when the client is ready to use
+ if (state == "PREPARED") {
+ resolve(matrixClient);
+ } else if (state == "ERROR") {
+ reject("Error syncing");
+ }
});
- });
+ });
+ }
+ this.useAuthedMedia = await this.matrixClient.isVersionSupported("v1.11");
+
+ // Ready to use! Start by loading rooms.
+ this.initClient();
+ return user;
},
/**