diff --git a/electron_app/src/electron-main.js b/electron_app/src/electron-main.js index 8b837caec2..4c6f584c1b 100644 --- a/electron_app/src/electron-main.js +++ b/electron_app/src/electron-main.js @@ -1,8 +1,8 @@ /* Copyright 2016 Aviral Dasgupta Copyright 2016 OpenMarket Ltd -Copyright 2017 Michael Telatynski <7t3chguy@gmail.com> Copyright 2018 New Vector Ltd +Copyright 2017, 2019 Michael Telatynski <7t3chguy@gmail.com> Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -173,6 +173,9 @@ ipcMain.on('ipcCall', async function(ev, payload) { await migrateFromOldOrigin(); migratingOrigin = false; break; + case 'getConfig': + ret = vectorConfig; + break; default: mainWindow.webContents.send('ipcReply', { id: payload.id, diff --git a/src/vector/getconfig.js b/src/vector/getconfig.js index 239ba8067a..8c57986bd8 100644 --- a/src/vector/getconfig.js +++ b/src/vector/getconfig.js @@ -17,6 +17,8 @@ limitations under the License. import Promise from 'bluebird'; import request from 'browser-request'; +// Load the config file. First try to load up a domain-specific config of the +// form "config.$domain.json" and if that fails, fall back to config.json. export async function getVectorConfig(relativeLocation) { if (relativeLocation === undefined) relativeLocation = ''; if (relativeLocation !== '' && !relativeLocation.endsWith('/')) relativeLocation += '/'; diff --git a/src/vector/index.js b/src/vector/index.js index 597b3f374f..9270278898 100644 --- a/src/vector/index.js +++ b/src/vector/index.js @@ -2,6 +2,7 @@ Copyright 2015, 2016 OpenMarket Ltd Copyright 2017 Vector Creations Ltd Copyright 2018, 2019 New Vector Ltd +Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -43,7 +44,6 @@ import PlatformPeg from 'matrix-react-sdk/lib/PlatformPeg'; sdk.loadSkin(require('../component-index')); import VectorConferenceHandler from 'matrix-react-sdk/lib/VectorConferenceHandler'; import Promise from 'bluebird'; -import request from 'browser-request'; import * as languageHandler from 'matrix-react-sdk/lib/languageHandler'; import {_t, _td, newTranslatableError} from 'matrix-react-sdk/lib/languageHandler'; import AutoDiscoveryUtils from 'matrix-react-sdk/lib/utils/AutoDiscoveryUtils'; @@ -66,8 +66,6 @@ import Olm from 'olm'; import CallHandler from 'matrix-react-sdk/lib/CallHandler'; -import {getVectorConfig} from './getconfig'; - let lastLocationHashSet = null; // Disable warnings for now: we use deprecated bluebird functions @@ -119,7 +117,7 @@ function routeUrl(location) { } function onHashChange(ev) { - if (decodeURIComponent(window.location.hash) == lastLocationHashSet) { + if (decodeURIComponent(window.location.hash) === lastLocationHashSet) { // we just set this: no need to route it! return; } @@ -159,7 +157,7 @@ function makeRegistrationUrl(params) { const keys = Object.keys(params); for (let i = 0; i < keys.length; ++i) { - if (i == 0) { + if (i === 0) { url += '?'; } else { url += '&'; @@ -170,38 +168,6 @@ function makeRegistrationUrl(params) { return url; } -export function getConfig(configJsonFilename) { - return new Promise(function(resolve, reject) { - request( - { method: "GET", url: configJsonFilename }, - (err, response, body) => { - if (err || response.status < 200 || response.status >= 300) { - // Lack of a config isn't an error, we should - // just use the defaults. - // Also treat a blank config as no config, assuming - // the status code is 0, because we don't get 404s - // from file: URIs so this is the only way we can - // not fail if the file doesn't exist when loading - // from a file:// URI. - if (response) { - if (response.status == 404 || (response.status == 0 && body == '')) { - resolve({}); - } - } - reject({err: err, response: response}); - return; - } - - // We parse the JSON ourselves rather than use the JSON - // parameter, since this throws a parse error on empty - // which breaks if there's no config.json and we're - // loading from the filesystem (see above). - resolve(JSON.parse(body)); - }, - ); - }); -} - function onTokenLoginCompleted() { // if we did a token login, we're now left with the token, hs and is // url as query params in the url; a little nasty but let's redirect to @@ -252,12 +218,12 @@ async function loadApp() { PlatformPeg.set(new WebPlatform()); } - // Load the config file. First try to load up a domain-specific config of the - // form "config.$domain.json" and if that fails, fall back to config.json. + const platform = PlatformPeg.get(); + let configJson; let configError; try { - configJson = await getVectorConfig(); + configJson = await platform.getConfig(); } catch (e) { configError = e; } @@ -342,7 +308,6 @@ async function loadApp() { Unable to load config file: please refresh the page to try again. , document.getElementById('matrixchat')); } else if (validBrowser || acceptInvalidBrowser) { - const platform = PlatformPeg.get(); platform.startUpdater(); // Don't bother loading the app until the config is verified @@ -410,7 +375,7 @@ function loadOlm() { }).then(() => { console.log("Using WebAssembly Olm"); }).catch((e) => { - console.log("Failed to load Olm: trying legacy version"); + console.log("Failed to load Olm: trying legacy version", e); return new Promise((resolve, reject) => { const s = document.createElement('script'); s.src = 'olm_legacy.js'; // XXX: This should be cache-busted too diff --git a/src/vector/platform/ElectronPlatform.js b/src/vector/platform/ElectronPlatform.js index 04f472d645..387403a600 100644 --- a/src/vector/platform/ElectronPlatform.js +++ b/src/vector/platform/ElectronPlatform.js @@ -4,6 +4,7 @@ Copyright 2016 Aviral Dasgupta Copyright 2016 OpenMarket Ltd Copyright 2018 New Vector Ltd +Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -101,6 +102,10 @@ export default class ElectronPlatform extends VectorBasePlatform { this.stopUpdateCheck = this.stopUpdateCheck.bind(this); } + async getConfig(): Promise<{}> { + return this._ipcCall('getConfig'); + } + async onUpdateDownloaded(ev, updateInfo) { dis.dispatch({ action: 'new_version', diff --git a/src/vector/platform/VectorBasePlatform.js b/src/vector/platform/VectorBasePlatform.js index c10c0accd3..f24031f732 100644 --- a/src/vector/platform/VectorBasePlatform.js +++ b/src/vector/platform/VectorBasePlatform.js @@ -4,6 +4,7 @@ Copyright 2016 Aviral Dasgupta Copyright 2016 OpenMarket Ltd Copyright 2018 New Vector Ltd +Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -21,6 +22,7 @@ limitations under the License. import BasePlatform from 'matrix-react-sdk/lib/BasePlatform'; import { _t } from 'matrix-react-sdk/lib/languageHandler'; import dis from 'matrix-react-sdk/lib/dispatcher'; +import {getVectorConfig} from "../getconfig"; import Favico from 'favico.js'; @@ -44,6 +46,10 @@ export default class VectorBasePlatform extends BasePlatform { this.stopUpdateCheck = this.stopUpdateCheck.bind(this); } + async getConfig(): Promise<{}> { + return getVectorConfig(); + } + getHumanReadableName(): string { return 'Vector Base Platform'; // no translation required: only used for analytics }