Merge branch 'feature/user-quota' of https://github.com/ONLYOFFICE/DocSpace into feature/user-quota
This commit is contained in:
commit
090259d313
35
build/build.sh
Executable file
35
build/build.sh
Executable file
@ -0,0 +1,35 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo off
|
||||
|
||||
echo "##########################################################"
|
||||
echo "######### Start build and deploy #######################"
|
||||
echo "##########################################################"
|
||||
|
||||
echo ""
|
||||
|
||||
rd="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
|
||||
echo "Run script directory:" $rd
|
||||
|
||||
dir=$(builtin cd $rd/../; pwd)
|
||||
echo "Root directory:" $dir
|
||||
|
||||
pushd $dir
|
||||
|
||||
echo "FRONT-END (for start run command 'yarn start' inside the root folder)"
|
||||
yarn install
|
||||
|
||||
echo "BACK-END"
|
||||
dotnet build $dir/asc.web.slnf /fl1 /flp1:logfile=asc.web.log;verbosity=normal
|
||||
|
||||
echo "install nodejs projects dependencies..."
|
||||
pushd $dir/common/ASC.Socket.IO/
|
||||
yarn install
|
||||
pushd $dir/common/ASC.SsoAuth/
|
||||
yarn install
|
||||
pushd $dir/common/ASC.WebDav/
|
||||
yarn install
|
||||
pushd $dir/common/ASC.UrlShortener/
|
||||
yarn install
|
||||
pushd $dir/common/ASC.WebPlugins/
|
||||
yarn install
|
@ -48,7 +48,8 @@ DIST="";
|
||||
REV="";
|
||||
KERNEL="";
|
||||
|
||||
INSTALL_KAFKA="true";
|
||||
INSTALL_REDIS="true";
|
||||
INSTALL_RABBITMQ="true";
|
||||
INSTALL_MYSQL_SERVER="true";
|
||||
INSTALL_DOCUMENT_SERVER="true";
|
||||
INSTALL_PRODUCT="true";
|
||||
@ -58,6 +59,7 @@ HUB="";
|
||||
USERNAME="";
|
||||
PASSWORD="";
|
||||
|
||||
MYSQL_VERSION=""
|
||||
MYSQL_DATABASE=""
|
||||
MYSQL_USER=""
|
||||
MYSQL_PASSWORD=""
|
||||
@ -65,19 +67,17 @@ MYSQL_ROOT_PASSWORD=""
|
||||
MYSQL_HOST=""
|
||||
DATABASE_MIGRATION="true"
|
||||
|
||||
ZOO_PORT=""
|
||||
ZOO_HOST=""
|
||||
KAFKA_HOST=""
|
||||
|
||||
ELK_VERSION=""
|
||||
ELK_HOST=""
|
||||
|
||||
DOCUMENT_SERVER_IMAGE_NAME=onlyoffice/4testing-documentserver-ee:latest
|
||||
DOCUMENT_SERVER_JWT_SECRET=""
|
||||
DOCUMENT_SERVER_JWT_HEADER=""
|
||||
DOCUMENT_SERVER_HOST=""
|
||||
|
||||
APP_CORE_BASE_DOMAIN=""
|
||||
APP_CORE_MACHINEKEY=""
|
||||
APP_DOTNET_ENV=""
|
||||
ENV_EXTENSION=""
|
||||
|
||||
HELP_TARGET="install-Docker.sh";
|
||||
|
||||
@ -138,9 +138,16 @@ while [ "$1" != "" ]; do
|
||||
fi
|
||||
;;
|
||||
|
||||
-ikafka | --installkafka )
|
||||
-ira | --installrabbitmq )
|
||||
if [ "$2" != "" ]; then
|
||||
INSTALL_KAFKA=$2
|
||||
INSTALL_RABBITMQ=$2
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
|
||||
-ire | --installredis )
|
||||
if [ "$2" != "" ]; then
|
||||
INSTALL_REDIS=$2
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
@ -187,27 +194,6 @@ while [ "$1" != "" ]; do
|
||||
fi
|
||||
;;
|
||||
|
||||
-zp | --zookeeperport )
|
||||
if [ "$2" != "" ]; then
|
||||
ZOO_PORT=$2
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
|
||||
-zh | --zookeeperhost )
|
||||
if [ "$2" != "" ]; then
|
||||
ZOO_HOST=$2
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
|
||||
-kh | --kafkahost )
|
||||
if [ "$2" != "" ]; then
|
||||
KAFKA_HOST=$2
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
|
||||
-esh | --elasticsearchhost )
|
||||
if [ "$2" != "" ]; then
|
||||
ELK_HOST=$2
|
||||
@ -252,7 +238,7 @@ while [ "$1" != "" ]; do
|
||||
|
||||
-env | --environment )
|
||||
if [ "$2" != "" ]; then
|
||||
APP_DOTNET_ENV=$2
|
||||
ENV_EXTENSION=$2
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
@ -311,16 +297,14 @@ while [ "$1" != "" ]; do
|
||||
echo " -ids, --installdocumentserver install or update document server (true|false)"
|
||||
echo " -di, --documentserverimage document server image name"
|
||||
echo " -imysql, --installmysql install or update mysql (true|false)"
|
||||
echo " -ikafka, --installkafka install or update kafka (true|false)"
|
||||
echo " -ira, --installrabbitmq install or update rabbitmq (true|false)"
|
||||
echo " -ire, --installredis install or update redis (true|false)"
|
||||
echo " -mysqlrp, --mysqlrootpassword mysql server root password"
|
||||
echo " -mysqld, --mysqldatabase $PRODUCT database name"
|
||||
echo " -mysqlu, --mysqluser $PRODUCT database user"
|
||||
echo " -mysqlp, --mysqlpassword $PRODUCT database password"
|
||||
echo " -mysqlh, --mysqlhost mysql server host"
|
||||
echo " -dsh, --docspdcehost $PRODUCT host"
|
||||
echo " -zp, --zookeeperport zookeeper port (default value 2181)"
|
||||
echo " -zh, --zookeeperhost zookeeper host"
|
||||
echo " -kh, --kafkahost kafka host"
|
||||
echo " -esh, --elasticsearchhost elasticsearch host"
|
||||
echo " -env, --environment $PRODUCT environment"
|
||||
echo " -skiphc, --skiphardwarecheck skip hardware check (true|false)"
|
||||
@ -826,6 +810,7 @@ install_mysql_server () {
|
||||
MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-"$MYSQL_PASSWORD"}
|
||||
fi
|
||||
|
||||
reconfigure MYSQL_VERSION ${MYSQL_VERSION}
|
||||
reconfigure MYSQL_DATABASE ${MYSQL_DATABASE}
|
||||
reconfigure MYSQL_USER ${MYSQL_USER}
|
||||
reconfigure MYSQL_PASSWORD ${MYSQL_PASSWORD}
|
||||
@ -842,35 +827,47 @@ install_document_server () {
|
||||
fi
|
||||
|
||||
reconfigure DOCUMENT_SERVER_IMAGE_NAME ${DOCUMENT_SERVER_IMAGE_NAME}
|
||||
reconfigure DOCUMENT_SERVER_JWT_HEADER ${DOCUMENT_SERVER_JWT_HEADER}
|
||||
reconfigure DOCUMENT_SERVER_JWT_SECRET ${DOCUMENT_SERVER_JWT_SECRET}
|
||||
reconfigure DOCUMENT_SERVER_HOST ${DOCUMENT_SERVER_HOST}
|
||||
|
||||
docker-compose -f $BASE_DIR/ds.yml up -d
|
||||
}
|
||||
|
||||
install_kafka () {
|
||||
reconfigure ZOO_PORT ${ZOO_PORT}
|
||||
reconfigure ZOO_HOST ${ZOO_HOST}
|
||||
reconfigure KAFKA_HOST ${KAFKA_HOST}
|
||||
install_rabbitmq () {
|
||||
if ! command_exists docker-compose; then
|
||||
install_docker_compose
|
||||
fi
|
||||
|
||||
docker-compose -f $BASE_DIR/kafka.yml up -d
|
||||
docker-compose -f $BASE_DIR/rabbitmq.yml up -d
|
||||
}
|
||||
|
||||
install_redis () {
|
||||
if ! command_exists docker-compose; then
|
||||
install_docker_compose
|
||||
fi
|
||||
|
||||
docker-compose -f $BASE_DIR/redis.yml up -d
|
||||
}
|
||||
|
||||
install_product () {
|
||||
if ! command_exists docker-compose; then
|
||||
install_docker_compose
|
||||
fi
|
||||
reconfigure ENV_EXTENSION ${ENV_EXTENSION}
|
||||
reconfigure ELK_HOST ${ELK_HOST}
|
||||
reconfigure ELK_VERSION ${ELK_VERSION}
|
||||
reconfigure SERVICE_PORT ${SERVICE_PORT}
|
||||
reconfigure APP_CORE_MACHINEKEY ${APP_CORE_MACHINEKEY}
|
||||
reconfigure APP_CORE_BASE_DOMAIN ${APP_CORE_BASE_DOMAIN}
|
||||
reconfigure DOCKER_TAG ${DOCKER_TAG}
|
||||
|
||||
if [[ -n $EXTERNAL_PORT ]]; then
|
||||
sed -i "s/8092:8092/${EXTERNAL_PORT}:8092/g" $BASE_DIR/$PRODUCT.yml
|
||||
sed -i "s/8092:8092/${EXTERNAL_PORT}:8092/g" $BASE_DIR/appserver.yml
|
||||
fi
|
||||
|
||||
docker-compose -f $BASE_DIR/$PRODUCT.yml up -d
|
||||
docker-compose -f $BASE_DIR/migration-runner.yml up -d
|
||||
docker-compose -f $BASE_DIR/appserver.yml up -d
|
||||
docker-compose -f $BASE_DIR/notify.yml up -d
|
||||
}
|
||||
|
||||
@ -903,7 +900,7 @@ check_image_RepoDigest() {
|
||||
}
|
||||
|
||||
docker_image_update() {
|
||||
docker-compose -f $BASE_DIR/notify.yml -f $BASE_DIR/$PRODUCT.yml down --volumes
|
||||
docker-compose -f $BASE_DIR/notify.yml -f $BASE_DIR/appserver.yml down --volumes
|
||||
docker-compose -f $BASE_DIR/build.yml pull
|
||||
}
|
||||
|
||||
@ -943,16 +940,14 @@ save_parameters_from_configs() {
|
||||
MYSQL_ROOT_PASSWORD=$(save_parameter MYSQL_ROOT_PASSWORD $MYSQL_ROOT_PASSWORD)
|
||||
MYSQL_HOST=$(save_parameter MYSQL_HOST $MYSQL_HOST)
|
||||
DOCUMENT_SERVER_JWT_SECRET=$(save_parameter DOCUMENT_SERVER_JWT_SECRET $DOCUMENT_SERVER_JWT_SECRET)
|
||||
DOCUMENT_SERVER_JWT_HEADER=$(save_parameter DOCUMENT_SERVER_JWT_HEADER $DOCUMENT_SERVER_JWT_HEADER)
|
||||
DOCUMENT_SERVER_HOST=$(save_parameter DOCUMENT_SERVER_HOST $DOCUMENT_SERVER_HOST)
|
||||
ZOO_PORT=$(save_parameter ZOO_PORT $ZOO_PORT)
|
||||
ZOO_HOST=$(save_parameter ZOO_HOST $ZOO_HOST)
|
||||
KAFKA_HOST=$(save_parameter KAFKA_HOST $KAFKA_HOST)
|
||||
ELK_HOST=$(save_parameter ELK_HOST $ELK_HOST)
|
||||
SERVICE_PORT=$(save_parameter SERVICE_PORT $SERVICE_PORT)
|
||||
APP_CORE_MACHINEKEY=$(save_parameter APP_CORE_MACHINEKEY $APP_CORE_MACHINEKEY)
|
||||
APP_CORE_BASE_DOMAIN=$(save_parameter APP_CORE_BASE_DOMAIN $APP_CORE_BASE_DOMAIN)
|
||||
if [ ${EXTERNAL_PORT} = "8092" ]; then
|
||||
EXTERNAL_PORT=$(grep -oP '(?<=- ).*?(?=:8092)' /app/onlyoffice/$PRODUCT.yml)
|
||||
EXTERNAL_PORT=$(grep -oP '(?<=- ).*?(?=:8092)' /app/onlyoffice/appserver.yml)
|
||||
fi
|
||||
}
|
||||
|
||||
@ -1004,8 +999,12 @@ start_installation () {
|
||||
install_document_server
|
||||
fi
|
||||
|
||||
if [ "$INSTALL_KAFKA" == "true" ]; then
|
||||
install_kafka
|
||||
if [ "$INSTALL_RABBITMQ" == "true" ]; then
|
||||
install_rabbitmq
|
||||
fi
|
||||
|
||||
if [ "$INSTALL_REDIS" == "true" ]; then
|
||||
install_redis
|
||||
fi
|
||||
|
||||
if [ "$INSTALL_PRODUCT" == "true" ]; then
|
||||
|
@ -4,19 +4,19 @@ set -e
|
||||
|
||||
PRODUCT="docspace"
|
||||
ENVIRONMENT="production"
|
||||
PACKAGE_SYSNAME="onlyoffice"
|
||||
|
||||
APP_DIR="/etc/onlyoffice/${PRODUCT}"
|
||||
APP_DIR="/etc/${PACKAGE_SYSNAME}/${PRODUCT}"
|
||||
PRODUCT_DIR="/var/www/${PRODUCT}"
|
||||
USER_CONF="$APP_DIR/appsettings.$ENVIRONMENT.json"
|
||||
|
||||
NGINX_DIR="/etc/nginx"
|
||||
NGINX_CONF="${NGINX_DIR}/conf.d"
|
||||
SYSTEMD_DIR="/lib/systemd/system"
|
||||
|
||||
MYSQL=""
|
||||
DB_HOST=""
|
||||
DB_HOST="localhost"
|
||||
DB_PORT="3306"
|
||||
DB_NAME=""
|
||||
DB_USER=""
|
||||
DB_NAME="${PACKAGE_SYSNAME}"
|
||||
DB_USER="root"
|
||||
DB_PWD=""
|
||||
|
||||
APP_HOST="localhost"
|
||||
@ -31,7 +31,8 @@ ELK_PORT="9200"
|
||||
|
||||
RABBITMQ_HOST="localhost"
|
||||
RABBITMQ_USER="guest"
|
||||
RABBITMQ_PWD="guest"
|
||||
RABBITMQ_PASSWORD="guest"
|
||||
RABBITMQ_PORT="5672"
|
||||
|
||||
REDIS_HOST="localhost"
|
||||
REDIS_PORT="6379"
|
||||
@ -156,13 +157,20 @@ while [ "$1" != "" ]; do
|
||||
fi
|
||||
;;
|
||||
|
||||
-rbp | --rabbitmqpassword )
|
||||
-rbpw | --rabbitmqpassword )
|
||||
if [ "$2" != "" ]; then
|
||||
RABBITMQ_PASSWORD=$2
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
|
||||
-rbp | --rabbitmqport )
|
||||
if [ "$2" != "" ]; then
|
||||
RABBITMQ_PORT=$2
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
|
||||
-? | -h | --help )
|
||||
echo " Usage: bash ${PRODUCT}-configuration.sh [PARAMETER] [[PARAMETER], ...]"
|
||||
echo
|
||||
@ -176,8 +184,9 @@ while [ "$1" != "" ]; do
|
||||
echo " -rdh, --redishost redis ip"
|
||||
echo " -rdp, --redisport redis port (default 6379)"
|
||||
echo " -rbh, --rabbitmqhost rabbitmq ip"
|
||||
echo " -rbp, --rabbitmqport rabbitmq port"
|
||||
echo " -rbu, --rabbitmquser rabbitmq user"
|
||||
echo " -rbp, --rabbitmqpassword rabbitmq password"
|
||||
echo " -rbpw, --rabbitmqpassword rabbitmq password"
|
||||
echo " -mysqlh, --mysqlhost mysql server host"
|
||||
echo " -mysqld, --mysqldatabase ${PRODUCT} database name"
|
||||
echo " -mysqlu, --mysqluser ${PRODUCT} database user"
|
||||
@ -216,7 +225,7 @@ install_json() {
|
||||
#Creating a user-defined .json
|
||||
if [ ! -e $USER_CONF ]; then
|
||||
echo "{}" >> $USER_CONF
|
||||
chown onlyoffice:onlyoffice $USER_CONF
|
||||
chown ${PACKAGE_SYSNAME}:${PACKAGE_SYSNAME} $USER_CONF
|
||||
|
||||
set_core_machinekey
|
||||
$JSON_USERCONF "this.core={'base-domain': \"$APP_HOST\", 'machinekey': \"$CORE_MACHINEKEY\" }" >/dev/null 2>&1
|
||||
@ -224,14 +233,16 @@ install_json() {
|
||||
}
|
||||
|
||||
restart_services() {
|
||||
echo -n "Restarting services... "
|
||||
|
||||
sed -e "s/ENVIRONMENT=.*/ENVIRONMENT=$ENVIRONMENT/" -e "s/environment=.*/environment=$ENVIRONMENT/" -i $SYSTEMD_DIR/${PRODUCT}*.service >/dev/null 2>&1
|
||||
sed -e "s/ENVIRONMENT=.*/ENVIRONMENT=$ENVIRONMENT/" -e "s/environment=.*/environment=$ENVIRONMENT/" -i /lib/systemd/system/${PRODUCT}*.service >/dev/null 2>&1
|
||||
systemctl daemon-reload
|
||||
|
||||
systemctl start ${PRODUCT}-migration-runner || true
|
||||
echo -n "Updating database... "
|
||||
systemctl start ${PRODUCT}-migration-runner >/dev/null 2>&1 || true
|
||||
sleep 15
|
||||
echo "OK"
|
||||
|
||||
for SVC in api urlshortener socket studio-notify notify \
|
||||
echo -n "Restarting services... "
|
||||
for SVC in login api urlshortener socket studio-notify notify \
|
||||
people-server files files-services studio backup telegram-service \
|
||||
webhooks-service clear-events backup-background migration ssoauth doceditor
|
||||
do
|
||||
@ -412,7 +423,7 @@ setup_nginx(){
|
||||
|
||||
# Remove default nginx website
|
||||
rm -f $NGINX_CONF/default.conf >/dev/null 2>&1 || rm -f $NGINX_DIR/sites-enabled/default >/dev/null 2>&1
|
||||
sed -i "s/listen.*;/listen $APP_PORT;/" $NGINX_CONF/onlyoffice.conf
|
||||
sed -i "s/listen.*;/listen $APP_PORT;/" $NGINX_CONF/${PACKAGE_SYSNAME}.conf
|
||||
|
||||
if [ "$DIST" = "RedHat" ]; then
|
||||
# Remove default nginx settings
|
||||
@ -427,12 +438,26 @@ setup_nginx(){
|
||||
if $(getenforce) >/dev/null 2>&1; then
|
||||
case $(getenforce) in
|
||||
enforcing|permissive)
|
||||
PORTS+=('8081') #Storybook
|
||||
PORTS+=("$DOCUMENT_SERVER_PORT")
|
||||
PORTS+=('5001') #ASC.Web.Studio
|
||||
PORTS+=('5002') #ASC.People
|
||||
PORTS+=('5008') #ASC.Files/client
|
||||
PORTS+=('5000') #ASC.Web.Api
|
||||
PORTS+=('5001') #client
|
||||
PORTS+=('5003') #ASC.Web.Studio
|
||||
PORTS+=('5004') #ASC.People
|
||||
PORTS+=('5005') #ASC.Notify
|
||||
PORTS+=('5006') #ASC.Studio.Notify
|
||||
PORTS+=('5007') #ASC.Files/server
|
||||
PORTS+=('5009') #ASC.Files/service
|
||||
PORTS+=('5011') #ASC.Login
|
||||
PORTS+=('5012') #ASC.Data.Backup
|
||||
PORTS+=('5013') #ASC.Files/editor
|
||||
PORTS+=('5018') #ASC.Migration
|
||||
PORTS+=('5027') #ASC.ClearEvents
|
||||
PORTS+=('5028') #ASC.Socket.IO
|
||||
PORTS+=('5029') #ASC.UrlShortener
|
||||
PORTS+=('5031') #ASC.Webhooks.Service
|
||||
PORTS+=('5032') #ASC.Data.Backup.BackgroundTasks
|
||||
PORTS+=('8081') #Storybook
|
||||
PORTS+=('9834') #ASC.SsoAuth
|
||||
PORTS+=('51702') #ASC.TelegramService
|
||||
setsebool -P httpd_can_network_connect on
|
||||
;;
|
||||
disabled)
|
||||
@ -448,7 +473,6 @@ setup_nginx(){
|
||||
fi
|
||||
fi
|
||||
chown nginx:nginx /etc/nginx/* -R
|
||||
sudo sed -e 's/#//' -i $NGINX_CONF/onlyoffice.conf
|
||||
systemctl enable nginx >/dev/null 2>&1
|
||||
systemctl restart nginx
|
||||
echo "OK"
|
||||
@ -456,13 +480,13 @@ setup_nginx(){
|
||||
|
||||
setup_docs() {
|
||||
echo -n "Configuring Docs... "
|
||||
local DS_CONF="/etc/onlyoffice/documentserver/local.json"
|
||||
local DS_CONF="/etc/${PACKAGE_SYSNAME}/documentserver/local.json"
|
||||
local JSON_DSCONF="$JSON $DS_CONF -e"
|
||||
|
||||
#Changing the Docs port in nginx conf
|
||||
sed -i "s/0.0.0.0:.*;/0.0.0.0:$DOCUMENT_SERVER_PORT;/" $NGINX_CONF/ds.conf
|
||||
sed -i "s/]:.*;/]:$DOCUMENT_SERVER_PORT default_server;/g" $NGINX_CONF/ds.conf
|
||||
sed "0,/proxy_pass .*;/{s/proxy_pass .*;/proxy_pass http:\/\/${DOCUMENT_SERVER_HOST}:${DOCUMENT_SERVER_PORT};/}" -i $NGINX_CONF/onlyoffice.conf
|
||||
sed "0,/proxy_pass .*;/{s/proxy_pass .*;/proxy_pass http:\/\/${DOCUMENT_SERVER_HOST}:${DOCUMENT_SERVER_PORT};/}" -i $NGINX_CONF/${PACKAGE_SYSNAME}.conf
|
||||
|
||||
#Enable JWT validation for Docs
|
||||
$JSON_DSCONF "this.services.CoAuthoring.token.enable.browser='true'" >/dev/null 2>&1
|
||||
@ -475,7 +499,7 @@ setup_docs() {
|
||||
#Save Docs address and JWT in .json
|
||||
$JSON_USERCONF "this.files={'docservice': {\
|
||||
'secret': {'value': \"$DOCUMENT_SERVER_JWT_SECRET\",'header': \"$DOCUMENT_SERVER_JWT_HEADER\"}, \
|
||||
'url': {'public': '/ds-vpath/','internal': \"http://${DOCUMENT_SERVER_HOST}:${DOCUMENT_SERVER_PORT}\",'portal': \"http://$APP_HOST:$APP_PORT\"}}}" >/dev/null 2>&1
|
||||
'url': {'public': \"http://${DOCUMENT_SERVER_HOST}:${DOCUMENT_SERVER_PORT}\", 'internal': \"http://${DOCUMENT_SERVER_HOST}:${DOCUMENT_SERVER_PORT}\",'portal': \"http://$APP_HOST:$APP_PORT\"}}}" >/dev/null 2>&1
|
||||
|
||||
#Docs Database Migration
|
||||
local DOCUMENT_SERVER_DB_HOST=$(json -f ${DS_CONF} services.CoAuthoring.sql.dbHost)
|
||||
@ -485,7 +509,7 @@ setup_docs() {
|
||||
local DOCUMENT_SERVER_DB_PASSWORD=$(json -f ${DS_CONF} services.CoAuthoring.sql.dbPass)
|
||||
local DS_CONNECTION_STRING="Host=${DOCUMENT_SERVER_DB_HOST};Port=${DOCUMENT_SERVER_DB_PORT};Database=${DOCUMENT_SERVER_DB_NAME};Username=${DOCUMENT_SERVER_DB_USERNAME};Password=${DOCUMENT_SERVER_DB_PASSWORD};"
|
||||
|
||||
sed "s/Host=.*/$DS_CONNECTION_STRING;\"/g" -i $PRODUCT_DIR/services/ASC.Migration.Runner/appsettings.json
|
||||
sed "s/Host=.*/$DS_CONNECTION_STRING\"/g" -i $PRODUCT_DIR/services/ASC.Migration.Runner/appsettings.json
|
||||
|
||||
echo "OK"
|
||||
}
|
||||
@ -576,7 +600,7 @@ setup_redis() {
|
||||
setup_rabbitmq() {
|
||||
echo -n "Configuring rabbitmq... "
|
||||
|
||||
$JSON $APP_DIR/rabbitmq.json -e "this.RabbitMQ={'Hostname': \"${RABBITMQ_HOST}\",'UserName': \"${RABBITMQ_USER}\",'Password': \"${RABBITMQ_PASSWORD}\" }" >/dev/null 2>&1
|
||||
$JSON $APP_DIR/rabbitmq.json -e "this.RabbitMQ={'Hostname': \"${RABBITMQ_HOST}\",'UserName': \"${RABBITMQ_USER}\",'Password': \"${RABBITMQ_PASSWORD}\",'Port': \"${RABBITMQ_PORT}\",'VirtualHost': \"/\" }" >/dev/null 2>&1
|
||||
|
||||
systemctl enable rabbitmq-server >/dev/null 2>&1
|
||||
systemctl restart rabbitmq-server
|
||||
@ -607,7 +631,7 @@ if $PACKAGE_MANAGER nginx >/dev/null 2>&1; then
|
||||
setup_nginx
|
||||
fi
|
||||
|
||||
if $PACKAGE_MANAGER onlyoffice-documentserver >/dev/null 2>&1 || $PACKAGE_MANAGER onlyoffice-documentserver-de >/dev/null 2>&1 || $PACKAGE_MANAGER onlyoffice-documentserver-ee >/dev/null 2>&1; then
|
||||
if $PACKAGE_MANAGER ${PACKAGE_SYSNAME}-documentserver >/dev/null 2>&1 || $PACKAGE_MANAGER ${PACKAGE_SYSNAME}-documentserver-de >/dev/null 2>&1 || $PACKAGE_MANAGER ${PACKAGE_SYSNAME}-documentserver-ee >/dev/null 2>&1; then
|
||||
setup_docs
|
||||
fi
|
||||
|
||||
|
@ -61,6 +61,7 @@ SERVICE_NAME=(
|
||||
migration
|
||||
doceditor
|
||||
migration-runner
|
||||
login
|
||||
)
|
||||
|
||||
reassign_values (){
|
||||
@ -154,24 +155,32 @@ reassign_values (){
|
||||
WORK_DIR="${BASE_DIR}/services/ASC.Migration.Runner/"
|
||||
EXEC_FILE="ASC.Migration.Runner.dll"
|
||||
;;
|
||||
login )
|
||||
SERVICE_PORT="5011"
|
||||
WORK_DIR="${BASE_DIR}/products/ASC.Login/login/"
|
||||
EXEC_FILE="server.js"
|
||||
;;
|
||||
esac
|
||||
SERVICE_NAME="$1"
|
||||
if [[ "${EXEC_FILE}" == *".js" ]]; then
|
||||
SERVICE_TYPE="simple"
|
||||
SERVICE_TYPE="simple"
|
||||
RESTART="always"
|
||||
EXEC_START="${NODE_RUN} ${WORK_DIR}${EXEC_FILE} --app.port=${SERVICE_PORT} --app.appsettings=${PATH_TO_CONF} --app.environment=${ENVIRONMENT}"
|
||||
elif [[ "${SERVICE_NAME}" = "migration-runner" ]]; then
|
||||
SERVICE_TYPE="notify"
|
||||
SERVICE_TYPE="simple"
|
||||
RESTART="no"
|
||||
EXEC_START="${DOTNET_RUN} ${WORK_DIR}${EXEC_FILE}"
|
||||
else
|
||||
SERVICE_TYPE="notify"
|
||||
SERVICE_TYPE="notify"
|
||||
RESTART="always"
|
||||
EXEC_START="${DOTNET_RUN} ${WORK_DIR}${EXEC_FILE} --urls=${APP_URLS}:${SERVICE_PORT} --pathToConf=${PATH_TO_CONF} \
|
||||
--'\$STORAGE_ROOT'=${STORAGE_ROOT} --log:dir=${LOG_DIR} --log:name=${SERVICE_NAME}${CORE}${ENVIRONMENT}"
|
||||
fi
|
||||
}
|
||||
|
||||
write_to_file () {
|
||||
sed -i -e 's#${SERVICE_NAME}#'$SERVICE_NAME'#g' -e 's#${WORK_DIR}#'$WORK_DIR'#g' -e \
|
||||
"s#\${EXEC_START}#$EXEC_START#g" -e "s#\${SERVICE_TYPE}#$SERVICE_TYPE#g" $BUILD_PATH/${PRODUCT}-${SERVICE_NAME[$i]}.service
|
||||
sed -i -e 's#${SERVICE_NAME}#'$SERVICE_NAME'#g' -e 's#${WORK_DIR}#'$WORK_DIR'#g' -e "s#\${RESTART}#$RESTART#g" \
|
||||
-e "s#\${EXEC_START}#$EXEC_START#g" -e "s#\${SERVICE_TYPE}#$SERVICE_TYPE#g" $BUILD_PATH/${PRODUCT}-${SERVICE_NAME[$i]}.service
|
||||
}
|
||||
|
||||
mkdir -p $BUILD_PATH
|
||||
|
@ -10,7 +10,7 @@ WorkingDirectory=${WORK_DIR}
|
||||
ExecStart=${EXEC_START}
|
||||
TimeoutSec=600
|
||||
|
||||
Restart=always
|
||||
Restart=${RESTART}
|
||||
PrivateTmp=false
|
||||
|
||||
[Install]
|
||||
|
@ -17,6 +17,7 @@ db_input medium {{product}}/redis-port || true
|
||||
|
||||
db_input medium {{product}}/rabbitmq-host || true
|
||||
db_input medium {{product}}/rabbitmq-user || true
|
||||
db_input medium {{product}}/rabbitmq-port || true
|
||||
db_input medium {{product}}/rabbitmq-password || true
|
||||
|
||||
db_input medium {{product}}/db-host || true
|
||||
|
@ -16,6 +16,7 @@ Depends: {{product}}-api (= {{package_header_tag_version}}),
|
||||
{{product}}-doceditor(= {{package_header_tag_version}}),
|
||||
{{product}}-files (= {{package_header_tag_version}}),
|
||||
{{product}}-files-services (= {{package_header_tag_version}}),
|
||||
{{product}}-login (= {{package_header_tag_version}}),
|
||||
{{product}}-migration (= {{package_header_tag_version}}),
|
||||
{{product}}-migration-runner (= {{package_header_tag_version}}),
|
||||
{{product}}-notify (= {{package_header_tag_version}}),
|
||||
@ -192,3 +193,11 @@ Depends: {{product}}-common (= {{package_header_tag_version}}),
|
||||
${misc:Depends},
|
||||
${shlibs:Depends}
|
||||
Description: Description
|
||||
|
||||
Package: {{product}}-login
|
||||
Architecture: any
|
||||
Depends: {{product}}-common (= {{package_header_tag_version}}),
|
||||
nodejs (>=14),
|
||||
${misc:Depends},
|
||||
${shlibs:Depends}
|
||||
Description: Description
|
||||
|
@ -31,6 +31,8 @@ case "$1" in
|
||||
RABBITMQ_HOST="$RET"
|
||||
db_get {{product}}/rabbitmq-user || true
|
||||
RABBITMQ_USER="$RET"
|
||||
db_get {{product}}/rabbitmq-port || true
|
||||
RABBITMQ_PORT="$RET"
|
||||
db_get {{product}}/rabbitmq-password || true
|
||||
RABBITMQ_PASSWORD="$RET"
|
||||
|
||||
@ -46,8 +48,8 @@ case "$1" in
|
||||
db_get onlyoffice/ds-port || true
|
||||
DOCUMENT_SERVER_PORT="$RET"
|
||||
|
||||
bash /usr/bin/{{product}}-configuration.sh -e $ENVIRONMENT -mysqlh $DB_HOST -mysqld $DB_NAME -mysqlu $DB_USER -mysqlp $DB_PWD -ash $APP_HOST -asp $APP_PORT \
|
||||
-dsh $DOCUMENT_SERVER_HOST -dsp $DOCUMENT_SERVER_PORT -rdh $REDIS_HOST -rdp $REDIS_PORT -rbh $RABBITMQ_HOST -rbu $RABBITMQ_USER -rbp $RABBITMQ_PASSWORD -ess $ELK_SHEME -esh $ELK_HOST -esp $ELK_PORT
|
||||
bash /usr/bin/{{product}}-configuration.sh -e $ENVIRONMENT -mysqlh $DB_HOST -mysqld $DB_NAME -mysqlu $DB_USER -mysqlp $DB_PWD -ash $APP_HOST -asp $APP_PORT -dsh $DOCUMENT_SERVER_HOST \
|
||||
-dsp $DOCUMENT_SERVER_PORT -rdh $REDIS_HOST -rdp $REDIS_PORT -rbh $RABBITMQ_HOST -rbp $RABBITMQ_PORT -rbu $RABBITMQ_USER -rbpw $RABBITMQ_PASSWORD -ess $ELK_SHEME -esh $ELK_HOST -esp $ELK_PORT
|
||||
;;
|
||||
|
||||
abort-upgrade|abort-remove|abort-deconfigure)
|
||||
|
1
build/install/deb/debian/product-login.install
Normal file
1
build/install/deb/debian/product-login.install
Normal file
@ -0,0 +1 @@
|
||||
../../../build/deploy/login/* var/www/{{product}}/products/ASC.Login/login
|
@ -3,4 +3,3 @@
|
||||
../../../config/nginx/includes/onlyoffice*.conf etc/nginx/includes
|
||||
../../../build/deploy/public/* var/www/{{product}}/public
|
||||
../../../build/deploy/client/* var/www/{{product}}/client
|
||||
../../../build/deploy/login/* var/www/{{product}}/login
|
||||
|
@ -32,6 +32,7 @@ override_dh_auto_build:
|
||||
bash build-backend.sh -sp ${SRC_PATH}; \
|
||||
bash publish-backend.sh -sp ${SRC_PATH}
|
||||
|
||||
rm ${SRC_PATH}/config/nginx/onlyoffice-login.conf
|
||||
sed -i "s@var/www@var/www/${PRODUCT}@g" ${SRC_PATH}/config/nginx/*.conf
|
||||
sed -i "s@var/www@var/www/${PRODUCT}@g" ${SRC_PATH}/config/nginx/includes/*.conf
|
||||
|
||||
|
@ -63,6 +63,11 @@ Type: string
|
||||
Default: localhost
|
||||
Description: RabbitMQ host:
|
||||
|
||||
Template: {{product}}/rabbitmq-port
|
||||
Type: string
|
||||
Default: 5672
|
||||
Description: RabbitMQ port:
|
||||
|
||||
Template: {{product}}/rabbitmq-user
|
||||
Type: string
|
||||
Default: guest
|
||||
|
@ -2,7 +2,7 @@ version: "3.8"
|
||||
|
||||
services:
|
||||
onlyoffice-migration-runner:
|
||||
image: "${REPO}/${STATUS}${DOCKER_IMAGE_PREFIX}-migration-runner:${DOCKER_TAG}"
|
||||
image: "${REPO}/${DOCKER_IMAGE_PREFIX}-migration-runner:${DOCKER_TAG}"
|
||||
container_name: ${MIGRATION_RUNNER_HOST}
|
||||
restart: "no"
|
||||
environment:
|
||||
|
@ -7,7 +7,7 @@ bash build/install/common/build-backend.sh --srcpath %{_builddir}/%{sourcename}
|
||||
bash build/install/common/publish-backend.sh --srcpath %{_builddir}/%{sourcename}
|
||||
rename -f -v "s/product([^\/]*)$/%{product}\$1/g" build/install/common/*.sh
|
||||
|
||||
sed -i "s@var/www@var/www/%{product}@g" config/nginx/*.conf && sed -i "s@var/www@var/www/%{product}@g" config/nginx/includes/*.conf
|
||||
sed -i "s@var/www@var/www/%{product}@g" config/nginx/*.conf && sed -i "s@var/www@var/www/%{product}@g" config/nginx/includes/*.conf && rm config/nginx/onlyoffice-login.conf
|
||||
|
||||
json -I -f %{_builddir}/%{sourcename}/config/appsettings.services.json -e "this.logPath=\"/var/log/onlyoffice/%{product}\"" \
|
||||
-e "this.urlshortener={ 'path': '../ASC.UrlShortener/index.js' }" -e "this.thumb={ 'path': '../ASC.Thumbnails/' }" -e "this.socket={ 'path': '../ASC.Socket.IO/' }" \
|
||||
|
@ -74,7 +74,6 @@
|
||||
%{_sysconfdir}/nginx/conf.d/*
|
||||
%{buildpath}/public/
|
||||
%{buildpath}/client/
|
||||
%{buildpath}/login/
|
||||
|
||||
%files studio-notify
|
||||
%defattr(-, onlyoffice, onlyoffice, -)
|
||||
@ -189,3 +188,10 @@
|
||||
%{buildpath}/services/ASC.Migration.Runner/
|
||||
/usr/lib/systemd/system/%{product}-migration-runner.service
|
||||
%dir %{buildpath}/services/
|
||||
|
||||
%files login
|
||||
%defattr(-, onlyoffice, onlyoffice, -)
|
||||
%{buildpath}/products/ASC.Login/login
|
||||
/usr/lib/systemd/system/%{product}-login.service
|
||||
%dir %{buildpath}/products/
|
||||
%dir %{buildpath}/products/ASC.Login/
|
||||
|
@ -29,13 +29,13 @@ mkdir -p "%{buildroot}%{buildpath}/studio/ASC.Web.Api/"
|
||||
mkdir -p "%{buildroot}%{buildpath}/studio/ASC.Web.Studio/"
|
||||
mkdir -p "%{buildroot}%{buildpath}/public/"
|
||||
mkdir -p "%{buildroot}%{buildpath}/client/"
|
||||
mkdir -p "%{buildroot}%{buildpath}/login/"
|
||||
mkdir -p "%{buildroot}%{buildpath}/products/ASC.Login/login/"
|
||||
mkdir -p "%{buildroot}/usr/lib/systemd/system/"
|
||||
cp -rf %{_builddir}/%{sourcename}/ASC.Migration.Runner/service/* "%{buildroot}%{buildpath}/services/ASC.Migration.Runner/"
|
||||
cp -rf %{_builddir}/%{sourcename}/build/deploy/editor/* "%{buildroot}%{buildpath}/products/ASC.Files/editor/"
|
||||
cp -rf %{_builddir}/%{sourcename}/build/deploy/public/* "%{buildroot}%{buildpath}/public/"
|
||||
cp -rf %{_builddir}/%{sourcename}/build/deploy/client/* "%{buildroot}%{buildpath}/client/"
|
||||
cp -rf %{_builddir}/%{sourcename}/build/deploy/login/* "%{buildroot}%{buildpath}/login/"
|
||||
cp -rf %{_builddir}/%{sourcename}/build/deploy/login/* "%{buildroot}%{buildpath}/products/ASC.Login/login/"
|
||||
cp -rf %{_builddir}/%{sourcename}/build/install/RadicalePlugins/* "%{buildroot}%{buildpath}/Tools/radicale/plugins/"
|
||||
cp -rf %{_builddir}/%{sourcename}/build/install/common/%{product}-configuration.sh "%{buildroot}%{_bindir}/"
|
||||
cp -rf %{_builddir}/%{sourcename}/build/install/common/systemd/modules/* "%{buildroot}/usr/lib/systemd/system/"
|
||||
|
@ -163,3 +163,11 @@ Requires: %name-common = %version-%release
|
||||
Requires: dotnet-sdk-6.0
|
||||
AutoReqProv: no
|
||||
%description migration-runner
|
||||
|
||||
%package login
|
||||
Summary: login
|
||||
Group: Applications/Internet
|
||||
Requires: %name-common = %version-%release
|
||||
Requires: nodejs >= 14.0
|
||||
AutoReqProv: no
|
||||
%description login
|
||||
|
@ -30,6 +30,7 @@ Requires: %name-clear-events = %version-%release
|
||||
Requires: %name-doceditor = %version-%release
|
||||
Requires: %name-files = %version-%release
|
||||
Requires: %name-files-services = %version-%release
|
||||
Requires: %name-login = %version-%release
|
||||
Requires: %name-migration = %version-%release
|
||||
Requires: %name-migration-runner = %version-%release
|
||||
Requires: %name-notify = %version-%release
|
||||
|
@ -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
|
||||
|
@ -33,53 +33,6 @@ http {
|
||||
|
||||
#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>
|
10
build/run/macos/api.sh
Executable file
10
build/run/macos/api.sh
Executable file
@ -0,0 +1,10 @@
|
||||
#!/bin/bash
|
||||
|
||||
rd="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
|
||||
echo "Run script directory:" $rd
|
||||
|
||||
dir=$(builtin cd $rd/../../../; pwd)
|
||||
echo "Root directory:" $dir
|
||||
|
||||
# Web API Root
|
||||
dotnet $dir/web/ASC.Web.Api/bin/Debug/ASC.Web.Api.dll urls=http://0.0.0.0:5000 $STORAGE_ROOT=$dir/Data log:dir=$dir/Logs log:name=api pathToConf=$dir/config core:products:folder=$dir/products
|
10
build/run/macos/backend.sh
Executable file
10
build/run/macos/backend.sh
Executable file
@ -0,0 +1,10 @@
|
||||
#!/bin/bash
|
||||
|
||||
dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
|
||||
echo "Root directory:" $dir
|
||||
|
||||
$dir/api.sh &
|
||||
$dir/studio.sh &
|
||||
$dir/people.sh &
|
||||
$dir/files.sh &
|
||||
$dir/files.service.sh &
|
20
build/run/macos/docker-tools/docker-compose.yml
Normal file
20
build/run/macos/docker-tools/docker-compose.yml
Normal file
@ -0,0 +1,20 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
rhonda_rabbitmq:
|
||||
image: rabbitmq:3-management-alpine
|
||||
container_name: "rabbitmq"
|
||||
ports:
|
||||
- 5672:5672
|
||||
- 15672:15672
|
||||
volumes:
|
||||
- ~/.container-data/rabbitmq/data/:/var/lib/rabbitmq/
|
||||
- ~/.container-data/rabbitmq/log/:/var/log/rabbitmq
|
||||
redis:
|
||||
image: redis:latest
|
||||
volumes:
|
||||
- ~/.container-data/redis/log/:/var/log/redis
|
||||
ports:
|
||||
- 6379:6379
|
||||
volumes:
|
||||
container-data:
|
11
build/run/macos/files.service.sh
Executable file
11
build/run/macos/files.service.sh
Executable file
@ -0,0 +1,11 @@
|
||||
#!/bin/bash
|
||||
|
||||
rd="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
|
||||
echo "Run script directory:" $rd
|
||||
|
||||
dir=$(builtin cd $rd/../../../; pwd)
|
||||
echo "Root directory:" $dir
|
||||
|
||||
# Web API Files.Service
|
||||
# set servicepath=%cd%\products\ASC.Files\Service\bin\Debug\ASC.Files.Service.exe urls=http://0.0.0.0:5009 $STORAGE_ROOT=%cd%\Data log:dir=%cd%\Logs log:name=files.service pathToConf=%cd%\config core:products:folder=%cd%\products
|
||||
dotnet $dir/products/ASC.Files/Service/bin/Debug/ASC.Files.Service.dll urls=http://0.0.0.0:5009 $STORAGE_ROOT=$dir/Data log:dir=$dir/Logs log:name=files.service pathToConf=$dir/config core:products:folder=$dir/products
|
11
build/run/macos/files.sh
Executable file
11
build/run/macos/files.sh
Executable file
@ -0,0 +1,11 @@
|
||||
#!/bin/bash
|
||||
|
||||
rd="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
|
||||
echo "Run script directory:" $rd
|
||||
|
||||
dir=$(builtin cd $rd/../../../; pwd)
|
||||
echo "Root directory:" $dir
|
||||
|
||||
# Web API Files
|
||||
# set servicepath=%cd%\products\ASC.Files\Server\bin\Debug\ASC.Files.exe urls=http://0.0.0.0:5007 $STORAGE_ROOT=%cd%\Data log:dir=%cd%\Logs log:name=files pathToConf=%cd%\config core:products:folder=%cd%\products
|
||||
dotnet $dir/products/ASC.Files/Server/bin/Debug/ASC.Files.dll urls=http://0.0.0.0:5007 $STORAGE_ROOT=$dir/Data log:dir=$dir/Logs log:name=files pathToConf=$dir/config core:products:folder=$dir/products
|
11
build/run/macos/people.sh
Executable file
11
build/run/macos/people.sh
Executable file
@ -0,0 +1,11 @@
|
||||
#!/bin/bash
|
||||
|
||||
rd="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
|
||||
echo "Run script directory:" $rd
|
||||
|
||||
dir=$(builtin cd $rd/../../../; pwd)
|
||||
echo "Root directory:" $dir
|
||||
|
||||
# Web API People
|
||||
# set servicepath=%cd%\products\ASC.People\Server\bin\Debug\ASC.People.exe urls=http://0.0.0.0:5004 $STORAGE_ROOT=%cd%\Data log:dir=%cd%\Logs log:name=people pathToConf=%cd%\config core:products:folder=%cd%\products
|
||||
dotnet $dir/products/ASC.People/Server/bin/Debug/ASC.People.dll urls=http://0.0.0.0:5004 $STORAGE_ROOT=$dir/Data log:dir=$dir/Logs log:name=people pathToConf=$dir/config core:products:folder=$dir/products
|
10
build/run/macos/socket.sh
Executable file
10
build/run/macos/socket.sh
Executable file
@ -0,0 +1,10 @@
|
||||
#!/bin/bash
|
||||
|
||||
rd="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
|
||||
echo "Run script directory:" $rd
|
||||
|
||||
dir=$(builtin cd $rd/../../../; pwd)
|
||||
echo "Root directory:" $dir
|
||||
|
||||
# Web Socket IO
|
||||
node $dir/common/ASC.Socket.IO/server.js --logPath=$dir/Logs
|
11
build/run/macos/studio.sh
Executable file
11
build/run/macos/studio.sh
Executable file
@ -0,0 +1,11 @@
|
||||
#!/bin/bash
|
||||
|
||||
rd="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
|
||||
echo "Run script directory:" $rd
|
||||
|
||||
dir=$(builtin cd $rd/../../../; pwd)
|
||||
echo "Root directory:" $dir
|
||||
|
||||
# Web Studio
|
||||
# set servicepath=%cd%\web\ASC.Web.Studio\bin\Debug\ASC.Web.Studio.exe urls=http://0.0.0.0:5003 $STORAGE_ROOT=%cd%\Data log:dir=%cd%\Logs log:name=studio pathToConf=%cd%\config core:products:folder=%cd%\products
|
||||
dotnet $dir/web/ASC.Web.Studio/bin/Debug/ASC.Web.Studio.dll urls=http://0.0.0.0:5003 $STORAGE_ROOT=$dir/Data log:dir=$dir/Logs log:name=studio pathToConf=$dir/config core:products:folder=$dir/products
|
16
build/runMigrations.sh
Normal file
16
build/runMigrations.sh
Normal file
@ -0,0 +1,16 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "MIGRATIONS"
|
||||
echo off
|
||||
|
||||
rd="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
|
||||
echo "Run script directory:" $rd
|
||||
|
||||
dir=$(builtin cd $rd/../; pwd)
|
||||
echo "Root directory:" $dir
|
||||
|
||||
dotnet build $dir/asc.web.slnf
|
||||
dotnet build $dir/ASC.Migrations.sln
|
||||
|
||||
pushd $dir/common/Tools/ASC.Migration.Runner/bin/Debug/net6.0
|
||||
dotnet ASC.Migration.Runner.dll
|
@ -13,7 +13,7 @@ $CommandName = "$($args[0])";
|
||||
#Write-Output "Starting $($CommandName) services at time: $(Get-Date -Format HH:mm:ss)"
|
||||
#Write-Output ""
|
||||
|
||||
Get-ChildItem -Path $WorkDir | ForEach-Object -ThrottleLimit 20 -Parallel {
|
||||
Get-ChildItem -Path $WorkDir -File | ForEach-Object -ThrottleLimit 20 -Parallel {
|
||||
$ServiceName = "Onlyoffice$([System.IO.Path]::GetFileNameWithoutExtension($_))";
|
||||
|
||||
switch ( $Using:CommandName )
|
||||
|
27
packages/client/public/images/empty_screen_personal.svg
Normal file
27
packages/client/public/images/empty_screen_personal.svg
Normal file
@ -0,0 +1,27 @@
|
||||
<svg width="100" height="100" viewBox="0 0 100 100" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M17 55.4999H17.5V54.9999V31V30.5H17H11C9.04108 30.5 7.41455 31.3808 6.28494 32.5842C5.16343 33.7789 4.5 35.3257 4.5 36.7152V54.9999V55.4999H5H17Z" fill="#D9F4FF" stroke="#333333"/>
|
||||
<path d="M81 30.5H80.5V31V46.9999V47.4999H81H93H93.5V46.9999V36.2096C93.5 32.6762 90.5593 30.5 87.6667 30.5H81Z" fill="#D9F4FF" stroke="#333333"/>
|
||||
<path d="M74.6665 2.5H75.1665V3V56.0001V56.5001H74.6665H11H10.5V56.0001V15.3678V15.1588L10.6488 15.0119L23.1794 2.64414L23.3254 2.5H23.5306H74.6665Z" fill="white" stroke="#333333"/>
|
||||
<path d="M22.6464 2.64645C22.7894 2.50345 23.0045 2.46067 23.1913 2.53806C23.3782 2.61545 23.5 2.79777 23.5 3V15C23.5 15.2761 23.2761 15.5 23 15.5H11C10.7978 15.5 10.6155 15.3782 10.5381 15.1913C10.4607 15.0045 10.5034 14.7894 10.6464 14.6464L22.6464 2.64645Z" fill="url(#paint0_linear_30718_19464)" stroke="#333333" stroke-linejoin="round"/>
|
||||
<path d="M87 12.5H87.5V13V67V67.5H87H23H22.5V67V25.6011V25.3941L22.6464 25.2476L35.2426 12.6465L35.3891 12.5H35.5962H87Z" fill="white" stroke="#333333"/>
|
||||
<path d="M34.6464 12.6464C34.7894 12.5034 35.0045 12.4607 35.1913 12.5381C35.3782 12.6155 35.5 12.7978 35.5 13V25C35.5 25.2761 35.2761 25.5 35 25.5H23C22.7978 25.5 22.6155 25.3782 22.5381 25.1913C22.4607 25.0045 22.5034 24.7894 22.6464 24.6464L34.6464 12.6464Z" fill="#D9F4FF" stroke="#333333" stroke-linejoin="round"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M79.498 32.999C79.7742 32.999 79.998 33.2229 79.998 33.499C79.998 33.7752 79.7742 33.999 79.498 33.999H41.2402C40.9641 33.999 40.7402 33.7752 40.7402 33.499C40.7402 33.2229 40.9641 32.999 41.2402 32.999H79.498ZM78.1556 48.7217H79.1622C79.4383 48.7217 79.6622 48.4978 79.6622 48.2217C79.6622 47.9455 79.4383 47.7217 79.1622 47.7217H78.1556H59.6977H30.5011C30.2249 47.7217 30.0011 47.9455 30.0011 48.2217C30.0011 48.4978 30.2249 48.7217 30.5011 48.7217H59.6977H78.1556ZM79.998 40.8594C79.998 40.5832 79.7742 40.3594 79.498 40.3594H30.5012C30.225 40.3594 30.0012 40.5832 30.0012 40.8594C30.0012 41.1355 30.225 41.3594 30.5012 41.3594H79.498C79.7742 41.3594 79.998 41.1355 79.998 40.8594Z" fill="#333333"/>
|
||||
<path d="M68.2344 24.0689H46.1199" stroke="url(#paint1_linear_30718_19464)" stroke-width="2" stroke-linecap="round"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M46.9087 47.7391L40.8863 54.5228H6.06253C3.18567 54.5228 0.71251 57.1271 1.02706 59.2445L6.63442 93.6567C6.95553 95.7742 9.20001 98 12.0769 98H89.0957C91.9726 98 93.5497 96.1149 93.7135 93.9908L98.9674 49.1927C99.2296 47.8586 97.8927 46 95.5401 46H51.0045C49.4383 46 48.0293 46.5974 46.9087 47.7391Z" fill="url(#paint2_linear_30718_19464)" stroke="#333333"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M42.6665 58.6603V64.0037C42.6665 64.7153 42.3753 65.3595 41.9043 65.8257C41.4334 66.292 40.7827 66.5803 40.0639 66.5803H34.6665V65.7521H40.0639C40.5472 65.7521 40.9934 65.5558 41.3094 65.2368C41.6316 64.9178 41.8299 64.4822 41.8299 64.0037V58.6603H42.6665Z" fill="white"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M65.1468 60.5961V60.4962C65.1468 60.0656 64.9586 59.6662 64.6575 59.3729C64.3501 59.0734 63.9235 58.8737 63.4719 58.8425H42.2807L34.872 66.2188L36.6473 88.3478C36.6912 88.8657 36.9045 89.3338 37.237 89.6645C37.5444 89.9703 37.9647 90.1638 38.4415 90.1638H61.5334C62.0102 90.1638 62.4368 89.9703 62.7504 89.6583C63.0829 89.3275 63.2962 88.8657 63.3276 88.354L65.1468 60.5961ZM66 60.4962L64.1745 88.4039C64.1243 89.1216 63.8232 89.7769 63.3527 90.2511C62.8884 90.7129 62.2548 91 61.5397 91H38.4415C37.7263 91 37.1053 90.7129 36.641 90.2574C36.1706 89.7893 35.8632 89.1278 35.8067 88.4164L34 65.9005L41.9357 58H63.3589L63.5283 58.0062C64.187 58.0499 64.8018 58.337 65.2535 58.7738C65.7051 59.2231 66 59.8222 66 60.4962Z" fill="white"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_30718_19464" x1="25.5853" y1="2.3578" x2="18.8102" y2="13.3145" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#FFC671"/>
|
||||
<stop offset="1" stop-color="#FF6F3D"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_30718_19464" x1="68.2343" y1="24.0298" x2="68.1474" y2="26.0275" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#FF8E3D"/>
|
||||
<stop offset="1" stop-color="#FF6F3D"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint2_linear_30718_19464" x1="25.5748" y1="28.8275" x2="61.5943" y2="83.7024" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#FFC671"/>
|
||||
<stop offset="1" stop-color="#FF6F3D"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
After Width: | Height: | Size: 4.4 KiB |
Before Width: | Height: | Size: 511 B After Width: | Height: | Size: 511 B |
@ -40,7 +40,6 @@
|
||||
"MoveOrCopy": "Köçür və ya Kopyala",
|
||||
"MoveTo": "Yerini dəyiş",
|
||||
"MoveToFolderMessage": "Qovluğu alt qovluğuna köçürə bilməzsiniz ",
|
||||
"MyEmptyContainerDescription": "Yaratdığınız və ya yüklədiyiniz sənədlər 'Sənədlərim' bölməsində saxlanılır. Onları redaktə edə, paylaşa və kollektiv iş edə bilərsiniz.",
|
||||
"New": "Yeni",
|
||||
"NewDocument": "Yeni sənəd",
|
||||
"NewFolder": "Yeni qovluq",
|
||||
|
@ -40,7 +40,6 @@
|
||||
"MoveOrCopy": "Преместване или копиране",
|
||||
"MoveTo": "Премести в",
|
||||
"MoveToFolderMessage": "Не можете да преместите папката в нейната подпапка",
|
||||
"MyEmptyContainerDescription": "Документите, които създавате или качвате, се пазят в раздела 'Моите документи'. Можете да ги редактирате, споделяте или да си сътрудничите за тях с отбора си.",
|
||||
"New": "Нов",
|
||||
"NewDocument": "Нов документ",
|
||||
"NewFolder": "Нова папка",
|
||||
|
@ -40,7 +40,6 @@
|
||||
"MoveOrCopy": "Přesunout nebo kopírovat",
|
||||
"MoveTo": "Přesunout do",
|
||||
"MoveToFolderMessage": "Složku nelze přesunout do podsložky",
|
||||
"MyEmptyContainerDescription": "Dokumenty, které jste vytvořili nebo nahráli, jsou uchovávány v sekci 'Moje dokumenty'. Můžete je upravovat, sdílet a spolupracovat na nich se svým týmem.",
|
||||
"New": "Nový",
|
||||
"NewDocument": "Nový dokument",
|
||||
"NewFolder": "Nová složka",
|
||||
|
@ -40,7 +40,6 @@
|
||||
"MoveOrCopy": "Verschieben oder kopieren",
|
||||
"MoveTo": "Verschieben",
|
||||
"MoveToFolderMessage": "Ordner können nicht in Unterordner verschoben werden",
|
||||
"MyEmptyContainerDescription": "Von Ihnen erstellte oder hochgeladene Dokumente werden im Abschnitt \"Meine Dokumente\" gespeichert. Sie können diese bearbeiten, freigeben und mit Ihrem Team an diesen zusammenarbeiten.",
|
||||
"New": "Erstellen",
|
||||
"NewDocument": "Neues Dokument",
|
||||
"NewFolder": "Neuer Ordner",
|
||||
|
@ -40,7 +40,6 @@
|
||||
"MoveOrCopy": "Μετακίνηση ή αντιγραφή",
|
||||
"MoveTo": "Μετακίνηση σε",
|
||||
"MoveToFolderMessage": "Δεν μπορείτε να μετακινήσετε τον φάκελο στον υποφάκελό του",
|
||||
"MyEmptyContainerDescription": "Τα έγγραφα που δημιουργείτε ή μεταφορτώνετε διατηρούνται στην ενότητα «Τα έγγραφά μου». Μπορείτε να τα επεξεργαστείτε, να τα μοιραστείτε και να συνεργαστείτε με την ομάδα σας.",
|
||||
"New": "Νέο",
|
||||
"NewDocument": "Νέο έγγραφο",
|
||||
"NewFolder": "Νέος φάκελος",
|
||||
|
@ -55,7 +55,6 @@
|
||||
"MoveOrCopy": "Move or copy",
|
||||
"MoveTo": "Move to",
|
||||
"MoveToFolderMessage": "You can't move the folder to its subfolder",
|
||||
"MyEmptyContainerDescription": "Documents you create or upload are kept in 'My Documents' section. You can edit, share, and collaborate on them with your team.",
|
||||
"New": "New",
|
||||
"NewDocument": "New document",
|
||||
"NewFolder": "New folder",
|
||||
@ -67,6 +66,7 @@
|
||||
"NoSubfolders": "No subfolders",
|
||||
"Open": "Open",
|
||||
"OpenLocation": "Open location",
|
||||
"PersonalEmptyContainerDescription": "Drop files here or create new ones.",
|
||||
"Pin": "Pin to top",
|
||||
"Presentation": "Presentation",
|
||||
"Preview": "Preview",
|
||||
|
@ -40,7 +40,6 @@
|
||||
"MoveOrCopy": "Mover o Copiar",
|
||||
"MoveTo": "Mover a",
|
||||
"MoveToFolderMessage": "No se puede mover la carpeta a su subcarpeta",
|
||||
"MyEmptyContainerDescription": "Los documentos que usted crea o sube se guardan en la sección 'Mis Documentos'. Usted puede editar, compartir y colaborar en ellos con su equipo.",
|
||||
"New": "Nuevo",
|
||||
"NewDocument": "Nuevo documento",
|
||||
"NewFolder": "Nueva carpeta",
|
||||
|
@ -40,7 +40,6 @@
|
||||
"MoveOrCopy": "Siirrä tai Kopioi",
|
||||
"MoveTo": "Siirrä",
|
||||
"MoveToFolderMessage": "Et voi siirtää kansiota sen alikansioon",
|
||||
"MyEmptyContainerDescription": "Luomasi tai lataamasi asiakirjat säilytetään Omat asiakirjat-osiossa. Voit muokata, jakaa ja tehdä yhteistyötä tiimisi kanssa niillä.\n",
|
||||
"New": "Uusi",
|
||||
"NewDocument": "Uusi asiakirja",
|
||||
"NewFolder": "Uusi kansio",
|
||||
|
@ -40,7 +40,6 @@
|
||||
"MoveOrCopy": "Déplacer ou copier",
|
||||
"MoveTo": "Déplacer vers",
|
||||
"MoveToFolderMessage": "Vous ne pouvez pas déplacer le dossier vers son sous-dossier",
|
||||
"MyEmptyContainerDescription": "Les documents que vous créez ou téléchargez sont conservés dans la section \"Mes documents\". Vous pouvez les modifier, les partager et collaborer avec votre équipe.",
|
||||
"New": "nouveau",
|
||||
"NewDocument": "Nouveau document",
|
||||
"NewFolder": "Nouveau dossier",
|
||||
|
@ -40,7 +40,6 @@
|
||||
"MoveOrCopy": "Տեղափոխել կամ պատճենել",
|
||||
"MoveTo": "Տեղափոխել",
|
||||
"MoveToFolderMessage": "Դուք չեք կարող պանակը տեղափոխել իր ենթաթղթապանակ",
|
||||
"MyEmptyContainerDescription": "Ձեր ստեղծած կամ վերբեռնած փաստաթղթերը պահվում են'Իմ փաստաթղթերը' բաժնում: Դուք կարող եք խմբագրել, համօգտագործել և գործակցել դրանք Ձեր թիմի հետ:",
|
||||
"New": "Նոր",
|
||||
"NewDocument": "Նոր փաստաթուղթ",
|
||||
"NewFolder": "Նոր պանակ",
|
||||
|
@ -40,7 +40,6 @@
|
||||
"MoveOrCopy": "Sposta o Copia",
|
||||
"MoveTo": "Sposta in",
|
||||
"MoveToFolderMessage": "Non puoi spostare la cartella nella sua sottocartella",
|
||||
"MyEmptyContainerDescription": "I documenti che crei o carichi vengono conservati nella sezione \"Miei Documenti\". Puoi modificarli, condividerli e collaborare con il tuo team.",
|
||||
"New": "Nuovo",
|
||||
"NewDocument": "Nuovo documento",
|
||||
"NewFolder": "Nuova cartella",
|
||||
|
@ -40,7 +40,6 @@
|
||||
"MoveOrCopy": "移動またはコピーする",
|
||||
"MoveTo": "に移動します",
|
||||
"MoveToFolderMessage": "フォルダをそのサブフォルダに移動できません。",
|
||||
"MyEmptyContainerDescription": "作成されたまたはアップロードされたドキュメントは、「マイドキュメント」セクションに保管されます。チームで編集、共有、共同作業ができます。",
|
||||
"New": "新しい",
|
||||
"NewDocument": "新しいドキュメント",
|
||||
"NewFolder": "新しいフォルダ",
|
||||
|
@ -40,7 +40,6 @@
|
||||
"MoveOrCopy": "이동 또는 복사",
|
||||
"MoveTo": "이동 위치",
|
||||
"MoveToFolderMessage": "해당 폴더를 하위 폴더로 이동할 수 없습니다",
|
||||
"MyEmptyContainerDescription": "생성 또는 업로드한 문서는 '내 문서' 섹션에 보관됩니다. 팀원과 함께 문서를 편집, 공유, 공동 작업하세요.",
|
||||
"New": "신규",
|
||||
"NewDocument": "새 문서",
|
||||
"NewFolder": "새 폴더",
|
||||
|
@ -38,7 +38,6 @@
|
||||
"MoveOrCopy": "ຍ້າຍ ຫຼື ສຳເນົາ",
|
||||
"MoveTo": "ຍ້າຍໄປ",
|
||||
"MoveToFolderMessage": "ທ່ານບໍ່ສາມາດຍ້າຍໂຟຣເດີໄປທີ່ໂຟຣເດີຍ່ອຍຂອງມັນ",
|
||||
"MyEmptyContainerDescription": "ເອກະສານທີ່ທ່ານສ້າງ ຫລື ອັບໂຫລດແມ່ນຖືກເກັບຢູ່ໃນສ່ວນ 'ເອກະສານຂອງຂ້ອຍ'. ທ່ານສາມາດແກ້ໄຂ, ແບ່ງປັນ ແລະ ເຮັດວຽກຮ່ວມກັບທີມງານຂອງທ່ານໄດ້.",
|
||||
"New": "ໃໝ່",
|
||||
"NewDocument": "ເອກະສານໃໝ່",
|
||||
"NewFolder": "ແຟ້ມໃໝ່",
|
||||
|
@ -40,7 +40,6 @@
|
||||
"MoveOrCopy": "Pārvietot vai kopēt",
|
||||
"MoveTo": "Pārvietot uz",
|
||||
"MoveToFolderMessage": "Jūs nevarat pārvietot mapi uz tās apakšmapi",
|
||||
"MyEmptyContainerDescription": "Jūsu izveidotie vai augšupielādētie dokumenti tiek glabāti sadaļā Mani dokumenti. Jūs varat tos rediģēt, koplietot un sadarboties ar savu darba grupu.",
|
||||
"New": "Jauns",
|
||||
"NewDocument": "Jauns dokuments",
|
||||
"NewFolder": "Jauna mape",
|
||||
|
@ -40,7 +40,6 @@
|
||||
"MoveOrCopy": "Verplaats of kopieer",
|
||||
"MoveTo": "Verplaats naar",
|
||||
"MoveToFolderMessage": "U kunt de map niet naar zijn submap verplaatsen",
|
||||
"MyEmptyContainerDescription": "Documenten die u maakt of uploadt, worden bewaard in het gedeelte 'Mijn Documenten'. U kunt ze bewerken, delen en er met uw team aan samenwerken.",
|
||||
"New": "Nieuw",
|
||||
"NewDocument": "Nieuw document",
|
||||
"NewFolder": "Nieuwe map",
|
||||
|
@ -40,7 +40,6 @@
|
||||
"MoveOrCopy": "Przenieś lub kopiuj",
|
||||
"MoveTo": "Przenieś do",
|
||||
"MoveToFolderMessage": "Nie można przenieść folderu do jego podfolderu",
|
||||
"MyEmptyContainerDescription": "Tworzone lub wgrywane przez Ciebie dokumenty są przechowywane w sekcji 'Moje dokumenty'. Możesz je edytować, udostępniać i współpracować nad nimi ze swoim zespołem.",
|
||||
"New": "Nowe",
|
||||
"NewDocument": "Nowy dokument",
|
||||
"NewFolder": "Nowy folder",
|
||||
|
@ -40,7 +40,6 @@
|
||||
"MoveOrCopy": "Mover ou copiar",
|
||||
"MoveTo": "Mover para",
|
||||
"MoveToFolderMessage": "Você não pode mover a pasta para sua subpasta",
|
||||
"MyEmptyContainerDescription": "Os documentos que você cria ou carrega são mantidos na seção 'Meus Documentos'. Você pode editar, compartilhar e colaborar neles com sua equipe.",
|
||||
"New": "Novo",
|
||||
"NewDocument": "Novo Documento",
|
||||
"NewFolder": "Nova pasta",
|
||||
|
@ -40,7 +40,6 @@
|
||||
"MoveOrCopy": "Mover ou copiar",
|
||||
"MoveTo": "Mover para",
|
||||
"MoveToFolderMessage": "Não pode mover a pasta para a sua subpasta",
|
||||
"MyEmptyContainerDescription": "Os documentos que cria ou envia são mantidos na secção 'Meus Documentos'. Pode editar, partilhar e colaborar neles com a sua equipa.",
|
||||
"New": "Novo",
|
||||
"NewDocument": "Novo documento",
|
||||
"NewFolder": "Nova pasta",
|
||||
|
@ -40,7 +40,6 @@
|
||||
"MoveOrCopy": "Mutare sau copiere",
|
||||
"MoveTo": "Mutare în",
|
||||
"MoveToFolderMessage": "Nu puteți muta dosarul în subdosarul propriu",
|
||||
"MyEmptyContainerDescription": "Documentele pe care le creați sau încărcați sunt stocate în Documentele mele. Puteți edita, partaja și colaborați asupra documentelor cu echipa dvs.",
|
||||
"New": "Nou",
|
||||
"NewDocument": "Document nou",
|
||||
"NewFolder": "Dosar nou",
|
||||
|
@ -43,7 +43,6 @@
|
||||
"MoveOrCopy": "Переместить или скопировать",
|
||||
"MoveTo": "Переместить",
|
||||
"MoveToFolderMessage": "Нельзя перенести папку в свою дочернюю папку",
|
||||
"MyEmptyContainerDescription": "Документы и файлы изображений, которые вы создаете или загружаете на портал, хранятся здесь, в разделе «Мои документы». Вы можете открывать и редактировать их с помощью редактора портала ONLYOFFICE ™, делиться ими с друзьями или коллегами, организовывать в папки. Перетащите файлы со своего компьютера сюда, чтобы загрузить их на свой портал еще проще.",
|
||||
"New": "Новое",
|
||||
"NewDocument": "Новый документ",
|
||||
"NewFolder": "Новая папка",
|
||||
|
@ -40,7 +40,6 @@
|
||||
"MoveOrCopy": "Presunúť alebo Kopírovať",
|
||||
"MoveTo": "Presunúť do",
|
||||
"MoveToFolderMessage": "Priečinok nemôžete presunúť do jeho podpriečinka",
|
||||
"MyEmptyContainerDescription": "Dokumenty, ktoré vytvoríte alebo nahráte, sa uložia v sekcii „Moje dokumenty“. Môžete ich upravovať, zdieľať a spolupracovať na nich so svojim tímom.",
|
||||
"New": "Nový",
|
||||
"NewDocument": "Nový dokument",
|
||||
"NewFolder": "Nový priečinok",
|
||||
|
@ -40,7 +40,6 @@
|
||||
"MoveOrCopy": "Premakni ali kopiraj",
|
||||
"MoveTo": "Premakni v",
|
||||
"MoveToFolderMessage": "Mape ne morete premakniti v njeno podmapo",
|
||||
"MyEmptyContainerDescription": "Dokumenti, ki jih ustvarite ali naložite, so shranjeni v razdelku »Moji dokumenti«. Lahko jih urejate, delite in sodelujete z drugimi v svoji skupini.",
|
||||
"New": "Novo",
|
||||
"NewDocument": "Nov dokument",
|
||||
"NewFolder": "Nova mapa",
|
||||
|
@ -40,8 +40,6 @@
|
||||
"MoveOrCopy": "Taşı veya kopyala",
|
||||
"MoveTo": "Şuraya taşı",
|
||||
"MoveToFolderMessage": "Klasörü alt klasörüne taşıyamazsınız",
|
||||
"MyEmptyContainerDescription": "Oluşturduğunuz veya yüklediğiniz belgeler 'Belgelerim' bölümünde tutulur. Bunları düzenleyebilir, paylaşabilir ve ekibinizle üzerinde çalışabilirsiniz.",
|
||||
"New": "Yeni",
|
||||
"NewDocument": "Yeni Belge",
|
||||
"NewFolder": "Yeni dosya",
|
||||
"NewMasterForm": "Yeni Form şablonu",
|
||||
|
@ -40,7 +40,6 @@
|
||||
"MoveOrCopy": "Перемістити або скопіювати",
|
||||
"MoveTo": "Перемістити до",
|
||||
"MoveToFolderMessage": "Ви не можете перемістити папку до її підпапки",
|
||||
"MyEmptyContainerDescription": "Документи, які ви створюєте або передаєте, зберігаються в розділі \"Мої документи\". Ви можете редагувати їх, надавати до них спільний доступ та спільно працювати над ними зі своєю командою.",
|
||||
"New": "Створити",
|
||||
"NewDocument": "Документ",
|
||||
"NewFolder": "Папку",
|
||||
|
@ -40,7 +40,6 @@
|
||||
"MoveOrCopy": "Di chuyển hoặc Sao chép",
|
||||
"MoveTo": "Chuyển tới",
|
||||
"MoveToFolderMessage": "Bạn không thể chuyển thư mục sang thư mục con của nó",
|
||||
"MyEmptyContainerDescription": "Tài liệu bạn tạo hoặc tải lên được lưu giữ trong phần 'Tài liệu của tôi'. Bạn có thể chỉnh sửa, chia sẻ và cùng làm việc trên chúng với nhóm của mình. ",
|
||||
"New": "Mới",
|
||||
"NewDocument": "Tài liệu mới",
|
||||
"NewFolder": "Thư mục mới",
|
||||
|
@ -40,7 +40,6 @@
|
||||
"MoveOrCopy": "移动或复制",
|
||||
"MoveTo": "移动至",
|
||||
"MoveToFolderMessage": "您不能将文件夹移至其子文件夹",
|
||||
"MyEmptyContainerDescription": "您所创建或上传的文档将被保存在'我的文档'部分。您可对其进行编辑和分享,或与团队成员就其展开协作。",
|
||||
"New": "新建",
|
||||
"NewDocument": "新文档",
|
||||
"NewFolder": "新文件夹",
|
||||
|
@ -342,7 +342,7 @@ const Items = ({
|
||||
/>
|
||||
);
|
||||
|
||||
items.splice(3, 0, filesHeader);
|
||||
isAdmin && items.splice(3, 0, filesHeader);
|
||||
items.unshift(roomsHeader);
|
||||
items.push(otherHeader);
|
||||
|
||||
@ -363,6 +363,7 @@ const Items = ({
|
||||
startUpload,
|
||||
uploadEmptyFolders,
|
||||
trashIsEmpty,
|
||||
isAdmin,
|
||||
]
|
||||
);
|
||||
|
||||
|
@ -526,7 +526,7 @@ export default inject(
|
||||
)(
|
||||
withTranslation(["Article", "UploadPanel", "Common", "Files", "People"])(
|
||||
withLoader(observer(withRouter(ArticleMainButtonContent)))(
|
||||
<Loaders.ArticleButton />
|
||||
<Loaders.ArticleButton height="28px" />
|
||||
)
|
||||
)
|
||||
);
|
||||
|
@ -2,7 +2,12 @@ import React from "react";
|
||||
import styled, { css } from "styled-components";
|
||||
import EmptyScreenContainer from "@docspace/components/empty-screen-container";
|
||||
import NoUserSelect from "@docspace/components/utils/commonStyles";
|
||||
import { tablet, smallTablet } from "@docspace/components/utils/device";
|
||||
import {
|
||||
tablet,
|
||||
smallTablet,
|
||||
desktop,
|
||||
} from "@docspace/components/utils/device";
|
||||
import { isMobile } from "react-device-detect";
|
||||
|
||||
const EmptyPageStyles = css`
|
||||
padding: 44px 0px 64px 0px;
|
||||
@ -10,9 +15,24 @@ const EmptyPageStyles = css`
|
||||
grid-column-gap: 40px;
|
||||
grid-template-columns: 100px 1fr;
|
||||
|
||||
.empty-folder_link:not(:last-child) {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.empty-folder_link {
|
||||
margin-right: 9px;
|
||||
}
|
||||
|
||||
@media ${desktop} {
|
||||
.empty-folder_link:not(:last-child) {
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
}
|
||||
|
||||
@media ${tablet} {
|
||||
padding: 44px 0px 64px 93px;
|
||||
padding: 44px 0px 64px 0px;
|
||||
grid-column-gap: 33px;
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
@media ${smallTablet} {
|
||||
@ -39,6 +59,7 @@ const EmptyFolderWrapper = styled.div`
|
||||
}
|
||||
|
||||
.empty-folder_container-image {
|
||||
margin-top: 3px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
@ -53,6 +74,9 @@ const EmptyFolderWrapper = styled.div`
|
||||
line-height: unset;
|
||||
${NoUserSelect}
|
||||
}
|
||||
.empty-folder_container_up-image {
|
||||
${NoUserSelect}
|
||||
}
|
||||
|
||||
.empty-folder_container-icon {
|
||||
height: 20px;
|
||||
@ -66,6 +90,13 @@ const EmptyFolderWrapper = styled.div`
|
||||
bottom: 16px;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 1325px) {
|
||||
${!isMobile &&
|
||||
css`
|
||||
margin-left: 98px;
|
||||
`};
|
||||
}
|
||||
|
||||
${(props) => props.isEmptyPage && `${EmptyPageStyles}`}
|
||||
}
|
||||
`;
|
||||
|
@ -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 {
|
||||
|
@ -1,4 +1,5 @@
|
||||
import React from "react";
|
||||
import styled from "styled-components";
|
||||
import { FolderType } from "@docspace/common/constants";
|
||||
import { inject, observer } from "mobx-react";
|
||||
import { withTranslation, Trans } from "react-i18next";
|
||||
@ -13,6 +14,13 @@ import { getCategoryUrl } from "SRC_DIR/helpers/utils";
|
||||
import { AppServerConfig } from "@docspace/common/constants";
|
||||
import history from "@docspace/common/history";
|
||||
import config from "PACKAGE_FILE";
|
||||
import PlusIcon from "@docspace/client/public/images/plus.react.svg";
|
||||
|
||||
const StyledPlusIcon = styled(PlusIcon)`
|
||||
path {
|
||||
fill: #657077;
|
||||
}
|
||||
`;
|
||||
|
||||
const RootFolderContainer = (props) => {
|
||||
const {
|
||||
@ -37,11 +45,13 @@ const RootFolderContainer = (props) => {
|
||||
fetchRooms,
|
||||
setAlreadyFetchingRooms,
|
||||
categoryType,
|
||||
isEmptyPage,
|
||||
setIsEmptyPage,
|
||||
} = props;
|
||||
const myDescription = t("MyEmptyContainerDescription");
|
||||
const personalDescription = t("PersonalEmptyContainerDescription");
|
||||
const shareDescription = t("SharedEmptyContainerDescription");
|
||||
const commonDescription = t("CommonEmptyContainerDescription");
|
||||
const trashHeader = t("EmptyScreenFolder");
|
||||
const emptyScreenHeader = t("EmptyScreenFolder");
|
||||
const archiveHeader = t("ArchiveEmptyScreenHeader");
|
||||
const noFilesHeader = t("NoFilesHereYet");
|
||||
const trashDescription = t("TrashEmptyDescription");
|
||||
@ -59,18 +69,20 @@ const RootFolderContainer = (props) => {
|
||||
t("PrivateRoomDescriptionUnbreakable"),
|
||||
];
|
||||
|
||||
const roomHeader = "Welcome to DocSpace";
|
||||
|
||||
const [showLoader, setShowLoader] = React.useState(false);
|
||||
const [isEmptyPage, setIsEmptyPage] = React.useState(false);
|
||||
|
||||
React.useEffect(() => {
|
||||
if (
|
||||
rootFolderType !== FolderType.USER &&
|
||||
rootFolderType !== FolderType.COMMON
|
||||
) {
|
||||
if (rootFolderType !== FolderType.COMMON) {
|
||||
setIsEmptyPage(true);
|
||||
} else {
|
||||
setIsEmptyPage(false);
|
||||
}
|
||||
|
||||
return () => {
|
||||
setIsEmptyPage(false);
|
||||
};
|
||||
}, [isEmptyPage, setIsEmptyPage, rootFolderType]);
|
||||
|
||||
const onGoToPersonal = () => {
|
||||
@ -106,8 +118,9 @@ const RootFolderContainer = (props) => {
|
||||
switch (rootFolderType) {
|
||||
case FolderType.USER:
|
||||
return {
|
||||
descriptionText: myDescription,
|
||||
imageSrc: "/static/images/empty_screen.png",
|
||||
headerText: emptyScreenHeader,
|
||||
descriptionText: personalDescription,
|
||||
imageSrc: "images/empty_screen_personal.svg",
|
||||
buttons: commonButtons,
|
||||
};
|
||||
case FolderType.SHARE:
|
||||
@ -143,7 +156,7 @@ const RootFolderContainer = (props) => {
|
||||
};
|
||||
case FolderType.TRASH:
|
||||
return {
|
||||
headerText: trashHeader,
|
||||
headerText: emptyScreenHeader,
|
||||
descriptionText: trashDescription,
|
||||
style: { gridColumnGap: "39px", gridTemplateColumns: "150px" },
|
||||
imageSrc: theme.isBase
|
||||
@ -153,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,
|
||||
@ -207,13 +220,13 @@ const RootFolderContainer = (props) => {
|
||||
const commonButtons = (
|
||||
<span>
|
||||
<div className="empty-folder_container-links">
|
||||
<img
|
||||
className="empty-folder_container_plus-image"
|
||||
src="images/plus.svg"
|
||||
<StyledPlusIcon
|
||||
className="empty-folder_container-image"
|
||||
data-format="docx"
|
||||
onClick={onCreate}
|
||||
alt="plus_icon"
|
||||
/>
|
||||
|
||||
<Box className="flex-wrapper_container">
|
||||
<Link data-format="docx" onClick={onCreate} {...linkStyles}>
|
||||
{t("Document")},
|
||||
@ -222,7 +235,7 @@ const RootFolderContainer = (props) => {
|
||||
{t("Spreadsheet")},
|
||||
</Link>
|
||||
<Link data-format="pptx" onClick={onCreate} {...linkStyles}>
|
||||
{t("Presentation")}
|
||||
{t("Presentation")},
|
||||
</Link>
|
||||
<Link data-format="docxf" onClick={onCreate} {...linkStyles}>
|
||||
{t("Translations:NewForm")}
|
||||
@ -231,9 +244,8 @@ const RootFolderContainer = (props) => {
|
||||
</div>
|
||||
|
||||
<div className="empty-folder_container-links">
|
||||
<img
|
||||
className="empty-folder_container_plus-image"
|
||||
src="images/plus.svg"
|
||||
<StyledPlusIcon
|
||||
className="empty-folder_container-image"
|
||||
onClick={onCreate}
|
||||
alt="plus_icon"
|
||||
/>
|
||||
@ -267,7 +279,7 @@ const RootFolderContainer = (props) => {
|
||||
alt="plus_icon"
|
||||
/>
|
||||
<Link onClick={onCreateRoom} {...linkStyles}>
|
||||
Create room
|
||||
{t("CreateEditRoomDialog:CreateRoom")}
|
||||
</Link>
|
||||
</div>
|
||||
);
|
||||
@ -353,6 +365,8 @@ export default inject(
|
||||
fetchRooms,
|
||||
categoryType,
|
||||
setAlreadyFetchingRooms,
|
||||
isEmptyPage,
|
||||
setIsEmptyPage,
|
||||
} = filesStore;
|
||||
const { title, rootFolderType } = selectedFolderStore;
|
||||
const { isPrivacyFolder, myFolderId } = treeFoldersStore;
|
||||
@ -375,6 +389,12 @@ export default inject(
|
||||
fetchRooms,
|
||||
categoryType,
|
||||
setAlreadyFetchingRooms,
|
||||
isEmptyPage,
|
||||
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,
|
||||
|
@ -142,15 +142,32 @@ export default inject(
|
||||
|
||||
const { openConnectWindow } = settingsStore.thirdPartyStore;
|
||||
|
||||
let nextCloudConnectItem = [],
|
||||
ownCloudConnectItem = [];
|
||||
|
||||
if (thirdPartyStore.nextCloudConnectItem) {
|
||||
nextCloudConnectItem.push(
|
||||
...thirdPartyStore.nextCloudConnectItem,
|
||||
"Nextcloud"
|
||||
);
|
||||
}
|
||||
|
||||
if (thirdPartyStore.ownCloudConnectItem) {
|
||||
ownCloudConnectItem.push(
|
||||
...thirdPartyStore.ownCloudConnectItem,
|
||||
"ownCloud"
|
||||
);
|
||||
}
|
||||
|
||||
const connectItems = [
|
||||
thirdPartyStore.googleConnectItem,
|
||||
thirdPartyStore.boxConnectItem,
|
||||
thirdPartyStore.dropboxConnectItem,
|
||||
thirdPartyStore.oneDriveConnectItem,
|
||||
thirdPartyStore.nextCloudConnectItem,
|
||||
nextCloudConnectItem,
|
||||
thirdPartyStore.kDriveConnectItem,
|
||||
thirdPartyStore.yandexConnectItem,
|
||||
thirdPartyStore.ownCloudConnectItem,
|
||||
ownCloudConnectItem,
|
||||
thirdPartyStore.webDavConnectItem,
|
||||
thirdPartyStore.sharePointConnectItem,
|
||||
]
|
||||
@ -160,8 +177,11 @@ export default inject(
|
||||
isAvialable: !!item,
|
||||
id: item[0],
|
||||
providerName: item[0],
|
||||
isOauth: item.length > 1,
|
||||
oauthHref: item.length > 1 ? item[1] : "",
|
||||
isOauth: item.length > 1 && item[0] !== "WebDav",
|
||||
oauthHref: item.length > 1 && item[0] !== "WebDav" ? item[1] : "",
|
||||
...(item[0] === "WebDav" && {
|
||||
category: item[item.length - 1],
|
||||
}),
|
||||
}
|
||||
)
|
||||
.filter((item) => !!item);
|
||||
|
@ -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"
|
||||
|
@ -116,7 +116,9 @@ const ThirpartyComboBox = ({
|
||||
|
||||
const thirdparties = connectItems.map((item) => ({
|
||||
...item,
|
||||
title: connectedCloudsTypeTitleTranslation(item.providerName, t),
|
||||
title: item.category
|
||||
? item.category
|
||||
: connectedCloudsTypeTitleTranslation(item.providerName, t),
|
||||
}));
|
||||
|
||||
const [isOpen, setIsOpen] = useState(false);
|
||||
|
@ -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,
|
||||
};
|
||||
}
|
||||
)(
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user