Merge branch 'feature/shared-redesign-third-party' of github.com:ONLYOFFICE/DocSpace into feature/shared-redesign-third-party
This commit is contained in:
commit
b543e49d52
@ -1,266 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<DOCUMENT Type="Advanced Installer" CreateVersion="18.6" version="18.7" Modules="enterprise" RootPath="." Language="en" Id="{2D2C7C0E-FA78-4158-A222-DA463E882AAC}">
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiPropsComponent">
|
||||
<ROW Property="AI_BITMAP_DISPLAY_MODE" Value="0"/>
|
||||
<ROW Property="AI_CURRENT_YEAR" Value="2022" ValueLocId="-"/>
|
||||
<ROW Property="AI_PREDEF_LCONDS_PROPS" Value="AI_DETECTED_INTERNET_CONNECTION"/>
|
||||
<ROW Property="AI_PRODUCTNAME_ARP" Value="Apache Kafka"/>
|
||||
<ROW Property="AI_UNINSTALLER" Value="msiexec.exe"/>
|
||||
<ROW Property="ALLUSERS" Value="1"/>
|
||||
<ROW Property="ARPNOMODIFY" MultiBuildValue="DefaultBuild:1"/>
|
||||
<ROW Property="ARPNOREPAIR" Value="1"/>
|
||||
<ROW Property="ARPSYSTEMCOMPONENT" Value="1"/>
|
||||
<ROW Property="Manufacturer" Value="Apache"/>
|
||||
<ROW Property="ProductCode" Value="1033:{79F55836-69B9-46CE-B03D-7679D38C0AD4} " Type="16"/>
|
||||
<ROW Property="ProductLanguage" Value="1033"/>
|
||||
<ROW Property="ProductName" Value="Apache Kafka"/>
|
||||
<ROW Property="ProductVersion" Value="1.0.0"/>
|
||||
<ROW Property="SecureCustomProperties" Value="OLDPRODUCTS;AI_NEWERPRODUCTFOUND"/>
|
||||
<ROW Property="ServiceName_Apache_Kafka" Value="Apache Kafka"/>
|
||||
<ROW Property="ServiceName_Apache_ZooKeeper" Value="Apache ZooKeeper"/>
|
||||
<ROW Property="UpgradeCode" Value="{9202447D-B999-4041-B479-B3789A872456}"/>
|
||||
<ROW Property="WindowsType9X" MultiBuildValue="DefaultBuild:Windows 9x/ME" ValueLocId="-"/>
|
||||
<ROW Property="WindowsType9XDisplay" MultiBuildValue="DefaultBuild:Windows 9x/ME" ValueLocId="-"/>
|
||||
<ROW Property="WindowsTypeNT40" MultiBuildValue="DefaultBuild:Windows NT 4.0" ValueLocId="-"/>
|
||||
<ROW Property="WindowsTypeNT40Display" MultiBuildValue="DefaultBuild:Windows NT 4.0" ValueLocId="-"/>
|
||||
<ROW Property="WindowsTypeNT50" MultiBuildValue="DefaultBuild:Windows 2000" ValueLocId="-"/>
|
||||
<ROW Property="WindowsTypeNT50Display" MultiBuildValue="DefaultBuild:Windows 2000" ValueLocId="-"/>
|
||||
<ROW Property="WindowsTypeNT5X" MultiBuildValue="DefaultBuild:Windows XP/2003" ValueLocId="-"/>
|
||||
<ROW Property="WindowsTypeNT5XDisplay" MultiBuildValue="DefaultBuild:Windows XP/2003" ValueLocId="-"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiDirsComponent">
|
||||
<ROW Directory="APPDIR" Directory_Parent="TARGETDIR" DefaultDir="APPDIR:." IsPseudoRoot="1"/>
|
||||
<ROW Directory="TARGETDIR" DefaultDir="SourceDir"/>
|
||||
<ROW Directory="WindowsVolume" Directory_Parent="TARGETDIR" DefaultDir="WINDOW~1|WindowsVolume" IsPseudoRoot="1"/>
|
||||
<ROW Directory="kafka_2.122.8.0_Dir" Directory_Parent="kafkazookeeper_Dir" DefaultDir="kafka"/>
|
||||
<ROW Directory="kafkazookeeper_Dir" Directory_Parent="WindowsVolume" DefaultDir="Apache"/>
|
||||
<ROW Directory="tools_Dir" Directory_Parent="kafka_2.122.8.0_Dir" DefaultDir="tools"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiCompsComponent">
|
||||
<ROW Component="AI_CustomARPName" ComponentId="{0A28214B-8B18-41A6-8221-28805AFC74D8}" Directory_="APPDIR" Attributes="4" KeyPath="DisplayName" Options="1"/>
|
||||
<ROW Component="AI_DisableModify" ComponentId="{9AEFD4E1-809A-4BA7-8210-A26107288AD8}" Directory_="APPDIR" Attributes="4" KeyPath="NoModify" Options="1"/>
|
||||
<ROW Component="APPDIR" ComponentId="{65AA756C-1422-4BF9-9839-FC3C55E40801}" Directory_="APPDIR" Attributes="0"/>
|
||||
<ROW Component="Apache" ComponentId="{AD0BEF35-DD7E-47D2-8E16-10F0066B56D7}" Directory_="kafkazookeeper_Dir" Attributes="0"/>
|
||||
<ROW Component="ProductInformation" ComponentId="{0A3116F5-AD20-4DBA-A42B-68B3CE9DB645}" Directory_="APPDIR" Attributes="4" KeyPath="Version"/>
|
||||
<ROW Component="kafka.exe" ComponentId="{193EC233-51DE-4D1E-9528-A22252F0661E}" Directory_="tools_Dir" Attributes="0" KeyPath="kafka.exe"/>
|
||||
<ROW Component="kafka.xml" ComponentId="{531D2348-5D97-434D-9AC6-2B73961605F4}" Directory_="tools_Dir" Attributes="0" KeyPath="kafka.xml" Type="0"/>
|
||||
<ROW Component="zookeeper.exe" ComponentId="{2E8D451F-F3A5-46E8-B3A5-E4087EABB148}" Directory_="tools_Dir" Attributes="0" KeyPath="zookeeper.exe"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiFeatsComponent">
|
||||
<ROW Feature="MainFeature" Title="MainFeature" Description="Description" Display="1" Level="1" Directory_="APPDIR" Attributes="0"/>
|
||||
<ATTRIBUTE name="CurrentFeature" value="MainFeature"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiFilesComponent">
|
||||
<ROW File="kafka.exe" Component_="kafka.exe" FileName="kafka.exe" Attributes="0" SourcePath="kafka-zookeeper\kafka\tools\kafka.exe" SelfReg="false" DigSign="true"/>
|
||||
<ROW File="kafka.xml" Component_="kafka.xml" FileName="kafka.xml" Attributes="0" SourcePath="kafka-zookeeper\kafka\tools\kafka.xml" SelfReg="false"/>
|
||||
<ROW File="zookeeper.exe" Component_="zookeeper.exe" FileName="ZOOKEE~1.EXE|zookeeper.exe" Attributes="0" SourcePath="kafka-zookeeper\kafka\tools\zookeeper.exe" SelfReg="false" DigSign="true"/>
|
||||
<ROW File="zookeeper.xml" Component_="kafka.xml" FileName="ZOOKEE~1.XML|zookeeper.xml" Attributes="0" SourcePath="kafka-zookeeper\kafka\tools\zookeeper.xml" SelfReg="false"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.BootstrOptComponent">
|
||||
<ROW BootstrOptKey="GlobalOptions" DownloadFolder="[AppDataFolder][|Manufacturer]\[|ProductName]\prerequisites" Options="2"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.BootstrapperUISequenceComponent">
|
||||
<ROW Action="AI_DetectSoftware" Sequence="151"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.BuildComponent">
|
||||
<ROW BuildKey="DefaultBuild" BuildName="DefaultBuild" BuildOrder="1" BuildType="0" PackageFolder="publish" PackageFileName="[|ProductName]" Languages="en" InstallationType="4" UseLargeSchema="true" Unicode="true" UACExecutionLevel="2"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.DictionaryComponent">
|
||||
<ROW Path="<AI_DICTS>ui.ail"/>
|
||||
<ROW Path="<AI_DICTS>ui_en.ail"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.FragmentComponent">
|
||||
<ROW Fragment="CommonUI.aip" Path="<AI_FRAGS>CommonUI.aip"/>
|
||||
<ROW Fragment="FolderDlg.aip" Path="<AI_THEMES>classic\fragments\FolderDlg.aip"/>
|
||||
<ROW Fragment="MaintenanceTypeDlg.aip" Path="<AI_THEMES>classic\fragments\MaintenanceTypeDlg.aip"/>
|
||||
<ROW Fragment="MaintenanceWelcomeDlg.aip" Path="<AI_THEMES>classic\fragments\MaintenanceWelcomeDlg.aip"/>
|
||||
<ROW Fragment="SequenceDialogs.aip" Path="<AI_THEMES>classic\fragments\SequenceDialogs.aip"/>
|
||||
<ROW Fragment="Sequences.aip" Path="<AI_FRAGS>Sequences.aip"/>
|
||||
<ROW Fragment="StaticUIStrings.aip" Path="<AI_FRAGS>StaticUIStrings.aip"/>
|
||||
<ROW Fragment="UI.aip" Path="<AI_THEMES>classic\fragments\UI.aip"/>
|
||||
<ROW Fragment="Validation.aip" Path="<AI_FRAGS>Validation.aip"/>
|
||||
<ROW Fragment="VerifyRemoveDlg.aip" Path="<AI_THEMES>classic\fragments\VerifyRemoveDlg.aip"/>
|
||||
<ROW Fragment="VerifyRepairDlg.aip" Path="<AI_THEMES>classic\fragments\VerifyRepairDlg.aip"/>
|
||||
<ROW Fragment="WelcomeDlg.aip" Path="<AI_THEMES>classic\fragments\WelcomeDlg.aip"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiActionTextComponent">
|
||||
<ROW Action="AI_ConfigFailActions" Description="Configure service failure actions" DescriptionLocId="ActionText.Description.AI_ConfigFailActions" Template="Service: [1]" TemplateLocId="ActionText.Template.AI_ConfigFailActions"/>
|
||||
<ROW Action="AI_ProcessFailActions" Description="Generating actions to configure service failure actions" DescriptionLocId="ActionText.Description.AI_ProcessFailActions" Template="Service: [1]" TemplateLocId="ActionText.Template.AI_ProcessFailActions"/>
|
||||
<ROW Action="AI_TxtUpdaterCommit" Description="Commit text file changes." DescriptionLocId="ActionText.Description.AI_TxtUpdaterCommit" Template="Commit text file changes." TemplateLocId="ActionText.Template.AI_TxtUpdaterCommit"/>
|
||||
<ROW Action="AI_TxtUpdaterConfig" Description="Executing text file updates" DescriptionLocId="ActionText.Description.AI_TxtUpdaterConfig" Template="Updating text file: "[1]"" TemplateLocId="ActionText.Template.AI_TxtUpdaterConfig"/>
|
||||
<ROW Action="AI_TxtUpdaterInstall" Description="Generating actions to configure text files updates" DescriptionLocId="ActionText.Description.AI_TxtUpdaterInstall"/>
|
||||
<ROW Action="AI_TxtUpdaterRollback" Description="Rolling back text file changes." DescriptionLocId="ActionText.Description.AI_TxtUpdaterRollback" Template="Rolling back text file changes." TemplateLocId="ActionText.Template.AI_TxtUpdaterRollback"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiBinaryComponent">
|
||||
<ROW Name="PowerShellScriptLauncher.dll" SourcePath="<AI_CUSTACTS>PowerShellScriptLauncher.dll"/>
|
||||
<ROW Name="SoftwareDetector.dll" SourcePath="<AI_CUSTACTS>SoftwareDetector.dll"/>
|
||||
<ROW Name="TxtUpdater.dll" SourcePath="<AI_CUSTACTS>TxtUpdater.dll"/>
|
||||
<ROW Name="aicustact.dll" SourcePath="<AI_CUSTACTS>aicustact.dll"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiControlEventComponent">
|
||||
<ROW Dialog_="WelcomeDlg" Control_="Next" Event="NewDialog" Argument="FolderDlg" Condition="AI_INSTALL" Ordering="1"/>
|
||||
<ROW Dialog_="FolderDlg" Control_="Next" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_INSTALL" Ordering="201"/>
|
||||
<ROW Dialog_="FolderDlg" Control_="Back" Event="NewDialog" Argument="WelcomeDlg" Condition="AI_INSTALL" Ordering="1"/>
|
||||
<ROW Dialog_="VerifyReadyDlg" Control_="Install" Event="EndDialog" Argument="Return" Condition="AI_INSTALL" Ordering="197"/>
|
||||
<ROW Dialog_="VerifyReadyDlg" Control_="Back" Event="NewDialog" Argument="FolderDlg" Condition="AI_INSTALL" Ordering="201"/>
|
||||
<ROW Dialog_="MaintenanceWelcomeDlg" Control_="Next" Event="NewDialog" Argument="MaintenanceTypeDlg" Condition="AI_MAINT" Ordering="99"/>
|
||||
<ROW Dialog_="CustomizeDlg" Control_="Next" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_MAINT" Ordering="101"/>
|
||||
<ROW Dialog_="CustomizeDlg" Control_="Back" Event="NewDialog" Argument="MaintenanceTypeDlg" Condition="AI_MAINT" Ordering="1"/>
|
||||
<ROW Dialog_="VerifyReadyDlg" Control_="Install" Event="EndDialog" Argument="Return" Condition="AI_MAINT" Ordering="198"/>
|
||||
<ROW Dialog_="VerifyReadyDlg" Control_="Back" Event="NewDialog" Argument="CustomizeDlg" Condition="AI_MAINT" Ordering="202"/>
|
||||
<ROW Dialog_="MaintenanceTypeDlg" Control_="ChangeButton" Event="NewDialog" Argument="CustomizeDlg" Condition="AI_MAINT" Ordering="501"/>
|
||||
<ROW Dialog_="MaintenanceTypeDlg" Control_="Back" Event="NewDialog" Argument="MaintenanceWelcomeDlg" Condition="AI_MAINT" Ordering="1"/>
|
||||
<ROW Dialog_="MaintenanceTypeDlg" Control_="RemoveButton" Event="NewDialog" Argument="VerifyRemoveDlg" Condition="AI_MAINT AND InstallMode="Remove"" Ordering="601"/>
|
||||
<ROW Dialog_="VerifyRemoveDlg" Control_="Back" Event="NewDialog" Argument="MaintenanceTypeDlg" Condition="AI_MAINT AND InstallMode="Remove"" Ordering="1"/>
|
||||
<ROW Dialog_="MaintenanceTypeDlg" Control_="RepairButton" Event="NewDialog" Argument="VerifyRepairDlg" Condition="AI_MAINT AND InstallMode="Repair"" Ordering="601"/>
|
||||
<ROW Dialog_="VerifyRepairDlg" Control_="Back" Event="NewDialog" Argument="MaintenanceTypeDlg" Condition="AI_MAINT AND InstallMode="Repair"" Ordering="1"/>
|
||||
<ROW Dialog_="VerifyRepairDlg" Control_="Repair" Event="EndDialog" Argument="Return" Condition="AI_MAINT AND InstallMode="Repair"" Ordering="399" Options="1"/>
|
||||
<ROW Dialog_="VerifyRemoveDlg" Control_="Remove" Event="EndDialog" Argument="Return" Condition="AI_MAINT AND InstallMode="Remove"" Ordering="299" Options="1"/>
|
||||
<ROW Dialog_="PatchWelcomeDlg" Control_="Next" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_PATCH" Ordering="201"/>
|
||||
<ROW Dialog_="ResumeDlg" Control_="Install" Event="EndDialog" Argument="Return" Condition="AI_RESUME" Ordering="299"/>
|
||||
<ROW Dialog_="VerifyReadyDlg" Control_="Install" Event="EndDialog" Argument="Return" Condition="AI_PATCH" Ordering="199"/>
|
||||
<ROW Dialog_="VerifyReadyDlg" Control_="Back" Event="NewDialog" Argument="PatchWelcomeDlg" Condition="AI_PATCH" Ordering="203"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiCreateFolderComponent">
|
||||
<ROW Directory_="APPDIR" Component_="APPDIR" ManualDelete="true"/>
|
||||
<ROW Directory_="kafkazookeeper_Dir" Component_="Apache" ManualDelete="false"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiCustActComponent">
|
||||
<ROW Action="AI_BACKUP_AI_SETUPEXEPATH" Type="51" Source="AI_SETUPEXEPATH_ORIGINAL" Target="[AI_SETUPEXEPATH]"/>
|
||||
<ROW Action="AI_ConfigFailActions" Type="11265" Source="aicustact.dll" Target="ConfigureServFailActions" WithoutSeq="true"/>
|
||||
<ROW Action="AI_DATA_SETTER" Type="51" Source="CustomActionData" Target="AEQAaQBnAGkAdABhAGwAbAB5AFMAaQBnAG4AUwBjAHIAaQBwAHQAAgABAEYAbABhAGcAcwACADYAAQBQAGEAcgBhAG0AcwACAAEAUwBjAHIAaQBwAHQAAgAjAFIAZQBxAHUAaQByAGUAcwAgAC0AdgBlAHIAcwBpAG8AbgAgADMADQAKAFAAYQByAGEAbQAoACkADQAKAA0ACgAkAEEAUABQAEQASQBSACAAPQAgAEEASQBfAEcAZQB0AE0AcwBpAFAAcgBvAHAAZQByAHQAeQAgAEEAUABQAEQASQBSAA0ACgAkAE0AQQBJAE4ARABJAFIAIAA9ACAAJABBAFAAUABEAEkAUgAuAFQAbwBTAHQAcgBpAG4AZwAoACkAIAArACAAIgAuAC4AIgANAAoAUgBlAG0AbwB2AGUALQBJAHQAZQBtACAAJABNAEEASQBOAEQASQBSACAALQBSAGUAYwB1AHIAcwBl"/>
|
||||
<ROW Action="AI_DATA_SETTER_1" Type="51" Source="CustomActionData" Target="[~]"/>
|
||||
<ROW Action="AI_DOWNGRADE" Type="19" Target="4010"/>
|
||||
<ROW Action="AI_DetectSoftware" Type="257" Source="SoftwareDetector.dll" Target="OnDetectSoftware"/>
|
||||
<ROW Action="AI_DpiContentScale" Type="1" Source="aicustact.dll" Target="DpiContentScale"/>
|
||||
<ROW Action="AI_EnableDebugLog" Type="321" Source="aicustact.dll" Target="EnableDebugLog"/>
|
||||
<ROW Action="AI_GetArpIconPath" Type="1" Source="aicustact.dll" Target="GetArpIconPath"/>
|
||||
<ROW Action="AI_InstallModeCheck" Type="1" Source="aicustact.dll" Target="UpdateInstallMode" WithoutSeq="true"/>
|
||||
<ROW Action="AI_PREPARE_UPGRADE" Type="65" Source="aicustact.dll" Target="PrepareUpgrade"/>
|
||||
<ROW Action="AI_ProcessFailActions" Type="1" Source="aicustact.dll" Target="ProcessFailActions" AdditionalSeq="AI_DATA_SETTER_1"/>
|
||||
<ROW Action="AI_RESTORE_AI_SETUPEXEPATH" Type="51" Source="AI_SETUPEXEPATH" Target="[AI_SETUPEXEPATH_ORIGINAL]"/>
|
||||
<ROW Action="AI_RESTORE_LOCATION" Type="65" Source="aicustact.dll" Target="RestoreLocation"/>
|
||||
<ROW Action="AI_ResolveKnownFolders" Type="1" Source="aicustact.dll" Target="AI_ResolveKnownFolders"/>
|
||||
<ROW Action="AI_RestartElevated" Type="1" Source="aicustact.dll" Target="RestartElevated"/>
|
||||
<ROW Action="AI_SHOW_LOG" Type="65" Source="aicustact.dll" Target="LaunchLogFile" WithoutSeq="true"/>
|
||||
<ROW Action="AI_STORE_LOCATION" Type="51" Source="ARPINSTALLLOCATION" Target="[APPDIR]"/>
|
||||
<ROW Action="AI_TxtUpdaterCommit" Type="11777" Source="TxtUpdater.dll" Target="OnTxtUpdaterCommit" WithoutSeq="true"/>
|
||||
<ROW Action="AI_TxtUpdaterConfig" Type="11265" Source="TxtUpdater.dll" Target="OnTxtUpdaterConfig" WithoutSeq="true"/>
|
||||
<ROW Action="AI_TxtUpdaterInstall" Type="1" Source="TxtUpdater.dll" Target="OnTxtUpdaterInstall"/>
|
||||
<ROW Action="AI_TxtUpdaterRollback" Type="11521" Source="TxtUpdater.dll" Target="OnTxtUpdaterRollback" WithoutSeq="true"/>
|
||||
<ROW Action="RemoveManufactorDir" Type="65" Source="PowerShellScriptLauncher.dll" Target="RunPowerShellScript" Options="1" AdditionalSeq="AI_DATA_SETTER"/>
|
||||
<ROW Action="SET_APPDIR" Type="307" Source="APPDIR" Target="[ProgramFilesFolder][Manufacturer]\[ProductName]"/>
|
||||
<ROW Action="SET_SHORTCUTDIR" Type="307" Source="SHORTCUTDIR" Target="[ProgramMenuFolder][ProductName]"/>
|
||||
<ROW Action="SET_TARGETDIR_TO_APPDIR" Type="51" Source="TARGETDIR" Target="[APPDIR]"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiEnvComponent">
|
||||
<ROW Environment="JAVA_HOME" Name="=-*JAVA_HOME" Value="[PATH_TO_JAVA]" Component_="Apache"/>
|
||||
<ROW Environment="Path" Name="=*Path" Value="[~];%JAVA_HOME%\bin" Component_="Apache"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiFeatCompsComponent">
|
||||
<ROW Feature_="MainFeature" Component_="APPDIR"/>
|
||||
<ROW Feature_="MainFeature" Component_="ProductInformation"/>
|
||||
<ROW Feature_="MainFeature" Component_="Apache"/>
|
||||
<ROW Feature_="MainFeature" Component_="kafka.exe"/>
|
||||
<ROW Feature_="MainFeature" Component_="kafka.xml"/>
|
||||
<ROW Feature_="MainFeature" Component_="zookeeper.exe"/>
|
||||
<ROW Feature_="MainFeature" Component_="AI_CustomARPName"/>
|
||||
<ROW Feature_="MainFeature" Component_="AI_DisableModify"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiInstExSeqComponent">
|
||||
<ROW Action="AI_DOWNGRADE" Condition="AI_NEWERPRODUCTFOUND AND (UILevel <> 5)" Sequence="210"/>
|
||||
<ROW Action="AI_RESTORE_LOCATION" Condition="APPDIR=""" Sequence="749"/>
|
||||
<ROW Action="AI_STORE_LOCATION" Condition="(Not Installed) OR REINSTALL" Sequence="1501"/>
|
||||
<ROW Action="AI_PREPARE_UPGRADE" Condition="AI_UPGRADE="No" AND (Not Installed)" Sequence="1397"/>
|
||||
<ROW Action="AI_ResolveKnownFolders" Sequence="52"/>
|
||||
<ROW Action="AI_EnableDebugLog" Sequence="51"/>
|
||||
<ROW Action="RemoveManufactorDir" Condition="( NOT Installed )" Sequence="6602"/>
|
||||
<ROW Action="AI_DATA_SETTER" Condition="( NOT Installed )" Sequence="6601"/>
|
||||
<ROW Action="AI_ProcessFailActions" Sequence="5848"/>
|
||||
<ROW Action="AI_DATA_SETTER_1" Sequence="5847"/>
|
||||
<ROW Action="AI_TxtUpdaterInstall" Sequence="5101"/>
|
||||
<ROW Action="AI_DetectSoftware" Sequence="101"/>
|
||||
<ROW Action="AI_GetArpIconPath" Sequence="1401"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiInstallUISequenceComponent">
|
||||
<ROW Action="AI_RESTORE_LOCATION" Condition="APPDIR=""" Sequence="749"/>
|
||||
<ROW Action="AI_ResolveKnownFolders" Sequence="54"/>
|
||||
<ROW Action="AI_DpiContentScale" Sequence="53"/>
|
||||
<ROW Action="AI_EnableDebugLog" Sequence="52"/>
|
||||
<ROW Action="AI_BACKUP_AI_SETUPEXEPATH" Sequence="99"/>
|
||||
<ROW Action="AI_RESTORE_AI_SETUPEXEPATH" Condition="AI_SETUPEXEPATH_ORIGINAL" Sequence="102"/>
|
||||
<ROW Action="AI_DetectSoftware" Sequence="101"/>
|
||||
<ROW Action="AI_RestartElevated" Sequence="51" Builds="DefaultBuild"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiLaunchConditionsComponent">
|
||||
<ROW Condition="((VersionNT <> 501) AND (VersionNT <> 502))" Description="[ProductName] cannot be installed on [WindowsTypeNT5XDisplay]." DescriptionLocId="AI.LaunchCondition.NoNT5X" IsPredefined="true" Builds="DefaultBuild"/>
|
||||
<ROW Condition="(VersionNT <> 400)" Description="[ProductName] cannot be installed on [WindowsTypeNT40Display]." DescriptionLocId="AI.LaunchCondition.NoNT40" IsPredefined="true" Builds="DefaultBuild"/>
|
||||
<ROW Condition="(VersionNT <> 500)" Description="[ProductName] cannot be installed on [WindowsTypeNT50Display]." DescriptionLocId="AI.LaunchCondition.NoNT50" IsPredefined="true" Builds="DefaultBuild"/>
|
||||
<ROW Condition="AI_DETECTED_INTERNET_CONNECTION" Description="[ProductName] requires an active Internet connection for installation. Please check your network configuration and proxy settings." DescriptionLocId="AI.LaunchCondition.Internet" IsPredefined="true" Builds="DefaultBuild"/>
|
||||
<ROW Condition="VersionNT" Description="[ProductName] cannot be installed on [WindowsType9XDisplay]." DescriptionLocId="AI.LaunchCondition.No9X" IsPredefined="true" Builds="DefaultBuild"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiRegsComponent">
|
||||
<ROW Registry="Comments" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="Comments" Value="[ARPCOMMENTS]" Component_="AI_CustomARPName"/>
|
||||
<ROW Registry="Contact" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="Contact" Value="[ARPCONTACT]" Component_="AI_CustomARPName"/>
|
||||
<ROW Registry="CurrentVersion" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion" Name="\"/>
|
||||
<ROW Registry="DisplayIcon" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="DisplayIcon" Value="[ARP_ICON_PATH]" Component_="AI_CustomARPName"/>
|
||||
<ROW Registry="DisplayName" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="DisplayName" Value="[AI_PRODUCTNAME_ARP]" Component_="AI_CustomARPName"/>
|
||||
<ROW Registry="DisplayVersion" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="DisplayVersion" Value="[ProductVersion]" Component_="AI_CustomARPName"/>
|
||||
<ROW Registry="EstimatedSize" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="EstimatedSize" Value="#[AI_ARP_SIZE]" Component_="AI_CustomARPName" VirtualValue="#"/>
|
||||
<ROW Registry="HelpLink" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="HelpLink" Value="[ARPHELPLINK]" Component_="AI_CustomARPName"/>
|
||||
<ROW Registry="HelpTelephone" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="HelpTelephone" Value="[ARPHELPTELEPHONE]" Component_="AI_CustomARPName"/>
|
||||
<ROW Registry="InstallLocation" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="InstallLocation" Value="[APPDIR]" Component_="AI_CustomARPName"/>
|
||||
<ROW Registry="Manufacturer" Root="-1" Key="Software\[Manufacturer]" Name="\"/>
|
||||
<ROW Registry="Microsoft" Root="-1" Key="Software\Microsoft" Name="\"/>
|
||||
<ROW Registry="ModifyPath" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="ModifyPath" Value="[AI_UNINSTALLER] /i [ProductCode] AI_UNINSTALLER_CTP=1" Component_="AI_CustomARPName"/>
|
||||
<ROW Registry="NoModify" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="NoModify" Value="#1" Component_="AI_DisableModify" VirtualValue="#"/>
|
||||
<ROW Registry="NoRepair" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="NoRepair" Value="#1" Component_="AI_CustomARPName" VirtualValue="#"/>
|
||||
<ROW Registry="Path" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="Path" Value="[APPDIR]" Component_="ProductInformation"/>
|
||||
<ROW Registry="ProductName" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="\"/>
|
||||
<ROW Registry="ProductNameProductVersion" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="\"/>
|
||||
<ROW Registry="Publisher" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="Publisher" Value="[Manufacturer]" Component_="AI_CustomARPName"/>
|
||||
<ROW Registry="Readme" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="Readme" Value="[ARPREADME]" Component_="AI_CustomARPName"/>
|
||||
<ROW Registry="Software" Root="-1" Key="Software" Name="\"/>
|
||||
<ROW Registry="URLInfoAbout" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="URLInfoAbout" Value="[ARPURLINFOABOUT]" Component_="AI_CustomARPName"/>
|
||||
<ROW Registry="URLUpdateInfo" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="URLUpdateInfo" Value="[ARPURLUPDATEINFO]" Component_="AI_CustomARPName"/>
|
||||
<ROW Registry="Uninstall" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall" Name="\"/>
|
||||
<ROW Registry="UninstallPath" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="UninstallPath" Value="[AI_UNINSTALLER] /x [ProductCode] AI_UNINSTALLER_CTP=1" Component_="AI_CustomARPName"/>
|
||||
<ROW Registry="UninstallString" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="UninstallString" Value="[AI_UNINSTALLER] /x [ProductCode] AI_UNINSTALLER_CTP=1" Component_="AI_CustomARPName"/>
|
||||
<ROW Registry="Version" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="Version" Value="[ProductVersion]" Component_="ProductInformation"/>
|
||||
<ROW Registry="VersionMajor" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="VersionMajor" Value="#1" Component_="AI_CustomARPName" VirtualValue="#"/>
|
||||
<ROW Registry="VersionMinor" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="VersionMinor" Value="#0" Component_="AI_CustomARPName" VirtualValue="#"/>
|
||||
<ROW Registry="Windows" Root="-1" Key="Software\Microsoft\Windows" Name="\"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiServConfigComponent">
|
||||
<ROW MsiServiceConfig="Apache_Kafka" Name="[ServiceName_Apache_Kafka]" Event="1" ConfigType="3" Argument="1" Component_="kafka.exe"/>
|
||||
<ROW MsiServiceConfig="Apache_ZooKeeper" Name="[ServiceName_Apache_ZooKeeper]" Event="1" ConfigType="3" Argument="1" Component_="zookeeper.exe"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiServConfigFailureActionsComponent">
|
||||
<ROW MsiServiceConfigFailureActions="Apache_Kafka" Name="[ServiceName_Apache_Kafka]" Event="1" ResetPeriod="0" Actions="1[~]1[~]1" DelayActions="1[~]1[~]1" Component_="kafka.exe"/>
|
||||
<ROW MsiServiceConfigFailureActions="Apache_ZooKeeper" Name="[ServiceName_Apache_ZooKeeper]" Event="1" ResetPeriod="0" Actions="1[~]1[~]1" DelayActions="1[~]1[~]1" Component_="zookeeper.exe"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiServCtrlComponent">
|
||||
<ROW ServiceControl="Apache_Kafka" Name="[ServiceName_Apache_Kafka]" Event="161" Wait="1" Component_="kafka.exe"/>
|
||||
<ROW ServiceControl="Apache_ZooKeeper" Name="[ServiceName_Apache_ZooKeeper]" Event="161" Wait="1" Component_="zookeeper.exe"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiServInstComponent">
|
||||
<ROW ServiceInstall="Apache_Kafka" Name="[ServiceName_Apache_Kafka]" DisplayName="[ServiceName_Apache_Kafka]" ServiceType="16" StartType="2" ErrorControl="1" Component_="kafka.exe"/>
|
||||
<ROW ServiceInstall="Apache_ZooKeeper" Name="[ServiceName_Apache_ZooKeeper]" DisplayName="[ServiceName_Apache_ZooKeeper]" ServiceType="16" StartType="2" ErrorControl="1" Component_="zookeeper.exe"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiThemeComponent">
|
||||
<ATTRIBUTE name="UsedTheme" value="classic"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiUpgradeComponent">
|
||||
<ROW UpgradeCode="[|UpgradeCode]" VersionMin="0.0.1" VersionMax="[|ProductVersion]" Attributes="257" ActionProperty="OLDPRODUCTS"/>
|
||||
<ROW UpgradeCode="[|UpgradeCode]" VersionMin="[|ProductVersion]" Attributes="2" ActionProperty="AI_NEWERPRODUCTFOUND"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.SynchronizedFolderComponent">
|
||||
<ROW Directory_="kafka_2.122.8.0_Dir" SourcePath="kafka-zookeeper\kafka" Feature="MainFeature" ExcludePattern="*~|#*#|%*%|._|CVS|.cvsignore|SCCS|vssver.scc|mssccprj.scc|vssver2.scc|.svn|.DS_Store" ExcludeFlags="6" FileAddOptions="4"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.TxtUpdateComponent">
|
||||
<ROW Name="ReplaceWinVol" TxtUpdateSet="xml" FindPattern="{WindowsVolume}" ReplacePattern="[WindowsVolume]" Options="2" Order="0" FileEncoding="-1"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.TxtUpdateSetComponent">
|
||||
<ROW Key="xml" Component="zookeeper.exe" FileName="*.xml" Directory="tools_Dir" Options="17"/>
|
||||
</COMPONENT>
|
||||
</DOCUMENT>
|
@ -1,197 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<DOCUMENT Type="Advanced Installer" CreateVersion="18.6.1" version="18.7" Modules="enterprise" RootPath="." Language="en" Id="{93F1E21E-F074-444A-9756-659088E0DA02}">
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiPropsComponent">
|
||||
<ROW Property="AI_BITMAP_DISPLAY_MODE" Value="0"/>
|
||||
<ROW Property="AI_CURRENT_YEAR" Value="2022" ValueLocId="-"/>
|
||||
<ROW Property="AI_PRODUCTNAME_ARP" Value="Apache ZooKeeper"/>
|
||||
<ROW Property="AI_UNINSTALLER" Value="msiexec.exe"/>
|
||||
<ROW Property="ALLUSERS" Value="1"/>
|
||||
<ROW Property="ARPNOMODIFY" MultiBuildValue="DefaultBuild:1"/>
|
||||
<ROW Property="ARPNOREPAIR" Value="1"/>
|
||||
<ROW Property="ARPSYSTEMCOMPONENT" Value="1"/>
|
||||
<ROW Property="Manufacturer" Value="Apache"/>
|
||||
<ROW Property="ProductCode" Value="1033:{DA471CF9-78DC-4D13-AB18-87B4604538FA} " Type="16"/>
|
||||
<ROW Property="ProductLanguage" Value="1033"/>
|
||||
<ROW Property="ProductName" Value="Apache ZooKeeper"/>
|
||||
<ROW Property="ProductVersion" Value="1.0.0" Type="32"/>
|
||||
<ROW Property="SecureCustomProperties" Value="OLDPRODUCTS;AI_NEWERPRODUCTFOUND"/>
|
||||
<ROW Property="UpgradeCode" Value="{5CB34BEC-536C-45BA-8C86-77E055EF4325}"/>
|
||||
<ROW Property="WindowsType9X" MultiBuildValue="DefaultBuild:Windows 9x/ME" ValueLocId="-"/>
|
||||
<ROW Property="WindowsType9XDisplay" MultiBuildValue="DefaultBuild:Windows 9x/ME" ValueLocId="-"/>
|
||||
<ROW Property="WindowsTypeNT40" MultiBuildValue="DefaultBuild:Windows NT 4.0" ValueLocId="-"/>
|
||||
<ROW Property="WindowsTypeNT40Display" MultiBuildValue="DefaultBuild:Windows NT 4.0" ValueLocId="-"/>
|
||||
<ROW Property="WindowsTypeNT50" MultiBuildValue="DefaultBuild:Windows 2000" ValueLocId="-"/>
|
||||
<ROW Property="WindowsTypeNT50Display" MultiBuildValue="DefaultBuild:Windows 2000" ValueLocId="-"/>
|
||||
<ROW Property="WindowsTypeNT5X" MultiBuildValue="DefaultBuild:Windows XP/2003" ValueLocId="-"/>
|
||||
<ROW Property="WindowsTypeNT5XDisplay" MultiBuildValue="DefaultBuild:Windows XP/2003" ValueLocId="-"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiDirsComponent">
|
||||
<ROW Directory="APPDIR" Directory_Parent="TARGETDIR" DefaultDir="APPDIR:." IsPseudoRoot="1"/>
|
||||
<ROW Directory="TARGETDIR" DefaultDir="SourceDir"/>
|
||||
<ROW Directory="WindowsVolume" Directory_Parent="TARGETDIR" DefaultDir="WINDOW~1|WindowsVolume" IsPseudoRoot="1"/>
|
||||
<ROW Directory="apachezookeeper3.7.0bin_Dir" Directory_Parent="kafkazookeeper_Dir" DefaultDir="ZOOKEE~1|zookeeper"/>
|
||||
<ROW Directory="kafkazookeeper_Dir" Directory_Parent="WindowsVolume" DefaultDir="Apache"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiCompsComponent">
|
||||
<ROW Component="AI_CustomARPName" ComponentId="{DA50695D-FCFD-46A6-90BD-50D219311605}" Directory_="APPDIR" Attributes="4" KeyPath="DisplayName" Options="1"/>
|
||||
<ROW Component="AI_DisableModify" ComponentId="{01A44BB2-4D9C-4BE1-A645-EDB8A011DC61}" Directory_="APPDIR" Attributes="4" KeyPath="NoModify" Options="1"/>
|
||||
<ROW Component="APPDIR" ComponentId="{7C252C97-43D5-4EE8-884E-1BF7D1A2D490}" Directory_="APPDIR" Attributes="0"/>
|
||||
<ROW Component="ProductInformation" ComponentId="{0903BE7F-28BE-4981-B82B-2D9A86C43A63}" Directory_="APPDIR" Attributes="4" KeyPath="Version"/>
|
||||
<ROW Component="zookeeper" ComponentId="{F2EFFE90-2C47-4BAF-9541-143E8ADF5B4B}" Directory_="apachezookeeper3.7.0bin_Dir" Attributes="0"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiFeatsComponent">
|
||||
<ROW Feature="MainFeature" Title="MainFeature" Description="Description" Display="1" Level="1" Directory_="APPDIR" Attributes="0"/>
|
||||
<ATTRIBUTE name="CurrentFeature" value="MainFeature"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.BootstrOptComponent">
|
||||
<ROW BootstrOptKey="GlobalOptions" DownloadFolder="[AppDataFolder][|Manufacturer]\[|ProductName]\prerequisites" Options="2"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.BuildComponent">
|
||||
<ROW BuildKey="DefaultBuild" BuildName="DefaultBuild" BuildOrder="1" BuildType="0" PackageFolder="publish" PackageFileName="[|ProductName]" Languages="en" InstallationType="4" UseLargeSchema="true" Unicode="true" UACExecutionLevel="2"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.DictionaryComponent">
|
||||
<ROW Path="<AI_DICTS>ui.ail"/>
|
||||
<ROW Path="<AI_DICTS>ui_en.ail"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.FragmentComponent">
|
||||
<ROW Fragment="CommonUI.aip" Path="<AI_FRAGS>CommonUI.aip"/>
|
||||
<ROW Fragment="FolderDlg.aip" Path="<AI_THEMES>classic\fragments\FolderDlg.aip"/>
|
||||
<ROW Fragment="MaintenanceTypeDlg.aip" Path="<AI_THEMES>classic\fragments\MaintenanceTypeDlg.aip"/>
|
||||
<ROW Fragment="MaintenanceWelcomeDlg.aip" Path="<AI_THEMES>classic\fragments\MaintenanceWelcomeDlg.aip"/>
|
||||
<ROW Fragment="SequenceDialogs.aip" Path="<AI_THEMES>classic\fragments\SequenceDialogs.aip"/>
|
||||
<ROW Fragment="Sequences.aip" Path="<AI_FRAGS>Sequences.aip"/>
|
||||
<ROW Fragment="StaticUIStrings.aip" Path="<AI_FRAGS>StaticUIStrings.aip"/>
|
||||
<ROW Fragment="UI.aip" Path="<AI_THEMES>classic\fragments\UI.aip"/>
|
||||
<ROW Fragment="Validation.aip" Path="<AI_FRAGS>Validation.aip"/>
|
||||
<ROW Fragment="VerifyRemoveDlg.aip" Path="<AI_THEMES>classic\fragments\VerifyRemoveDlg.aip"/>
|
||||
<ROW Fragment="VerifyRepairDlg.aip" Path="<AI_THEMES>classic\fragments\VerifyRepairDlg.aip"/>
|
||||
<ROW Fragment="WelcomeDlg.aip" Path="<AI_THEMES>classic\fragments\WelcomeDlg.aip"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiBinaryComponent">
|
||||
<ROW Name="PowerShellScriptLauncher.dll" SourcePath="<AI_CUSTACTS>PowerShellScriptLauncher.dll"/>
|
||||
<ROW Name="aicustact.dll" SourcePath="<AI_CUSTACTS>aicustact.dll"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiControlEventComponent">
|
||||
<ROW Dialog_="WelcomeDlg" Control_="Next" Event="NewDialog" Argument="FolderDlg" Condition="AI_INSTALL" Ordering="1"/>
|
||||
<ROW Dialog_="FolderDlg" Control_="Next" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_INSTALL" Ordering="201"/>
|
||||
<ROW Dialog_="FolderDlg" Control_="Back" Event="NewDialog" Argument="WelcomeDlg" Condition="AI_INSTALL" Ordering="1"/>
|
||||
<ROW Dialog_="VerifyReadyDlg" Control_="Install" Event="EndDialog" Argument="Return" Condition="AI_INSTALL" Ordering="197"/>
|
||||
<ROW Dialog_="VerifyReadyDlg" Control_="Back" Event="NewDialog" Argument="FolderDlg" Condition="AI_INSTALL" Ordering="201"/>
|
||||
<ROW Dialog_="MaintenanceWelcomeDlg" Control_="Next" Event="NewDialog" Argument="MaintenanceTypeDlg" Condition="AI_MAINT" Ordering="99"/>
|
||||
<ROW Dialog_="CustomizeDlg" Control_="Next" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_MAINT" Ordering="101"/>
|
||||
<ROW Dialog_="CustomizeDlg" Control_="Back" Event="NewDialog" Argument="MaintenanceTypeDlg" Condition="AI_MAINT" Ordering="1"/>
|
||||
<ROW Dialog_="VerifyReadyDlg" Control_="Install" Event="EndDialog" Argument="Return" Condition="AI_MAINT" Ordering="198"/>
|
||||
<ROW Dialog_="VerifyReadyDlg" Control_="Back" Event="NewDialog" Argument="CustomizeDlg" Condition="AI_MAINT" Ordering="202"/>
|
||||
<ROW Dialog_="MaintenanceTypeDlg" Control_="ChangeButton" Event="NewDialog" Argument="CustomizeDlg" Condition="AI_MAINT" Ordering="501"/>
|
||||
<ROW Dialog_="MaintenanceTypeDlg" Control_="Back" Event="NewDialog" Argument="MaintenanceWelcomeDlg" Condition="AI_MAINT" Ordering="1"/>
|
||||
<ROW Dialog_="MaintenanceTypeDlg" Control_="RemoveButton" Event="NewDialog" Argument="VerifyRemoveDlg" Condition="AI_MAINT AND InstallMode="Remove"" Ordering="601"/>
|
||||
<ROW Dialog_="VerifyRemoveDlg" Control_="Back" Event="NewDialog" Argument="MaintenanceTypeDlg" Condition="AI_MAINT AND InstallMode="Remove"" Ordering="1"/>
|
||||
<ROW Dialog_="MaintenanceTypeDlg" Control_="RepairButton" Event="NewDialog" Argument="VerifyRepairDlg" Condition="AI_MAINT AND InstallMode="Repair"" Ordering="601"/>
|
||||
<ROW Dialog_="VerifyRepairDlg" Control_="Back" Event="NewDialog" Argument="MaintenanceTypeDlg" Condition="AI_MAINT AND InstallMode="Repair"" Ordering="1"/>
|
||||
<ROW Dialog_="VerifyRepairDlg" Control_="Repair" Event="EndDialog" Argument="Return" Condition="AI_MAINT AND InstallMode="Repair"" Ordering="399" Options="1"/>
|
||||
<ROW Dialog_="VerifyRemoveDlg" Control_="Remove" Event="EndDialog" Argument="Return" Condition="AI_MAINT AND InstallMode="Remove"" Ordering="299" Options="1"/>
|
||||
<ROW Dialog_="PatchWelcomeDlg" Control_="Next" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_PATCH" Ordering="201"/>
|
||||
<ROW Dialog_="ResumeDlg" Control_="Install" Event="EndDialog" Argument="Return" Condition="AI_RESUME" Ordering="299"/>
|
||||
<ROW Dialog_="VerifyReadyDlg" Control_="Install" Event="EndDialog" Argument="Return" Condition="AI_PATCH" Ordering="199"/>
|
||||
<ROW Dialog_="VerifyReadyDlg" Control_="Back" Event="NewDialog" Argument="PatchWelcomeDlg" Condition="AI_PATCH" Ordering="203"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiCreateFolderComponent">
|
||||
<ROW Directory_="APPDIR" Component_="APPDIR" ManualDelete="true"/>
|
||||
<ROW Directory_="apachezookeeper3.7.0bin_Dir" Component_="zookeeper" ManualDelete="false"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiCustActComponent">
|
||||
<ROW Action="AI_BACKUP_AI_SETUPEXEPATH" Type="51" Source="AI_SETUPEXEPATH_ORIGINAL" Target="[AI_SETUPEXEPATH]"/>
|
||||
<ROW Action="AI_DATA_SETTER_2" Type="51" Source="CustomActionData" Target="AEQAaQBnAGkAdABhAGwAbAB5AFMAaQBnAG4AUwBjAHIAaQBwAHQAAgABAEYAbABhAGcAcwACADYAAQBQAGEAcgBhAG0AcwACAAEAUwBjAHIAaQBwAHQAAgAjAFIAZQBxAHUAaQByAGUAcwAgAC0AdgBlAHIAcwBpAG8AbgAgADMADQAKAFAAYQByAGEAbQAoACkADQAKAA0ACgAkAEEAUABQAEQASQBSACAAPQAgAEEASQBfAEcAZQB0AE0AcwBpAFAAcgBvAHAAZQByAHQAeQAgAEEAUABQAEQASQBSAA0ACgAkAE0AQQBJAE4ARABJAFIAIAA9ACAAJABBAFAAUABEAEkAUgAuAFQAbwBTAHQAcgBpAG4AZwAoACkAIAArACAAIgAuAC4AIgANAAoAUgBlAG0AbwB2AGUALQBJAHQAZQBtACAAJABNAEEASQBOAEQASQBSACAALQBSAGUAYwB1AHIAcwBl"/>
|
||||
<ROW Action="AI_DOWNGRADE" Type="19" Target="4010"/>
|
||||
<ROW Action="AI_DpiContentScale" Type="1" Source="aicustact.dll" Target="DpiContentScale"/>
|
||||
<ROW Action="AI_EnableDebugLog" Type="321" Source="aicustact.dll" Target="EnableDebugLog"/>
|
||||
<ROW Action="AI_GetArpIconPath" Type="1" Source="aicustact.dll" Target="GetArpIconPath"/>
|
||||
<ROW Action="AI_InstallModeCheck" Type="1" Source="aicustact.dll" Target="UpdateInstallMode" WithoutSeq="true"/>
|
||||
<ROW Action="AI_PREPARE_UPGRADE" Type="65" Source="aicustact.dll" Target="PrepareUpgrade"/>
|
||||
<ROW Action="AI_RESTORE_AI_SETUPEXEPATH" Type="51" Source="AI_SETUPEXEPATH" Target="[AI_SETUPEXEPATH_ORIGINAL]"/>
|
||||
<ROW Action="AI_RESTORE_LOCATION" Type="65" Source="aicustact.dll" Target="RestoreLocation"/>
|
||||
<ROW Action="AI_ResolveKnownFolders" Type="1" Source="aicustact.dll" Target="AI_ResolveKnownFolders"/>
|
||||
<ROW Action="AI_RestartElevated" Type="1" Source="aicustact.dll" Target="RestartElevated"/>
|
||||
<ROW Action="AI_SHOW_LOG" Type="65" Source="aicustact.dll" Target="LaunchLogFile" WithoutSeq="true"/>
|
||||
<ROW Action="AI_STORE_LOCATION" Type="51" Source="ARPINSTALLLOCATION" Target="[APPDIR]"/>
|
||||
<ROW Action="RemoveManufactorDir" Type="65" Source="PowerShellScriptLauncher.dll" Target="RunPowerShellScript" Options="1" AdditionalSeq="AI_DATA_SETTER_2"/>
|
||||
<ROW Action="SET_APPDIR" Type="307" Source="APPDIR" Target="[ProgramFilesFolder][Manufacturer]\[ProductName]"/>
|
||||
<ROW Action="SET_SHORTCUTDIR" Type="307" Source="SHORTCUTDIR" Target="[ProgramMenuFolder][ProductName]"/>
|
||||
<ROW Action="SET_TARGETDIR_TO_APPDIR" Type="51" Source="TARGETDIR" Target="[APPDIR]"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiFeatCompsComponent">
|
||||
<ROW Feature_="MainFeature" Component_="APPDIR"/>
|
||||
<ROW Feature_="MainFeature" Component_="ProductInformation"/>
|
||||
<ROW Feature_="MainFeature" Component_="zookeeper"/>
|
||||
<ROW Feature_="MainFeature" Component_="AI_CustomARPName"/>
|
||||
<ROW Feature_="MainFeature" Component_="AI_DisableModify"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiInstExSeqComponent">
|
||||
<ROW Action="AI_DOWNGRADE" Condition="AI_NEWERPRODUCTFOUND AND (UILevel <> 5)" Sequence="210"/>
|
||||
<ROW Action="AI_RESTORE_LOCATION" Condition="APPDIR=""" Sequence="749"/>
|
||||
<ROW Action="AI_STORE_LOCATION" Condition="(Not Installed) OR REINSTALL" Sequence="1501"/>
|
||||
<ROW Action="AI_PREPARE_UPGRADE" Condition="AI_UPGRADE="No" AND (Not Installed)" Sequence="1397"/>
|
||||
<ROW Action="AI_ResolveKnownFolders" Sequence="52"/>
|
||||
<ROW Action="AI_EnableDebugLog" Sequence="51"/>
|
||||
<ROW Action="RemoveManufactorDir" Condition="( NOT Installed )" Sequence="6602"/>
|
||||
<ROW Action="AI_DATA_SETTER_2" Condition="( NOT Installed )" Sequence="6601"/>
|
||||
<ROW Action="AI_GetArpIconPath" Sequence="1401"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiInstallUISequenceComponent">
|
||||
<ROW Action="AI_RESTORE_LOCATION" Condition="APPDIR=""" Sequence="749"/>
|
||||
<ROW Action="AI_ResolveKnownFolders" Sequence="54"/>
|
||||
<ROW Action="AI_DpiContentScale" Sequence="53"/>
|
||||
<ROW Action="AI_EnableDebugLog" Sequence="52"/>
|
||||
<ROW Action="AI_BACKUP_AI_SETUPEXEPATH" Sequence="99"/>
|
||||
<ROW Action="AI_RESTORE_AI_SETUPEXEPATH" Condition="AI_SETUPEXEPATH_ORIGINAL" Sequence="101"/>
|
||||
<ROW Action="AI_RestartElevated" Sequence="51" Builds="DefaultBuild"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiLaunchConditionsComponent">
|
||||
<ROW Condition="((VersionNT <> 501) AND (VersionNT <> 502))" Description="[ProductName] cannot be installed on [WindowsTypeNT5XDisplay]." DescriptionLocId="AI.LaunchCondition.NoNT5X" IsPredefined="true" Builds="DefaultBuild"/>
|
||||
<ROW Condition="(VersionNT <> 400)" Description="[ProductName] cannot be installed on [WindowsTypeNT40Display]." DescriptionLocId="AI.LaunchCondition.NoNT40" IsPredefined="true" Builds="DefaultBuild"/>
|
||||
<ROW Condition="(VersionNT <> 500)" Description="[ProductName] cannot be installed on [WindowsTypeNT50Display]." DescriptionLocId="AI.LaunchCondition.NoNT50" IsPredefined="true" Builds="DefaultBuild"/>
|
||||
<ROW Condition="VersionNT" Description="[ProductName] cannot be installed on [WindowsType9XDisplay]." DescriptionLocId="AI.LaunchCondition.No9X" IsPredefined="true" Builds="DefaultBuild"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiRegsComponent">
|
||||
<ROW Registry="Comments" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="Comments" Value="[ARPCOMMENTS]" Component_="AI_CustomARPName"/>
|
||||
<ROW Registry="Contact" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="Contact" Value="[ARPCONTACT]" Component_="AI_CustomARPName"/>
|
||||
<ROW Registry="CurrentVersion" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion" Name="\"/>
|
||||
<ROW Registry="DisplayIcon" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="DisplayIcon" Value="[ARP_ICON_PATH]" Component_="AI_CustomARPName"/>
|
||||
<ROW Registry="DisplayName" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="DisplayName" Value="[AI_PRODUCTNAME_ARP]" Component_="AI_CustomARPName"/>
|
||||
<ROW Registry="DisplayVersion" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="DisplayVersion" Value="[ProductVersion]" Component_="AI_CustomARPName"/>
|
||||
<ROW Registry="EstimatedSize" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="EstimatedSize" Value="#[AI_ARP_SIZE]" Component_="AI_CustomARPName" VirtualValue="#"/>
|
||||
<ROW Registry="HelpLink" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="HelpLink" Value="[ARPHELPLINK]" Component_="AI_CustomARPName"/>
|
||||
<ROW Registry="HelpTelephone" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="HelpTelephone" Value="[ARPHELPTELEPHONE]" Component_="AI_CustomARPName"/>
|
||||
<ROW Registry="InstallLocation" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="InstallLocation" Value="[APPDIR]" Component_="AI_CustomARPName"/>
|
||||
<ROW Registry="Manufacturer" Root="-1" Key="Software\[Manufacturer]" Name="\"/>
|
||||
<ROW Registry="Microsoft" Root="-1" Key="Software\Microsoft" Name="\"/>
|
||||
<ROW Registry="ModifyPath" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="ModifyPath" Value="[AI_UNINSTALLER] /i [ProductCode] AI_UNINSTALLER_CTP=1" Component_="AI_CustomARPName"/>
|
||||
<ROW Registry="NoModify" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="NoModify" Value="#1" Component_="AI_DisableModify" VirtualValue="#"/>
|
||||
<ROW Registry="NoRepair" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="NoRepair" Value="#1" Component_="AI_CustomARPName" VirtualValue="#"/>
|
||||
<ROW Registry="Path" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="Path" Value="[APPDIR]" Component_="ProductInformation"/>
|
||||
<ROW Registry="ProductName" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="\"/>
|
||||
<ROW Registry="ProductNameProductVersion" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="\"/>
|
||||
<ROW Registry="Publisher" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="Publisher" Value="[Manufacturer]" Component_="AI_CustomARPName"/>
|
||||
<ROW Registry="Readme" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="Readme" Value="[ARPREADME]" Component_="AI_CustomARPName"/>
|
||||
<ROW Registry="Software" Root="-1" Key="Software" Name="\"/>
|
||||
<ROW Registry="URLInfoAbout" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="URLInfoAbout" Value="[ARPURLINFOABOUT]" Component_="AI_CustomARPName"/>
|
||||
<ROW Registry="URLUpdateInfo" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="URLUpdateInfo" Value="[ARPURLUPDATEINFO]" Component_="AI_CustomARPName"/>
|
||||
<ROW Registry="Uninstall" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall" Name="\"/>
|
||||
<ROW Registry="UninstallPath" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="UninstallPath" Value="[AI_UNINSTALLER] /x [ProductCode] AI_UNINSTALLER_CTP=1" Component_="AI_CustomARPName"/>
|
||||
<ROW Registry="UninstallString" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="UninstallString" Value="[AI_UNINSTALLER] /x [ProductCode] AI_UNINSTALLER_CTP=1" Component_="AI_CustomARPName"/>
|
||||
<ROW Registry="Version" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="Version" Value="[ProductVersion]" Component_="ProductInformation"/>
|
||||
<ROW Registry="VersionMajor" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="VersionMajor" Value="#1" Component_="AI_CustomARPName" VirtualValue="#"/>
|
||||
<ROW Registry="VersionMinor" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="VersionMinor" Value="#0" Component_="AI_CustomARPName" VirtualValue="#"/>
|
||||
<ROW Registry="Windows" Root="-1" Key="Software\Microsoft\Windows" Name="\"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiThemeComponent">
|
||||
<ATTRIBUTE name="UsedTheme" value="classic"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiUpgradeComponent">
|
||||
<ROW UpgradeCode="[|UpgradeCode]" VersionMin="0.0.1" VersionMax="[|ProductVersion]" Attributes="257" ActionProperty="OLDPRODUCTS"/>
|
||||
<ROW UpgradeCode="[|UpgradeCode]" VersionMin="[|ProductVersion]" Attributes="2" ActionProperty="AI_NEWERPRODUCTFOUND"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.SynchronizedFolderComponent">
|
||||
<ROW Directory_="apachezookeeper3.7.0bin_Dir" SourcePath="kafka-zookeeper\zookeeper" Feature="MainFeature" ExcludePattern="*~|#*#|%*%|._|CVS|.cvsignore|SCCS|vssver.scc|mssccprj.scc|vssver2.scc|.svn|.DS_Store" ExcludeFlags="6" FileAddOptions="4"/>
|
||||
</COMPONENT>
|
||||
</DOCUMENT>
|
@ -1,11 +1,113 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Web;
|
||||
using System.Net.Sockets;
|
||||
using Microsoft.Deployment.WindowsInstaller;
|
||||
using RabbitMQ.Client;
|
||||
|
||||
namespace Utils
|
||||
{
|
||||
public class CustomActions
|
||||
{
|
||||
public static string CreateAuthToken(string pkey, string machinekey)
|
||||
{
|
||||
using (var hasher = new System.Security.Cryptography.HMACSHA1(Encoding.UTF8.GetBytes(machinekey)))
|
||||
{
|
||||
var now = DateTime.UtcNow.ToString("yyyyMMddHHmmss");
|
||||
var hash = System.Web.HttpServerUtility.UrlTokenEncode(hasher.ComputeHash(Encoding.UTF8.GetBytes(string.Join("\n", now, pkey))));
|
||||
return string.Format("ASC {0}:{1}:{2}", pkey, now, hash);
|
||||
}
|
||||
}
|
||||
|
||||
[CustomAction]
|
||||
public static ActionResult SetVersionReleaseDateSign(Session session)
|
||||
{
|
||||
var pkey = Convert.ToString(session["VERSION.RELEASE_DATE"]);
|
||||
var machineKey = Convert.ToString(session["MACHINE_KEY"]);
|
||||
|
||||
session.Log("SetVersionReleaseDateSign: pkey {0}, machineKey {1}", pkey, machineKey);
|
||||
|
||||
session["VERSION.RELEASE_DATE.SIGN"] = CreateAuthToken(pkey, machineKey);
|
||||
|
||||
session.Log("SetVersionReleaseDateSign End: {0}", session["VERSION.RELEASE_DATE.SIGN"]);
|
||||
|
||||
return ActionResult.Success;
|
||||
}
|
||||
|
||||
|
||||
[CustomAction]
|
||||
public static ActionResult TestRedisServerConnection(Session session)
|
||||
{
|
||||
try
|
||||
{
|
||||
using (var redis = new Redis(session["REDIS_HOST_PROP"], Convert.ToInt32(session["REDIS_PORT_PROP"])))
|
||||
{
|
||||
|
||||
if (!String.IsNullOrEmpty(session["REDIS_PASSWORD_PROP"].Trim()))
|
||||
redis.Password = session["REDIS_PASSWORD_PROP"];
|
||||
|
||||
var pong = redis.Ping("ONLYOFFICE");
|
||||
|
||||
session.Log("Redis Status: IsConnected is {0}", !String.IsNullOrEmpty(pong));
|
||||
session["RedisServerConnectionError"] = !String.IsNullOrEmpty(pong) ? "" : String.Format("Connection Refused HOST:{0},PORT:{1},PASS:{2}", session["REDIS_HOST_PROP"], session["REDIS_PORT_PROP"], session["REDIS_PASSWORD_PROP"]);
|
||||
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
session.Log("RedisConnectionException '{0}'", ex.Message);
|
||||
session["RedisServerConnectionError"] = String.Format("Connection Refused HOST:{0},PORT:{1},PASS:{2}", session["REDIS_HOST_PROP"], session["REDIS_PORT_PROP"], session["REDIS_PASSWORD_PROP"]);
|
||||
}
|
||||
|
||||
return ActionResult.Success;
|
||||
}
|
||||
|
||||
|
||||
[CustomAction]
|
||||
public static ActionResult TestRabbitMQConnection(Session session)
|
||||
{
|
||||
ConnectionFactory factory = new ConnectionFactory();
|
||||
|
||||
factory.HostName = session["RABBITMQ_HOSTNAME_PROP"];
|
||||
factory.Port = Convert.ToInt32(session["RABBITMQ_PORT_PROP"]);
|
||||
factory.VirtualHost = session["RABBITMQ_VIRTUALHOST_PROP"];
|
||||
factory.UserName = session["RABBITMQ_USERNAME_PROP"];
|
||||
factory.Password = session["RABBITMQ_PASSWORD_PROP"];
|
||||
|
||||
try
|
||||
{
|
||||
using (IConnection conn = factory.CreateConnection())
|
||||
{
|
||||
session.Log("RabbitMQ Status: IsConnected is {0}", conn.IsOpen);
|
||||
|
||||
session["RabbitMQServerConnectionError"] = conn.IsOpen ? "" : String.Format("Connection Refused HOST:{0}, PORT:{1}, VirtualHost:{2}, UserName:{3}, PASS:{4}",
|
||||
session["RABBITMQ_HOSTNAME_PROP"],
|
||||
session["RABBITMQ_PORT_PROP"],
|
||||
session["RABBITMQ_VIRTUALHOST_PROP"],
|
||||
session["RABBITMQ_USERNAME_PROP"],
|
||||
session["RABBITMQ_PASSWORD_PROP"]
|
||||
);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
session.Log("RabbitMQ.Client.Exceptions.BrokerUnreachableException {0}", ex.Message);
|
||||
session["RabbitMQServerConnectionError"] = String.Format("Connection Refused HOST:{0}, PORT:{1}, VirtualHost:{2}, UserName:{3}, PASS:{4}",
|
||||
session["RABBITMQ_HOSTNAME_PROP"],
|
||||
session["RABBITMQ_PORT_PROP"],
|
||||
session["RABBITMQ_VIRTUALHOST_PROP"],
|
||||
session["RABBITMQ_USERNAME_PROP"],
|
||||
session["RABBITMQ_PASSWORD_PROP"]
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
return ActionResult.Success;
|
||||
|
||||
}
|
||||
|
||||
[CustomAction]
|
||||
public static ActionResult CheckTCPAvailability(Session session)
|
||||
{
|
||||
|
@ -1,4 +1,5 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
|
@ -32,6 +32,9 @@
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="RabbitMQ.Client">
|
||||
<HintPath>packages\RabbitMQ.Client.3.6.5\lib\net45\RabbitMQ.Client.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.IO.Compression" />
|
||||
@ -46,8 +49,12 @@
|
||||
<ItemGroup>
|
||||
<Compile Include="CustomAction.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="redis-sharp.cs" />
|
||||
<Content Include="CustomAction.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="packages.config" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<Import Project="$(WixCATargetsPath)" />
|
||||
</Project>
|
4
build/install/win/CustomActions/C#/Utils/packages.config
Normal file
4
build/install/win/CustomActions/C#/Utils/packages.config
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="RabbitMQ.Client" version="3.6.5" targetFramework="net45" />
|
||||
</packages>
|
937
build/install/win/CustomActions/C#/Utils/redis-sharp.cs
Normal file
937
build/install/win/CustomActions/C#/Utils/redis-sharp.cs
Normal file
@ -0,0 +1,937 @@
|
||||
//
|
||||
// redis-sharp.cs: ECMA CLI Binding to the Redis key-value storage system
|
||||
//
|
||||
// Authors:
|
||||
// Miguel de Icaza (miguel@gnome.org)
|
||||
//
|
||||
// Copyright 2010 Novell, Inc.
|
||||
//
|
||||
// Licensed under the same terms of reddis: new BSD license.
|
||||
//
|
||||
#define DEBUG
|
||||
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
using System.Net.Sockets;
|
||||
using System.Text;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
|
||||
public class Redis : IDisposable {
|
||||
Socket socket;
|
||||
BufferedStream bstream;
|
||||
|
||||
public enum KeyType {
|
||||
None, String, List, Set
|
||||
}
|
||||
|
||||
public class ResponseException : Exception {
|
||||
public ResponseException (string code) : base ("Response error")
|
||||
{
|
||||
Code = code;
|
||||
}
|
||||
|
||||
public string Code { get; private set; }
|
||||
}
|
||||
|
||||
public Redis (string host, int port)
|
||||
{
|
||||
if (host == null)
|
||||
throw new ArgumentNullException ("host");
|
||||
|
||||
Host = host;
|
||||
Port = port;
|
||||
SendTimeout = -1;
|
||||
}
|
||||
|
||||
public Redis (string host) : this (host, 6379)
|
||||
{
|
||||
}
|
||||
|
||||
public Redis () : this ("localhost", 6379)
|
||||
{
|
||||
}
|
||||
|
||||
public string Host { get; private set; }
|
||||
public int Port { get; private set; }
|
||||
public int RetryTimeout { get; set; }
|
||||
public int RetryCount { get; set; }
|
||||
public int SendTimeout { get; set; }
|
||||
public string Password { get; set; }
|
||||
|
||||
int db;
|
||||
public int Db {
|
||||
get {
|
||||
return db;
|
||||
}
|
||||
|
||||
set {
|
||||
db = value;
|
||||
SendExpectSuccess ("SELECT", db);
|
||||
}
|
||||
}
|
||||
|
||||
public string this [string key] {
|
||||
get { return GetString (key); }
|
||||
set { Set (key, value); }
|
||||
}
|
||||
|
||||
public void Set (string key, string value)
|
||||
{
|
||||
if (key == null)
|
||||
throw new ArgumentNullException ("key");
|
||||
if (value == null)
|
||||
throw new ArgumentNullException ("value");
|
||||
|
||||
Set (key, Encoding.UTF8.GetBytes (value));
|
||||
}
|
||||
|
||||
|
||||
public void Set (string key, byte [] value)
|
||||
{
|
||||
if (key == null)
|
||||
throw new ArgumentNullException ("key");
|
||||
if (value == null)
|
||||
throw new ArgumentNullException ("value");
|
||||
|
||||
if (value.Length > 1073741824)
|
||||
throw new ArgumentException ("value exceeds 1G", "value");
|
||||
|
||||
if (!SendDataCommand (value, "SET", key))
|
||||
throw new Exception ("Unable to connect");
|
||||
ExpectSuccess ();
|
||||
}
|
||||
|
||||
public bool SetNX (string key, string value)
|
||||
{
|
||||
if (key == null)
|
||||
throw new ArgumentNullException ("key");
|
||||
if (value == null)
|
||||
throw new ArgumentNullException ("value");
|
||||
|
||||
return SetNX (key, Encoding.UTF8.GetBytes (value));
|
||||
}
|
||||
|
||||
public bool SetNX (string key, byte [] value)
|
||||
{
|
||||
if (key == null)
|
||||
throw new ArgumentNullException ("key");
|
||||
if (value == null)
|
||||
throw new ArgumentNullException ("value");
|
||||
|
||||
if (value.Length > 1073741824)
|
||||
throw new ArgumentException ("value exceeds 1G", "value");
|
||||
|
||||
return SendDataExpectInt (value, "SETNX", key) > 0 ? true : false;
|
||||
}
|
||||
|
||||
public void Set (IDictionary<string,string> dict)
|
||||
{
|
||||
if (dict == null)
|
||||
throw new ArgumentNullException ("dict");
|
||||
|
||||
Set (dict.ToDictionary(k => k.Key, v => Encoding.UTF8.GetBytes(v.Value)));
|
||||
}
|
||||
|
||||
public void Set (IDictionary<string,byte []> dict)
|
||||
{
|
||||
if (dict == null)
|
||||
throw new ArgumentNullException ("dict");
|
||||
|
||||
MSet (dict.Keys.ToArray (), dict.Values.ToArray ());
|
||||
}
|
||||
|
||||
public void MSet (string [] keys, byte [][] values)
|
||||
{
|
||||
if (keys.Length != values.Length)
|
||||
throw new ArgumentException ("keys and values must have the same size");
|
||||
|
||||
byte [] nl = Encoding.UTF8.GetBytes ("\r\n");
|
||||
MemoryStream ms = new MemoryStream ();
|
||||
|
||||
for (int i = 0; i < keys.Length; i++) {
|
||||
byte [] key = Encoding.UTF8.GetBytes(keys[i]);
|
||||
byte [] val = values[i];
|
||||
byte [] kLength = Encoding.UTF8.GetBytes ("$" + key.Length + "\r\n");
|
||||
byte [] k = Encoding.UTF8.GetBytes (keys[i] + "\r\n");
|
||||
byte [] vLength = Encoding.UTF8.GetBytes ("$" + val.Length + "\r\n");
|
||||
ms.Write (kLength, 0, kLength.Length);
|
||||
ms.Write (k, 0, k.Length);
|
||||
ms.Write (vLength, 0, vLength.Length);
|
||||
ms.Write (val, 0, val.Length);
|
||||
ms.Write (nl, 0, nl.Length);
|
||||
}
|
||||
|
||||
SendDataRESP (ms.ToArray (), "*" + (keys.Length * 2 + 1) + "\r\n$4\r\nMSET\r\n");
|
||||
ExpectSuccess ();
|
||||
}
|
||||
|
||||
public byte [] Get (string key)
|
||||
{
|
||||
if (key == null)
|
||||
throw new ArgumentNullException ("key");
|
||||
return SendExpectData ("GET", key);
|
||||
}
|
||||
|
||||
public string Ping(String key)
|
||||
{
|
||||
return Encoding.UTF8.GetString (SendExpectData("PING", key));
|
||||
}
|
||||
|
||||
public string GetString (string key)
|
||||
{
|
||||
if (key == null)
|
||||
throw new ArgumentNullException ("key");
|
||||
return Encoding.UTF8.GetString (Get (key));
|
||||
}
|
||||
|
||||
public byte [][] Sort (SortOptions options)
|
||||
{
|
||||
return Sort (options.Key, options.StoreInKey, options.ToArgs());
|
||||
}
|
||||
|
||||
public byte [][] Sort (string key, string destination, params object [] options)
|
||||
{
|
||||
if (key == null)
|
||||
throw new ArgumentNullException ("key");
|
||||
|
||||
int offset = string.IsNullOrEmpty (destination) ? 1 : 3;
|
||||
object [] args = new object [offset + options.Length];
|
||||
|
||||
args [0] = key;
|
||||
Array.Copy (options, 0, args, offset, options.Length);
|
||||
if (offset == 1) {
|
||||
return SendExpectDataArray ("SORT", args);
|
||||
}
|
||||
else {
|
||||
args [1] = "STORE";
|
||||
args [2] = destination;
|
||||
int n = SendExpectInt ("SORT", args);
|
||||
return new byte [n][];
|
||||
}
|
||||
}
|
||||
|
||||
public byte [] GetSet (string key, byte [] value)
|
||||
{
|
||||
if (key == null)
|
||||
throw new ArgumentNullException ("key");
|
||||
if (value == null)
|
||||
throw new ArgumentNullException ("value");
|
||||
|
||||
if (value.Length > 1073741824)
|
||||
throw new ArgumentException ("value exceeds 1G", "value");
|
||||
|
||||
if (!SendDataCommand (value, "GETSET", key))
|
||||
throw new Exception ("Unable to connect");
|
||||
|
||||
return ReadData ();
|
||||
}
|
||||
|
||||
public string GetSet (string key, string value)
|
||||
{
|
||||
if (key == null)
|
||||
throw new ArgumentNullException ("key");
|
||||
if (value == null)
|
||||
throw new ArgumentNullException ("value");
|
||||
return Encoding.UTF8.GetString (GetSet (key, Encoding.UTF8.GetBytes (value)));
|
||||
}
|
||||
|
||||
string ReadLine ()
|
||||
{
|
||||
StringBuilder sb = new StringBuilder ();
|
||||
int c;
|
||||
|
||||
while ((c = bstream.ReadByte ()) != -1){
|
||||
if (c == '\r')
|
||||
continue;
|
||||
if (c == '\n')
|
||||
break;
|
||||
sb.Append ((char) c);
|
||||
}
|
||||
return sb.ToString ();
|
||||
}
|
||||
|
||||
void Connect ()
|
||||
{
|
||||
socket = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
|
||||
socket.NoDelay = true;
|
||||
socket.SendTimeout = SendTimeout;
|
||||
socket.Connect (Host, Port);
|
||||
if (!socket.Connected){
|
||||
socket.Close ();
|
||||
socket = null;
|
||||
return;
|
||||
}
|
||||
bstream = new BufferedStream (new NetworkStream (socket), 16*1024);
|
||||
|
||||
if (Password != null)
|
||||
SendExpectSuccess ("AUTH", Password);
|
||||
}
|
||||
|
||||
byte [] end_data = new byte [] { (byte) '\r', (byte) '\n' };
|
||||
|
||||
bool SendDataCommand (byte [] data, string cmd, params object [] args)
|
||||
{
|
||||
string resp = "*" + (1 + args.Length + 1).ToString () + "\r\n";
|
||||
resp += "$" + cmd.Length + "\r\n" + cmd + "\r\n";
|
||||
foreach (object arg in args) {
|
||||
string argStr = arg.ToString ();
|
||||
int argStrLength = Encoding.UTF8.GetByteCount(argStr);
|
||||
resp += "$" + argStrLength + "\r\n" + argStr + "\r\n";
|
||||
}
|
||||
resp += "$" + data.Length + "\r\n";
|
||||
|
||||
return SendDataRESP (data, resp);
|
||||
}
|
||||
|
||||
bool SendDataRESP (byte [] data, string resp)
|
||||
{
|
||||
if (socket == null)
|
||||
Connect ();
|
||||
if (socket == null)
|
||||
return false;
|
||||
|
||||
byte [] r = Encoding.UTF8.GetBytes (resp);
|
||||
try {
|
||||
Log ("C", resp);
|
||||
socket.Send (r);
|
||||
if (data != null){
|
||||
socket.Send (data);
|
||||
socket.Send (end_data);
|
||||
}
|
||||
} catch (SocketException){
|
||||
// timeout;
|
||||
socket.Close ();
|
||||
socket = null;
|
||||
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool SendCommand (string cmd, params object [] args)
|
||||
{
|
||||
if (socket == null)
|
||||
Connect ();
|
||||
if (socket == null)
|
||||
return false;
|
||||
|
||||
string resp = "*" + (1 + args.Length).ToString () + "\r\n";
|
||||
resp += "$" + cmd.Length + "\r\n" + cmd + "\r\n";
|
||||
foreach (object arg in args) {
|
||||
string argStr = arg.ToString ();
|
||||
int argStrLength = Encoding.UTF8.GetByteCount(argStr);
|
||||
resp += "$" + argStrLength + "\r\n" + argStr + "\r\n";
|
||||
}
|
||||
|
||||
byte [] r = Encoding.UTF8.GetBytes (resp);
|
||||
try {
|
||||
Log ("C", resp);
|
||||
socket.Send (r);
|
||||
} catch (SocketException){
|
||||
// timeout;
|
||||
socket.Close ();
|
||||
socket = null;
|
||||
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
[Conditional ("DEBUG")]
|
||||
void Log (string id, string message)
|
||||
{
|
||||
Console.WriteLine(id + ": " + message.Trim().Replace("\r\n", " "));
|
||||
}
|
||||
|
||||
void ExpectSuccess ()
|
||||
{
|
||||
int c = bstream.ReadByte ();
|
||||
if (c == -1)
|
||||
throw new ResponseException ("No more data");
|
||||
|
||||
string s = ReadLine ();
|
||||
Log ("S", (char)c + s);
|
||||
if (c == '-')
|
||||
throw new ResponseException (s.StartsWith ("ERR ") ? s.Substring (4) : s);
|
||||
}
|
||||
|
||||
void SendExpectSuccess (string cmd, params object [] args)
|
||||
{
|
||||
if (!SendCommand (cmd, args))
|
||||
throw new Exception ("Unable to connect");
|
||||
|
||||
ExpectSuccess ();
|
||||
}
|
||||
|
||||
int SendDataExpectInt (byte[] data, string cmd, params object [] args)
|
||||
{
|
||||
if (!SendDataCommand (data, cmd, args))
|
||||
throw new Exception ("Unable to connect");
|
||||
|
||||
int c = bstream.ReadByte ();
|
||||
if (c == -1)
|
||||
throw new ResponseException ("No more data");
|
||||
|
||||
string s = ReadLine ();
|
||||
Log ("S", (char)c + s);
|
||||
if (c == '-')
|
||||
throw new ResponseException (s.StartsWith ("ERR ") ? s.Substring (4) : s);
|
||||
if (c == ':'){
|
||||
int i;
|
||||
if (int.TryParse (s, out i))
|
||||
return i;
|
||||
}
|
||||
throw new ResponseException ("Unknown reply on integer request: " + c + s);
|
||||
}
|
||||
|
||||
int SendExpectInt (string cmd, params object [] args)
|
||||
{
|
||||
if (!SendCommand (cmd, args))
|
||||
throw new Exception ("Unable to connect");
|
||||
|
||||
int c = bstream.ReadByte ();
|
||||
if (c == -1)
|
||||
throw new ResponseException ("No more data");
|
||||
|
||||
string s = ReadLine ();
|
||||
Log ("S", (char)c + s);
|
||||
if (c == '-')
|
||||
throw new ResponseException (s.StartsWith ("ERR ") ? s.Substring (4) : s);
|
||||
if (c == ':'){
|
||||
int i;
|
||||
if (int.TryParse (s, out i))
|
||||
return i;
|
||||
}
|
||||
throw new ResponseException ("Unknown reply on integer request: " + c + s);
|
||||
}
|
||||
|
||||
string SendExpectString (string cmd, params object [] args)
|
||||
{
|
||||
if (!SendCommand (cmd, args))
|
||||
throw new Exception ("Unable to connect");
|
||||
|
||||
int c = bstream.ReadByte ();
|
||||
if (c == -1)
|
||||
throw new ResponseException ("No more data");
|
||||
|
||||
string s = ReadLine ();
|
||||
Log ("S", (char)c + s);
|
||||
if (c == '-')
|
||||
throw new ResponseException (s.StartsWith ("ERR ") ? s.Substring (4) : s);
|
||||
if (c == '+')
|
||||
return s;
|
||||
|
||||
throw new ResponseException ("Unknown reply on integer request: " + c + s);
|
||||
}
|
||||
|
||||
//
|
||||
// This one does not throw errors
|
||||
//
|
||||
string SendGetString (string cmd, params object [] args)
|
||||
{
|
||||
if (!SendCommand (cmd, args))
|
||||
throw new Exception ("Unable to connect");
|
||||
|
||||
return ReadLine ();
|
||||
}
|
||||
|
||||
byte [] SendExpectData (string cmd, params object [] args)
|
||||
{
|
||||
if (!SendCommand (cmd, args))
|
||||
throw new Exception ("Unable to connect");
|
||||
|
||||
return ReadData ();
|
||||
}
|
||||
|
||||
byte [] ReadData ()
|
||||
{
|
||||
string s = ReadLine ();
|
||||
Log ("S", s);
|
||||
if (s.Length == 0)
|
||||
throw new ResponseException ("Zero length respose");
|
||||
|
||||
char c = s [0];
|
||||
if (c == '-')
|
||||
throw new ResponseException (s.StartsWith ("-ERR ") ? s.Substring (5) : s.Substring (1));
|
||||
|
||||
if (c == '$'){
|
||||
if (s == "$-1")
|
||||
return null;
|
||||
int n;
|
||||
|
||||
if (Int32.TryParse (s.Substring (1), out n)){
|
||||
byte [] retbuf = new byte [n];
|
||||
|
||||
int bytesRead = 0;
|
||||
do {
|
||||
int read = bstream.Read (retbuf, bytesRead, n - bytesRead);
|
||||
if (read < 1)
|
||||
throw new ResponseException("Invalid termination mid stream");
|
||||
bytesRead += read;
|
||||
}
|
||||
while (bytesRead < n);
|
||||
if (bstream.ReadByte () != '\r' || bstream.ReadByte () != '\n')
|
||||
throw new ResponseException ("Invalid termination");
|
||||
return retbuf;
|
||||
}
|
||||
throw new ResponseException ("Invalid length");
|
||||
}
|
||||
|
||||
/* don't treat arrays here because only one element works -- use DataArray!
|
||||
//returns the number of matches
|
||||
if (c == '*') {
|
||||
int n;
|
||||
if (Int32.TryParse(s.Substring(1), out n))
|
||||
return n <= 0 ? new byte [0] : ReadData();
|
||||
|
||||
throw new ResponseException ("Unexpected length parameter" + r);
|
||||
}
|
||||
*/
|
||||
|
||||
throw new ResponseException ("Unexpected reply: " + s);
|
||||
}
|
||||
|
||||
public bool ContainsKey (string key)
|
||||
{
|
||||
if (key == null)
|
||||
throw new ArgumentNullException ("key");
|
||||
return SendExpectInt ("EXISTS", key) == 1;
|
||||
}
|
||||
|
||||
public bool Remove (string key)
|
||||
{
|
||||
if (key == null)
|
||||
throw new ArgumentNullException ("key");
|
||||
return SendExpectInt ("DEL", key) == 1;
|
||||
}
|
||||
|
||||
public int Remove (params string [] args)
|
||||
{
|
||||
if (args == null)
|
||||
throw new ArgumentNullException ("args");
|
||||
return SendExpectInt ("DEL", args);
|
||||
}
|
||||
|
||||
public int Increment (string key)
|
||||
{
|
||||
if (key == null)
|
||||
throw new ArgumentNullException ("key");
|
||||
return SendExpectInt ("INCR", key);
|
||||
}
|
||||
|
||||
public int Increment (string key, int count)
|
||||
{
|
||||
if (key == null)
|
||||
throw new ArgumentNullException ("key");
|
||||
return SendExpectInt ("INCRBY", key, count);
|
||||
}
|
||||
|
||||
public int Decrement (string key)
|
||||
{
|
||||
if (key == null)
|
||||
throw new ArgumentNullException ("key");
|
||||
return SendExpectInt ("DECR", key);
|
||||
}
|
||||
|
||||
public int Decrement (string key, int count)
|
||||
{
|
||||
if (key == null)
|
||||
throw new ArgumentNullException ("key");
|
||||
return SendExpectInt ("DECRBY", key, count);
|
||||
}
|
||||
|
||||
public KeyType TypeOf (string key)
|
||||
{
|
||||
if (key == null)
|
||||
throw new ArgumentNullException ("key");
|
||||
switch (SendExpectString ("TYPE", key)) {
|
||||
case "none":
|
||||
return KeyType.None;
|
||||
case "string":
|
||||
return KeyType.String;
|
||||
case "set":
|
||||
return KeyType.Set;
|
||||
case "list":
|
||||
return KeyType.List;
|
||||
}
|
||||
throw new ResponseException ("Invalid value");
|
||||
}
|
||||
|
||||
public string RandomKey ()
|
||||
{
|
||||
return SendExpectString ("RANDOMKEY");
|
||||
}
|
||||
|
||||
public bool Rename (string oldKeyname, string newKeyname)
|
||||
{
|
||||
if (oldKeyname == null)
|
||||
throw new ArgumentNullException ("oldKeyname");
|
||||
if (newKeyname == null)
|
||||
throw new ArgumentNullException ("newKeyname");
|
||||
return SendGetString ("RENAME", oldKeyname, newKeyname) [0] == '+';
|
||||
}
|
||||
|
||||
public bool Expire (string key, int seconds)
|
||||
{
|
||||
if (key == null)
|
||||
throw new ArgumentNullException ("key");
|
||||
return SendExpectInt ("EXPIRE", key, seconds) == 1;
|
||||
}
|
||||
|
||||
public bool ExpireAt (string key, int time)
|
||||
{
|
||||
if (key == null)
|
||||
throw new ArgumentNullException ("key");
|
||||
return SendExpectInt ("EXPIREAT", key, time) == 1;
|
||||
}
|
||||
|
||||
public int TimeToLive (string key)
|
||||
{
|
||||
if (key == null)
|
||||
throw new ArgumentNullException ("key");
|
||||
return SendExpectInt ("TTL", key);
|
||||
}
|
||||
|
||||
public int DbSize {
|
||||
get {
|
||||
return SendExpectInt ("DBSIZE");
|
||||
}
|
||||
}
|
||||
|
||||
public void Save ()
|
||||
{
|
||||
SendExpectSuccess ("SAVE");
|
||||
}
|
||||
|
||||
public void BackgroundSave ()
|
||||
{
|
||||
SendExpectSuccess ("BGSAVE");
|
||||
}
|
||||
|
||||
public void Shutdown ()
|
||||
{
|
||||
SendCommand ("SHUTDOWN");
|
||||
try {
|
||||
// the server may return an error
|
||||
string s = ReadLine ();
|
||||
Log ("S", s);
|
||||
if (s.Length == 0)
|
||||
throw new ResponseException ("Zero length respose");
|
||||
throw new ResponseException (s.StartsWith ("-ERR ") ? s.Substring (5) : s.Substring (1));
|
||||
} catch (IOException) {
|
||||
// this is the expected good result
|
||||
socket.Close ();
|
||||
socket = null;
|
||||
}
|
||||
}
|
||||
|
||||
public void FlushAll ()
|
||||
{
|
||||
SendExpectSuccess ("FLUSHALL");
|
||||
}
|
||||
|
||||
public void FlushDb ()
|
||||
{
|
||||
SendExpectSuccess ("FLUSHDB");
|
||||
}
|
||||
|
||||
const long UnixEpoch = 621355968000000000L;
|
||||
|
||||
public DateTime LastSave {
|
||||
get {
|
||||
int t = SendExpectInt ("LASTSAVE");
|
||||
|
||||
return new DateTime (UnixEpoch) + TimeSpan.FromSeconds (t);
|
||||
}
|
||||
}
|
||||
|
||||
public Dictionary<string,string> GetInfo ()
|
||||
{
|
||||
byte [] r = SendExpectData ("INFO");
|
||||
var dict = new Dictionary<string,string>();
|
||||
|
||||
foreach (var line in Encoding.UTF8.GetString (r).Split ('\n')){
|
||||
int p = line.IndexOf (':');
|
||||
if (p == -1)
|
||||
continue;
|
||||
dict.Add (line.Substring (0, p), line.Substring (p+1));
|
||||
}
|
||||
return dict;
|
||||
}
|
||||
|
||||
public string [] Keys {
|
||||
get {
|
||||
return GetKeys("*");
|
||||
}
|
||||
}
|
||||
|
||||
public string [] GetKeys (string pattern)
|
||||
{
|
||||
if (pattern == null)
|
||||
throw new ArgumentNullException ("pattern");
|
||||
|
||||
return SendExpectStringArray ("KEYS", pattern);
|
||||
}
|
||||
|
||||
public byte [][] MGet (params string [] keys)
|
||||
{
|
||||
if (keys == null)
|
||||
throw new ArgumentNullException ("keys");
|
||||
if (keys.Length == 0)
|
||||
throw new ArgumentException ("keys");
|
||||
|
||||
return SendExpectDataArray ("MGET", keys);
|
||||
}
|
||||
|
||||
|
||||
public string [] SendExpectStringArray (string cmd, params object [] args)
|
||||
{
|
||||
byte [][] reply = SendExpectDataArray (cmd, args);
|
||||
string [] keys = new string [reply.Length];
|
||||
for (int i = 0; i < reply.Length; i++)
|
||||
keys[i] = Encoding.UTF8.GetString (reply[i]);
|
||||
return keys;
|
||||
}
|
||||
|
||||
public byte[][] SendExpectDataArray (string cmd, params object [] args)
|
||||
{
|
||||
if (!SendCommand (cmd, args))
|
||||
throw new Exception("Unable to connect");
|
||||
int c = bstream.ReadByte();
|
||||
if (c == -1)
|
||||
throw new ResponseException("No more data");
|
||||
|
||||
string s = ReadLine();
|
||||
Log("S", (char)c + s);
|
||||
if (c == '-')
|
||||
throw new ResponseException(s.StartsWith("ERR ") ? s.Substring(4) : s);
|
||||
if (c == '*') {
|
||||
int count;
|
||||
if (int.TryParse (s, out count)) {
|
||||
byte [][] result = new byte [count][];
|
||||
|
||||
for (int i = 0; i < count; i++)
|
||||
result[i] = ReadData();
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
throw new ResponseException("Unknown reply on multi-request: " + c + s);
|
||||
}
|
||||
|
||||
#region List commands
|
||||
public byte[][] ListRange(string key, int start, int end)
|
||||
{
|
||||
return SendExpectDataArray ("LRANGE", key, start, end);
|
||||
}
|
||||
|
||||
public void LeftPush(string key, string value)
|
||||
{
|
||||
LeftPush(key, Encoding.UTF8.GetBytes (value));
|
||||
}
|
||||
|
||||
public void LeftPush(string key, byte [] value)
|
||||
{
|
||||
SendDataCommand (value, "LPUSH", key);
|
||||
ExpectSuccess();
|
||||
}
|
||||
|
||||
public void RightPush(string key, string value)
|
||||
{
|
||||
RightPush(key, Encoding.UTF8.GetBytes (value));
|
||||
}
|
||||
|
||||
public void RightPush(string key, byte [] value)
|
||||
{
|
||||
SendDataCommand (value, "RPUSH", key);
|
||||
ExpectSuccess();
|
||||
}
|
||||
|
||||
public int ListLength (string key)
|
||||
{
|
||||
return SendExpectInt ("LLEN", key);
|
||||
}
|
||||
|
||||
public byte[] ListIndex (string key, int index)
|
||||
{
|
||||
SendCommand ("LINDEX", key, index);
|
||||
return ReadData ();
|
||||
}
|
||||
|
||||
public byte[] LeftPop(string key)
|
||||
{
|
||||
SendCommand ("LPOP", key);
|
||||
return ReadData ();
|
||||
}
|
||||
|
||||
public byte[] RightPop(string key)
|
||||
{
|
||||
SendCommand ("RPOP", key);
|
||||
return ReadData ();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Set commands
|
||||
public bool AddToSet (string key, byte[] member)
|
||||
{
|
||||
return SendDataExpectInt(member, "SADD", key) > 0;
|
||||
}
|
||||
|
||||
public bool AddToSet (string key, string member)
|
||||
{
|
||||
return AddToSet (key, Encoding.UTF8.GetBytes(member));
|
||||
}
|
||||
|
||||
public int CardinalityOfSet (string key)
|
||||
{
|
||||
return SendExpectInt ("SCARD", key);
|
||||
}
|
||||
|
||||
public bool IsMemberOfSet (string key, byte[] member)
|
||||
{
|
||||
return SendDataExpectInt (member, "SISMEMBER", key) > 0;
|
||||
}
|
||||
|
||||
public bool IsMemberOfSet(string key, string member)
|
||||
{
|
||||
return IsMemberOfSet(key, Encoding.UTF8.GetBytes(member));
|
||||
}
|
||||
|
||||
public byte[][] GetMembersOfSet (string key)
|
||||
{
|
||||
return SendExpectDataArray ("SMEMBERS", key);
|
||||
}
|
||||
|
||||
public byte[] GetRandomMemberOfSet (string key)
|
||||
{
|
||||
return SendExpectData ("SRANDMEMBER", key);
|
||||
}
|
||||
|
||||
public byte[] PopRandomMemberOfSet (string key)
|
||||
{
|
||||
return SendExpectData ("SPOP", key);
|
||||
}
|
||||
|
||||
public bool RemoveFromSet (string key, byte[] member)
|
||||
{
|
||||
return SendDataExpectInt (member, "SREM", key) > 0;
|
||||
}
|
||||
|
||||
public bool RemoveFromSet (string key, string member)
|
||||
{
|
||||
return RemoveFromSet (key, Encoding.UTF8.GetBytes(member));
|
||||
}
|
||||
|
||||
public byte[][] GetUnionOfSets (params string[] keys)
|
||||
{
|
||||
if (keys == null)
|
||||
throw new ArgumentNullException();
|
||||
|
||||
return SendExpectDataArray ("SUNION", keys);
|
||||
|
||||
}
|
||||
|
||||
void StoreSetCommands (string cmd, params string[] keys)
|
||||
{
|
||||
if (String.IsNullOrEmpty(cmd))
|
||||
throw new ArgumentNullException ("cmd");
|
||||
|
||||
if (keys == null)
|
||||
throw new ArgumentNullException ("keys");
|
||||
|
||||
SendExpectSuccess (cmd, keys);
|
||||
}
|
||||
|
||||
public void StoreUnionOfSets (params string[] keys)
|
||||
{
|
||||
StoreSetCommands ("SUNIONSTORE", keys);
|
||||
}
|
||||
|
||||
public byte[][] GetIntersectionOfSets (params string[] keys)
|
||||
{
|
||||
if (keys == null)
|
||||
throw new ArgumentNullException();
|
||||
|
||||
return SendExpectDataArray ("SINTER", keys);
|
||||
}
|
||||
|
||||
public void StoreIntersectionOfSets (params string[] keys)
|
||||
{
|
||||
StoreSetCommands ("SINTERSTORE", keys);
|
||||
}
|
||||
|
||||
public byte[][] GetDifferenceOfSets (params string[] keys)
|
||||
{
|
||||
if (keys == null)
|
||||
throw new ArgumentNullException();
|
||||
|
||||
return SendExpectDataArray ("SDIFF", keys);
|
||||
}
|
||||
|
||||
public void StoreDifferenceOfSets (params string[] keys)
|
||||
{
|
||||
StoreSetCommands ("SDIFFSTORE", keys);
|
||||
}
|
||||
|
||||
public bool MoveMemberToSet (string srcKey, string destKey, byte[] member)
|
||||
{
|
||||
return SendDataExpectInt (member, "SMOVE", srcKey, destKey) > 0;
|
||||
}
|
||||
#endregion
|
||||
|
||||
public void Dispose ()
|
||||
{
|
||||
Dispose (true);
|
||||
GC.SuppressFinalize (this);
|
||||
}
|
||||
|
||||
~Redis ()
|
||||
{
|
||||
Dispose (false);
|
||||
}
|
||||
|
||||
protected virtual void Dispose (bool disposing)
|
||||
{
|
||||
if (disposing){
|
||||
SendCommand ("QUIT");
|
||||
ExpectSuccess ();
|
||||
socket.Close ();
|
||||
socket = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class SortOptions {
|
||||
public string Key { get; set; }
|
||||
public bool Descending { get; set; }
|
||||
public bool Lexographically { get; set; }
|
||||
public Int32 LowerLimit { get; set; }
|
||||
public Int32 UpperLimit { get; set; }
|
||||
public string By { get; set; }
|
||||
public string StoreInKey { get; set; }
|
||||
public string Get { get; set; }
|
||||
|
||||
public object [] ToArgs ()
|
||||
{
|
||||
System.Collections.ArrayList args = new System.Collections.ArrayList();
|
||||
|
||||
if (LowerLimit != 0 || UpperLimit != 0) {
|
||||
args.Add ("LIMIT");
|
||||
args.Add (LowerLimit);
|
||||
args.Add (UpperLimit);
|
||||
}
|
||||
if (Lexographically)
|
||||
args.Add("ALPHA");
|
||||
if (!string.IsNullOrEmpty (By)) {
|
||||
args.Add("BY");
|
||||
args.Add(By);
|
||||
}
|
||||
if (!string.IsNullOrEmpty (Get)) {
|
||||
args.Add("GET");
|
||||
args.Add(Get);
|
||||
}
|
||||
return args.ToArray ();
|
||||
}
|
||||
}
|
@ -28,7 +28,9 @@
|
||||
<ROW Property="ELASTICSEARCH_PORT" Value="9200" ValueLocId="-"/>
|
||||
<ROW Property="ELASTICSEARCH_SCHEME" Value="http" ValueLocId="-"/>
|
||||
<ROW Property="ENVIRONMENT" Value="test"/>
|
||||
<ROW Property="Editor_Port" Value="5013"/>
|
||||
<ROW Property="INSTALL_ROOT_FOLDER_NAME" Value="[|Manufacturer]"/>
|
||||
<ROW Property="Login_Port" Value="5011"/>
|
||||
<ROW Property="MSIFASTINSTALL" MultiBuildValue="DefaultBuild:3"/>
|
||||
<ROW Property="MYSQLODBCDRIVER" Value="MySQL ODBC 8.0 Unicode Driver"/>
|
||||
<ROW Property="Manufacturer" Value="Ascensio System SIA"/>
|
||||
@ -56,8 +58,10 @@
|
||||
<ROW Property="ServiceName_BackgroundTasks" Value="ASC.Data.Backup.BackgroundTasks"/>
|
||||
<ROW Property="ServiceName_BackupService" Value="ASC.BackupService"/>
|
||||
<ROW Property="ServiceName_ClearEvents" Value="ASC.ClearEvents"/>
|
||||
<ROW Property="ServiceName_DocEditor" Value="ASC.DocEditor"/>
|
||||
<ROW Property="ServiceName_FileServer" Value="ASC.FileServer"/>
|
||||
<ROW Property="ServiceName_FileService" Value="ASC.FileService"/>
|
||||
<ROW Property="ServiceName_Login" Value="ASC.Login"/>
|
||||
<ROW Property="ServiceName_Migration" Value="ASC.Migration"/>
|
||||
<ROW Property="ServiceName_MigrationRunner" Value="ASC.MigrationRunner"/>
|
||||
<ROW Property="ServiceName_NotifyService" Value="ASC.NotifyService"/>
|
||||
@ -71,8 +75,11 @@
|
||||
<ROW Property="ServiceName_WebApi" Value="ASC.WebApi"/>
|
||||
<ROW Property="ServiceName_WebStudio" Value="ASC.WebStudio"/>
|
||||
<ROW Property="ServiceName_WebhooksService" Value="ASC.WebhooksService"/>
|
||||
<ROW Property="Socket.IO_Port" Value="9899"/>
|
||||
<ROW Property="SsoAuth_port" Value="9834"/>
|
||||
<ROW Property="USERNAME_PROP" Value="root"/>
|
||||
<ROW Property="UpgradeCode" Value="{FFA9CD16-E087-45F3-8D34-3BBA1EF8A897}"/>
|
||||
<ROW Property="UrlShortener_Port" Value="9999"/>
|
||||
<ROW Property="WindowsType9X" MultiBuildValue="DefaultBuild:Windows 9x/ME" ValueLocId="-"/>
|
||||
<ROW Property="WindowsType9XDisplay" MultiBuildValue="DefaultBuild:Windows 9x/ME" ValueLocId="-"/>
|
||||
<ROW Property="WindowsTypeNT40" MultiBuildValue="DefaultBuild:Windows NT 4.0" ValueLocId="-"/>
|
||||
@ -83,82 +90,163 @@
|
||||
<ROW Property="WindowsTypeNT5XDisplay" MultiBuildValue="DefaultBuild:Windows XP/2003" ValueLocId="-"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiDirsComponent">
|
||||
<ROW Directory="APPDIR" Directory_Parent="TARGETDIR" DefaultDir="APPDIR:." IsPseudoRoot="1"/>
|
||||
<ROW Directory="ASC.ClearEvents_Dir" Directory_Parent="services_Dir" DefaultDir="ASC~1.CLE|ASC.ClearEvents"/>
|
||||
<ROW Directory="ASC.Data.Backup.BackgroundTasks_Dir" Directory_Parent="services_Dir" DefaultDir="ASCDAT~2.BAC|ASC.Data.Backup.BackgroundTasks"/>
|
||||
<ROW Directory="ASC.Data.Backup_Dir" Directory_Parent="services_Dir" DefaultDir="ASCDAT~1.BAC|ASC.Data.Backup"/>
|
||||
<ROW Directory="ASC.Files.Service_Dir" Directory_Parent="services_Dir" DefaultDir="ASCFIL~1.SER|ASC.Files.Service"/>
|
||||
<ROW Directory="ASC.Files_Dir" Directory_Parent="products_Dir" DefaultDir="ASC~1.FIL|ASC.Files"/>
|
||||
<ROW Directory="ASC.Migration.Runner_Dir" Directory_Parent="services_Dir" DefaultDir="ASCMIG~1.RUN|ASC.Migration.Runner"/>
|
||||
<ROW Directory="ASC.Migration_Dir" Directory_Parent="services_Dir" DefaultDir="ASC~1.MIG|ASC.Migration"/>
|
||||
<ROW Directory="ASC.Notify_Dir" Directory_Parent="services_Dir" DefaultDir="ASC~1.NOT|ASC.Notify"/>
|
||||
<ROW Directory="ASC.People_Dir" Directory_Parent="products_Dir" DefaultDir="ASC~1.PEO|ASC.People"/>
|
||||
<ROW Directory="ASC.Socket.IO_Dir" Directory_Parent="services_Dir" DefaultDir="ASCSOC~1.IO|ASC.Socket.IO"/>
|
||||
<ROW Directory="ASC.SsoAuth_Dir" Directory_Parent="services_Dir" DefaultDir="ASC~1.SSO|ASC.SsoAuth"/>
|
||||
<ROW Directory="ASC.Studio.Notify_Dir" Directory_Parent="services_Dir" DefaultDir="ASCSTU~1.NOT|ASC.Studio.Notify"/>
|
||||
<ROW Directory="ASC.TelegramService_Dir" Directory_Parent="services_Dir" DefaultDir="ASC~1.TEL|ASC.TelegramService"/>
|
||||
<ROW Directory="ASC.UrlShortener_Dir" Directory_Parent="services_Dir" DefaultDir="ASC~1.URL|ASC.UrlShortener"/>
|
||||
<ROW Directory="ASC.Web.Api_Dir" Directory_Parent="services_Dir" DefaultDir="ASCWEB~1.API|ASC.Web.Api"/>
|
||||
<ROW Directory="ASC.Web.Studio_Dir" Directory_Parent="services_Dir" DefaultDir="ASCWEB~1.STU|ASC.Web.Studio"/>
|
||||
<ROW Directory="ASC.Webhooks.Service_Dir" Directory_Parent="services_Dir" DefaultDir="ASCWEB~1.SER|ASC.Webhooks.Service"/>
|
||||
<ROW Directory="NewFolder_1_Dir" Directory_Parent="service_1_Dir" DefaultDir="config"/>
|
||||
<ROW Directory="NewFolder_3_Dir" Directory_Parent="ASC.Webhooks.Service_Dir" DefaultDir="service"/>
|
||||
<ROW Directory="NewFolder_Dir" Directory_Parent="ASC.UrlShortener_Dir" DefaultDir="service"/>
|
||||
<ROW Directory="APPDIR" Directory_Parent="TARGETDIR" DefaultDir="APPDIR:." IsPseudoRoot="1" DirectoryOptions="12"/>
|
||||
<ROW Directory="ASC.ClearEvents_Dir" Directory_Parent="services_Dir" DefaultDir="ASC~1.CLE|ASC.ClearEvents" DirectoryOptions="12"/>
|
||||
<ROW Directory="ASC.Data.Backup.BackgroundTasks_Dir" Directory_Parent="services_Dir" DefaultDir="ASCDAT~2.BAC|ASC.Data.Backup.BackgroundTasks" DirectoryOptions="12"/>
|
||||
<ROW Directory="ASC.Data.Backup_Dir" Directory_Parent="services_Dir" DefaultDir="ASCDAT~1.BAC|ASC.Data.Backup" DirectoryOptions="12"/>
|
||||
<ROW Directory="ASC.Files.Service_Dir" Directory_Parent="services_Dir" DefaultDir="ASCFIL~1.SER|ASC.Files.Service" DirectoryOptions="12"/>
|
||||
<ROW Directory="ASC.Files_Dir" Directory_Parent="products_Dir" DefaultDir="ASC~1.FIL|ASC.Files" DirectoryOptions="12"/>
|
||||
<ROW Directory="ASC.Login_Dir" Directory_Parent="products_Dir" DefaultDir="ASC~1.LOG|ASC.Login" DirectoryOptions="12"/>
|
||||
<ROW Directory="ASC.Migration.Runner_Dir" Directory_Parent="services_Dir" DefaultDir="ASCMIG~1.RUN|ASC.Migration.Runner" DirectoryOptions="12"/>
|
||||
<ROW Directory="ASC.Migration_Dir" Directory_Parent="services_Dir" DefaultDir="ASC~1.MIG|ASC.Migration" DirectoryOptions="12"/>
|
||||
<ROW Directory="ASC.Notify_Dir" Directory_Parent="services_Dir" DefaultDir="ASC~1.NOT|ASC.Notify" DirectoryOptions="12"/>
|
||||
<ROW Directory="ASC.People_Dir" Directory_Parent="products_Dir" DefaultDir="ASC~1.PEO|ASC.People" DirectoryOptions="12"/>
|
||||
<ROW Directory="ASC.Socket.IO_Dir" Directory_Parent="services_Dir" DefaultDir="ASCSOC~1.IO|ASC.Socket.IO" DirectoryOptions="12"/>
|
||||
<ROW Directory="ASC.SsoAuth_Dir" Directory_Parent="services_Dir" DefaultDir="ASC~1.SSO|ASC.SsoAuth" DirectoryOptions="12"/>
|
||||
<ROW Directory="ASC.Studio.Notify_Dir" Directory_Parent="services_Dir" DefaultDir="ASCSTU~1.NOT|ASC.Studio.Notify" DirectoryOptions="12"/>
|
||||
<ROW Directory="ASC.TelegramService_Dir" Directory_Parent="services_Dir" DefaultDir="ASC~1.TEL|ASC.TelegramService" DirectoryOptions="12"/>
|
||||
<ROW Directory="ASC.UrlShortener_Dir" Directory_Parent="services_Dir" DefaultDir="ASC~1.URL|ASC.UrlShortener" DirectoryOptions="12"/>
|
||||
<ROW Directory="ASC.Web.Api_Dir" Directory_Parent="services_Dir" DefaultDir="ASCWEB~1.API|ASC.Web.Api" DirectoryOptions="12"/>
|
||||
<ROW Directory="ASC.Web.Studio_Dir" Directory_Parent="services_Dir" DefaultDir="ASCWEB~1.STU|ASC.Web.Studio" DirectoryOptions="12"/>
|
||||
<ROW Directory="ASC.Webhooks.Service_Dir" Directory_Parent="services_Dir" DefaultDir="ASCWEB~1.SER|ASC.Webhooks.Service" DirectoryOptions="12"/>
|
||||
<ROW Directory="Logs_Dir" Directory_Parent="APPDIR" DefaultDir="Logs" DirectoryOptions="12"/>
|
||||
<ROW Directory="NewFolder_1_Dir" Directory_Parent="service_1_Dir" DefaultDir="config" DirectoryOptions="12"/>
|
||||
<ROW Directory="NewFolder_3_Dir" Directory_Parent="ASC.Webhooks.Service_Dir" DefaultDir="service" DirectoryOptions="12"/>
|
||||
<ROW Directory="NewFolder_Dir" Directory_Parent="ASC.UrlShortener_Dir" DefaultDir="service" DirectoryOptions="12"/>
|
||||
<ROW Directory="TARGETDIR" DefaultDir="SourceDir"/>
|
||||
<ROW Directory="config_1_Dir" Directory_Parent="NewFolder_Dir" DefaultDir="config"/>
|
||||
<ROW Directory="config_2_Dir" Directory_Parent="service_5_Dir" DefaultDir="config"/>
|
||||
<ROW Directory="config_Dir" Directory_Parent="APPDIR" DefaultDir="config"/>
|
||||
<ROW Directory="products_Dir" Directory_Parent="APPDIR" DefaultDir="products"/>
|
||||
<ROW Directory="public_Dir" Directory_Parent="APPDIR" DefaultDir="public"/>
|
||||
<ROW Directory="server_2_Dir" Directory_Parent="ASC.Files_Dir" DefaultDir="server"/>
|
||||
<ROW Directory="server_5_Dir" Directory_Parent="ASC.People_Dir" DefaultDir="server"/>
|
||||
<ROW Directory="service_11_Dir" Directory_Parent="ASC.Studio.Notify_Dir" DefaultDir="service"/>
|
||||
<ROW Directory="service_12_Dir" Directory_Parent="ASC.TelegramService_Dir" DefaultDir="service"/>
|
||||
<ROW Directory="service_15_Dir" Directory_Parent="ASC.Web.Api_Dir" DefaultDir="service"/>
|
||||
<ROW Directory="service_16_Dir" Directory_Parent="ASC.Web.Studio_Dir" DefaultDir="service"/>
|
||||
<ROW Directory="service_1_Dir" Directory_Parent="ASC.Socket.IO_Dir" DefaultDir="service"/>
|
||||
<ROW Directory="service_2_Dir" Directory_Parent="ASC.Data.Backup_Dir" DefaultDir="service"/>
|
||||
<ROW Directory="service_3_Dir" Directory_Parent="ASC.Data.Backup.BackgroundTasks_Dir" DefaultDir="service"/>
|
||||
<ROW Directory="service_4_Dir" Directory_Parent="ASC.Migration_Dir" DefaultDir="service"/>
|
||||
<ROW Directory="service_5_Dir" Directory_Parent="ASC.SsoAuth_Dir" DefaultDir="service"/>
|
||||
<ROW Directory="service_6_Dir" Directory_Parent="ASC.Migration.Runner_Dir" DefaultDir="service"/>
|
||||
<ROW Directory="service_7_Dir" Directory_Parent="ASC.Files.Service_Dir" DefaultDir="service"/>
|
||||
<ROW Directory="service_9_Dir" Directory_Parent="ASC.Notify_Dir" DefaultDir="service"/>
|
||||
<ROW Directory="service_Dir" Directory_Parent="ASC.ClearEvents_Dir" DefaultDir="service"/>
|
||||
<ROW Directory="services_Dir" Directory_Parent="APPDIR" DefaultDir="services"/>
|
||||
<ROW Directory="tools_Dir" Directory_Parent="APPDIR" DefaultDir="tools"/>
|
||||
<ROW Directory="conf_Dir" Directory_Parent="nginx_Dir" DefaultDir="conf" DirectoryOptions="12"/>
|
||||
<ROW Directory="config_1_Dir" Directory_Parent="NewFolder_Dir" DefaultDir="config" DirectoryOptions="12"/>
|
||||
<ROW Directory="config_2_Dir" Directory_Parent="service_5_Dir" DefaultDir="config" DirectoryOptions="12"/>
|
||||
<ROW Directory="config_Dir" Directory_Parent="APPDIR" DefaultDir="config" DirectoryOptions="12"/>
|
||||
<ROW Directory="editor_Dir" Directory_Parent="ASC.Files_Dir" DefaultDir="editor" DirectoryOptions="12"/>
|
||||
<ROW Directory="includes_Dir" Directory_Parent="conf_Dir" DefaultDir="includes" DirectoryOptions="12"/>
|
||||
<ROW Directory="login_Dir" Directory_Parent="ASC.Login_Dir" DefaultDir="login" DirectoryOptions="12"/>
|
||||
<ROW Directory="logs_Dir" Directory_Parent="nginx_Dir" DefaultDir="logs" DirectoryOptions="12"/>
|
||||
<ROW Directory="nginx_Dir" Directory_Parent="APPDIR" DefaultDir="nginx" DirectoryOptions="12"/>
|
||||
<ROW Directory="products_Dir" Directory_Parent="APPDIR" DefaultDir="products" DirectoryOptions="12"/>
|
||||
<ROW Directory="server_2_Dir" Directory_Parent="ASC.Files_Dir" DefaultDir="server" DirectoryOptions="12"/>
|
||||
<ROW Directory="server_5_Dir" Directory_Parent="ASC.People_Dir" DefaultDir="server" DirectoryOptions="12"/>
|
||||
<ROW Directory="service_11_Dir" Directory_Parent="ASC.Studio.Notify_Dir" DefaultDir="service" DirectoryOptions="12"/>
|
||||
<ROW Directory="service_12_Dir" Directory_Parent="ASC.TelegramService_Dir" DefaultDir="service" DirectoryOptions="12"/>
|
||||
<ROW Directory="service_15_Dir" Directory_Parent="ASC.Web.Api_Dir" DefaultDir="service" DirectoryOptions="12"/>
|
||||
<ROW Directory="service_16_Dir" Directory_Parent="ASC.Web.Studio_Dir" DefaultDir="service" DirectoryOptions="12"/>
|
||||
<ROW Directory="service_1_Dir" Directory_Parent="ASC.Socket.IO_Dir" DefaultDir="service" DirectoryOptions="12"/>
|
||||
<ROW Directory="service_2_Dir" Directory_Parent="ASC.Data.Backup_Dir" DefaultDir="service" DirectoryOptions="12"/>
|
||||
<ROW Directory="service_3_Dir" Directory_Parent="ASC.Data.Backup.BackgroundTasks_Dir" DefaultDir="service" DirectoryOptions="12"/>
|
||||
<ROW Directory="service_4_Dir" Directory_Parent="ASC.Migration_Dir" DefaultDir="service" DirectoryOptions="12"/>
|
||||
<ROW Directory="service_5_Dir" Directory_Parent="ASC.SsoAuth_Dir" DefaultDir="service" DirectoryOptions="12"/>
|
||||
<ROW Directory="service_6_Dir" Directory_Parent="ASC.Migration.Runner_Dir" DefaultDir="service" DirectoryOptions="12"/>
|
||||
<ROW Directory="service_7_Dir" Directory_Parent="ASC.Files.Service_Dir" DefaultDir="service" DirectoryOptions="12"/>
|
||||
<ROW Directory="service_9_Dir" Directory_Parent="ASC.Notify_Dir" DefaultDir="service" DirectoryOptions="12"/>
|
||||
<ROW Directory="service_Dir" Directory_Parent="ASC.ClearEvents_Dir" DefaultDir="service" DirectoryOptions="12"/>
|
||||
<ROW Directory="services_Dir" Directory_Parent="APPDIR" DefaultDir="services" DirectoryOptions="12"/>
|
||||
<ROW Directory="temp_10_Dir" Directory_Parent="service_16_Dir" DefaultDir="temp" DirectoryOptions="12"/>
|
||||
<ROW Directory="temp_11_Dir" Directory_Parent="NewFolder_3_Dir" DefaultDir="temp" DirectoryOptions="12"/>
|
||||
<ROW Directory="temp_12_Dir" Directory_Parent="service_12_Dir" DefaultDir="temp" DirectoryOptions="12"/>
|
||||
<ROW Directory="temp_13_Dir" Directory_Parent="server_2_Dir" DefaultDir="temp" DirectoryOptions="12"/>
|
||||
<ROW Directory="temp_14_Dir" Directory_Parent="server_5_Dir" DefaultDir="temp" DirectoryOptions="12"/>
|
||||
<ROW Directory="temp_1_Dir" Directory_Parent="service_Dir" DefaultDir="temp" DirectoryOptions="12"/>
|
||||
<ROW Directory="temp_2_Dir" Directory_Parent="service_3_Dir" DefaultDir="temp" DirectoryOptions="12"/>
|
||||
<ROW Directory="temp_3_Dir" Directory_Parent="service_7_Dir" DefaultDir="temp" DirectoryOptions="12"/>
|
||||
<ROW Directory="temp_4_Dir" Directory_Parent="service_2_Dir" DefaultDir="temp" DirectoryOptions="12"/>
|
||||
<ROW Directory="temp_5_Dir" Directory_Parent="service_4_Dir" DefaultDir="temp" DirectoryOptions="12"/>
|
||||
<ROW Directory="temp_6_Dir" Directory_Parent="service_6_Dir" DefaultDir="temp" DirectoryOptions="12"/>
|
||||
<ROW Directory="temp_7_Dir" Directory_Parent="service_9_Dir" DefaultDir="temp" DirectoryOptions="12"/>
|
||||
<ROW Directory="temp_8_Dir" Directory_Parent="service_11_Dir" DefaultDir="temp" DirectoryOptions="12"/>
|
||||
<ROW Directory="temp_9_Dir" Directory_Parent="service_15_Dir" DefaultDir="temp" DirectoryOptions="12"/>
|
||||
<ROW Directory="temp_Dir" Directory_Parent="nginx_Dir" DefaultDir="temp" DirectoryOptions="12"/>
|
||||
<ROW Directory="tools_Dir" Directory_Parent="APPDIR" DefaultDir="tools" DirectoryOptions="12"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiCompsComponent">
|
||||
<ROW Component="AI_CustomARPName" ComponentId="{5283455D-3786-42EC-9887-FCF453E2FBF9}" Directory_="APPDIR" Attributes="4" KeyPath="DisplayName" Options="1"/>
|
||||
<ROW Component="AI_DisableModify" ComponentId="{E036B14F-E2E4-4247-B9AB-55C1F6142BF9}" Directory_="APPDIR" Attributes="4" KeyPath="NoModify" Options="1"/>
|
||||
<ROW Component="AI_ExePath" ComponentId="{EDF666FF-8C56-4EB7-8255-67DA879A090C}" Directory_="APPDIR" Attributes="4" KeyPath="AI_ExePath"/>
|
||||
<ROW Component="APPDIR" ComponentId="{E32A4F89-E985-4E8E-AB26-DFCD685A316B}" Directory_="APPDIR" Attributes="0"/>
|
||||
<ROW Component="ASC.ClearEvents" ComponentId="{73FB7C9B-9AA8-4BB6-A2C3-E85F6B5BE1D5}" Directory_="ASC.ClearEvents_Dir" Attributes="0"/>
|
||||
<ROW Component="ASC.ClearEvents.exe" ComponentId="{208F2E9D-F72D-47D8-8B6E-0B85E3EAD12E}" Directory_="service_Dir" Attributes="0" KeyPath="ASC.ClearEvents.exe"/>
|
||||
<ROW Component="ASC.Data.Backup" ComponentId="{DDE1435C-947F-4507-B55B-B0594193F8E4}" Directory_="ASC.Data.Backup_Dir" Attributes="0"/>
|
||||
<ROW Component="ASC.Data.Backup.BackgroundTasks" ComponentId="{E6D04525-2108-45E9-8DC2-AD692A66026A}" Directory_="ASC.Data.Backup.BackgroundTasks_Dir" Attributes="0"/>
|
||||
<ROW Component="ASC.Data.Backup.BackgroundTasks.exe" ComponentId="{CB715B3B-BFC0-4A4D-8B47-B1DB7A99A49E}" Directory_="service_3_Dir" Attributes="0" KeyPath="ASC.Data.Backup.BackgroundTasks.exe"/>
|
||||
<ROW Component="ASC.Data.Backup.exe" ComponentId="{240665F1-DDCF-4FFB-ABEE-2F784ACD87E6}" Directory_="service_2_Dir" Attributes="256" KeyPath="ASC.Data.Backup.exe"/>
|
||||
<ROW Component="ASC.Files" ComponentId="{7D4356CB-8A55-4528-8CF6-E3C6181DC119}" Directory_="ASC.Files_Dir" Attributes="0"/>
|
||||
<ROW Component="ASC.Files.Service" ComponentId="{10E5C648-6B24-40DB-926A-4E26E7ABBE7E}" Directory_="ASC.Files.Service_Dir" Attributes="0"/>
|
||||
<ROW Component="ASC.Files.Service.exe" ComponentId="{14D153CC-E7A6-4818-A310-9CE1F332DCDA}" Directory_="service_7_Dir" Attributes="256" KeyPath="ASC.Files.Service.exe"/>
|
||||
<ROW Component="ASC.Files.exe" ComponentId="{4D48DD81-BABF-4E1C-A216-C72C1EA8428B}" Directory_="server_2_Dir" Attributes="256" KeyPath="ASC.Files.exe"/>
|
||||
<ROW Component="ASC.Login" ComponentId="{323B1636-C7E9-4DA2-8575-92D939FA381F}" Directory_="ASC.Login_Dir" Attributes="0"/>
|
||||
<ROW Component="ASC.Migration" ComponentId="{26C33C84-C6FC-4DDB-8DFA-F7012F29C4EC}" Directory_="ASC.Migration_Dir" Attributes="0"/>
|
||||
<ROW Component="ASC.Migration.Runner" ComponentId="{C03F968B-6259-4CE7-89C7-3236EDD2170C}" Directory_="ASC.Migration.Runner_Dir" Attributes="0"/>
|
||||
<ROW Component="ASC.Migration.Runner.exe" ComponentId="{124E8A20-2ECA-4DC0-ACD9-DBEA64CCF2CF}" Directory_="service_6_Dir" Attributes="256" KeyPath="ASC.Migration.Runner.exe"/>
|
||||
<ROW Component="ASC.Migration.exe" ComponentId="{C65B4FF9-AAE7-41EF-B05F-737FF78DEB4F}" Directory_="service_4_Dir" Attributes="0" KeyPath="ASC.Migration.exe"/>
|
||||
<ROW Component="ASC.Notify" ComponentId="{A94C4D5B-1426-4B3D-ACF5-0C316E4E792D}" Directory_="ASC.Notify_Dir" Attributes="0"/>
|
||||
<ROW Component="ASC.Notify.exe" ComponentId="{7457E31A-B6FC-4A71-A5C0-174C9E965051}" Directory_="service_9_Dir" Attributes="256" KeyPath="ASC.Notify.exe"/>
|
||||
<ROW Component="ASC.People" ComponentId="{8FDAD389-26DF-47BE-8DC5-A9DE5DF3BD22}" Directory_="ASC.People_Dir" Attributes="0"/>
|
||||
<ROW Component="ASC.People.exe" ComponentId="{044D57BC-8BAC-4D64-AB36-141BAA1F2E15}" Directory_="server_5_Dir" Attributes="256" KeyPath="ASC.People.exe"/>
|
||||
<ROW Component="ASC.Socket.IO" ComponentId="{A22A1FDB-2706-4133-812D-0AA1E5B5BF02}" Directory_="ASC.Socket.IO_Dir" Attributes="0"/>
|
||||
<ROW Component="ASC.SsoAuth" ComponentId="{0A4502F2-6D3B-491B-86B1-BDC54C78FE18}" Directory_="ASC.SsoAuth_Dir" Attributes="0"/>
|
||||
<ROW Component="ASC.Studio.Notify" ComponentId="{49CD6FD5-5B49-4CB9-8EDD-654922F11F88}" Directory_="ASC.Studio.Notify_Dir" Attributes="0"/>
|
||||
<ROW Component="ASC.Studio.Notify.exe" ComponentId="{AFB3D13A-4F5B-46E1-8819-3517A228C22B}" Directory_="service_11_Dir" Attributes="256" KeyPath="ASC.Studio.Notify.exe"/>
|
||||
<ROW Component="ASC.TelegramService" ComponentId="{57B76E6A-DEF4-4242-96D4-E43AEBC68A97}" Directory_="ASC.TelegramService_Dir" Attributes="0"/>
|
||||
<ROW Component="ASC.TelegramService.exe" ComponentId="{475A1DBC-3864-434E-86E2-497D70D39BDE}" Directory_="service_12_Dir" Attributes="256" KeyPath="ASC.TelegramService.exe"/>
|
||||
<ROW Component="ASC.UrlShortener" ComponentId="{B5FB450A-789E-4096-BE2D-7E9E92FA665C}" Directory_="ASC.UrlShortener_Dir" Attributes="0"/>
|
||||
<ROW Component="ASC.Web.Api" ComponentId="{CFFB4D5A-23D0-4BD6-BB8D-A62FCE92B883}" Directory_="ASC.Web.Api_Dir" Attributes="0"/>
|
||||
<ROW Component="ASC.Web.Api.exe" ComponentId="{E726DF21-2E7E-4C62-8F6E-C63C65B041EC}" Directory_="service_15_Dir" Attributes="256" KeyPath="ASC.Web.Api.exe"/>
|
||||
<ROW Component="ASC.Web.Studio" ComponentId="{8C58AEA7-5FC3-4506-ACF6-611A801D0426}" Directory_="ASC.Web.Studio_Dir" Attributes="0"/>
|
||||
<ROW Component="ASC.Web.Studio.exe" ComponentId="{00F95035-98D9-44AD-9DB4-B34306EE2170}" Directory_="service_16_Dir" Attributes="256" KeyPath="ASC.Web.Studio.exe"/>
|
||||
<ROW Component="ASC.Webhooks.Service" ComponentId="{9B39D301-7EAD-48C8-A88C-A3570C132D08}" Directory_="ASC.Webhooks.Service_Dir" Attributes="0"/>
|
||||
<ROW Component="ASC.Webhooks.Service.exe" ComponentId="{9D6002C5-A610-4B28-982C-2DB794571878}" Directory_="NewFolder_3_Dir" Attributes="0" KeyPath="ASC.Webhooks.Service.exe"/>
|
||||
<ROW Component="DocEditor.exe" ComponentId="{FBE9155F-9ACD-4A1A-9198-891ED73BA90C}" Directory_="tools_Dir" Attributes="0" KeyPath="DocEditor.exe"/>
|
||||
<ROW Component="Login.exe" ComponentId="{FBE9155F-9ACD-4A1A-9198-891ED73BA202}" Directory_="tools_Dir" Attributes="0" KeyPath="Login.exe"/>
|
||||
<ROW Component="Logs" ComponentId="{6C28AF1C-0190-4DE3-A753-430496711F3C}" Directory_="Logs_Dir" Attributes="0"/>
|
||||
<ROW Component="ProductInformation" ComponentId="{5FB28D19-6A7D-4078-901F-58C2DF0DE176}" Directory_="APPDIR" Attributes="4" KeyPath="Version"/>
|
||||
<ROW Component="Proxy.exe" ComponentId="{913596AD-5C75-4418-8C3A-FAB2A70530DB}" Directory_="tools_Dir" Attributes="0" KeyPath="Proxy.exe"/>
|
||||
<ROW Component="Socket.IO.exe" ComponentId="{D08CDE1C-FB16-49AB-98A2-92FD887774F1}" Directory_="tools_Dir" Attributes="0" KeyPath="Socket.IO.exe"/>
|
||||
<ROW Component="SsoAuth.exe" ComponentId="{B4A48C44-5FC0-43D8-9CFB-EB4A4AAB4169}" Directory_="tools_Dir" Attributes="0" KeyPath="SsoAuth.exe"/>
|
||||
<ROW Component="UrlShortener.exe" ComponentId="{1F1D4189-385A-4AE1-8011-A82ED137DA22}" Directory_="tools_Dir" Attributes="0" KeyPath="UrlShortener.exe"/>
|
||||
<ROW Component="conf" ComponentId="{88EC3AED-DF73-4B66-A228-9A87CFB5519D}" Directory_="conf_Dir" Attributes="0"/>
|
||||
<ROW Component="config" ComponentId="{B58E086D-0CB4-4F53-8411-3AE5A46D1DE4}" Directory_="config_Dir" Attributes="0"/>
|
||||
<ROW Component="config_socketio" ComponentId="{4F28A197-AD56-48D0-9E97-9F88A73BE24E}" Directory_="NewFolder_1_Dir" Attributes="0"/>
|
||||
<ROW Component="config_ssoauth" ComponentId="{D51A4591-143D-4C91-8665-BED153555AC0}" Directory_="config_2_Dir" Attributes="0"/>
|
||||
<ROW Component="config_urlshortener" ComponentId="{3A8A13E2-9BAA-485B-9E09-A6AD3EF70127}" Directory_="config_1_Dir" Attributes="0"/>
|
||||
<ROW Component="favicon.ico" ComponentId="{31B18A50-6FF2-4C5E-8A1F-018247C8C55C}" Directory_="public_Dir" Attributes="0" KeyPath="favicon.ico" Type="0"/>
|
||||
<ROW Component="proxy.exe" ComponentId="{913596AD-5C75-4418-8C3A-FAB2A70530DB}" Directory_="tools_Dir" Attributes="0" KeyPath="proxy.exe"/>
|
||||
<ROW Component="proxy.xml" ComponentId="{92B2BA6A-009B-4731-A0E2-A6C729DC8A68}" Directory_="tools_Dir" Attributes="0" KeyPath="proxy.xml" Type="0"/>
|
||||
<ROW Component="public" ComponentId="{025757D9-89DC-4136-A278-2B273D3A741A}" Directory_="public_Dir" Attributes="0"/>
|
||||
<ROW Component="editor" ComponentId="{7BB6D12C-B38B-435D-8A86-2D5D2AB0543F}" Directory_="editor_Dir" Attributes="0"/>
|
||||
<ROW Component="includes" ComponentId="{6F7827D0-7F14-4F09-BB3C-98E0633F5D1B}" Directory_="includes_Dir" Attributes="0"/>
|
||||
<ROW Component="login" ComponentId="{17166A18-3A7B-44FF-A6A3-0938FD45B107}" Directory_="login_Dir" Attributes="0"/>
|
||||
<ROW Component="logs" ComponentId="{183C2BF5-A348-407D-BEB4-8A5A6C3D7DB8}" Directory_="logs_Dir" Attributes="0"/>
|
||||
<ROW Component="nginx" ComponentId="{F6782189-7D44-4DDE-B1A5-5DF8D2B839F5}" Directory_="nginx_Dir" Attributes="0"/>
|
||||
<ROW Component="products" ComponentId="{5A3B0279-AFE0-456F-9685-5422D5E731B6}" Directory_="products_Dir" Attributes="0"/>
|
||||
<ROW Component="server_ASC.Files" ComponentId="{8B02814C-6260-4A36-8C09-26AF31CDE52A}" Directory_="server_2_Dir" Attributes="0"/>
|
||||
<ROW Component="server_ASC.People" ComponentId="{BDBA6378-A15F-44CC-BD6E-232FB7CFBA59}" Directory_="server_5_Dir" Attributes="0"/>
|
||||
<ROW Component="service_ASC.ClearEvents" ComponentId="{1BDE62CE-18DF-4372-9B95-41287FA84740}" Directory_="service_Dir" Attributes="0"/>
|
||||
<ROW Component="service_ASC.Data.Backup" ComponentId="{F5899AA1-8093-4BB3-862C-34A782831A72}" Directory_="service_2_Dir" Attributes="0"/>
|
||||
<ROW Component="service_ASC.Data.Backup.BachgroundTasks" ComponentId="{CCF47514-0441-44B9-A77D-C4E5619638BB}" Directory_="service_3_Dir" Attributes="0"/>
|
||||
<ROW Component="service_ASC.File.Service" ComponentId="{C94C9F5B-91E0-4AE3-8A7B-752198128A1E}" Directory_="service_7_Dir" Attributes="0"/>
|
||||
<ROW Component="service_ASC.Migration" ComponentId="{F209787D-632E-4E20-8415-7D71DBAE5B5A}" Directory_="service_4_Dir" Attributes="0"/>
|
||||
<ROW Component="service_ASC.Migration.Runner" ComponentId="{A21DD084-2228-4E0E-9F32-7A04F6766F8D}" Directory_="service_6_Dir" Attributes="0"/>
|
||||
<ROW Component="service_ASC.Notify" ComponentId="{1A0897FF-9EBE-4D01-AFC5-3CBF264CA6C2}" Directory_="service_9_Dir" Attributes="0"/>
|
||||
<ROW Component="service_ASC.Socket.IO" ComponentId="{F050F8C3-24CF-45F6-AFA4-05F2C121BA1E}" Directory_="service_1_Dir" Attributes="0"/>
|
||||
<ROW Component="service_ASC.SsoAuth" ComponentId="{1DD71548-898E-4C6D-9D54-7DB4ABF7E976}" Directory_="service_5_Dir" Attributes="0"/>
|
||||
<ROW Component="service_ASC.Studio.Notify" ComponentId="{C30289A6-F81B-4C4B-9C77-969DBD83EF66}" Directory_="service_11_Dir" Attributes="0"/>
|
||||
<ROW Component="service_ASC.TelegramService" ComponentId="{1CB6D2E9-EE2F-4FEC-82E6-77B775303032}" Directory_="service_12_Dir" Attributes="0"/>
|
||||
<ROW Component="service_ASC.Urlshortner" ComponentId="{B8D83118-B7EA-4C8D-85AD-01A0098561D9}" Directory_="NewFolder_Dir" Attributes="0"/>
|
||||
<ROW Component="service_ASC.Web.Studio" ComponentId="{24E30A59-BC9C-4497-9B31-9FDD1130851B}" Directory_="service_16_Dir" Attributes="0"/>
|
||||
<ROW Component="service_ASC.WebApi" ComponentId="{C9664C57-4333-4E95-B94E-E78C6CB28058}" Directory_="service_15_Dir" Attributes="0"/>
|
||||
<ROW Component="service_ASC.Webhooks.Service" ComponentId="{EB2FD18F-FEAD-4C36-9B8B-556E7D84AE28}" Directory_="NewFolder_3_Dir" Attributes="0"/>
|
||||
<ROW Component="services" ComponentId="{8F9FE4E0-772E-487A-A61D-7019807D88D4}" Directory_="services_Dir" Attributes="0"/>
|
||||
<ROW Component="temp_ASC.ClearEvents" ComponentId="{0D0BC98A-425B-4217-B420-4DA6B25F23DD}" Directory_="temp_1_Dir" Attributes="0"/>
|
||||
<ROW Component="temp_ASC.Data.Backup.BackgroundTasks" ComponentId="{29E2557D-6012-44B2-A9D4-D773157411E2}" Directory_="temp_2_Dir" Attributes="0"/>
|
||||
<ROW Component="temp_ASC.Data.Buckup" ComponentId="{53DD808E-59C8-471C-8F2B-05F7ED92D2A7}" Directory_="temp_4_Dir" Attributes="0"/>
|
||||
<ROW Component="temp_ASC.File.Service" ComponentId="{D36D733E-3659-46FB-9127-876F179702BD}" Directory_="temp_3_Dir" Attributes="0"/>
|
||||
<ROW Component="temp_ASC.Files" ComponentId="{B25665D3-EB6F-4010-A93A-2423983A426A}" Directory_="temp_13_Dir" Attributes="0"/>
|
||||
<ROW Component="temp_ASC.Migration" ComponentId="{BEA71B3C-222C-4565-B0D1-A5671BE029F5}" Directory_="temp_5_Dir" Attributes="0"/>
|
||||
<ROW Component="temp_ASC.Migration.Runner" ComponentId="{3B95B108-8CEE-487D-AE0B-2E93C1749611}" Directory_="temp_6_Dir" Attributes="0"/>
|
||||
<ROW Component="temp_ASC.Notify" ComponentId="{471221C5-3F91-476D-B87F-F504AC55D9A6}" Directory_="temp_7_Dir" Attributes="0"/>
|
||||
<ROW Component="temp_ASC.People" ComponentId="{F4E45171-654B-455B-A261-A7C52830AEC0}" Directory_="temp_14_Dir" Attributes="0"/>
|
||||
<ROW Component="temp_ASC.Studio.Notify" ComponentId="{F61A9699-F7DF-47F7-BE8B-B57ED43CCAC6}" Directory_="temp_8_Dir" Attributes="0"/>
|
||||
<ROW Component="temp_ASC.TelegramService" ComponentId="{0BF04783-7F52-4926-B269-E1C6B9C90CF8}" Directory_="temp_12_Dir" Attributes="0"/>
|
||||
<ROW Component="temp_ASC.Web.Api" ComponentId="{BBE4771E-AF81-4B40-84C8-AACD26A8AAEE}" Directory_="temp_9_Dir" Attributes="0"/>
|
||||
<ROW Component="temp_ASC.Web.Studio" ComponentId="{50C05886-70FB-42A5-B4F9-333B317B1E25}" Directory_="temp_10_Dir" Attributes="0"/>
|
||||
<ROW Component="temp_ASC.Webhooks.Service" ComponentId="{21F5F636-660F-4116-9DB2-9BFDC0365708}" Directory_="temp_11_Dir" Attributes="0"/>
|
||||
<ROW Component="temp_nginx" ComponentId="{44C32C3C-30B2-4FB2-B6C0-F88B4C3F3F26}" Directory_="temp_Dir" Attributes="0"/>
|
||||
<ROW Component="tools" ComponentId="{3BE057FE-EC94-4514-8961-A8660D9E6EB4}" Directory_="tools_Dir" Attributes="0"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiFeatsComponent">
|
||||
<ROW Feature="MainFeature" Title="MainFeature" Description="Description" Display="1" Level="1" Directory_="APPDIR" Attributes="0"/>
|
||||
@ -174,20 +262,17 @@
|
||||
<ROW File="ASC.TelegramService.exe" Component_="ASC.TelegramService.exe" FileName="ASCTEL~1.EXE|ASC.TelegramService.exe" Attributes="0" SourcePath="Files\services\ASC.TelegramService\service\ASC.TelegramService.exe" SelfReg="false" DigSign="true"/>
|
||||
<ROW File="ASC.Web.Studio.exe" Component_="ASC.Web.Studio.exe" FileName="ASCWEB~1.EXE|ASC.Web.Studio.exe" Attributes="0" SourcePath="Files\services\ASC.Web.Studio\service\ASC.Web.Studio.exe" SelfReg="false" DigSign="true"/>
|
||||
<ROW File="ASC.Web.Api.exe" Component_="ASC.Web.Api.exe" FileName="ASCWEB~1.EXE|ASC.Web.Api.exe" Attributes="0" SourcePath="Files\services\ASC.Web.Api\service\ASC.Web.Api.exe" SelfReg="false" DigSign="true"/>
|
||||
<ROW File="proxy.exe" Component_="proxy.exe" FileName="ONLYO~13.EXE|proxy.exe" Attributes="0" SourcePath="Files\tools\proxy.exe" SelfReg="false" DigSign="true"/>
|
||||
<ROW File="proxy.xml" Component_="proxy.xml" FileName="ONLYO~13.XML|proxy.xml" Attributes="0" SourcePath="Files\tools\proxy.xml" SelfReg="false"/>
|
||||
<ROW File="Proxy.exe" Component_="Proxy.exe" FileName="Proxy.exe" Attributes="0" SourcePath="Files\tools\Proxy.exe" SelfReg="false" DigSign="true"/>
|
||||
<ROW File="Socket.IO.exe" Component_="Socket.IO.exe" FileName="SOCKET~1.EXE|Socket.IO.exe" Attributes="0" SourcePath="Files\tools\Socket.IO.exe" SelfReg="false" DigSign="true"/>
|
||||
<ROW File="Socket.IO.xml" Component_="proxy.xml" FileName="SOCKET~1.XML|Socket.IO.xml" Attributes="0" SourcePath="Files\tools\Socket.IO.xml" SelfReg="false"/>
|
||||
<ROW File="SsoAuth.exe" Component_="SsoAuth.exe" FileName="SsoAuth.exe" Attributes="0" SourcePath="Files\tools\SsoAuth.exe" SelfReg="false" DigSign="true"/>
|
||||
<ROW File="SsoAuth.xml" Component_="proxy.xml" FileName="SsoAuth.xml" Attributes="0" SourcePath="Files\tools\SsoAuth.xml" SelfReg="false"/>
|
||||
<ROW File="UrlShortener.exe" Component_="UrlShortener.exe" FileName="URLSHO~1.EXE|UrlShortener.exe" Attributes="0" SourcePath="Files\tools\UrlShortener.exe" SelfReg="false" DigSign="true"/>
|
||||
<ROW File="UrlShortener.xml" Component_="proxy.xml" FileName="URLSHO~1.XML|UrlShortener.xml" Attributes="0" SourcePath="Files\tools\UrlShortener.xml" SelfReg="false"/>
|
||||
<ROW File="ASC.ClearEvents.exe" Component_="ASC.ClearEvents.exe" FileName="ASCCLE~1.EXE|ASC.ClearEvents.exe" Attributes="0" SourcePath="Files\services\ASC.ClearEvents\service\ASC.ClearEvents.exe" SelfReg="false" DigSign="true"/>
|
||||
<ROW File="ASC.Data.Backup.BackgroundTasks.exe" Component_="ASC.Data.Backup.BackgroundTasks.exe" FileName="ASCDAT~1.EXE|ASC.Data.Backup.BackgroundTasks.exe" Attributes="0" SourcePath="Files\services\ASC.Data.Backup.BackgroundTasks\service\ASC.Data.Backup.BackgroundTasks.exe" SelfReg="false" DigSign="true"/>
|
||||
<ROW File="ASC.Migration.exe" Component_="ASC.Migration.exe" FileName="ASCMIG~1.EXE|ASC.Migration.exe" Attributes="0" SourcePath="Files\services\ASC.Migration\service\ASC.Migration.exe" SelfReg="false" DigSign="true"/>
|
||||
<ROW File="ASC.Webhooks.Service.exe" Component_="ASC.Webhooks.Service.exe" FileName="ASCWEB~1.EXE|ASC.Webhooks.Service.exe" Attributes="0" SourcePath="Files\services\ASC.Webhooks.Service\service\ASC.Webhooks.Service.exe" SelfReg="false" DigSign="true"/>
|
||||
<ROW File="ASC.Migration.Runner.exe" Component_="ASC.Migration.Runner.exe" FileName="ASCMIG~2.EXE|ASC.Migration.Runner.exe" Attributes="0" SourcePath="Files\services\ASC.Migration.Runner\service\ASC.Migration.Runner.exe" SelfReg="false" DigSign="true"/>
|
||||
<ROW File="favicon.ico" Component_="favicon.ico" FileName="favicon.ico" Attributes="0" SourcePath="Files\public\favicon.ico" SelfReg="false" DigSign="true"/>
|
||||
<ROW File="DocEditor.exe" Component_="DocEditor.exe" FileName="DOCEDI~1.EXE|DocEditor.exe" Attributes="0" SourcePath="Files\tools\DocEditor.exe" SelfReg="false" DigSign="true"/>
|
||||
<ROW File="Login.exe" Component_="Login.exe" FileName="LOGIN~1.EXE|Login.exe" Attributes="0" SourcePath="Files\tools\Login.exe" SelfReg="false" DigSign="true"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.BootstrOptComponent">
|
||||
<ROW BootstrOptKey="GlobalOptions" DownloadFolder="[AppDataFolder][|Manufacturer]\[|ProductName]\prerequisites" Options="2"/>
|
||||
@ -222,15 +307,79 @@
|
||||
<ROW Fragment="WelcomePrereqDlg.aip" Path="<AI_THEMES>classic\fragments\WelcomePrereqDlg.aip"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.JsonFileComponent">
|
||||
<ROW JsonFile="Newfile.json_1" FileName="APPSET~1.JSO|appsettings.test.json" DirProperty="config_Dir" Component="AI_ExePath" RootProperty="Root_1" Flags="6" IndentUnits="2"/>
|
||||
<ROW JsonFile="Newfile.json" FileName="ELASTI~1.JSO|elastic.test.json" DirProperty="config_Dir" Component="config" RootProperty="Root" Flags="6" IndentUnits="2"/>
|
||||
<ROW JsonFile="Newfile.json_1" FileName="APPSET~1.JSO|appsettings.test.json" DirProperty="config_Dir" Component="config" RootProperty="Root_1" Flags="6" IndentUnits="2"/>
|
||||
<ROW JsonFile="Newfile.json_2" FileName="RABBIT~1.JSO|rabbitmq.test.json" DirProperty="config_Dir" Component="config" RootProperty="Root_2" Flags="6" IndentUnits="2"/>
|
||||
<ROW JsonFile="Newfile.json_3" FileName="REDIST~1.JSO|redis.test.json" DirProperty="config_Dir" Component="config" RootProperty="Root_3" Flags="6" IndentUnits="2"/>
|
||||
<ROW JsonFile="Newfile.json_4" FileName="APPSET~2.JSO|appsettings.services.json" DirProperty="config_Dir" Component="config" RootProperty="Root_4" Flags="6" IndentUnits="2"/>
|
||||
<ROW JsonFile="Newfile.json_5" FileName="APPSET~3.JSO|appsettings.json" DirProperty="config_Dir" Component="config" RootProperty="Root_5" Flags="6" IndentUnits="2"/>
|
||||
<ROW JsonFile="Newfile.json_6" FileName="CONFIG~1.JSO|config.json" DirProperty="NewFolder_1_Dir" Component="config_socketio" RootProperty="Root_6" Flags="6" IndentUnits="2"/>
|
||||
<ROW JsonFile="config.json" FileName="CONFIG~1.JSO|config.json" DirProperty="config_2_Dir" Component="config_ssoauth" RootProperty="Root_7" Flags="6" IndentUnits="2"/>
|
||||
<ROW JsonFile="config.json_1" FileName="CONFIG~1.JSO|config.json" DirProperty="config_1_Dir" Component="config_urlshortener" RootProperty="Root_8" Flags="6" IndentUnits="2"/>
|
||||
<ROW JsonFile="config.json_2" FileName="CONFIG~1.JSO|config.json" DirProperty="login_Dir" Component="login" RootProperty="Root_9" Flags="6" IndentUnits="2"/>
|
||||
<ROW JsonFile="config.json_3" FileName="CONFIG~1.JSO|config.json" DirProperty="editor_Dir" Component="editor" RootProperty="Root_10" Flags="6" IndentUnits="2"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.JsonPropertyComponent">
|
||||
<ROW JsonProperty="ConnectionStrings_1" Parent="Root_1" Name="ConnectionStrings" Condition="1" Order="0" Flags="60"/>
|
||||
<ROW JsonProperty="Host" Parent="elastic" Name="Host" Condition="1" Order="0" Flags="57" Value="[ELASTICSEARCH_HOST]"/>
|
||||
<ROW JsonProperty="Host_1" Parent="_" Name="Host" Condition="1" Order="0" Flags="57" Value="[REDIS_HOST_PROP]"/>
|
||||
<ROW JsonProperty="Hostname" Parent="RabbitMQ" Name="Hostname" Condition="1" Order="0" Flags="57" Value="[RABBITMQ_HOSTNAME_PROP]"/>
|
||||
<ROW JsonProperty="Hosts" Parent="Redis" Name="Hosts" Condition="1" Order="0" Flags="61"/>
|
||||
<ROW JsonProperty="PORT" Parent="Root_9" Name="PORT" Condition="1" Order="1" Flags="57" Value="[Login_Port]"/>
|
||||
<ROW JsonProperty="PORT_1" Parent="Root_10" Name="PORT" Condition="1" Order="1" Flags="57" Value="[Editor_Port]"/>
|
||||
<ROW JsonProperty="Password" Parent="RabbitMQ" Name="Password" Condition="1" Order="2" Flags="57" Value="[RABBITMQ_PASSWORD_PROP]"/>
|
||||
<ROW JsonProperty="Port" Parent="elastic" Name="Port" Condition="1" Order="2" Flags="57" Value="[ELASTICSEARCH_PORT]"/>
|
||||
<ROW JsonProperty="Port_1" Parent="RabbitMQ" Name="Port" Condition="1" Order="3" Flags="59" Value="[RABBITMQ_PORT_PROP]"/>
|
||||
<ROW JsonProperty="Port_2" Parent="_" Name="Port" Condition="1" Order="1" Flags="57" Value="[REDIS_PORT_PROP]"/>
|
||||
<ROW JsonProperty="RabbitMQ" Parent="Root_2" Name="RabbitMQ" Condition="1" Order="0" Flags="60"/>
|
||||
<ROW JsonProperty="Redis" Parent="Root_3" Name="Redis" Condition="1" Order="0" Flags="60"/>
|
||||
<ROW JsonProperty="Root" Name="Root" Condition="1" Order="0" Flags="60"/>
|
||||
<ROW JsonProperty="Root_1" Name="Root" Condition="1" Order="0" Flags="60"/>
|
||||
<ROW JsonProperty="Root_10" Name="Root" Condition="1" Order="0" Flags="60"/>
|
||||
<ROW JsonProperty="Root_2" Name="Root" Condition="1" Order="0" Flags="60"/>
|
||||
<ROW JsonProperty="Root_3" Name="Root" Condition="1" Order="0" Flags="60"/>
|
||||
<ROW JsonProperty="Root_4" Name="Root" Condition="1" Order="0" Flags="60"/>
|
||||
<ROW JsonProperty="Root_5" Name="Root" Condition="1" Order="0" Flags="60"/>
|
||||
<ROW JsonProperty="Root_6" Name="Root" Condition="1" Order="0" Flags="60"/>
|
||||
<ROW JsonProperty="Root_7" Name="Root" Condition="1" Order="0" Flags="60"/>
|
||||
<ROW JsonProperty="Root_8" Name="Root" Condition="1" Order="0" Flags="60"/>
|
||||
<ROW JsonProperty="Root_9" Name="Root" Condition="1" Order="0" Flags="60"/>
|
||||
<ROW JsonProperty="Scheme" Parent="elastic" Name="Scheme" Condition="1" Order="1" Flags="57" Value="[ELASTICSEARCH_SCHEME]"/>
|
||||
<ROW JsonProperty="UserName" Parent="RabbitMQ" Name="UserName" Condition="1" Order="1" Flags="57" Value="[RABBITMQ_USERNAME_PROP]"/>
|
||||
<ROW JsonProperty="VirtualHost" Parent="RabbitMQ" Name="VirtualHost" Condition="1" Order="4" Flags="57" Value="[RABBITMQ_VIRTUALHOST_PROP]"/>
|
||||
<ROW JsonProperty="_" Parent="Hosts" Name="0" Condition="1" Order="0" Flags="60"/>
|
||||
<ROW JsonProperty="app" Parent="Root_6" Name="app" Condition="1" Order="0" Flags="60"/>
|
||||
<ROW JsonProperty="app_1" Parent="Root_7" Name="app" Condition="1" Order="0" Flags="60"/>
|
||||
<ROW JsonProperty="app_2" Parent="Root_8" Name="app" Condition="1" Order="0" Flags="60"/>
|
||||
<ROW JsonProperty="app_3" Parent="Root_9" Name="app" Condition="1" Order="0" Flags="60"/>
|
||||
<ROW JsonProperty="app_4" Parent="Root_10" Name="app" Condition="1" Order="0" Flags="60"/>
|
||||
<ROW JsonProperty="appsettings" Parent="app" Name="appsettings" Condition="1" Order="1" Flags="57" Value="[APPDIR_FORWARD_SLASH]config"/>
|
||||
<ROW JsonProperty="appsettings_1" Parent="app_1" Name="appsettings" Condition="1" Order="1" Flags="57" Value="[APPDIR_FORWARD_SLASH]config"/>
|
||||
<ROW JsonProperty="appsettings_2" Parent="app_2" Name="appsettings" Condition="1" Order="1" Flags="57" Value="[APPDIR_FORWARD_SLASH]config"/>
|
||||
<ROW JsonProperty="appsettings_3" Parent="app_3" Name="appsettings" Condition="1" Order="0" Flags="57" Value="[APPDIR_FORWARD_SLASH]config"/>
|
||||
<ROW JsonProperty="appsettings_4" Parent="app_4" Name="appsettings" Condition="1" Order="0" Flags="57" Value="[APPDIR_FORWARD_SLASH]config"/>
|
||||
<ROW JsonProperty="connectionString_1" Parent="default_1" Name="connectionString" Condition="1" Order="0" Flags="57" Value="Server=[SERVER_PROP];Port=3306;Database=[DATABASE_PROP];User ID=[USERNAME_PROP];Password=[PASSWORD_PROP];Pooling=true;Character Set=utf8;AutoEnlist=false;SSL Mode=none"/>
|
||||
<ROW JsonProperty="core" Parent="Root_4" Name="core" Condition="1" Order="0" Flags="60"/>
|
||||
<ROW JsonProperty="core_1" Parent="Root_5" Name="core" Condition="1" Order="0" Flags="60"/>
|
||||
<ROW JsonProperty="core_2" Parent="Root_1" Name="core" Condition="1" Order="2" Flags="60"/>
|
||||
<ROW JsonProperty="default_1" Parent="ConnectionStrings_1" Name="default" Condition="1" Order="0" Flags="60"/>
|
||||
<ROW JsonProperty="elastic" Parent="Root" Name="elastic" Condition="1" Order="0" Flags="60"/>
|
||||
<ROW JsonProperty="enabled" Parent="migration" Name="enabled" Condition="1" Order="0" Flags="57" Value="[DATABASE_MIGRATION]"/>
|
||||
<ROW JsonProperty="environment" Parent="app" Name="environment" Condition="1" Order="2" Flags="57" Value="[ENVIRONMENT]"/>
|
||||
<ROW JsonProperty="environment_1" Parent="app_1" Name="environment" Condition="1" Order="2" Flags="57" Value="[ENVIRONMENT]"/>
|
||||
<ROW JsonProperty="environment_2" Parent="app_2" Name="environment" Condition="1" Order="2" Flags="57" Value="[ENVIRONMENT]"/>
|
||||
<ROW JsonProperty="folder" Parent="products" Name="folder" Condition="1" Order="0" Flags="57" Value="[APPDIR_FORWARD_SLASH]products"/>
|
||||
<ROW JsonProperty="folder_1" Parent="products_1" Name="folder" Condition="1" Order="0" Flags="57" Value="[APPDIR_FORWARD_SLASH]products"/>
|
||||
<ROW JsonProperty="logPath" Parent="Root_4" Name="logPath" Condition="1" Order="1" Flags="57" Value="[APPDIR_FORWARD_SLASH]Logs"/>
|
||||
<ROW JsonProperty="machinekey" Parent="core_2" Name="machinekey" Condition="1" Order="0" Flags="57" Value="[MACHINE_KEY]"/>
|
||||
<ROW JsonProperty="machinekey_1" Parent="app_1" Name="machinekey" Condition="1" Order="3" Flags="57" Value="[MACHINE_KEY]"/>
|
||||
<ROW JsonProperty="machinekey_2" Parent="core_1" Name="machinekey" Condition="1" Order="0" Flags="57" Value="[MACHINE_KEY]"/>
|
||||
<ROW JsonProperty="migration" Parent="Root_1" Name="migration" Condition="1" Order="1" Flags="60"/>
|
||||
<ROW JsonProperty="port" Parent="app" Name="port" Condition="1" Order="0" Flags="57" Value="[Socket.IO_Port]"/>
|
||||
<ROW JsonProperty="port_1" Parent="app_1" Name="port" Condition="1" Order="0" Flags="57" Value="[SsoAuth_port]"/>
|
||||
<ROW JsonProperty="port_2" Parent="app_2" Name="port" Condition="1" Order="0" Flags="57" Value="[UrlShortener_Port]"/>
|
||||
<ROW JsonProperty="products" Parent="core" Name="products" Condition="1" Order="0" Flags="60"/>
|
||||
<ROW JsonProperty="products_1" Parent="core_2" Name="products" Condition="1" Order="1" Flags="60"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiActionTextComponent">
|
||||
<ROW Action="AI_ConfigFailActions" Description="Configure service failure actions" DescriptionLocId="ActionText.Description.AI_ConfigFailActions" Template="Service: [1]" TemplateLocId="ActionText.Template.AI_ConfigFailActions"/>
|
||||
@ -255,7 +404,6 @@
|
||||
<ROW Property="AI_SETUPEXEPATH" Signature_="AI_EXE_PATH_CU" Builds="DefaultBuild"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiBinaryComponent">
|
||||
<ROW Name="PowerShellScriptLauncher.dll" SourcePath="<AI_CUSTACTS>PowerShellScriptLauncher.dll"/>
|
||||
<ROW Name="Prereq.dll" SourcePath="<AI_CUSTACTS>Prereq.dll"/>
|
||||
<ROW Name="SoftwareDetector.dll" SourcePath="<AI_CUSTACTS>SoftwareDetector.dll"/>
|
||||
<ROW Name="TxtUpdater.dll" SourcePath="<AI_CUSTACTS>TxtUpdater.dll"/>
|
||||
@ -265,6 +413,7 @@
|
||||
<ROW Name="dialog.bmp" SourcePath="Resources\dialog.bmp"/>
|
||||
<ROW Name="jsonCfg.dll" SourcePath="<AI_CUSTACTS>jsonCfg.dll"/>
|
||||
<ROW Name="lzmaextractor.dll" SourcePath="<AI_CUSTACTS>lzmaextractor.dll"/>
|
||||
<ROW Name="userAccounts.dll" SourcePath="<AI_CUSTACTS>userAccounts.dll"/>
|
||||
<ROW Name="utils.vbs" SourcePath="utils.vbs"/>
|
||||
<ROW Name="viewer.exe" SourcePath="<AI_CUSTACTS>viewer.exe"/>
|
||||
</COMPONENT>
|
||||
@ -578,12 +727,72 @@
|
||||
<ROW Directory_="config_1_Dir" Component_="config_urlshortener" ManualDelete="false"/>
|
||||
<ROW Directory_="config_2_Dir" Component_="config_ssoauth" ManualDelete="false"/>
|
||||
<ROW Directory_="NewFolder_1_Dir" Component_="config_socketio" ManualDelete="false"/>
|
||||
<ROW Directory_="public_Dir" Component_="public" ManualDelete="true"/>
|
||||
<ROW Directory_="login_Dir" Component_="login" ManualDelete="false"/>
|
||||
<ROW Directory_="editor_Dir" Component_="editor" ManualDelete="false"/>
|
||||
<ROW Directory_="conf_Dir" Component_="conf" ManualDelete="false"/>
|
||||
<ROW Directory_="includes_Dir" Component_="includes" ManualDelete="false"/>
|
||||
<ROW Directory_="nginx_Dir" Component_="nginx" ManualDelete="false"/>
|
||||
<ROW Directory_="tools_Dir" Component_="tools" ManualDelete="false"/>
|
||||
<ROW Directory_="products_Dir" Component_="products" ManualDelete="false"/>
|
||||
<ROW Directory_="ASC.Files_Dir" Component_="ASC.Files" ManualDelete="false"/>
|
||||
<ROW Directory_="server_2_Dir" Component_="server_ASC.Files" ManualDelete="false"/>
|
||||
<ROW Directory_="ASC.Login_Dir" Component_="ASC.Login" ManualDelete="false"/>
|
||||
<ROW Directory_="ASC.People_Dir" Component_="ASC.People" ManualDelete="false"/>
|
||||
<ROW Directory_="server_5_Dir" Component_="server_ASC.People" ManualDelete="false"/>
|
||||
<ROW Directory_="services_Dir" Component_="services" ManualDelete="false"/>
|
||||
<ROW Directory_="ASC.Migration.Runner_Dir" Component_="ASC.Migration.Runner" ManualDelete="false"/>
|
||||
<ROW Directory_="service_6_Dir" Component_="service_ASC.Migration.Runner" ManualDelete="false"/>
|
||||
<ROW Directory_="ASC.ClearEvents_Dir" Component_="ASC.ClearEvents" ManualDelete="false"/>
|
||||
<ROW Directory_="service_Dir" Component_="service_ASC.ClearEvents" ManualDelete="false"/>
|
||||
<ROW Directory_="ASC.UrlShortener_Dir" Component_="ASC.UrlShortener" ManualDelete="false"/>
|
||||
<ROW Directory_="NewFolder_Dir" Component_="service_ASC.Urlshortner" ManualDelete="false"/>
|
||||
<ROW Directory_="ASC.Data.Backup.BackgroundTasks_Dir" Component_="ASC.Data.Backup.BackgroundTasks" ManualDelete="false"/>
|
||||
<ROW Directory_="service_3_Dir" Component_="service_ASC.Data.Backup.BachgroundTasks" ManualDelete="false"/>
|
||||
<ROW Directory_="ASC.Socket.IO_Dir" Component_="ASC.Socket.IO" ManualDelete="false"/>
|
||||
<ROW Directory_="service_1_Dir" Component_="service_ASC.Socket.IO" ManualDelete="false"/>
|
||||
<ROW Directory_="ASC.Data.Backup_Dir" Component_="ASC.Data.Backup" ManualDelete="false"/>
|
||||
<ROW Directory_="service_2_Dir" Component_="service_ASC.Data.Backup" ManualDelete="false"/>
|
||||
<ROW Directory_="ASC.Migration_Dir" Component_="ASC.Migration" ManualDelete="false"/>
|
||||
<ROW Directory_="service_4_Dir" Component_="service_ASC.Migration" ManualDelete="false"/>
|
||||
<ROW Directory_="ASC.Files.Service_Dir" Component_="ASC.Files.Service" ManualDelete="false"/>
|
||||
<ROW Directory_="service_7_Dir" Component_="service_ASC.File.Service" ManualDelete="false"/>
|
||||
<ROW Directory_="ASC.TelegramService_Dir" Component_="ASC.TelegramService" ManualDelete="false"/>
|
||||
<ROW Directory_="service_12_Dir" Component_="service_ASC.TelegramService" ManualDelete="false"/>
|
||||
<ROW Directory_="ASC.Notify_Dir" Component_="ASC.Notify" ManualDelete="false"/>
|
||||
<ROW Directory_="service_9_Dir" Component_="service_ASC.Notify" ManualDelete="false"/>
|
||||
<ROW Directory_="ASC.SsoAuth_Dir" Component_="ASC.SsoAuth" ManualDelete="false"/>
|
||||
<ROW Directory_="service_5_Dir" Component_="service_ASC.SsoAuth" ManualDelete="false"/>
|
||||
<ROW Directory_="ASC.Studio.Notify_Dir" Component_="ASC.Studio.Notify" ManualDelete="false"/>
|
||||
<ROW Directory_="service_11_Dir" Component_="service_ASC.Studio.Notify" ManualDelete="false"/>
|
||||
<ROW Directory_="ASC.Web.Api_Dir" Component_="ASC.Web.Api" ManualDelete="false"/>
|
||||
<ROW Directory_="service_15_Dir" Component_="service_ASC.WebApi" ManualDelete="false"/>
|
||||
<ROW Directory_="ASC.Web.Studio_Dir" Component_="ASC.Web.Studio" ManualDelete="false"/>
|
||||
<ROW Directory_="service_16_Dir" Component_="service_ASC.Web.Studio" ManualDelete="false"/>
|
||||
<ROW Directory_="ASC.Webhooks.Service_Dir" Component_="ASC.Webhooks.Service" ManualDelete="false"/>
|
||||
<ROW Directory_="NewFolder_3_Dir" Component_="service_ASC.Webhooks.Service" ManualDelete="false"/>
|
||||
<ROW Directory_="Logs_Dir" Component_="Logs" ManualDelete="false"/>
|
||||
<ROW Directory_="temp_Dir" Component_="temp_nginx" ManualDelete="false"/>
|
||||
<ROW Directory_="logs_Dir" Component_="logs" ManualDelete="false"/>
|
||||
<ROW Directory_="temp_1_Dir" Component_="temp_ASC.ClearEvents" ManualDelete="false"/>
|
||||
<ROW Directory_="temp_2_Dir" Component_="temp_ASC.Data.Backup.BackgroundTasks" ManualDelete="false"/>
|
||||
<ROW Directory_="temp_3_Dir" Component_="temp_ASC.File.Service" ManualDelete="false"/>
|
||||
<ROW Directory_="temp_4_Dir" Component_="temp_ASC.Data.Buckup" ManualDelete="false"/>
|
||||
<ROW Directory_="temp_5_Dir" Component_="temp_ASC.Migration" ManualDelete="false"/>
|
||||
<ROW Directory_="temp_6_Dir" Component_="temp_ASC.Migration.Runner" ManualDelete="false"/>
|
||||
<ROW Directory_="temp_7_Dir" Component_="temp_ASC.Notify" ManualDelete="false"/>
|
||||
<ROW Directory_="temp_8_Dir" Component_="temp_ASC.Studio.Notify" ManualDelete="false"/>
|
||||
<ROW Directory_="temp_9_Dir" Component_="temp_ASC.Web.Api" ManualDelete="false"/>
|
||||
<ROW Directory_="temp_10_Dir" Component_="temp_ASC.Web.Studio" ManualDelete="false"/>
|
||||
<ROW Directory_="temp_11_Dir" Component_="temp_ASC.Webhooks.Service" ManualDelete="false"/>
|
||||
<ROW Directory_="temp_12_Dir" Component_="temp_ASC.TelegramService" ManualDelete="false"/>
|
||||
<ROW Directory_="temp_13_Dir" Component_="temp_ASC.Files" ManualDelete="false"/>
|
||||
<ROW Directory_="temp_14_Dir" Component_="temp_ASC.People" ManualDelete="false"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiCustActComponent">
|
||||
<ROW Action="AI_AppSearchEx" Type="1" Source="Prereq.dll" Target="DoAppSearchEx"/>
|
||||
<ROW Action="AI_BACKUP_AI_SETUPEXEPATH" Type="51" Source="AI_SETUPEXEPATH_ORIGINAL" Target="[AI_SETUPEXEPATH]"/>
|
||||
<ROW Action="AI_ConfigFailActions" Type="11265" Source="aicustact.dll" Target="ConfigureServFailActions" WithoutSeq="true"/>
|
||||
<ROW Action="AI_ConfigPermissions" Type="1" Source="userAccounts.dll" Target="OnConfigPermissions" AdditionalSeq="AI_DATA_SETTER_4"/>
|
||||
<ROW Action="AI_DATA_SETTER" Type="51" Source="CustomActionData" Target="[ELASTICSEARCH_MSG] \n[ELASTICSEARCH_SCHEME]://[ELASTICSEARCH_HOST]:[ELASTICSEARCH_PORT] |[ProductName] Setup |MB_OK,MB_ICONWARNING,MB_DEFBUTTON1||[CLIENTPROCESSID]"/>
|
||||
<ROW Action="AI_DATA_SETTER_1" Type="51" Source="CustomActionData" Target="HOST=[ELASTICSEARCH_HOST];PORT=[ELASTICSEARCH_PORT];OUTPUT=ELK_CONNECTION"/>
|
||||
<ROW Action="AI_DATA_SETTER_10" Type="51" Source="CustomActionData" Target="MySQL80"/>
|
||||
@ -594,6 +803,7 @@
|
||||
<ROW Action="AI_DATA_SETTER_18" Type="51" Source="CustomActionData" Target="[RabbitMQServerConnectionError] |[ProductName] Setup |MB_OK,MB_ICONWARNING,MB_DEFBUTTON1||[CLIENTPROCESSID]"/>
|
||||
<ROW Action="AI_DATA_SETTER_2" Type="51" Source="CustomActionData" Target="[AI_SETUPEXEPATH]"/>
|
||||
<ROW Action="AI_DATA_SETTER_3" Type="51" Source="CustomActionData" Target="[~]"/>
|
||||
<ROW Action="AI_DATA_SETTER_4" Type="51" Source="CustomActionData" Target="[~]"/>
|
||||
<ROW Action="AI_DATA_SETTER_5" Type="51" Source="CustomActionData" Target="[RedisServerConnectionError] |[ProductName] Setup |MB_OK,MB_ICONWARNING,MB_DEFBUTTON1||[CLIENTPROCESSID]"/>
|
||||
<ROW Action="AI_DATA_SETTER_6" Type="51" Source="CustomActionData" Target="[APPDIR_FORWARD_SLASH]"/>
|
||||
<ROW Action="AI_DATA_SETTER_7" Type="51" Source="CustomActionData" Target="[~]"/>
|
||||
@ -620,13 +830,17 @@
|
||||
<ROW Action="AI_JsonRollback" Type="11521" Source="jsonCfg.dll" Target="OnJsonRollback" WithoutSeq="true"/>
|
||||
<ROW Action="AI_JsonUninstall" Type="1" Source="jsonCfg.dll" Target="OnJsonUninstall" AdditionalSeq="AI_DATA_SETTER_8"/>
|
||||
<ROW Action="AI_PREPARE_UPGRADE" Type="65" Source="aicustact.dll" Target="PrepareUpgrade"/>
|
||||
<ROW Action="AI_PrepareRevokePermissions" Type="1" Source="userAccounts.dll" Target="OnPrepareRevokePermissions"/>
|
||||
<ROW Action="AI_ProcessFailActions" Type="1" Source="aicustact.dll" Target="ProcessFailActions" AdditionalSeq="AI_DATA_SETTER_3"/>
|
||||
<ROW Action="AI_RESTORE_AI_SETUPEXEPATH" Type="51" Source="AI_SETUPEXEPATH" Target="[AI_SETUPEXEPATH_ORIGINAL]"/>
|
||||
<ROW Action="AI_RESTORE_LOCATION" Type="65" Source="aicustact.dll" Target="RestoreLocation"/>
|
||||
<ROW Action="AI_ResolveKnownFolders" Type="1" Source="aicustact.dll" Target="AI_ResolveKnownFolders"/>
|
||||
<ROW Action="AI_ResolveLocalizedCredentials" Type="1" Source="aicustact.dll" Target="GetLocalizedCredentials"/>
|
||||
<ROW Action="AI_RestartElevated" Type="1" Source="aicustact.dll" Target="RestartElevated"/>
|
||||
<ROW Action="AI_RevokePermissions" Type="11265" Source="userAccounts.dll" Target="OnRevokePermissions" WithoutSeq="true"/>
|
||||
<ROW Action="AI_SHOW_LOG" Type="65" Source="aicustact.dll" Target="LaunchLogFile" WithoutSeq="true"/>
|
||||
<ROW Action="AI_STORE_LOCATION" Type="51" Source="ARPINSTALLLOCATION" Target="[APPDIR]"/>
|
||||
<ROW Action="AI_SetPermissions" Type="11265" Source="userAccounts.dll" Target="OnSetPermissions" WithoutSeq="true"/>
|
||||
<ROW Action="AI_TxtUpdaterCommit" Type="11777" Source="TxtUpdater.dll" Target="OnTxtUpdaterCommit" WithoutSeq="true"/>
|
||||
<ROW Action="AI_TxtUpdaterConfig" Type="11265" Source="TxtUpdater.dll" Target="OnTxtUpdaterConfig" WithoutSeq="true"/>
|
||||
<ROW Action="AI_TxtUpdaterInstall" Type="1" Source="TxtUpdater.dll" Target="OnTxtUpdaterInstall"/>
|
||||
@ -639,9 +853,10 @@
|
||||
<ROW Action="SET_APPDIR" Type="307" Source="APPDIR" Target="[ProgramFilesFolder][Manufacturer]\[ProductName]" MultiBuildTarget="DefaultBuild:[ProgramFilesFolder][INSTALL_ROOT_FOLDER_NAME]\DocSpace"/>
|
||||
<ROW Action="SET_SHORTCUTDIR" Type="307" Source="SHORTCUTDIR" Target="[ProgramMenuFolder][ProductName]" MultiBuildTarget="DefaultBuild:[ProgramMenuFolder][INSTALL_ROOT_FOLDER_NAME]\DocSpace"/>
|
||||
<ROW Action="SET_TARGETDIR_TO_APPDIR" Type="51" Source="TARGETDIR" Target="[APPDIR]"/>
|
||||
<ROW Action="SetMACHINEKEY" Type="51" Source="MACHINE_KEY" Target="[ComputerName]"/>
|
||||
<ROW Action="Set_APPDIR_FORWARD_SLASH" Type="38" Target="Script Text" TargetUnformatted="Session.Property("APPDIR_FORWARD_SLASH") = Replace(Session.Property("APPDIR"), "\", "/") " AdditionalSeq="AI_DATA_SETTER_6"/>
|
||||
<ROW Action="StartElasticSearchService" Type="3073" Source="aicustact.dll" Target="StartWinService" Options="1" AdditionalSeq="AI_DATA_SETTER_13"/>
|
||||
<ROW Action="StartMigrationRunner" Type="3106" Source="service_6_Dir" Target=""[APPDIR]services\ASC.Migration.Runner\service\ASC.Migration.Runner.exe""/>
|
||||
<ROW Action="StartMigrationRunner" Type="3074" Source="viewer.exe" Target="/EnforcedRunAsAdmin /RunAsAdmin /HideWindow /dir "[APPDIR]\services\ASC.Migration.Runner\service" "[APPDIR]services\ASC.Migration.Runner\service\ASC.Migration.Runner.exe"" Options="1"/>
|
||||
<ROW Action="StartMySQLService" Type="1" Source="aicustact.dll" Target="StartWinService" Options="1" AdditionalSeq="AI_DATA_SETTER_11"/>
|
||||
<ROW Action="StopElasticSearchService" Type="1" Source="aicustact.dll" Target="StopWinService" Options="1" AdditionalSeq="AI_DATA_SETTER_12"/>
|
||||
<ROW Action="StopMySQLService" Type="1" Source="aicustact.dll" Target="StopWinService" Options="1" AdditionalSeq="AI_DATA_SETTER_10"/>
|
||||
@ -675,8 +890,7 @@
|
||||
<ROW Feature_="MainFeature" Component_="ASC.Web.Studio.exe"/>
|
||||
<ROW Feature_="MainFeature" Component_="ASC.Files.exe"/>
|
||||
<ROW Feature_="MainFeature" Component_="ASC.Web.Api.exe"/>
|
||||
<ROW Feature_="MainFeature" Component_="proxy.xml"/>
|
||||
<ROW Feature_="MainFeature" Component_="proxy.exe"/>
|
||||
<ROW Feature_="MainFeature" Component_="Proxy.exe"/>
|
||||
<ROW Feature_="MainFeature" Component_="config"/>
|
||||
<ROW Feature_="MainFeature" Component_="AI_CustomARPName"/>
|
||||
<ROW Feature_="MainFeature" Component_="AI_DisableModify"/>
|
||||
@ -691,8 +905,68 @@
|
||||
<ROW Feature_="MainFeature" Component_="ASC.Migration.exe"/>
|
||||
<ROW Feature_="MainFeature" Component_="ASC.Webhooks.Service.exe"/>
|
||||
<ROW Feature_="MainFeature" Component_="ASC.Migration.Runner.exe"/>
|
||||
<ROW Feature_="MainFeature" Component_="favicon.ico"/>
|
||||
<ROW Feature_="MainFeature" Component_="public"/>
|
||||
<ROW Feature_="MainFeature" Component_="DocEditor.exe"/>
|
||||
<ROW Feature_="MainFeature" Component_="Login.exe"/>
|
||||
<ROW Feature_="MainFeature" Component_="login"/>
|
||||
<ROW Feature_="MainFeature" Component_="editor"/>
|
||||
<ROW Feature_="MainFeature" Component_="conf"/>
|
||||
<ROW Feature_="MainFeature" Component_="includes"/>
|
||||
<ROW Feature_="MainFeature" Component_="nginx"/>
|
||||
<ROW Feature_="MainFeature" Component_="tools"/>
|
||||
<ROW Feature_="MainFeature" Component_="products"/>
|
||||
<ROW Feature_="MainFeature" Component_="ASC.Files"/>
|
||||
<ROW Feature_="MainFeature" Component_="server_ASC.Files"/>
|
||||
<ROW Feature_="MainFeature" Component_="ASC.Login"/>
|
||||
<ROW Feature_="MainFeature" Component_="ASC.People"/>
|
||||
<ROW Feature_="MainFeature" Component_="server_ASC.People"/>
|
||||
<ROW Feature_="MainFeature" Component_="services"/>
|
||||
<ROW Feature_="MainFeature" Component_="ASC.Migration.Runner"/>
|
||||
<ROW Feature_="MainFeature" Component_="service_ASC.Migration.Runner"/>
|
||||
<ROW Feature_="MainFeature" Component_="ASC.ClearEvents"/>
|
||||
<ROW Feature_="MainFeature" Component_="service_ASC.ClearEvents"/>
|
||||
<ROW Feature_="MainFeature" Component_="ASC.UrlShortener"/>
|
||||
<ROW Feature_="MainFeature" Component_="service_ASC.Urlshortner"/>
|
||||
<ROW Feature_="MainFeature" Component_="ASC.Data.Backup.BackgroundTasks"/>
|
||||
<ROW Feature_="MainFeature" Component_="service_ASC.Data.Backup.BachgroundTasks"/>
|
||||
<ROW Feature_="MainFeature" Component_="ASC.Socket.IO"/>
|
||||
<ROW Feature_="MainFeature" Component_="service_ASC.Socket.IO"/>
|
||||
<ROW Feature_="MainFeature" Component_="ASC.Data.Backup"/>
|
||||
<ROW Feature_="MainFeature" Component_="service_ASC.Data.Backup"/>
|
||||
<ROW Feature_="MainFeature" Component_="ASC.Migration"/>
|
||||
<ROW Feature_="MainFeature" Component_="service_ASC.Migration"/>
|
||||
<ROW Feature_="MainFeature" Component_="ASC.Files.Service"/>
|
||||
<ROW Feature_="MainFeature" Component_="service_ASC.File.Service"/>
|
||||
<ROW Feature_="MainFeature" Component_="ASC.TelegramService"/>
|
||||
<ROW Feature_="MainFeature" Component_="service_ASC.TelegramService"/>
|
||||
<ROW Feature_="MainFeature" Component_="ASC.Notify"/>
|
||||
<ROW Feature_="MainFeature" Component_="service_ASC.Notify"/>
|
||||
<ROW Feature_="MainFeature" Component_="ASC.SsoAuth"/>
|
||||
<ROW Feature_="MainFeature" Component_="service_ASC.SsoAuth"/>
|
||||
<ROW Feature_="MainFeature" Component_="ASC.Studio.Notify"/>
|
||||
<ROW Feature_="MainFeature" Component_="service_ASC.Studio.Notify"/>
|
||||
<ROW Feature_="MainFeature" Component_="ASC.Web.Api"/>
|
||||
<ROW Feature_="MainFeature" Component_="service_ASC.WebApi"/>
|
||||
<ROW Feature_="MainFeature" Component_="ASC.Web.Studio"/>
|
||||
<ROW Feature_="MainFeature" Component_="service_ASC.Web.Studio"/>
|
||||
<ROW Feature_="MainFeature" Component_="ASC.Webhooks.Service"/>
|
||||
<ROW Feature_="MainFeature" Component_="service_ASC.Webhooks.Service"/>
|
||||
<ROW Feature_="MainFeature" Component_="Logs"/>
|
||||
<ROW Feature_="MainFeature" Component_="temp_nginx"/>
|
||||
<ROW Feature_="MainFeature" Component_="logs"/>
|
||||
<ROW Feature_="MainFeature" Component_="temp_ASC.ClearEvents"/>
|
||||
<ROW Feature_="MainFeature" Component_="temp_ASC.Data.Backup.BackgroundTasks"/>
|
||||
<ROW Feature_="MainFeature" Component_="temp_ASC.File.Service"/>
|
||||
<ROW Feature_="MainFeature" Component_="temp_ASC.Data.Buckup"/>
|
||||
<ROW Feature_="MainFeature" Component_="temp_ASC.Migration"/>
|
||||
<ROW Feature_="MainFeature" Component_="temp_ASC.Migration.Runner"/>
|
||||
<ROW Feature_="MainFeature" Component_="temp_ASC.Notify"/>
|
||||
<ROW Feature_="MainFeature" Component_="temp_ASC.Studio.Notify"/>
|
||||
<ROW Feature_="MainFeature" Component_="temp_ASC.Web.Api"/>
|
||||
<ROW Feature_="MainFeature" Component_="temp_ASC.Web.Studio"/>
|
||||
<ROW Feature_="MainFeature" Component_="temp_ASC.Webhooks.Service"/>
|
||||
<ROW Feature_="MainFeature" Component_="temp_ASC.TelegramService"/>
|
||||
<ROW Feature_="MainFeature" Component_="temp_ASC.Files"/>
|
||||
<ROW Feature_="MainFeature" Component_="temp_ASC.People"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiIconsComponent">
|
||||
<ROW Name="icon.exe" SourcePath="Resources\icon.ico" Index="0"/>
|
||||
@ -702,8 +976,8 @@
|
||||
<ROW Action="AI_RESTORE_LOCATION" Condition="APPDIR=""" Sequence="749"/>
|
||||
<ROW Action="AI_STORE_LOCATION" Condition="(Not Installed) OR REINSTALL" Sequence="1501"/>
|
||||
<ROW Action="AI_PREPARE_UPGRADE" Condition="AI_UPGRADE="No" AND (Not Installed)" Sequence="1397"/>
|
||||
<ROW Action="AI_ResolveKnownFolders" Sequence="52"/>
|
||||
<ROW Action="AI_EnableDebugLog" Sequence="51"/>
|
||||
<ROW Action="AI_ResolveKnownFolders" Sequence="53"/>
|
||||
<ROW Action="AI_EnableDebugLog" Sequence="52"/>
|
||||
<ROW Action="AI_AppSearchEx" Sequence="103"/>
|
||||
<ROW Action="AI_DetectSoftware" Sequence="102"/>
|
||||
<ROW Action="AI_BACKUP_AI_SETUPEXEPATH" Sequence="99" Builds="DefaultBuild"/>
|
||||
@ -724,35 +998,42 @@
|
||||
<ROW Action="AI_DATA_SETTER_7" Condition="(REMOVE <> "ALL")" Sequence="5101"/>
|
||||
<ROW Action="AI_JsonUninstall" Condition="(REMOVE)" Sequence="3102"/>
|
||||
<ROW Action="AI_DATA_SETTER_8" Condition="(REMOVE)" Sequence="3101"/>
|
||||
<ROW Action="StopMySQLService" Condition="( NOT Installed AND NOT OLDPRODUCTS ) AND ( AI_PROCESS_STATE <> "Not Found" )" Sequence="1605"/>
|
||||
<ROW Action="AI_DATA_SETTER_10" Condition="( NOT Installed AND NOT OLDPRODUCTS ) AND ( AI_PROCESS_STATE <> "Not Found" )" Sequence="1604"/>
|
||||
<ROW Action="StartMySQLService" Condition="( NOT Installed AND NOT OLDPRODUCTS ) AND ( AI_PROCESS_STATE <> "Not Found" )" Sequence="1607"/>
|
||||
<ROW Action="AI_DATA_SETTER_11" Condition="( NOT Installed AND NOT OLDPRODUCTS ) AND ( AI_PROCESS_STATE <> "Not Found" )" Sequence="1606"/>
|
||||
<ROW Action="Set_APPDIR_FORWARD_SLASH" Condition="( NOT Installed )" Sequence="1615"/>
|
||||
<ROW Action="AI_DATA_SETTER_6" Condition="( NOT Installed )" Sequence="1614"/>
|
||||
<ROW Action="MySQLConfigure" Condition="( NOT Installed )" Sequence="1601"/>
|
||||
<ROW Action="DetectMySQLService" Condition="( ( NOT Installed AND NOT OLDPRODUCTS ) OR ( Installed AND REMOVE <> "ALL" AND AI_INSTALL_MODE <> "Remove" ) )" Sequence="1603"/>
|
||||
<ROW Action="AI_DATA_SETTER_9" Condition="( ( NOT Installed AND NOT OLDPRODUCTS ) OR ( Installed AND REMOVE <> "ALL" AND AI_INSTALL_MODE <> "Remove" ) )" Sequence="1602"/>
|
||||
<ROW Action="ElasticSearchSetup" Condition="( NOT Installed )" Sequence="1611"/>
|
||||
<ROW Action="StopElasticSearchService" Condition="( NOT Installed )" Sequence="1609"/>
|
||||
<ROW Action="AI_DATA_SETTER_12" Condition="( NOT Installed )" Sequence="1608"/>
|
||||
<ROW Action="ElasticSearchInstallPlugin" Condition="( NOT Installed )" Sequence="1610"/>
|
||||
<ROW Action="StartElasticSearchService" Condition="( NOT Installed )" Sequence="1613"/>
|
||||
<ROW Action="AI_DATA_SETTER_13" Condition="( NOT Installed )" Sequence="1612"/>
|
||||
<ROW Action="StopMySQLService" Condition="( NOT Installed AND NOT OLDPRODUCTS ) AND ( AI_PROCESS_STATE <> "Not Found" )" Sequence="1606"/>
|
||||
<ROW Action="AI_DATA_SETTER_10" Condition="( NOT Installed AND NOT OLDPRODUCTS ) AND ( AI_PROCESS_STATE <> "Not Found" )" Sequence="1605"/>
|
||||
<ROW Action="Set_APPDIR_FORWARD_SLASH" Condition="( NOT Installed )" Sequence="1616"/>
|
||||
<ROW Action="AI_DATA_SETTER_6" Condition="( NOT Installed )" Sequence="1615"/>
|
||||
<ROW Action="MySQLConfigure" Condition="( NOT Installed )" Sequence="1602"/>
|
||||
<ROW Action="DetectMySQLService" Condition="( ( NOT Installed AND NOT OLDPRODUCTS ) OR ( Installed AND REMOVE <> "ALL" AND AI_INSTALL_MODE <> "Remove" ) )" Sequence="1604"/>
|
||||
<ROW Action="AI_DATA_SETTER_9" Condition="( ( NOT Installed AND NOT OLDPRODUCTS ) OR ( Installed AND REMOVE <> "ALL" AND AI_INSTALL_MODE <> "Remove" ) )" Sequence="1603"/>
|
||||
<ROW Action="ElasticSearchSetup" Condition="( NOT Installed )" Sequence="1612"/>
|
||||
<ROW Action="StopElasticSearchService" Condition="( NOT Installed )" Sequence="1610"/>
|
||||
<ROW Action="AI_DATA_SETTER_12" Condition="( NOT Installed )" Sequence="1609"/>
|
||||
<ROW Action="ElasticSearchInstallPlugin" Condition="( NOT Installed )" Sequence="1611"/>
|
||||
<ROW Action="StartElasticSearchService" Condition="( NOT Installed )" Sequence="1614"/>
|
||||
<ROW Action="AI_DATA_SETTER_13" Condition="( NOT Installed )" Sequence="1613"/>
|
||||
<ROW Action="AI_GetArpIconPath" Sequence="1401"/>
|
||||
<ROW Action="StartMySQLService" Condition="( NOT Installed AND NOT OLDPRODUCTS ) AND ( AI_PROCESS_STATE <> "Not Found" )" Sequence="1608"/>
|
||||
<ROW Action="AI_DATA_SETTER_11" Condition="( NOT Installed AND NOT OLDPRODUCTS ) AND ( AI_PROCESS_STATE <> "Not Found" )" Sequence="1607"/>
|
||||
<ROW Action="StartMigrationRunner" Condition="( NOT Installed )" Sequence="5826"/>
|
||||
<ROW Action="SetMACHINEKEY" Condition="( NOT Installed )" Sequence="1601"/>
|
||||
<ROW Action="AI_DETECT_MODERNWIN" Condition="(VersionNT >= 603)" Sequence="54" MsiKey="AI_DETECT_MODERNWIN"/>
|
||||
<ROW Action="AI_ResolveLocalizedCredentials" Sequence="51"/>
|
||||
<ROW Action="AI_ConfigPermissions" Condition="REMOVE <> "ALL"" Sequence="5852"/>
|
||||
<ROW Action="AI_DATA_SETTER_4" Condition="REMOVE <> "ALL"" Sequence="5851"/>
|
||||
<ROW Action="AI_PrepareRevokePermissions" Condition="REMOVE = "ALL"" Sequence="1699"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiInstallUISequenceComponent">
|
||||
<ROW Action="AI_RESTORE_LOCATION" Condition="APPDIR=""" Sequence="749"/>
|
||||
<ROW Action="AI_ResolveKnownFolders" Sequence="54"/>
|
||||
<ROW Action="AI_DpiContentScale" Sequence="53"/>
|
||||
<ROW Action="AI_EnableDebugLog" Sequence="52"/>
|
||||
<ROW Action="AI_ResolveKnownFolders" Sequence="55"/>
|
||||
<ROW Action="AI_DpiContentScale" Sequence="54"/>
|
||||
<ROW Action="AI_EnableDebugLog" Sequence="53"/>
|
||||
<ROW Action="AI_BACKUP_AI_SETUPEXEPATH" Sequence="99"/>
|
||||
<ROW Action="AI_RESTORE_AI_SETUPEXEPATH" Condition="AI_SETUPEXEPATH_ORIGINAL" Sequence="103"/>
|
||||
<ROW Action="AI_AppSearchEx" Sequence="102"/>
|
||||
<ROW Action="AI_DetectSoftware" Sequence="101"/>
|
||||
<ROW Action="MySQLConfigureGUI" Condition="( NOT Installed )" Sequence="1101"/>
|
||||
<ROW Action="AI_RestartElevated" Sequence="51"/>
|
||||
<ROW Action="AI_RestartElevated" Sequence="52"/>
|
||||
<ROW Action="AI_ResolveLocalizedCredentials" Sequence="51"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiLaunchConditionsComponent">
|
||||
<ROW Condition="((VersionNT <> 501) AND (VersionNT <> 502))" Description="[ProductName] cannot be installed on [WindowsTypeNT5XDisplay]." DescriptionLocId="AI.LaunchCondition.NoNT5X" IsPredefined="true" Builds="DefaultBuild"/>
|
||||
@ -762,6 +1043,73 @@
|
||||
<ROW Condition="SETUPEXEDIR OR (REMOVE="ALL")" Description="This package can only be run from a bootstrapper." DescriptionLocId="AI.LaunchCondition.RequireBootstrapper" IsPredefined="true" Builds="DefaultBuild"/>
|
||||
<ROW Condition="VersionNT" Description="[ProductName] cannot be installed on [WindowsType9XDisplay]." DescriptionLocId="AI.LaunchCondition.No9X" IsPredefined="true" Builds="DefaultBuild"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiLockPermComponent">
|
||||
<ROW LockObject="APPDIR" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="config_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="nginx_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="conf_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="includes_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="tools_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1180063" Flags="2"/>
|
||||
<ROW LockObject="products_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="editor_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="ASC.Files_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="login_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="server_2_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="ASC.Login_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="ASC.People_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="server_5_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="services_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="ASC.Migration.Runner_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="service_6_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="ASC.ClearEvents_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="service_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="ASC.UrlShortener_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="NewFolder_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="config_1_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="NewFolder_1_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="ASC.Data.Backup.BackgroundTasks_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="service_3_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="ASC.Socket.IO_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="service_1_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="ASC.Data.Backup_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="service_2_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="ASC.Migration_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="service_4_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="ASC.Files.Service_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="service_7_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="ASC.TelegramService_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="service_12_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="ASC.Notify_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="service_9_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="ASC.SsoAuth_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="config_2_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="service_5_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="ASC.Studio.Notify_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="service_11_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="ASC.Web.Api_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="service_15_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="ASC.Web.Studio_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="service_16_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="ASC.Webhooks.Service_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="NewFolder_3_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1179785" Flags="2"/>
|
||||
<ROW LockObject="Logs_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1180063" Flags="2"/>
|
||||
<ROW LockObject="temp_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1180063" Flags="2"/>
|
||||
<ROW LockObject="logs_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1180063" Flags="2"/>
|
||||
<ROW LockObject="temp_1_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1180063" Flags="2"/>
|
||||
<ROW LockObject="temp_2_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1180063" Flags="2"/>
|
||||
<ROW LockObject="temp_3_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1180063" Flags="2"/>
|
||||
<ROW LockObject="temp_4_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1180063" Flags="2"/>
|
||||
<ROW LockObject="temp_5_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1180063" Flags="2"/>
|
||||
<ROW LockObject="temp_6_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1180063" Flags="2"/>
|
||||
<ROW LockObject="temp_7_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1180063" Flags="2"/>
|
||||
<ROW LockObject="temp_8_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1180063" Flags="2"/>
|
||||
<ROW LockObject="temp_9_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1180063" Flags="2"/>
|
||||
<ROW LockObject="temp_10_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1180063" Flags="2"/>
|
||||
<ROW LockObject="temp_11_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1180063" Flags="2"/>
|
||||
<ROW LockObject="temp_12_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1180063" Flags="2"/>
|
||||
<ROW LockObject="temp_13_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1180063" Flags="2"/>
|
||||
<ROW LockObject="temp_14_Dir" Table="CreateFolder" User="[USR_LOCAL_SERVICE]" Permission="1180063" Flags="2"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiRegLocatorComponent">
|
||||
<ROW Signature_="AI_EXE_PATH_CU" Root="1" Key="Software\Caphyon\Advanced Installer\LZMA\[ProductCode]\[ProductVersion]" Name="AI_ExePath" Type="2"/>
|
||||
<ROW Signature_="AI_EXE_PATH_LM" Root="2" Key="Software\Caphyon\Advanced Installer\LZMA\[ProductCode]\[ProductVersion]" Name="AI_ExePath" Type="2"/>
|
||||
@ -795,12 +1143,14 @@
|
||||
<ROW MsiServiceConfig="ServiceName_BackgroundTasks" Name="[ServiceName_BackgroundTasks]" Event="1" ConfigType="3" Argument="1" Component_="ASC.Data.Backup.BackgroundTasks.exe"/>
|
||||
<ROW MsiServiceConfig="ServiceName_BackupService" Name="[ServiceName_BackupService]" Event="1" ConfigType="3" Argument="1" Component_="ASC.Data.Backup.exe"/>
|
||||
<ROW MsiServiceConfig="ServiceName_ClearEvents" Name="[ServiceName_ClearEvents]" Event="1" ConfigType="3" Argument="1" Component_="ASC.ClearEvents.exe"/>
|
||||
<ROW MsiServiceConfig="ServiceName_DocEditor" Name="[ServiceName_DocEditor]" Event="1" ConfigType="3" Argument="1" Component_="DocEditor.exe"/>
|
||||
<ROW MsiServiceConfig="ServiceName_FileServer" Name="[ServiceName_FileServer]" Event="1" ConfigType="3" Argument="1" Component_="ASC.Files.exe"/>
|
||||
<ROW MsiServiceConfig="ServiceName_FileService" Name="[ServiceName_FileService]" Event="1" ConfigType="3" Argument="1" Component_="ASC.Files.Service.exe"/>
|
||||
<ROW MsiServiceConfig="ServiceName_Login" Name="[ServiceName_Login]" Event="1" ConfigType="3" Argument="1" Component_="Login.exe"/>
|
||||
<ROW MsiServiceConfig="ServiceName_Migration" Name="[ServiceName_Migration]" Event="1" ConfigType="3" Argument="1" Component_="ASC.Migration.exe"/>
|
||||
<ROW MsiServiceConfig="ServiceName_NotifyService" Name="[ServiceName_NotifyService]" Event="1" ConfigType="3" Argument="1" Component_="ASC.Notify.exe"/>
|
||||
<ROW MsiServiceConfig="ServiceName_PeopleServer" Name="[ServiceName_PeopleServer]" Event="1" ConfigType="3" Argument="1" Component_="ASC.People.exe"/>
|
||||
<ROW MsiServiceConfig="ServiceName_Proxy" Name="[ServiceName_Proxy]" Event="1" ConfigType="3" Argument="1" Component_="proxy.exe"/>
|
||||
<ROW MsiServiceConfig="ServiceName_Proxy" Name="[ServiceName_Proxy]" Event="1" ConfigType="3" Argument="1" Component_="Proxy.exe"/>
|
||||
<ROW MsiServiceConfig="ServiceName_Socket.IO" Name="[ServiceName_Socket.IO]" Event="1" ConfigType="3" Argument="1" Component_="Socket.IO.exe"/>
|
||||
<ROW MsiServiceConfig="ServiceName_SsoAuth" Name="[ServiceName_SsoAuth]" Event="1" ConfigType="3" Argument="1" Component_="SsoAuth.exe"/>
|
||||
<ROW MsiServiceConfig="ServiceName_StudioNotifyService" Name="[ServiceName_StudioNotifyService]" Event="1" ConfigType="3" Argument="1" Component_="ASC.Studio.Notify.exe"/>
|
||||
@ -811,35 +1161,38 @@
|
||||
<ROW MsiServiceConfig="ServiceName_WebhooksService" Name="[ServiceName_WebhooksService]" Event="1" ConfigType="3" Argument="1" Component_="ASC.Webhooks.Service.exe"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiServConfigFailureActionsComponent">
|
||||
<ROW MsiServiceConfigFailureActions="ServiceName_BackgroundTasks" Name="[ServiceName_BackgroundTasks]" Event="1" ResetPeriod="0" Actions="1[~]1[~]1" DelayActions="0[~]1[~]1" Component_="ASC.Data.Backup.BackgroundTasks.exe"/>
|
||||
<ROW MsiServiceConfigFailureActions="ServiceName_BackupService" Name="[ServiceName_BackupService]" Event="1" ResetPeriod="0" Actions="1[~]1[~]1" DelayActions="0[~]1[~]1" Component_="ASC.Data.Backup.exe"/>
|
||||
<ROW MsiServiceConfigFailureActions="ServiceName_ClearEvents" Name="[ServiceName_ClearEvents]" Event="1" ResetPeriod="0" Actions="1[~]1[~]1" DelayActions="0[~]1[~]1" Component_="ASC.ClearEvents.exe"/>
|
||||
<ROW MsiServiceConfigFailureActions="ServiceName_FileServer" Name="[ServiceName_FileServer]" Event="1" ResetPeriod="0" Actions="1[~]1[~]1" DelayActions="0[~]1[~]1" Component_="ASC.Files.exe"/>
|
||||
<ROW MsiServiceConfigFailureActions="ServiceName_FileService" Name="[ServiceName_FileService]" Event="1" ResetPeriod="0" Actions="1[~]1[~]1" DelayActions="0[~]1[~]1" Component_="ASC.Files.Service.exe"/>
|
||||
<ROW MsiServiceConfigFailureActions="ServiceName_Migration" Name="[ServiceName_Migration]" Event="1" ResetPeriod="0" Actions="1[~]1[~]1" DelayActions="0[~]1[~]1" Component_="ASC.Migration.exe"/>
|
||||
<ROW MsiServiceConfigFailureActions="ServiceName_NotifyService" Name="[ServiceName_NotifyService]" Event="1" ResetPeriod="0" Actions="1[~]1[~]1" DelayActions="0[~]1[~]1" Component_="ASC.Notify.exe"/>
|
||||
<ROW MsiServiceConfigFailureActions="ServiceName_PeopleServer" Name="[ServiceName_PeopleServer]" Event="1" ResetPeriod="0" Actions="1[~]1[~]1" DelayActions="0[~]1[~]1" Component_="ASC.People.exe"/>
|
||||
<ROW MsiServiceConfigFailureActions="ServiceName_Proxy" Name="[ServiceName_Proxy]" Event="1" ResetPeriod="0" Actions="1[~]1[~]1" DelayActions="0[~]1[~]1" Component_="proxy.exe"/>
|
||||
<ROW MsiServiceConfigFailureActions="ServiceName_Socket.IO" Name="[ServiceName_Socket.IO]" Event="1" ResetPeriod="0" Actions="1[~]1[~]1" DelayActions="0[~]1[~]1" Component_="Socket.IO.exe"/>
|
||||
<ROW MsiServiceConfigFailureActions="ServiceName_SsoAuth" Name="[ServiceName_SsoAuth]" Event="1" ResetPeriod="0" Actions="1[~]1[~]1" DelayActions="0[~]1[~]1" Component_="SsoAuth.exe"/>
|
||||
<ROW MsiServiceConfigFailureActions="ServiceName_StudioNotifyService" Name="[ServiceName_StudioNotifyService]" Event="1" ResetPeriod="0" Actions="1[~]1[~]1" DelayActions="0[~]1[~]1" Component_="ASC.Studio.Notify.exe"/>
|
||||
<ROW MsiServiceConfigFailureActions="ServiceName_TelegramService" Name="[ServiceName_TelegramService]" Event="1" ResetPeriod="0" Actions="1[~]1[~]1" DelayActions="0[~]1[~]1" Component_="ASC.TelegramService.exe"/>
|
||||
<ROW MsiServiceConfigFailureActions="ServiceName_UrlShortenerService" Name="[ServiceName_UrlShortenerService]" Event="1" ResetPeriod="0" Actions="1[~]1[~]1" DelayActions="0[~]1[~]1" Component_="UrlShortener.exe"/>
|
||||
<ROW MsiServiceConfigFailureActions="ServiceName_WebApi" Name="[ServiceName_WebApi]" Event="1" ResetPeriod="0" Actions="1[~]1[~]1" DelayActions="0[~]1[~]1" Component_="ASC.Web.Api.exe"/>
|
||||
<ROW MsiServiceConfigFailureActions="ServiceName_WebStudio" Name="[ServiceName_WebStudio]" Event="1" ResetPeriod="0" Actions="1[~]1[~]1" DelayActions="0[~]1[~]1" Component_="ASC.Web.Studio.exe"/>
|
||||
<ROW MsiServiceConfigFailureActions="ServiceName_WebhooksService" Name="[ServiceName_WebhooksService]" Event="1" ResetPeriod="0" Actions="1[~]1[~]1" DelayActions="0[~]1[~]1" Component_="ASC.Webhooks.Service.exe"/>
|
||||
<ROW MsiServiceConfigFailureActions="ServiceName_BackgroundTasks" Name="[ServiceName_BackgroundTasks]" Event="1" ResetPeriod="0" Actions="1[~]1[~]1" DelayActions="1[~]1[~]1" Component_="ASC.Data.Backup.BackgroundTasks.exe"/>
|
||||
<ROW MsiServiceConfigFailureActions="ServiceName_BackupService" Name="[ServiceName_BackupService]" Event="1" ResetPeriod="0" Actions="1[~]1[~]1" DelayActions="1[~]1[~]1" Component_="ASC.Data.Backup.exe"/>
|
||||
<ROW MsiServiceConfigFailureActions="ServiceName_ClearEvents" Name="[ServiceName_ClearEvents]" Event="1" ResetPeriod="0" Actions="1[~]1[~]1" DelayActions="1[~]1[~]1" Component_="ASC.ClearEvents.exe"/>
|
||||
<ROW MsiServiceConfigFailureActions="ServiceName_DocEditor" Name="[ServiceName_DocEditor]" Event="1" ResetPeriod="0" Actions="1[~]1[~]1" DelayActions="1[~]1[~]1" Component_="DocEditor.exe"/>
|
||||
<ROW MsiServiceConfigFailureActions="ServiceName_FileServer" Name="[ServiceName_FileServer]" Event="1" ResetPeriod="0" Actions="1[~]1[~]1" DelayActions="1[~]1[~]1" Component_="ASC.Files.exe"/>
|
||||
<ROW MsiServiceConfigFailureActions="ServiceName_FileService" Name="[ServiceName_FileService]" Event="1" ResetPeriod="0" Actions="1[~]1[~]1" DelayActions="1[~]1[~]1" Component_="ASC.Files.Service.exe"/>
|
||||
<ROW MsiServiceConfigFailureActions="ServiceName_Login" Name="[ServiceName_Login]" Event="1" ResetPeriod="0" Actions="1[~]1[~]1" DelayActions="1[~]1[~]1" Component_="Login.exe"/>
|
||||
<ROW MsiServiceConfigFailureActions="ServiceName_Migration" Name="[ServiceName_Migration]" Event="1" ResetPeriod="0" Actions="1[~]1[~]1" DelayActions="1[~]1[~]1" Component_="ASC.Migration.exe"/>
|
||||
<ROW MsiServiceConfigFailureActions="ServiceName_NotifyService" Name="[ServiceName_NotifyService]" Event="1" ResetPeriod="0" Actions="1[~]1[~]1" DelayActions="1[~]1[~]1" Component_="ASC.Notify.exe"/>
|
||||
<ROW MsiServiceConfigFailureActions="ServiceName_PeopleServer" Name="[ServiceName_PeopleServer]" Event="1" ResetPeriod="0" Actions="1[~]1[~]1" DelayActions="1[~]1[~]1" Component_="ASC.People.exe"/>
|
||||
<ROW MsiServiceConfigFailureActions="ServiceName_Proxy" Name="[ServiceName_Proxy]" Event="1" ResetPeriod="0" Actions="1[~]1[~]1" DelayActions="1[~]1[~]1" Component_="Proxy.exe"/>
|
||||
<ROW MsiServiceConfigFailureActions="ServiceName_Socket.IO" Name="[ServiceName_Socket.IO]" Event="1" ResetPeriod="0" Actions="1[~]1[~]1" DelayActions="1[~]1[~]1" Component_="Socket.IO.exe"/>
|
||||
<ROW MsiServiceConfigFailureActions="ServiceName_SsoAuth" Name="[ServiceName_SsoAuth]" Event="1" ResetPeriod="0" Actions="1[~]1[~]1" DelayActions="1[~]1[~]1" Component_="SsoAuth.exe"/>
|
||||
<ROW MsiServiceConfigFailureActions="ServiceName_StudioNotifyService" Name="[ServiceName_StudioNotifyService]" Event="1" ResetPeriod="0" Actions="1[~]1[~]1" DelayActions="1[~]1[~]1" Component_="ASC.Studio.Notify.exe"/>
|
||||
<ROW MsiServiceConfigFailureActions="ServiceName_TelegramService" Name="[ServiceName_TelegramService]" Event="1" ResetPeriod="0" Actions="1[~]1[~]1" DelayActions="1[~]1[~]1" Component_="ASC.TelegramService.exe"/>
|
||||
<ROW MsiServiceConfigFailureActions="ServiceName_UrlShortenerService" Name="[ServiceName_UrlShortenerService]" Event="1" ResetPeriod="0" Actions="1[~]1[~]1" DelayActions="1[~]1[~]1" Component_="UrlShortener.exe"/>
|
||||
<ROW MsiServiceConfigFailureActions="ServiceName_WebApi" Name="[ServiceName_WebApi]" Event="1" ResetPeriod="0" Actions="1[~]1[~]1" DelayActions="1[~]1[~]1" Component_="ASC.Web.Api.exe"/>
|
||||
<ROW MsiServiceConfigFailureActions="ServiceName_WebStudio" Name="[ServiceName_WebStudio]" Event="1" ResetPeriod="0" Actions="1[~]1[~]1" DelayActions="1[~]1[~]1" Component_="ASC.Web.Studio.exe"/>
|
||||
<ROW MsiServiceConfigFailureActions="ServiceName_WebhooksService" Name="[ServiceName_WebhooksService]" Event="1" ResetPeriod="0" Actions="1[~]1[~]1" DelayActions="1[~]1[~]1" Component_="ASC.Webhooks.Service.exe"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiServCtrlComponent">
|
||||
<ROW ServiceControl="ASC.ClearEvents.exe" Name="[ServiceName_ClearEvents]" Event="161" Wait="0" Component_="ASC.ClearEvents.exe"/>
|
||||
<ROW ServiceControl="ASC.Data.Backup.BackgroundTasks.exe" Name="[ServiceName_BackgroundTasks]" Event="161" Wait="0" Component_="ASC.Data.Backup.BackgroundTasks.exe"/>
|
||||
<ROW ServiceControl="ASC.Migration.exe" Name="[ServiceName_Migration]" Event="161" Wait="0" Component_="ASC.Migration.exe"/>
|
||||
<ROW ServiceControl="ASC.Webhooks.Service.exe" Name="[ServiceName_WebhooksService]" Event="161" Wait="0" Component_="ASC.Webhooks.Service.exe"/>
|
||||
<ROW ServiceControl="ServiceName_BackgroundTasks" Name="[ServiceName_BackgroundTasks]" Event="161" Wait="0" Component_="ASC.Data.Backup.BackgroundTasks.exe"/>
|
||||
<ROW ServiceControl="ServiceName_BackupService" Name="[ServiceName_BackupService]" Event="161" Wait="0" Component_="ASC.Data.Backup.exe"/>
|
||||
<ROW ServiceControl="ServiceName_ClearEvents" Name="[ServiceName_ClearEvents]" Event="161" Wait="0" Component_="ASC.ClearEvents.exe"/>
|
||||
<ROW ServiceControl="ServiceName_DocEditor" Name="[ServiceName_DocEditor]" Event="161" Wait="0" Component_="DocEditor.exe"/>
|
||||
<ROW ServiceControl="ServiceName_FileServer" Name="[ServiceName_FileServer]" Event="161" Wait="0" Component_="ASC.Files.exe"/>
|
||||
<ROW ServiceControl="ServiceName_FileService" Name="[ServiceName_FileService]" Event="161" Wait="0" Component_="ASC.Files.Service.exe"/>
|
||||
<ROW ServiceControl="ServiceName_Login" Name="[ServiceName_Login]" Event="161" Wait="0" Component_="Login.exe"/>
|
||||
<ROW ServiceControl="ServiceName_Migration" Name="[ServiceName_Migration]" Event="161" Wait="0" Component_="ASC.Migration.exe"/>
|
||||
<ROW ServiceControl="ServiceName_NotifyService" Name="[ServiceName_NotifyService]" Event="161" Wait="0" Component_="ASC.Notify.exe"/>
|
||||
<ROW ServiceControl="ServiceName_PeopleServer" Name="[ServiceName_PeopleServer]" Event="161" Wait="0" Component_="ASC.People.exe"/>
|
||||
<ROW ServiceControl="ServiceName_Proxy" Name="[ServiceName_Proxy]" Event="161" Wait="0" Component_="proxy.exe"/>
|
||||
<ROW ServiceControl="ServiceName_Proxy" Name="[ServiceName_Proxy]" Event="161" Wait="0" Component_="Proxy.exe"/>
|
||||
<ROW ServiceControl="ServiceName_Socket.IO" Name="[ServiceName_Socket.IO]" Event="161" Wait="0" Component_="Socket.IO.exe"/>
|
||||
<ROW ServiceControl="ServiceName_SsoAuth" Name="[ServiceName_SsoAuth]" Event="161" Wait="0" Component_="SsoAuth.exe"/>
|
||||
<ROW ServiceControl="ServiceName_StudioNotifyService" Name="[ServiceName_StudioNotifyService]" Event="161" Wait="0" Component_="ASC.Studio.Notify.exe"/>
|
||||
@ -847,25 +1200,28 @@
|
||||
<ROW ServiceControl="ServiceName_UrlShortenerService" Name="[ServiceName_UrlShortenerService]" Event="161" Wait="0" Component_="UrlShortener.exe"/>
|
||||
<ROW ServiceControl="ServiceName_WebApi" Name="[ServiceName_WebApi]" Event="161" Wait="0" Component_="ASC.Web.Api.exe"/>
|
||||
<ROW ServiceControl="ServiceName_WebStudio" Name="[ServiceName_WebStudio]" Event="161" Wait="0" Component_="ASC.Web.Studio.exe"/>
|
||||
<ROW ServiceControl="ServiceName_WebhooksService" Name="[ServiceName_WebhooksService]" Event="161" Wait="0" Component_="ASC.Webhooks.Service.exe"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiServInstComponent">
|
||||
<ROW ServiceInstall="ASC.ClearEvents.exe" Name="[ServiceName_ClearEvents]" DisplayName="[ServiceName_ClearEvents]" ServiceType="16" StartType="2" ErrorControl="1" Arguments="--urls=[APP_URLS]:5027 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_BackupService] --core:products:folder="[APPDIR]products" [SUBFOLDER_SERVER]" Component_="ASC.ClearEvents.exe"/>
|
||||
<ROW ServiceInstall="ASC.Data.Backup.BackgroundTasks.exe" Name="[ServiceName_BackgroundTasks]" DisplayName="[ServiceName_BackgroundTasks]" ServiceType="16" StartType="2" ErrorControl="1" Arguments="--urls=[APP_URLS]:5032 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_BackupService] --core:products:folder="[APPDIR]products" [SUBFOLDER_SERVER]" Component_="ASC.Data.Backup.BackgroundTasks.exe"/>
|
||||
<ROW ServiceInstall="ASC.Migration.exe" Name="[ServiceName_Migration]" DisplayName="[ServiceName_Migration]" ServiceType="16" StartType="2" ErrorControl="1" Arguments="--urls=[APP_URLS]:5018 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_BackupService] --core:products:folder="[APPDIR]products" [SUBFOLDER_SERVER]" Component_="ASC.Migration.exe"/>
|
||||
<ROW ServiceInstall="ASC.Webhooks.Service.exe" Name="[ServiceName_WebhooksService]" DisplayName="[ServiceName_WebhooksService]" ServiceType="16" StartType="2" ErrorControl="1" Arguments="--urls=[APP_URLS]:5031 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_BackupService] --core:products:folder="[APPDIR]products" [SUBFOLDER_SERVER]" Component_="ASC.Webhooks.Service.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_BackupService" Name="[ServiceName_BackupService]" DisplayName="[ServiceName_BackupService]" ServiceType="16" StartType="2" ErrorControl="1" Arguments="--urls=[APP_URLS]:5012 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_BackupService] --core:products:folder="[APPDIR]products" [SUBFOLDER_SERVER]" Component_="ASC.Data.Backup.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_FileServer" Name="[ServiceName_FileServer]" DisplayName="[ServiceName_FileServer]" ServiceType="16" StartType="2" ErrorControl="1" Arguments="--urls=[APP_URLS]:5007 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_FileServer] [SUBFOLDER_SERVER]" Component_="ASC.Files.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_FileService" Name="[ServiceName_FileService]" DisplayName="[ServiceName_FileService]" ServiceType="16" StartType="2" ErrorControl="1" Arguments="--urls=[APP_URLS]:5009 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_FileService] --core:products:folder="[APPDIR]products" [SUBFOLDER_SERVER]" Component_="ASC.Files.Service.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_NotifyService" Name="[ServiceName_NotifyService]" DisplayName="[ServiceName_NotifyService]" ServiceType="16" StartType="2" ErrorControl="1" Arguments="--urls=[APP_URLS]:5005 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_NotifyService] --core:products:folder="[APPDIR]products" [SUBFOLDER_SERVER]" Component_="ASC.Notify.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_PeopleServer" Name="[ServiceName_PeopleServer]" DisplayName="[ServiceName_PeopleServer]" ServiceType="16" StartType="2" ErrorControl="1" Arguments="--urls=[APP_URLS]:5004 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_PeopleServer] [SUBFOLDER_SERVER]" Component_="ASC.People.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_Proxy" Name="[ServiceName_Proxy]" DisplayName="[ServiceName_Proxy]" ServiceType="16" StartType="2" ErrorControl="1" Component_="proxy.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_Socket.IO" Name="[ServiceName_Socket.IO]" DisplayName="[ServiceName_Socket.IO]" ServiceType="16" StartType="2" ErrorControl="1" Component_="Socket.IO.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_SsoAuth" Name="[ServiceName_SsoAuth]" DisplayName="[ServiceName_SsoAuth]" ServiceType="16" StartType="2" ErrorControl="1" Component_="SsoAuth.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_StudioNotifyService" Name="[ServiceName_StudioNotifyService]" DisplayName="[ServiceName_StudioNotifyService]" ServiceType="16" StartType="2" ErrorControl="1" Arguments="--urls=[APP_URLS]:5006 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_StudioNotifyService] --core:products:folder="[APPDIR]products" [SUBFOLDER_SERVER]" Component_="ASC.Studio.Notify.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_TelegramService" Name="[ServiceName_TelegramService]" DisplayName="[ServiceName_TelegramService]" ServiceType="16" StartType="2" ErrorControl="1" Arguments="--urls=[APP_URLS]:51702 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_TelegramService] [SUBFOLDER_SERVER]" Component_="ASC.TelegramService.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_UrlShortenerService" Name="[ServiceName_UrlShortenerService]" DisplayName="[ServiceName_UrlShortenerService]" ServiceType="16" StartType="2" ErrorControl="1" Component_="UrlShortener.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_WebApi" Name="[ServiceName_WebApi]" DisplayName="[ServiceName_WebApi]" ServiceType="16" StartType="2" ErrorControl="1" Arguments="--urls=[APP_URLS]:5000 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_WebApi] [SUBFOLDER_SERVER]" Component_="ASC.Web.Api.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_WebStudio" Name="[ServiceName_WebStudio]" DisplayName="[ServiceName_WebStudio]" ServiceType="16" StartType="2" ErrorControl="1" Arguments="--urls=[APP_URLS]:5003 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_WebStudio] [SUBFOLDER_SERVER]" Component_="ASC.Web.Studio.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_BackgroundTasks" Name="[ServiceName_BackgroundTasks]" DisplayName="[ServiceName_BackgroundTasks]" ServiceType="16" StartType="2" ErrorControl="1" StartName="NT AUTHORITY\LocalService" Arguments="--urls=[APP_URLS]:5032 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_BackupService] --core:products:folder="[APPDIR]products" [SUBFOLDER_SERVER]" Component_="ASC.Data.Backup.BackgroundTasks.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_BackupService" Name="[ServiceName_BackupService]" DisplayName="[ServiceName_BackupService]" ServiceType="16" StartType="2" ErrorControl="1" StartName="NT AUTHORITY\LocalService" Arguments="--urls=[APP_URLS]:5012 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_BackupService] --core:products:folder="[APPDIR]products" [SUBFOLDER_SERVER]" Component_="ASC.Data.Backup.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_ClearEvents" Name="[ServiceName_ClearEvents]" DisplayName="[ServiceName_ClearEvents]" ServiceType="16" StartType="2" ErrorControl="1" StartName="NT AUTHORITY\LocalService" Arguments="--urls=[APP_URLS]:5027 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_BackupService] --core:products:folder="[APPDIR]products" [SUBFOLDER_SERVER]" Component_="ASC.ClearEvents.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_DocEditor" Name="[ServiceName_DocEditor]" DisplayName="[ServiceName_DocEditor]" ServiceType="16" StartType="2" ErrorControl="1" StartName="NT AUTHORITY\LocalService" Component_="DocEditor.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_FileServer" Name="[ServiceName_FileServer]" DisplayName="[ServiceName_FileServer]" ServiceType="16" StartType="2" ErrorControl="1" StartName="NT AUTHORITY\LocalService" Arguments="--urls=[APP_URLS]:5007 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_FileServer] [SUBFOLDER_SERVER]" Component_="ASC.Files.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_FileService" Name="[ServiceName_FileService]" DisplayName="[ServiceName_FileService]" ServiceType="16" StartType="2" ErrorControl="1" StartName="NT AUTHORITY\LocalService" Arguments="--urls=[APP_URLS]:5009 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_FileService] --core:products:folder="[APPDIR]products" [SUBFOLDER_SERVER]" Component_="ASC.Files.Service.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_Login" Name="[ServiceName_Login]" DisplayName="[ServiceName_Login]" ServiceType="16" StartType="2" ErrorControl="1" StartName="NT AUTHORITY\LocalService" Component_="Login.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_Migration" Name="[ServiceName_Migration]" DisplayName="[ServiceName_Migration]" ServiceType="16" StartType="2" ErrorControl="1" StartName="NT AUTHORITY\LocalService" Arguments="--urls=[APP_URLS]:5018 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_BackupService] --core:products:folder="[APPDIR]products" [SUBFOLDER_SERVER]" Component_="ASC.Migration.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_NotifyService" Name="[ServiceName_NotifyService]" DisplayName="[ServiceName_NotifyService]" ServiceType="16" StartType="2" ErrorControl="1" StartName="NT AUTHORITY\LocalService" Arguments="--urls=[APP_URLS]:5005 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_NotifyService] --core:products:folder="[APPDIR]products" [SUBFOLDER_SERVER]" Component_="ASC.Notify.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_PeopleServer" Name="[ServiceName_PeopleServer]" DisplayName="[ServiceName_PeopleServer]" ServiceType="16" StartType="2" ErrorControl="1" StartName="NT AUTHORITY\LocalService" Arguments="--urls=[APP_URLS]:5004 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_PeopleServer] [SUBFOLDER_SERVER]" Component_="ASC.People.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_Proxy" Name="[ServiceName_Proxy]" DisplayName="[ServiceName_Proxy]" ServiceType="16" StartType="2" ErrorControl="1" StartName="NT AUTHORITY\LocalService" Component_="Proxy.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_Socket.IO" Name="[ServiceName_Socket.IO]" DisplayName="[ServiceName_Socket.IO]" ServiceType="16" StartType="2" ErrorControl="1" StartName="NT AUTHORITY\LocalService" Component_="Socket.IO.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_SsoAuth" Name="[ServiceName_SsoAuth]" DisplayName="[ServiceName_SsoAuth]" ServiceType="16" StartType="2" ErrorControl="1" StartName="NT AUTHORITY\LocalService" Component_="SsoAuth.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_StudioNotifyService" Name="[ServiceName_StudioNotifyService]" DisplayName="[ServiceName_StudioNotifyService]" ServiceType="16" StartType="2" ErrorControl="1" StartName="NT AUTHORITY\LocalService" Arguments="--urls=[APP_URLS]:5006 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_StudioNotifyService] --core:products:folder="[APPDIR]products" [SUBFOLDER_SERVER]" Component_="ASC.Studio.Notify.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_TelegramService" Name="[ServiceName_TelegramService]" DisplayName="[ServiceName_TelegramService]" ServiceType="16" StartType="2" ErrorControl="1" StartName="NT AUTHORITY\LocalService" Arguments="--urls=[APP_URLS]:51702 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_TelegramService] [SUBFOLDER_SERVER]" Component_="ASC.TelegramService.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_UrlShortenerService" Name="[ServiceName_UrlShortenerService]" DisplayName="[ServiceName_UrlShortenerService]" ServiceType="16" StartType="2" ErrorControl="1" StartName="NT AUTHORITY\LocalService" Component_="UrlShortener.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_WebApi" Name="[ServiceName_WebApi]" DisplayName="[ServiceName_WebApi]" ServiceType="16" StartType="2" ErrorControl="1" StartName="NT AUTHORITY\LocalService" Arguments="--urls=[APP_URLS]:5000 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_WebApi] [SUBFOLDER_SERVER]" Component_="ASC.Web.Api.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_WebStudio" Name="[ServiceName_WebStudio]" DisplayName="[ServiceName_WebStudio]" ServiceType="16" StartType="2" ErrorControl="1" StartName="NT AUTHORITY\LocalService" Arguments="--urls=[APP_URLS]:5003 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_WebStudio] [SUBFOLDER_SERVER]" Component_="ASC.Web.Studio.exe"/>
|
||||
<ROW ServiceInstall="ServiceName_WebhooksService" Name="[ServiceName_WebhooksService]" DisplayName="[ServiceName_WebhooksService]" ServiceType="16" StartType="2" ErrorControl="1" StartName="NT AUTHORITY\LocalService" Arguments="--urls=[APP_URLS]:5031 --ENVIRONMENT=[ENVIRONMENT] --pathToConf="[APPDIR]config" --$STORAGE_ROOT="[APPDIR]Data" --log:dir="[APPDIR]Logs" --log:name=[ServiceName_BackupService] --core:products:folder="[APPDIR]products" [SUBFOLDER_SERVER]" Component_="ASC.Webhooks.Service.exe"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiThemeComponent">
|
||||
<ATTRIBUTE name="UsedTheme" value="classic"/>
|
||||
@ -930,19 +1286,15 @@
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.TxtUpdateComponent">
|
||||
<ROW Name="ReplaceAppDir" TxtUpdateSet="xml" FindPattern="{APPDIR}" ReplacePattern="[APPDIR]" Options="2" Order="0" FileEncoding="-1"/>
|
||||
<ROW Name="ReplaceAppDir" TxtUpdateSet="appsettings.test.json" FindPattern="{APPDIRCONF}" ReplacePattern="[APPDIR_FORWARD_SLASH]" Options="2" Order="0" FileEncoding="-1"/>
|
||||
<ROW Name="ReplaceElasticHost" TxtUpdateSet="YourFile.txt" FindPattern=".Host.:.*" ReplacePattern=""Host": "localhost"," Options="3" Order="0" FileEncoding="-1"/>
|
||||
<ROW Name="ReplaceWinVol" TxtUpdateSet="xml" FindPattern="{WindowsVolume}" ReplacePattern="[WindowsVolume]" Options="2" Order="1" FileEncoding="-1"/>
|
||||
<ROW Name="ReplaceAppDir" TxtUpdateSet="json" FindPattern="{APPDIRCONF}" ReplacePattern="[APPDIR_FORWARD_SLASH]" Options="2" Order="0" FileEncoding="-1"/>
|
||||
<ROW Name="ReplaceAppDir" TxtUpdateSet="config.json" FindPattern="{APPDIRCONF}" ReplacePattern="[APPDIR_FORWARD_SLASH]" Options="2" Order="0" FileEncoding="-1"/>
|
||||
<ROW Name="ReplaceAppDir" TxtUpdateSet="config.json_1" FindPattern="{APPDIRCONF}" ReplacePattern="[APPDIR_FORWARD_SLASH]" Options="2" Order="0" FileEncoding="-1"/>
|
||||
<ROW Name="ReplaceInclude" TxtUpdateSet="YourFile.txt" FindPattern="/etc/nginx/includes" ReplacePattern="includes" Options="2" Order="0" FileEncoding="-1"/>
|
||||
<ROW Name="ReplaceRoot" TxtUpdateSet="YourFile.txt_1" FindPattern="/var/www" ReplacePattern=".." Options="2" Order="0" FileEncoding="-1"/>
|
||||
<ROW Name="ReplaceRoot" TxtUpdateSet="YourFile.txt_2" FindPattern="/var/www" ReplacePattern=".." Options="2" Order="0" FileEncoding="-1"/>
|
||||
</COMPONENT>
|
||||
<COMPONENT cid="caphyon.advinst.msicomp.TxtUpdateSetComponent">
|
||||
<ROW Key="YourFile.txt" Component="AI_ExePath" FileName="elastic.json" Directory="config_Dir" Options="17"/>
|
||||
<ROW Key="appsettings.test.json" Component="Socket.IO.exe" FileName="*.json" Directory="config_Dir" Options="17"/>
|
||||
<ROW Key="config.json" Component="proxy.xml" FileName="config.json" Directory="config_2_Dir" Options="17"/>
|
||||
<ROW Key="config.json_1" Component="proxy.xml" FileName="config.json" Directory="NewFolder_1_Dir" Options="17"/>
|
||||
<ROW Key="json" Component="proxy.xml" FileName="config.json" Directory="config_1_Dir" Options="17"/>
|
||||
<ROW Key="YourFile.txt" Component="conf" FileName="onlyoffice.conf" Directory="conf_Dir" Options="17"/>
|
||||
<ROW Key="YourFile.txt_1" Component="conf" FileName="onlyoffice-client.conf" Directory="conf_Dir" Options="17"/>
|
||||
<ROW Key="YourFile.txt_2" Component="includes" FileName="onlyoffice-public.conf" Directory="includes_Dir" Options="17"/>
|
||||
<ROW Key="xml" Component="AI_ExePath" FileName="*.xml" Directory="tools_Dir" Options="17"/>
|
||||
</COMPONENT>
|
||||
</DOCUMENT>
|
||||
|
@ -4,14 +4,12 @@ echo #####################
|
||||
echo # build backend #
|
||||
echo #####################
|
||||
|
||||
set SRC_PATH=%~s2
|
||||
|
||||
pushd %~1
|
||||
|
||||
call dotnet build ASC.Web.sln
|
||||
|
||||
echo "== Build ASC.Thumbnails =="
|
||||
pushd common\ASC.Thumbnails
|
||||
call yarn install --frozen-lockfile
|
||||
popd
|
||||
call dotnet build ASC.Web.slnf
|
||||
call dotnet build ASC.Migrations.sln -o %SRC_PATH%\services\ASC.Migration.Runner\service
|
||||
|
||||
echo "== Build ASC.UrlShortener =="
|
||||
pushd common\ASC.UrlShortener
|
||||
|
@ -1,88 +1,61 @@
|
||||
REM echo ######## Set variables ########
|
||||
set "publisher="Ascensio System SIA""
|
||||
set "zookeeper_version=3.7.1"
|
||||
set "kafka_version=2.8.0"
|
||||
set "nginx_version=1.21.1"
|
||||
set "scala_version=2.12"
|
||||
set "nuget="%cd%\thirdparty\SimpleRestServices\src\.nuget\NuGet.exe""
|
||||
|
||||
REM echo ######## Extracting and preparing files to build ########
|
||||
%sevenzip% x build\install\win\nginx-%nginx_version%.zip -o"build\install\win\Files" -y
|
||||
xcopy "build\install\win\Files\nginx-%nginx_version%" "build\install\win\Files\nginx" /s /y /b /i
|
||||
rmdir build\install\win\Files\nginx-%nginx_version% /s /q
|
||||
rmdir build\install\win\kafka-zookeeper /s /q
|
||||
md build\install\win\kafka-zookeeper
|
||||
md build\install\win\Files\nginx\temp
|
||||
md build\install\win\Files\nginx\logs
|
||||
%tar% -xvf build\install\win\apache-zookeeper-%zookeeper_version%-bin.tar.gz -C build\install\win\kafka-zookeeper
|
||||
%tar% -xvf build\install\win\kafka_%scala_version%-%kafka_version%.tgz -C build\install\win\kafka-zookeeper
|
||||
ren build\install\win\kafka-zookeeper\apache-zookeeper-%zookeeper_version%-bin zookeeper
|
||||
ren build\install\win\kafka-zookeeper\kafka_%scala_version%-%kafka_version% kafka
|
||||
md build\install\win\kafka-zookeeper\kafka\tools
|
||||
md build\install\win\Files\tools
|
||||
copy build\install\win\WinSW.NET4new.exe "build\install\win\kafka-zookeeper\kafka\tools\kafka.exe" /y
|
||||
copy build\install\win\WinSW.NET4new.exe "build\install\win\kafka-zookeeper\kafka\tools\zookeeper.exe" /y
|
||||
copy build\install\win\tools\zookeeper.xml "build\install\win\kafka-zookeeper\kafka\tools\zookeeper.xml" /y
|
||||
copy build\install\win\tools\kafka.xml "build\install\win\kafka-zookeeper\kafka\tools\kafka.xml" /y
|
||||
del /f /q build\install\win\apache-zookeeper-%zookeeper_version%-bin.*
|
||||
del /f /q build\install\win\kafka_%scala_version%-%kafka_version%.*
|
||||
copy build\install\win\WinSW.NET4.exe "build\install\win\Files\tools\proxy.exe" /y
|
||||
copy build\install\win\tools\proxy.xml "build\install\win\Files\tools\proxy.xml" /y
|
||||
md build\install\win\Files\Logs
|
||||
md build\install\win\Files\service\
|
||||
md build\install\win\Files\products\ASC.Files\server\temp
|
||||
md build\install\win\Files\products\ASC.People\server\temp
|
||||
md build\install\win\Files\services\ASC.Data.Backup\service\temp
|
||||
md build\install\win\Files\services\ASC.Files.Service\service\temp
|
||||
md build\install\win\Files\services\ASC.Notify\service\temp
|
||||
md build\install\win\Files\services\ASC.Studio.Notify\service\temp
|
||||
md build\install\win\Files\services\ASC.TelegramService\service\temp
|
||||
md build\install\win\Files\services\ASC.Data.Backup.BackgroundTasks\service\temp
|
||||
md build\install\win\Files\services\ASC.ClearEvents\service\temp
|
||||
md build\install\win\Files\services\ASC.Migration\service\temp
|
||||
md build\install\win\Files\services\ASC.Webhooks.Service\service\temp
|
||||
md build\install\win\Files\services\ASC.Web.Api\service\temp
|
||||
md build\install\win\Files\services\ASC.Web.Studio\service\temp
|
||||
copy build\install\win\WinSW.NET4.exe "build\install\win\Files\tools\Proxy.exe" /y
|
||||
copy build\install\win\tools\Proxy.xml "build\install\win\Files\tools\Proxy.xml" /y
|
||||
copy build\install\win\WinSW3.0.0.exe "build\install\win\Files\tools\Socket.IO.exe" /y
|
||||
copy build\install\win\tools\Socket.IO.xml "build\install\win\Files\tools\Socket.IO.xml" /y
|
||||
copy build\install\win\WinSW3.0.0.exe "build\install\win\Files\tools\UrlShortener.exe" /y
|
||||
copy build\install\win\tools\UrlShortener.xml "build\install\win\Files\tools\UrlShortener.xml" /y
|
||||
copy build\install\win\WinSW3.0.0.exe "build\install\win\Files\tools\SsoAuth.exe" /y
|
||||
copy build\install\win\tools\SsoAuth.xml "build\install\win\Files\tools\SsoAuth.xml" /y
|
||||
copy build\install\win\WinSW3.0.0.exe "build\install\win\Files\tools\DocEditor.exe" /y
|
||||
copy build\install\win\tools\DocEditor.xml "build\install\win\Files\tools\DocEditor.xml" /y
|
||||
copy build\install\win\WinSW3.0.0.exe "build\install\win\Files\tools\Login.exe" /y
|
||||
copy build\install\win\tools\Login.xml "build\install\win\Files\tools\Login.xml" /y
|
||||
copy "build\install\win\nginx.conf" "build\install\win\Files\nginx\conf\nginx.conf" /y
|
||||
copy "build\install\win\kafka-zookeeper\zookeeper\conf\zoo_sample.cfg" "build\install\win\kafka-zookeeper\zookeeper\conf\zoo.cfg" /y
|
||||
del /f /q "build\install\win\kafka-zookeeper\zookeeper\conf\zoo_sample.cfg"
|
||||
rmdir build\install\win\publish /s /q
|
||||
del /f /q build\install\win\Files\nginx\conf\onlyoffice-login.conf
|
||||
|
||||
|
||||
REM echo ######## Build Utils ########
|
||||
%nuget% install %cd%\build\install\win\CustomActions\C#\Utils\packages.config -OutputDirectory %cd%\build\install\win\CustomActions\C#\Utils\packages
|
||||
%msbuild% build\install\win\CustomActions\C#\Utils\Utils.csproj
|
||||
copy build\install\win\CustomActions\C#\Utils\bin\Debug\Utils.CA.dll build\install\win\Utils.CA.dll /y
|
||||
rmdir build\install\win\CustomActions\C#\Utils\bin /s /q
|
||||
rmdir build\install\win\CustomActions\C#\Utils\obj /s /q
|
||||
|
||||
REM echo ######## Edit zookeeper/kafka cfg and proprties files ########
|
||||
%sed% -i "s/\(dataDir\).*/\1=.\/..\/zookeeper\/Data/g" build/install/win/kafka-zookeeper/zookeeper/conf/zoo.cfg
|
||||
%sed% -i "s/\(log.dirs\)=.*/\1=kafka-logs/g" build/install/win/kafka-zookeeper/kafka/config/server.properties
|
||||
%sed% -i "s/\(zookeeper.connect\)=.*/\1=localhost:2181/g" build/install/win/kafka-zookeeper/kafka/config/server.properties
|
||||
%sed% -i "s/\(clientPort\)=.*/\1=2181/g" build/install/win/kafka-zookeeper/kafka/config/zookeeper.properties
|
||||
%sed% -i "s/\(dataDir\).*/\1=.\/..\/zookeeper\/Data/g" build/install/win/kafka-zookeeper/kafka/config/zookeeper.properties
|
||||
%sed% -i "s/\(bootstrap.servers\)=.*/\1=localhost:9092/g" build/install/win/kafka-zookeeper/kafka/config/consumer.properties
|
||||
%sed% -i "s/\(bootstrap.servers\)=.*/\1=localhost:9092/g" build/install/win/kafka-zookeeper/kafka/config/connect-standalone.properties
|
||||
%sed% -i "s/\(offset.storage.file.filename\)=.*/\1=kafka-offsets/g" build/install/win/kafka-zookeeper/kafka/config/connect-standalone.properties
|
||||
%sed% -i "s/\(logger.kafka.controller\)=.*,/\1=INFO,/g" build/install/win/kafka-zookeeper/kafka/config/log4j.properties
|
||||
%sed% -i "s/\(logger.state.change.logger\)=.*,/\1=INFO,/g" build/install/win/kafka-zookeeper/kafka/config/log4j.properties
|
||||
echo log4j.logger.kafka.producer.async.DefaultEventHandler=INFO, kafkaAppender >> build/install/win/kafka-zookeeper/kafka/config/log4j.properties
|
||||
echo exit /b 1 >> build/install/win/kafka-zookeeper/kafka/bin/windows/zookeeper-server-start.bat
|
||||
echo exit /b 1 >> build/install/win/kafka-zookeeper/kafka/bin/windows/kafka-server-start.bat
|
||||
|
||||
REM echo ######## Edit nginx conf files ########
|
||||
%sed% -i "s!#rewrite!rewrite!g" build/install/win/Files/nginx/conf/onlyoffice.conf
|
||||
%sed% -i "s!/etc/nginx/includes!includes!g" build/install/win/Files/nginx/conf/onlyoffice.conf
|
||||
%sed% -i "s!/var/www!..!g" build/install/win/Files/nginx/conf/onlyoffice-*.conf
|
||||
%sed% -i "s!/var/www!..!g" build/install/win/Files/nginx/conf/includes/onlyoffice-*.conf
|
||||
|
||||
REM echo ######## Edit json files ########
|
||||
%sed% -i "s!\(\"machinekey\":\).\".*\"!\1 \"1123askdasjklasbnd\"!g" build/install/win/Files/config/appsettings*.json
|
||||
%sed% -i "s!\(\"folder\":\).\".*\"!\1 \"{APPDIRCONF}products\"!g" build/install/win/Files/config/appsettings*.json
|
||||
%sed% -i "s!\(\"path\":\).\".*\"!\1 \"{APPDIRCONF}services\/ASC.Socket.IO\/service\"!g" build/install/win/Files/config/socket*.json
|
||||
%sed% -i "s!\(\"path\":\).\".*\"!\1 \"{APPDIRCONF}services\/ASC.Thumbnails\/service\"!g" build/install/win/Files/config/thumb*.json
|
||||
%sed% -i "s!\(\"path\":\).\".*\"!\1 \"{APPDIRCONF}services\/ASC.UrlShortener\/service\/index.js\"!g" build/install/win/Files/config/urlshortener*.json
|
||||
%sed% -i "s!\(\"path\":\).\".*\"!\1 \"{APPDIRCONF}services\/ASC.SsoAuth\/service\"!g" build/install/win/Files/config/ssoauth*.json
|
||||
%sed% -i "s!\(\"path\":\).\".*\"!\1 \"{APPDIRCONF}services\/ASC.UrlShortener\/service\/index.js\"!g" build/install/win/Files/config/appsettings.services.json
|
||||
%sed% -i "s!\(\"log\":\).\".*\"!\1 \"{APPDIRCONF}Logs\/urlshortener.log\"!g" build/install/win/Files/config/appsettings.services.json
|
||||
|
||||
REM echo ######## Delete temp files ########
|
||||
del /f /q build\install\win\Files\config\sed*
|
||||
del /f /q build\install\win\Files\nginx\conf\sed*
|
||||
del /f /q build\install\win\Files\nginx\conf\includes\sed*
|
||||
del /f /q build\install\win\kafka-zookeeper\zookeeper\conf\sed*
|
||||
del /f /q build\install\win\kafka-zookeeper\kafka\config\sed*
|
||||
del /f /q build\install\win\Files\services\*\service\config\sed*
|
||||
del /f /q build\install\win\*.back.*
|
||||
|
||||
REM echo ######## Build kafka/zookeeper ########
|
||||
%AdvancedInstaller% /rebuild "build\install\win\Apache ZooKeeper.aip"
|
||||
copy "build\install\win\publish\Apache ZooKeeper.msi" "build\install\win\Apache ZooKeeper.msi" /y
|
||||
%AdvancedInstaller% /rebuild "build\install\win\Apache Kafka.aip"
|
||||
copy "build\install\win\publish\Apache Kafka.msi" "build\install\win\Apache Kafka.msi" /y
|
||||
|
||||
REM echo ######## Build MySQL Server Installer ########
|
||||
iscc /Qp /S"byparam="signtool" sign /a /n "%publisher%" /t http://timestamp.digicert.com $f" "build\install\win\MySQL Server Installer Runner.iss"
|
||||
|
||||
|
@ -29,9 +29,6 @@ function DownloadComponents {
|
||||
}
|
||||
}
|
||||
|
||||
$zookeeper_version = '3.7.1'
|
||||
$kafka_version = '2.8.0'
|
||||
$scala_version = '2.12'
|
||||
$nginx_version = '1.21.1'
|
||||
|
||||
$path_prereq = "${pwd}\build\install\win\"
|
||||
@ -43,17 +40,6 @@ $prerequisites = @(
|
||||
link = "https://nginx.org/download/nginx-${nginx_version}.zip";
|
||||
}
|
||||
|
||||
@{
|
||||
download_allways = $false;
|
||||
name = "apache-zookeeper-${zookeeper_version}-bin.tar.gz";
|
||||
link = "https://dlcdn.apache.org/zookeeper/zookeeper-${zookeeper_version}/apache-zookeeper-${zookeeper_version}-bin.tar.gz";
|
||||
}
|
||||
@{
|
||||
download_allways = $false;
|
||||
name = "kafka_${scala_version}-${kafka_version}.tgz";
|
||||
link = "https://archive.apache.org/dist/kafka/${kafka_version}/kafka_${scala_version}-${kafka_version}.tgz";
|
||||
}
|
||||
|
||||
@{
|
||||
download_allways = $false;
|
||||
name = "WinSW.NET4new.exe";
|
||||
@ -61,4 +47,16 @@ $prerequisites = @(
|
||||
}
|
||||
)
|
||||
|
||||
$path_nuget_packages = "${pwd}\.nuget\packages\"
|
||||
|
||||
$nuget_packages = @(
|
||||
@{
|
||||
download_allways = $false;
|
||||
name = "rabbitmq.client.3.6.5.nupkg";
|
||||
link = "https://www.nuget.org/api/v2/package/RabbitMQ.Client/3.6.5";
|
||||
}
|
||||
)
|
||||
|
||||
DownloadComponents $prerequisites $path_prereq
|
||||
|
||||
DownloadComponents $nuget_packages $path_nuget_packages
|
||||
|
@ -4,9 +4,12 @@ echo ######################
|
||||
echo # build frontend #
|
||||
echo ######################
|
||||
|
||||
pushd %~1
|
||||
set DEBUG_INFO=%~2
|
||||
|
||||
pushd %~s1
|
||||
|
||||
call yarn install
|
||||
if "%DEBUG_INFO%"=="true" yarn debug-info
|
||||
call yarn build
|
||||
call yarn deploy
|
||||
|
||||
|
@ -17,10 +17,6 @@ if defined SecondArg (
|
||||
)
|
||||
|
||||
xcopy "%PathToRepository%\build\deploy\public" "%PathToAppFolder%\public" /s /y /b /i
|
||||
xcopy "%PathToRepository%\build\deploy\studio\client" "%PathToAppFolder%\studio\client" /s /y /b /i
|
||||
xcopy "%PathToRepository%\build\deploy\studio\login" "%PathToAppFolder%\studio\login" /s /y /b /i
|
||||
xcopy "%PathToRepository%\build\deploy\products\ASC.Files\client" "%PathToAppFolder%\products\ASC.Files\client" /s /y /b /i
|
||||
xcopy "%PathToRepository%\build\deploy\products\ASC.Files\editor" "%PathToAppFolder%\products\ASC.Files\editor" /s /y /b /i
|
||||
xcopy "%PathToRepository%\build\deploy\products\ASC.People\client" "%PathToAppFolder%\products\ASC.People\client" /s /y /b /i
|
||||
xcopy "%PathToRepository%\build\deploy\client" "%PathToAppFolder%\client" /s /y /b /i
|
||||
xcopy "%PathToRepository%\config\nginx" "%PathToAppFolder%\nginx\conf" /s /y /b /i
|
||||
xcopy "%PathToRepository%\config\*" "%PathToAppFolder%\config" /y /b /i
|
||||
|
@ -32,54 +32,7 @@ http {
|
||||
keepalive_timeout 65;
|
||||
|
||||
#gzip on;
|
||||
|
||||
server {
|
||||
|
||||
set $public_root ../public;
|
||||
listen 80;
|
||||
server_name localhost;
|
||||
|
||||
#charset koi8-r;
|
||||
|
||||
#access_log logs/host.access.log main;
|
||||
|
||||
location / {
|
||||
root html;
|
||||
index index.html index.htm;
|
||||
}
|
||||
|
||||
#error_page 404 /404.html;
|
||||
|
||||
# redirect server error pages to the static page /50x.html
|
||||
#
|
||||
error_page 500 502 503 504 /50x.html;
|
||||
location = /50x.html {
|
||||
root html;
|
||||
}
|
||||
}
|
||||
|
||||
include onlyoffice.conf;
|
||||
include onlyoffice-*.conf;
|
||||
|
||||
# HTTPS server
|
||||
#
|
||||
#server {
|
||||
# listen 443 ssl;
|
||||
# server_name localhost;
|
||||
|
||||
# ssl_certificate cert.pem;
|
||||
# ssl_certificate_key cert.key;
|
||||
|
||||
# ssl_session_cache shared:SSL:1m;
|
||||
# ssl_session_timeout 5m;
|
||||
|
||||
# ssl_ciphers HIGH:!aNULL:!MD5;
|
||||
# ssl_prefer_server_ciphers on;
|
||||
|
||||
# location / {
|
||||
# root html;
|
||||
# index index.html index.htm;
|
||||
# }
|
||||
#}
|
||||
|
||||
}
|
||||
|
@ -16,34 +16,24 @@ if defined SecondArg (
|
||||
set PathToAppFolder=%FirstArg%\publish
|
||||
)
|
||||
|
||||
rem publish in directory 'products'
|
||||
REM dotnet publish "%PathToRepository%\products\ASC.Calendar\server\ASC.Calendar.csproj" -c Release --self-contained false -o "%PathToAppFolder%\products\ASC.Calendar\server"
|
||||
REM dotnet publish "%PathToRepository%\products\ASC.CRM\server\ASC.CRM.csproj" -c Release --self-contained false -o "%PathToAppFolder%\products\ASC.CRM\server"
|
||||
rem backend services (dotnet) in directory 'products'
|
||||
dotnet publish "%PathToRepository%\products\ASC.Files\server\ASC.Files.csproj" -c Release --self-contained false -o "%PathToAppFolder%\products\ASC.Files\server"
|
||||
REM dotnet publish "%PathToRepository%\products\ASC.Mail\server\ASC.Mail.csproj" -c Release --self-contained false -o "%PathToAppFolder%\products\ASC.Mail\server"
|
||||
dotnet publish "%PathToRepository%\products\ASC.People\server\ASC.People.csproj" -c Release --self-contained false -o "%PathToAppFolder%\products\ASC.People\server"
|
||||
REM dotnet publish "%PathToRepository%\products\ASC.Projects\server\ASC.Projects.csproj" -c Release --self-contained false -o "%PathToAppFolder%\products\ASC.Projects\server"
|
||||
|
||||
rem publish in directory 'services'
|
||||
dotnet publish "%PathToRepository%\common\services\ASC.ApiSystem\ASC.ApiSystem.csproj" -c Release --self-contained false -o "%PathToAppFolder%\services\ASC.ApiSystem\service"
|
||||
rem backend services (dotnet) in directory 'services'
|
||||
dotnet publish "%PathToRepository%\common\services\ASC.Data.Backup\ASC.Data.Backup.csproj" -c Release --self-contained false -o "%PathToAppFolder%\services\ASC.Data.Backup\service"
|
||||
dotnet publish "%PathToRepository%\common\services\ASC.Data.Storage.Encryption\ASC.Data.Storage.Encryption.csproj" -c Release --self-contained false -o "%PathToAppFolder%\services\ASC.Data.Storage.Encryption\service"
|
||||
dotnet publish "%PathToRepository%\products\ASC.Files\service\ASC.Files.Service.csproj" -c Release --self-contained false -o "%PathToAppFolder%\services\ASC.Files.Service\service"
|
||||
dotnet publish "%PathToRepository%\common\services\ASC.Data.Storage.Migration\ASC.Data.Storage.Migration.csproj" -c Release --self-contained false -o "%PathToAppFolder%\services\ASC.Data.Storage.Migration\service"
|
||||
dotnet publish "%PathToRepository%\common\services\ASC.Notify\ASC.Notify.csproj" -c Release --self-contained false -o "%PathToAppFolder%\services\ASC.Notify\service"
|
||||
dotnet publish "%PathToRepository%\common\services\ASC.Socket.IO.Svc\ASC.Socket.IO.Svc.csproj" -c Release --self-contained false -o "%PathToAppFolder%\services\ASC.Socket.IO.Svc\service"
|
||||
dotnet publish "%PathToRepository%\common\services\ASC.Studio.Notify\ASC.Studio.Notify.csproj" -c Release --self-contained false -o "%PathToAppFolder%\services\ASC.Studio.Notify\service"
|
||||
dotnet publish "%PathToRepository%\common\services\ASC.TelegramService\ASC.TelegramService.csproj" -c Release --self-contained false -o "%PathToAppFolder%\services\ASC.TelegramService\service"
|
||||
dotnet publish "%PathToRepository%\common\services\ASC.Thumbnails.Svc\ASC.Thumbnails.Svc.csproj" -c Release --self-contained false -o "%PathToAppFolder%\services\ASC.Thumbnails.Svc\service"
|
||||
dotnet publish "%PathToRepository%\common\services\ASC.UrlShortener.Svc\ASC.UrlShortener.Svc.csproj" -c Release --self-contained false -o "%PathToAppFolder%\services\ASC.UrlShortener.Svc\service"
|
||||
dotnet publish "%PathToRepository%\common\services\ASC.Data.Backup.BackgroundTasks\ASC.Data.Backup.BackgroundTasks.csproj" -c Release --self-contained false -o "%PathToAppFolder%\services\ASC.Data.Backup.BackgroundTasks\service"
|
||||
dotnet publish "%PathToRepository%\common\services\ASC.ClearEvents\ASC.ClearEvents.csproj" -c Release --self-contained false -o "%PathToAppFolder%\services\ASC.ClearEvents\service"
|
||||
dotnet publish "%PathToRepository%\common\ASC.Migration\ASC.Migration.csproj" -c Release --self-contained false -o "%PathToAppFolder%\services\ASC.Migration\service"
|
||||
dotnet publish "%PathToRepository%\common\services\ASC.Webhooks.Service\ASC.Webhooks.Service.csproj" -c Release --self-contained false -o "%PathToAppFolder%\services\ASC.Webhooks.Service\service"
|
||||
dotnet publish "%PathToRepository%\web\ASC.Web.Api\ASC.Web.Api.csproj" -c Release --self-contained false -o "%PathToAppFolder%\services\ASC.Web.Api\service"
|
||||
dotnet publish "%PathToRepository%\web\ASC.Web.Studio\ASC.Web.Studio.csproj" -c Release --self-contained false -o "%PathToAppFolder%\services\ASC.Web.Studio\service"
|
||||
dotnet publish "%PathToRepository%\common\services\ASC.SsoAuth.Svc\ASC.SsoAuth.Svc.csproj" -c Release --self-contained false -o "%PathToAppFolder%\services\ASC.SsoAuth.Svc\service"
|
||||
|
||||
rem Publish backend services (Nodejs)
|
||||
mkdir "%PathToAppFolder%\services\ASC.Thumbnails\service"
|
||||
xcopy "%PathToRepository%\common\ASC.Thumbnails" "%PathToAppFolder%\services\ASC.Thumbnails\service" /s /y /b /i
|
||||
|
||||
rem backend services (Nodejs) in directory 'services'
|
||||
mkdir "%PathToAppFolder%\services\ASC.UrlShortener\service"
|
||||
xcopy "%PathToRepository%\common\ASC.UrlShortener" "%PathToAppFolder%\services\ASC.UrlShortener\service" /s /y /b /i
|
||||
|
||||
@ -52,3 +42,10 @@ xcopy "%PathToRepository%\common\ASC.Socket.IO" "%PathToAppFolder%\services\ASC.
|
||||
|
||||
mkdir "%PathToAppFolder%\services\ASC.SsoAuth\service"
|
||||
xcopy "%PathToRepository%\common\ASC.SsoAuth" "%PathToAppFolder%\services\ASC.SsoAuth\service" /s /y /b /i
|
||||
|
||||
rem backend services (Nodejs) in directory 'products'
|
||||
mkdir "%PathToAppFolder%\products\ASC.Login\login"
|
||||
xcopy "%PathToRepository%\build\deploy\login" "%PathToAppFolder%\products\ASC.Login\login" /s /y /b /i
|
||||
|
||||
mkdir "%PathToAppFolder%\products\ASC.Files\editor"
|
||||
xcopy "%PathToRepository%\build\deploy\editor" "%PathToAppFolder%\products\ASC.Files\editor" /s /y /b /i
|
||||
|
14
build/install/win/tools/DocEditor.xml
Normal file
14
build/install/win/tools/DocEditor.xml
Normal file
@ -0,0 +1,14 @@
|
||||
<service>
|
||||
<id>ASC.DocEditor</id>
|
||||
<name>ASC.DocEditor</name>
|
||||
<description>This service runs ASC.DocEditor</description>
|
||||
<priority>RealTime</priority>
|
||||
<startmode>Automatic</startmode>
|
||||
<onfailure action="restart" delay="10 sec"/>
|
||||
<executable>node</executable>
|
||||
<arguments>"{APPDIR}products\ASC.Files\editor\server.js"</arguments>
|
||||
<log mode="roll-by-size">
|
||||
<sizeThreshold>10240</sizeThreshold>
|
||||
<keepFiles>8</keepFiles>
|
||||
</log>
|
||||
</service>
|
14
build/install/win/tools/Login.xml
Normal file
14
build/install/win/tools/Login.xml
Normal file
@ -0,0 +1,14 @@
|
||||
<service>
|
||||
<id>ASC.Login</id>
|
||||
<name>ASC.Login</name>
|
||||
<description>This service runs ASC.Login</description>
|
||||
<priority>RealTime</priority>
|
||||
<startmode>Automatic</startmode>
|
||||
<onfailure action="restart" delay="10 sec"/>
|
||||
<executable>node</executable>
|
||||
<arguments>"{APPDIR}products\ASC.Login\login\server.js"</arguments>
|
||||
<log mode="roll-by-size">
|
||||
<sizeThreshold>10240</sizeThreshold>
|
||||
<keepFiles>8</keepFiles>
|
||||
</log>
|
||||
</service>
|
14
build/install/win/tools/Socket.IO.xml
Normal file
14
build/install/win/tools/Socket.IO.xml
Normal file
@ -0,0 +1,14 @@
|
||||
<service>
|
||||
<id>ASC.Socket.IO</id>
|
||||
<name>ASC.Socket.IO</name>
|
||||
<description>This service runs ASC.Socket.IO</description>
|
||||
<priority>RealTime</priority>
|
||||
<startmode>Automatic</startmode>
|
||||
<onfailure action="restart" delay="10 sec"/>
|
||||
<executable>node</executable>
|
||||
<arguments>"{APPDIR}services\ASC.Socket.IO\service\server.js"</arguments>
|
||||
<log mode="roll-by-size">
|
||||
<sizeThreshold>10240</sizeThreshold>
|
||||
<keepFiles>8</keepFiles>
|
||||
</log>
|
||||
</service>
|
14
build/install/win/tools/SsoAuth.xml
Normal file
14
build/install/win/tools/SsoAuth.xml
Normal file
@ -0,0 +1,14 @@
|
||||
<service>
|
||||
<id>ASC.SsoAuth</id>
|
||||
<name>ASC.SsoAuth</name>
|
||||
<description>This service runs ASC.SsoAuth</description>
|
||||
<priority>RealTime</priority>
|
||||
<startmode>Automatic</startmode>
|
||||
<onfailure action="restart" delay="10 sec"/>
|
||||
<executable>node</executable>
|
||||
<arguments>"{APPDIR}services\ASC.SsoAuth\service\app.js"</arguments>
|
||||
<log mode="roll-by-size">
|
||||
<sizeThreshold>10240</sizeThreshold>
|
||||
<keepFiles>8</keepFiles>
|
||||
</log>
|
||||
</service>
|
14
build/install/win/tools/UrlShortener.xml
Normal file
14
build/install/win/tools/UrlShortener.xml
Normal file
@ -0,0 +1,14 @@
|
||||
<service>
|
||||
<id>ASC.UrlShortener</id>
|
||||
<name>ASC.UrlShortener</name>
|
||||
<description>This service runs ASC.UrlShortener</description>
|
||||
<priority>RealTime</priority>
|
||||
<startmode>Automatic</startmode>
|
||||
<onfailure action="restart" delay="10 sec"/>
|
||||
<executable>node</executable>
|
||||
<arguments>"{APPDIR}services\ASC.UrlShortener\service\index.js"</arguments>
|
||||
<log mode="roll-by-size">
|
||||
<sizeThreshold>10240</sizeThreshold>
|
||||
<keepFiles>8</keepFiles>
|
||||
</log>
|
||||
</service>
|
@ -1,15 +0,0 @@
|
||||
<service>
|
||||
<id>kafka</id>
|
||||
<name>kafka</name>
|
||||
<description>This service runs kafka</description>
|
||||
<priority>RealTime</priority>
|
||||
<startmode>Automatic</startmode>
|
||||
<onfailure action="restart" delay="1 sec"/>
|
||||
<executable>{WindowsVolume}Apache\kafka\bin\windows\kafka-server-start.bat</executable>
|
||||
<arguments>{WindowsVolume}Apache\kafka\config\server.properties</arguments>
|
||||
<workingdirectory>{WindowsVolume}Apache\kafka</workingdirectory>
|
||||
<log mode="roll-by-size">
|
||||
<sizeThreshold>10240</sizeThreshold>
|
||||
<keepFiles>8</keepFiles>
|
||||
</log>
|
||||
</service>
|
@ -1,15 +0,0 @@
|
||||
<service>
|
||||
<id>zookeeper</id>
|
||||
<name>zookeeper</name>
|
||||
<description>This service runs zookeeper</description>
|
||||
<priority>RealTime</priority>
|
||||
<startmode>Automatic</startmode>
|
||||
<onfailure action="restart" delay="1 sec"/>
|
||||
<executable>{WindowsVolume}Apache\kafka\bin\windows\zookeeper-server-start.bat</executable>
|
||||
<arguments>{WindowsVolume}Apache\kafka\config\zookeeper.properties</arguments>
|
||||
<workingdirectory>{WindowsVolume}Apache\kafka</workingdirectory>
|
||||
<log mode="roll-by-size">
|
||||
<sizeThreshold>10240</sizeThreshold>
|
||||
<keepFiles>8</keepFiles>
|
||||
</log>
|
||||
</service>
|
@ -72,6 +72,9 @@ const EmptyFolderWrapper = styled.div`
|
||||
line-height: unset;
|
||||
${NoUserSelect}
|
||||
}
|
||||
.empty-folder_container_up-image {
|
||||
${NoUserSelect}
|
||||
}
|
||||
|
||||
.empty-folder_container-icon {
|
||||
height: 20px;
|
||||
|
@ -93,9 +93,11 @@ export default inject(({ filesStore, selectedFolderStore }) => {
|
||||
|
||||
let isRootRoom, isRoom, id;
|
||||
if (navigationPath && navigationPath.length) {
|
||||
isRootRoom = navigationPath[navigationPath.length - 1].isRootRoom;
|
||||
isRoom = navigationPath[navigationPath.length - 1].isRoom;
|
||||
id = navigationPath[navigationPath.length - 1].id;
|
||||
const elem = navigationPath[0];
|
||||
|
||||
isRootRoom = elem.isRootRoom;
|
||||
isRoom = elem.isRoom;
|
||||
id = elem.id;
|
||||
}
|
||||
|
||||
return {
|
||||
|
@ -69,6 +69,8 @@ const RootFolderContainer = (props) => {
|
||||
t("PrivateRoomDescriptionUnbreakable"),
|
||||
];
|
||||
|
||||
const roomHeader = "Welcome to DocSpace";
|
||||
|
||||
const [showLoader, setShowLoader] = React.useState(false);
|
||||
|
||||
React.useEffect(() => {
|
||||
@ -164,7 +166,7 @@ const RootFolderContainer = (props) => {
|
||||
};
|
||||
case FolderType.Rooms:
|
||||
return {
|
||||
headerText: "Welcome to DocSpace!",
|
||||
headerText: roomHeader,
|
||||
descriptionText: roomsDescription,
|
||||
imageSrc: "images/empty_screen_corporate.png",
|
||||
buttons: roomsButtons,
|
||||
@ -277,7 +279,7 @@ const RootFolderContainer = (props) => {
|
||||
alt="plus_icon"
|
||||
/>
|
||||
<Link onClick={onCreateRoom} {...linkStyles}>
|
||||
Create room
|
||||
{t("CreateEditRoomDialog:CreateRoom")}
|
||||
</Link>
|
||||
</div>
|
||||
);
|
||||
@ -391,4 +393,8 @@ export default inject(
|
||||
setIsEmptyPage,
|
||||
};
|
||||
}
|
||||
)(withTranslation("Files")(observer(RootFolderContainer)));
|
||||
)(
|
||||
withTranslation(["Files", "CreateEditRoomDialog"])(
|
||||
observer(RootFolderContainer)
|
||||
)
|
||||
);
|
||||
|
@ -101,7 +101,7 @@ const Panels = (props) => {
|
||||
onSelectFile={createMasterForm}
|
||||
isPanelVisible={selectFileDialogVisible}
|
||||
onClose={onClose}
|
||||
foldersType="exceptPrivacyTrashFolders"
|
||||
filteredType="exceptPrivacyTrashArchiveFolders"
|
||||
ByExtension
|
||||
searchParam={".docx"}
|
||||
dialogName={t("Translations:CreateMasterFormFromFile")}
|
||||
|
@ -2,21 +2,12 @@ import React from "react";
|
||||
import TreeMenu from "@docspace/components/tree-menu";
|
||||
import TreeNode from "@docspace/components/tree-menu/sub-components/tree-node";
|
||||
import styled from "styled-components";
|
||||
import {
|
||||
ConflictResolveType,
|
||||
FolderType,
|
||||
ShareAccessRights,
|
||||
} from "@docspace/common/constants";
|
||||
import toastr from "@docspace/components/toast/toastr";
|
||||
|
||||
import { FolderType, ShareAccessRights } from "@docspace/common/constants";
|
||||
import { onConvertFiles } from "../../helpers/files-converter";
|
||||
import { ReactSVG } from "react-svg";
|
||||
import ExpanderDownIcon from "PUBLIC_DIR/images/expander-down.react.svg";
|
||||
import ExpanderRightIcon from "PUBLIC_DIR/images/expander-right.react.svg";
|
||||
import commonIconsStyles from "@docspace/components/utils/common-icons-style";
|
||||
import withLoader from "../../HOCs/withLoader";
|
||||
import Loaders from "@docspace/common/components/Loaders";
|
||||
|
||||
import { observer, inject } from "mobx-react";
|
||||
import { runInAction } from "mobx";
|
||||
import { withTranslation } from "react-i18next";
|
||||
@ -83,7 +74,7 @@ class TreeFolders extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
||||
this.state = { isExpand: false };
|
||||
this.state = { isExpand: false, isLoading: false };
|
||||
this.selectionFoldersId = [];
|
||||
}
|
||||
|
||||
@ -107,7 +98,7 @@ class TreeFolders extends React.Component {
|
||||
};
|
||||
|
||||
getFolderIcon = (item) => {
|
||||
let iconUrl = "images/catalog.folder.react.svg";
|
||||
let iconUrl = "/static/images/catalog.folder.react.svg";
|
||||
|
||||
switch (item.rootFolderType) {
|
||||
case FolderType.USER:
|
||||
@ -181,14 +172,7 @@ class TreeFolders extends React.Component {
|
||||
};
|
||||
|
||||
showDragItems = (item) => {
|
||||
const {
|
||||
isAdmin,
|
||||
myId,
|
||||
commonId,
|
||||
//rootFolderType,
|
||||
currentId,
|
||||
draggableItems,
|
||||
} = this.props;
|
||||
const { isAdmin, myId, commonId, currentId, draggableItems } = this.props;
|
||||
if (item.id === currentId) {
|
||||
return false;
|
||||
}
|
||||
@ -196,10 +180,6 @@ class TreeFolders extends React.Component {
|
||||
if (!draggableItems || draggableItems.find((x) => x.id === item.id))
|
||||
return false;
|
||||
|
||||
// const isMy = rootFolderType === FolderType.USER;
|
||||
// const isCommon = rootFolderType === FolderType.COMMON;
|
||||
// const isShare = rootFolderType === FolderType.SHARE;
|
||||
|
||||
if (
|
||||
item.rootFolderType === FolderType.SHARE &&
|
||||
item.access === ShareAccessRights.FullAccess
|
||||
@ -208,7 +188,6 @@ class TreeFolders extends React.Component {
|
||||
}
|
||||
|
||||
if (isAdmin) {
|
||||
//if (isMy || isCommon || isShare) {
|
||||
if (
|
||||
(item.pathParts &&
|
||||
(item.pathParts[0] === myId || item.pathParts[0] === commonId)) ||
|
||||
@ -217,24 +196,19 @@ class TreeFolders extends React.Component {
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
//}
|
||||
} else {
|
||||
//if (isMy || isCommon || isShare) {
|
||||
if (
|
||||
(item.pathParts && item.pathParts[0] === myId) ||
|
||||
item.rootFolderType === FolderType.USER
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
//}
|
||||
}
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
getItems = (data) => {
|
||||
const { theme } = this.props;
|
||||
|
||||
return data.map((item) => {
|
||||
const dragging = this.props.dragging ? this.showDragItems(item) : false;
|
||||
const showBadge = false;
|
||||
@ -245,9 +219,18 @@ class TreeFolders extends React.Component {
|
||||
disableNodeValue = "";
|
||||
if (dragging) value = `${item.id} dragging ${provider}`;
|
||||
|
||||
const { roomsFolderId, expandedPanelKeys } = this.props;
|
||||
|
||||
let isDisabledNode = false;
|
||||
if (item.id == roomsFolderId) {
|
||||
isDisabledNode = expandedPanelKeys?.includes(roomsFolderId + "");
|
||||
}
|
||||
|
||||
if (this.selectionFoldersId && this.selectionFoldersId.includes(item.id))
|
||||
disableNodeValue = "disable-node";
|
||||
|
||||
if (isDisabledNode) disableNodeValue += " disable-folder ";
|
||||
|
||||
if ((item.folders && item.folders.length > 0) || serviceFolder) {
|
||||
return (
|
||||
<TreeNode
|
||||
@ -397,11 +380,14 @@ class TreeFolders extends React.Component {
|
||||
};
|
||||
|
||||
onLoadData = (treeNode, isExpand) => {
|
||||
const { data: incomingDate, certainFolders } = this.props;
|
||||
const { data: incomingDate, certainFolders, roomsFolderId } = this.props;
|
||||
isExpand && this.setState({ isExpand: true });
|
||||
this.props.setIsLoading && this.props.setIsLoading(true);
|
||||
//console.log("load data...", treeNode);
|
||||
|
||||
this.setState({
|
||||
isLoading: true,
|
||||
});
|
||||
|
||||
if (this.state.isExpand && !isExpand) {
|
||||
return Promise.resolve();
|
||||
}
|
||||
@ -418,25 +404,47 @@ class TreeFolders extends React.Component {
|
||||
|
||||
this.getNewTreeData(treeData, listIds, data.folders, data.level);
|
||||
!certainFolders && this.props.setTreeFolders(treeData);
|
||||
|
||||
if (data.listIds[0] == roomsFolderId && this.props.onSelect) {
|
||||
const roomsIndex = treeData.findIndex((f) => f.id == roomsFolderId);
|
||||
const firstRoomsNodeId = treeData[roomsIndex]?.folders[0]?.id;
|
||||
this.props.onSelect([firstRoomsNodeId], treeNode);
|
||||
}
|
||||
})
|
||||
.catch((err) => console.log("err", err))
|
||||
.finally(() => {
|
||||
this.setState({ isExpand: false });
|
||||
this.props.setIsLoading && this.props.setIsLoading(false);
|
||||
this.setState({ isExpand: false, isLoading: false });
|
||||
});
|
||||
};
|
||||
|
||||
onExpand = (expandedKeys, treeNode) => {
|
||||
onExpand = (expandedKeys, treeNode, isRoom = false) => {
|
||||
this.expand = true;
|
||||
if (treeNode.node && !treeNode.node.children) {
|
||||
if (treeNode.expanded) {
|
||||
this.onLoadData(treeNode.node, true);
|
||||
}
|
||||
} else if (isRoom) {
|
||||
this.props.onSelect([treeNode.node.children[0].id], treeNode);
|
||||
}
|
||||
|
||||
this.props.setExpandedPanelKeys(expandedKeys);
|
||||
};
|
||||
|
||||
onSelect = (folder, treeNode) => {
|
||||
const { onSelect, expandedPanelKeys, roomsFolderId } = this.props;
|
||||
|
||||
const newExpandedPanelKeys = JSON.parse(JSON.stringify(expandedPanelKeys));
|
||||
newExpandedPanelKeys.push(folder[0]);
|
||||
|
||||
if (folder[0] == roomsFolderId) {
|
||||
this.onExpand(newExpandedPanelKeys, treeNode, true);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
onSelect && onSelect(folder, treeNode);
|
||||
};
|
||||
|
||||
onDragOver = (data) => {
|
||||
const parentElement = data.event.target.parentElement;
|
||||
const existElement = parentElement.classList.contains(
|
||||
@ -486,22 +494,21 @@ class TreeFolders extends React.Component {
|
||||
firstLoadScroll();
|
||||
}
|
||||
};
|
||||
|
||||
render() {
|
||||
const {
|
||||
selectedKeys,
|
||||
isLoading,
|
||||
onSelect,
|
||||
dragging,
|
||||
|
||||
expandedPanelKeys,
|
||||
treeFolders,
|
||||
data,
|
||||
disabled,
|
||||
theme,
|
||||
isPanel,
|
||||
isLoadingNodes,
|
||||
} = this.props;
|
||||
|
||||
const { isLoading } = this.state;
|
||||
|
||||
return (
|
||||
<StyledTreeMenu
|
||||
isPanel={isPanel}
|
||||
@ -512,7 +519,7 @@ class TreeFolders extends React.Component {
|
||||
multiple={false}
|
||||
showIcon
|
||||
switcherIcon={this.switcherIcon}
|
||||
onSelect={onSelect}
|
||||
onSelect={this.onSelect}
|
||||
selectedKeys={selectedKeys}
|
||||
loadData={this.onLoadData}
|
||||
expandedKeys={expandedPanelKeys}
|
||||
@ -542,54 +549,42 @@ export default inject(
|
||||
{ auth, filesStore, treeFoldersStore, selectedFolderStore },
|
||||
{ useDefaultSelectedKeys, selectedKeys }
|
||||
) => {
|
||||
const {
|
||||
selection,
|
||||
setIsLoading,
|
||||
isLoading,
|
||||
dragging,
|
||||
setDragging,
|
||||
} = filesStore;
|
||||
const { selection, dragging, setDragging } = filesStore;
|
||||
|
||||
const {
|
||||
treeFolders,
|
||||
setTreeFolders,
|
||||
myFolderId,
|
||||
commonFolderId,
|
||||
isPrivacyFolder,
|
||||
setExpandedPanelKeys,
|
||||
getSubfolders,
|
||||
setIsLoadingNodes,
|
||||
isLoadingNodes,
|
||||
roomsFolderId,
|
||||
} = treeFoldersStore;
|
||||
const {
|
||||
id,
|
||||
parentId: selectedNodeParentId /* rootFolderType */,
|
||||
} = selectedFolderStore;
|
||||
const { id, parentId: selectedNodeParentId } = selectedFolderStore;
|
||||
|
||||
return {
|
||||
isAdmin: auth.isAdmin,
|
||||
isDesktop: auth.settingsStore.isDesktopClient,
|
||||
dragging,
|
||||
//rootFolderType,
|
||||
currentId: id,
|
||||
myId: myFolderId,
|
||||
commonId: commonFolderId,
|
||||
isPrivacy: isPrivacyFolder,
|
||||
draggableItems: dragging ? selection : null,
|
||||
treeFolders,
|
||||
isLoading,
|
||||
selectedKeys: useDefaultSelectedKeys
|
||||
? treeFoldersStore.selectedKeys
|
||||
: selectedKeys,
|
||||
|
||||
setDragging,
|
||||
setIsLoading,
|
||||
setTreeFolders,
|
||||
setExpandedPanelKeys,
|
||||
getSubfolders,
|
||||
setIsLoadingNodes,
|
||||
isLoadingNodes,
|
||||
selectedNodeParentId,
|
||||
roomsFolderId,
|
||||
};
|
||||
}
|
||||
)(withTranslation(["Files", "Common"])(observer(TreeFolders)));
|
||||
|
@ -46,8 +46,10 @@ const CreateEvent = ({
|
||||
|
||||
replaceFileStream,
|
||||
setEncryptionAccess,
|
||||
|
||||
setEventDialogVisible,
|
||||
eventDialogVisible,
|
||||
}) => {
|
||||
const [visible, setVisible] = React.useState(false);
|
||||
const [headerTitle, setHeaderTitle] = React.useState(null);
|
||||
const [startValue, setStartValue] = React.useState("");
|
||||
|
||||
@ -65,7 +67,7 @@ const CreateEvent = ({
|
||||
}
|
||||
|
||||
setHeaderTitle(defaultName);
|
||||
setVisible(true);
|
||||
setEventDialogVisible(true);
|
||||
}, [extension, title, fromTemplate]);
|
||||
|
||||
const onSave = (e, value, open = true) => {
|
||||
@ -132,7 +134,7 @@ const CreateEvent = ({
|
||||
|
||||
toastr.error(t("Translations:FileProtected"), t("Common:Warning"));
|
||||
|
||||
setVisible(false);
|
||||
setEventDialogVisible(false);
|
||||
|
||||
setFormCreationInfo({
|
||||
newTitle: `${newValue}.${extension}`,
|
||||
@ -233,7 +235,7 @@ const CreateEvent = ({
|
||||
return (
|
||||
<Dialog
|
||||
t={t}
|
||||
visible={visible}
|
||||
visible={eventDialogVisible}
|
||||
title={headerTitle}
|
||||
startValue={startValue}
|
||||
onSave={onSave}
|
||||
@ -280,11 +282,14 @@ export default inject(
|
||||
|
||||
const {
|
||||
setConvertPasswordDialogVisible,
|
||||
|
||||
setEventDialogVisible,
|
||||
setFormCreationInfo,
|
||||
eventDialogVisible,
|
||||
} = dialogsStore;
|
||||
|
||||
return {
|
||||
setEventDialogVisible,
|
||||
eventDialogVisible,
|
||||
setIsLoading,
|
||||
createFile,
|
||||
createFolder,
|
||||
|
@ -21,9 +21,10 @@ const RenameEvent = ({
|
||||
|
||||
editCompleteAction,
|
||||
clearActiveOperations,
|
||||
}) => {
|
||||
const [visible, setVisible] = React.useState(false);
|
||||
|
||||
setEventDialogVisible,
|
||||
eventDialogVisible,
|
||||
}) => {
|
||||
const [startValue, setStartValue] = React.useState("");
|
||||
|
||||
const { t } = useTranslation(["Files"]);
|
||||
@ -31,7 +32,7 @@ const RenameEvent = ({
|
||||
React.useEffect(() => {
|
||||
setStartValue(getTitleWithoutExst(item, false));
|
||||
|
||||
setVisible(true);
|
||||
setEventDialogVisible(true);
|
||||
}, [item]);
|
||||
|
||||
const onUpdate = React.useCallback((e, value) => {
|
||||
@ -47,6 +48,8 @@ const RenameEvent = ({
|
||||
|
||||
if (isSameTitle) {
|
||||
setStartValue(originalTitle);
|
||||
setIsLoading(false);
|
||||
onClose();
|
||||
|
||||
return editCompleteAction(item, type);
|
||||
} else {
|
||||
@ -112,7 +115,7 @@ const RenameEvent = ({
|
||||
return (
|
||||
<Dialog
|
||||
t={t}
|
||||
visible={visible}
|
||||
visible={eventDialogVisible}
|
||||
title={t("Home: Rename")}
|
||||
startValue={startValue}
|
||||
onSave={onUpdate}
|
||||
@ -122,21 +125,31 @@ const RenameEvent = ({
|
||||
);
|
||||
};
|
||||
|
||||
export default inject(({ filesStore, filesActionsStore, uploadDataStore }) => {
|
||||
const { setIsLoading, addActiveItems, updateFile, renameFolder } = filesStore;
|
||||
export default inject(
|
||||
({ filesStore, filesActionsStore, uploadDataStore, dialogsStore }) => {
|
||||
const {
|
||||
setIsLoading,
|
||||
addActiveItems,
|
||||
updateFile,
|
||||
renameFolder,
|
||||
} = filesStore;
|
||||
|
||||
const { editCompleteAction } = filesActionsStore;
|
||||
const { editCompleteAction } = filesActionsStore;
|
||||
|
||||
const { clearActiveOperations } = uploadDataStore;
|
||||
const { clearActiveOperations } = uploadDataStore;
|
||||
const { setEventDialogVisible, eventDialogVisible } = dialogsStore;
|
||||
|
||||
return {
|
||||
setIsLoading,
|
||||
addActiveItems,
|
||||
updateFile,
|
||||
renameFolder,
|
||||
return {
|
||||
setIsLoading,
|
||||
addActiveItems,
|
||||
updateFile,
|
||||
renameFolder,
|
||||
|
||||
editCompleteAction,
|
||||
editCompleteAction,
|
||||
|
||||
clearActiveOperations,
|
||||
};
|
||||
})(observer(RenameEvent));
|
||||
clearActiveOperations,
|
||||
setEventDialogVisible,
|
||||
eventDialogVisible,
|
||||
};
|
||||
}
|
||||
)(observer(RenameEvent));
|
||||
|
@ -1,4 +1,4 @@
|
||||
import React from "react";
|
||||
import React, { useEffect, useCallback, useState } from "react";
|
||||
import { inject, observer } from "mobx-react";
|
||||
|
||||
import toastr from "@docspace/components/toast/toastr";
|
||||
@ -6,6 +6,7 @@ import ModalDialog from "@docspace/components/modal-dialog";
|
||||
import TextInput from "@docspace/components/text-input";
|
||||
import Button from "@docspace/components/button";
|
||||
import ComboBox from "@docspace/components/combobox";
|
||||
import { isSafari, isTablet } from "react-device-detect";
|
||||
|
||||
const Dialog = ({
|
||||
t,
|
||||
@ -20,14 +21,29 @@ const Dialog = ({
|
||||
onCancel,
|
||||
onClose,
|
||||
}) => {
|
||||
const [value, setValue] = React.useState("");
|
||||
const [isDisabled, setIsDisabled] = React.useState(false);
|
||||
const [value, setValue] = useState("");
|
||||
const [isDisabled, setIsDisabled] = useState(false);
|
||||
|
||||
React.useEffect(() => {
|
||||
useEffect(() => {
|
||||
if (startValue) setValue(startValue);
|
||||
}, [startValue]);
|
||||
|
||||
const onChange = React.useCallback((e) => {
|
||||
const onKeyUpHandler = useCallback(
|
||||
(e) => {
|
||||
if (e.keyCode === 27) onCancelAction(e);
|
||||
if (e.keyCode === 13) onSaveAction(e);
|
||||
},
|
||||
[value]
|
||||
);
|
||||
useEffect(() => {
|
||||
document.addEventListener("keyup", onKeyUpHandler, false);
|
||||
|
||||
return () => {
|
||||
document.removeEventListener("keyup", onKeyUpHandler, false);
|
||||
};
|
||||
}, [onKeyUpHandler]);
|
||||
|
||||
const onChange = useCallback((e) => {
|
||||
let newValue = e.target.value;
|
||||
|
||||
if (newValue.match(folderFormValidation)) {
|
||||
@ -39,28 +55,39 @@ const Dialog = ({
|
||||
setValue(newValue);
|
||||
}, []);
|
||||
|
||||
const onFocus = React.useCallback((e) => {
|
||||
const onFocus = useCallback((e) => {
|
||||
e.target.select();
|
||||
}, []);
|
||||
|
||||
const onSaveAction = React.useCallback(
|
||||
const returnWindowPositionAfterKeyboard = () => {
|
||||
isSafari && isTablet && window.scrollTo(0, 0);
|
||||
};
|
||||
|
||||
const onSaveAction = useCallback(
|
||||
(e) => {
|
||||
returnWindowPositionAfterKeyboard();
|
||||
setIsDisabled(true);
|
||||
onSave && onSave(e, value);
|
||||
},
|
||||
[onSave, value]
|
||||
);
|
||||
|
||||
const onCancelAction = React.useCallback((e) => {
|
||||
const onCancelAction = useCallback((e) => {
|
||||
returnWindowPositionAfterKeyboard();
|
||||
onCancel && onCancel(e);
|
||||
}, []);
|
||||
|
||||
const onCloseAction = useCallback((e) => {
|
||||
returnWindowPositionAfterKeyboard();
|
||||
onClose && onClose(e);
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<ModalDialog
|
||||
visible={visible}
|
||||
displayType={"modal"}
|
||||
scale={true}
|
||||
onClose={onClose}
|
||||
onClose={onCloseAction}
|
||||
>
|
||||
<ModalDialog.Header>{title}</ModalDialog.Header>
|
||||
<ModalDialog.Body>
|
||||
|
@ -2,7 +2,7 @@ import React from "react";
|
||||
import PropTypes from "prop-types";
|
||||
import styled from "styled-components";
|
||||
import Scrollbar from "@docspace/components/scrollbar";
|
||||
import { isMobileOnly, isDesktop } from "react-device-detect";
|
||||
import { isMobileOnly, isMobile } from "react-device-detect";
|
||||
import { Base } from "@docspace/components/themes";
|
||||
|
||||
const StyledNav = styled.nav`
|
||||
@ -29,7 +29,7 @@ const StyledNav = styled.nav`
|
||||
${(props) =>
|
||||
props.numberOfModules &&
|
||||
`@media (max-height: ${props.numberOfModules * 52 + 80}px) {
|
||||
position: ${isDesktop && "relative"};
|
||||
position: ${!isMobile && "relative"};
|
||||
margin-top: 16px;
|
||||
}`}
|
||||
|
||||
|
@ -8,7 +8,7 @@ import { withTranslation } from "react-i18next";
|
||||
import ModalDialogContainer from "../ModalDialogContainer";
|
||||
import toastr from "@docspace/components/toast/toastr";
|
||||
import Link from "@docspace/components/link";
|
||||
import { isDesktop } from "react-device-detect";
|
||||
import { isMobile } from "react-device-detect";
|
||||
|
||||
const StyledModal = styled(ModalDialogContainer)`
|
||||
.backup-codes-counter {
|
||||
@ -118,7 +118,7 @@ class BackupCodesDialogComponent extends React.Component {
|
||||
size="normal"
|
||||
onClick={this.props.onClose}
|
||||
/>
|
||||
{isDesktop && (
|
||||
{!isMobile && (
|
||||
<div className="backup-codes-print-link-wrapper">
|
||||
<Link
|
||||
type="action"
|
||||
|
@ -153,7 +153,7 @@ const OperationsPanelComponent = (props) => {
|
||||
<SelectFolderDialog
|
||||
selectionFiles={selection}
|
||||
isDisableTree={isLoading}
|
||||
foldersType="exceptSortedByTags"
|
||||
filteredType="exceptSortedByTags"
|
||||
isPanelVisible={isVisible}
|
||||
onSubmit={onSubmit}
|
||||
onClose={onClose}
|
||||
|
@ -26,7 +26,7 @@ const SelectFileDialogAsideView = ({
|
||||
resultingFolderTree,
|
||||
footer,
|
||||
fileId,
|
||||
foldersType,
|
||||
filteredType,
|
||||
onCloseSelectFolderDialog,
|
||||
onClickInput,
|
||||
isFolderPanelVisible,
|
||||
@ -59,7 +59,7 @@ const SelectFileDialogAsideView = ({
|
||||
onClose={onCloseSelectFolderDialog}
|
||||
onSelectFolder={onSelectFolder}
|
||||
isPanelVisible={isFolderPanelVisible}
|
||||
foldersType={foldersType}
|
||||
filteredType={filteredType}
|
||||
withoutProvider={withoutProvider}
|
||||
id={folderId}
|
||||
onSelectFile={onSelectFile}
|
||||
@ -70,7 +70,7 @@ const SelectFileDialogAsideView = ({
|
||||
files={files}
|
||||
folderTree={resultingFolderTree}
|
||||
isFolderTreeLoading={!!!resultingFolderTree}
|
||||
isNeedArrowIcon
|
||||
withFileSelectDialog
|
||||
maxInputWidth={maxInputWidth ? maxInputWidth : "446px"}
|
||||
/>
|
||||
|
||||
|
@ -1,280 +0,0 @@
|
||||
import React from "react";
|
||||
import { StyledAsidePanel, StyledSelectFilePanel } from "../StyledPanels";
|
||||
import ModalDialog from "@docspace/components/modal-dialog";
|
||||
import SelectFolderDialog from "../SelectFolderDialog";
|
||||
import FolderTreeBody from "../../FolderTreeBody";
|
||||
import FilesListBody from "./FilesListBody";
|
||||
import Button from "@docspace/components/button";
|
||||
import Text from "@docspace/components/text";
|
||||
import { isArrayEqual } from "@docspace/components/utils/array";
|
||||
import { getFoldersTree } from "@docspace/common/api/files";
|
||||
import {
|
||||
exceptSortedByTagsFolders,
|
||||
exceptPrivacyTrashFolders,
|
||||
} from "../SelectFolderDialog/ExceptionFoldersConstants";
|
||||
|
||||
class SelectFileDialogModalView extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
isLoading: true,
|
||||
isAvailable: true,
|
||||
};
|
||||
this.folderList = "";
|
||||
this.noTreeSwitcher = false;
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
const { onSetLoadingData } = this.props;
|
||||
this.setState({ isLoadingData: true }, function () {
|
||||
onSetLoadingData && onSetLoadingData(true);
|
||||
|
||||
this.trySwitch();
|
||||
});
|
||||
}
|
||||
trySwitch = async () => {
|
||||
const {
|
||||
foldersType,
|
||||
onSelectFolder,
|
||||
selectedFolder,
|
||||
passedId,
|
||||
foldersList,
|
||||
} = this.props;
|
||||
switch (foldersType) {
|
||||
case "exceptSortedByTags":
|
||||
try {
|
||||
const foldersTree = await getFoldersTree();
|
||||
[
|
||||
this.folderList,
|
||||
this.noTreeSwitcher,
|
||||
] = SelectFolderDialog.convertFolders(
|
||||
foldersTree,
|
||||
exceptSortedByTagsFolders
|
||||
);
|
||||
this.onSetSelectedFolder();
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
}
|
||||
|
||||
this.loadersCompletes();
|
||||
break;
|
||||
case "exceptPrivacyTrashFolders":
|
||||
try {
|
||||
const foldersTree = await getFoldersTree();
|
||||
[
|
||||
this.folderList,
|
||||
this.noTreeSwitcher,
|
||||
] = SelectFolderDialog.convertFolders(
|
||||
foldersTree,
|
||||
exceptPrivacyTrashFolders
|
||||
);
|
||||
this.onSetSelectedFolder();
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
}
|
||||
this.loadersCompletes();
|
||||
break;
|
||||
case "common":
|
||||
try {
|
||||
this.folderList = await SelectFolderDialog.getCommonFolders();
|
||||
|
||||
!selectedFolder &&
|
||||
onSelectFolder &&
|
||||
onSelectFolder(
|
||||
`${
|
||||
selectedFolder
|
||||
? selectedFolder
|
||||
: passedId
|
||||
? passedId
|
||||
: this.folderList[0].id
|
||||
}`
|
||||
);
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
}
|
||||
|
||||
this.loadersCompletes();
|
||||
break;
|
||||
case "third-party":
|
||||
try {
|
||||
this.folderList = foldersList
|
||||
? foldersList
|
||||
: await SelectFolderDialog.getCommonThirdPartyList();
|
||||
this.folderList.length !== 0
|
||||
? this.onSetSelectedFolder()
|
||||
: this.setState({ isAvailable: false });
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
}
|
||||
|
||||
this.loadersCompletes();
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
loadersCompletes = () => {
|
||||
const { onSetLoadingData } = this.props;
|
||||
onSetLoadingData && onSetLoadingData(false);
|
||||
|
||||
this.setState({
|
||||
isLoading: false,
|
||||
});
|
||||
};
|
||||
|
||||
onSetSelectedFolder = () => {
|
||||
const { onSelectFolder, selectedFolder, passedId } = this.props;
|
||||
|
||||
onSelectFolder &&
|
||||
onSelectFolder(
|
||||
`${
|
||||
selectedFolder
|
||||
? selectedFolder
|
||||
: passedId
|
||||
? passedId
|
||||
: this.folderList[0].id
|
||||
}`
|
||||
);
|
||||
};
|
||||
onSelect = (folder) => {
|
||||
const { onSelectFolder, selectedFolder } = this.props;
|
||||
|
||||
if (isArrayEqual([folder[0]], [selectedFolder])) {
|
||||
return;
|
||||
}
|
||||
|
||||
onSelectFolder && onSelectFolder(folder[0]);
|
||||
};
|
||||
|
||||
onMouseEvent = (event) => {
|
||||
event.stopPropagation();
|
||||
};
|
||||
render() {
|
||||
const {
|
||||
t,
|
||||
isPanelVisible,
|
||||
onClose,
|
||||
zIndex,
|
||||
withoutProvider,
|
||||
expandedKeys,
|
||||
filter,
|
||||
onSelectFile,
|
||||
filesList,
|
||||
hasNextPage,
|
||||
isNextPageLoading,
|
||||
loadNextPage,
|
||||
selectedFolder,
|
||||
titleFilesList,
|
||||
loadingText,
|
||||
selectedFile,
|
||||
onClickSave,
|
||||
headerName,
|
||||
primaryButtonName,
|
||||
theme,
|
||||
} = this.props;
|
||||
|
||||
const { isLoading, isAvailable } = this.state;
|
||||
|
||||
const isHeaderChildren = !!titleFilesList;
|
||||
|
||||
return (
|
||||
<StyledAsidePanel
|
||||
theme={theme}
|
||||
visible={isPanelVisible}
|
||||
onMouseUp={this.onMouseEvent}
|
||||
onMouseDown={this.onMouseEvent}
|
||||
>
|
||||
<ModalDialog
|
||||
theme={theme}
|
||||
visible={isPanelVisible}
|
||||
zIndex={zIndex}
|
||||
onClose={onClose}
|
||||
className="select-file-modal-dialog"
|
||||
style={{ maxWidth: "725px" }}
|
||||
displayType="modal"
|
||||
isLoading={isLoading}
|
||||
autoMaxHeight
|
||||
autoMaxWidth
|
||||
withFooterBorder
|
||||
>
|
||||
<ModalDialog.Header theme={theme} className={"SELECTFILEDIALOG"}>
|
||||
{headerName ? headerName : t("SelectFile")}
|
||||
</ModalDialog.Header>
|
||||
<ModalDialog.Body
|
||||
theme={theme}
|
||||
className="select-file_body-modal-dialog"
|
||||
>
|
||||
<StyledSelectFilePanel
|
||||
isHeaderChildren={isHeaderChildren}
|
||||
theme={theme}
|
||||
displayType="modal"
|
||||
noTreeSwitcher={this.noTreeSwitcher}
|
||||
>
|
||||
<div className="modal-dialog_body">
|
||||
<div className="modal-dialog_tree-body">
|
||||
<FolderTreeBody
|
||||
theme={theme}
|
||||
expandedKeys={expandedKeys}
|
||||
folderList={this.folderList}
|
||||
onSelect={this.onSelect}
|
||||
withoutProvider={withoutProvider}
|
||||
certainFolders
|
||||
isAvailable={isAvailable}
|
||||
filter={filter}
|
||||
selectedKeys={[selectedFolder]}
|
||||
isHeaderChildren={isHeaderChildren}
|
||||
displayType="modal"
|
||||
/>
|
||||
</div>
|
||||
<div className="modal-dialog_files-body">
|
||||
<>
|
||||
{titleFilesList && (
|
||||
<Text theme={theme} className="modal-dialog-filter-title">
|
||||
{titleFilesList}
|
||||
</Text>
|
||||
)}
|
||||
{selectedFolder && (
|
||||
<FilesListBody
|
||||
theme={theme}
|
||||
filesList={filesList}
|
||||
onSelectFile={onSelectFile}
|
||||
hasNextPage={hasNextPage}
|
||||
isNextPageLoading={isNextPageLoading}
|
||||
loadNextPage={loadNextPage}
|
||||
selectedFolder={selectedFolder}
|
||||
loadingText={loadingText}
|
||||
selectedFile={selectedFile}
|
||||
listHeight={isHeaderChildren ? 260 : 303}
|
||||
onSetLoadingData={this.onSetLoadingData}
|
||||
displayType={"modal"}
|
||||
/>
|
||||
)}
|
||||
</>
|
||||
</div>
|
||||
</div>
|
||||
</StyledSelectFilePanel>
|
||||
</ModalDialog.Body>
|
||||
<ModalDialog.Footer theme={theme}>
|
||||
<Button
|
||||
theme={theme}
|
||||
className="select-file-modal-dialog-buttons-save"
|
||||
primary
|
||||
size="normal"
|
||||
label={primaryButtonName}
|
||||
onClick={onClickSave}
|
||||
isDisabled={selectedFile.length === 0}
|
||||
/>
|
||||
<Button
|
||||
theme={theme}
|
||||
className="modal-dialog-button"
|
||||
size="normal"
|
||||
label={t("Common:CancelButton")}
|
||||
onClick={onClose}
|
||||
/>
|
||||
</ModalDialog.Footer>
|
||||
</ModalDialog>
|
||||
</StyledAsidePanel>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default SelectFileDialogModalView;
|
@ -5,7 +5,7 @@ import PropTypes from "prop-types";
|
||||
import throttle from "lodash/throttle";
|
||||
import SelectFileDialogAsideView from "./AsideView";
|
||||
import utils from "@docspace/components/utils";
|
||||
import { FilterType } from "@docspace/common/constants";
|
||||
import { FilterType, FolderType } from "@docspace/common/constants";
|
||||
import isEqual from "lodash/isEqual";
|
||||
import SelectionPanel from "../SelectionPanel/SelectionPanelBody";
|
||||
import toastr from "@docspace/components/toast/toastr";
|
||||
@ -14,13 +14,15 @@ const { desktop } = utils.device;
|
||||
class SelectFileDialog extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
const { filter } = props;
|
||||
const { filter, folderId, fileInfo } = props;
|
||||
|
||||
this.state = {
|
||||
isVisible: false,
|
||||
files: [],
|
||||
selectedFileInfo: {},
|
||||
displayType: this.getDisplayType(),
|
||||
isAvailableFolderList: true,
|
||||
selectedFolderId: folderId,
|
||||
selectedFileInfo: fileInfo,
|
||||
};
|
||||
this.throttledResize = throttle(this.setDisplayType, 300);
|
||||
this.newFilter = filter.clone();
|
||||
@ -81,14 +83,10 @@ class SelectFileDialog extends React.Component {
|
||||
|
||||
async componentDidMount() {
|
||||
const {
|
||||
treeFolders,
|
||||
foldersType,
|
||||
onSetBaseFolderPath,
|
||||
filteredType,
|
||||
onSelectFolder,
|
||||
foldersList,
|
||||
treeFromInput,
|
||||
passedFoldersTree,
|
||||
displayType,
|
||||
setFolderId,
|
||||
folderId,
|
||||
withoutBasicSelection,
|
||||
} = this.props;
|
||||
@ -99,18 +97,23 @@ class SelectFileDialog extends React.Component {
|
||||
|
||||
let resultingFolderTree, resultingId;
|
||||
|
||||
const treeFolders = await this.props.fetchTreeFolders();
|
||||
const roomsFolder = treeFolders.find(
|
||||
(f) => f.rootFolderType == FolderType.Rooms
|
||||
);
|
||||
const hasSharedFolder =
|
||||
roomsFolder && roomsFolder.foldersCount ? true : false;
|
||||
|
||||
try {
|
||||
[
|
||||
resultingFolderTree,
|
||||
resultingId,
|
||||
] = await SelectionPanel.getBasicFolderInfo(
|
||||
treeFolders,
|
||||
foldersType,
|
||||
filteredType,
|
||||
folderId,
|
||||
onSetBaseFolderPath,
|
||||
onSelectFolder,
|
||||
foldersList,
|
||||
withoutBasicSelection
|
||||
passedFoldersTree,
|
||||
hasSharedFolder
|
||||
);
|
||||
} catch (e) {
|
||||
toastr.error(e);
|
||||
@ -118,7 +121,7 @@ class SelectFileDialog extends React.Component {
|
||||
return;
|
||||
}
|
||||
|
||||
const tree = treeFromInput ? treeFromInput : resultingFolderTree;
|
||||
const tree = resultingFolderTree;
|
||||
|
||||
if (tree.length === 0) {
|
||||
this.setState({ isAvailable: false });
|
||||
@ -126,10 +129,13 @@ class SelectFileDialog extends React.Component {
|
||||
return;
|
||||
}
|
||||
|
||||
setFolderId(resultingId);
|
||||
if (!withoutBasicSelection) {
|
||||
onSelectFolder && onSelectFolder(resultingId);
|
||||
}
|
||||
|
||||
this.setState({
|
||||
resultingFolderTree: tree,
|
||||
selectedFolderId: resultingId,
|
||||
});
|
||||
}
|
||||
|
||||
@ -140,20 +146,8 @@ class SelectFileDialog extends React.Component {
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
const {
|
||||
setFolderId,
|
||||
setFile,
|
||||
setExpandedPanelKeys,
|
||||
withoutResetFolderTree,
|
||||
} = this.props;
|
||||
this.throttledResize && this.throttledResize.cancel();
|
||||
window.removeEventListener("resize", this.throttledResize);
|
||||
|
||||
if (!withoutResetFolderTree) {
|
||||
setExpandedPanelKeys(null);
|
||||
setFolderId(null);
|
||||
setFile(null);
|
||||
}
|
||||
}
|
||||
|
||||
getDisplayType = () => {
|
||||
@ -183,25 +177,33 @@ class SelectFileDialog extends React.Component {
|
||||
|
||||
onSelectFolder = (folder) => {
|
||||
const { displayType } = this.state;
|
||||
const { setFolderId, setFile, folderId } = this.props;
|
||||
const { folderId } = this.props;
|
||||
const id = displayType === "aside" ? folder : folder[0];
|
||||
|
||||
if (id !== folderId) {
|
||||
setFolderId(id);
|
||||
setFile(null);
|
||||
this.setState({
|
||||
selectedFolderId: id,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
onSelectFile = (item, index) => {
|
||||
const { setFile } = this.props;
|
||||
|
||||
setFile(item);
|
||||
this.setState({
|
||||
selectedFileInfo: item,
|
||||
});
|
||||
};
|
||||
|
||||
onClickSave = () => {
|
||||
const { onClose, onSelectFile, fileInfo } = this.props;
|
||||
const { onClose, onSelectFile, setFile, setFolderId } = this.props;
|
||||
const { selectedFileInfo, selectedFolderId } = this.state;
|
||||
|
||||
onSelectFile && onSelectFile(fileInfo);
|
||||
setFile(selectedFileInfo);
|
||||
|
||||
if (selectedFileInfo.folderId.toString() === selectedFolderId.toString()) {
|
||||
setFolderId(selectedFolderId);
|
||||
}
|
||||
|
||||
onSelectFile && onSelectFile(selectedFileInfo);
|
||||
onClose && onClose();
|
||||
};
|
||||
|
||||
@ -210,7 +212,7 @@ class SelectFileDialog extends React.Component {
|
||||
t,
|
||||
isPanelVisible,
|
||||
onClose,
|
||||
foldersType,
|
||||
filteredType,
|
||||
withoutProvider,
|
||||
filesListTitle,
|
||||
theme,
|
||||
@ -219,8 +221,6 @@ class SelectFileDialog extends React.Component {
|
||||
dialogName,
|
||||
creationButtonPrimary,
|
||||
maxInputWidth,
|
||||
folderId,
|
||||
fileInfo,
|
||||
} = this.props;
|
||||
const {
|
||||
isVisible,
|
||||
@ -228,6 +228,8 @@ class SelectFileDialog extends React.Component {
|
||||
isAvailableFolderList,
|
||||
resultingFolderTree,
|
||||
isLoadingData,
|
||||
selectedFileInfo,
|
||||
selectedFolderId,
|
||||
} = this.state;
|
||||
|
||||
const buttonName = creationButtonPrimary
|
||||
@ -244,7 +246,7 @@ class SelectFileDialog extends React.Component {
|
||||
isFolderPanelVisible={isVisible}
|
||||
onClose={onClose}
|
||||
withoutProvider={withoutProvider}
|
||||
folderId={folderId}
|
||||
folderId={selectedFolderId}
|
||||
resultingFolderTree={resultingFolderTree}
|
||||
onButtonClick={this.onClickSave}
|
||||
header={header}
|
||||
@ -256,9 +258,9 @@ class SelectFileDialog extends React.Component {
|
||||
onSelectFolder={this.onSelectFolder}
|
||||
onSelectFile={this.onSelectFile}
|
||||
filesListTitle={filesListTitle}
|
||||
fileId={fileInfo?.id}
|
||||
fileId={selectedFileInfo.id}
|
||||
newFilter={this.newFilter}
|
||||
foldersType={foldersType}
|
||||
filteredType={filteredType}
|
||||
onClickInput={this.onClickInput}
|
||||
onCloseSelectFolderDialog={this.onCloseSelectFolderDialog}
|
||||
maxInputWidth={maxInputWidth}
|
||||
@ -270,7 +272,7 @@ class SelectFileDialog extends React.Component {
|
||||
isPanelVisible={isPanelVisible}
|
||||
onClose={onClose}
|
||||
withoutProvider={withoutProvider}
|
||||
folderId={folderId}
|
||||
folderId={selectedFolderId}
|
||||
resultingFolderTree={resultingFolderTree}
|
||||
onButtonClick={this.onClickSave}
|
||||
header={header}
|
||||
@ -282,7 +284,7 @@ class SelectFileDialog extends React.Component {
|
||||
onSelectFolder={this.onSelectFolder}
|
||||
onSelectFile={this.onSelectFile}
|
||||
filesListTitle={filesListTitle}
|
||||
fileId={fileInfo?.id}
|
||||
fileId={selectedFileInfo.id}
|
||||
newFilter={this.newFilter}
|
||||
/>
|
||||
);
|
||||
@ -292,26 +294,20 @@ SelectFileDialog.propTypes = {
|
||||
onClose: PropTypes.func.isRequired,
|
||||
isPanelVisible: PropTypes.bool.isRequired,
|
||||
onSelectFile: PropTypes.func.isRequired,
|
||||
foldersType: PropTypes.oneOf([
|
||||
"common",
|
||||
"third-party",
|
||||
filteredType: PropTypes.oneOf([
|
||||
"exceptSortedByTags",
|
||||
"exceptPrivacyTrashFolders",
|
||||
"exceptPrivacyTrashArchiveFolders",
|
||||
]),
|
||||
id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
|
||||
withoutProvider: PropTypes.bool,
|
||||
ignoreSelectedFolderTree: PropTypes.bool,
|
||||
headerName: PropTypes.string,
|
||||
filesListTitle: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),
|
||||
withoutResetFolderTree: PropTypes.bool,
|
||||
};
|
||||
|
||||
SelectFileDialog.defaultProps = {
|
||||
id: "",
|
||||
filesListTitle: "",
|
||||
withoutProvider: false,
|
||||
ignoreSelectedFolderTree: false,
|
||||
withoutResetFolderTree: false,
|
||||
};
|
||||
|
||||
export default inject(
|
||||
@ -329,7 +325,7 @@ export default inject(
|
||||
setFile,
|
||||
} = selectFileDialogStore;
|
||||
|
||||
const { treeFolders, setExpandedPanelKeys } = treeFoldersStore;
|
||||
const { setExpandedPanelKeys, fetchTreeFolders } = treeFoldersStore;
|
||||
const { filter } = filesStore;
|
||||
const { id: storeFolderId } = selectedFolderStore;
|
||||
|
||||
@ -342,12 +338,12 @@ export default inject(
|
||||
setFile,
|
||||
setFolderId,
|
||||
filter,
|
||||
treeFolders,
|
||||
storeFolderId,
|
||||
|
||||
folderId,
|
||||
theme: theme,
|
||||
setExpandedPanelKeys,
|
||||
fetchTreeFolders,
|
||||
};
|
||||
}
|
||||
)(
|
||||
|
@ -6,20 +6,23 @@ import StyledComponent from "./StyledSelectFileInput";
|
||||
import SimpleFileInput from "../../SimpleFileInput";
|
||||
|
||||
class SelectFileInput extends React.PureComponent {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
||||
const { setExpandedPanelKeys, setFolderId, setFile } = props;
|
||||
|
||||
setExpandedPanelKeys(null);
|
||||
setFolderId(null);
|
||||
setFile(null);
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
this.props.setFirstLoad(false);
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
const {
|
||||
setExpandedPanelKeys,
|
||||
setFolderId,
|
||||
setFile,
|
||||
onSelectFile,
|
||||
} = this.props;
|
||||
|
||||
setExpandedPanelKeys(null);
|
||||
setFolderId(null);
|
||||
setFile({});
|
||||
onSelectFile && onSelectFile({});
|
||||
}
|
||||
render() {
|
||||
const {
|
||||
onClickInput,
|
||||
|
@ -22,7 +22,7 @@ const SelectFolderDialogAsideView = ({
|
||||
isPanelVisible,
|
||||
onClose,
|
||||
withoutProvider,
|
||||
isNeedArrowIcon,
|
||||
withFileSelectDialog,
|
||||
isAvailable,
|
||||
folderId,
|
||||
isLoadingData,
|
||||
@ -50,7 +50,7 @@ const SelectFolderDialogAsideView = ({
|
||||
>
|
||||
<ModalDialog.Header theme={theme}>
|
||||
<StyledAsideHeader>
|
||||
{isNeedArrowIcon && (
|
||||
{withFileSelectDialog && (
|
||||
<IconButton
|
||||
theme={theme}
|
||||
className="selection-panel_aside-header-icon"
|
||||
|
@ -7,10 +7,11 @@ import SelectFolderDialogAsideView from "./AsideView";
|
||||
import utils from "@docspace/components/utils";
|
||||
import toastr from "@docspace/components/toast/toastr";
|
||||
import SelectionPanel from "../SelectionPanel/SelectionPanelBody";
|
||||
import { FilterType } from "@docspace/common/constants";
|
||||
import { FilterType, FolderType } from "@docspace/common/constants";
|
||||
|
||||
const { desktop } = utils.device;
|
||||
|
||||
let treeFolders = [];
|
||||
class SelectFolderDialog extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
@ -28,39 +29,47 @@ class SelectFolderDialog extends React.Component {
|
||||
|
||||
async componentDidMount() {
|
||||
const {
|
||||
treeFolders,
|
||||
foldersType,
|
||||
filteredType,
|
||||
onSetBaseFolderPath,
|
||||
onSelectFolder,
|
||||
foldersList,
|
||||
passedFoldersTree,
|
||||
displayType,
|
||||
isNeedArrowIcon = false,
|
||||
withFileSelectDialog = false,
|
||||
folderTree,
|
||||
setFolderId,
|
||||
withInput,
|
||||
setResultingFolderId,
|
||||
selectFolderInputExist,
|
||||
id,
|
||||
storeFolderId,
|
||||
withoutBasicSelection = false,
|
||||
withoutBasicSelection,
|
||||
setResultingFoldersTree,
|
||||
} = this.props;
|
||||
|
||||
!displayType && window.addEventListener("resize", this.throttledResize);
|
||||
|
||||
const initialFolderId = withInput ? id : storeFolderId;
|
||||
const initialFolderId = selectFolderInputExist ? id : storeFolderId;
|
||||
|
||||
let resultingFolderTree, resultingId;
|
||||
|
||||
if (!withInput && !isNeedArrowIcon) {
|
||||
if (!withFileSelectDialog) {
|
||||
treeFolders = await this.props.fetchTreeFolders();
|
||||
|
||||
const roomsFolder = treeFolders.find(
|
||||
(f) => f.rootFolderType == FolderType.Rooms
|
||||
);
|
||||
|
||||
const hasSharedFolder =
|
||||
roomsFolder && roomsFolder.foldersCount ? true : false;
|
||||
|
||||
try {
|
||||
[
|
||||
resultingFolderTree,
|
||||
resultingId,
|
||||
] = await SelectionPanel.getBasicFolderInfo(
|
||||
treeFolders,
|
||||
foldersType,
|
||||
filteredType,
|
||||
initialFolderId,
|
||||
onSetBaseFolderPath,
|
||||
onSelectFolder,
|
||||
foldersList
|
||||
passedFoldersTree,
|
||||
hasSharedFolder
|
||||
);
|
||||
} catch (e) {
|
||||
toastr.error(e);
|
||||
@ -69,46 +78,35 @@ class SelectFolderDialog extends React.Component {
|
||||
}
|
||||
}
|
||||
|
||||
const tree =
|
||||
isNeedArrowIcon || withInput ? folderTree : resultingFolderTree;
|
||||
const tree = withFileSelectDialog ? folderTree : resultingFolderTree;
|
||||
|
||||
if (tree.length === 0) {
|
||||
this.setState({ isAvailable: false });
|
||||
onSelectFolder(null);
|
||||
onSelectFolder && onSelectFolder(null);
|
||||
return;
|
||||
}
|
||||
const resId = isNeedArrowIcon || withInput ? id : resultingId;
|
||||
|
||||
!withoutBasicSelection && onSelectFolder && onSelectFolder(resId);
|
||||
//isNeedArrowIcon && onSetBaseFolderPath(resId);
|
||||
setResultingFoldersTree(tree);
|
||||
|
||||
setFolderId(resId);
|
||||
const resId = withFileSelectDialog ? id : resultingId;
|
||||
|
||||
this.setState({
|
||||
resultingFolderTree: tree,
|
||||
});
|
||||
}
|
||||
|
||||
componentDidUpdate(prevProps) {
|
||||
const { isReset } = this.props;
|
||||
|
||||
if (isReset && isReset !== prevProps.isReset) {
|
||||
this.onResetInfo();
|
||||
if (!withoutBasicSelection) {
|
||||
onSelectFolder && onSelectFolder(resId);
|
||||
onSetBaseFolderPath && onSetBaseFolderPath(resId);
|
||||
}
|
||||
|
||||
setResultingFolderId(resId);
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
const { setFolderTitle, setProviderKey, setFolderId } = this.props;
|
||||
//console.log("componentWillUnmount");
|
||||
const { toDefault } = this.props;
|
||||
|
||||
if (this.throttledResize) {
|
||||
this.throttledResize && this.throttledResize.cancel();
|
||||
window.removeEventListener("resize", this.throttledResize);
|
||||
}
|
||||
|
||||
setFolderTitle("");
|
||||
setProviderKey(null);
|
||||
setFolderId(null);
|
||||
toDefault();
|
||||
}
|
||||
getDisplayType = () => {
|
||||
const displayType =
|
||||
@ -124,23 +122,27 @@ class SelectFolderDialog extends React.Component {
|
||||
};
|
||||
|
||||
onSelect = async (folder, treeNode) => {
|
||||
const { setFolderId, folderId } = this.props;
|
||||
const { setResultingFolderId, resultingFolderId } = this.props;
|
||||
|
||||
if (+folderId === +folder[0]) return;
|
||||
if (+resultingFolderId === +folder[0]) return;
|
||||
|
||||
setFolderId(folder[0]);
|
||||
setResultingFolderId(folder[0]);
|
||||
};
|
||||
|
||||
onClose = () => {
|
||||
const {
|
||||
setExpandedPanelKeys,
|
||||
onClose,
|
||||
treeFolders,
|
||||
withInput,
|
||||
isNeedArrowIcon,
|
||||
|
||||
selectFolderInputExist,
|
||||
withFileSelectDialog,
|
||||
} = this.props;
|
||||
|
||||
if (!treeFolders.length && !withInput && !isNeedArrowIcon) {
|
||||
if (
|
||||
!treeFolders.length &&
|
||||
!selectFolderInputExist &&
|
||||
!withFileSelectDialog
|
||||
) {
|
||||
setExpandedPanelKeys(null);
|
||||
}
|
||||
onClose && onClose();
|
||||
@ -161,25 +163,20 @@ class SelectFolderDialog extends React.Component {
|
||||
|
||||
providerKey,
|
||||
folderTitle,
|
||||
folderId,
|
||||
resultingFolderId,
|
||||
setSelectedItems,
|
||||
} = this.props;
|
||||
|
||||
setSelectedItems();
|
||||
|
||||
onSubmit && onSubmit(folderId, folderTitle, providerKey);
|
||||
onSave && onSave(e, folderId);
|
||||
onSetNewFolderPath && onSetNewFolderPath(folderId);
|
||||
onSelectFolder && onSelectFolder(folderId);
|
||||
|
||||
onSubmit && onSubmit(resultingFolderId, folderTitle, providerKey);
|
||||
onSave && onSave(e, resultingFolderId);
|
||||
onSetNewFolderPath && onSetNewFolderPath(resultingFolderId);
|
||||
onSelectFolder && onSelectFolder(resultingFolderId);
|
||||
//setResultingFolderId(resultingFolderId);
|
||||
!withoutImmediatelyClose && this.onClose();
|
||||
};
|
||||
|
||||
onResetInfo = async () => {
|
||||
const { id, setFolderId } = this.props;
|
||||
setFolderId(id);
|
||||
};
|
||||
|
||||
render() {
|
||||
const {
|
||||
t,
|
||||
@ -187,13 +184,13 @@ class SelectFolderDialog extends React.Component {
|
||||
isPanelVisible,
|
||||
zIndex,
|
||||
withoutProvider,
|
||||
isNeedArrowIcon, //for aside view when selected file
|
||||
withFileSelectDialog,
|
||||
header,
|
||||
dialogName,
|
||||
footer,
|
||||
buttonName,
|
||||
isDisableTree,
|
||||
folderId,
|
||||
resultingFolderId,
|
||||
folderTitle,
|
||||
expandedKeys,
|
||||
isDisableButton,
|
||||
@ -201,13 +198,9 @@ class SelectFolderDialog extends React.Component {
|
||||
currentFolderId,
|
||||
selectionFiles,
|
||||
sharedRoomId,
|
||||
} = this.props;
|
||||
const {
|
||||
displayType,
|
||||
isLoadingData,
|
||||
isAvailable,
|
||||
resultingFolderTree,
|
||||
} = this.state;
|
||||
} = this.props;
|
||||
const { displayType, isLoadingData, isAvailable } = this.state;
|
||||
|
||||
const primaryButtonName = buttonName
|
||||
? buttonName
|
||||
@ -217,7 +210,12 @@ class SelectFolderDialog extends React.Component {
|
||||
// console.log("Render Folder Component?", this.state);
|
||||
|
||||
const folderSelectionDisabled =
|
||||
folderId === sharedRoomId || folderId === sharedRoomId?.toString();
|
||||
resultingFolderId === sharedRoomId ||
|
||||
resultingFolderId === sharedRoomId?.toString();
|
||||
|
||||
const buttonIsDisabled =
|
||||
isDisableButton ||
|
||||
(isRecycleBin && currentFolderId === resultingFolderId);
|
||||
|
||||
return displayType === "aside" ? (
|
||||
<SelectFolderDialogAsideView
|
||||
@ -229,24 +227,24 @@ class SelectFolderDialog extends React.Component {
|
||||
zIndex={zIndex}
|
||||
onClose={this.onCloseAside}
|
||||
withoutProvider={withoutProvider}
|
||||
isNeedArrowIcon={isNeedArrowIcon}
|
||||
withFileSelectDialog={withFileSelectDialog}
|
||||
certainFolders={true}
|
||||
folderId={folderId}
|
||||
folderId={resultingFolderId}
|
||||
resultingFolderTree={resultingFolderTree}
|
||||
onSelectFolder={this.onSelect}
|
||||
onButtonClick={this.onButtonClick}
|
||||
header={header}
|
||||
dialogName={isNeedArrowIcon ? t("Translations:FolderSelection") : name}
|
||||
dialogName={
|
||||
withFileSelectDialog ? t("Translations:FolderSelection") : name
|
||||
}
|
||||
footer={footer}
|
||||
isLoadingData={isLoadingData}
|
||||
primaryButtonName={
|
||||
isNeedArrowIcon ? t("Common:SelectAction") : primaryButtonName
|
||||
withFileSelectDialog ? t("Common:SelectAction") : primaryButtonName
|
||||
}
|
||||
isAvailable={isAvailable}
|
||||
isDisableTree={isDisableTree}
|
||||
isDisableButton={
|
||||
isDisableButton || (isRecycleBin && currentFolderId === folderId)
|
||||
}
|
||||
isDisableButton={buttonIsDisabled}
|
||||
/>
|
||||
) : (
|
||||
<SelectionPanel
|
||||
@ -257,7 +255,7 @@ class SelectFolderDialog extends React.Component {
|
||||
isPanelVisible={isPanelVisible}
|
||||
onClose={this.onClose}
|
||||
withoutProvider={withoutProvider}
|
||||
folderId={folderId}
|
||||
folderId={resultingFolderId}
|
||||
resultingFolderTree={resultingFolderTree}
|
||||
onButtonClick={this.onButtonClick}
|
||||
header={header}
|
||||
@ -272,9 +270,7 @@ class SelectFolderDialog extends React.Component {
|
||||
isDisableTree={isDisableTree}
|
||||
folderSelection
|
||||
newFilter={this.newFilter}
|
||||
isDisableButton={
|
||||
isDisableButton || (isRecycleBin && currentFolderId === folderId)
|
||||
}
|
||||
isDisableButton={buttonIsDisabled}
|
||||
/>
|
||||
);
|
||||
}
|
||||
@ -284,12 +280,9 @@ SelectFolderDialog.propTypes = {
|
||||
onSelectFolder: PropTypes.func,
|
||||
onClose: PropTypes.func,
|
||||
isPanelVisible: PropTypes.bool.isRequired,
|
||||
foldersType: PropTypes.oneOf([
|
||||
"common",
|
||||
"third-party",
|
||||
filteredType: PropTypes.oneOf([
|
||||
"exceptSortedByTags",
|
||||
"exceptPrivacyTrashFolders",
|
||||
"rooms",
|
||||
"exceptPrivacyTrashArchiveFolders",
|
||||
"",
|
||||
]),
|
||||
displayType: PropTypes.oneOf(["aside", "modal"]),
|
||||
@ -303,6 +296,7 @@ SelectFolderDialog.defaultProps = {
|
||||
withoutProvider: false,
|
||||
withoutImmediatelyClose: false,
|
||||
isDisableTree: false,
|
||||
filteredType: "",
|
||||
};
|
||||
|
||||
export default inject(
|
||||
@ -318,9 +312,9 @@ export default inject(
|
||||
{ selectedId }
|
||||
) => {
|
||||
const {
|
||||
treeFolders,
|
||||
setExpandedPanelKeys,
|
||||
sharedRoomId,
|
||||
fetchTreeFolders,
|
||||
} = treeFoldersStore;
|
||||
|
||||
const { filter } = filesStore;
|
||||
@ -328,12 +322,16 @@ export default inject(
|
||||
|
||||
const { id } = selectedFolderStore;
|
||||
const {
|
||||
setFolderId,
|
||||
setResultingFolderId,
|
||||
setFolderTitle,
|
||||
setProviderKey,
|
||||
providerKey,
|
||||
folderTitle,
|
||||
folderId,
|
||||
resultingFolderId,
|
||||
setIsLoading,
|
||||
resultingFolderTree,
|
||||
setResultingFoldersTree,
|
||||
toDefault,
|
||||
} = selectFolderDialogStore;
|
||||
|
||||
const { settingsStore } = auth;
|
||||
@ -345,15 +343,19 @@ export default inject(
|
||||
storeFolderId: selectedFolderId,
|
||||
providerKey,
|
||||
folderTitle,
|
||||
folderId,
|
||||
resultingFolderId,
|
||||
setExpandedPanelKeys,
|
||||
setFolderId,
|
||||
setResultingFolderId,
|
||||
setFolderTitle,
|
||||
setProviderKey,
|
||||
treeFolders,
|
||||
filter,
|
||||
setSelectedItems,
|
||||
sharedRoomId,
|
||||
fetchTreeFolders,
|
||||
setIsLoading,
|
||||
resultingFolderTree,
|
||||
toDefault,
|
||||
setResultingFoldersTree,
|
||||
};
|
||||
}
|
||||
)(
|
||||
|
@ -12,111 +12,25 @@ import { FolderType } from "@docspace/common/constants";
|
||||
class SelectFolderInput extends React.PureComponent {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
const { id, foldersType, withoutBasicSelection } = this.props;
|
||||
const { id, withoutBasicSelection, setIsLoading } = this.props;
|
||||
|
||||
const isNeedLoader =
|
||||
!!id || !withoutBasicSelection || foldersType === "common";
|
||||
|
||||
this.state = {
|
||||
isLoading: isNeedLoader,
|
||||
baseFolderPath: "",
|
||||
newFolderPath: "",
|
||||
resultingFolderTree: [],
|
||||
baseId: "",
|
||||
};
|
||||
const isNeedLoadPath = !!id || !withoutBasicSelection;
|
||||
setIsLoading(isNeedLoadPath);
|
||||
|
||||
this._isMount = false;
|
||||
}
|
||||
|
||||
setBaseInfo = async () => {
|
||||
const {
|
||||
foldersType,
|
||||
id,
|
||||
onSelectFolder,
|
||||
foldersList,
|
||||
withoutBasicSelection,
|
||||
} = this.props;
|
||||
|
||||
let resultingFolderTree, resultingId;
|
||||
|
||||
try {
|
||||
[
|
||||
resultingFolderTree,
|
||||
resultingId,
|
||||
] = await SelectionPanel.getBasicFolderInfo(
|
||||
null,
|
||||
foldersType,
|
||||
id,
|
||||
this.onSetBaseFolderPath,
|
||||
onSelectFolder,
|
||||
foldersList,
|
||||
withoutBasicSelection
|
||||
);
|
||||
} catch (e) {
|
||||
toastr.error(e);
|
||||
this._isMount &&
|
||||
this.setState({
|
||||
isLoading: false,
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
this._isMount &&
|
||||
this.setState({
|
||||
isPathError: false,
|
||||
resultingFolderTree,
|
||||
baseId: resultingId,
|
||||
baseFolderPath: "",
|
||||
newFolderPath: "",
|
||||
...(withoutBasicSelection && { isLoading: false }),
|
||||
});
|
||||
};
|
||||
|
||||
componentDidMount() {
|
||||
this._isMount = true;
|
||||
|
||||
const { setFirstLoad, isWaitingUpdate } = this.props;
|
||||
const { setFirstLoad } = this.props;
|
||||
|
||||
setFirstLoad(false);
|
||||
!isWaitingUpdate && this.setBaseInfo();
|
||||
}
|
||||
|
||||
componentDidUpdate(prevProps) {
|
||||
const {
|
||||
isSuccessSave,
|
||||
isReset,
|
||||
id,
|
||||
|
||||
isWaitingUpdate,
|
||||
} = this.props;
|
||||
const { newFolderPath, baseFolderPath } = this.state;
|
||||
|
||||
if (!isSuccessSave && isSuccessSave !== prevProps.isSuccessSave) {
|
||||
newFolderPath &&
|
||||
this.setState({
|
||||
baseFolderPath: newFolderPath,
|
||||
baseId: id,
|
||||
newId: null,
|
||||
isPathError: false,
|
||||
});
|
||||
}
|
||||
|
||||
if (!isReset && isReset !== prevProps.isReset) {
|
||||
this.setState({
|
||||
newFolderPath: baseFolderPath,
|
||||
baseId: id,
|
||||
newId: null,
|
||||
isPathError: false,
|
||||
});
|
||||
}
|
||||
|
||||
if (!isWaitingUpdate && isWaitingUpdate !== prevProps.isWaitingUpdate) {
|
||||
this.setBaseInfo();
|
||||
}
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
this._isMount = false;
|
||||
this.props.toDefault();
|
||||
}
|
||||
setFolderPath = async (folderId) => {
|
||||
const foldersArray = await getFolderPath(folderId);
|
||||
@ -143,48 +57,53 @@ class SelectFolderInput extends React.PureComponent {
|
||||
return convertFoldersArray;
|
||||
};
|
||||
onSetNewFolderPath = async (folderId) => {
|
||||
const { setIsLoading, setNewFolderPath, setIsPathError } = this.props;
|
||||
let timerId = setTimeout(() => {
|
||||
this._isMount && this.setState({ isLoading: true });
|
||||
setIsLoading(true);
|
||||
}, 500);
|
||||
try {
|
||||
const convertFoldersArray = await this.setFolderPath(folderId);
|
||||
clearTimeout(timerId);
|
||||
timerId = null;
|
||||
this._isMount &&
|
||||
this.setState({
|
||||
newFolderPath: convertFoldersArray,
|
||||
isLoading: false,
|
||||
newId: folderId,
|
||||
isPathError: false,
|
||||
});
|
||||
} catch (e) {
|
||||
toastr.error(e);
|
||||
clearTimeout(timerId);
|
||||
timerId = null;
|
||||
this._isMount &&
|
||||
this.setState({
|
||||
isLoading: false,
|
||||
isPathError: true,
|
||||
});
|
||||
}
|
||||
};
|
||||
onSetBaseFolderPath = async (folderId) => {
|
||||
|
||||
try {
|
||||
const convertFoldersArray = await this.setFolderPath(folderId);
|
||||
|
||||
this._isMount &&
|
||||
this.setState({
|
||||
baseFolderPath: convertFoldersArray,
|
||||
isLoading: false,
|
||||
...(!convertFoldersArray && { isPathError: true }),
|
||||
});
|
||||
setNewFolderPath(convertFoldersArray);
|
||||
|
||||
clearTimeout(timerId);
|
||||
timerId = null;
|
||||
setIsPathError(false);
|
||||
setIsLoading(false);
|
||||
} catch (e) {
|
||||
toastr.error(e);
|
||||
this._isMount &&
|
||||
this.setState({
|
||||
isLoading: false,
|
||||
isPathError: true,
|
||||
});
|
||||
clearTimeout(timerId);
|
||||
setIsLoading(false);
|
||||
timerId = null;
|
||||
setIsPathError(true);
|
||||
}
|
||||
};
|
||||
onSetBaseFolderPath = async (folderId) => {
|
||||
const {
|
||||
setIsLoading,
|
||||
setBaseFolderPath,
|
||||
setIsPathError,
|
||||
setResultingFolderId,
|
||||
resultingFolderTree,
|
||||
} = this.props;
|
||||
|
||||
try {
|
||||
const convertFoldersArray = await this.setFolderPath(folderId);
|
||||
setBaseFolderPath(convertFoldersArray);
|
||||
setIsLoading(false);
|
||||
if (!convertFoldersArray) {
|
||||
setIsPathError(true);
|
||||
|
||||
this.onSetFolderInfo(resultingFolderTree[0].id);
|
||||
setResultingFolderId(resultingFolderTree[0].id);
|
||||
}
|
||||
} catch (e) {
|
||||
toastr.error(e);
|
||||
setIsLoading(false);
|
||||
setIsPathError(true);
|
||||
this.onSetFolderInfo(resultingFolderTree[0].id);
|
||||
setResultingFolderId(resultingFolderTree[0].id);
|
||||
}
|
||||
};
|
||||
onSelectFolder = (folderId) => {
|
||||
@ -195,25 +114,19 @@ class SelectFolderInput extends React.PureComponent {
|
||||
};
|
||||
onSetFolderInfo = (folderId) => {
|
||||
const { setExpandedPanelKeys, setParentId } = this.props;
|
||||
|
||||
getFolder(folderId)
|
||||
.then((data) => {
|
||||
const pathParts = data.pathParts.map((item) => item.toString());
|
||||
pathParts?.pop();
|
||||
|
||||
setExpandedPanelKeys(pathParts);
|
||||
setParentId(data.current.parentId);
|
||||
})
|
||||
.catch((e) => toastr.error(e));
|
||||
};
|
||||
|
||||
render() {
|
||||
const {
|
||||
isLoading,
|
||||
baseFolderPath,
|
||||
newFolderPath,
|
||||
baseId,
|
||||
resultingFolderTree,
|
||||
newId,
|
||||
isPathError,
|
||||
} = this.state;
|
||||
const {
|
||||
onClickInput,
|
||||
isError,
|
||||
@ -222,14 +135,19 @@ class SelectFolderInput extends React.PureComponent {
|
||||
maxInputWidth,
|
||||
isDisabled,
|
||||
isPanelVisible,
|
||||
id,
|
||||
|
||||
theme,
|
||||
isFolderTreeLoading = false,
|
||||
onSelectFolder,
|
||||
isLoading,
|
||||
newFolderPath,
|
||||
baseFolderPath,
|
||||
isPathError,
|
||||
isWaitingUpdate,
|
||||
...rest
|
||||
} = this.props;
|
||||
|
||||
const passedId = newId ? newId : baseId;
|
||||
const isReady = !isFolderTreeLoading && !isWaitingUpdate;
|
||||
|
||||
return (
|
||||
<StyledComponent maxWidth={maxInputWidth}>
|
||||
@ -240,19 +158,12 @@ class SelectFolderInput extends React.PureComponent {
|
||||
isError={isError || isPathError}
|
||||
onClickInput={onClickInput}
|
||||
placeholder={placeholder}
|
||||
isDisabled={
|
||||
isFolderTreeLoading ||
|
||||
isDisabled ||
|
||||
isLoading ||
|
||||
resultingFolderTree?.length === 0
|
||||
}
|
||||
isDisabled={isFolderTreeLoading || isDisabled || isLoading}
|
||||
/>
|
||||
{!isFolderTreeLoading && isPanelVisible && (
|
||||
{isReady && (
|
||||
<SelectFolderDialog
|
||||
{...rest}
|
||||
withInput={true}
|
||||
folderTree={resultingFolderTree}
|
||||
id={passedId}
|
||||
selectFolderInputExist
|
||||
isPanelVisible={isPanelVisible}
|
||||
onSetBaseFolderPath={this.onSetBaseFolderPath}
|
||||
onSetNewFolderPath={this.onSetNewFolderPath}
|
||||
@ -268,14 +179,10 @@ SelectFolderInput.propTypes = {
|
||||
onClickInput: PropTypes.func,
|
||||
hasError: PropTypes.bool,
|
||||
isDisabled: PropTypes.bool,
|
||||
isUpdateInfo: PropTypes.bool,
|
||||
placeholder: PropTypes.string,
|
||||
foldersType: PropTypes.oneOf([
|
||||
"common",
|
||||
"third-party",
|
||||
filteredType: PropTypes.oneOf([
|
||||
"exceptSortedByTags",
|
||||
"exceptPrivacyTrashFolders",
|
||||
"rooms",
|
||||
"exceptPrivacyTrashArchiveFolders",
|
||||
"",
|
||||
]),
|
||||
};
|
||||
@ -285,7 +192,7 @@ SelectFolderInput.defaultProps = {
|
||||
isDisabled: false,
|
||||
isWaitingUpdate: false,
|
||||
placeholder: "",
|
||||
foldersType: "",
|
||||
filteredType: "",
|
||||
};
|
||||
|
||||
export default inject(
|
||||
@ -297,14 +204,36 @@ export default inject(
|
||||
}) => {
|
||||
const { setFirstLoad } = filesStore;
|
||||
const { setExpandedPanelKeys } = treeFoldersStore;
|
||||
const { setFolderId } = selectFolderDialogStore;
|
||||
const {
|
||||
isLoading,
|
||||
setIsLoading,
|
||||
baseFolderPath,
|
||||
setBaseFolderPath,
|
||||
newFolderPath,
|
||||
setNewFolderPath,
|
||||
toDefault,
|
||||
setIsPathError,
|
||||
isPathError,
|
||||
resultingFolderTree,
|
||||
setResultingFolderId,
|
||||
} = selectFolderDialogStore;
|
||||
const { setParentId } = selectedFolderStore;
|
||||
|
||||
return {
|
||||
setFirstLoad,
|
||||
|
||||
setFolderId,
|
||||
setExpandedPanelKeys,
|
||||
setParentId,
|
||||
isLoading,
|
||||
setIsLoading,
|
||||
setBaseFolderPath,
|
||||
baseFolderPath,
|
||||
newFolderPath,
|
||||
setNewFolderPath,
|
||||
toDefault,
|
||||
setIsPathError,
|
||||
isPathError,
|
||||
resultingFolderTree,
|
||||
setResultingFolderId,
|
||||
};
|
||||
}
|
||||
)(observer(withTranslation("Translations")(SelectFolderInput)));
|
||||
|
@ -8,4 +8,8 @@ export const exceptSortedByTagsFolders = [
|
||||
FolderType.Archive,
|
||||
];
|
||||
|
||||
export const exceptPrivacyTrashFolders = [FolderType.Privacy, FolderType.TRASH];
|
||||
export const exceptPrivacyTrashArchiveFolders = [
|
||||
FolderType.Privacy,
|
||||
FolderType.TRASH,
|
||||
FolderType.Archive,
|
||||
];
|
||||
|
@ -55,7 +55,7 @@ class FilesListWrapper extends React.Component {
|
||||
folderId,
|
||||
setFolderTitle,
|
||||
setProviderKey,
|
||||
setFolderId,
|
||||
setResultingFolderId,
|
||||
folderSelection,
|
||||
} = this.props;
|
||||
|
||||
@ -89,7 +89,7 @@ class FilesListWrapper extends React.Component {
|
||||
if (page === 0 && folderSelection) {
|
||||
setFolderTitle(data.current.title);
|
||||
setProviderKey(data.current.providerKey);
|
||||
setFolderId(folderId);
|
||||
setResultingFolderId(folderId);
|
||||
}
|
||||
|
||||
const finalData = [...data.files];
|
||||
@ -144,7 +144,7 @@ export default inject(
|
||||
({ selectedFolderStore, selectFolderDialogStore, auth }) => {
|
||||
const { id } = selectedFolderStore;
|
||||
const {
|
||||
setFolderId,
|
||||
setResultingFolderId,
|
||||
setFolderTitle,
|
||||
setProviderKey,
|
||||
} = selectFolderDialogStore;
|
||||
@ -155,7 +155,7 @@ export default inject(
|
||||
return {
|
||||
theme: theme,
|
||||
storeFolderId: id,
|
||||
setFolderId,
|
||||
setResultingFolderId,
|
||||
setFolderTitle,
|
||||
setProviderKey,
|
||||
};
|
||||
|
@ -13,11 +13,13 @@ import {
|
||||
import toastr from "@docspace/components/toast/toastr";
|
||||
import {
|
||||
exceptSortedByTagsFolders,
|
||||
exceptPrivacyTrashFolders,
|
||||
exceptPrivacyTrashArchiveFolders,
|
||||
} from "./ExceptionFoldersConstants";
|
||||
import { StyledBody, StyledModalDialog } from "./StyledSelectionPanel";
|
||||
import Text from "@docspace/components/text";
|
||||
import Loaders from "@docspace/common/components/Loaders";
|
||||
import { FolderType } from "@docspace/common/constants";
|
||||
|
||||
const SelectionPanelBody = ({
|
||||
t,
|
||||
isPanelVisible,
|
||||
@ -172,53 +174,20 @@ class SelectionPanel extends React.Component {
|
||||
};
|
||||
static getBasicFolderInfo = async (
|
||||
treeFolders,
|
||||
foldersType,
|
||||
filteredType,
|
||||
id,
|
||||
onSetBaseFolderPath,
|
||||
onSelectFolder,
|
||||
foldersList,
|
||||
withoutBasicSelection = false
|
||||
passedFoldersTree = [],
|
||||
hasSharedFolder
|
||||
) => {
|
||||
const getRequestFolderTree = () => {
|
||||
switch (foldersType) {
|
||||
case "exceptSortedByTags":
|
||||
case "exceptPrivacyTrashFolders":
|
||||
try {
|
||||
return getFoldersTree();
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
}
|
||||
break;
|
||||
case "common":
|
||||
try {
|
||||
return getCommonFoldersTree();
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
}
|
||||
break;
|
||||
|
||||
case "third-party":
|
||||
try {
|
||||
return getThirdPartyCommonFolderTree();
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
try {
|
||||
return getFoldersTree();
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const filterFoldersTree = (folders, arrayOfExceptions) => {
|
||||
const arr = !hasSharedFolder
|
||||
? [...arrayOfExceptions, FolderType.Rooms]
|
||||
: arrayOfExceptions;
|
||||
|
||||
let newArray = [];
|
||||
|
||||
for (let i = 0; i < folders.length; i++) {
|
||||
if (!arrayOfExceptions.includes(folders[i].rootFolderType)) {
|
||||
if (!arr.includes(folders[i].rootFolderType)) {
|
||||
newArray.push(folders[i]);
|
||||
}
|
||||
}
|
||||
@ -227,43 +196,27 @@ class SelectionPanel extends React.Component {
|
||||
};
|
||||
|
||||
const getExceptionsFolders = (treeFolders) => {
|
||||
switch (foldersType) {
|
||||
switch (filteredType) {
|
||||
case "exceptSortedByTags":
|
||||
return filterFoldersTree(treeFolders, exceptSortedByTagsFolders);
|
||||
case "exceptPrivacyTrashFolders":
|
||||
return filterFoldersTree(treeFolders, exceptPrivacyTrashFolders);
|
||||
case "exceptPrivacyTrashArchiveFolders":
|
||||
return filterFoldersTree(
|
||||
treeFolders,
|
||||
exceptPrivacyTrashArchiveFolders
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
let requestedTreeFolders, filteredTreeFolders;
|
||||
|
||||
const treeFoldersLength = treeFolders?.length;
|
||||
|
||||
if (treeFoldersLength === 0 || !treeFoldersLength) {
|
||||
try {
|
||||
requestedTreeFolders = foldersList
|
||||
? foldersList
|
||||
: await getRequestFolderTree();
|
||||
} catch (e) {
|
||||
toastr.error(e);
|
||||
return;
|
||||
}
|
||||
}
|
||||
let filteredTreeFolders;
|
||||
|
||||
const foldersTree =
|
||||
treeFoldersLength > 0 ? treeFolders : requestedTreeFolders;
|
||||
passedFoldersTree.length > 0 ? passedFoldersTree : treeFolders;
|
||||
|
||||
const passedId = id ? id : foldersTree[0]?.id;
|
||||
|
||||
!withoutBasicSelection &&
|
||||
onSetBaseFolderPath &&
|
||||
onSetBaseFolderPath(passedId);
|
||||
|
||||
!withoutBasicSelection && onSelectFolder && onSelectFolder(passedId);
|
||||
const passedId = id ? id : foldersTree[0].id;
|
||||
|
||||
if (
|
||||
foldersType === "exceptSortedByTags" ||
|
||||
foldersType === "exceptPrivacyTrashFolders"
|
||||
filteredType === "exceptSortedByTags" ||
|
||||
filteredType === "exceptPrivacyTrashArchiveFolders"
|
||||
) {
|
||||
filteredTreeFolders = getExceptionsFolders(foldersTree);
|
||||
}
|
||||
|
@ -6,14 +6,14 @@ import NoUserSelect from "@docspace/components/utils/commonStyles";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import styled from "styled-components";
|
||||
import { ReactSVG } from "react-svg";
|
||||
import { isDesktop, isMobile } from "react-device-detect";
|
||||
import { isMobile } from "react-device-detect";
|
||||
import { ColorTheme, ThemeType } from "@docspace/common/components/ColorTheme";
|
||||
|
||||
const StyledAboutBody = styled.div`
|
||||
width: 100%;
|
||||
|
||||
.avatar {
|
||||
margin-top: ${isDesktop ? "0px" : "32px"};
|
||||
margin-top: ${!isMobile ? "0px" : "32px"};
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
|
@ -2,7 +2,7 @@ import React from "react";
|
||||
import Tile from "./sub-components/Tile";
|
||||
import { SimpleFilesTileContent } from "./StyledTileView";
|
||||
import Link from "@docspace/components/link";
|
||||
import { isDesktop } from "react-device-detect";
|
||||
import { isMobile } from "react-device-detect";
|
||||
|
||||
const FileTile = (props) => {
|
||||
const { item } = props;
|
||||
@ -16,7 +16,7 @@ const FileTile = (props) => {
|
||||
containerWidth="100%"
|
||||
type="page"
|
||||
fontWeight="600"
|
||||
fontSize={isDesktop ? "13px" : "14px"}
|
||||
fontSize={!isMobile ? "13px" : "14px"}
|
||||
target="_blank"
|
||||
isTextOverflow
|
||||
>
|
||||
|
@ -66,13 +66,6 @@ class Tile extends React.PureComponent {
|
||||
);
|
||||
};
|
||||
|
||||
onFileIconClick = () => {
|
||||
if (isDesktop) return;
|
||||
|
||||
const { onSelect, item } = this.props;
|
||||
onSelect && onSelect(true, item);
|
||||
};
|
||||
|
||||
getContextModel = () => {
|
||||
return [
|
||||
{
|
||||
@ -153,7 +146,6 @@ class Tile extends React.PureComponent {
|
||||
isSelected={isSelected}
|
||||
onContextMenu={onContextMenu}
|
||||
isActive={isActive}
|
||||
isDesktop={isDesktop}
|
||||
showHotkeyBorder={showHotkeyBorder}
|
||||
onDoubleClick={this.onCreateForm}
|
||||
onClick={this.onSelectForm}
|
||||
@ -163,9 +155,7 @@ class Tile extends React.PureComponent {
|
||||
|
||||
<StyledFileTileBottom isSelected={isSelected} isActive={isActive}>
|
||||
<div className="file-icon_container">
|
||||
<div className="file-icon" onClick={this.onFileIconClick}>
|
||||
{element}
|
||||
</div>
|
||||
<div className="file-icon">{element}</div>
|
||||
</div>
|
||||
|
||||
<StyledContent>{children}</StyledContent>
|
||||
@ -201,7 +191,6 @@ Tile.propTypes = {
|
||||
contextOptions: PropTypes.array,
|
||||
data: PropTypes.object,
|
||||
id: PropTypes.string,
|
||||
onSelect: PropTypes.func,
|
||||
tileContextClick: PropTypes.func,
|
||||
};
|
||||
|
||||
|
@ -39,6 +39,7 @@ const StyledWrapper = styled.div`
|
||||
const StyledSimpleFilesRow = styled(Row)`
|
||||
${(props) => (props.checked || props.isActive) && checkedStyle};
|
||||
${(props) => props.dragging && draggingStyle}
|
||||
height: 57px;
|
||||
|
||||
${(props) =>
|
||||
!isMobile &&
|
||||
@ -114,12 +115,6 @@ const StyledSimpleFilesRow = styled(Row)`
|
||||
margin-right: 7px;
|
||||
}
|
||||
|
||||
.row_context-menu-wrapper {
|
||||
width: fit-content;
|
||||
justify-content: space-between;
|
||||
flex: 1 1 auto;
|
||||
}
|
||||
|
||||
.row_content {
|
||||
${(props) =>
|
||||
props.sectionWidth > 500 && `max-width: fit-content;`}//min-width: auto
|
||||
@ -136,13 +131,9 @@ const StyledSimpleFilesRow = styled(Row)`
|
||||
margin-right: 8px;
|
||||
}
|
||||
|
||||
${(props) =>
|
||||
props.sectionWidth > 500 &&
|
||||
`
|
||||
.badge:last-child {
|
||||
margin-right: 0px;
|
||||
}
|
||||
`}
|
||||
.badge:last-child {
|
||||
margin-right: 0px;
|
||||
}
|
||||
|
||||
.lock-file {
|
||||
cursor: ${(props) => (props.withAccess ? "pointer" : "default")};
|
||||
@ -156,43 +147,35 @@ const StyledSimpleFilesRow = styled(Row)`
|
||||
margin-top: 1px;
|
||||
}
|
||||
|
||||
.expandButton {
|
||||
margin-left: 6px;
|
||||
padding-top: 7px;
|
||||
.row_context-menu-wrapper {
|
||||
width: min-content;
|
||||
justify-content: space-between;
|
||||
flex: 0 1 auto;
|
||||
}
|
||||
|
||||
${(props) =>
|
||||
((props.sectionWidth <= 1024 && props.sectionWidth > 500) || isTablet) &&
|
||||
`
|
||||
.row_context-menu-wrapper{
|
||||
width: min-content;
|
||||
justify-content: space-between;
|
||||
flex: 0 1 auto;
|
||||
}
|
||||
.row_content {
|
||||
max-width: none;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.row_content {
|
||||
max-width: none;
|
||||
min-width: 0;
|
||||
}
|
||||
.badges {
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
.badges {
|
||||
margin-bottom: 0px;
|
||||
.badge {
|
||||
margin-right: 24px;
|
||||
}
|
||||
|
||||
.lock-file {
|
||||
svg {
|
||||
height: 16px;
|
||||
}
|
||||
}
|
||||
|
||||
.badge {
|
||||
margin-right: 24px;
|
||||
}
|
||||
|
||||
.lock-file{
|
||||
svg {
|
||||
height: 16px;
|
||||
}
|
||||
}
|
||||
|
||||
.expandButton {
|
||||
padding-top: 0px;
|
||||
}
|
||||
`}
|
||||
.expandButton {
|
||||
margin-left: 6px;
|
||||
padding-top: 0px;
|
||||
}
|
||||
`;
|
||||
|
||||
StyledSimpleFilesRow.defaultProps = { theme: Base };
|
||||
|
@ -414,13 +414,8 @@ export default inject(
|
||||
roomsFilter,
|
||||
fetchRooms,
|
||||
} = filesStore;
|
||||
const {
|
||||
isPrivacyFolder,
|
||||
isRecentFolder,
|
||||
isPersonalRoom,
|
||||
} = treeFoldersStore;
|
||||
|
||||
const withContent = canShare || (canShare && isPrivacyFolder && isDesktop);
|
||||
const { isRecentFolder, isPersonalRoom } = treeFoldersStore;
|
||||
const withContent = canShare;
|
||||
const sortingVisible = !isRecentFolder;
|
||||
const { personal, withPaging } = auth.settingsStore;
|
||||
|
||||
|
@ -9,7 +9,7 @@ import Link from "@docspace/components/link";
|
||||
import TileContent from "./sub-components/TileContent";
|
||||
import withContent from "../../../../../HOCs/withContent";
|
||||
import withBadges from "../../../../../HOCs/withBadges";
|
||||
import { isDesktop } from "react-device-detect";
|
||||
import { isMobile } from "react-device-detect";
|
||||
|
||||
const SimpleFilesTileContent = styled(TileContent)`
|
||||
.row-main-container {
|
||||
@ -79,7 +79,7 @@ const FilesTileContent = ({ item, titleWithoutExt, linkStyles, theme }) => {
|
||||
type="page"
|
||||
title={title}
|
||||
fontWeight="600"
|
||||
fontSize={isDesktop ? "13px" : "14px"}
|
||||
fontSize={!isMobile ? "13px" : "14px"}
|
||||
target="_blank"
|
||||
{...linkStyles}
|
||||
color={theme.filesSection.tilesView.color}
|
||||
|
@ -6,8 +6,7 @@ import { ReactSVG } from "react-svg";
|
||||
import styled, { css } from "styled-components";
|
||||
import ContextMenu from "@docspace/components/context-menu";
|
||||
import { tablet } from "@docspace/components/utils/device";
|
||||
import { isDesktop, isMobile } from "react-device-detect";
|
||||
|
||||
import { isMobile } from "react-device-detect";
|
||||
import Link from "@docspace/components/link";
|
||||
import Loader from "@docspace/components/loader";
|
||||
import { Base } from "@docspace/components/themes";
|
||||
@ -191,7 +190,6 @@ const StyledTile = styled.div`
|
||||
:hover {
|
||||
${(props) =>
|
||||
!props.dragging &&
|
||||
props.isDesktop &&
|
||||
!props.inProgress &&
|
||||
!isMobile &&
|
||||
css`
|
||||
@ -414,7 +412,7 @@ class Tile extends React.PureComponent {
|
||||
};
|
||||
|
||||
onFileIconClick = () => {
|
||||
if (isDesktop) return;
|
||||
if (!isMobile) return;
|
||||
|
||||
const { onSelect, item } = this.props;
|
||||
onSelect && onSelect(true, item);
|
||||
@ -525,7 +523,6 @@ class Tile extends React.PureComponent {
|
||||
isActive={isActive}
|
||||
isRoom={isRoom}
|
||||
inProgress={inProgress}
|
||||
isDesktop={isDesktop}
|
||||
showHotkeyBorder={showHotkeyBorder}
|
||||
onClick={this.onFileClick}
|
||||
>
|
||||
|
@ -2,7 +2,7 @@ import React, { useState, useEffect } from "react";
|
||||
import { withTranslation } from "react-i18next";
|
||||
|
||||
import { inject, observer } from "mobx-react";
|
||||
import { isDesktop } from "react-device-detect";
|
||||
import { isMobile } from "react-device-detect";
|
||||
|
||||
import withLoading from "SRC_DIR/HOCs/withLoading";
|
||||
import Whitelabel from "./settingsBranding/whitelabel";
|
||||
@ -49,7 +49,7 @@ const StyledComponent = styled.div`
|
||||
const Branding = (props) => {
|
||||
const [isPortalPaid, setIsPortalPaid] = useState(true);
|
||||
|
||||
if (!isDesktop) return <ForbiddenPage />;
|
||||
if (isMobile) return <ForbiddenPage />;
|
||||
|
||||
return (
|
||||
<StyledComponent>
|
||||
|
@ -213,12 +213,14 @@ class AutomaticBackup extends React.PureComponent {
|
||||
toDefault,
|
||||
isCheckedThirdParty,
|
||||
isCheckedDocuments,
|
||||
setResetProcess,
|
||||
resetNewFolderPath,
|
||||
|
||||
defaultFolderId,
|
||||
} = this.props;
|
||||
|
||||
console.log("defaultFolderId", defaultFolderId);
|
||||
toDefault();
|
||||
|
||||
(isCheckedThirdParty || isCheckedDocuments) && setResetProcess(true);
|
||||
(isCheckedThirdParty || isCheckedDocuments) &&
|
||||
resetNewFolderPath(defaultFolderId);
|
||||
this.setState({
|
||||
...(isError && { isError: false }),
|
||||
});
|
||||
@ -326,11 +328,11 @@ class AutomaticBackup extends React.PureComponent {
|
||||
|
||||
isCheckedThirdParty,
|
||||
isCheckedDocuments,
|
||||
setSavingProcess,
|
||||
updateBaseFolderPath,
|
||||
} = this.props;
|
||||
|
||||
try {
|
||||
(isCheckedThirdParty || isCheckedDocuments) && setSavingProcess(true);
|
||||
(isCheckedThirdParty || isCheckedDocuments) && updateBaseFolderPath();
|
||||
|
||||
await createBackupSchedule(
|
||||
storageType,
|
||||
@ -354,7 +356,7 @@ class AutomaticBackup extends React.PureComponent {
|
||||
} catch (e) {
|
||||
toastr.error(e);
|
||||
|
||||
(isCheckedThirdParty || isCheckedDocuments) && setSavingProcess(true);
|
||||
(isCheckedThirdParty || isCheckedDocuments) && updateBaseFolderPath();
|
||||
|
||||
this.setState({
|
||||
isLoadingData: false,
|
||||
@ -498,12 +500,7 @@ class AutomaticBackup extends React.PureComponent {
|
||||
{t("ThirdPartyResourceDescription")}
|
||||
</Text>
|
||||
{isCheckedThirdParty && (
|
||||
<ThirdPartyModule
|
||||
{...commonProps}
|
||||
isError={isError}
|
||||
defaultSelectedFolder={this.defaultSelectedFolder}
|
||||
onSetDefaultFolderPath={this.onSetDefaultFolderPath}
|
||||
/>
|
||||
<ThirdPartyModule {...commonProps} isError={isError} />
|
||||
)}
|
||||
</StyledModules>
|
||||
<StyledModules>
|
||||
@ -545,91 +542,100 @@ class AutomaticBackup extends React.PureComponent {
|
||||
);
|
||||
}
|
||||
}
|
||||
export default inject(({ auth, backup, treeFoldersStore }) => {
|
||||
const { language, settingsStore } = auth;
|
||||
const { organizationName, theme } = settingsStore;
|
||||
const {
|
||||
downloadingProgress,
|
||||
backupSchedule,
|
||||
//commonThirdPartyList,
|
||||
clearProgressInterval,
|
||||
deleteSchedule,
|
||||
getProgress,
|
||||
setThirdPartyStorage,
|
||||
setDefaultOptions,
|
||||
setBackupSchedule,
|
||||
selectedStorageType,
|
||||
seStorageType,
|
||||
//setCommonThirdPartyList,
|
||||
selectedPeriodLabel,
|
||||
selectedWeekdayLabel,
|
||||
selectedWeekday,
|
||||
selectedHour,
|
||||
selectedMonthDay,
|
||||
selectedMaxCopiesNumber,
|
||||
selectedPeriodNumber,
|
||||
selectedFolderId,
|
||||
selectedStorageId,
|
||||
toDefault,
|
||||
isFormReady,
|
||||
getStorageParams,
|
||||
setSelectedEnableSchedule,
|
||||
selectedEnableSchedule,
|
||||
updatePathSettings,
|
||||
setSavingProcess,
|
||||
setResetProcess,
|
||||
setStorageRegions,
|
||||
} = backup;
|
||||
export default inject(
|
||||
({ auth, backup, treeFoldersStore, selectFolderDialogStore }) => {
|
||||
const { language, settingsStore } = auth;
|
||||
const { organizationName, theme } = settingsStore;
|
||||
const {
|
||||
downloadingProgress,
|
||||
backupSchedule,
|
||||
//commonThirdPartyList,
|
||||
clearProgressInterval,
|
||||
deleteSchedule,
|
||||
getProgress,
|
||||
setThirdPartyStorage,
|
||||
setDefaultOptions,
|
||||
setBackupSchedule,
|
||||
selectedStorageType,
|
||||
seStorageType,
|
||||
//setCommonThirdPartyList,
|
||||
selectedPeriodLabel,
|
||||
selectedWeekdayLabel,
|
||||
selectedWeekday,
|
||||
selectedHour,
|
||||
selectedMonthDay,
|
||||
selectedMaxCopiesNumber,
|
||||
selectedPeriodNumber,
|
||||
selectedFolderId,
|
||||
selectedStorageId,
|
||||
toDefault,
|
||||
isFormReady,
|
||||
getStorageParams,
|
||||
setSelectedEnableSchedule,
|
||||
selectedEnableSchedule,
|
||||
updatePathSettings,
|
||||
|
||||
const isCheckedDocuments = selectedStorageType === `${DocumentModuleType}`;
|
||||
const isCheckedThirdParty = selectedStorageType === `${ResourcesModuleType}`;
|
||||
const isCheckedThirdPartyStorage =
|
||||
selectedStorageType === `${StorageModuleType}`;
|
||||
setStorageRegions,
|
||||
defaultFolderId,
|
||||
} = backup;
|
||||
|
||||
const { rootFoldersTitles, fetchTreeFolders } = treeFoldersStore;
|
||||
return {
|
||||
fetchTreeFolders,
|
||||
rootFoldersTitles,
|
||||
downloadingProgress,
|
||||
theme,
|
||||
language,
|
||||
isFormReady,
|
||||
organizationName,
|
||||
backupSchedule,
|
||||
//commonThirdPartyList,
|
||||
clearProgressInterval,
|
||||
deleteSchedule,
|
||||
getProgress,
|
||||
setThirdPartyStorage,
|
||||
setDefaultOptions,
|
||||
setBackupSchedule,
|
||||
selectedStorageType,
|
||||
seStorageType,
|
||||
//setCommonThirdPartyList,
|
||||
selectedPeriodLabel,
|
||||
selectedWeekdayLabel,
|
||||
selectedWeekday,
|
||||
selectedHour,
|
||||
selectedMonthDay,
|
||||
selectedMaxCopiesNumber,
|
||||
selectedPeriodNumber,
|
||||
selectedFolderId,
|
||||
selectedStorageId,
|
||||
const {
|
||||
updateBaseFolderPath,
|
||||
resetNewFolderPath,
|
||||
} = selectFolderDialogStore;
|
||||
|
||||
toDefault,
|
||||
const isCheckedDocuments = selectedStorageType === `${DocumentModuleType}`;
|
||||
const isCheckedThirdParty =
|
||||
selectedStorageType === `${ResourcesModuleType}`;
|
||||
const isCheckedThirdPartyStorage =
|
||||
selectedStorageType === `${StorageModuleType}`;
|
||||
|
||||
isCheckedThirdPartyStorage,
|
||||
isCheckedThirdParty,
|
||||
isCheckedDocuments,
|
||||
const { rootFoldersTitles, fetchTreeFolders } = treeFoldersStore;
|
||||
return {
|
||||
defaultFolderId,
|
||||
fetchTreeFolders,
|
||||
rootFoldersTitles,
|
||||
downloadingProgress,
|
||||
theme,
|
||||
language,
|
||||
isFormReady,
|
||||
organizationName,
|
||||
backupSchedule,
|
||||
//commonThirdPartyList,
|
||||
clearProgressInterval,
|
||||
deleteSchedule,
|
||||
getProgress,
|
||||
setThirdPartyStorage,
|
||||
setDefaultOptions,
|
||||
setBackupSchedule,
|
||||
selectedStorageType,
|
||||
seStorageType,
|
||||
//setCommonThirdPartyList,
|
||||
selectedPeriodLabel,
|
||||
selectedWeekdayLabel,
|
||||
selectedWeekday,
|
||||
selectedHour,
|
||||
selectedMonthDay,
|
||||
selectedMaxCopiesNumber,
|
||||
selectedPeriodNumber,
|
||||
selectedFolderId,
|
||||
selectedStorageId,
|
||||
|
||||
getStorageParams,
|
||||
toDefault,
|
||||
|
||||
setSelectedEnableSchedule,
|
||||
selectedEnableSchedule,
|
||||
isCheckedThirdPartyStorage,
|
||||
isCheckedThirdParty,
|
||||
isCheckedDocuments,
|
||||
|
||||
updatePathSettings,
|
||||
setSavingProcess,
|
||||
setResetProcess,
|
||||
setStorageRegions,
|
||||
};
|
||||
})(withTranslation(["Settings", "Common"])(observer(AutomaticBackup)));
|
||||
getStorageParams,
|
||||
|
||||
setSelectedEnableSchedule,
|
||||
selectedEnableSchedule,
|
||||
|
||||
updatePathSettings,
|
||||
resetNewFolderPath,
|
||||
setStorageRegions,
|
||||
updateBaseFolderPath,
|
||||
};
|
||||
}
|
||||
)(withTranslation(["Settings", "Common"])(observer(AutomaticBackup)));
|
||||
|
@ -9,18 +9,11 @@ const ButtonContainer = ({
|
||||
onCancelModuleSettings,
|
||||
isChanged,
|
||||
isThirdStorageChanged,
|
||||
setSavingProcess,
|
||||
t,
|
||||
setResetProcess,
|
||||
}) => {
|
||||
const prevChange = useRef();
|
||||
|
||||
useEffect(() => {
|
||||
if (!isChanged && isChanged !== prevChange.current) {
|
||||
setSavingProcess(false);
|
||||
setResetProcess(false);
|
||||
}
|
||||
}, [isChanged]);
|
||||
|
||||
|
||||
useEffect(() => {
|
||||
prevChange.current = isChanged;
|
||||
@ -50,17 +43,10 @@ const ButtonContainer = ({
|
||||
};
|
||||
|
||||
export default inject(({ backup }) => {
|
||||
const {
|
||||
isChanged,
|
||||
isThirdStorageChanged,
|
||||
setSavingProcess,
|
||||
setResetProcess,
|
||||
} = backup;
|
||||
const { isChanged, isThirdStorageChanged } = backup;
|
||||
|
||||
return {
|
||||
isChanged,
|
||||
isThirdStorageChanged,
|
||||
setSavingProcess,
|
||||
setResetProcess,
|
||||
};
|
||||
})(observer(ButtonContainer));
|
||||
|
@ -50,12 +50,11 @@ class RoomsModule extends React.PureComponent {
|
||||
onClickInput={this.onClickInput}
|
||||
isPanelVisible={isPanelVisible}
|
||||
isError={isError}
|
||||
foldersType="exceptSortedByTags"
|
||||
filteredType="exceptSortedByTags"
|
||||
withoutProvider
|
||||
isDisabled={isLoadingData}
|
||||
id={passedId}
|
||||
isReset={isResetProcess}
|
||||
isSuccessSave={isSavingProcess}
|
||||
withoutBasicSelection={isDocumentsDefault ? false : true}
|
||||
/>
|
||||
</div>
|
||||
|
@ -55,39 +55,16 @@ class ThirdPartyModule extends React.PureComponent {
|
||||
isError,
|
||||
isLoadingData,
|
||||
isReset,
|
||||
isSuccessSave,
|
||||
|
||||
passedId,
|
||||
//commonThirdPartyList,
|
||||
isResourcesDefault,
|
||||
isResetProcess,
|
||||
isSavingProcess,
|
||||
t,
|
||||
...rest
|
||||
} = this.props;
|
||||
|
||||
return (
|
||||
<>
|
||||
{/* {!isDocSpace ? (
|
||||
<div className="auto-backup_folder-input">
|
||||
<SelectFolderInput
|
||||
onSelectFolder={this.onSelectFolder}
|
||||
onClose={this.onClose}
|
||||
onClickInput={this.onClickInput}
|
||||
isPanelVisible={isPanelVisible}
|
||||
isError={isError}
|
||||
foldersType="third-party"
|
||||
isDisabled={commonThirdPartyList.length === 0 || isLoadingData}
|
||||
id={passedId}
|
||||
isReset={isResetProcess}
|
||||
isSuccessSave={isSavingProcess}
|
||||
foldersList={commonThirdPartyList}
|
||||
withoutBasicSelection={isResourcesDefault ? false : true}
|
||||
/>
|
||||
</div>
|
||||
) : ( */}
|
||||
|
||||
{/* )} */}
|
||||
|
||||
<div className="auto-backup_third-party-module">
|
||||
<DirectThirdPartyConnection
|
||||
t={t}
|
||||
@ -98,8 +75,6 @@ class ThirdPartyModule extends React.PureComponent {
|
||||
isPanelVisible={isPanelVisible}
|
||||
withoutBasicSelection={isResourcesDefault ? false : true}
|
||||
isError={isError}
|
||||
isReset={isResetProcess}
|
||||
isSuccessSave={isSavingProcess}
|
||||
id={passedId}
|
||||
/>
|
||||
</div>
|
||||
@ -115,8 +90,6 @@ export default inject(({ backup }) => {
|
||||
defaultStorageType,
|
||||
commonThirdPartyList,
|
||||
defaultFolderId,
|
||||
isResetProcess,
|
||||
isSavingProcess,
|
||||
} = backup;
|
||||
|
||||
const isResourcesDefault =
|
||||
@ -124,8 +97,6 @@ export default inject(({ backup }) => {
|
||||
const passedId = isResourcesDefault ? defaultFolderId : "";
|
||||
|
||||
return {
|
||||
isResetProcess,
|
||||
isSavingProcess,
|
||||
setSelectedFolder,
|
||||
passedId,
|
||||
commonThirdPartyList,
|
||||
|
@ -33,8 +33,6 @@ const DirectThirdPartyConnection = (props) => {
|
||||
isPanelVisible,
|
||||
isError,
|
||||
id,
|
||||
isReset,
|
||||
isSuccessSave,
|
||||
withoutBasicSelection,
|
||||
onSelectFile,
|
||||
isFileSelection = false,
|
||||
@ -337,7 +335,7 @@ const DirectThirdPartyConnection = (props) => {
|
||||
|
||||
{isFileSelection ? (
|
||||
<SelectFileInput
|
||||
foldersList={[folderList]}
|
||||
passedFoldersTree={[folderList]}
|
||||
onClose={onClose}
|
||||
onSelectFile={onSelectFile}
|
||||
onClickInput={onClickInput}
|
||||
@ -370,10 +368,8 @@ const DirectThirdPartyConnection = (props) => {
|
||||
}
|
||||
isPanelVisible={isPanelVisible}
|
||||
isError={isError}
|
||||
foldersList={[folderList]}
|
||||
passedFoldersTree={[folderList]}
|
||||
withoutBasicSelection={withoutBasicSelection}
|
||||
isReset={isReset}
|
||||
isSuccessSave={isSuccessSave}
|
||||
isWaitingUpdate={isInitialLoading || isUpdatingInfo ? true : false}
|
||||
/>
|
||||
)}
|
||||
|
@ -80,7 +80,7 @@ class RoomsModule extends React.Component {
|
||||
onClickInput={this.onClickInput}
|
||||
isPanelVisible={isPanelVisible}
|
||||
isDisabled={isModuleDisabled}
|
||||
foldersType="exceptSortedByTags"
|
||||
filteredType="exceptSortedByTags"
|
||||
{...(selectedFolder && { id: selectedFolder })}
|
||||
withoutBasicSelection={selectedFolder ? false : true}
|
||||
/>
|
||||
|
@ -122,42 +122,6 @@ class ThirdPartyModule extends React.Component {
|
||||
const isModuleDisabled = !isMaxProgress || isStartCopy || isLoadingData;
|
||||
|
||||
return (
|
||||
// !isDocSpace ? (
|
||||
// <>
|
||||
// <div className="manual-backup_folder-input">
|
||||
// <SelectFolderInput
|
||||
// onSelectFolder={this.onSelectFolder}
|
||||
// name={"thirdParty"}
|
||||
// onClose={this.onClose}
|
||||
// onClickInput={this.onClickInput}
|
||||
// onSetLoadingData={this.onSetLoadingData}
|
||||
// isDisabled={isModuleDisabled}
|
||||
// isPanelVisible={isPanelVisible}
|
||||
// isError={isError}
|
||||
// foldersType="third-party"
|
||||
// foldersList={commonThirdPartyList}
|
||||
// withoutBasicSelection
|
||||
// />
|
||||
// </div>
|
||||
// <div className="manual-backup_buttons">
|
||||
// <Button
|
||||
// label={t("Common:Duplicate")}
|
||||
// onClick={this.onMakeCopy}
|
||||
// primary
|
||||
// isDisabled={isModuleDisabled || selectedFolder?.trim() === ""}
|
||||
// size={buttonSize}
|
||||
// />
|
||||
// {!isMaxProgress && (
|
||||
// <Button
|
||||
// label={t("Common:CopyOperation") + "..."}
|
||||
// isDisabled={true}
|
||||
// size={buttonSize}
|
||||
// style={{ marginLeft: "8px" }}
|
||||
// />
|
||||
// )}
|
||||
// </div>
|
||||
// </>
|
||||
// ) : (
|
||||
<div className="manual-backup_third-party-module">
|
||||
<DirectThirdPartyConnection
|
||||
t={t}
|
||||
@ -176,7 +140,7 @@ class ThirdPartyModule extends React.Component {
|
||||
label={t("Common:Duplicate")}
|
||||
onClick={this.onMakeCopy}
|
||||
primary
|
||||
isDisabled={isModuleDisabled || selectedFolder?.trim() === ""}
|
||||
isDisabled={isModuleDisabled || selectedFolder === ""}
|
||||
size={buttonSize}
|
||||
/>
|
||||
</div>
|
||||
|
@ -1,4 +1,4 @@
|
||||
import React from "react";
|
||||
import React, { useEffect } from "react";
|
||||
import FileInput from "@docspace/components/file-input";
|
||||
|
||||
const LocalFile = ({ onSelectLocalFile, hasError }) => {
|
||||
@ -8,6 +8,12 @@ const LocalFile = ({ onSelectLocalFile, hasError }) => {
|
||||
|
||||
onSelectLocalFile(data);
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
return () => {
|
||||
onSelectLocalFile("");
|
||||
};
|
||||
}, []);
|
||||
return (
|
||||
<FileInput
|
||||
hasError={hasError}
|
||||
|
@ -7,13 +7,12 @@ class RoomsModule extends React.Component {
|
||||
return (
|
||||
<SelectFileInputWrapper
|
||||
{...this.props}
|
||||
foldersType="exceptSortedByTags"
|
||||
filteredType="exceptSortedByTags"
|
||||
withoutProvider
|
||||
isArchiveOnly
|
||||
searchParam=".gz"
|
||||
filesListTitle={t("SelectFileInGZFormat")}
|
||||
withoutResetFolderTree
|
||||
ignoreSelectedFolderTree
|
||||
withSubfolders={false}
|
||||
maxFolderInputWidth="446px"
|
||||
withoutBasicSelection
|
||||
/>
|
||||
|
@ -4,18 +4,6 @@ import DirectThirdPartyConnection from "../../common-container/DirectThirdPartyC
|
||||
|
||||
const ThirdPartyResources = (props) => {
|
||||
return (
|
||||
// return !isDocSpace ? (
|
||||
// <SelectFileInput
|
||||
// {...props}
|
||||
// foldersType="third-party"
|
||||
// searchParam=".gz"
|
||||
// filesListTitle={t("SelectFileInGZFormat")}
|
||||
// withoutResetFolderTree
|
||||
// ignoreSelectedFolderTree
|
||||
// isArchiveOnly
|
||||
// maxFolderInputWidth="446px"
|
||||
// />
|
||||
// ) : (
|
||||
<div className={"restore-backup_third-party-module"}>
|
||||
<DirectThirdPartyConnection
|
||||
{...props}
|
||||
|
@ -1,5 +1,5 @@
|
||||
import React, { useEffect } from "react";
|
||||
import { isDesktop } from "react-device-detect";
|
||||
import { isMobile } from "react-device-detect";
|
||||
import { inject, observer } from "mobx-react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
|
||||
@ -21,7 +21,7 @@ const SingleSignOn = (props) => {
|
||||
const { load, serviceProviderSettings, spMetadata } = props;
|
||||
const { t } = useTranslation("SingleSignOn");
|
||||
|
||||
if (!isDesktop) return <ForbiddenPage />;
|
||||
if (isMobile) return <ForbiddenPage />;
|
||||
|
||||
useEffect(() => {
|
||||
load();
|
||||
|
@ -4,6 +4,8 @@ import { withRouter } from "react-router";
|
||||
import Layout from "./Layout";
|
||||
import { combineUrl } from "@docspace/common/utils";
|
||||
import AppServerConfig from "@docspace/common/constants/AppServerConfig";
|
||||
import Panels from "../../components/FilesPanels";
|
||||
|
||||
const SecuritySettings = lazy(() => import("./categories/security/index.js"));
|
||||
|
||||
const TfaPage = lazy(() => import("./categories/security/access-portal/tfa"));
|
||||
@ -159,6 +161,7 @@ const ERROR_404_URL = combineUrl(AppServerConfig.proxyURL, "/error/404");
|
||||
const Settings = () => {
|
||||
return (
|
||||
<Layout key="1">
|
||||
<Panels />
|
||||
<Suspense fallback={null}>
|
||||
<Switch>
|
||||
<Route exact path={COMMON_URLS} component={CommonSettings} />
|
||||
|
@ -22,7 +22,9 @@ const Header = (props) => {
|
||||
history,
|
||||
isAdmin,
|
||||
filter,
|
||||
|
||||
setFilter,
|
||||
|
||||
profile,
|
||||
isMe,
|
||||
setChangeEmailVisible,
|
||||
@ -80,9 +82,9 @@ const Header = (props) => {
|
||||
return (
|
||||
<StyledHeader
|
||||
showContextButton={(isAdmin && !profile?.isOwner) || isMe}
|
||||
isVisitor={profile.isVisitor}
|
||||
isVisitor={!isAdmin}
|
||||
>
|
||||
{!profile.isVisitor && (
|
||||
{isAdmin && (
|
||||
<IconButton
|
||||
iconName="/static/images/arrow.path.react.svg"
|
||||
size="17"
|
||||
@ -122,6 +124,7 @@ const Header = (props) => {
|
||||
export default withRouter(
|
||||
inject(({ auth, peopleStore }) => {
|
||||
const { isAdmin } = auth;
|
||||
|
||||
const { targetUserStore, filterStore } = peopleStore;
|
||||
|
||||
const { filter, setFilterParams } = filterStore;
|
||||
@ -137,7 +140,9 @@ export default withRouter(
|
||||
return {
|
||||
isAdmin,
|
||||
filter,
|
||||
|
||||
setFilter: setFilterParams,
|
||||
|
||||
profile: targetUser,
|
||||
isMe,
|
||||
setChangeEmailVisible,
|
||||
|
@ -62,9 +62,6 @@ class BackupStore {
|
||||
selectedEnableSchedule = false;
|
||||
defaultEnableSchedule = false;
|
||||
|
||||
isSavingProcess = false;
|
||||
isResetProcess = false;
|
||||
|
||||
storageRegions = [];
|
||||
|
||||
constructor() {
|
||||
@ -574,13 +571,6 @@ class BackupStore {
|
||||
const isEnable = this.selectedEnableSchedule;
|
||||
this.selectedEnableSchedule = !isEnable;
|
||||
};
|
||||
setSavingProcess = (process) => {
|
||||
if (process !== this.isSavingProcess) this.isSavingProcess = process;
|
||||
};
|
||||
|
||||
setResetProcess = (process) => {
|
||||
if (process !== this.isResetProcess) this.isResetProcess = process;
|
||||
};
|
||||
|
||||
convertServiceName = (serviceName) => {
|
||||
//Docusign, OneDrive, Wordpress
|
||||
|
@ -29,6 +29,7 @@ class DialogsStore {
|
||||
isFolderActions = false;
|
||||
roomCreation = false;
|
||||
restoreAllPanelVisible = false;
|
||||
eventDialogVisible = false;
|
||||
|
||||
removeItem = null;
|
||||
connectItem = null;
|
||||
@ -116,6 +117,10 @@ class DialogsStore {
|
||||
this.deleteDialogVisible = deleteDialogVisible;
|
||||
};
|
||||
|
||||
setEventDialogVisible = (eventDialogVisible) => {
|
||||
this.eventDialogVisible = eventDialogVisible;
|
||||
};
|
||||
|
||||
setDownloadDialogVisible = (downloadDialogVisible) => {
|
||||
!downloadDialogVisible && this.deselectActiveFiles();
|
||||
this.downloadDialogVisible = downloadDialogVisible;
|
||||
@ -263,7 +268,8 @@ class DialogsStore {
|
||||
this.convertDialogVisible ||
|
||||
this.selectFileDialogVisible ||
|
||||
this.authStore.settingsStore.hotkeyPanelVisible ||
|
||||
this.versionHistoryStore.isVisible
|
||||
this.versionHistoryStore.isVisible ||
|
||||
this.eventDialogVisible
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -689,17 +689,13 @@ class FilesActionStore {
|
||||
};
|
||||
|
||||
finalizeVersionAction = (id) => {
|
||||
const { setFile, setIsLoading } = this.filesStore;
|
||||
const { setFile } = this.filesStore;
|
||||
|
||||
setIsLoading(true);
|
||||
|
||||
return finalizeVersion(id, 0, false)
|
||||
.then((res) => {
|
||||
if (res && res[0]) {
|
||||
setFile(res[0]);
|
||||
}
|
||||
})
|
||||
.finally(() => setIsLoading(false));
|
||||
return finalizeVersion(id, 0, false).then((res) => {
|
||||
if (res && res[0]) {
|
||||
setFile(res[0]);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
duplicateAction = (item, label) => {
|
||||
@ -1159,8 +1155,6 @@ class FilesActionStore {
|
||||
const { userAccess } = this.filesStore;
|
||||
|
||||
switch (option) {
|
||||
case "share":
|
||||
return isAccessedSelected && !personal; //isFavoritesFolder ||isRecentFolder
|
||||
case "showInfo":
|
||||
case "copy":
|
||||
case "download":
|
||||
@ -1276,16 +1270,6 @@ class FilesActionStore {
|
||||
} = this.dialogsStore;
|
||||
|
||||
switch (option) {
|
||||
case "share":
|
||||
if (!this.isAvailableOption("share")) return null;
|
||||
else
|
||||
return {
|
||||
label: t("Share"),
|
||||
onClick: () => setSharingPanelVisible(true),
|
||||
iconUrl: "/static/images/share.react.svg",
|
||||
title: t("Translations:ButtonShareAccess"),
|
||||
};
|
||||
|
||||
case "copy":
|
||||
if (!this.isAvailableOption("copy")) return null;
|
||||
else
|
||||
@ -1416,7 +1400,6 @@ class FilesActionStore {
|
||||
};
|
||||
|
||||
getAnotherFolderOptions = (itemsCollection, t) => {
|
||||
const share = this.getOption("share", t);
|
||||
const download = this.getOption("download", t);
|
||||
const downloadAs = this.getOption("downloadAs", t);
|
||||
const moveTo = this.getOption("moveTo", t);
|
||||
@ -1425,7 +1408,6 @@ class FilesActionStore {
|
||||
const showInfo = this.getOption("showInfo", t);
|
||||
|
||||
itemsCollection
|
||||
.set("share", share)
|
||||
.set("download", download)
|
||||
.set("downloadAs", downloadAs)
|
||||
.set("moveTo", moveTo)
|
||||
@ -1437,14 +1419,13 @@ class FilesActionStore {
|
||||
};
|
||||
|
||||
getRecentFolderOptions = (itemsCollection, t) => {
|
||||
const share = this.getOption("share", t);
|
||||
const download = this.getOption("download", t);
|
||||
const downloadAs = this.getOption("downloadAs", t);
|
||||
const copy = this.getOption("copy", t);
|
||||
const showInfo = this.getOption("showInfo", t);
|
||||
|
||||
itemsCollection
|
||||
.set("share", share)
|
||||
|
||||
.set("download", download)
|
||||
.set("downloadAs", downloadAs)
|
||||
.set("copy", copy)
|
||||
@ -1456,14 +1437,13 @@ class FilesActionStore {
|
||||
getShareFolderOptions = (itemsCollection, t) => {
|
||||
const { setDeleteDialogVisible, setUnsubscribe } = this.dialogsStore;
|
||||
|
||||
const share = this.getOption("share", t);
|
||||
const download = this.getOption("download", t);
|
||||
const downloadAs = this.getOption("downloadAs", t);
|
||||
const copy = this.getOption("copy", t);
|
||||
const showInfo = this.getOption("showInfo", t);
|
||||
|
||||
itemsCollection
|
||||
.set("share", share)
|
||||
|
||||
.set("download", download)
|
||||
.set("downloadAs", downloadAs)
|
||||
.set("copy", copy)
|
||||
@ -1497,15 +1477,12 @@ class FilesActionStore {
|
||||
|
||||
getFavoritesFolderOptions = (itemsCollection, t) => {
|
||||
const { selection } = this.filesStore;
|
||||
|
||||
const share = this.getOption("share", t);
|
||||
const download = this.getOption("download", t);
|
||||
const downloadAs = this.getOption("downloadAs", t);
|
||||
const copy = this.getOption("copy", t);
|
||||
const showInfo = this.getOption("showInfo", t);
|
||||
|
||||
itemsCollection
|
||||
.set("share", share)
|
||||
.set("download", download)
|
||||
.set("downloadAs", downloadAs)
|
||||
.set("copy", copy)
|
||||
|
@ -2598,13 +2598,13 @@ class FilesStore {
|
||||
// const filterTotal = isRoom ? this.roomsFilterTotal : this.filterTotal;
|
||||
const filterTotal = isRooms ? this.roomsFilter.total : this.filter.total;
|
||||
|
||||
console.log("hasMoreFiles isRooms", isRooms);
|
||||
console.log("hasMoreFiles filesList", this.filesList.length);
|
||||
console.log("hasMoreFiles this.filterTotal", this.filterTotal);
|
||||
console.log("hasMoreFiles this.roomsFilterTotal", this.roomsFilterTotal);
|
||||
console.log("hasMoreFiles filterTotal", filterTotal);
|
||||
console.log("hasMoreFiles", this.filesList.length < filterTotal);
|
||||
console.log("----------------------------");
|
||||
// console.log("hasMoreFiles isRooms", isRooms);
|
||||
// console.log("hasMoreFiles filesList", this.filesList.length);
|
||||
// console.log("hasMoreFiles this.filterTotal", this.filterTotal);
|
||||
// console.log("hasMoreFiles this.roomsFilterTotal", this.roomsFilterTotal);
|
||||
// console.log("hasMoreFiles filterTotal", filterTotal);
|
||||
// console.log("hasMoreFiles", this.filesList.length < filterTotal);
|
||||
// console.log("----------------------------");
|
||||
|
||||
if (this.isLoading) return false;
|
||||
return this.filesList.length < filterTotal;
|
||||
|
@ -580,6 +580,10 @@ class HotkeyStore {
|
||||
// }
|
||||
}
|
||||
|
||||
if (nextForTileDown.isFolder === undefined) {
|
||||
nextForTileDown.isFolder = !!nextForTileDown.parentId;
|
||||
}
|
||||
|
||||
return nextForTileDown;
|
||||
}
|
||||
|
||||
@ -611,6 +615,11 @@ class HotkeyStore {
|
||||
} else if (!prevTileFile) {
|
||||
prevForTileUp = hotkeyCaret;
|
||||
}
|
||||
|
||||
if (prevForTileUp.isFolder === undefined) {
|
||||
prevForTileUp.isFolder = !!prevForTileUp.parentId;
|
||||
}
|
||||
|
||||
return prevForTileUp;
|
||||
}
|
||||
|
||||
|
@ -60,8 +60,14 @@ class ProfileActionsStore {
|
||||
};
|
||||
|
||||
onProfileClick = () => {
|
||||
this.selectedFolderStore.setSelectedFolder(null);
|
||||
this.treeFoldersStore.setSelectedNode(["accounts"]);
|
||||
//TODO: add check manager
|
||||
const { isAdmin, isOwner } = this.authStore.userStore.user;
|
||||
|
||||
if (isAdmin || isOwner) {
|
||||
this.selectedFolderStore.setSelectedFolder(null);
|
||||
this.treeFoldersStore.setSelectedNode(["accounts"]);
|
||||
}
|
||||
|
||||
history.push(PROFILE_SELF_URL);
|
||||
};
|
||||
|
||||
|
@ -1,17 +1,11 @@
|
||||
import { makeObservable, action, observable } from "mobx";
|
||||
import { makeAutoObservable } from "mobx";
|
||||
|
||||
class SelectFileDialogStore {
|
||||
folderId = null;
|
||||
fileInfo = null;
|
||||
fileInfo = {};
|
||||
|
||||
constructor() {
|
||||
makeObservable(this, {
|
||||
fileInfo: observable,
|
||||
folderId: observable,
|
||||
|
||||
setFolderId: action,
|
||||
setFile: action,
|
||||
});
|
||||
makeAutoObservable(this);
|
||||
}
|
||||
|
||||
setFolderId = (id) => {
|
||||
|
@ -1,27 +1,55 @@
|
||||
import { makeObservable, action, observable } from "mobx";
|
||||
import { makeAutoObservable } from "mobx";
|
||||
|
||||
class SelectFolderDialogStore {
|
||||
folderId = null;
|
||||
resultingFolderId = null;
|
||||
fileInfo = null;
|
||||
folderTitle = "";
|
||||
providerKey = null;
|
||||
baseFolderPath = "";
|
||||
newFolderPath = "";
|
||||
isPathError = false;
|
||||
isLoading = false;
|
||||
resultingFolderTree = [];
|
||||
|
||||
constructor() {
|
||||
makeObservable(this, {
|
||||
fileInfo: observable,
|
||||
folderId: observable,
|
||||
folderTitle: observable,
|
||||
providerKey: observable,
|
||||
|
||||
setFolderId: action,
|
||||
setProviderKey: action,
|
||||
setFolderTitle: action,
|
||||
});
|
||||
makeAutoObservable(this);
|
||||
}
|
||||
|
||||
setFolderId = (id) => {
|
||||
this.folderId = id;
|
||||
toDefault = () => {
|
||||
this.resultingFolderId = null;
|
||||
this.resultingFolderTree = [];
|
||||
this.baseFolderPath = "";
|
||||
this.newFolderPath = "";
|
||||
this.folderTitle = "";
|
||||
this.isLoading = false;
|
||||
this.isPathError = false;
|
||||
this.setProviderKey(null);
|
||||
};
|
||||
|
||||
updateBaseFolderPath = () => {
|
||||
this.baseFolderPath = this.newFolderPath;
|
||||
this.setIsPathError(false);
|
||||
};
|
||||
|
||||
resetNewFolderPath = (id) => {
|
||||
this.newFolderPath = this.baseFolderPath;
|
||||
this.setIsPathError(false);
|
||||
this.setResultingFolderId(id);
|
||||
};
|
||||
|
||||
setBaseFolderPath = (baseFolderPath) => {
|
||||
this.baseFolderPath = baseFolderPath;
|
||||
};
|
||||
|
||||
setIsPathError = (isPathError) => {
|
||||
this.isPathError = isPathError;
|
||||
};
|
||||
|
||||
setNewFolderPath = (newFolderPath) => {
|
||||
this.newFolderPath = newFolderPath;
|
||||
};
|
||||
setResultingFolderId = (id) => {
|
||||
this.resultingFolderId = id;
|
||||
};
|
||||
|
||||
setFolderTitle = (title) => {
|
||||
@ -31,6 +59,14 @@ class SelectFolderDialogStore {
|
||||
setProviderKey = (providerKey) => {
|
||||
this.providerKey = providerKey;
|
||||
};
|
||||
|
||||
setIsLoading = (isLoading) => {
|
||||
this.isLoading = isLoading;
|
||||
};
|
||||
|
||||
setResultingFoldersTree = (tree) => {
|
||||
this.resultingFolderTree = tree;
|
||||
};
|
||||
}
|
||||
|
||||
export default new SelectFolderDialogStore();
|
||||
|
@ -1,11 +1,6 @@
|
||||
import styled, { css } from "styled-components";
|
||||
|
||||
import {
|
||||
isMobile,
|
||||
isMobileOnly,
|
||||
isTablet,
|
||||
isDesktop,
|
||||
} from "react-device-detect";
|
||||
import { isMobile, isMobileOnly, isTablet } from "react-device-detect";
|
||||
import {
|
||||
mobile,
|
||||
tablet,
|
||||
@ -82,7 +77,6 @@ const StyledArticle = styled.article`
|
||||
.scroll-body {
|
||||
overflow-x: hidden !important;
|
||||
height: calc(100% - 200px);
|
||||
${!isDesktop && "padding-top: 16px"};
|
||||
padding: 0 20px;
|
||||
|
||||
@media ${tablet} {
|
||||
|
@ -1,7 +1,4 @@
|
||||
import styled, { css } from "styled-components";
|
||||
|
||||
import { isDesktop } from "react-device-detect";
|
||||
|
||||
import SearchInput from "@docspace/components/search-input";
|
||||
|
||||
const StyledFilterInput = styled.div`
|
||||
|
@ -1,7 +1,7 @@
|
||||
import Base from "@docspace/components/themes/base";
|
||||
import styled, { keyframes, css } from "styled-components";
|
||||
import { desktop, tablet } from "@docspace/components/utils/device";
|
||||
import { isDesktop } from "react-device-detect";
|
||||
import { isMobile } from "react-device-detect";
|
||||
|
||||
const StyledFloatingButtonWrapper = styled.div`
|
||||
@media ${desktop} {
|
||||
@ -10,7 +10,7 @@ const StyledFloatingButtonWrapper = styled.div`
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
|
||||
${isDesktop &&
|
||||
${!isMobile &&
|
||||
css`
|
||||
width: 100px;
|
||||
height: 70px;
|
||||
|
@ -3,7 +3,7 @@ import PropTypes from "prop-types";
|
||||
import styled, { css } from "styled-components";
|
||||
//import equal from "fast-deep-equal/react";
|
||||
//import { LayoutContextConsumer } from "client/Layout/context";
|
||||
import { isMobile, isMobileOnly, isDesktop } from "react-device-detect";
|
||||
import { isMobile, isMobileOnly } from "react-device-detect";
|
||||
import { inject, observer } from "mobx-react";
|
||||
|
||||
import Scrollbar from "@docspace/components/scrollbar";
|
||||
@ -110,7 +110,7 @@ const commonStyles = css`
|
||||
.files-row-container {
|
||||
margin-top: -22px;
|
||||
|
||||
${isDesktop &&
|
||||
${!isMobile &&
|
||||
css`
|
||||
margin-top: -17px;
|
||||
`}
|
||||
|
@ -139,6 +139,8 @@ const StyledAvatar = styled.div`
|
||||
font-family: ${(props) => props.theme.fontFamily};
|
||||
font-style: normal;
|
||||
|
||||
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
||||
|
||||
.admin_icon {
|
||||
rect:nth-child(1) {
|
||||
fill: ${(props) => props.theme.avatar.administrator.fill};
|
||||
|
@ -31,23 +31,39 @@ const StyledScroll = styled.div`
|
||||
|
||||
const rowStyles = css`
|
||||
margin-left: -20px;
|
||||
width: ${({ width }) => width + 20 + "px !important"};
|
||||
width: ${({ width }) => width + 36 + "px !important"};
|
||||
|
||||
.ReactVirtualized__Grid__innerScrollContainer {
|
||||
max-width: ${({ width }) => width + 20 + "px !important"};
|
||||
max-width: ${({ width }) => width + 36 + "px !important"};
|
||||
}
|
||||
|
||||
@media ${tablet} {
|
||||
width: ${({ width }) => width + 36 + "px !important"};
|
||||
|
||||
.ReactVirtualized__Grid__innerScrollContainer {
|
||||
max-width: ${({ width }) => width + 36 + "px !important"};
|
||||
}
|
||||
}
|
||||
|
||||
@media ${mobile} {
|
||||
width: ${({ width }) => width + 28 + "px !important"};
|
||||
|
||||
.ReactVirtualized__Grid__innerScrollContainer {
|
||||
max-width: ${({ width }) => width + 28 + "px !important"};
|
||||
}
|
||||
}
|
||||
|
||||
.row-list-item {
|
||||
padding-left: 16px;
|
||||
width: calc(100% - 16px) !important;
|
||||
width: calc(100% - 32px) !important;
|
||||
|
||||
@media ${tablet} {
|
||||
padding-left: 20px;
|
||||
width: calc(100% - 20px) !important;
|
||||
width: calc(100% - 36px) !important;
|
||||
}
|
||||
|
||||
@media ${mobile} {
|
||||
width: calc(100% - 20px) !important;
|
||||
width: calc(100% - 28px) !important;
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
@ -2,7 +2,7 @@ let timer = null;
|
||||
|
||||
const startInterval = () => {
|
||||
const elem = document.getElementById("infinite-page-loader");
|
||||
elem.style.display = "block";
|
||||
if (elem) elem.style.display = "block";
|
||||
};
|
||||
|
||||
export function showLoader() {
|
||||
|
@ -77,6 +77,8 @@ const StyledCheckbox = styled.div`
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
|
||||
min-width: 41px;
|
||||
width: 41px;
|
||||
${(props) =>
|
||||
props.mode == "modern" &&
|
||||
!isMobile &&
|
||||
|
@ -8,6 +8,11 @@ import Badge from "../badge";
|
||||
import Base from "../themes/base";
|
||||
|
||||
const StyledTree = styled(Tree)`
|
||||
span.rc-tree-node-content-wrapper,
|
||||
span.rc-tree-switcher {
|
||||
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
.rc-tree-list-holder-inner {
|
||||
.disable-node {
|
||||
span.rc-tree-node-content-wrapper {
|
||||
@ -33,6 +38,22 @@ const StyledTree = styled(Tree)`
|
||||
}
|
||||
}
|
||||
|
||||
.disable-folder {
|
||||
span.rc-tree-node-content-wrapper {
|
||||
pointer-events: none;
|
||||
span.rc-tree-iconEle {
|
||||
svg {
|
||||
path {
|
||||
fill: ${(props) => props.theme.treeNode.disableColor};
|
||||
}
|
||||
}
|
||||
}
|
||||
span.rc-tree-title {
|
||||
color: ${(props) => props.theme.treeNode.disableColor} !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.rc-tree-treenode {
|
||||
height: 36px;
|
||||
display: flex;
|
||||
|
@ -22,7 +22,7 @@ const SelectFileDialog = ({
|
||||
module: "./SelectFileDialog",
|
||||
}}
|
||||
resetTreeFolders
|
||||
foldersType="exceptPrivacyTrashFolders"
|
||||
filteredType="exceptPrivacyTrashArchiveFolders"
|
||||
isPanelVisible={isVisible}
|
||||
onClose={onCloseFileDialog}
|
||||
onSelectFile={onSelectFile}
|
||||
|
@ -63,7 +63,7 @@ const SelectFolderDialog = ({
|
||||
folderId={folderId}
|
||||
isPanelVisible={isVisible}
|
||||
onClose={onCloseFolderDialog}
|
||||
foldersType="exceptSortedByTags"
|
||||
filteredType="exceptSortedByTags"
|
||||
onSave={onClickSaveSelectFolder}
|
||||
isDisableButton={!titleSelectorFolder.trim()}
|
||||
{...headerProps}
|
||||
|
Loading…
Reference in New Issue
Block a user