Merge branch 'develop' into release/1.0.0
This commit is contained in:
commit
fa204303f5
Binary file not shown.
BIN
.nuget/packages/WebSocketSharpNetStandart.1.0.3-rc12.nupkg
Normal file
BIN
.nuget/packages/WebSocketSharpNetStandart.1.0.3-rc12.nupkg
Normal file
Binary file not shown.
@ -79,7 +79,6 @@ namespace ASC.Core.Data
|
|||||||
MaxFileSize = GetInBytes(r.MaxFileSize),
|
MaxFileSize = GetInBytes(r.MaxFileSize),
|
||||||
MaxTotalSize = GetInBytes(r.MaxTotalSize),
|
MaxTotalSize = GetInBytes(r.MaxTotalSize),
|
||||||
Price = r.Price,
|
Price = r.Price,
|
||||||
Price2 = r.Price2,
|
|
||||||
Visible = r.Visible
|
Visible = r.Visible
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -127,7 +126,6 @@ namespace ASC.Core.Data
|
|||||||
ActiveUsers = quota.ActiveUsers,
|
ActiveUsers = quota.ActiveUsers,
|
||||||
Features = quota.Features,
|
Features = quota.Features,
|
||||||
Price = quota.Price,
|
Price = quota.Price,
|
||||||
Price2 = quota.Price2,
|
|
||||||
AvangateId = quota.AvangateId,
|
AvangateId = quota.AvangateId,
|
||||||
Visible = quota.Visible
|
Visible = quota.Visible
|
||||||
};
|
};
|
||||||
|
@ -14,7 +14,6 @@ namespace ASC.Core.Common.EF
|
|||||||
public int ActiveUsers { get; set; }
|
public int ActiveUsers { get; set; }
|
||||||
public string Features { get; set; }
|
public string Features { get; set; }
|
||||||
public decimal Price { get; set; }
|
public decimal Price { get; set; }
|
||||||
public decimal Price2 { get; set; }
|
|
||||||
public string AvangateId { get; set; }
|
public string AvangateId { get; set; }
|
||||||
public bool Visible { get; set; }
|
public bool Visible { get; set; }
|
||||||
public override object[] GetKeys()
|
public override object[] GetKeys()
|
||||||
@ -30,7 +29,7 @@ namespace ASC.Core.Common.EF
|
|||||||
.Add(MySqlAddDbQuota, Provider.MySql)
|
.Add(MySqlAddDbQuota, Provider.MySql)
|
||||||
.Add(PgSqlAddDbQuota, Provider.Postgre)
|
.Add(PgSqlAddDbQuota, Provider.Postgre)
|
||||||
.HasData(
|
.HasData(
|
||||||
new DbQuota { Tenant = -1, Name = "default", Description = null, MaxFileSize = 102400, MaxTotalSize = 10995116277760, ActiveUsers = 10000, Features = "domain,audit,controlpanel,healthcheck,ldap,sso,whitelabel,branding,ssbranding,update,support,portals:10000,discencryption,privacyroom,restore", Price = decimal.Parse("0,00"), Price2 = decimal.Parse("0,00"), AvangateId = "0", Visible = false }
|
new DbQuota { Tenant = -1, Name = "default", Description = null, MaxFileSize = 102400, MaxTotalSize = 10995116277760, ActiveUsers = 10000, Features = "domain,audit,controlpanel,healthcheck,ldap,sso,whitelabel,branding,ssbranding,update,support,portals:10000,discencryption,privacyroom,restore", Price = decimal.Parse("0,00"), AvangateId = "0", Visible = false }
|
||||||
);
|
);
|
||||||
|
|
||||||
return modelBuilder;
|
return modelBuilder;
|
||||||
@ -81,10 +80,6 @@ namespace ASC.Core.Common.EF
|
|||||||
.HasColumnName("price")
|
.HasColumnName("price")
|
||||||
.HasColumnType("decimal(10,2)");
|
.HasColumnType("decimal(10,2)");
|
||||||
|
|
||||||
entity.Property(e => e.Price2)
|
|
||||||
.HasColumnName("price2")
|
|
||||||
.HasColumnType("decimal(10,2)");
|
|
||||||
|
|
||||||
entity.Property(e => e.Visible).HasColumnName("visible");
|
entity.Property(e => e.Visible).HasColumnName("visible");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -131,11 +126,6 @@ namespace ASC.Core.Common.EF
|
|||||||
.HasColumnType("numeric(10,2)")
|
.HasColumnType("numeric(10,2)")
|
||||||
.HasDefaultValueSql("0.00");
|
.HasDefaultValueSql("0.00");
|
||||||
|
|
||||||
entity.Property(e => e.Price2)
|
|
||||||
.HasColumnName("price2")
|
|
||||||
.HasColumnType("numeric(10,2)")
|
|
||||||
.HasDefaultValueSql("0.00");
|
|
||||||
|
|
||||||
entity.Property(e => e.Visible).HasColumnName("visible");
|
entity.Property(e => e.Visible).HasColumnName("visible");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -657,10 +657,6 @@ namespace ASC.Core.Common.Migrations.MySql.CoreDbContextMySql
|
|||||||
.HasColumnType("decimal(10,2)")
|
.HasColumnType("decimal(10,2)")
|
||||||
.HasColumnName("price");
|
.HasColumnName("price");
|
||||||
|
|
||||||
b.Property<decimal>("Price2")
|
|
||||||
.HasColumnType("decimal(10,2)")
|
|
||||||
.HasColumnName("price2");
|
|
||||||
|
|
||||||
b.Property<bool>("Visible")
|
b.Property<bool>("Visible")
|
||||||
.HasColumnType("tinyint(1)")
|
.HasColumnType("tinyint(1)")
|
||||||
.HasColumnName("visible");
|
.HasColumnName("visible");
|
||||||
@ -681,7 +677,6 @@ namespace ASC.Core.Common.Migrations.MySql.CoreDbContextMySql
|
|||||||
MaxTotalSize = 10995116277760L,
|
MaxTotalSize = 10995116277760L,
|
||||||
Name = "default",
|
Name = "default",
|
||||||
Price = 0.00m,
|
Price = 0.00m,
|
||||||
Price2 = 0.00m,
|
|
||||||
Visible = false
|
Visible = false
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -58,7 +58,6 @@ namespace ASC.Core.Common.Migrations.MySql.CoreDbContextMySql
|
|||||||
features = table.Column<string>(type: "text", nullable: true, collation: "utf8_general_ci")
|
features = table.Column<string>(type: "text", nullable: true, collation: "utf8_general_ci")
|
||||||
.Annotation("MySql:CharSet", "utf8"),
|
.Annotation("MySql:CharSet", "utf8"),
|
||||||
price = table.Column<decimal>(type: "decimal(10,2)", nullable: false),
|
price = table.Column<decimal>(type: "decimal(10,2)", nullable: false),
|
||||||
price2 = table.Column<decimal>(type: "decimal(10,2)", nullable: false),
|
|
||||||
avangate_id = table.Column<string>(type: "varchar(128)", nullable: true, collation: "utf8_general_ci")
|
avangate_id = table.Column<string>(type: "varchar(128)", nullable: true, collation: "utf8_general_ci")
|
||||||
.Annotation("MySql:CharSet", "utf8"),
|
.Annotation("MySql:CharSet", "utf8"),
|
||||||
visible = table.Column<bool>(type: "tinyint(1)", nullable: false)
|
visible = table.Column<bool>(type: "tinyint(1)", nullable: false)
|
||||||
@ -181,8 +180,8 @@ namespace ASC.Core.Common.Migrations.MySql.CoreDbContextMySql
|
|||||||
|
|
||||||
migrationBuilder.InsertData(
|
migrationBuilder.InsertData(
|
||||||
table: "tenants_quota",
|
table: "tenants_quota",
|
||||||
columns: new[] { "tenant", "active_users", "avangate_id", "description", "features", "max_file_size", "max_total_size", "name", "price", "price2", "visible" },
|
columns: new[] { "tenant", "active_users", "avangate_id", "description", "features", "max_file_size", "max_total_size", "name", "price", "visible" },
|
||||||
values: new object[] { -1, 10000, "0", null, "domain,audit,controlpanel,healthcheck,ldap,sso,whitelabel,branding,ssbranding,update,support,portals:10000,discencryption,privacyroom,restore", 102400L, 10995116277760L, "default", 0.00m, 0.00m, false });
|
values: new object[] { -1, 10000, "0", null, "domain,audit,controlpanel,healthcheck,ldap,sso,whitelabel,branding,ssbranding,update,support,portals:10000,discencryption,privacyroom,restore", 102400L, 10995116277760L, "default", 0.00m, false });
|
||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
migrationBuilder.CreateIndex(
|
||||||
name: "last_modified",
|
name: "last_modified",
|
||||||
|
@ -655,10 +655,6 @@ namespace ASC.Core.Common.Migrations.MySql.CoreDbContextMySql
|
|||||||
.HasColumnType("decimal(10,2)")
|
.HasColumnType("decimal(10,2)")
|
||||||
.HasColumnName("price");
|
.HasColumnName("price");
|
||||||
|
|
||||||
b.Property<decimal>("Price2")
|
|
||||||
.HasColumnType("decimal(10,2)")
|
|
||||||
.HasColumnName("price2");
|
|
||||||
|
|
||||||
b.Property<bool>("Visible")
|
b.Property<bool>("Visible")
|
||||||
.HasColumnType("tinyint(1)")
|
.HasColumnType("tinyint(1)")
|
||||||
.HasColumnName("visible");
|
.HasColumnName("visible");
|
||||||
@ -679,7 +675,6 @@ namespace ASC.Core.Common.Migrations.MySql.CoreDbContextMySql
|
|||||||
MaxTotalSize = 10995116277760L,
|
MaxTotalSize = 10995116277760L,
|
||||||
Name = "default",
|
Name = "default",
|
||||||
Price = 0.00m,
|
Price = 0.00m,
|
||||||
Price2 = 0.00m,
|
|
||||||
Visible = false
|
Visible = false
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -652,12 +652,6 @@ namespace ASC.Core.Common.Migrations.Npgsql.CoreDbContextNpgsql
|
|||||||
.HasColumnType("numeric(10,2)")
|
.HasColumnType("numeric(10,2)")
|
||||||
.HasDefaultValueSql("0.00");
|
.HasDefaultValueSql("0.00");
|
||||||
|
|
||||||
b.Property<decimal>("Price2")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnName("price2")
|
|
||||||
.HasColumnType("numeric(10,2)")
|
|
||||||
.HasDefaultValueSql("0.00");
|
|
||||||
|
|
||||||
b.Property<bool>("Visible")
|
b.Property<bool>("Visible")
|
||||||
.HasColumnName("visible")
|
.HasColumnName("visible")
|
||||||
.HasColumnType("boolean");
|
.HasColumnType("boolean");
|
||||||
|
@ -56,7 +56,6 @@ namespace ASC.Core.Common.Migrations.Npgsql.CoreDbContextNpgsql
|
|||||||
active_users = table.Column<int>(nullable: false),
|
active_users = table.Column<int>(nullable: false),
|
||||||
features = table.Column<string>(nullable: true),
|
features = table.Column<string>(nullable: true),
|
||||||
price = table.Column<decimal>(type: "numeric(10,2)", nullable: false, defaultValueSql: "0.00"),
|
price = table.Column<decimal>(type: "numeric(10,2)", nullable: false, defaultValueSql: "0.00"),
|
||||||
price2 = table.Column<decimal>(type: "numeric(10,2)", nullable: false, defaultValueSql: "0.00"),
|
|
||||||
avangate_id = table.Column<string>(maxLength: 128, nullable: true, defaultValueSql: "NULL"),
|
avangate_id = table.Column<string>(maxLength: 128, nullable: true, defaultValueSql: "NULL"),
|
||||||
visible = table.Column<bool>(nullable: false)
|
visible = table.Column<bool>(nullable: false)
|
||||||
},
|
},
|
||||||
|
@ -650,12 +650,6 @@ namespace ASC.Core.Common.Migrations.Npgsql.CoreDbContextNpgsql
|
|||||||
.HasColumnType("numeric(10,2)")
|
.HasColumnType("numeric(10,2)")
|
||||||
.HasDefaultValueSql("0.00");
|
.HasDefaultValueSql("0.00");
|
||||||
|
|
||||||
b.Property<decimal>("Price2")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnName("price2")
|
|
||||||
.HasColumnType("numeric(10,2)")
|
|
||||||
.HasDefaultValueSql("0.00");
|
|
||||||
|
|
||||||
b.Property<bool>("Visible")
|
b.Property<bool>("Visible")
|
||||||
.HasColumnName("visible")
|
.HasColumnName("visible")
|
||||||
.HasColumnType("boolean");
|
.HasColumnType("boolean");
|
||||||
@ -676,7 +670,6 @@ namespace ASC.Core.Common.Migrations.Npgsql.CoreDbContextNpgsql
|
|||||||
MaxTotalSize = 10995116277760L,
|
MaxTotalSize = 10995116277760L,
|
||||||
Name = "default",
|
Name = "default",
|
||||||
Price = 0.00m,
|
Price = 0.00m,
|
||||||
Price2 = 0.00m,
|
|
||||||
Visible = false
|
Visible = false
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -55,8 +55,6 @@ namespace ASC.Core.Tenants
|
|||||||
|
|
||||||
public decimal Price { get; set; }
|
public decimal Price { get; set; }
|
||||||
|
|
||||||
public decimal Price2 { get; set; }
|
|
||||||
|
|
||||||
public string AvangateId { get; set; }
|
public string AvangateId { get; set; }
|
||||||
|
|
||||||
public bool Visible { get; set; }
|
public bool Visible { get; set; }
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net5.0</TargetFramework>
|
<TargetFramework>net5.0</TargetFramework>
|
||||||
|
<ProduceReferenceAssembly>false</ProduceReferenceAssembly>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net5.0</TargetFramework>
|
<TargetFramework>net5.0</TargetFramework>
|
||||||
|
<ProduceReferenceAssembly>false</ProduceReferenceAssembly>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
|
||||||
|
@ -5,13 +5,11 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\..\ASC.Core.Common\ASC.Core.Common.csproj" />
|
<PackageReference Include="NUnit" Version="3.12.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="nunit.framework">
|
<ProjectReference Include="..\..\ASC.Core.Common\ASC.Core.Common.csproj" />
|
||||||
<HintPath>..\..\..\..\..\Program Files (x86)\Microsoft\Xamarin\NuGet\nunit\3.12.0\lib\netstandard2.0\nunit.framework.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -4,15 +4,13 @@
|
|||||||
<TargetFramework>net5.0</TargetFramework>
|
<TargetFramework>net5.0</TargetFramework>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="NUnit" Version="3.12.0" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\..\ASC.Core.Common\ASC.Core.Common.csproj" />
|
<ProjectReference Include="..\..\ASC.Core.Common\ASC.Core.Common.csproj" />
|
||||||
<ProjectReference Include="..\..\ASC.Notify.Textile\ASC.Notify.Textile.csproj" />
|
<ProjectReference Include="..\..\ASC.Notify.Textile\ASC.Notify.Textile.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<Reference Include="nunit.framework">
|
|
||||||
<HintPath>..\..\..\..\..\Program Files (x86)\Microsoft\Xamarin\NuGet\nunit\3.12.0\lib\netstandard2.0\nunit.framework.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="7.1.0" />
|
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="7.1.0" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Hosting.Systemd" Version="5.0.1" />
|
<PackageReference Include="Microsoft.Extensions.Hosting.Systemd" Version="5.0.1" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="5.0.1" />
|
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="5.0.1" />
|
||||||
<PackageReference Include="WebSocketSharpNetStandart" Version="1.0.3-rc11" />
|
<PackageReference Include="WebSocketSharpNetStandart" Version="1.0.3-rc12" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
@ -38,7 +38,7 @@ server {
|
|||||||
etag on;
|
etag on;
|
||||||
|
|
||||||
large_client_header_buffers 4 16k;
|
large_client_header_buffers 4 16k;
|
||||||
|
client_max_body_size 4G;
|
||||||
set $X_REWRITER_URL $the_scheme://$the_host;
|
set $X_REWRITER_URL $the_scheme://$the_host;
|
||||||
|
|
||||||
if ($http_x_rewriter_url != '') {
|
if ($http_x_rewriter_url != '') {
|
||||||
|
@ -23,6 +23,7 @@ class SettingsStore {
|
|||||||
favoritesSection = null;
|
favoritesSection = null;
|
||||||
recentSection = null;
|
recentSection = null;
|
||||||
hideConfirmConvertSave = null;
|
hideConfirmConvertSave = null;
|
||||||
|
chunkUploadSize = 1024 * 1023; // 1024 * 1023; //~0.999mb
|
||||||
|
|
||||||
settingsIsLoaded = false;
|
settingsIsLoaded = false;
|
||||||
|
|
||||||
|
@ -18,8 +18,6 @@ import {
|
|||||||
moveToFolder,
|
moveToFolder,
|
||||||
} from "@appserver/common/api/files";
|
} from "@appserver/common/api/files";
|
||||||
|
|
||||||
const chunkSize = 1024 * 1023; //~0.999mb
|
|
||||||
|
|
||||||
class UploadDataStore {
|
class UploadDataStore {
|
||||||
formatsStore;
|
formatsStore;
|
||||||
treeFoldersStore;
|
treeFoldersStore;
|
||||||
@ -513,7 +511,9 @@ class UploadDataStore {
|
|||||||
|
|
||||||
const { uploaded } = res.data.data;
|
const { uploaded } = res.data.data;
|
||||||
|
|
||||||
const uploadedSize = uploaded ? fileSize : index * chunkSize;
|
const uploadedSize = uploaded
|
||||||
|
? fileSize
|
||||||
|
: index * this.settingsStore.chunkUploadSize;
|
||||||
|
|
||||||
const newPercent = this.getNewPercent(uploadedSize, indexOfFile);
|
const newPercent = this.getNewPercent(uploadedSize, indexOfFile);
|
||||||
|
|
||||||
@ -626,8 +626,10 @@ class UploadDataStore {
|
|||||||
return Promise.resolve();
|
return Promise.resolve();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const { chunkUploadSize } = this.settingsStore;
|
||||||
|
|
||||||
const { file, toFolderId /*, action*/ } = item;
|
const { file, toFolderId /*, action*/ } = item;
|
||||||
const chunks = Math.ceil(file.size / chunkSize, chunkSize);
|
const chunks = Math.ceil(file.size / chunkUploadSize, chunkUploadSize);
|
||||||
const fileName = file.name;
|
const fileName = file.name;
|
||||||
const fileSize = file.size;
|
const fileSize = file.size;
|
||||||
const relativePath = file.path
|
const relativePath = file.path
|
||||||
@ -651,9 +653,9 @@ class UploadDataStore {
|
|||||||
let chunk = 0;
|
let chunk = 0;
|
||||||
|
|
||||||
while (chunk < chunks) {
|
while (chunk < chunks) {
|
||||||
const offset = chunk * chunkSize;
|
const offset = chunk * chunkUploadSize;
|
||||||
const formData = new FormData();
|
const formData = new FormData();
|
||||||
formData.append("file", file.slice(offset, offset + chunkSize));
|
formData.append("file", file.slice(offset, offset + chunkUploadSize));
|
||||||
requestsDataArray.push(formData);
|
requestsDataArray.push(formData);
|
||||||
chunk++;
|
chunk++;
|
||||||
}
|
}
|
||||||
|
@ -31,6 +31,7 @@ using ASC.Common;
|
|||||||
using ASC.Core;
|
using ASC.Core;
|
||||||
using ASC.Core.Common.Settings;
|
using ASC.Core.Common.Settings;
|
||||||
using ASC.Files.Core;
|
using ASC.Files.Core;
|
||||||
|
using ASC.Web.Studio.Core;
|
||||||
|
|
||||||
namespace ASC.Web.Files.Classes
|
namespace ASC.Web.Files.Classes
|
||||||
{
|
{
|
||||||
@ -115,11 +116,13 @@ namespace ASC.Web.Files.Classes
|
|||||||
{
|
{
|
||||||
private SettingsManager SettingsManager { get; }
|
private SettingsManager SettingsManager { get; }
|
||||||
private CoreBaseSettings CoreBaseSettings { get; }
|
private CoreBaseSettings CoreBaseSettings { get; }
|
||||||
|
private SetupInfo SetupInfo { get; }
|
||||||
|
|
||||||
public FilesSettingsHelper(SettingsManager settingsManager, CoreBaseSettings coreBaseSettings)
|
public FilesSettingsHelper(SettingsManager settingsManager, CoreBaseSettings coreBaseSettings, SetupInfo setupInfo)
|
||||||
{
|
{
|
||||||
SettingsManager = settingsManager;
|
SettingsManager = settingsManager;
|
||||||
CoreBaseSettings = coreBaseSettings;
|
CoreBaseSettings = coreBaseSettings;
|
||||||
|
SetupInfo = setupInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool ConfirmDelete
|
public bool ConfirmDelete
|
||||||
@ -285,6 +288,11 @@ namespace ASC.Web.Files.Classes
|
|||||||
get => LoadForCurrentUser().DownloadTarGzSetting;
|
get => LoadForCurrentUser().DownloadTarGzSetting;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public long ChunkUploadSize
|
||||||
|
{
|
||||||
|
get => SetupInfo.ChunkUploadSize;
|
||||||
|
}
|
||||||
|
|
||||||
private FilesSettings LoadForCurrentUser()
|
private FilesSettings LoadForCurrentUser()
|
||||||
{
|
{
|
||||||
return SettingsManager.LoadForCurrentUser<FilesSettings>();
|
return SettingsManager.LoadForCurrentUser<FilesSettings>();
|
||||||
|
@ -703,10 +703,7 @@ namespace ASC.Files.Core.Data
|
|||||||
private int GetFoldersCount(int parentId)
|
private int GetFoldersCount(int parentId)
|
||||||
{
|
{
|
||||||
var count = FilesDbContext.Tree
|
var count = FilesDbContext.Tree
|
||||||
.AsNoTracking()
|
.Count(r => r.ParentId == parentId && r.Level > 0);
|
||||||
.Where(r => r.ParentId == parentId)
|
|
||||||
.Where(r => r.Level > 0)
|
|
||||||
.Count();
|
|
||||||
|
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
@ -714,9 +711,8 @@ namespace ASC.Files.Core.Data
|
|||||||
private int GetFilesCount(int folderId)
|
private int GetFilesCount(int folderId)
|
||||||
{
|
{
|
||||||
var count = Query(FilesDbContext.Files)
|
var count = Query(FilesDbContext.Files)
|
||||||
.AsNoTracking()
|
|
||||||
.Distinct()
|
.Distinct()
|
||||||
.Count(r => FilesDbContext.Tree.Where(r => r.ParentId == folderId).Select(r => r.FolderId).Contains(r.FolderId));
|
.Count(r => FilesDbContext.Tree.Any(t => t.ParentId == folderId && t.FolderId == r.FolderId));
|
||||||
|
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
@ -764,9 +760,9 @@ namespace ASC.Files.Core.Data
|
|||||||
private void RecalculateFoldersCount(int id)
|
private void RecalculateFoldersCount(int id)
|
||||||
{
|
{
|
||||||
var toUpdate = Query(FilesDbContext.Folders)
|
var toUpdate = Query(FilesDbContext.Folders)
|
||||||
.Join(FilesDbContext.Tree, r=> r.Id, r=> r.ParentId,(file, tree) => new { file, tree })
|
.Join(FilesDbContext.Tree, r => r.Id, r => r.ParentId, (file, tree) => new { file, tree })
|
||||||
.Where(r => r.tree.FolderId == id)
|
.Where(r => r.tree.FolderId == id)
|
||||||
.Select(r=> r.file)
|
.Select(r => r.file)
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
foreach (var f in toUpdate)
|
foreach (var f in toUpdate)
|
||||||
|
@ -35,6 +35,11 @@ namespace ASC.Files
|
|||||||
|
|
||||||
builder.ConfigureKestrel((hostingContext, serverOptions) =>
|
builder.ConfigureKestrel((hostingContext, serverOptions) =>
|
||||||
{
|
{
|
||||||
|
serverOptions.Limits.MaxRequestBodySize = 100 * 1024 * 1024;
|
||||||
|
serverOptions.Limits.MaxRequestBufferSize = 100 * 1024 * 1024;
|
||||||
|
serverOptions.Limits.MinRequestBodyDataRate = null;
|
||||||
|
serverOptions.Limits.MinResponseDataRate = null;
|
||||||
|
|
||||||
var kestrelConfig = hostingContext.Configuration.GetSection("Kestrel");
|
var kestrelConfig = hostingContext.Configuration.GetSection("Kestrel");
|
||||||
|
|
||||||
if (!kestrelConfig.Exists()) return;
|
if (!kestrelConfig.Exists()) return;
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
<PackageProjectUrl>http://sta.github.io/websocket-sharp</PackageProjectUrl>
|
<PackageProjectUrl>http://sta.github.io/websocket-sharp</PackageProjectUrl>
|
||||||
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
|
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
|
||||||
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
||||||
<Version>1.0.3-rc11</Version>
|
<Version>1.0.3-rc12</Version>
|
||||||
<AssemblyVersion>1.0.2.59611</AssemblyVersion>
|
<AssemblyVersion>1.0.2.59611</AssemblyVersion>
|
||||||
<FileVersion>1.0.2.59611</FileVersion>
|
<FileVersion>1.0.2.59611</FileVersion>
|
||||||
<PackageLicenseExpression>MIT</PackageLicenseExpression>
|
<PackageLicenseExpression>MIT</PackageLicenseExpression>
|
||||||
|
@ -153,7 +153,7 @@ namespace ASC.Web.Studio.Core
|
|||||||
AvailableFileSize = GetAppSettings("web.available-file-size", 100L * 1024L * 1024L);
|
AvailableFileSize = GetAppSettings("web.available-file-size", 100L * 1024L * 1024L);
|
||||||
|
|
||||||
TeamlabSiteRedirect = GetAppSettings("web.teamlab-site", string.Empty);
|
TeamlabSiteRedirect = GetAppSettings("web.teamlab-site", string.Empty);
|
||||||
ChunkUploadSize = GetAppSettings("files.uploader.chunk-size", 5 * 1024 * 1024);
|
ChunkUploadSize = GetAppSettings("files:uploader:chunk-size", 10 * 1024 * 1024);
|
||||||
ThirdPartyAuthEnabled = string.Equals(GetAppSettings("web.thirdparty-auth", "true"), "true");
|
ThirdPartyAuthEnabled = string.Equals(GetAppSettings("web.thirdparty-auth", "true"), "true");
|
||||||
ThirdPartyBannerEnabled = string.Equals(GetAppSettings("web.thirdparty-banner", "false"), "true");
|
ThirdPartyBannerEnabled = string.Equals(GetAppSettings("web.thirdparty-banner", "false"), "true");
|
||||||
NoTenantRedirectURL = GetAppSettings("web.notenant-url", "");
|
NoTenantRedirectURL = GetAppSettings("web.notenant-url", "");
|
||||||
|
@ -3,7 +3,9 @@
|
|||||||
"FileName": "File name",
|
"FileName": "File name",
|
||||||
"FolderForSave": "Folder for save",
|
"FolderForSave": "Folder for save",
|
||||||
"OpenSavedDocument": "Open saved document in new tab",
|
"OpenSavedDocument": "Open saved document in new tab",
|
||||||
"ImageFileType": "Select files of type: images",
|
"SelectFilesType": "Select files of type: {{fileType}}",
|
||||||
|
"ImageFileType": "images",
|
||||||
|
"DocumentsFileType": "documents",
|
||||||
"MailMergeFileType": "Select the file in XLSX format",
|
"MailMergeFileType": "Select the file in XLSX format",
|
||||||
"SelectFileTitle": "Select Data Source"
|
"SelectFileTitle": "Select Data Source"
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,9 @@
|
|||||||
"FileName": "Имя файла",
|
"FileName": "Имя файла",
|
||||||
"FolderForSave": "Папка для сохранения",
|
"FolderForSave": "Папка для сохранения",
|
||||||
"OpenSavedDocument": "Открыть сохраненный документ в новой вкладке",
|
"OpenSavedDocument": "Открыть сохраненный документ в новой вкладке",
|
||||||
"ImageFileType": "Выбрать файлы типа: изображения",
|
"SelectFilesType": "Выбрать файлы типа: {{fileType}}",
|
||||||
|
"ImageFileType": "изображения",
|
||||||
|
"DocumentsFileType": "документы",
|
||||||
"MailMergeFileType": "Выбрать файлы в формате XLSX",
|
"MailMergeFileType": "Выбрать файлы в формате XLSX",
|
||||||
"SelectFileTitle": "Выбрать источник данных"
|
"SelectFileTitle": "Выбрать источник данных"
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,7 @@ import React, { useEffect, useState } from "react";
|
|||||||
import Toast from "@appserver/components/toast";
|
import Toast from "@appserver/components/toast";
|
||||||
import toastr from "studio/toastr";
|
import toastr from "studio/toastr";
|
||||||
import { toast } from "react-toastify";
|
import { toast } from "react-toastify";
|
||||||
|
import { Trans } from "react-i18next";
|
||||||
import Box from "@appserver/components/box";
|
import Box from "@appserver/components/box";
|
||||||
import { regDesktop } from "@appserver/common/desktop";
|
import { regDesktop } from "@appserver/common/desktop";
|
||||||
import Loaders from "@appserver/common/components/Loaders";
|
import Loaders from "@appserver/common/components/Loaders";
|
||||||
@ -54,8 +54,9 @@ let documentIsReady = false;
|
|||||||
const text = "text";
|
const text = "text";
|
||||||
const spreadSheet = "spreadsheet";
|
const spreadSheet = "spreadsheet";
|
||||||
const presentation = "presentation";
|
const presentation = "presentation";
|
||||||
const insertImageAction = "imageType";
|
const insertImageAction = "imageFileType";
|
||||||
const mailMergeAction = "mailMergeType";
|
const mailMergeAction = "mailMergeFileType";
|
||||||
|
const compareFilesAction = "documentsFileType";
|
||||||
|
|
||||||
let docTitle = null;
|
let docTitle = null;
|
||||||
let actionLink;
|
let actionLink;
|
||||||
@ -115,6 +116,13 @@ const Editor = () => {
|
|||||||
url: link.url,
|
url: link.url,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const compareFiles = (link) => {
|
||||||
|
docEditor.setRevisedFile({
|
||||||
|
fileType: link.filetype,
|
||||||
|
url: link.url,
|
||||||
|
});
|
||||||
|
};
|
||||||
const updateFavorite = (favorite) => {
|
const updateFavorite = (favorite) => {
|
||||||
docEditor.setFavorite(favorite);
|
docEditor.setFavorite(favorite);
|
||||||
};
|
};
|
||||||
@ -436,7 +444,8 @@ const Editor = () => {
|
|||||||
onRequestRename,
|
onRequestRename,
|
||||||
onRequestSaveAs,
|
onRequestSaveAs,
|
||||||
onRequestInsertImage,
|
onRequestInsertImage,
|
||||||
onRequestMailMergeRecipients;
|
onRequestMailMergeRecipients,
|
||||||
|
onRequestCompareFile;
|
||||||
|
|
||||||
if (isSharingAccess) {
|
if (isSharingAccess) {
|
||||||
onRequestSharingSettings = onSDKRequestSharingSettings;
|
onRequestSharingSettings = onSDKRequestSharingSettings;
|
||||||
@ -450,6 +459,7 @@ const Editor = () => {
|
|||||||
onRequestSaveAs = onSDKRequestSaveAs;
|
onRequestSaveAs = onSDKRequestSaveAs;
|
||||||
onRequestInsertImage = onSDKRequestInsertImage;
|
onRequestInsertImage = onSDKRequestInsertImage;
|
||||||
onRequestMailMergeRecipients = onSDKRequestMailMergeRecipients;
|
onRequestMailMergeRecipients = onSDKRequestMailMergeRecipients;
|
||||||
|
onRequestCompareFile = onSDKRequestCompareFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
const events = {
|
const events = {
|
||||||
@ -467,6 +477,7 @@ const Editor = () => {
|
|||||||
onRequestInsertImage,
|
onRequestInsertImage,
|
||||||
onRequestSaveAs,
|
onRequestSaveAs,
|
||||||
onRequestMailMergeRecipients,
|
onRequestMailMergeRecipients,
|
||||||
|
onRequestCompareFile,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -593,11 +604,20 @@ const Editor = () => {
|
|||||||
setIsFileDialogVisible(true);
|
setIsFileDialogVisible(true);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const onSDKRequestCompareFile = () => {
|
||||||
|
setFilesType(compareFilesAction);
|
||||||
|
setIsFileDialogVisible(true);
|
||||||
|
};
|
||||||
const onSelectFile = async (file) => {
|
const onSelectFile = async (file) => {
|
||||||
|
try {
|
||||||
const link = await getPresignedUri(file.id);
|
const link = await getPresignedUri(file.id);
|
||||||
|
|
||||||
if (filesType === insertImageAction) insertImage(link);
|
if (filesType === insertImageAction) insertImage(link);
|
||||||
if (filesType === mailMergeAction) mailMerge(link);
|
if (filesType === mailMergeAction) mailMerge(link);
|
||||||
|
if (filesType === compareFilesAction) compareFiles(link);
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const onCloseFileDialog = () => {
|
const onCloseFileDialog = () => {
|
||||||
@ -636,6 +656,32 @@ const Editor = () => {
|
|||||||
setNewOpenTab(!openNewTab);
|
setNewOpenTab(!openNewTab);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const getFileTypeTranslation = () => {
|
||||||
|
switch (filesType) {
|
||||||
|
case mailMergeAction:
|
||||||
|
return i18n.t("MailMergeFileType");
|
||||||
|
case insertImageAction:
|
||||||
|
return i18n.t("ImageFileType");
|
||||||
|
case compareFilesAction:
|
||||||
|
return i18n.t("DocumentsFileType");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const SelectFileHeader = () => {
|
||||||
|
return (
|
||||||
|
<StyledSelectFile>
|
||||||
|
<Text className="editor-select-file_text">
|
||||||
|
{filesType === mailMergeAction ? (
|
||||||
|
getFileTypeTranslation()
|
||||||
|
) : (
|
||||||
|
<Trans i18n={i18n} i18nKey="SelectFilesType" ns="Editor">
|
||||||
|
Select files of type: {{ fileType: getFileTypeTranslation() }}
|
||||||
|
</Trans>
|
||||||
|
)}
|
||||||
|
</Text>
|
||||||
|
</StyledSelectFile>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
const insertImageActionProps = {
|
const insertImageActionProps = {
|
||||||
isImageOnly: true,
|
isImageOnly: true,
|
||||||
};
|
};
|
||||||
@ -644,16 +690,21 @@ const Editor = () => {
|
|||||||
isTablesOnly: true,
|
isTablesOnly: true,
|
||||||
searchParam: "xlsx",
|
searchParam: "xlsx",
|
||||||
};
|
};
|
||||||
|
const compareFilesActionProps = {
|
||||||
|
isDocumentsOnly: true,
|
||||||
|
};
|
||||||
|
|
||||||
const SelectFileHeader = () => (
|
const fileTypeDetection = () => {
|
||||||
<StyledSelectFile>
|
if (filesType === insertImageAction) {
|
||||||
<Text className="editor-select-file_text">
|
return insertImageActionProps;
|
||||||
{filesType === insertImageAction
|
}
|
||||||
? i18n.t("ImageFileType")
|
if (filesType === mailMergeAction) {
|
||||||
: i18n.t("MailMergeFileType")}
|
return mailMergeActionProps;
|
||||||
</Text>
|
}
|
||||||
</StyledSelectFile>
|
if (filesType === compareFilesAction) {
|
||||||
);
|
return compareFilesActionProps;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Box
|
<Box
|
||||||
@ -681,9 +732,7 @@ const Editor = () => {
|
|||||||
isPanelVisible={isFileDialogVisible}
|
isPanelVisible={isFileDialogVisible}
|
||||||
onClose={onCloseFileDialog}
|
onClose={onCloseFileDialog}
|
||||||
foldersType="exceptTrashFolder"
|
foldersType="exceptTrashFolder"
|
||||||
{...(filesType === insertImageAction
|
{...fileTypeDetection()}
|
||||||
? insertImageActionProps
|
|
||||||
: mailMergeActionProps)}
|
|
||||||
header={<SelectFileHeader />}
|
header={<SelectFileHeader />}
|
||||||
headerName={i18n.t("SelectFileTitle")}
|
headerName={i18n.t("SelectFileTitle")}
|
||||||
/>
|
/>
|
||||||
|
Loading…
Reference in New Issue
Block a user