From a240621a171b414ea056afb0f17ce9a8cd37cd4a Mon Sep 17 00:00:00 2001 From: Vishwas Shashidhar Date: Mon, 27 Apr 2020 15:05:25 +0530 Subject: [PATCH 1/3] feat: SDA-1983: implement simplified installer window on SDA (#977) * SDA-1983: create the new welcome window Signed-off-by: Vishwas Shashidhar * SDA-1983: add logic to validate pod url and open welcome page on startup conditionally Signed-off-by: Vishwas Shashidhar * SDA-1983: add unit tests and finish the full logic implementation Signed-off-by: Vishwas Shashidhar * SDA-1983: minor fixes Signed-off-by: Vishwas Shashidhar * SDA-1983: fix sso double slash Signed-off-by: Vishwas Shashidhar * SDA-1983: fix deleting url from global config object Signed-off-by: Vishwas Shashidhar * SDA-1983: simplify setting user config Co-Authored-By: Kiran Niranjan * SDA-1983: delete unused variable Signed-off-by: Vishwas Shashidhar * SDA-1983: add japanese and french translations Signed-off-by: Vishwas Shashidhar Co-authored-by: Kiran Niranjan --- config/Symphony.config | 2 +- package-lock.json | 8 +- spec/__snapshots__/welcome.spec.ts.snap | 63 +++++++ spec/welcome.spec.ts | 132 ++++++++++++++ src/app/config-handler.ts | 20 ++- src/app/window-handler.ts | 135 ++++++++++---- src/locale/en-US.json | 9 + src/locale/en.json | 9 + src/locale/fr-FR.json | 9 + src/locale/fr.json | 9 + src/locale/ja-JP.json | 9 + src/locale/ja.json | 9 + src/renderer/assets/symphony-logo-plain.png | Bin 0 -> 77741 bytes src/renderer/components/welcome.tsx | 141 +++++++++++++++ src/renderer/preload-component.ts | 7 + src/renderer/preload-main.ts | 15 ++ src/renderer/styles/welcome.less | 186 ++++++++++++++++++++ 17 files changed, 717 insertions(+), 46 deletions(-) create mode 100644 spec/__snapshots__/welcome.spec.ts.snap create mode 100644 spec/welcome.spec.ts create mode 100644 src/renderer/assets/symphony-logo-plain.png create mode 100644 src/renderer/components/welcome.tsx create mode 100644 src/renderer/styles/welcome.less diff --git a/config/Symphony.config b/config/Symphony.config index 87b6c6b4..b12bdb96 100644 --- a/config/Symphony.config +++ b/config/Symphony.config @@ -1,5 +1,5 @@ { - "url":"https://foundation-dev.symphony.com", + "url":"https://my.symphony.com", "minimizeOnClose" : "ENABLED", "launchOnStartup" : "ENABLED", "alwaysOnTop" : "DISABLED", diff --git a/package-lock.json b/package-lock.json index b3040557..742f14f7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17739,16 +17739,16 @@ } }, "screen-share-indicator-frame": { - "version": "1.4.4", - "resolved": "git+https://github.com/symphonyoss/ScreenShareIndicatorFrame.git#e389ca1e037d174de4b5facb69e435c32c74db76", + "version": "1.4.6", + "resolved": "git+https://github.com/symphonyoss/ScreenShareIndicatorFrame.git#32472243f7c840c6f1310fde56b5498598eeb0a8", "optional": true, "requires": { "run-script-os": "1.0.7" } }, "screen-snippet": { - "version": "1.0.6", - "resolved": "git+https://github.com/symphonyoss/ScreenSnippet2.git#c493f35831d7bf2a8164945f83c2669781dde3a7", + "version": "1.0.7", + "resolved": "git+https://github.com/symphonyoss/ScreenSnippet2.git#de0b90b92113b866cbc30a1c0a5f3c8fc0f6a418", "optional": true }, "semver": { diff --git a/spec/__snapshots__/welcome.spec.ts.snap b/spec/__snapshots__/welcome.spec.ts.snap new file mode 100644 index 00000000..0299429f --- /dev/null +++ b/spec/__snapshots__/welcome.spec.ts.snap @@ -0,0 +1,63 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`welcome should render correctly 1`] = ` +
+
+ Symphony Logo +
+
+

+ Pod URL +

+
+
+ +
+
+ +
+
+
+
+`; diff --git a/spec/welcome.spec.ts b/spec/welcome.spec.ts new file mode 100644 index 00000000..eddb9dfe --- /dev/null +++ b/spec/welcome.spec.ts @@ -0,0 +1,132 @@ +import { shallow } from 'enzyme'; +import * as React from 'react'; +import Welcome from '../src/renderer/components/welcome'; +import { ipcRenderer } from './__mocks__/electron'; + +describe('welcome', () => { + const welcomeLabel = 'welcome'; + const welcomeMock = { + url: 'https://my.symphony.com', + message: '', + urlValid: true, + sso: false, + }; + const onLabelEvent = 'on'; + const removeListenerLabelEvent = 'removeListener'; + + it('should render correctly', () => { + const wrapper = shallow(React.createElement(Welcome)); + expect(wrapper).toMatchSnapshot(); + }); + + it('should call `welcome` event when component is mounted', () => { + const spy = jest.spyOn(ipcRenderer, onLabelEvent); + shallow(React.createElement(Welcome)); + expect(spy).toBeCalledWith(welcomeLabel, expect.any(Function)); + }); + + it('should remove listener `welcome` when component is unmounted', () => { + const spyMount = jest.spyOn(ipcRenderer, onLabelEvent); + const spyUnmount = jest.spyOn(ipcRenderer, removeListenerLabelEvent); + + const wrapper = shallow(React.createElement(Welcome)); + expect(spyMount).toBeCalledWith(welcomeLabel, expect.any(Function)); + + wrapper.unmount(); + expect(spyUnmount).toBeCalledWith(welcomeLabel, expect.any(Function)); + }); + + it('should call `updateState` when component is mounted', () => { + const spy = jest.spyOn(Welcome.prototype, 'setState'); + shallow(React.createElement(Welcome)); + + ipcRenderer.send('welcome', welcomeMock); + + expect(spy).toBeCalledWith(welcomeMock); + }); + + it('should change pod url in text box', () => { + const podUrlMock = { + url: 'https://corporate.symphony.com', + message: '', + urlValid: true, + sso: false, + }; + + const spy = jest.spyOn(Welcome.prototype, 'setState'); + const updatePodUrlSpy = jest.spyOn(Welcome.prototype, 'updatePodUrl'); + + const wrapper = shallow(React.createElement(Welcome)); + ipcRenderer.send('welcome', welcomeMock); + + const welcomePodUrlBox = `input.Welcome-main-container-podurl-box`; + const input = wrapper.find(welcomePodUrlBox); + + input.simulate('focus'); + input.simulate('change', {target: {value: 'https://corporate.symphony.com'}}); + + expect(updatePodUrlSpy).toBeCalled(); + expect(spy).toBeCalledWith(podUrlMock); + }); + + it('should show message for invalid pod url', () => { + const podUrlMock = { + url: 'abcdef', + message: 'Please enter a valid url', + urlValid: false, + sso: false, + }; + + const spy = jest.spyOn(Welcome.prototype, 'setState'); + const updatePodUrlSpy = jest.spyOn(Welcome.prototype, 'updatePodUrl'); + + const wrapper = shallow(React.createElement(Welcome)); + ipcRenderer.send('welcome', welcomeMock); + + const welcomePodUrlBox = `input.Welcome-main-container-podurl-box`; + const input = wrapper.find(welcomePodUrlBox); + + input.simulate('focus'); + input.simulate('change', {target: {value: 'abcdef'}}); + + expect(updatePodUrlSpy).toBeCalled(); + expect(spy).toBeCalledWith(podUrlMock); + }); + + it('should click sso checkbox', () => { + const podUrlMock = { + url: 'https://my.symphony.com', + message: '', + urlValid: true, + sso: true, + }; + + const spy = jest.spyOn(Welcome.prototype, 'setState'); + const updatePodUrlSpy = jest.spyOn(Welcome.prototype, 'updateSsoCheckbox'); + + const wrapper = shallow(React.createElement(Welcome)); + ipcRenderer.send('welcome', welcomeMock); + + const welcomePodUrlBox = `input[type="checkbox"]`; + const input = wrapper.find(welcomePodUrlBox); + + input.simulate('focus'); + input.simulate('change', {target: {checked: true}}); + + expect(updatePodUrlSpy).toBeCalled(); + expect(spy).toBeCalledWith(podUrlMock); + }); + + it('should set pod url', () => { + const spy = jest.spyOn(Welcome.prototype, 'setState'); + const setPodUrlSpy = jest.spyOn(Welcome.prototype, 'setPodUrl'); + + const wrapper = shallow(React.createElement(Welcome)); + ipcRenderer.send('welcome', welcomeMock); + const welcomeContinueButton = `button.Welcome-continue-button`; + wrapper.find(welcomeContinueButton).simulate('click'); + + expect(setPodUrlSpy).toBeCalled(); + expect(spy).toBeCalledWith(welcomeMock); + }); +}); diff --git a/src/app/config-handler.ts b/src/app/config-handler.ts index 3de5d132..e32428f8 100644 --- a/src/app/config-handler.ts +++ b/src/app/config-handler.ts @@ -22,12 +22,8 @@ export enum ClientSwitchType { CLIENT_2_0_DAILY = 'CLIENT_2_0_DAILY', } -export interface IGlobalConfig { - url: string; - contextIsolation: boolean; -} - export interface IConfig { + url: string; minimizeOnClose: CloudConfigDataTypes; launchOnStartup: CloudConfigDataTypes; alwaysOnTop: CloudConfigDataTypes; @@ -51,6 +47,11 @@ export interface IConfig { clientSwitch: ClientSwitchType; } +export interface IGlobalConfig { + url: string; + contextIsolation: boolean; +} + export interface ICloudConfig { configVersion?: string; podLevelEntitlements: IPodLevelEntitlements; @@ -214,13 +215,13 @@ class Config { * @param data {IConfig} */ public async updateUserConfig(data: Partial): Promise { - logger.info(`config-handler: updating user config values with the data`, data); + logger.info(`config-handler: updating user config values with the data`, JSON.stringify(data)); this.userConfig = { ...this.userConfig, ...data }; try { await writeFile(this.userConfigPath, JSON.stringify(this.userConfig), { encoding: 'utf8' }); - logger.info(`config-handler: updated user config values with the data ${data}`); + logger.info(`config-handler: updated user config values with the data ${JSON.stringify(data)}`); } catch (error) { - logger.error(`config-handler: failed to update user config file with ${data}`, error); + logger.error(`config-handler: failed to update user config file with ${JSON.stringify(data)}`, error); dialog.showErrorBox(`Update failed`, `Failed to update user config due to error: ${error}`); } } @@ -323,7 +324,8 @@ class Config { await app.whenReady(); await this.readGlobalConfig(); logger.info(`config-handler: user config doesn't exist! will create new one and update config`); - await this.updateUserConfig({ configVersion: app.getVersion().toString(), buildNumber, ...this.globalConfig } as IConfig); + const { url, ...rest } = this.globalConfig as IConfig; + await this.updateUserConfig({ configVersion: app.getVersion().toString(), buildNumber, ...rest } as IConfig); } this.userConfig = this.parseConfigData(fs.readFileSync(this.userConfigPath, 'utf8')); logger.info(`config-handler: User configuration: `, this.userConfig); diff --git a/src/app/window-handler.ts b/src/app/window-handler.ts index 9a79c4f9..78422fb4 100644 --- a/src/app/window-handler.ts +++ b/src/app/window-handler.ts @@ -51,8 +51,8 @@ export interface ICustomBrowserWindow extends Electron.BrowserWindow { } // Default window width & height -const DEFAULT_WIDTH: number = 900; -const DEFAULT_HEIGHT: number = 900; +let DEFAULT_WIDTH: number = 900; +let DEFAULT_HEIGHT: number = 900; export class WindowHandler { @@ -88,10 +88,12 @@ export class WindowHandler { private readonly backgroundThrottling: boolean; private readonly windowOpts: ICustomBrowserWindowConstructorOpts; private readonly globalConfig: IGlobalConfig; + private readonly userConfig: IConfig; private readonly config: IConfig; // Window reference private readonly windows: object; + private shouldShowWelcomeScreen: boolean = false; private loadFailError: string | undefined; private mainWindow: ICustomBrowserWindow | null = null; private aboutAppWindow: Electron.BrowserWindow | null = null; @@ -105,13 +107,15 @@ export class WindowHandler { // Use these variables only on initial setup this.config = config.getConfigFields([ 'isCustomTitleBar', 'mainWinPos', 'minimizeOnClose', 'notificationSettings', 'alwaysOnTop', 'locale', 'customFlags', 'clientSwitch' ]); logger.info(`window-handler: main windows initialized with following config data`, this.config); + this.globalConfig = config.getGlobalConfigFields([ 'url', 'contextIsolation' ]); - const { disableThrottling } = config.getCloudConfigFields([ 'disableThrottling' ]) as any; - const { url, contextIsolation }: IGlobalConfig = this.globalConfig; + this.userConfig = config.getUserConfigFields([ 'url' ]); + const { customFlags } = this.config; + const { disableThrottling } = config.getCloudConfigFields([ 'disableThrottling' ]) as any; this.windows = {}; - this.contextIsolation = contextIsolation || false; + this.contextIsolation = this.globalConfig.contextIsolation || false; this.backgroundThrottling = (customFlags.disableThrottling !== CloudConfigDataTypes.ENABLED || disableThrottling !== CloudConfigDataTypes.ENABLED); this.isCustomTitleBar = isWindowsOS && this.config.isCustomTitleBar === CloudConfigDataTypes.ENABLED; this.windowOpts = { @@ -146,7 +150,7 @@ export class WindowHandler { i18n.setLocale(locale); try { - const extra = {podUrl: url, process: 'main'}; + const extra = {podUrl: this.userConfig.url ? this.userConfig.url : this.globalConfig.url, process: 'main'}; const defaultOpts = {uploadToServer: false, companyName: 'Symphony', submitURL: ''}; crashReporter.start({...defaultOpts, extra}); } catch (e) { @@ -160,12 +164,28 @@ export class WindowHandler { */ public async createApplication() { - this.updateVersionInfo(); + await this.updateVersionInfo(); this.spellchecker = new SpellChecker(); logger.info(`window-handler: initialized spellchecker module with locale ${this.spellchecker.locale}`); logger.info('window-handler: createApplication mainWinPos: ' + JSON.stringify(this.config.mainWinPos)); + let {isFullScreen, isMaximized} = this.config.mainWinPos ? this.config.mainWinPos : {isFullScreen: false, isMaximized: false}; + + this.url = WindowHandler.getValidUrl(this.userConfig.url ? this.userConfig.url : this.globalConfig.url); + logger.info(`window-handler: setting url ${this.url} from config file!`); + + if (this.globalConfig.url.startsWith('https://my.symphony.com') && !this.userConfig.url) { + this.shouldShowWelcomeScreen = true; + isMaximized = false; + isFullScreen = false; + DEFAULT_HEIGHT = 333; + DEFAULT_WIDTH = 542; + this.windowOpts.resizable = false; + this.windowOpts.maximizable = false; + this.windowOpts.fullscreenable = false; + } + // set window opts with additional config this.mainWindow = new BrowserWindow({ ...this.windowOpts, ...getBounds(this.config.mainWinPos, DEFAULT_WIDTH, DEFAULT_HEIGHT), @@ -180,31 +200,6 @@ export class WindowHandler { logger.info('window-handler: this.mainWindow.getBounds: ' + JSON.stringify(this.mainWindow.getBounds())); this.mainWindow.winName = apiName.mainWindowName; - const {isFullScreen, isMaximized} = this.config.mainWinPos ? this.config.mainWinPos : {isFullScreen: false, isMaximized: false}; - if (isMaximized) { - this.mainWindow.maximize(); - logger.info(`window-handler: window is maximized!`); - } - - if (isFullScreen) { - logger.info(`window-handler: window is in full screen!`); - this.mainWindow.setFullScreen(true); - } - - // Event needed to hide native menu bar on Windows 10 as we use custom menu bar - this.mainWindow.webContents.once('did-start-loading', () => { - logger.info(`window-handler: main window web contents started loading!`); - if ((this.config.isCustomTitleBar === CloudConfigDataTypes.ENABLED && isWindowsOS) && this.mainWindow && windowExists(this.mainWindow)) { - this.mainWindow.setMenuBarVisibility(false); - } - // monitors network connection and - // displays error banner on failure - monitorNetworkInterception(); - }); - - this.url = WindowHandler.getValidUrl(this.globalConfig.url); - logger.info(`window-handler: setting url ${this.url} from config file!`); - // Get url to load from cmd line or from global config file const urlFromCmd = getCommandLineArgs(process.argv, '--url=', false); @@ -219,22 +214,59 @@ export class WindowHandler { logger.info(`window-handler: url from command line is whitelisted in the config file.`); logger.info(`window-handler: setting ${commandLineUrl} from the command line as the main window url.`); this.url = commandLineUrl; + this.shouldShowWelcomeScreen = false; + isMaximized = true; + isFullScreen = false; + this.mainWindow.resizable = true; + this.mainWindow.maximizable = true; + this.mainWindow.fullScreenable = true; } else { logger.info(`window-handler: url ${commandLineUrl} from command line is NOT WHITELISTED in the config file.`); } } else { logger.info(`window-handler: setting ${commandLineUrl} from the command line as the main window url since pod whitelist is empty.`); this.url = commandLineUrl; + this.shouldShowWelcomeScreen = false; + isMaximized = true; + isFullScreen = false; + this.mainWindow.resizable = true; + this.mainWindow.maximizable = true; + this.mainWindow.fullScreenable = true; } } + if (isMaximized) { + this.mainWindow.maximize(); + logger.info(`window-handler: window is maximized!`); + } + + if (isFullScreen) { + logger.info(`window-handler: window is in full screen!`); + this.mainWindow.setFullScreen(true); + } + this.startUrl = this.url; + if (this.shouldShowWelcomeScreen) { + this.handleWelcomeScreen(); + } // loads the main window with url from config/cmd line this.mainWindow.loadURL(this.url); // check for build expiry in case of test builds this.checkExpiry(this.mainWindow); // need this for postMessage origin this.mainWindow.origin = this.globalConfig.url; + + // Event needed to hide native menu bar on Windows 10 as we use custom menu bar + this.mainWindow.webContents.once('did-start-loading', () => { + logger.info(`window-handler: main window web contents started loading!`); + if ((this.config.isCustomTitleBar === CloudConfigDataTypes.ENABLED && isWindowsOS) && this.mainWindow && windowExists(this.mainWindow)) { + this.mainWindow.setMenuBarVisibility(false); + } + // monitors network connection and + // displays error banner on failure + monitorNetworkInterception(); + }); + this.mainWindow.webContents.on('did-finish-load', async () => { logger.info(`window-handler: main window web contents finished loading!`); // early exit if the window has already been destroyed @@ -380,6 +412,45 @@ export class WindowHandler { return this.mainWindow; } + /** + * Handles the use case of showing + * welcome screen for first time installs + */ + public handleWelcomeScreen() { + + if (!this.url || !this.mainWindow) { + return; + } + + if (this.url.startsWith('https://my.symphony.com')) { + this.url = format({ + pathname: require.resolve('../renderer/react-window.html'), + protocol: 'file', + query: { + componentName: 'welcome', + locale: i18n.getLocale(), + }, + slashes: true, + }); + } + + this.mainWindow.webContents.on('did-finish-load', () => { + if (!this.url || !this.mainWindow) { + return; + } + if (this.url.indexOf('welcome')) { + this.mainWindow.webContents.send('page-load-welcome', { locale: i18n.getLocale(), resource: i18n.loadedResources }); + this.mainWindow.webContents.send('welcome', { url: this.startUrl, message: '', urlValid: true, sso: false }); + } + }); + + ipcMain.on('set-pod-url', async (_event, newPodUrl: string) => { + await config.updateUserConfig({url: newPodUrl, mainWinPos: { ...this.mainWindow!.getPosition(), ...{ height: 900, width: 900 } } }); + app.relaunch(); + app.exit(); + }); + } + /** * Gets the main window */ diff --git a/src/locale/en-US.json b/src/locale/en-US.json index 52a31c4f..11c6dac9 100644 --- a/src/locale/en-US.json +++ b/src/locale/en-US.json @@ -195,6 +195,15 @@ "Undo": "Undo", "Updating Title bar style requires Symphony to relaunch.": "Updating Title bar style requires Symphony to relaunch.", "View": "View", + "Welcome": { + "Continue": "Continue", + "Enable Single Sign On": "Enable Single Sign On", + "Please enter a valid url": "Please enter a valid url", + "Pod URL": "Pod URL", + "SSO": "SSO", + "Symphony Logo": "Symphony", + "WelcomeText": "Welcome" + }, "Window": "Window", "Would you like to restart and apply these new settings now?": "Would you like to restart and apply these new settings now?", "Your administrator has disabled": "Your administrator has disabled", diff --git a/src/locale/en.json b/src/locale/en.json index 52a31c4f..11c6dac9 100644 --- a/src/locale/en.json +++ b/src/locale/en.json @@ -195,6 +195,15 @@ "Undo": "Undo", "Updating Title bar style requires Symphony to relaunch.": "Updating Title bar style requires Symphony to relaunch.", "View": "View", + "Welcome": { + "Continue": "Continue", + "Enable Single Sign On": "Enable Single Sign On", + "Please enter a valid url": "Please enter a valid url", + "Pod URL": "Pod URL", + "SSO": "SSO", + "Symphony Logo": "Symphony", + "WelcomeText": "Welcome" + }, "Window": "Window", "Would you like to restart and apply these new settings now?": "Would you like to restart and apply these new settings now?", "Your administrator has disabled": "Your administrator has disabled", diff --git a/src/locale/fr-FR.json b/src/locale/fr-FR.json index 2c8aa138..ce7a53d0 100644 --- a/src/locale/fr-FR.json +++ b/src/locale/fr-FR.json @@ -196,6 +196,15 @@ "Undo": "Annuler la dernière opération", "Updating Title bar style requires Symphony to relaunch.": "La mise à jour du style de la barre de titre nécessite le redémarrage de Symphony.", "View": "Visualiser", + "Welcome": { + "Continue": "Continuer", + "Enable Single Sign On": "Activer la connexion unique", + "Please enter a valid url": "Veuillez saisir une URL valide", + "Pod URL": "Sous ERL", + "SSO": "SSO", + "Symphony Logo": "Symphony", + "WelcomeText": "Bienvenue" + }, "Window": "Fenêtre", "Would you like to restart and apply these new settings now?": "Voulez-vous redémarrer et appliquer ce nouveau paramètre maintenant?", "Your administrator has disabled": "Votre administrateur a désactivé", diff --git a/src/locale/fr.json b/src/locale/fr.json index fd1e99cb..8c5260d7 100644 --- a/src/locale/fr.json +++ b/src/locale/fr.json @@ -195,6 +195,15 @@ "Undo": "Annuler la dernière opération", "Updating Title bar style requires Symphony to relaunch.": "La mise à jour du style de la barre de titre nécessite le redémarrage de Symphony.", "View": "Visualiser", + "Welcome": { + "Continue": "Continuer", + "Enable Single Sign On": "Activer la connexion unique", + "Please enter a valid url": "Veuillez saisir une URL valide", + "Pod URL": "Sous ERL", + "SSO": "SSO", + "Symphony Logo": "Symphony", + "WelcomeText": "Bienvenue" + }, "Window": "Fenêtre", "Would you like to restart and apply these new settings now?": "Voulez-vous redémarrer et appliquer ce nouveau paramètre maintenant?", "Your administrator has disabled": "Votre administrateur a désactivé", diff --git a/src/locale/ja-JP.json b/src/locale/ja-JP.json index 63e8e68f..a8905ea5 100644 --- a/src/locale/ja-JP.json +++ b/src/locale/ja-JP.json @@ -195,6 +195,15 @@ "Undo": "元に戻す", "Updating Title bar style requires Symphony to relaunch.": "タイトルバーのスタイルを更新するには、Symphonyが再起動する必要があります。", "View": "ビュー", + "Welcome": { + "Continue": "継続する", + "Enable Single Sign On": "シングルサインオンを有効にする", + "Please enter a valid url": "有効なURLを入力してください", + "Pod URL": "ERLの下", + "SSO": "SSO", + "Symphony Logo": "Symphony", + "WelcomeText": "ようこそ" + }, "Window": "ウインドウ", "Would you like to restart and apply these new settings now?": "今すぐ再起動して、新しい設定を適用しますか?", "Your administrator has disabled": "管理者によて無効にされています", diff --git a/src/locale/ja.json b/src/locale/ja.json index 63e8e68f..a8905ea5 100644 --- a/src/locale/ja.json +++ b/src/locale/ja.json @@ -195,6 +195,15 @@ "Undo": "元に戻す", "Updating Title bar style requires Symphony to relaunch.": "タイトルバーのスタイルを更新するには、Symphonyが再起動する必要があります。", "View": "ビュー", + "Welcome": { + "Continue": "継続する", + "Enable Single Sign On": "シングルサインオンを有効にする", + "Please enter a valid url": "有効なURLを入力してください", + "Pod URL": "ERLの下", + "SSO": "SSO", + "Symphony Logo": "Symphony", + "WelcomeText": "ようこそ" + }, "Window": "ウインドウ", "Would you like to restart and apply these new settings now?": "今すぐ再起動して、新しい設定を適用しますか?", "Your administrator has disabled": "管理者によて無効にされています", diff --git a/src/renderer/assets/symphony-logo-plain.png b/src/renderer/assets/symphony-logo-plain.png new file mode 100644 index 0000000000000000000000000000000000000000..777e6ba86dafb4506b53a02db435107af547a63e GIT binary patch literal 77741 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 { + + private readonly eventHandlers = { + onSetPodUrl: () => this.setPodUrl(), + }; + + constructor(props) { + super(props); + this.state = { + url: 'https://my.symphony.com', + message: '', + urlValid: true, + sso: false, + }; + this.updateState = this.updateState.bind(this); + } + + /** + * Render the component + */ + public render(): JSX.Element { + const { url, message, urlValid, sso } = this.state; + return ( +
+
+ {i18n.t('Symphony +
+
+

{i18n.t('Pod URL', WELCOME_NAMESPACE)()}

+
+
+ + +
+
+ +
+
+ + +
+
+ ); + } + + /** + * Perform actions on component being mounted + */ + public componentDidMount(): void { + ipcRenderer.on('welcome', this.updateState); + } + + /** + * Perform actions on component being unmounted + */ + public componentWillUnmount(): void { + ipcRenderer.removeListener('welcome', this.updateState); + } + + /** + * Set pod url and pass it to the main process + */ + public setPodUrl(): void { + const { url, sso } = this.state; + let ssoPath = '/login/sso/initsso'; + if (url.endsWith('/')) { + ssoPath = 'login/sso/initsso'; + } + ipcRenderer.send('set-pod-url', sso ? `${url}${ssoPath}` : url); + } + + /** + * Update pod url from the text box + * @param _event + */ + public updatePodUrl(_event): void { + const url = _event.target.value; + const match = url.match(/(https?:\/\/.)?(www\.)?[-a-zA-Z0-9@:%._+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_+.~#?&/=]*)/g) != null; + if (!match) { + this.updateState(_event, { + url, + message: i18n.t('Please enter a valid url', WELCOME_NAMESPACE)(), + urlValid: false, + sso: this.state.sso, + }); + return; + } + this.updateState(_event, { url, message: '', urlValid: true, sso: this.state.sso }); + } + + /** + * Update the SSO checkbox + * @param _event Event occurred upon action + * on the checkbox + */ + public updateSsoCheckbox(_event): void { + const ssoCheckBox = _event.target.checked; + this.updateState(_event, { + url: this.state.url, + message: this.state.message, + urlValid: this.state.urlValid, + sso: ssoCheckBox, + }); + } + + /** + * Update state + * @param _event + * @param data + */ + private updateState(_event, data): void { + this.setState(data as IState); + } + +} diff --git a/src/renderer/preload-component.ts b/src/renderer/preload-component.ts index 144f04a3..7bf89c56 100644 --- a/src/renderer/preload-component.ts +++ b/src/renderer/preload-component.ts @@ -10,6 +10,7 @@ import NotificationSettings from './components/notification-settings'; import ScreenPicker from './components/screen-picker'; import ScreenSharingFrame from './components/screen-sharing-frame'; import ScreenSharingIndicator from './components/screen-sharing-indicator'; +import Welcome from './components/welcome'; const enum components { aboutApp = 'about-app', @@ -19,6 +20,7 @@ const enum components { basicAuth = 'basic-auth', notification = 'notification-comp', notificationSettings = 'notification-settings', + welcome = 'welcome', } const loadStyle = (style) => { @@ -72,6 +74,11 @@ const load = () => { loadStyle(components.notificationSettings); component = NotificationSettings; break; + case components.welcome: + document.title = i18n.t('WelcomeText', 'Welcome')(); + loadStyle(components.welcome); + component = Welcome; + break; } const element = React.createElement(component); ReactDOM.render(element, document.getElementById('Root')); diff --git a/src/renderer/preload-main.ts b/src/renderer/preload-main.ts index 17480ff6..0c6ae243 100644 --- a/src/renderer/preload-main.ts +++ b/src/renderer/preload-main.ts @@ -9,6 +9,7 @@ import DownloadManager from './components/download-manager'; import MessageBanner from './components/message-banner'; import NetworkError from './components/network-error'; import SnackBar from './components/snack-bar'; +import Welcome from './components/welcome'; import WindowsTitleBar from './components/windows-title-bar'; import { SSFApi } from './ssf-api'; @@ -148,6 +149,20 @@ ipcRenderer.on('page-load', (_event, { locale, resources, enableCustomTitleBar } banner.showBanner(false, 'error'); }); +ipcRenderer.on('page-load-welcome', (_event, data) => { + const { locale, resource } = data; + i18n.setResource(locale, resource); + // Renders component as soon as the page is ready + document.title = i18n.t('WelcomeText', 'Welcome')(); + const styles = document.createElement('link'); + styles.rel = 'stylesheet'; + styles.type = 'text/css'; + styles.href = `./styles/welcome.css`; + document.getElementsByTagName('head')[0].appendChild(styles); + const element = React.createElement(Welcome); + ReactDOM.render(element, document.getElementById('Root')); +}); + // When the window fails to load ipcRenderer.on('page-load-failed', (_event, { locale, resources }) => { i18n.setResource(locale, resources); diff --git a/src/renderer/styles/welcome.less b/src/renderer/styles/welcome.less new file mode 100644 index 00000000..22216e48 --- /dev/null +++ b/src/renderer/styles/welcome.less @@ -0,0 +1,186 @@ +@import "theme"; + +@white: rgb(255, 255, 255, 1); +@version-text-color: rgb(47, 47, 47, 1); +@text-padding: 10px; + +body { + background-color: white; + margin: 0; + height: 100%; + width: 100%; +} + +.Welcome:lang(ja-JP) { + font-family: @font-family-ja; + + h4 { + margin: 3px 0; + } + + .Welcome-symphony-section { + padding-left: 10px; + } +} + +.Welcome:lang(fr-FR) { + + .Welcome-symphony-section { + padding-left: 10px; + } +} + +.Welcome { + display: flex; + flex-direction: column; + padding: 10px; + font-family: @font-family; + + &-image-container { + text-align: center; + margin: 50px 0 10px; + } + + &-image-container img { + width: 200px; + } + + &-header-content { + display: flex; + flex-direction: column; + justify-content: center; + align-items: flex-start; + } + + &-main-container { + padding: 10px 20%; + } + + &-main-container-input-div { + display: flex; + align-items: center; + width: 100%; + } + + &-main-container-input-selection { + width: 100%; + } + + &-main-container-podurl-box { + float: left; + width: 100%; + border-radius: 4px; + border: 1px solid #000; + padding: 5px; + max-width: -webkit-fill-available; + } + + &-main-container-sso-box { + float: left; + width: 30%; + font-size: 12px; + padding-left: 5px; + } + + &-name { + font-size: 1.0em; + font-weight: bold; + margin-bottom: 6px; + } + + &-message-label { + font-size: 12px; + margin-left: 2px; + color: red; + } + + &-logo { + margin: auto; + } + + &-symphony-section { + padding-left: 10px; + } + + hr { + width: 90%; + } + + ul { + list-style: none; + clear: both; + display: table; + text-align: right; + margin: 0; + } + + h4 { + text-align: start; + margin: 6px 0; + } + + li { + display: table-row; + text-align: left; + line-height: 20px; + } + + b { + display: table-cell; + padding-right: 1em; + text-align: left; + font-weight: normal; + } + + &-continue-button { + text-transform: capitalize; + } + + &-continue-button { + box-shadow: none; + border: none; + border-radius: 20px; + font-size: 0.8rem; + text-align: center; + padding: 10px 32px; + display: inline-block; + text-decoration: none; + line-height: 12px; + background-color: #3da2fd; + color: #ffffff; + cursor: pointer; + text-transform: uppercase; + float: right; + margin: 24px 30px 4px 0; + + &:focus { + box-shadow: 0 0 10px rgba(61, 162, 253, 1); + outline: none; + } + } + + &-continue-button-disabled { + box-shadow: none; + border: none; + border-radius: 20px; + font-size: 0.8rem; + text-align: center; + padding: 10px 32px; + display: inline-block; + text-decoration: none; + line-height: 12px; + color: #ffffff; + text-transform: uppercase; + float: right; + margin: 24px 30px 4px 0; + cursor: not-allowed; + background-color: #cccccc; + pointer-events: none; + + &:focus { + box-shadow: 0 0 10px rgba(61, 162, 253, 1); + outline: none; + } + } +} + From f097490c40613a571bf4e1d0302107910ca83d7e Mon Sep 17 00:00:00 2001 From: Vishwas Shashidhar Date: Mon, 27 Apr 2020 16:34:56 +0530 Subject: [PATCH 2/3] SDA-1818: simplify mac installer (#973) - Remove the pod settings plugin - Set defaults in postinstall.sh - Set default url to my.symphony.com in postinstall.sh Signed-off-by: Vishwas Shashidhar --- installer/mac/README.md | 16 +- .../Contents/Info.plist | 52 --- .../Contents/MacOS/SymphonySettingsPlugin | Bin 84640 -> 0 bytes .../Resources/Base.lproj/MyInstallerPane.nib | Bin 31305 -> 0 bytes .../Resources/InstallerSections.plist | 16 - .../Resources/en.lproj/InfoPlist.strings | Bin 84 -> 0 bytes .../Resources/en.lproj/Localizable.strings | Bin 152 -> 0 bytes .../Contents/_CodeSignature/CodeResources | 191 -------- .../project.pbxproj | 339 -------------- .../contents.xcworkspacedata | 7 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - .../xcschemes/SymphonySettingsPlugin.xcscheme | 76 ---- .../xcschemes/xcschememanagement.plist | 27 -- .../Base.lproj/MyInstallerPane.xib | 427 ------------------ .../SymphonySettingsPlugin/Info.plist | 30 -- .../InstallerSections.plist | 16 - .../SymphonySettingsPlugin/MyInstallerPane.h | 31 -- .../SymphonySettingsPlugin/MyInstallerPane.m | 193 -------- .../en.lproj/InfoPlist.strings | 2 - .../en.lproj/Localizable.strings | 3 - installer/mac/postinstall.sh | 57 +-- installer/mac/symphony-mac-packager.pkgproj | 29 +- package.json | 3 +- scripts/build-mac.sh | 4 +- 24 files changed, 30 insertions(+), 1497 deletions(-) delete mode 100644 installer/mac/SymphonySettingsPlugin.bundle/Contents/Info.plist delete mode 100755 installer/mac/SymphonySettingsPlugin.bundle/Contents/MacOS/SymphonySettingsPlugin delete mode 100644 installer/mac/SymphonySettingsPlugin.bundle/Contents/Resources/Base.lproj/MyInstallerPane.nib delete mode 100644 installer/mac/SymphonySettingsPlugin.bundle/Contents/Resources/InstallerSections.plist delete mode 100644 installer/mac/SymphonySettingsPlugin.bundle/Contents/Resources/en.lproj/InfoPlist.strings delete mode 100644 installer/mac/SymphonySettingsPlugin.bundle/Contents/Resources/en.lproj/Localizable.strings delete mode 100644 installer/mac/SymphonySettingsPlugin.bundle/Contents/_CodeSignature/CodeResources delete mode 100644 installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin.xcodeproj/project.pbxproj delete mode 100644 installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin.xcodeproj/xcuserdata/vishwas.xcuserdatad/xcschemes/SymphonySettingsPlugin.xcscheme delete mode 100644 installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin.xcodeproj/xcuserdata/vishwas.xcuserdatad/xcschemes/xcschememanagement.plist delete mode 100644 installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin/Base.lproj/MyInstallerPane.xib delete mode 100644 installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin/Info.plist delete mode 100644 installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin/InstallerSections.plist delete mode 100644 installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin/MyInstallerPane.h delete mode 100644 installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin/MyInstallerPane.m delete mode 100644 installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin/en.lproj/InfoPlist.strings delete mode 100644 installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin/en.lproj/Localizable.strings diff --git a/installer/mac/README.md b/installer/mac/README.md index 853c4358..f7b9ec4f 100644 --- a/installer/mac/README.md +++ b/installer/mac/README.md @@ -2,7 +2,7 @@ ## Overview -Using [Packages](http://s.sudre.free.fr/Software/Packages/about.html), we can build a .pkg file for an existing app (.app). The tool allows us to customise the installation procedure so as to capture the user entered pod url amongst other settings. +Using [Packages](http://s.sudre.free.fr/Software/Packages/about.html), we can build a .pkg file for an existing app (.app). The tool allows us to customise the installation procedure to capture the admin entered values from `/tmp/sym_settings.txt` and `/tmp/sym_permissions.txt` ## Pre-requisites @@ -17,27 +17,21 @@ Once we have [Packages](http://s.sudre.free.fr/Software/Packages/about.html) ins The above command creates the build 'Symphony.pkg' and places it into the directory `installer/mac/build` relative to the project root. -Also note that the packages project file 'symphony-mac-packager.pkgproj' contains link to the plugin bundle and the post install script both of which are relative to 'symphony-mac-packager.pkgproj'. +Note that the packages project file 'symphony-mac-packager.pkgproj' contains link to the pre install and the post install scripts both of which are relative to 'symphony-mac-packager.pkgproj'. [More command line documentation here](http://s.sudre.free.fr/Software/documentation/Packages/en/Project_Building.html#4) -## Notes - -Currently, both the plugin source code and the plugin bundle are in the `installer/mac` directory. This helps us create builds in a quicker way than having to maintain another repo and building the plugin every time we build the pkg. - ## Implementation Details -- The plugin captures data entered by the user and copied it to a temp file -- The post installation script then reads data from the temp file and replaces the values in the 'Symphony.config' file in the installed app +- Pre installation script checks to see if the version we are installing is higher than the already installed version. If the installed version is lower, it deletes the installed version. +- Post installation script reads data from the temp files and replaces the values in the 'Symphony.config' file in the installed app ## Known Issues -- During installation, there is a section called "Destination Select" which is skipped based on the OS and it's settings. This is a [known bug](https://stackoverflow.com/questions/4647416/mac-packagemaker-destination-select-step-a-skipping-boption-permanently-disa). -- Only macOS 10.7+ versions are supported with the installer plugin +- During installation, there is a section called "Destination Select" which is skipped based on the OS and it's settings. This is a [known bug](https://stackoverflow.com/questions/4647416/mac-packagemaker-destination-select-step-a-skipping-boption-permanently-disa). ## Related links - [Packages Mac](http://s.sudre.free.fr/Software/Packages/about.html) - [Packages User Guide](http://s.sudre.free.fr/Software/documentation/Packages/en/Packages_Installation.html) - [Destination Select Bug](https://stackoverflow.com/questions/4647416/mac-packagemaker-destination-select-step-a-skipping-boption-permanently-disa) - diff --git a/installer/mac/SymphonySettingsPlugin.bundle/Contents/Info.plist b/installer/mac/SymphonySettingsPlugin.bundle/Contents/Info.plist deleted file mode 100644 index 706950bb..00000000 --- a/installer/mac/SymphonySettingsPlugin.bundle/Contents/Info.plist +++ /dev/null @@ -1,52 +0,0 @@ - - - - - BuildMachineOSBuild - 19C57 - CFBundleDevelopmentRegion - en - CFBundleExecutable - SymphonySettingsPlugin - CFBundleIdentifier - com.symphony.SymphonySettingsPlugin - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - SymphonySettingsPlugin - CFBundlePackageType - BNDL - CFBundleShortVersionString - 4.0 - CFBundleSupportedPlatforms - - MacOSX - - CFBundleVersion - 1 - DTCompiler - com.apple.compilers.llvm.clang.1_0 - DTPlatformBuild - 11C29 - DTPlatformVersion - GM - DTSDKBuild - 19B90 - DTSDKName - macosx10.15 - DTXcode - 1130 - DTXcodeBuild - 11C29 - InstallerSectionTitle - Pod Settings - LSMinimumSystemVersion - 10.10 - NSHumanReadableCopyright - Copyright © 2017 Symphony. All rights reserved. - NSMainNibFile - MyInstallerPane - NSPrincipalClass - InstallerSection - - diff --git a/installer/mac/SymphonySettingsPlugin.bundle/Contents/MacOS/SymphonySettingsPlugin b/installer/mac/SymphonySettingsPlugin.bundle/Contents/MacOS/SymphonySettingsPlugin deleted file mode 100755 index 42cda37bad96abbb9969ccd6d401f93bcf685ff7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 84640 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 T08#)_08#)_08-!|p}@ZYs|4rn diff --git a/installer/mac/SymphonySettingsPlugin.bundle/Contents/Resources/Base.lproj/MyInstallerPane.nib b/installer/mac/SymphonySettingsPlugin.bundle/Contents/Resources/Base.lproj/MyInstallerPane.nib deleted file mode 100644 index dae1ac209da4dc4226e3456bec4952c173e093b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31305 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 diff --git a/installer/mac/SymphonySettingsPlugin.bundle/Contents/Resources/InstallerSections.plist b/installer/mac/SymphonySettingsPlugin.bundle/Contents/Resources/InstallerSections.plist deleted file mode 100644 index e81b017d..00000000 --- a/installer/mac/SymphonySettingsPlugin.bundle/Contents/Resources/InstallerSections.plist +++ /dev/null @@ -1,16 +0,0 @@ - - - - - SectionOrder - - Introduction - ReadMe - License - SymphonySettingsPlugin.bundle - Target - PackageSelection - Install - - - diff --git a/installer/mac/SymphonySettingsPlugin.bundle/Contents/Resources/en.lproj/InfoPlist.strings b/installer/mac/SymphonySettingsPlugin.bundle/Contents/Resources/en.lproj/InfoPlist.strings deleted file mode 100644 index 9ae9c88088a02e93af3c64d997f90daba3557416..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 84 zcmezW&yyjKp_rkBA(0^m2vZq~7=nRhGEgLwAs;9g0;Eg8G71c~3rP2f4NAL MHEKTWFFD%#1FWbTZvX%Q diff --git a/installer/mac/SymphonySettingsPlugin.bundle/Contents/_CodeSignature/CodeResources b/installer/mac/SymphonySettingsPlugin.bundle/Contents/_CodeSignature/CodeResources deleted file mode 100644 index 930da407..00000000 --- a/installer/mac/SymphonySettingsPlugin.bundle/Contents/_CodeSignature/CodeResources +++ /dev/null @@ -1,191 +0,0 @@ - - - - - files - - Resources/Base.lproj/MyInstallerPane.nib - - YqJEUs+O0NAGFaXYG/PL5/LjGRY= - - Resources/InstallerSections.plist - - htLpJqbvPLRCEJWl7tW5JtJh57U= - - Resources/en.lproj/InfoPlist.strings - - hash - - MKMIqMmrq5wHe2WIb39Zx7uopYM= - - optional - - - Resources/en.lproj/Localizable.strings - - hash - - BNnst4BtRwVgmY7KjJHnv/Gi9bA= - - optional - - - - files2 - - Resources/Base.lproj/MyInstallerPane.nib - - hash - - YqJEUs+O0NAGFaXYG/PL5/LjGRY= - - hash2 - - vrmW//WHQVaIHJrMeFnpvRK5qq2445PL7k/PHsv18/k= - - - Resources/InstallerSections.plist - - hash - - htLpJqbvPLRCEJWl7tW5JtJh57U= - - hash2 - - s4rwjWW7Gd+XrsmL4BJfMLfOoaUnr8TRXs1Fc6Ieb24= - - - Resources/en.lproj/InfoPlist.strings - - hash - - MKMIqMmrq5wHe2WIb39Zx7uopYM= - - hash2 - - 6fmnl10zA3TcGk73XQtxuW2uRXRq0TLb3Oiprz+uW1M= - - optional - - - Resources/en.lproj/Localizable.strings - - hash - - BNnst4BtRwVgmY7KjJHnv/Gi9bA= - - hash2 - - N91Gfh6N6xvbnmDSlWU/PARxExcPoyutwL88q2opqak= - - optional - - - - rules - - ^Resources/ - - ^Resources/.*\.lproj/ - - optional - - weight - 1000 - - ^Resources/.*\.lproj/locversion.plist$ - - omit - - weight - 1100 - - ^Resources/Base\.lproj/ - - weight - 1010 - - ^version.plist$ - - - rules2 - - .*\.dSYM($|/) - - weight - 11 - - ^(.*/)?\.DS_Store$ - - omit - - weight - 2000 - - ^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/ - - nested - - weight - 10 - - ^.* - - ^Info\.plist$ - - omit - - weight - 20 - - ^PkgInfo$ - - omit - - weight - 20 - - ^Resources/ - - weight - 20 - - ^Resources/.*\.lproj/ - - optional - - weight - 1000 - - ^Resources/.*\.lproj/locversion.plist$ - - omit - - weight - 1100 - - ^Resources/Base\.lproj/ - - weight - 1010 - - ^[^/]+$ - - nested - - weight - 10 - - ^embedded\.provisionprofile$ - - weight - 20 - - ^version\.plist$ - - weight - 20 - - - - diff --git a/installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin.xcodeproj/project.pbxproj b/installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin.xcodeproj/project.pbxproj deleted file mode 100644 index fda8016d..00000000 --- a/installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin.xcodeproj/project.pbxproj +++ /dev/null @@ -1,339 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 3A10EBD41ED4336D0083702F /* MyInstallerPane.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A10EBD31ED4336D0083702F /* MyInstallerPane.m */; }; - 3A10EBD71ED4336D0083702F /* MyInstallerPane.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3A10EBD51ED4336D0083702F /* MyInstallerPane.xib */; }; - 3A10EBDA1ED4336D0083702F /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 3A10EBD81ED4336D0083702F /* Localizable.strings */; }; - 3A10EBDC1ED4336D0083702F /* InstallerSections.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3A10EBDB1ED4336D0083702F /* InstallerSections.plist */; }; - 3A10EBE01ED4336D0083702F /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 3A10EBDE1ED4336D0083702F /* InfoPlist.strings */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - 3A10EBCF1ED4336D0083702F /* SymphonySettingsPlugin.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SymphonySettingsPlugin.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - 3A10EBD21ED4336D0083702F /* MyInstallerPane.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MyInstallerPane.h; sourceTree = ""; }; - 3A10EBD31ED4336D0083702F /* MyInstallerPane.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MyInstallerPane.m; sourceTree = ""; }; - 3A10EBD61ED4336D0083702F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MyInstallerPane.xib; sourceTree = ""; }; - 3A10EBD91ED4336D0083702F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; - 3A10EBDB1ED4336D0083702F /* InstallerSections.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = InstallerSections.plist; sourceTree = ""; }; - 3A10EBDD1ED4336D0083702F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 3A10EBDF1ED4336D0083702F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 3A10EBCC1ED4336D0083702F /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 3A10EBC61ED4336D0083702F = { - isa = PBXGroup; - children = ( - 3A10EBD11ED4336D0083702F /* SymphonySettingsPlugin */, - 3A10EBD01ED4336D0083702F /* Products */, - ); - sourceTree = ""; - }; - 3A10EBD01ED4336D0083702F /* Products */ = { - isa = PBXGroup; - children = ( - 3A10EBCF1ED4336D0083702F /* SymphonySettingsPlugin.bundle */, - ); - name = Products; - sourceTree = ""; - }; - 3A10EBD11ED4336D0083702F /* SymphonySettingsPlugin */ = { - isa = PBXGroup; - children = ( - 3A10EBD21ED4336D0083702F /* MyInstallerPane.h */, - 3A10EBD31ED4336D0083702F /* MyInstallerPane.m */, - 3A10EBD51ED4336D0083702F /* MyInstallerPane.xib */, - 3A10EBD81ED4336D0083702F /* Localizable.strings */, - 3A10EBDB1ED4336D0083702F /* InstallerSections.plist */, - 3A10EBDD1ED4336D0083702F /* Info.plist */, - 3A10EBDE1ED4336D0083702F /* InfoPlist.strings */, - ); - path = SymphonySettingsPlugin; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 3A10EBCE1ED4336D0083702F /* SymphonySettingsPlugin */ = { - isa = PBXNativeTarget; - buildConfigurationList = 3A10EBE31ED4336D0083702F /* Build configuration list for PBXNativeTarget "SymphonySettingsPlugin" */; - buildPhases = ( - 3A10EBCB1ED4336D0083702F /* Sources */, - 3A10EBCC1ED4336D0083702F /* Frameworks */, - 3A10EBCD1ED4336D0083702F /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = SymphonySettingsPlugin; - productName = SymphonySettingsPlugin; - productReference = 3A10EBCF1ED4336D0083702F /* SymphonySettingsPlugin.bundle */; - productType = "com.apple.product-type.bundle"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 3A10EBC71ED4336D0083702F /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 1100; - ORGANIZATIONNAME = Symphony; - TargetAttributes = { - 3A10EBCE1ED4336D0083702F = { - CreatedOnToolsVersion = 8.3.2; - DevelopmentTeam = 7S74264P3V; - ProvisioningStyle = Automatic; - }; - }; - }; - buildConfigurationList = 3A10EBCA1ED4336D0083702F /* Build configuration list for PBXProject "SymphonySettingsPlugin" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 3A10EBC61ED4336D0083702F; - productRefGroup = 3A10EBD01ED4336D0083702F /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 3A10EBCE1ED4336D0083702F /* SymphonySettingsPlugin */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 3A10EBCD1ED4336D0083702F /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 3A10EBD71ED4336D0083702F /* MyInstallerPane.xib in Resources */, - 3A10EBE01ED4336D0083702F /* InfoPlist.strings in Resources */, - 3A10EBDA1ED4336D0083702F /* Localizable.strings in Resources */, - 3A10EBDC1ED4336D0083702F /* InstallerSections.plist in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 3A10EBCB1ED4336D0083702F /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 3A10EBD41ED4336D0083702F /* MyInstallerPane.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXVariantGroup section */ - 3A10EBD51ED4336D0083702F /* MyInstallerPane.xib */ = { - isa = PBXVariantGroup; - children = ( - 3A10EBD61ED4336D0083702F /* Base */, - ); - name = MyInstallerPane.xib; - sourceTree = ""; - }; - 3A10EBD81ED4336D0083702F /* Localizable.strings */ = { - isa = PBXVariantGroup; - children = ( - 3A10EBD91ED4336D0083702F /* en */, - ); - name = Localizable.strings; - sourceTree = ""; - }; - 3A10EBDE1ED4336D0083702F /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - 3A10EBDF1ED4336D0083702F /* en */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 3A10EBE11ED4336D0083702F /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "-"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = macosx; - }; - name = Debug; - }; - 3A10EBE21ED4336D0083702F /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "-"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = macosx; - }; - name = Release; - }; - 3A10EBE41ED4336D0083702F /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_IDENTITY = "Apple Development"; - COMBINE_HIDPI_IMAGES = YES; - DEVELOPMENT_TEAM = 7S74264P3V; - INFOPLIST_FILE = SymphonySettingsPlugin/Info.plist; - INSTALL_PATH = "$(HOME)/Library/Bundles"; - MACOSX_DEPLOYMENT_TARGET = 10.10; - PRODUCT_BUNDLE_IDENTIFIER = com.symphony.SymphonySettingsPlugin; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - WRAPPER_EXTENSION = bundle; - }; - name = Debug; - }; - 3A10EBE51ED4336D0083702F /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_IDENTITY = "Apple Development"; - COMBINE_HIDPI_IMAGES = YES; - DEVELOPMENT_TEAM = 7S74264P3V; - INFOPLIST_FILE = SymphonySettingsPlugin/Info.plist; - INSTALL_PATH = "$(HOME)/Library/Bundles"; - MACOSX_DEPLOYMENT_TARGET = 10.10; - PRODUCT_BUNDLE_IDENTIFIER = com.symphony.SymphonySettingsPlugin; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - WRAPPER_EXTENSION = bundle; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 3A10EBCA1ED4336D0083702F /* Build configuration list for PBXProject "SymphonySettingsPlugin" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 3A10EBE11ED4336D0083702F /* Debug */, - 3A10EBE21ED4336D0083702F /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 3A10EBE31ED4336D0083702F /* Build configuration list for PBXNativeTarget "SymphonySettingsPlugin" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 3A10EBE41ED4336D0083702F /* Debug */, - 3A10EBE51ED4336D0083702F /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 3A10EBC71ED4336D0083702F /* Project object */; -} diff --git a/installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 6a9e319c..00000000 --- a/installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d98100..00000000 --- a/installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin.xcodeproj/xcuserdata/vishwas.xcuserdatad/xcschemes/SymphonySettingsPlugin.xcscheme b/installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin.xcodeproj/xcuserdata/vishwas.xcuserdatad/xcschemes/SymphonySettingsPlugin.xcscheme deleted file mode 100644 index 7436866e..00000000 --- a/installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin.xcodeproj/xcuserdata/vishwas.xcuserdatad/xcschemes/SymphonySettingsPlugin.xcscheme +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin.xcodeproj/xcuserdata/vishwas.xcuserdatad/xcschemes/xcschememanagement.plist b/installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin.xcodeproj/xcuserdata/vishwas.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index ac91877a..00000000 --- a/installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin.xcodeproj/xcuserdata/vishwas.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null @@ -1,27 +0,0 @@ - - - - - SchemeUserState - - Run - Debug.xcscheme - - orderHint - 1 - - SymphonySettingsPlugin.xcscheme - - orderHint - 0 - - - SuppressBuildableAutocreation - - 3A10EBCE1ED4336D0083702F - - primary - - - - - diff --git a/installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin/Base.lproj/MyInstallerPane.xib b/installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin/Base.lproj/MyInstallerPane.xib deleted file mode 100644 index fbe9d806..00000000 --- a/installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin/Base.lproj/MyInstallerPane.xib +++ /dev/null @@ -1,427 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin/Info.plist b/installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin/Info.plist deleted file mode 100644 index 17a5f36f..00000000 --- a/installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin/Info.plist +++ /dev/null @@ -1,30 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 4.0 - CFBundleVersion - 1 - InstallerSectionTitle - Pod Settings - NSHumanReadableCopyright - Copyright © 2017 Symphony. All rights reserved. - NSMainNibFile - MyInstallerPane - NSPrincipalClass - InstallerSection - - diff --git a/installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin/InstallerSections.plist b/installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin/InstallerSections.plist deleted file mode 100644 index e81b017d..00000000 --- a/installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin/InstallerSections.plist +++ /dev/null @@ -1,16 +0,0 @@ - - - - - SectionOrder - - Introduction - ReadMe - License - SymphonySettingsPlugin.bundle - Target - PackageSelection - Install - - - diff --git a/installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin/MyInstallerPane.h b/installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin/MyInstallerPane.h deleted file mode 100644 index 3891032f..00000000 --- a/installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin/MyInstallerPane.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// MyInstallerPane.h -// SymphonySettingsPlugin -// -// Copyright © 2017 Symphony. All rights reserved. -// - -#import - -@interface MyInstallerPane : InstallerPane - -@property (weak) IBOutlet NSButton *minimizeOnCloseCheckBox; -@property (weak) IBOutlet NSButton *autoLaunchCheckBox; -@property (weak) IBOutlet NSTextField *podUrlTextBox; -@property (weak) IBOutlet NSButton *alwaysOnTopCheckBox; -@property (weak) IBOutlet NSTextField *podUrlAlertTextBox; -@property (weak) IBOutlet NSButton *bringToFrontCheckBox; -@property (weak) IBOutlet NSButton *devToolsCheckBox; - -@property (weak) IBOutlet NSButton *mediaCheckBox; -@property (weak) IBOutlet NSButton *geoLocationCheckBox; -@property (weak) IBOutlet NSButton *notificationsCheckBox; - -@property (weak) IBOutlet NSButton *pointerLockCheckBox; -@property (weak) IBOutlet NSButton *fullScreenCheckBox; -@property (weak) IBOutlet NSButton *openExternalAppCheckBox; -@property (weak) IBOutlet NSButton *midiSysexCheckBox; - -@property (weak) IBOutlet NSButton *ssoCheckBox; - -@end diff --git a/installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin/MyInstallerPane.m b/installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin/MyInstallerPane.m deleted file mode 100644 index 77e49f8f..00000000 --- a/installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin/MyInstallerPane.m +++ /dev/null @@ -1,193 +0,0 @@ -// -// MyInstallerPane.m -// SymphonySettingsPlugin -// -// Copyright © 2017 Symphony. All rights reserved. -// - -#import "MyInstallerPane.h" - -@implementation MyInstallerPane - -- (NSString *)title -{ - return [[NSBundle bundleForClass:[self class]] localizedStringForKey:@"PaneTitle" value:nil table:nil]; -} - -- (void)willEnterPane:(InstallerSectionDirection)dir { - // By default, set the value of the error message textbox to an empty string - _podUrlAlertTextBox.stringValue = @""; - [_podUrlTextBox setToolTip:@"Enter pod url in the format \"https://corporate.symphony.com\""]; - - [_ssoCheckBox setToolTip:@"Only check this option if your Symphony POD has been configured for SSO, in doubt do not check - contact your Symphony Admin"]; -} - -- (BOOL)shouldExitPane:(InstallerSectionDirection)dir { - - NSString *podUrl = [_podUrlTextBox stringValue]; - - // Now, validate the url against a url regex - NSString *regex = @"^(https:\\/\\/)?(www.)?[a-zA-Z0-9]+([\\-\\.]{1}[a-zA-Z0-9]+)*\\.[a-zA-Z]{2,}(:[0-9]{1,5})?(\\/[a-zA-Z0-9-_.+!*'(),;\\/?:@=&$]*)?$"; - - NSPredicate *podUrlTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex]; - - if (![podUrlTest evaluateWithObject:podUrl]) { - _podUrlAlertTextBox.stringValue = @"Please enter a valid Pod url."; - return NO; - } - - if ([podUrl rangeOfString:@"[POD]"].location != NSNotFound) { - _podUrlAlertTextBox.stringValue = @"Please enter a valid Pod url."; - return NO; - } - - // Double confirmation for disabling media - if ([_mediaCheckBox state] == 0) { - - NSAlert *alert = [[NSAlert alloc] init]; - [alert setMessageText: @"Are you sure you wish to disable the camera, microphone, and speakers?"]; - [alert setInformativeText:@"Once disabled, users won't be able to participate in RTC calls effectively"]; - [alert addButtonWithTitle:@"No"]; - [alert addButtonWithTitle:@"Yes"]; - [alert setAlertStyle:NSWarningAlertStyle]; - - NSInteger button = [alert runModal]; - - if (button == NSAlertFirstButtonReturn) { - return NO; - } - - return YES; - - } - - return YES; - -} - -- (void)willExitPane:(InstallerSectionDirection)dir { - - [self writeSettingsToFile]; - [self writePermissionsToFile]; - -} - -- (void)writeSettingsToFile { - - NSString *podUrl = [_podUrlTextBox stringValue]; - - NSString *securePrefix = @"https://"; - if (![podUrl hasPrefix:securePrefix]) { - podUrl = [securePrefix stringByAppendingString:podUrl]; - [_podUrlTextBox setStringValue:podUrl]; - } - - // By default, set autoLaunchOnStart and minimizeOnClose to true - NSString *autoLaunchOnStart = @"true"; - NSString *minimizeOnClose = @"true"; - NSString *alwaysOnTop = @"false"; - NSString *bringToFront = @"false"; - NSString *devToolsEnabled = @"true\n"; - - // If the checkbox is changed, set the auto launch value accordingly - if ([_autoLaunchCheckBox state] == 0) { - autoLaunchOnStart = @"false"; - } - - // If the checkbox is changed, set the minimize on close value accordingly - if ([_minimizeOnCloseCheckBox state] == 0) { - minimizeOnClose = @"false"; - } - - // If the checkbox is changed, set the always on top value accordingly - if ([_alwaysOnTopCheckBox state] == 1) { - alwaysOnTop = @"true"; - } - - // If the checkbox is changed, set the bring to front value accordingly - if ([_bringToFrontCheckBox state] == 1) { - bringToFront = @"true"; - } - - // If the checkbox is changed, set the dev tools enabled value accordingly - if ([_devToolsCheckBox state] == 0) { - devToolsEnabled = @"false\n"; - } - - // Create an array with the selected options - NSArray *symSettings = [[NSArray alloc] initWithObjects:podUrl, minimizeOnClose, autoLaunchOnStart, alwaysOnTop, bringToFront, devToolsEnabled, nil]; - - // Create a string from the array with new-line as the separator - NSString *symSettingsString = [symSettings componentsJoinedByString:@"\n"]; - - // Write all the above settings to file - [symSettingsString writeToFile:@"/tmp/sym_settings.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil]; - -} - -- (void)writePermissionsToFile { - - // By default, set all the values to true - NSString *media = @"true"; - NSString *geoLocation = @"true"; - NSString *notifications = @"true"; - NSString *pointerLock = @"true"; - NSString *fullScreen = @"true"; - NSString *openExternalApp = @"true"; - NSString *midiSysex = @"true"; - - if ([_mediaCheckBox state] == 0) { - media = @"false"; - } - - if ([_geoLocationCheckBox state] == 0) { - geoLocation = @"false"; - } - - if ([_notificationsCheckBox state] == 0) { - notifications = @"false"; - } - - if ([_pointerLockCheckBox state] == 0) { - pointerLock = @"false"; - } - - if ([_fullScreenCheckBox state] == 0) { - fullScreen = @"false"; - } - - if ([_openExternalAppCheckBox state] == 0) { - openExternalApp = @"false"; - } - - if ([_midiSysexCheckBox state] == 0) { - midiSysex = @"false"; - } - - // Create an array with the selected options - NSArray *symPermissions = [[NSArray alloc] initWithObjects:media, geoLocation, notifications, midiSysex, pointerLock, fullScreen, openExternalApp, nil]; - - // Create a string from the array with new-line as the separator - NSString *symPermissionsString = [symPermissions componentsJoinedByString:@"\n"]; - - // Write all the above settings to file - [symPermissionsString writeToFile:@"/tmp/sym_permissions.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil]; - -} - -- (IBAction)handleSSOCheckboxStateChange:(id)sender { - - NSString *podUrl = [_podUrlTextBox stringValue]; - - NSString *ssoUrl = @"/login/sso/initsso"; - if ([_ssoCheckBox state] == 1) { - podUrl = [podUrl stringByAppendingString:ssoUrl]; - [_podUrlTextBox setStringValue:podUrl]; - } else { - podUrl = [podUrl substringToIndex:podUrl.length - ssoUrl.length]; - [_podUrlTextBox setStringValue:podUrl]; - } - -} - -@end diff --git a/installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin/en.lproj/InfoPlist.strings b/installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin/en.lproj/InfoPlist.strings deleted file mode 100644 index 84ad2f5f..00000000 --- a/installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin/en.lproj/InfoPlist.strings +++ /dev/null @@ -1,2 +0,0 @@ -InstallerSectionTitle = "Pod Settings"; - diff --git a/installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin/en.lproj/Localizable.strings b/installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin/en.lproj/Localizable.strings deleted file mode 100644 index 944f5fa9..00000000 --- a/installer/mac/SymphonySettingsPlugin/SymphonySettingsPlugin/en.lproj/Localizable.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* Localized versions of Info.plist keys */ - -"PaneTitle" = "Pod Settings"; diff --git a/installer/mac/postinstall.sh b/installer/mac/postinstall.sh index 14ddc050..8814195f 100755 --- a/installer/mac/postinstall.sh +++ b/installer/mac/postinstall.sh @@ -15,22 +15,13 @@ always_on_top=$(sed -n '4p' ${settingsFilePath}); bring_to_front=$(sed -n '5p' ${settingsFilePath}); dev_tools_enabled=$(sed -n '6p' ${settingsFilePath}); -if [ "$pod_url" == "" ]; then - pod_url="https://my.symphony.com" -fi - +## If any of the above values turn out to be empty, set default values ## +if [ "$pod_url" == "" ]; then pod_url="https://my.symphony.com"; fi if [ "$minimize_on_close" == "" ] || [ "$minimize_on_close" == 'true' ]; then minimize_on_close='ENABLED'; else minimize_on_close='DISABLED'; fi - if [ "$launch_on_startup" == "" ] || [ "$launch_on_startup" == 'true' ]; then launch_on_startup='ENABLED'; else launch_on_startup='DISABLED'; fi - if [ "$always_on_top" == "" ] || [ "$always_on_top" == 'false' ]; then always_on_top='DISABLED'; else always_on_top='ENABLED'; fi - if [ "$bring_to_front" == "" ] || [ "$bring_to_front" == 'false' ]; then bring_to_front='DISABLED'; else bring_to_front='ENABLED'; fi - -if [ "$dev_tools_enabled" == "" ]; then - dev_tools_enabled=true; -fi - +if [ "$dev_tools_enabled" == "" ]; then dev_tools_enabled=true; fi pod_url_escaped=$(sed 's#[&/\]#\\&#g' <<<"$pod_url") ## Replace the default settings with the user selected settings ## @@ -41,9 +32,6 @@ sed -i "" -E "s#\"launchOnStartup\" ?: ?\"([Ee][Nn][Aa][Bb][Ll][Ee][Dd]|[Dd][Ii] sed -i "" -E "s#\"bringToFront\" ?: ?\"([Ee][Nn][Aa][Bb][Ll][Ee][Dd]|[Dd][Ii][Ss][Aa][Bb][Ll][Ee][Dd])\"#\"bringToFront\":\ \"$bring_to_front\"#g" ${newPath} sed -i "" -E "s#\"devToolsEnabled\" ?: ?([Tt][Rr][Uu][Ee]|[Ff][Aa][Ll][Ss][Ee])#\"devToolsEnabled\":\ $dev_tools_enabled#g" ${newPath} -## Remove the temp settings file created ## -rm -f ${settingsFilePath} - ## Get Symphony Permissions from the temp file ## media=$(sed -n '1p' ${permissionsFilePath}); geo_location=$(sed -n '2p' ${permissionsFilePath}); @@ -53,33 +41,14 @@ pointer_lock=$(sed -n '5p' ${permissionsFilePath}); full_screen=$(sed -n '6p' ${permissionsFilePath}); open_external_app=$(sed -n '7p' ${permissionsFilePath}); -if [ "$media" == "" ]; then - media=true; -fi - -if [ "$geo_location" == "" ]; then - geo_location=true; -fi - -if [ "$notifications" == "" ]; then - notifications=true; -fi - -if [ "$midi_sysex" == "" ]; then - midi_sysex=true; -fi - -if [ "$pointer_lock" == "" ]; then - pointer_lock=true; -fi - -if [ "$full_screen" == "" ]; then - full_screen=true; -fi - -if [ "$open_external_app" == "" ]; then - open_external_app=true; -fi +## If any of the above values turn out to be empty, set default values ## +if [ "$media" == "" ]; then media=true; fi +if [ "$geo_location" == "" ]; then geo_location=true; fi +if [ "$notifications" == "" ]; then notifications=true; fi +if [ "$midi_sysex" == "" ]; then midi_sysex=true; fi +if [ "$pointer_lock" == "" ]; then pointer_lock=true;fi +if [ "$full_screen" == "" ]; then full_screen=true; fi +if [ "$open_external_app" == "" ]; then open_external_app=true; fi ## Replace the default permissions with the user selected permissions ## sed -i "" -E "s#\"media\" ?: ?([Tt][Rr][Uu][Ee]|[Ff][Aa][Ll][Ss][Ee])#\"media\":\ $media#g" ${newPath} @@ -90,6 +59,6 @@ sed -i "" -E "s#\"pointerLock\" ?: ?([Tt][Rr][Uu][Ee]|[Ff][Aa][Ll][Ss][Ee])#\"po sed -i "" -E "s#\"fullscreen\" ?: ?([Tt][Rr][Uu][Ee]|[Ff][Aa][Ll][Ss][Ee])#\"fullscreen\":\ $full_screen#g" ${newPath} sed -i "" -E "s#\"openExternal\" ?: ?([Tt][Rr][Uu][Ee]|[Ff][Aa][Ll][Ss][Ee])#\"openExternal\":\ $open_external_app#g" ${newPath} - -## Remove the temp permissions file created ## +## Remove the temp settings & permissions file created ## +rm -f ${settingsFilePath} rm -f ${permissionsFilePath} diff --git a/installer/mac/symphony-mac-packager.pkgproj b/installer/mac/symphony-mac-packager.pkgproj index 6e3e8a9a..927271a1 100644 --- a/installer/mac/symphony-mac-packager.pkgproj +++ b/installer/mac/symphony-mac-packager.pkgproj @@ -494,7 +494,7 @@ FOLLOW_SYMBOLIC_LINKS IDENTIFIER - com.symphony.symphony-desktop + com.symphony.electron-desktop LOCATION 0 NAME @@ -510,7 +510,7 @@ USE_HFS+_COMPRESSION VERSION - 2.0.0 + 8.0.0 TYPE 0 @@ -661,17 +661,6 @@ LIST_TITLE_KEY InstallerSectionTitle - - ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS - ICPresentationViewInstallerPluginController - ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_INSTALLERPLUGIN_PATH - - PATH - SymphonySettingsPlugin.bundle - PATH_TYPE - 1 - - ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS ICPresentationViewDestinationSelectController @@ -715,9 +704,9 @@ VALUE PATH - intro.html + /Users/vishwas/Code/symphony/SymphonyElectron/installer/mac/intro.html PATH_TYPE - 3 + 1 @@ -766,7 +755,7 @@ IC_REQUIREMENT_OS_DISTRIBUTION_TYPE 0 IC_REQUIREMENT_OS_MINIMUM_VERSION - 100700 + 100900 IC_REQUIREMENT_CHECK_TYPE 1 @@ -781,11 +770,11 @@ BEHAVIOR - 3 + 2 DICTIONARY IC_REQUIREMENT_RAM_MINIMUM_SIZE_INDEX - 5 + 6 IC_REQUIREMENT_CHECK_TYPE 0 @@ -800,7 +789,7 @@ BEHAVIOR - 3 + 2 DICTIONARY IC_REQUIREMENT_CPU_ARCHITECTURE_FAMILY @@ -810,7 +799,7 @@ IC_REQUIREMENT_CPU_MINIMUM_CPU_CORES_COUNT 1 IC_REQUIREMENT_CPU_MINIMUM_FREQUENCY - 0 + 2000000 IC_REQUIREMENT_CPU_POWERPC_ARCHITECTURE_TYPE 0 diff --git a/package.json b/package.json index 887dc806..edabc34b 100644 --- a/package.json +++ b/package.json @@ -75,8 +75,7 @@ "library/indexvalidator.exec", "library/libsymphonysearch.dylib", "library/cryptoLib.dylib", - "library/dictionary", - "installer/mac/SymphonySettingsPlugin.bundle/Contents/MacOS/SymphonySettingsPlugin" + "library/dictionary" ] }, "win": { diff --git a/scripts/build-mac.sh b/scripts/build-mac.sh index dc7f65ab..fb8d882c 100755 --- a/scripts/build-mac.sh +++ b/scripts/build-mac.sh @@ -86,8 +86,8 @@ echo "Running snyk security tests" snyk test --file=package.json --org="$SNYK_ORG" # Replace url in config -echo "Setting default pod url to https://corporate.symphony.com" -sed -i -e 's/\"url\"[[:space:]]*\:[[:space:]]*\".*\"/\"url\":\"https:\/\/corporate.symphony.com\"/g' config/Symphony.config +echo "Setting default pod url to https://my.symphony.com" +sed -i -e 's/\"url\"[[:space:]]*\:[[:space:]]*\".*\"/\"url\":\"https:\/\/my.symphony.com\"/g' config/Symphony.config # Setup the build version echo "Setting build version to ${PARENT_BUILD_VERSION}" From 9c3d8c07567408a38bc810a7a24ec4b779024178 Mon Sep 17 00:00:00 2001 From: Vishwas Shashidhar Date: Mon, 27 Apr 2020 17:00:30 +0530 Subject: [PATCH 3/3] SDA-1983: change translations Signed-off-by: Vishwas Shashidhar --- src/locale/fr-FR.json | 4 ++-- src/locale/fr.json | 4 ++-- src/locale/ja-JP.json | 4 ++-- src/locale/ja.json | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/locale/fr-FR.json b/src/locale/fr-FR.json index ce7a53d0..985611a3 100644 --- a/src/locale/fr-FR.json +++ b/src/locale/fr-FR.json @@ -198,9 +198,9 @@ "View": "Visualiser", "Welcome": { "Continue": "Continuer", - "Enable Single Sign On": "Activer la connexion unique", + "Enable Single Sign On": "Activer la SSO", "Please enter a valid url": "Veuillez saisir une URL valide", - "Pod URL": "Sous ERL", + "Pod URL": "URL du pod", "SSO": "SSO", "Symphony Logo": "Symphony", "WelcomeText": "Bienvenue" diff --git a/src/locale/fr.json b/src/locale/fr.json index 8c5260d7..f0fafd03 100644 --- a/src/locale/fr.json +++ b/src/locale/fr.json @@ -197,9 +197,9 @@ "View": "Visualiser", "Welcome": { "Continue": "Continuer", - "Enable Single Sign On": "Activer la connexion unique", + "Enable Single Sign On": "Activer la SSO", "Please enter a valid url": "Veuillez saisir une URL valide", - "Pod URL": "Sous ERL", + "Pod URL": "URL du pod", "SSO": "SSO", "Symphony Logo": "Symphony", "WelcomeText": "Bienvenue" diff --git a/src/locale/ja-JP.json b/src/locale/ja-JP.json index a8905ea5..75243a4f 100644 --- a/src/locale/ja-JP.json +++ b/src/locale/ja-JP.json @@ -196,10 +196,10 @@ "Updating Title bar style requires Symphony to relaunch.": "タイトルバーのスタイルを更新するには、Symphonyが再起動する必要があります。", "View": "ビュー", "Welcome": { - "Continue": "継続する", + "Continue": "持続する", "Enable Single Sign On": "シングルサインオンを有効にする", "Please enter a valid url": "有効なURLを入力してください", - "Pod URL": "ERLの下", + "Pod URL": "ポッドURL", "SSO": "SSO", "Symphony Logo": "Symphony", "WelcomeText": "ようこそ" diff --git a/src/locale/ja.json b/src/locale/ja.json index a8905ea5..75243a4f 100644 --- a/src/locale/ja.json +++ b/src/locale/ja.json @@ -196,10 +196,10 @@ "Updating Title bar style requires Symphony to relaunch.": "タイトルバーのスタイルを更新するには、Symphonyが再起動する必要があります。", "View": "ビュー", "Welcome": { - "Continue": "継続する", + "Continue": "持続する", "Enable Single Sign On": "シングルサインオンを有効にする", "Please enter a valid url": "有効なURLを入力してください", - "Pod URL": "ERLの下", + "Pod URL": "ポッドURL", "SSO": "SSO", "Symphony Logo": "Symphony", "WelcomeText": "ようこそ"