[MM-44644] Update configured server URL from SiteURL if available (#2152)

This commit is contained in:
Devin Binnie
2022-06-14 12:30:24 -04:00
committed by GitHub
parent 3d353d021b
commit 537ed1dd0c
5 changed files with 40 additions and 4 deletions

View File

@@ -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) {

View File

@@ -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', () => {

View File

@@ -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) {

View File

@@ -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();
} }

View File

@@ -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;
}