[MM-44644] Update configured server URL from SiteURL if available (#2152)
This commit is contained in:
@@ -161,6 +161,7 @@ export function handleEditServerModal(e: IpcMainEvent, name: string) {
|
|||||||
teams[serverIndex].name = data.name;
|
teams[serverIndex].name = data.name;
|
||||||
teams[serverIndex].url = data.url;
|
teams[serverIndex].url = data.url;
|
||||||
Config.set('teams', teams);
|
Config.set('teams', teams);
|
||||||
|
updateServerInfos([teams[serverIndex]]);
|
||||||
}).catch((e) => {
|
}).catch((e) => {
|
||||||
// e is undefined for user cancellation
|
// e is undefined for user cancellation
|
||||||
if (e) {
|
if (e) {
|
||||||
|
@@ -102,6 +102,7 @@ describe('main/app/utils', () => {
|
|||||||
it('should open all tabs', async () => {
|
it('should open all tabs', async () => {
|
||||||
ServerInfo.mockReturnValue({promise: {
|
ServerInfo.mockReturnValue({promise: {
|
||||||
name: 'server-1',
|
name: 'server-1',
|
||||||
|
siteURL: 'http://server-1.com',
|
||||||
serverVersion: '6.0.0',
|
serverVersion: '6.0.0',
|
||||||
hasPlaybooks: true,
|
hasPlaybooks: true,
|
||||||
hasFocalboard: true,
|
hasFocalboard: true,
|
||||||
@@ -117,6 +118,7 @@ describe('main/app/utils', () => {
|
|||||||
it('should open only playbooks', async () => {
|
it('should open only playbooks', async () => {
|
||||||
ServerInfo.mockReturnValue({promise: {
|
ServerInfo.mockReturnValue({promise: {
|
||||||
name: 'server-1',
|
name: 'server-1',
|
||||||
|
siteURL: 'http://server-1.com',
|
||||||
serverVersion: '6.0.0',
|
serverVersion: '6.0.0',
|
||||||
hasPlaybooks: true,
|
hasPlaybooks: true,
|
||||||
hasFocalboard: false,
|
hasFocalboard: false,
|
||||||
@@ -132,6 +134,7 @@ describe('main/app/utils', () => {
|
|||||||
it('should open none when server version is too old', async () => {
|
it('should open none when server version is too old', async () => {
|
||||||
ServerInfo.mockReturnValue({promise: {
|
ServerInfo.mockReturnValue({promise: {
|
||||||
name: 'server-1',
|
name: 'server-1',
|
||||||
|
siteURL: 'http://server-1.com',
|
||||||
serverVersion: '5.0.0',
|
serverVersion: '5.0.0',
|
||||||
hasPlaybooks: true,
|
hasPlaybooks: true,
|
||||||
hasFocalboard: true,
|
hasFocalboard: true,
|
||||||
@@ -143,6 +146,21 @@ describe('main/app/utils', () => {
|
|||||||
expect(Config.teams.find((team) => team.name === 'server-1').tabs.find((tab) => tab.name === TAB_PLAYBOOKS).isOpen).toBeUndefined();
|
expect(Config.teams.find((team) => team.name === 'server-1').tabs.find((tab) => tab.name === TAB_PLAYBOOKS).isOpen).toBeUndefined();
|
||||||
expect(Config.teams.find((team) => team.name === 'server-1').tabs.find((tab) => tab.name === TAB_FOCALBOARD).isOpen).toBeUndefined();
|
expect(Config.teams.find((team) => team.name === 'server-1').tabs.find((tab) => tab.name === TAB_FOCALBOARD).isOpen).toBeUndefined();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should update server URL using site URL', async () => {
|
||||||
|
ServerInfo.mockReturnValue({promise: {
|
||||||
|
name: 'server-1',
|
||||||
|
siteURL: 'http://server-2.com',
|
||||||
|
serverVersion: '6.0.0',
|
||||||
|
hasPlaybooks: true,
|
||||||
|
hasFocalboard: true,
|
||||||
|
}});
|
||||||
|
|
||||||
|
updateServerInfos(Config.teams);
|
||||||
|
await new Promise(setImmediate); // workaround since Promise.all seems to not let me wait here
|
||||||
|
|
||||||
|
expect(Config.teams.find((team) => team.name === 'server-1').url).toBe('http://server-2.com');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('getDeeplinkingURL', () => {
|
describe('getDeeplinkingURL', () => {
|
||||||
|
@@ -55,13 +55,23 @@ export function updateServerInfos(teams: TeamWithTabs[]) {
|
|||||||
});
|
});
|
||||||
Promise.all(serverInfos).then((data: Array<RemoteInfo | string | undefined>) => {
|
Promise.all(serverInfos).then((data: Array<RemoteInfo | string | undefined>) => {
|
||||||
const teams = Config.teams;
|
const teams = Config.teams;
|
||||||
teams.forEach((team) => openExtraTabs(data, team));
|
teams.forEach((team) => {
|
||||||
|
updateServerURL(data, team);
|
||||||
|
openExtraTabs(data, team);
|
||||||
|
});
|
||||||
Config.set('teams', teams);
|
Config.set('teams', teams);
|
||||||
}).catch((reason: any) => {
|
}).catch((reason: any) => {
|
||||||
log.error('Error getting server infos', reason);
|
log.error('Error getting server infos', reason);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function updateServerURL(data: Array<RemoteInfo | string | undefined>, team: TeamWithTabs) {
|
||||||
|
const remoteInfo = data.find((info) => info && typeof info !== 'string' && info.name === team.name) as RemoteInfo;
|
||||||
|
if (remoteInfo && remoteInfo.siteURL) {
|
||||||
|
team.url = remoteInfo.siteURL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function openExtraTabs(data: Array<RemoteInfo | string | undefined>, team: TeamWithTabs) {
|
function openExtraTabs(data: Array<RemoteInfo | string | undefined>, team: TeamWithTabs) {
|
||||||
const remoteInfo = data.find((info) => info && typeof info !== 'string' && info.name === team.name) as RemoteInfo;
|
const remoteInfo = data.find((info) => info && typeof info !== 'string' && info.name === team.name) as RemoteInfo;
|
||||||
if (remoteInfo) {
|
if (remoteInfo) {
|
||||||
|
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
import log from 'electron-log';
|
import log from 'electron-log';
|
||||||
|
|
||||||
import {RemoteInfo} from 'types/server';
|
import {ClientConfig, RemoteInfo} from 'types/server';
|
||||||
|
|
||||||
import {MattermostServer} from 'common/servers/MattermostServer';
|
import {MattermostServer} from 'common/servers/MattermostServer';
|
||||||
|
|
||||||
@@ -26,7 +26,7 @@ export class ServerInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getRemoteInfo = () => {
|
getRemoteInfo = () => {
|
||||||
getServerAPI<{Version: string}>(
|
getServerAPI<ClientConfig>(
|
||||||
new URL(`${this.server.url.toString()}/api/v4/config/client?format=old`),
|
new URL(`${this.server.url.toString()}/api/v4/config/client?format=old`),
|
||||||
false,
|
false,
|
||||||
this.onGetConfig,
|
this.onGetConfig,
|
||||||
@@ -41,8 +41,9 @@ export class ServerInfo {
|
|||||||
this.onRetrievedRemoteInfo);
|
this.onRetrievedRemoteInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
onGetConfig = (data: {Version: string}) => {
|
onGetConfig = (data: ClientConfig) => {
|
||||||
this.remoteInfo.serverVersion = data.Version;
|
this.remoteInfo.serverVersion = data.Version;
|
||||||
|
this.remoteInfo.siteURL = data.SiteURL;
|
||||||
|
|
||||||
this.trySendRemoteInfo();
|
this.trySendRemoteInfo();
|
||||||
}
|
}
|
||||||
|
@@ -4,6 +4,12 @@
|
|||||||
export type RemoteInfo = {
|
export type RemoteInfo = {
|
||||||
name: string;
|
name: string;
|
||||||
serverVersion?: string;
|
serverVersion?: string;
|
||||||
|
siteURL?: string;
|
||||||
hasFocalboard?: boolean;
|
hasFocalboard?: boolean;
|
||||||
hasPlaybooks?: boolean;
|
hasPlaybooks?: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export type ClientConfig = {
|
||||||
|
Version: string;
|
||||||
|
SiteURL: string;
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user