mirror of https://github.com/vector-im/riot-web
Merge remote-tracking branch 'origin/develop' into develop
commit
989e994abc
src
|
@ -237,7 +237,7 @@ function _handleRestoreFailure(e) {
|
||||||
+ ' This is a once off; sorry for the inconvenience.',
|
+ ' This is a once off; sorry for the inconvenience.',
|
||||||
);
|
);
|
||||||
|
|
||||||
_clearLocalStorage();
|
_clearStorage();
|
||||||
|
|
||||||
return q.reject(new Error(
|
return q.reject(new Error(
|
||||||
_t('Unable to restore previous session') + ': ' + msg,
|
_t('Unable to restore previous session') + ': ' + msg,
|
||||||
|
@ -258,7 +258,7 @@ function _handleRestoreFailure(e) {
|
||||||
return def.promise.then((success) => {
|
return def.promise.then((success) => {
|
||||||
if (success) {
|
if (success) {
|
||||||
// user clicked continue.
|
// user clicked continue.
|
||||||
_clearLocalStorage();
|
_clearStorage();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -332,6 +332,10 @@ export function setLoggedIn(credentials) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// stop any running clients before we create a new one with these new credentials
|
// stop any running clients before we create a new one with these new credentials
|
||||||
|
//
|
||||||
|
// XXX: why do we have any running clients here? Maybe on sign-in after
|
||||||
|
// initial use as a guest? but what about our persistent storage? we need to
|
||||||
|
// be careful not to leak e2e data created as one user into another session.
|
||||||
stopMatrixClient();
|
stopMatrixClient();
|
||||||
|
|
||||||
MatrixClientPeg.replaceUsingCreds(credentials);
|
MatrixClientPeg.replaceUsingCreds(credentials);
|
||||||
|
@ -402,13 +406,19 @@ export function startMatrixClient() {
|
||||||
* a session has been logged out / ended.
|
* a session has been logged out / ended.
|
||||||
*/
|
*/
|
||||||
export function onLoggedOut() {
|
export function onLoggedOut() {
|
||||||
_clearLocalStorage();
|
stopMatrixClient(true);
|
||||||
stopMatrixClient();
|
|
||||||
dis.dispatch({action: 'on_logged_out'});
|
dis.dispatch({action: 'on_logged_out'});
|
||||||
}
|
}
|
||||||
|
|
||||||
function _clearLocalStorage() {
|
function _clearStorage() {
|
||||||
Analytics.logout();
|
Analytics.logout();
|
||||||
|
|
||||||
|
const cli = MatrixClientPeg.get();
|
||||||
|
if (cli) {
|
||||||
|
// TODO: *really* ought to wait for the promise to complete
|
||||||
|
cli.clearStores().done();
|
||||||
|
}
|
||||||
|
|
||||||
if (!window.localStorage) {
|
if (!window.localStorage) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -425,9 +435,13 @@ function _clearLocalStorage() {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Stop all the background processes related to the current client
|
* Stop all the background processes related to the current client.
|
||||||
|
*
|
||||||
|
* Optionally clears persistent stores.
|
||||||
|
*
|
||||||
|
* @param {boolean} clearStores true to clear the persistent stores.
|
||||||
*/
|
*/
|
||||||
export function stopMatrixClient() {
|
export function stopMatrixClient(clearStores) {
|
||||||
Notifier.stop();
|
Notifier.stop();
|
||||||
UserActivity.stop();
|
UserActivity.stop();
|
||||||
Presence.stop();
|
Presence.stop();
|
||||||
|
@ -436,7 +450,13 @@ export function stopMatrixClient() {
|
||||||
if (cli) {
|
if (cli) {
|
||||||
cli.stopClient();
|
cli.stopClient();
|
||||||
cli.removeAllListeners();
|
cli.removeAllListeners();
|
||||||
cli.store.deleteAllData();
|
|
||||||
MatrixClientPeg.unset();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (clearStores) {
|
||||||
|
// note that we have to do this *after* stopping the client, but
|
||||||
|
// *before* clearing the MatrixClientPeg.
|
||||||
|
_clearStorage();
|
||||||
|
}
|
||||||
|
|
||||||
|
MatrixClientPeg.unset();
|
||||||
}
|
}
|
||||||
|
|
|
@ -292,7 +292,7 @@ module.exports = React.createClass({
|
||||||
},
|
},
|
||||||
|
|
||||||
componentWillUnmount: function() {
|
componentWillUnmount: function() {
|
||||||
Lifecycle.stopMatrixClient();
|
Lifecycle.stopMatrixClient(false);
|
||||||
dis.unregister(this.dispatcherRef);
|
dis.unregister(this.dispatcherRef);
|
||||||
UDEHandler.stopListening();
|
UDEHandler.stopListening();
|
||||||
window.removeEventListener("focus", this.onFocus);
|
window.removeEventListener("focus", this.onFocus);
|
||||||
|
@ -364,7 +364,7 @@ module.exports = React.createClass({
|
||||||
// is completed in another browser, we'll be 401ed for using
|
// is completed in another browser, we'll be 401ed for using
|
||||||
// a guest access token for a non-guest account.
|
// a guest access token for a non-guest account.
|
||||||
// It will be restarted in onReturnToGuestClick
|
// It will be restarted in onReturnToGuestClick
|
||||||
Lifecycle.stopMatrixClient();
|
Lifecycle.stopMatrixClient(false);
|
||||||
|
|
||||||
this.notifyNewScreen('register');
|
this.notifyNewScreen('register');
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -40,7 +40,14 @@ export default class LanguageDropdown extends React.Component {
|
||||||
}
|
}
|
||||||
|
|
||||||
componentWillMount() {
|
componentWillMount() {
|
||||||
languageHandler.getAllLanguagesFromJson().then((langs) => {
|
languageHandler.getAllLanguageKeysFromJson().then((langKeys) => {
|
||||||
|
const langs = [];
|
||||||
|
langKeys.forEach((languageKey) => {
|
||||||
|
langs.push({
|
||||||
|
value: languageKey,
|
||||||
|
label: _t(languageKey)
|
||||||
|
});
|
||||||
|
});
|
||||||
langs.sort(function(a, b){
|
langs.sort(function(a, b){
|
||||||
if(a.label < b.label) return -1;
|
if(a.label < b.label) return -1;
|
||||||
if(a.label > b.label) return 1;
|
if(a.label > b.label) return 1;
|
||||||
|
|
|
@ -133,7 +133,7 @@ export function setLanguage(preferredLangs) {
|
||||||
throw new Error("Unable to find an appropriate language");
|
throw new Error("Unable to find an appropriate language");
|
||||||
}
|
}
|
||||||
|
|
||||||
return getLanguage(i18nFolder + availLangs[langToUse].fileName);
|
return getLanguage(i18nFolder + availLangs[langToUse]);
|
||||||
}).then((langData) => {
|
}).then((langData) => {
|
||||||
counterpart.registerTranslations(langToUse, langData);
|
counterpart.registerTranslations(langToUse, langData);
|
||||||
counterpart.setLocale(langToUse);
|
counterpart.setLocale(langToUse);
|
||||||
|
@ -142,25 +142,16 @@ export function setLanguage(preferredLangs) {
|
||||||
|
|
||||||
// Set 'en' as fallback language:
|
// Set 'en' as fallback language:
|
||||||
if (langToUse != "en") {
|
if (langToUse != "en") {
|
||||||
return getLanguage(i18nFolder + availLangs['en'].fileName);
|
return getLanguage(i18nFolder + availLangs['en']);
|
||||||
}
|
}
|
||||||
}).then((langData) => {
|
}).then((langData) => {
|
||||||
if (langData) counterpart.registerTranslations('en', langData);
|
if (langData) counterpart.registerTranslations('en', langData);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
export function getAllLanguagesFromJson() {
|
export function getAllLanguageKeysFromJson() {
|
||||||
return getLangsJson().then((langsObject) => {
|
return getLangsJson().then((langs) => {
|
||||||
var langs = [];
|
return Object.keys(langs);
|
||||||
for (var langKey in langsObject) {
|
|
||||||
if (langsObject.hasOwnProperty(langKey)) {
|
|
||||||
langs.push({
|
|
||||||
'value': langKey,
|
|
||||||
'label': langsObject[langKey].label
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return langs;
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue