mirror of
https://github.com/finos/SymphonyElectron.git
synced 2025-02-25 18:55:29 -06:00
Merge branch 'master' into SDA-1959b
This commit is contained in:
commit
0266bfb7be
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"url":"https://foundation-dev.symphony.com",
|
"url":"https://my.symphony.com",
|
||||||
"minimizeOnClose" : "ENABLED",
|
"minimizeOnClose" : "ENABLED",
|
||||||
"launchOnStartup" : "ENABLED",
|
"launchOnStartup" : "ENABLED",
|
||||||
"alwaysOnTop" : "DISABLED",
|
"alwaysOnTop" : "DISABLED",
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
## Overview
|
## 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
|
## 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.
|
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)
|
[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
|
## Implementation Details
|
||||||
|
|
||||||
- The plugin captures data entered by the user and copied it to a temp file
|
- 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.
|
||||||
- The post installation script then reads data from the temp file and replaces the values in the 'Symphony.config' file in the installed app
|
- Post installation script reads data from the temp files and replaces the values in the 'Symphony.config' file in the installed app
|
||||||
|
|
||||||
## Known Issues
|
## 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).
|
- 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
|
|
||||||
|
|
||||||
## Related links
|
## Related links
|
||||||
|
|
||||||
- [Packages Mac](http://s.sudre.free.fr/Software/Packages/about.html)
|
- [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)
|
- [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)
|
- [Destination Select Bug](https://stackoverflow.com/questions/4647416/mac-packagemaker-destination-select-step-a-skipping-boption-permanently-disa)
|
||||||
|
|
||||||
|
@ -1,52 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
||||||
<plist version="1.0">
|
|
||||||
<dict>
|
|
||||||
<key>BuildMachineOSBuild</key>
|
|
||||||
<string>19C57</string>
|
|
||||||
<key>CFBundleDevelopmentRegion</key>
|
|
||||||
<string>en</string>
|
|
||||||
<key>CFBundleExecutable</key>
|
|
||||||
<string>SymphonySettingsPlugin</string>
|
|
||||||
<key>CFBundleIdentifier</key>
|
|
||||||
<string>com.symphony.SymphonySettingsPlugin</string>
|
|
||||||
<key>CFBundleInfoDictionaryVersion</key>
|
|
||||||
<string>6.0</string>
|
|
||||||
<key>CFBundleName</key>
|
|
||||||
<string>SymphonySettingsPlugin</string>
|
|
||||||
<key>CFBundlePackageType</key>
|
|
||||||
<string>BNDL</string>
|
|
||||||
<key>CFBundleShortVersionString</key>
|
|
||||||
<string>4.0</string>
|
|
||||||
<key>CFBundleSupportedPlatforms</key>
|
|
||||||
<array>
|
|
||||||
<string>MacOSX</string>
|
|
||||||
</array>
|
|
||||||
<key>CFBundleVersion</key>
|
|
||||||
<string>1</string>
|
|
||||||
<key>DTCompiler</key>
|
|
||||||
<string>com.apple.compilers.llvm.clang.1_0</string>
|
|
||||||
<key>DTPlatformBuild</key>
|
|
||||||
<string>11C29</string>
|
|
||||||
<key>DTPlatformVersion</key>
|
|
||||||
<string>GM</string>
|
|
||||||
<key>DTSDKBuild</key>
|
|
||||||
<string>19B90</string>
|
|
||||||
<key>DTSDKName</key>
|
|
||||||
<string>macosx10.15</string>
|
|
||||||
<key>DTXcode</key>
|
|
||||||
<string>1130</string>
|
|
||||||
<key>DTXcodeBuild</key>
|
|
||||||
<string>11C29</string>
|
|
||||||
<key>InstallerSectionTitle</key>
|
|
||||||
<string>Pod Settings</string>
|
|
||||||
<key>LSMinimumSystemVersion</key>
|
|
||||||
<string>10.10</string>
|
|
||||||
<key>NSHumanReadableCopyright</key>
|
|
||||||
<string>Copyright © 2017 Symphony. All rights reserved.</string>
|
|
||||||
<key>NSMainNibFile</key>
|
|
||||||
<string>MyInstallerPane</string>
|
|
||||||
<key>NSPrincipalClass</key>
|
|
||||||
<string>InstallerSection</string>
|
|
||||||
</dict>
|
|
||||||
</plist>
|
|
Binary file not shown.
Binary file not shown.
@ -1,16 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
||||||
<plist version="1.0">
|
|
||||||
<dict>
|
|
||||||
<key>SectionOrder</key>
|
|
||||||
<array>
|
|
||||||
<string>Introduction</string>
|
|
||||||
<string>ReadMe</string>
|
|
||||||
<string>License</string>
|
|
||||||
<string>SymphonySettingsPlugin.bundle</string>
|
|
||||||
<string>Target</string>
|
|
||||||
<string>PackageSelection</string>
|
|
||||||
<string>Install</string>
|
|
||||||
</array>
|
|
||||||
</dict>
|
|
||||||
</plist>
|
|
Binary file not shown.
Binary file not shown.
@ -1,191 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
||||||
<plist version="1.0">
|
|
||||||
<dict>
|
|
||||||
<key>files</key>
|
|
||||||
<dict>
|
|
||||||
<key>Resources/Base.lproj/MyInstallerPane.nib</key>
|
|
||||||
<data>
|
|
||||||
YqJEUs+O0NAGFaXYG/PL5/LjGRY=
|
|
||||||
</data>
|
|
||||||
<key>Resources/InstallerSections.plist</key>
|
|
||||||
<data>
|
|
||||||
htLpJqbvPLRCEJWl7tW5JtJh57U=
|
|
||||||
</data>
|
|
||||||
<key>Resources/en.lproj/InfoPlist.strings</key>
|
|
||||||
<dict>
|
|
||||||
<key>hash</key>
|
|
||||||
<data>
|
|
||||||
MKMIqMmrq5wHe2WIb39Zx7uopYM=
|
|
||||||
</data>
|
|
||||||
<key>optional</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
<key>Resources/en.lproj/Localizable.strings</key>
|
|
||||||
<dict>
|
|
||||||
<key>hash</key>
|
|
||||||
<data>
|
|
||||||
BNnst4BtRwVgmY7KjJHnv/Gi9bA=
|
|
||||||
</data>
|
|
||||||
<key>optional</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
|
||||||
<key>files2</key>
|
|
||||||
<dict>
|
|
||||||
<key>Resources/Base.lproj/MyInstallerPane.nib</key>
|
|
||||||
<dict>
|
|
||||||
<key>hash</key>
|
|
||||||
<data>
|
|
||||||
YqJEUs+O0NAGFaXYG/PL5/LjGRY=
|
|
||||||
</data>
|
|
||||||
<key>hash2</key>
|
|
||||||
<data>
|
|
||||||
vrmW//WHQVaIHJrMeFnpvRK5qq2445PL7k/PHsv18/k=
|
|
||||||
</data>
|
|
||||||
</dict>
|
|
||||||
<key>Resources/InstallerSections.plist</key>
|
|
||||||
<dict>
|
|
||||||
<key>hash</key>
|
|
||||||
<data>
|
|
||||||
htLpJqbvPLRCEJWl7tW5JtJh57U=
|
|
||||||
</data>
|
|
||||||
<key>hash2</key>
|
|
||||||
<data>
|
|
||||||
s4rwjWW7Gd+XrsmL4BJfMLfOoaUnr8TRXs1Fc6Ieb24=
|
|
||||||
</data>
|
|
||||||
</dict>
|
|
||||||
<key>Resources/en.lproj/InfoPlist.strings</key>
|
|
||||||
<dict>
|
|
||||||
<key>hash</key>
|
|
||||||
<data>
|
|
||||||
MKMIqMmrq5wHe2WIb39Zx7uopYM=
|
|
||||||
</data>
|
|
||||||
<key>hash2</key>
|
|
||||||
<data>
|
|
||||||
6fmnl10zA3TcGk73XQtxuW2uRXRq0TLb3Oiprz+uW1M=
|
|
||||||
</data>
|
|
||||||
<key>optional</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
<key>Resources/en.lproj/Localizable.strings</key>
|
|
||||||
<dict>
|
|
||||||
<key>hash</key>
|
|
||||||
<data>
|
|
||||||
BNnst4BtRwVgmY7KjJHnv/Gi9bA=
|
|
||||||
</data>
|
|
||||||
<key>hash2</key>
|
|
||||||
<data>
|
|
||||||
N91Gfh6N6xvbnmDSlWU/PARxExcPoyutwL88q2opqak=
|
|
||||||
</data>
|
|
||||||
<key>optional</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
|
||||||
<key>rules</key>
|
|
||||||
<dict>
|
|
||||||
<key>^Resources/</key>
|
|
||||||
<true/>
|
|
||||||
<key>^Resources/.*\.lproj/</key>
|
|
||||||
<dict>
|
|
||||||
<key>optional</key>
|
|
||||||
<true/>
|
|
||||||
<key>weight</key>
|
|
||||||
<real>1000</real>
|
|
||||||
</dict>
|
|
||||||
<key>^Resources/.*\.lproj/locversion.plist$</key>
|
|
||||||
<dict>
|
|
||||||
<key>omit</key>
|
|
||||||
<true/>
|
|
||||||
<key>weight</key>
|
|
||||||
<real>1100</real>
|
|
||||||
</dict>
|
|
||||||
<key>^Resources/Base\.lproj/</key>
|
|
||||||
<dict>
|
|
||||||
<key>weight</key>
|
|
||||||
<real>1010</real>
|
|
||||||
</dict>
|
|
||||||
<key>^version.plist$</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
<key>rules2</key>
|
|
||||||
<dict>
|
|
||||||
<key>.*\.dSYM($|/)</key>
|
|
||||||
<dict>
|
|
||||||
<key>weight</key>
|
|
||||||
<real>11</real>
|
|
||||||
</dict>
|
|
||||||
<key>^(.*/)?\.DS_Store$</key>
|
|
||||||
<dict>
|
|
||||||
<key>omit</key>
|
|
||||||
<true/>
|
|
||||||
<key>weight</key>
|
|
||||||
<real>2000</real>
|
|
||||||
</dict>
|
|
||||||
<key>^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/</key>
|
|
||||||
<dict>
|
|
||||||
<key>nested</key>
|
|
||||||
<true/>
|
|
||||||
<key>weight</key>
|
|
||||||
<real>10</real>
|
|
||||||
</dict>
|
|
||||||
<key>^.*</key>
|
|
||||||
<true/>
|
|
||||||
<key>^Info\.plist$</key>
|
|
||||||
<dict>
|
|
||||||
<key>omit</key>
|
|
||||||
<true/>
|
|
||||||
<key>weight</key>
|
|
||||||
<real>20</real>
|
|
||||||
</dict>
|
|
||||||
<key>^PkgInfo$</key>
|
|
||||||
<dict>
|
|
||||||
<key>omit</key>
|
|
||||||
<true/>
|
|
||||||
<key>weight</key>
|
|
||||||
<real>20</real>
|
|
||||||
</dict>
|
|
||||||
<key>^Resources/</key>
|
|
||||||
<dict>
|
|
||||||
<key>weight</key>
|
|
||||||
<real>20</real>
|
|
||||||
</dict>
|
|
||||||
<key>^Resources/.*\.lproj/</key>
|
|
||||||
<dict>
|
|
||||||
<key>optional</key>
|
|
||||||
<true/>
|
|
||||||
<key>weight</key>
|
|
||||||
<real>1000</real>
|
|
||||||
</dict>
|
|
||||||
<key>^Resources/.*\.lproj/locversion.plist$</key>
|
|
||||||
<dict>
|
|
||||||
<key>omit</key>
|
|
||||||
<true/>
|
|
||||||
<key>weight</key>
|
|
||||||
<real>1100</real>
|
|
||||||
</dict>
|
|
||||||
<key>^Resources/Base\.lproj/</key>
|
|
||||||
<dict>
|
|
||||||
<key>weight</key>
|
|
||||||
<real>1010</real>
|
|
||||||
</dict>
|
|
||||||
<key>^[^/]+$</key>
|
|
||||||
<dict>
|
|
||||||
<key>nested</key>
|
|
||||||
<true/>
|
|
||||||
<key>weight</key>
|
|
||||||
<real>10</real>
|
|
||||||
</dict>
|
|
||||||
<key>^embedded\.provisionprofile$</key>
|
|
||||||
<dict>
|
|
||||||
<key>weight</key>
|
|
||||||
<real>20</real>
|
|
||||||
</dict>
|
|
||||||
<key>^version\.plist$</key>
|
|
||||||
<dict>
|
|
||||||
<key>weight</key>
|
|
||||||
<real>20</real>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
|
||||||
</plist>
|
|
@ -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 = "<group>"; };
|
|
||||||
3A10EBD31ED4336D0083702F /* MyInstallerPane.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MyInstallerPane.m; sourceTree = "<group>"; };
|
|
||||||
3A10EBD61ED4336D0083702F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MyInstallerPane.xib; sourceTree = "<group>"; };
|
|
||||||
3A10EBD91ED4336D0083702F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
|
|
||||||
3A10EBDB1ED4336D0083702F /* InstallerSections.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = InstallerSections.plist; sourceTree = "<group>"; };
|
|
||||||
3A10EBDD1ED4336D0083702F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
|
||||||
3A10EBDF1ED4336D0083702F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
|
||||||
/* 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 = "<group>";
|
|
||||||
};
|
|
||||||
3A10EBD01ED4336D0083702F /* Products */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
3A10EBCF1ED4336D0083702F /* SymphonySettingsPlugin.bundle */,
|
|
||||||
);
|
|
||||||
name = Products;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
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 = "<group>";
|
|
||||||
};
|
|
||||||
/* 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 = "<group>";
|
|
||||||
};
|
|
||||||
3A10EBD81ED4336D0083702F /* Localizable.strings */ = {
|
|
||||||
isa = PBXVariantGroup;
|
|
||||||
children = (
|
|
||||||
3A10EBD91ED4336D0083702F /* en */,
|
|
||||||
);
|
|
||||||
name = Localizable.strings;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
3A10EBDE1ED4336D0083702F /* InfoPlist.strings */ = {
|
|
||||||
isa = PBXVariantGroup;
|
|
||||||
children = (
|
|
||||||
3A10EBDF1ED4336D0083702F /* en */,
|
|
||||||
);
|
|
||||||
name = InfoPlist.strings;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
/* 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 */;
|
|
||||||
}
|
|
@ -1,7 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<Workspace
|
|
||||||
version = "1.0">
|
|
||||||
<FileRef
|
|
||||||
location = "self:SymphonySettingsPlugin.xcodeproj">
|
|
||||||
</FileRef>
|
|
||||||
</Workspace>
|
|
@ -1,8 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
||||||
<plist version="1.0">
|
|
||||||
<dict>
|
|
||||||
<key>IDEDidComputeMac32BitWarning</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
</plist>
|
|
@ -1,76 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<Scheme
|
|
||||||
LastUpgradeVersion = "1100"
|
|
||||||
version = "1.3">
|
|
||||||
<BuildAction
|
|
||||||
parallelizeBuildables = "YES"
|
|
||||||
buildImplicitDependencies = "YES">
|
|
||||||
<BuildActionEntries>
|
|
||||||
<BuildActionEntry
|
|
||||||
buildForTesting = "YES"
|
|
||||||
buildForRunning = "YES"
|
|
||||||
buildForProfiling = "YES"
|
|
||||||
buildForArchiving = "YES"
|
|
||||||
buildForAnalyzing = "YES">
|
|
||||||
<BuildableReference
|
|
||||||
BuildableIdentifier = "primary"
|
|
||||||
BlueprintIdentifier = "3A10EBCE1ED4336D0083702F"
|
|
||||||
BuildableName = "SymphonySettingsPlugin.bundle"
|
|
||||||
BlueprintName = "SymphonySettingsPlugin"
|
|
||||||
ReferencedContainer = "container:SymphonySettingsPlugin.xcodeproj">
|
|
||||||
</BuildableReference>
|
|
||||||
</BuildActionEntry>
|
|
||||||
</BuildActionEntries>
|
|
||||||
</BuildAction>
|
|
||||||
<TestAction
|
|
||||||
buildConfiguration = "Debug"
|
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
|
||||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
|
||||||
<Testables>
|
|
||||||
</Testables>
|
|
||||||
</TestAction>
|
|
||||||
<LaunchAction
|
|
||||||
buildConfiguration = "Release"
|
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
|
||||||
launchStyle = "0"
|
|
||||||
useCustomWorkingDirectory = "NO"
|
|
||||||
ignoresPersistentStateOnLaunch = "NO"
|
|
||||||
debugDocumentVersioning = "YES"
|
|
||||||
debugServiceExtension = "internal"
|
|
||||||
allowLocationSimulation = "YES">
|
|
||||||
<MacroExpansion>
|
|
||||||
<BuildableReference
|
|
||||||
BuildableIdentifier = "primary"
|
|
||||||
BlueprintIdentifier = "3A10EBCE1ED4336D0083702F"
|
|
||||||
BuildableName = "SymphonySettingsPlugin.bundle"
|
|
||||||
BlueprintName = "SymphonySettingsPlugin"
|
|
||||||
ReferencedContainer = "container:SymphonySettingsPlugin.xcodeproj">
|
|
||||||
</BuildableReference>
|
|
||||||
</MacroExpansion>
|
|
||||||
</LaunchAction>
|
|
||||||
<ProfileAction
|
|
||||||
buildConfiguration = "Release"
|
|
||||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
|
||||||
savedToolIdentifier = ""
|
|
||||||
useCustomWorkingDirectory = "NO"
|
|
||||||
debugDocumentVersioning = "YES">
|
|
||||||
<MacroExpansion>
|
|
||||||
<BuildableReference
|
|
||||||
BuildableIdentifier = "primary"
|
|
||||||
BlueprintIdentifier = "3A10EBCE1ED4336D0083702F"
|
|
||||||
BuildableName = "SymphonySettingsPlugin.bundle"
|
|
||||||
BlueprintName = "SymphonySettingsPlugin"
|
|
||||||
ReferencedContainer = "container:SymphonySettingsPlugin.xcodeproj">
|
|
||||||
</BuildableReference>
|
|
||||||
</MacroExpansion>
|
|
||||||
</ProfileAction>
|
|
||||||
<AnalyzeAction
|
|
||||||
buildConfiguration = "Debug">
|
|
||||||
</AnalyzeAction>
|
|
||||||
<ArchiveAction
|
|
||||||
buildConfiguration = "Release"
|
|
||||||
revealArchiveInOrganizer = "YES">
|
|
||||||
</ArchiveAction>
|
|
||||||
</Scheme>
|
|
@ -1,27 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
||||||
<plist version="1.0">
|
|
||||||
<dict>
|
|
||||||
<key>SchemeUserState</key>
|
|
||||||
<dict>
|
|
||||||
<key>Run - Debug.xcscheme</key>
|
|
||||||
<dict>
|
|
||||||
<key>orderHint</key>
|
|
||||||
<integer>1</integer>
|
|
||||||
</dict>
|
|
||||||
<key>SymphonySettingsPlugin.xcscheme</key>
|
|
||||||
<dict>
|
|
||||||
<key>orderHint</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
|
||||||
<key>SuppressBuildableAutocreation</key>
|
|
||||||
<dict>
|
|
||||||
<key>3A10EBCE1ED4336D0083702F</key>
|
|
||||||
<dict>
|
|
||||||
<key>primary</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
|
||||||
</plist>
|
|
@ -1,427 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
|
||||||
<dependencies>
|
|
||||||
<deployment identifier="macosx"/>
|
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14460.31"/>
|
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
|
||||||
</dependencies>
|
|
||||||
<objects>
|
|
||||||
<customObject id="-2" userLabel="File's Owner" customClass="InstallerSection">
|
|
||||||
<connections>
|
|
||||||
<outlet property="firstPane" destination="Qsn-FY-4qK" id="Dhh-1H-QYh"/>
|
|
||||||
</connections>
|
|
||||||
</customObject>
|
|
||||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
|
||||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
|
||||||
<customObject id="Qsn-FY-4qK" customClass="MyInstallerPane">
|
|
||||||
<connections>
|
|
||||||
<outlet property="alwaysOnTopCheckBox" destination="xJR-Fr-mRt" id="WhA-p1-kga"/>
|
|
||||||
<outlet property="autoLaunchCheckBox" destination="Zqh-0e-vtD" id="ETW-F7-I4U"/>
|
|
||||||
<outlet property="bringToFrontCheckBox" destination="2Me-7N-GvD" id="pH5-dt-hyv"/>
|
|
||||||
<outlet property="contentView" destination="TUK-W2-vig" id="gTd-A7-dof"/>
|
|
||||||
<outlet property="devToolsCheckBox" destination="TGe-oB-TBf" id="qqn-SW-zAf"/>
|
|
||||||
<outlet property="fullScreenCheckBox" destination="duA-yQ-iEf" id="0dM-Fa-K6i"/>
|
|
||||||
<outlet property="geoLocationCheckBox" destination="L6E-73-ezq" id="iLj-hy-quO"/>
|
|
||||||
<outlet property="mediaCheckBox" destination="B4Z-uk-s4I" id="NOT-XU-pPs"/>
|
|
||||||
<outlet property="midiSysexCheckBox" destination="EpT-Lf-0g8" id="Ddj-13-1M2"/>
|
|
||||||
<outlet property="minimizeOnCloseCheckBox" destination="pJv-Z5-S8c" id="hy7-4l-Y2A"/>
|
|
||||||
<outlet property="notificationsCheckBox" destination="X7P-UH-q4X" id="2vt-Ew-8lN"/>
|
|
||||||
<outlet property="openExternalAppCheckBox" destination="5NZ-5a-PIB" id="Abc-i1-mRt"/>
|
|
||||||
<outlet property="parentSection" destination="-2" id="FB7-UV-e8k"/>
|
|
||||||
<outlet property="podUrlAlertTextBox" destination="lha-ib-BpX" id="2Hp-DE-0mS"/>
|
|
||||||
<outlet property="podUrlTextBox" destination="bt3-SN-uKp" id="rpG-WU-oG1"/>
|
|
||||||
<outlet property="pointerLockCheckBox" destination="AuA-RI-UYn" id="6i4-GB-w1Z"/>
|
|
||||||
<outlet property="pointerLockCheckbox" destination="AuA-RI-UYn" id="3FH-1x-REu"/>
|
|
||||||
<outlet property="ssoCheckBox" destination="YPX-1k-Fs4" id="laJ-aN-s7A"/>
|
|
||||||
</connections>
|
|
||||||
</customObject>
|
|
||||||
<customView id="TUK-W2-vig" userLabel="View">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="445" height="365"/>
|
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
|
||||||
<subviews>
|
|
||||||
<tabView toolTip="Pod Settings" fixedFrame="YES" drawsBackground="NO" allowsTruncatedLabels="NO" translatesAutoresizingMaskIntoConstraints="NO" id="QyG-6U-OmT">
|
|
||||||
<rect key="frame" x="-7" y="-10" width="459" height="381"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<tabViewItems>
|
|
||||||
<tabViewItem label="Settings" identifier="" id="bcH-AH-92V">
|
|
||||||
<view key="view" ambiguous="YES" id="ltw-L5-z8g">
|
|
||||||
<rect key="frame" x="10" y="33" width="439" height="335"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
|
||||||
<subviews>
|
|
||||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="bt3-SN-uKp">
|
|
||||||
<rect key="frame" x="152" y="278" width="201" height="22"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" title="https://[POD].symphony.com" drawsBackground="YES" usesSingleLineMode="YES" id="4WS-yY-IPf">
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="hdX-B9-o0w">
|
|
||||||
<rect key="frame" x="15" y="281" width="131" height="17"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="left" title="Symphony Pod URL" id="R21-b3-R67">
|
|
||||||
<font key="font" metaFont="systemBold"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="lRj-wz-i1m">
|
|
||||||
<rect key="frame" x="244" y="222" width="122" height="17"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="left" title="Minimize on Close" id="VXX-cj-1fp">
|
|
||||||
<font key="font" metaFont="systemBold"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="pJv-Z5-S8c">
|
|
||||||
<rect key="frame" x="244" y="152" width="79" height="27"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<buttonCell key="cell" type="check" title="Enable" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="Wks-ms-Dds">
|
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
</button>
|
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Oc1-Dm-yfg">
|
|
||||||
<rect key="frame" x="244" y="114" width="93" height="17"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="left" title="Bring to Front" id="nNz-Ll-NWY">
|
|
||||||
<font key="font" metaFont="systemBold"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="2Me-7N-GvD">
|
|
||||||
<rect key="frame" x="244" y="45" width="79" height="27"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<buttonCell key="cell" type="check" title="Enable" bezelStyle="regularSquare" imagePosition="left" inset="2" id="xdK-SE-fCI">
|
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
</button>
|
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="INy-Sf-8qZ">
|
|
||||||
<rect key="frame" x="15" y="221" width="124" height="17"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="left" title="Launch on Startup" id="m0Q-sb-lur">
|
|
||||||
<font key="font" metaFont="systemBold"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Zqh-0e-vtD">
|
|
||||||
<rect key="frame" x="15" y="152" width="79" height="27"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<buttonCell key="cell" type="check" title="Enable" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="961-eU-jAZ">
|
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
</button>
|
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="1Xi-cm-l1K">
|
|
||||||
<rect key="frame" x="244" y="185" width="175" height="28"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" title="Minimize Symphony when closed" id="YlU-cU-Dpo">
|
|
||||||
<font key="font" metaFont="smallSystem"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="4up-16-Exw">
|
|
||||||
<rect key="frame" x="15" y="185" width="175" height="28"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" title="Launch Symphony when computer starts" id="Gdo-1v-GBn">
|
|
||||||
<font key="font" metaFont="smallSystem"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="mch-Fi-uVp">
|
|
||||||
<rect key="frame" x="244" y="78" width="175" height="28"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" title="Bring Symphony to front when message is received" id="eaz-Rv-tsn">
|
|
||||||
<font key="font" metaFont="smallSystem"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Wzo-bc-Yl0">
|
|
||||||
<rect key="frame" x="15" y="114" width="99" height="17"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="left" title="Always on Top" id="hAT-ho-9sn">
|
|
||||||
<font key="font" metaFont="systemBold"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="KDh-Sm-XR0">
|
|
||||||
<rect key="frame" x="15" y="77" width="175" height="28"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" title="Keep Symphony on top of other applications" id="hun-gL-63Y">
|
|
||||||
<font key="font" metaFont="smallSystem"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="xJR-Fr-mRt">
|
|
||||||
<rect key="frame" x="15" y="44" width="79" height="27"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<buttonCell key="cell" type="check" title="Enable" bezelStyle="regularSquare" imagePosition="left" inset="2" id="9CK-aX-XOH">
|
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
</button>
|
|
||||||
<textField verticalHuggingPriority="750" fixedFrame="YES" allowsExpansionToolTips="YES" textCompletion="NO" translatesAutoresizingMaskIntoConstraints="NO" id="lha-ib-BpX">
|
|
||||||
<rect key="frame" x="150" y="247" width="274" height="22"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" state="on" id="BfU-TS-qd2">
|
|
||||||
<font key="font" metaFont="smallSystem"/>
|
|
||||||
<color key="textColor" name="systemRedColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="YPX-1k-Fs4">
|
|
||||||
<rect key="frame" x="359" y="279" width="49" height="18"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<buttonCell key="cell" type="check" title="SSO" bezelStyle="regularSquare" imagePosition="left" inset="2" id="dgn-Hd-UcT">
|
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
<connections>
|
|
||||||
<action selector="handleSSOCheckboxStateChange:" target="Qsn-FY-4qK" id="LyC-VX-uCH"/>
|
|
||||||
</connections>
|
|
||||||
</button>
|
|
||||||
</subviews>
|
|
||||||
</view>
|
|
||||||
</tabViewItem>
|
|
||||||
<tabViewItem label="Permissions" identifier="" id="Tgb-j9-73A">
|
|
||||||
<view key="view" id="50f-DH-wx7">
|
|
||||||
<rect key="frame" x="10" y="33" width="439" height="335"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
|
||||||
<subviews>
|
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="lmJ-xu-7sT">
|
|
||||||
<rect key="frame" x="17" y="301" width="101" height="17"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="left" title="Media" id="dGH-H5-EpA">
|
|
||||||
<font key="font" metaFont="systemBold"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="B4Z-uk-s4I">
|
|
||||||
<rect key="frame" x="17" y="238" width="69" height="27"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<buttonCell key="cell" type="check" title=" Allow" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="TkH-Ca-6a3">
|
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
</button>
|
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="8ma-2K-tuH">
|
|
||||||
<rect key="frame" x="17" y="261" width="126" height="32"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="left" title="Access to Camera, Audio, Microphone" id="OYI-4m-8XD">
|
|
||||||
<font key="font" metaFont="smallSystem"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="x9w-2S-xbk">
|
|
||||||
<rect key="frame" x="17" y="203" width="88" height="17"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="left" title="Notifications" id="Lyz-nb-hmB">
|
|
||||||
<font key="font" metaFont="systemBold"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="X7P-UH-q4X">
|
|
||||||
<rect key="frame" x="17" y="140" width="69" height="27"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<buttonCell key="cell" type="check" title=" Allow" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="ubi-Bn-kql">
|
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
</button>
|
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="qTp-QP-l7r">
|
|
||||||
<rect key="frame" x="17" y="163" width="126" height="32"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="left" title="Chrome Native Notifications" id="vHI-Mt-ZV2">
|
|
||||||
<font key="font" metaFont="smallSystem"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="V1I-f0-O6n">
|
|
||||||
<rect key="frame" x="17" y="105" width="101" height="17"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="left" title="Geo Location" id="ckp-zw-fJC">
|
|
||||||
<font key="font" metaFont="systemBold"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ogb-gv-9Wz">
|
|
||||||
<rect key="frame" x="17" y="65" width="126" height="32"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="left" title="Symphony Accessing user location" id="wAZ-do-onR">
|
|
||||||
<font key="font" metaFont="smallSystem"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="L6E-73-ezq">
|
|
||||||
<rect key="frame" x="17" y="35" width="69" height="27"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<buttonCell key="cell" type="check" title=" Allow" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="Vzz-Is-k3v">
|
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
</button>
|
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="6L4-kr-but">
|
|
||||||
<rect key="frame" x="159" y="301" width="101" height="17"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="left" title="Pointer Lock" id="H1v-Lk-USy">
|
|
||||||
<font key="font" metaFont="systemBold"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="AuA-RI-UYn">
|
|
||||||
<rect key="frame" x="159" y="238" width="69" height="27"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<buttonCell key="cell" type="check" title=" Allow" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="2Qa-wv-TEa">
|
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
</button>
|
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="4eD-lV-xNb">
|
|
||||||
<rect key="frame" x="159" y="261" width="126" height="32"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="left" title="Locking a pointer in Symphony context" id="b6W-z1-jFL">
|
|
||||||
<font key="font" metaFont="smallSystem"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="7yg-Fe-7yk">
|
|
||||||
<rect key="frame" x="159" y="203" width="101" height="17"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="left" title="Full Screen" id="NFT-4J-chs">
|
|
||||||
<font key="font" metaFont="systemBold"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="duA-yQ-iEf">
|
|
||||||
<rect key="frame" x="159" y="140" width="69" height="27"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<buttonCell key="cell" type="check" title=" Allow" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="gFe-lr-eb0">
|
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
</button>
|
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="jz5-3O-sm5">
|
|
||||||
<rect key="frame" x="159" y="163" width="126" height="32"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="left" title="Accessing full screen in Symphony context" id="UC5-bq-a56">
|
|
||||||
<font key="font" metaFont="smallSystem"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="I1n-yg-bzf">
|
|
||||||
<rect key="frame" x="159" y="105" width="126" height="17"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="left" title="Open External App" id="Wew-Lc-ypX">
|
|
||||||
<font key="font" metaFont="systemBold"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="hYH-Vt-anY">
|
|
||||||
<rect key="frame" x="159" y="65" width="126" height="32"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="left" title="Opening External app from Symphony" id="HnH-UO-NrW">
|
|
||||||
<font key="font" metaFont="smallSystem"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="5NZ-5a-PIB">
|
|
||||||
<rect key="frame" x="159" y="35" width="69" height="27"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<buttonCell key="cell" type="check" title=" Allow" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="GbH-xy-gh2">
|
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
</button>
|
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ZsT-ns-fQ1">
|
|
||||||
<rect key="frame" x="298" y="301" width="70" height="17"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="left" title="MidiSysex" id="Sgj-S7-tne">
|
|
||||||
<font key="font" metaFont="systemBold"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="EpT-Lf-0g8">
|
|
||||||
<rect key="frame" x="298" y="238" width="69" height="27"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<buttonCell key="cell" type="check" title=" Allow" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="aSo-6F-oCF">
|
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
</button>
|
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="CB1-IS-bIc">
|
|
||||||
<rect key="frame" x="298" y="261" width="126" height="32"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="left" title="Access to external connected devices" id="r4B-Jw-Y03">
|
|
||||||
<font key="font" metaFont="smallSystem"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
</subviews>
|
|
||||||
</view>
|
|
||||||
</tabViewItem>
|
|
||||||
<tabViewItem label="Security" identifier="" id="vrn-fr-Dgw" userLabel="Security">
|
|
||||||
<view key="view" id="m10-37-sFo">
|
|
||||||
<rect key="frame" x="10" y="33" width="439" height="335"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
|
||||||
<subviews>
|
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="gme-WH-3ls">
|
|
||||||
<rect key="frame" x="15" y="284" width="114" height="17"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="left" title="Enable Dev Tools" id="UlB-kZ-FRf">
|
|
||||||
<font key="font" metaFont="systemBold"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="TGe-oB-TBf">
|
|
||||||
<rect key="frame" x="15" y="215" width="79" height="27"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<buttonCell key="cell" type="check" title="Enable" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="ftT-x5-nva">
|
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
</button>
|
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ggB-Ig-gRa">
|
|
||||||
<rect key="frame" x="15" y="248" width="112" height="28"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" title="Enable dev tools for troubleshooting" id="XrC-xT-jAS">
|
|
||||||
<font key="font" metaFont="smallSystem"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
</subviews>
|
|
||||||
</view>
|
|
||||||
</tabViewItem>
|
|
||||||
</tabViewItems>
|
|
||||||
</tabView>
|
|
||||||
</subviews>
|
|
||||||
<point key="canvasLocation" x="152.5" y="186.5"/>
|
|
||||||
</customView>
|
|
||||||
</objects>
|
|
||||||
</document>
|
|
@ -1,30 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
||||||
<plist version="1.0">
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleDevelopmentRegion</key>
|
|
||||||
<string>en</string>
|
|
||||||
<key>CFBundleExecutable</key>
|
|
||||||
<string>$(EXECUTABLE_NAME)</string>
|
|
||||||
<key>CFBundleIdentifier</key>
|
|
||||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
|
||||||
<key>CFBundleInfoDictionaryVersion</key>
|
|
||||||
<string>6.0</string>
|
|
||||||
<key>CFBundleName</key>
|
|
||||||
<string>$(PRODUCT_NAME)</string>
|
|
||||||
<key>CFBundlePackageType</key>
|
|
||||||
<string>BNDL</string>
|
|
||||||
<key>CFBundleShortVersionString</key>
|
|
||||||
<string>4.0</string>
|
|
||||||
<key>CFBundleVersion</key>
|
|
||||||
<string>1</string>
|
|
||||||
<key>InstallerSectionTitle</key>
|
|
||||||
<string>Pod Settings</string>
|
|
||||||
<key>NSHumanReadableCopyright</key>
|
|
||||||
<string>Copyright © 2017 Symphony. All rights reserved.</string>
|
|
||||||
<key>NSMainNibFile</key>
|
|
||||||
<string>MyInstallerPane</string>
|
|
||||||
<key>NSPrincipalClass</key>
|
|
||||||
<string>InstallerSection</string>
|
|
||||||
</dict>
|
|
||||||
</plist>
|
|
@ -1,16 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
||||||
<plist version="1.0">
|
|
||||||
<dict>
|
|
||||||
<key>SectionOrder</key>
|
|
||||||
<array>
|
|
||||||
<string>Introduction</string>
|
|
||||||
<string>ReadMe</string>
|
|
||||||
<string>License</string>
|
|
||||||
<string>SymphonySettingsPlugin.bundle</string>
|
|
||||||
<string>Target</string>
|
|
||||||
<string>PackageSelection</string>
|
|
||||||
<string>Install</string>
|
|
||||||
</array>
|
|
||||||
</dict>
|
|
||||||
</plist>
|
|
@ -1,31 +0,0 @@
|
|||||||
//
|
|
||||||
// MyInstallerPane.h
|
|
||||||
// SymphonySettingsPlugin
|
|
||||||
//
|
|
||||||
// Copyright © 2017 Symphony. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import <InstallerPlugins/InstallerPlugins.h>
|
|
||||||
|
|
||||||
@interface MyInstallerPane : InstallerPane<NSTextFieldDelegate>
|
|
||||||
|
|
||||||
@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
|
|
@ -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
|
|
@ -1,2 +0,0 @@
|
|||||||
InstallerSectionTitle = "Pod Settings";
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
|||||||
/* Localized versions of Info.plist keys */
|
|
||||||
|
|
||||||
"PaneTitle" = "Pod Settings";
|
|
@ -15,22 +15,13 @@ always_on_top=$(sed -n '4p' ${settingsFilePath});
|
|||||||
bring_to_front=$(sed -n '5p' ${settingsFilePath});
|
bring_to_front=$(sed -n '5p' ${settingsFilePath});
|
||||||
dev_tools_enabled=$(sed -n '6p' ${settingsFilePath});
|
dev_tools_enabled=$(sed -n '6p' ${settingsFilePath});
|
||||||
|
|
||||||
if [ "$pod_url" == "" ]; then
|
## If any of the above values turn out to be empty, set default values ##
|
||||||
pod_url="https://my.symphony.com"
|
if [ "$pod_url" == "" ]; then pod_url="https://my.symphony.com"; fi
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$minimize_on_close" == "" ] || [ "$minimize_on_close" == 'true' ]; then minimize_on_close='ENABLED'; else minimize_on_close='DISABLED'; 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 [ "$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 [ "$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 [ "$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")
|
pod_url_escaped=$(sed 's#[&/\]#\\&#g' <<<"$pod_url")
|
||||||
|
|
||||||
## Replace the default settings with the user selected settings ##
|
## 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#\"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}
|
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 ##
|
## Get Symphony Permissions from the temp file ##
|
||||||
media=$(sed -n '1p' ${permissionsFilePath});
|
media=$(sed -n '1p' ${permissionsFilePath});
|
||||||
geo_location=$(sed -n '2p' ${permissionsFilePath});
|
geo_location=$(sed -n '2p' ${permissionsFilePath});
|
||||||
@ -53,33 +41,14 @@ pointer_lock=$(sed -n '5p' ${permissionsFilePath});
|
|||||||
full_screen=$(sed -n '6p' ${permissionsFilePath});
|
full_screen=$(sed -n '6p' ${permissionsFilePath});
|
||||||
open_external_app=$(sed -n '7p' ${permissionsFilePath});
|
open_external_app=$(sed -n '7p' ${permissionsFilePath});
|
||||||
|
|
||||||
if [ "$media" == "" ]; then
|
## If any of the above values turn out to be empty, set default values ##
|
||||||
media=true;
|
if [ "$media" == "" ]; then media=true; fi
|
||||||
fi
|
if [ "$geo_location" == "" ]; then geo_location=true; fi
|
||||||
|
if [ "$notifications" == "" ]; then notifications=true; fi
|
||||||
if [ "$geo_location" == "" ]; then
|
if [ "$midi_sysex" == "" ]; then midi_sysex=true; fi
|
||||||
geo_location=true;
|
if [ "$pointer_lock" == "" ]; then pointer_lock=true;fi
|
||||||
fi
|
if [ "$full_screen" == "" ]; then full_screen=true; fi
|
||||||
|
if [ "$open_external_app" == "" ]; then open_external_app=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 ##
|
## 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}
|
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#\"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}
|
sed -i "" -E "s#\"openExternal\" ?: ?([Tt][Rr][Uu][Ee]|[Ff][Aa][Ll][Ss][Ee])#\"openExternal\":\ $open_external_app#g" ${newPath}
|
||||||
|
|
||||||
|
## Remove the temp settings & permissions file created ##
|
||||||
## Remove the temp permissions file created ##
|
rm -f ${settingsFilePath}
|
||||||
rm -f ${permissionsFilePath}
|
rm -f ${permissionsFilePath}
|
||||||
|
@ -494,7 +494,7 @@
|
|||||||
<key>FOLLOW_SYMBOLIC_LINKS</key>
|
<key>FOLLOW_SYMBOLIC_LINKS</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>IDENTIFIER</key>
|
<key>IDENTIFIER</key>
|
||||||
<string>com.symphony.symphony-desktop</string>
|
<string>com.symphony.electron-desktop</string>
|
||||||
<key>LOCATION</key>
|
<key>LOCATION</key>
|
||||||
<integer>0</integer>
|
<integer>0</integer>
|
||||||
<key>NAME</key>
|
<key>NAME</key>
|
||||||
@ -510,7 +510,7 @@
|
|||||||
<key>USE_HFS+_COMPRESSION</key>
|
<key>USE_HFS+_COMPRESSION</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>VERSION</key>
|
<key>VERSION</key>
|
||||||
<string>2.0.0</string>
|
<string>8.0.0</string>
|
||||||
</dict>
|
</dict>
|
||||||
<key>TYPE</key>
|
<key>TYPE</key>
|
||||||
<integer>0</integer>
|
<integer>0</integer>
|
||||||
@ -661,17 +661,6 @@
|
|||||||
<key>LIST_TITLE_KEY</key>
|
<key>LIST_TITLE_KEY</key>
|
||||||
<string>InstallerSectionTitle</string>
|
<string>InstallerSectionTitle</string>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
|
||||||
<key>ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS</key>
|
|
||||||
<string>ICPresentationViewInstallerPluginController</string>
|
|
||||||
<key>ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_INSTALLERPLUGIN_PATH</key>
|
|
||||||
<dict>
|
|
||||||
<key>PATH</key>
|
|
||||||
<string>SymphonySettingsPlugin.bundle</string>
|
|
||||||
<key>PATH_TYPE</key>
|
|
||||||
<integer>1</integer>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
|
||||||
<dict>
|
<dict>
|
||||||
<key>ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS</key>
|
<key>ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS</key>
|
||||||
<string>ICPresentationViewDestinationSelectController</string>
|
<string>ICPresentationViewDestinationSelectController</string>
|
||||||
@ -715,9 +704,9 @@
|
|||||||
<key>VALUE</key>
|
<key>VALUE</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>PATH</key>
|
<key>PATH</key>
|
||||||
<string>intro.html</string>
|
<string>/Users/vishwas/Code/symphony/SymphonyElectron/installer/mac/intro.html</string>
|
||||||
<key>PATH_TYPE</key>
|
<key>PATH_TYPE</key>
|
||||||
<integer>3</integer>
|
<integer>1</integer>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
</array>
|
</array>
|
||||||
@ -766,7 +755,7 @@
|
|||||||
<key>IC_REQUIREMENT_OS_DISTRIBUTION_TYPE</key>
|
<key>IC_REQUIREMENT_OS_DISTRIBUTION_TYPE</key>
|
||||||
<integer>0</integer>
|
<integer>0</integer>
|
||||||
<key>IC_REQUIREMENT_OS_MINIMUM_VERSION</key>
|
<key>IC_REQUIREMENT_OS_MINIMUM_VERSION</key>
|
||||||
<integer>100700</integer>
|
<integer>100900</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>IC_REQUIREMENT_CHECK_TYPE</key>
|
<key>IC_REQUIREMENT_CHECK_TYPE</key>
|
||||||
<integer>1</integer>
|
<integer>1</integer>
|
||||||
@ -781,11 +770,11 @@
|
|||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>BEHAVIOR</key>
|
<key>BEHAVIOR</key>
|
||||||
<integer>3</integer>
|
<integer>2</integer>
|
||||||
<key>DICTIONARY</key>
|
<key>DICTIONARY</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>IC_REQUIREMENT_RAM_MINIMUM_SIZE_INDEX</key>
|
<key>IC_REQUIREMENT_RAM_MINIMUM_SIZE_INDEX</key>
|
||||||
<integer>5</integer>
|
<integer>6</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>IC_REQUIREMENT_CHECK_TYPE</key>
|
<key>IC_REQUIREMENT_CHECK_TYPE</key>
|
||||||
<integer>0</integer>
|
<integer>0</integer>
|
||||||
@ -800,7 +789,7 @@
|
|||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>BEHAVIOR</key>
|
<key>BEHAVIOR</key>
|
||||||
<integer>3</integer>
|
<integer>2</integer>
|
||||||
<key>DICTIONARY</key>
|
<key>DICTIONARY</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>IC_REQUIREMENT_CPU_ARCHITECTURE_FAMILY</key>
|
<key>IC_REQUIREMENT_CPU_ARCHITECTURE_FAMILY</key>
|
||||||
@ -810,7 +799,7 @@
|
|||||||
<key>IC_REQUIREMENT_CPU_MINIMUM_CPU_CORES_COUNT</key>
|
<key>IC_REQUIREMENT_CPU_MINIMUM_CPU_CORES_COUNT</key>
|
||||||
<integer>1</integer>
|
<integer>1</integer>
|
||||||
<key>IC_REQUIREMENT_CPU_MINIMUM_FREQUENCY</key>
|
<key>IC_REQUIREMENT_CPU_MINIMUM_FREQUENCY</key>
|
||||||
<integer>0</integer>
|
<integer>2000000</integer>
|
||||||
<key>IC_REQUIREMENT_CPU_POWERPC_ARCHITECTURE_TYPE</key>
|
<key>IC_REQUIREMENT_CPU_POWERPC_ARCHITECTURE_TYPE</key>
|
||||||
<integer>0</integer>
|
<integer>0</integer>
|
||||||
</dict>
|
</dict>
|
||||||
|
8
package-lock.json
generated
8
package-lock.json
generated
@ -17739,16 +17739,16 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"screen-share-indicator-frame": {
|
"screen-share-indicator-frame": {
|
||||||
"version": "1.4.4",
|
"version": "1.4.6",
|
||||||
"resolved": "git+https://github.com/symphonyoss/ScreenShareIndicatorFrame.git#e389ca1e037d174de4b5facb69e435c32c74db76",
|
"resolved": "git+https://github.com/symphonyoss/ScreenShareIndicatorFrame.git#32472243f7c840c6f1310fde56b5498598eeb0a8",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"run-script-os": "1.0.7"
|
"run-script-os": "1.0.7"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"screen-snippet": {
|
"screen-snippet": {
|
||||||
"version": "1.0.6",
|
"version": "1.0.7",
|
||||||
"resolved": "git+https://github.com/symphonyoss/ScreenSnippet2.git#c493f35831d7bf2a8164945f83c2669781dde3a7",
|
"resolved": "git+https://github.com/symphonyoss/ScreenSnippet2.git#de0b90b92113b866cbc30a1c0a5f3c8fc0f6a418",
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"semver": {
|
"semver": {
|
||||||
|
@ -75,8 +75,7 @@
|
|||||||
"library/indexvalidator.exec",
|
"library/indexvalidator.exec",
|
||||||
"library/libsymphonysearch.dylib",
|
"library/libsymphonysearch.dylib",
|
||||||
"library/cryptoLib.dylib",
|
"library/cryptoLib.dylib",
|
||||||
"library/dictionary",
|
"library/dictionary"
|
||||||
"installer/mac/SymphonySettingsPlugin.bundle/Contents/MacOS/SymphonySettingsPlugin"
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"win": {
|
"win": {
|
||||||
|
@ -86,8 +86,8 @@ echo "Running snyk security tests"
|
|||||||
snyk test --file=package.json --org="$SNYK_ORG"
|
snyk test --file=package.json --org="$SNYK_ORG"
|
||||||
|
|
||||||
# Replace url in config
|
# Replace url in config
|
||||||
echo "Setting default pod url to https://corporate.symphony.com"
|
echo "Setting default pod url to https://my.symphony.com"
|
||||||
sed -i -e 's/\"url\"[[:space:]]*\:[[:space:]]*\".*\"/\"url\":\"https:\/\/corporate.symphony.com\"/g' config/Symphony.config
|
sed -i -e 's/\"url\"[[:space:]]*\:[[:space:]]*\".*\"/\"url\":\"https:\/\/my.symphony.com\"/g' config/Symphony.config
|
||||||
|
|
||||||
# Setup the build version
|
# Setup the build version
|
||||||
echo "Setting build version to ${PARENT_BUILD_VERSION}"
|
echo "Setting build version to ${PARENT_BUILD_VERSION}"
|
||||||
|
63
spec/__snapshots__/welcome.spec.ts.snap
Normal file
63
spec/__snapshots__/welcome.spec.ts.snap
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||||
|
|
||||||
|
exports[`welcome should render correctly 1`] = `
|
||||||
|
<div
|
||||||
|
className="Welcome"
|
||||||
|
lang="en-US"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
className="Welcome-image-container"
|
||||||
|
>
|
||||||
|
<img
|
||||||
|
alt="Symphony Logo"
|
||||||
|
src="../renderer/assets/symphony-logo-plain.png"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
className="Welcome-main-container"
|
||||||
|
>
|
||||||
|
<h3
|
||||||
|
className="Welcome-name"
|
||||||
|
>
|
||||||
|
Pod URL
|
||||||
|
</h3>
|
||||||
|
<div
|
||||||
|
className="Welcome-main-container-input-div"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
className="Welcome-main-container-input-selection"
|
||||||
|
>
|
||||||
|
<input
|
||||||
|
className="Welcome-main-container-podurl-box"
|
||||||
|
onChange={[Function]}
|
||||||
|
type="url"
|
||||||
|
value="https://my.symphony.com"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
className="Welcome-main-container-sso-box"
|
||||||
|
title="Enable Single Sign On"
|
||||||
|
>
|
||||||
|
<label>
|
||||||
|
<input
|
||||||
|
checked={false}
|
||||||
|
onChange={[Function]}
|
||||||
|
type="checkbox"
|
||||||
|
/>
|
||||||
|
SSO
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<label
|
||||||
|
className="Welcome-message-label"
|
||||||
|
/>
|
||||||
|
<button
|
||||||
|
className="Welcome-continue-button"
|
||||||
|
disabled={false}
|
||||||
|
onClick={[Function]}
|
||||||
|
>
|
||||||
|
Continue
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`;
|
132
spec/welcome.spec.ts
Normal file
132
spec/welcome.spec.ts
Normal file
@ -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);
|
||||||
|
});
|
||||||
|
});
|
@ -22,12 +22,8 @@ export enum ClientSwitchType {
|
|||||||
CLIENT_2_0_DAILY = 'CLIENT_2_0_DAILY',
|
CLIENT_2_0_DAILY = 'CLIENT_2_0_DAILY',
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IGlobalConfig {
|
|
||||||
url: string;
|
|
||||||
contextIsolation: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface IConfig {
|
export interface IConfig {
|
||||||
|
url: string;
|
||||||
minimizeOnClose: CloudConfigDataTypes;
|
minimizeOnClose: CloudConfigDataTypes;
|
||||||
launchOnStartup: CloudConfigDataTypes;
|
launchOnStartup: CloudConfigDataTypes;
|
||||||
alwaysOnTop: CloudConfigDataTypes;
|
alwaysOnTop: CloudConfigDataTypes;
|
||||||
@ -51,6 +47,11 @@ export interface IConfig {
|
|||||||
clientSwitch: ClientSwitchType;
|
clientSwitch: ClientSwitchType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface IGlobalConfig {
|
||||||
|
url: string;
|
||||||
|
contextIsolation: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
export interface ICloudConfig {
|
export interface ICloudConfig {
|
||||||
configVersion?: string;
|
configVersion?: string;
|
||||||
podLevelEntitlements: IPodLevelEntitlements;
|
podLevelEntitlements: IPodLevelEntitlements;
|
||||||
@ -214,13 +215,13 @@ class Config {
|
|||||||
* @param data {IConfig}
|
* @param data {IConfig}
|
||||||
*/
|
*/
|
||||||
public async updateUserConfig(data: Partial<IConfig>): Promise<void> {
|
public async updateUserConfig(data: Partial<IConfig>): Promise<void> {
|
||||||
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 };
|
this.userConfig = { ...this.userConfig, ...data };
|
||||||
try {
|
try {
|
||||||
await writeFile(this.userConfigPath, JSON.stringify(this.userConfig), { encoding: 'utf8' });
|
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) {
|
} 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}`);
|
dialog.showErrorBox(`Update failed`, `Failed to update user config due to error: ${error}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -323,7 +324,8 @@ class Config {
|
|||||||
await app.whenReady();
|
await app.whenReady();
|
||||||
await this.readGlobalConfig();
|
await this.readGlobalConfig();
|
||||||
logger.info(`config-handler: user config doesn't exist! will create new one and update config`);
|
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'));
|
this.userConfig = this.parseConfigData(fs.readFileSync(this.userConfigPath, 'utf8'));
|
||||||
logger.info(`config-handler: User configuration: `, this.userConfig);
|
logger.info(`config-handler: User configuration: `, this.userConfig);
|
||||||
|
@ -51,8 +51,8 @@ export interface ICustomBrowserWindow extends Electron.BrowserWindow {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Default window width & height
|
// Default window width & height
|
||||||
const DEFAULT_WIDTH: number = 900;
|
let DEFAULT_WIDTH: number = 900;
|
||||||
const DEFAULT_HEIGHT: number = 900;
|
let DEFAULT_HEIGHT: number = 900;
|
||||||
|
|
||||||
export class WindowHandler {
|
export class WindowHandler {
|
||||||
|
|
||||||
@ -88,10 +88,12 @@ export class WindowHandler {
|
|||||||
private readonly backgroundThrottling: boolean;
|
private readonly backgroundThrottling: boolean;
|
||||||
private readonly windowOpts: ICustomBrowserWindowConstructorOpts;
|
private readonly windowOpts: ICustomBrowserWindowConstructorOpts;
|
||||||
private readonly globalConfig: IGlobalConfig;
|
private readonly globalConfig: IGlobalConfig;
|
||||||
|
private readonly userConfig: IConfig;
|
||||||
private readonly config: IConfig;
|
private readonly config: IConfig;
|
||||||
// Window reference
|
// Window reference
|
||||||
private readonly windows: object;
|
private readonly windows: object;
|
||||||
|
|
||||||
|
private shouldShowWelcomeScreen: boolean = false;
|
||||||
private loadFailError: string | undefined;
|
private loadFailError: string | undefined;
|
||||||
private mainWindow: ICustomBrowserWindow | null = null;
|
private mainWindow: ICustomBrowserWindow | null = null;
|
||||||
private aboutAppWindow: Electron.BrowserWindow | null = null;
|
private aboutAppWindow: Electron.BrowserWindow | null = null;
|
||||||
@ -105,13 +107,15 @@ export class WindowHandler {
|
|||||||
// Use these variables only on initial setup
|
// Use these variables only on initial setup
|
||||||
this.config = config.getConfigFields([ 'isCustomTitleBar', 'mainWinPos', 'minimizeOnClose', 'notificationSettings', 'alwaysOnTop', 'locale', 'customFlags', 'clientSwitch' ]);
|
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);
|
logger.info(`window-handler: main windows initialized with following config data`, this.config);
|
||||||
|
|
||||||
this.globalConfig = config.getGlobalConfigFields([ 'url', 'contextIsolation' ]);
|
this.globalConfig = config.getGlobalConfigFields([ 'url', 'contextIsolation' ]);
|
||||||
const { disableThrottling } = config.getCloudConfigFields([ 'disableThrottling' ]) as any;
|
this.userConfig = config.getUserConfigFields([ 'url' ]);
|
||||||
const { url, contextIsolation }: IGlobalConfig = this.globalConfig;
|
|
||||||
const { customFlags } = this.config;
|
const { customFlags } = this.config;
|
||||||
|
const { disableThrottling } = config.getCloudConfigFields([ 'disableThrottling' ]) as any;
|
||||||
|
|
||||||
this.windows = {};
|
this.windows = {};
|
||||||
this.contextIsolation = contextIsolation || false;
|
this.contextIsolation = this.globalConfig.contextIsolation || false;
|
||||||
this.backgroundThrottling = (customFlags.disableThrottling !== CloudConfigDataTypes.ENABLED || disableThrottling !== CloudConfigDataTypes.ENABLED);
|
this.backgroundThrottling = (customFlags.disableThrottling !== CloudConfigDataTypes.ENABLED || disableThrottling !== CloudConfigDataTypes.ENABLED);
|
||||||
this.isCustomTitleBar = isWindowsOS && this.config.isCustomTitleBar === CloudConfigDataTypes.ENABLED;
|
this.isCustomTitleBar = isWindowsOS && this.config.isCustomTitleBar === CloudConfigDataTypes.ENABLED;
|
||||||
this.windowOpts = {
|
this.windowOpts = {
|
||||||
@ -146,7 +150,7 @@ export class WindowHandler {
|
|||||||
i18n.setLocale(locale);
|
i18n.setLocale(locale);
|
||||||
|
|
||||||
try {
|
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: ''};
|
const defaultOpts = {uploadToServer: false, companyName: 'Symphony', submitURL: ''};
|
||||||
crashReporter.start({...defaultOpts, extra});
|
crashReporter.start({...defaultOpts, extra});
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
@ -160,12 +164,28 @@ export class WindowHandler {
|
|||||||
*/
|
*/
|
||||||
public async createApplication() {
|
public async createApplication() {
|
||||||
|
|
||||||
this.updateVersionInfo();
|
await this.updateVersionInfo();
|
||||||
this.spellchecker = new SpellChecker();
|
this.spellchecker = new SpellChecker();
|
||||||
logger.info(`window-handler: initialized spellchecker module with locale ${this.spellchecker.locale}`);
|
logger.info(`window-handler: initialized spellchecker module with locale ${this.spellchecker.locale}`);
|
||||||
|
|
||||||
logger.info('window-handler: createApplication mainWinPos: ' + JSON.stringify(this.config.mainWinPos));
|
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
|
// set window opts with additional config
|
||||||
this.mainWindow = new BrowserWindow({
|
this.mainWindow = new BrowserWindow({
|
||||||
...this.windowOpts, ...getBounds(this.config.mainWinPos, DEFAULT_WIDTH, DEFAULT_HEIGHT),
|
...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()));
|
logger.info('window-handler: this.mainWindow.getBounds: ' + JSON.stringify(this.mainWindow.getBounds()));
|
||||||
|
|
||||||
this.mainWindow.winName = apiName.mainWindowName;
|
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
|
// Get url to load from cmd line or from global config file
|
||||||
const urlFromCmd = getCommandLineArgs(process.argv, '--url=', false);
|
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: 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.`);
|
logger.info(`window-handler: setting ${commandLineUrl} from the command line as the main window url.`);
|
||||||
this.url = commandLineUrl;
|
this.url = commandLineUrl;
|
||||||
|
this.shouldShowWelcomeScreen = false;
|
||||||
|
isMaximized = true;
|
||||||
|
isFullScreen = false;
|
||||||
|
this.mainWindow.resizable = true;
|
||||||
|
this.mainWindow.maximizable = true;
|
||||||
|
this.mainWindow.fullScreenable = true;
|
||||||
} else {
|
} else {
|
||||||
logger.info(`window-handler: url ${commandLineUrl} from command line is NOT WHITELISTED in the config file.`);
|
logger.info(`window-handler: url ${commandLineUrl} from command line is NOT WHITELISTED in the config file.`);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
logger.info(`window-handler: setting ${commandLineUrl} from the command line as the main window url since pod whitelist is empty.`);
|
logger.info(`window-handler: setting ${commandLineUrl} from the command line as the main window url since pod whitelist is empty.`);
|
||||||
this.url = commandLineUrl;
|
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;
|
this.startUrl = this.url;
|
||||||
|
if (this.shouldShowWelcomeScreen) {
|
||||||
|
this.handleWelcomeScreen();
|
||||||
|
}
|
||||||
// loads the main window with url from config/cmd line
|
// loads the main window with url from config/cmd line
|
||||||
this.mainWindow.loadURL(this.url);
|
this.mainWindow.loadURL(this.url);
|
||||||
// check for build expiry in case of test builds
|
// check for build expiry in case of test builds
|
||||||
this.checkExpiry(this.mainWindow);
|
this.checkExpiry(this.mainWindow);
|
||||||
// need this for postMessage origin
|
// need this for postMessage origin
|
||||||
this.mainWindow.origin = this.globalConfig.url;
|
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 () => {
|
this.mainWindow.webContents.on('did-finish-load', async () => {
|
||||||
logger.info(`window-handler: main window web contents finished loading!`);
|
logger.info(`window-handler: main window web contents finished loading!`);
|
||||||
// early exit if the window has already been destroyed
|
// early exit if the window has already been destroyed
|
||||||
@ -380,6 +412,45 @@ export class WindowHandler {
|
|||||||
return this.mainWindow;
|
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
|
* Gets the main window
|
||||||
*/
|
*/
|
||||||
|
@ -195,6 +195,15 @@
|
|||||||
"Undo": "Undo",
|
"Undo": "Undo",
|
||||||
"Updating Title bar style requires Symphony to relaunch.": "Updating Title bar style requires Symphony to relaunch.",
|
"Updating Title bar style requires Symphony to relaunch.": "Updating Title bar style requires Symphony to relaunch.",
|
||||||
"View": "View",
|
"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",
|
"Window": "Window",
|
||||||
"Would you like to restart and apply these new settings now?": "Would you like to restart and apply these new settings now?",
|
"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",
|
"Your administrator has disabled": "Your administrator has disabled",
|
||||||
|
@ -195,6 +195,15 @@
|
|||||||
"Undo": "Undo",
|
"Undo": "Undo",
|
||||||
"Updating Title bar style requires Symphony to relaunch.": "Updating Title bar style requires Symphony to relaunch.",
|
"Updating Title bar style requires Symphony to relaunch.": "Updating Title bar style requires Symphony to relaunch.",
|
||||||
"View": "View",
|
"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",
|
"Window": "Window",
|
||||||
"Would you like to restart and apply these new settings now?": "Would you like to restart and apply these new settings now?",
|
"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",
|
"Your administrator has disabled": "Your administrator has disabled",
|
||||||
|
@ -196,6 +196,15 @@
|
|||||||
"Undo": "Annuler la dernière opération",
|
"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.",
|
"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",
|
"View": "Visualiser",
|
||||||
|
"Welcome": {
|
||||||
|
"Continue": "Continuer",
|
||||||
|
"Enable Single Sign On": "Activer la SSO",
|
||||||
|
"Please enter a valid url": "Veuillez saisir une URL valide",
|
||||||
|
"Pod URL": "URL du pod",
|
||||||
|
"SSO": "SSO",
|
||||||
|
"Symphony Logo": "Symphony",
|
||||||
|
"WelcomeText": "Bienvenue"
|
||||||
|
},
|
||||||
"Window": "Fenêtre",
|
"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?",
|
"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é",
|
"Your administrator has disabled": "Votre administrateur a désactivé",
|
||||||
|
@ -195,6 +195,15 @@
|
|||||||
"Undo": "Annuler la dernière opération",
|
"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.",
|
"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",
|
"View": "Visualiser",
|
||||||
|
"Welcome": {
|
||||||
|
"Continue": "Continuer",
|
||||||
|
"Enable Single Sign On": "Activer la SSO",
|
||||||
|
"Please enter a valid url": "Veuillez saisir une URL valide",
|
||||||
|
"Pod URL": "URL du pod",
|
||||||
|
"SSO": "SSO",
|
||||||
|
"Symphony Logo": "Symphony",
|
||||||
|
"WelcomeText": "Bienvenue"
|
||||||
|
},
|
||||||
"Window": "Fenêtre",
|
"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?",
|
"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é",
|
"Your administrator has disabled": "Votre administrateur a désactivé",
|
||||||
|
@ -195,6 +195,15 @@
|
|||||||
"Undo": "元に戻す",
|
"Undo": "元に戻す",
|
||||||
"Updating Title bar style requires Symphony to relaunch.": "タイトルバーのスタイルを更新するには、Symphonyが再起動する必要があります。",
|
"Updating Title bar style requires Symphony to relaunch.": "タイトルバーのスタイルを更新するには、Symphonyが再起動する必要があります。",
|
||||||
"View": "ビュー",
|
"View": "ビュー",
|
||||||
|
"Welcome": {
|
||||||
|
"Continue": "持続する",
|
||||||
|
"Enable Single Sign On": "シングルサインオンを有効にする",
|
||||||
|
"Please enter a valid url": "有効なURLを入力してください",
|
||||||
|
"Pod URL": "ポッドURL",
|
||||||
|
"SSO": "SSO",
|
||||||
|
"Symphony Logo": "Symphony",
|
||||||
|
"WelcomeText": "ようこそ"
|
||||||
|
},
|
||||||
"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": "管理者によて無効にされています",
|
||||||
|
@ -195,6 +195,15 @@
|
|||||||
"Undo": "元に戻す",
|
"Undo": "元に戻す",
|
||||||
"Updating Title bar style requires Symphony to relaunch.": "タイトルバーのスタイルを更新するには、Symphonyが再起動する必要があります。",
|
"Updating Title bar style requires Symphony to relaunch.": "タイトルバーのスタイルを更新するには、Symphonyが再起動する必要があります。",
|
||||||
"View": "ビュー",
|
"View": "ビュー",
|
||||||
|
"Welcome": {
|
||||||
|
"Continue": "持続する",
|
||||||
|
"Enable Single Sign On": "シングルサインオンを有効にする",
|
||||||
|
"Please enter a valid url": "有効なURLを入力してください",
|
||||||
|
"Pod URL": "ポッドURL",
|
||||||
|
"SSO": "SSO",
|
||||||
|
"Symphony Logo": "Symphony",
|
||||||
|
"WelcomeText": "ようこそ"
|
||||||
|
},
|
||||||
"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": "管理者によて無効にされています",
|
||||||
|
BIN
src/renderer/assets/symphony-logo-plain.png
Normal file
BIN
src/renderer/assets/symphony-logo-plain.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 76 KiB |
141
src/renderer/components/welcome.tsx
Normal file
141
src/renderer/components/welcome.tsx
Normal file
@ -0,0 +1,141 @@
|
|||||||
|
import { ipcRenderer } from 'electron';
|
||||||
|
import * as React from 'react';
|
||||||
|
import { i18n } from '../../common/i18n-preload';
|
||||||
|
|
||||||
|
interface IState {
|
||||||
|
url: string;
|
||||||
|
message: string;
|
||||||
|
urlValid: boolean;
|
||||||
|
sso: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
const WELCOME_NAMESPACE = 'Welcome';
|
||||||
|
|
||||||
|
export default class Welcome extends React.Component<{}, IState> {
|
||||||
|
|
||||||
|
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 (
|
||||||
|
<div className='Welcome' lang={i18n.getLocale()}>
|
||||||
|
<div className='Welcome-image-container'>
|
||||||
|
<img
|
||||||
|
src='../renderer/assets/symphony-logo-plain.png'
|
||||||
|
alt={i18n.t('Symphony Logo', WELCOME_NAMESPACE)()}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div className='Welcome-main-container'>
|
||||||
|
<h3 className='Welcome-name'>{i18n.t('Pod URL', WELCOME_NAMESPACE)()}</h3>
|
||||||
|
<div className='Welcome-main-container-input-div'>
|
||||||
|
<div className='Welcome-main-container-input-selection'>
|
||||||
|
<input className='Welcome-main-container-podurl-box'
|
||||||
|
type='url' value={url}
|
||||||
|
onChange={this.updatePodUrl.bind(this)}>
|
||||||
|
</input>
|
||||||
|
</div>
|
||||||
|
<div className='Welcome-main-container-sso-box'
|
||||||
|
title={i18n.t('Enable Single Sign On', WELCOME_NAMESPACE)()}>
|
||||||
|
<label>
|
||||||
|
<input type='checkbox' checked={sso} onChange={this.updateSsoCheckbox.bind(this)}/>
|
||||||
|
{i18n.t('SSO', WELCOME_NAMESPACE)()}
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<label className='Welcome-message-label'>{message}</label>
|
||||||
|
<button className={!urlValid ? 'Welcome-continue-button-disabled' : 'Welcome-continue-button'}
|
||||||
|
disabled={!urlValid}
|
||||||
|
onClick={this.eventHandlers.onSetPodUrl}>
|
||||||
|
{i18n.t('Continue', WELCOME_NAMESPACE)()}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -10,6 +10,7 @@ import NotificationSettings from './components/notification-settings';
|
|||||||
import ScreenPicker from './components/screen-picker';
|
import ScreenPicker from './components/screen-picker';
|
||||||
import ScreenSharingFrame from './components/screen-sharing-frame';
|
import ScreenSharingFrame from './components/screen-sharing-frame';
|
||||||
import ScreenSharingIndicator from './components/screen-sharing-indicator';
|
import ScreenSharingIndicator from './components/screen-sharing-indicator';
|
||||||
|
import Welcome from './components/welcome';
|
||||||
|
|
||||||
const enum components {
|
const enum components {
|
||||||
aboutApp = 'about-app',
|
aboutApp = 'about-app',
|
||||||
@ -19,6 +20,7 @@ const enum components {
|
|||||||
basicAuth = 'basic-auth',
|
basicAuth = 'basic-auth',
|
||||||
notification = 'notification-comp',
|
notification = 'notification-comp',
|
||||||
notificationSettings = 'notification-settings',
|
notificationSettings = 'notification-settings',
|
||||||
|
welcome = 'welcome',
|
||||||
}
|
}
|
||||||
|
|
||||||
const loadStyle = (style) => {
|
const loadStyle = (style) => {
|
||||||
@ -72,6 +74,11 @@ const load = () => {
|
|||||||
loadStyle(components.notificationSettings);
|
loadStyle(components.notificationSettings);
|
||||||
component = NotificationSettings;
|
component = NotificationSettings;
|
||||||
break;
|
break;
|
||||||
|
case components.welcome:
|
||||||
|
document.title = i18n.t('WelcomeText', 'Welcome')();
|
||||||
|
loadStyle(components.welcome);
|
||||||
|
component = Welcome;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
const element = React.createElement(component);
|
const element = React.createElement(component);
|
||||||
ReactDOM.render(element, document.getElementById('Root'));
|
ReactDOM.render(element, document.getElementById('Root'));
|
||||||
|
@ -9,6 +9,7 @@ import DownloadManager from './components/download-manager';
|
|||||||
import MessageBanner from './components/message-banner';
|
import MessageBanner from './components/message-banner';
|
||||||
import NetworkError from './components/network-error';
|
import NetworkError from './components/network-error';
|
||||||
import SnackBar from './components/snack-bar';
|
import SnackBar from './components/snack-bar';
|
||||||
|
import Welcome from './components/welcome';
|
||||||
import WindowsTitleBar from './components/windows-title-bar';
|
import WindowsTitleBar from './components/windows-title-bar';
|
||||||
import { SSFApi } from './ssf-api';
|
import { SSFApi } from './ssf-api';
|
||||||
|
|
||||||
@ -148,6 +149,20 @@ ipcRenderer.on('page-load', (_event, { locale, resources, enableCustomTitleBar }
|
|||||||
banner.showBanner(false, 'error');
|
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
|
// When the window fails to load
|
||||||
ipcRenderer.on('page-load-failed', (_event, { locale, resources }) => {
|
ipcRenderer.on('page-load-failed', (_event, { locale, resources }) => {
|
||||||
i18n.setResource(locale, resources);
|
i18n.setResource(locale, resources);
|
||||||
|
186
src/renderer/styles/welcome.less
Normal file
186
src/renderer/styles/welcome.less
Normal file
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user