diff --git a/Common/Common.csproj b/Common/Common.csproj
index 51cbd8f..7d198c6 100644
--- a/Common/Common.csproj
+++ b/Common/Common.csproj
@@ -10,6 +10,6 @@
AnyCPU;x64
-
+
\ No newline at end of file
diff --git a/Windows/Common/Core/Common.Windows.Core.csproj b/Windows/Common/Core/Common.Windows.Core.csproj
index 9cfc871..1394e23 100644
--- a/Windows/Common/Core/Common.Windows.Core.csproj
+++ b/Windows/Common/Core/Common.Windows.Core.csproj
@@ -20,8 +20,8 @@
-
-
+
+
\ No newline at end of file
diff --git a/Windows/Common/Core/LogFormatter.cs b/Windows/Common/Core/LogFormatter.cs
index c075772..6809480 100644
--- a/Windows/Common/Core/LogFormatter.cs
+++ b/Windows/Common/Core/LogFormatter.cs
@@ -50,6 +50,8 @@ public bool DebugLoggingEnabled
private const int sourcePathWidth = 60;
private const int remoteStorageIdWidth = 20;
+ private const int indent = -30;
+
///
/// Creates instance of this class.
///
@@ -88,24 +90,24 @@ private string ConfigureLogger()
public void PrintEnvironmentDescription()
{
// Log environment description.
- log.Info($"\n{"AppID:",-25} {appId}");
- log.Info($"\n{"Engine version:",-25} {typeof(IEngine).Assembly.GetName().Version}");
- log.Info($"\n{"OS version:",-25} {RuntimeInformation.OSDescription}");
- log.Info($"\n{".NET version:",-25} {RuntimeInformation.FrameworkDescription} {IntPtr.Size * 8}bit.");
- log.Info($"\n{"Package or app identity:",-25} {PackageRegistrar.IsRunningWithIdentity()}");
- log.Info($"\n{"Sparse package identity:",-25} {PackageRegistrar.IsRunningWithSparsePackageIdentity()}");
- log.Info($"\n{"Elevated mode:",-25} {new System.Security.Principal.WindowsPrincipal(System.Security.Principal.WindowsIdentity.GetCurrent()).IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator)}");
+ log.Info($"\n{"AppID:",indent} {appId}");
+ log.Info($"\n{"Engine version:",indent} {typeof(IEngine).Assembly.GetName().Version}");
+ log.Info($"\n{"OS version:",indent} {RuntimeInformation.OSDescription}");
+ log.Info($"\n{".NET version:",indent} {RuntimeInformation.FrameworkDescription} {IntPtr.Size * 8}bit.");
+ log.Info($"\n{"Package or app identity:",indent} {PackageRegistrar.IsRunningWithIdentity()}");
+ log.Info($"\n{"Sparse package identity:",indent} {PackageRegistrar.IsRunningWithSparsePackageIdentity()}");
+ log.Info($"\n{"Elevated mode:",indent} {new System.Security.Principal.WindowsPrincipal(System.Security.Principal.WindowsIdentity.GetCurrent()).IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator)}");
string sparsePackagePath = PackageRegistrar.GetSparsePackagePath();
if (File.Exists(sparsePackagePath))
{
- log.Info($"\n{"Sparse package location:",-25} {sparsePackagePath}");
+ log.Info($"\n{"Sparse package location:",indent} {sparsePackagePath}");
var cert = System.Security.Cryptography.X509Certificates.X509Certificate.CreateFromSignedFile(sparsePackagePath);
- log.Info($"\n{"Sparse package cert:",-25} Subject: {cert.Subject}, Issued by: {cert.Issuer}");
+ log.Info($"\n{"Sparse package cert:", indent} Subject: {cert.Subject}, Issued by: {cert.Issuer}");
}
else
{
- log.Info($"\n{"Sparse package:",-25} Not found");
+ log.Info($"\n{"Sparse package:", indent} Not found");
}
}
@@ -126,11 +128,12 @@ public async Task PrintEngineStartInfoAsync(EngineWindows engine)
public async Task PrintEngineDescriptionAsync(EngineWindows engine)
{
log.Info($"\n");
- log.Info($"\n{"File system root:",-25} {engine.Path}");
- log.Info($"\n{"Remote storage root:",-25} {remoteStorageRootPath}");
- log.Info($"\n{"AutoLock:",-25} {engine.AutoLock}");
- log.Info($"\n{"Outgoing sync, ms:",-25} {engine.SyncService.SyncIntervalMs}");
-
+ log.Info($"\n{"File system root:",indent} {engine.Path}");
+ log.Info($"\n{"Remote storage root:",indent} {remoteStorageRootPath}");
+ log.Info($"\n{"AutoLock:",indent} {engine.AutoLock}");
+ log.Info($"\n{"Outgoing sync, ms:",indent} {engine.SyncService.SyncIntervalMs}");
+ log.Info($"\n{"Shell extensions RPC enabled:",indent} {engine.ShellExtensionsComServerRpcEnabled}");
+ log.Info($"\n{"Max Transfer concurrent requests:",indent} {engine.MaxTransferConcurrentRequests}");
// Log indexing state. Sync root must be indexed.
await PrintIndexingStateAsync(engine.Path);
@@ -143,7 +146,7 @@ public async Task PrintEngineDescriptionAsync(EngineWindows engine)
private async Task PrintIndexingStateAsync(string path)
{
StorageFolder userFileSystemRootFolder = await StorageFolder.GetFolderFromPathAsync(path);
- log.Info($"\n{"Indexed state:",-25} {await userFileSystemRootFolder.GetIndexedStateAsync()}");
+ log.Info($"\n{"Indexed state:",indent} {await userFileSystemRootFolder.GetIndexedStateAsync()}");
}
public void LogMessage(string message)
diff --git a/Windows/Common/VirtualDrive/Common.Windows.VirtualDrive.csproj b/Windows/Common/VirtualDrive/Common.Windows.VirtualDrive.csproj
index 216a195..bef93a2 100644
--- a/Windows/Common/VirtualDrive/Common.Windows.VirtualDrive.csproj
+++ b/Windows/Common/VirtualDrive/Common.Windows.VirtualDrive.csproj
@@ -9,7 +9,7 @@
AnyCPU;x64
-
+
diff --git a/Windows/VirtualDrive/VirtualDrive.ShellExtension/VirtualDrive.ShellExtension.csproj b/Windows/VirtualDrive/VirtualDrive.ShellExtension/VirtualDrive.ShellExtension.csproj
index 989f8f8..4776056 100644
--- a/Windows/VirtualDrive/VirtualDrive.ShellExtension/VirtualDrive.ShellExtension.csproj
+++ b/Windows/VirtualDrive/VirtualDrive.ShellExtension/VirtualDrive.ShellExtension.csproj
@@ -19,7 +19,7 @@
-
+
diff --git a/Windows/VirtualDrive/VirtualDrive/AppSettings.cs b/Windows/VirtualDrive/VirtualDrive/AppSettings.cs
index a54f067..f480969 100644
--- a/Windows/VirtualDrive/VirtualDrive/AppSettings.cs
+++ b/Windows/VirtualDrive/VirtualDrive/AppSettings.cs
@@ -27,9 +27,14 @@ public class AppSettings : Settings
public double SyncIntervalMs { get; set; }
///
- /// Throttling max concurrent requests.
+ /// Throttling max of create/update/read concurrent requests.
///
- public int? MaxConcurrentRequests { get; set; }
+ public int? MaxTransferConcurrentRequests { get; set; }
+
+ ///
+ /// Throttling max of listing/move/delete concurrent requests.
+ ///
+ public int? MaxOperationsConcurrentRequests { get; set; }
///
/// Absolute or relative path of external COM server executable.
@@ -137,9 +142,14 @@ public static AppSettings ReadSettings(this IConfiguration configuration)
// Load product name from entry exe file.
settings.ProductName = FileVersionInfo.GetVersionInfo(assemblyLocation).ProductName;
- if (!settings.MaxConcurrentRequests.HasValue)
+ if (!settings.MaxTransferConcurrentRequests.HasValue)
+ {
+ settings.MaxTransferConcurrentRequests = 6;
+ }
+
+ if (!settings.MaxOperationsConcurrentRequests.HasValue)
{
- settings.MaxConcurrentRequests = int.MaxValue;
+ settings.MaxOperationsConcurrentRequests = int.MaxValue;
}
return settings;
diff --git a/Windows/VirtualDrive/VirtualDrive/Program.cs b/Windows/VirtualDrive/VirtualDrive/Program.cs
index 0288e6b..d35e95d 100644
--- a/Windows/VirtualDrive/VirtualDrive/Program.cs
+++ b/Windows/VirtualDrive/VirtualDrive/Program.cs
@@ -151,7 +151,8 @@ private static async Task RunEngine()
Engine.SyncService.SyncIntervalMs = Settings.SyncIntervalMs;
Engine.AutoLock = Settings.AutoLock;
- Engine.MaxConcurrentRequests = Settings.MaxConcurrentRequests.Value;
+ Engine.MaxTransferConcurrentRequests = Settings.MaxTransferConcurrentRequests.Value;
+ Engine.MaxOperationsConcurrentRequests = Settings.MaxOperationsConcurrentRequests.Value;
Engine.ShellExtensionsComServerRpcEnabled = Settings.ShellExtensionsComServerRpcEnabled; // Enable RPC in case RPC shaell extension handlers, hosted in separate process.
// Set the remote storage item ID for the root item. It will be passed to the IEngine.GetFileSystemItemAsync()
diff --git a/Windows/VirtualDrive/VirtualDrive/VirtualDrive.csproj b/Windows/VirtualDrive/VirtualDrive/VirtualDrive.csproj
index 7d5e242..6f304d6 100644
--- a/Windows/VirtualDrive/VirtualDrive/VirtualDrive.csproj
+++ b/Windows/VirtualDrive/VirtualDrive/VirtualDrive.csproj
@@ -40,7 +40,7 @@ This is an advanced project with ETags support, Microsoft Office documents editi
-
+
diff --git a/Windows/VirtualDrive/VirtualDrive/appsettings.json b/Windows/VirtualDrive/VirtualDrive/appsettings.json
index d9e9ada..327970e 100644
--- a/Windows/VirtualDrive/VirtualDrive/appsettings.json
+++ b/Windows/VirtualDrive/VirtualDrive/appsettings.json
@@ -30,8 +30,12 @@
"SyncIntervalMs": 10000,
- // Maximum number of concurrent requests to remote storage. If null then int.Max value is used.
- "MaxConcurrentRequests": null,
+ // Maximum number of create/update/read concurrent requests to remote storage. If null then 6 value is used.
+ "MaxTransferConcurrentRequests": 6,
+
+
+ // Maximum number of listing/delete/move concurrent requests to remote storage. If null then int.Max value is used.
+ "MaxOperationsConcurrentRequests": null,
// Automatically lock the file in the remote storage when a file handle is being opened for writing, unlock on close.
diff --git a/Windows/WebDAVDrive/WebDAVDrive.ShellExtension/WebDAVDrive.ShellExtension.csproj b/Windows/WebDAVDrive/WebDAVDrive.ShellExtension/WebDAVDrive.ShellExtension.csproj
index b331798..0c70a44 100644
--- a/Windows/WebDAVDrive/WebDAVDrive.ShellExtension/WebDAVDrive.ShellExtension.csproj
+++ b/Windows/WebDAVDrive/WebDAVDrive.ShellExtension/WebDAVDrive.ShellExtension.csproj
@@ -12,7 +12,7 @@
IT HIT LTD.
-
+
diff --git a/Windows/WebDAVDrive/WebDAVDrive/AppSettings.cs b/Windows/WebDAVDrive/WebDAVDrive/AppSettings.cs
index 5ccecad..f297767 100644
--- a/Windows/WebDAVDrive/WebDAVDrive/AppSettings.cs
+++ b/Windows/WebDAVDrive/WebDAVDrive/AppSettings.cs
@@ -35,9 +35,14 @@ public class AppSettings : Settings
public double SyncIntervalMs { get; set; }
///
- /// Throttling max concurrent requests.
+ /// Throttling max of create/update/read concurrent requests.
///
- public int? MaxConcurrentRequests { get; set; }
+ public int? MaxTransferConcurrentRequests { get; set; }
+
+ ///
+ /// Throttling max of listing/move/delete concurrent requests.
+ ///
+ public int? MaxOperationsConcurrentRequests { get; set; }
///
/// URL to get a thumbnail for Windows Explorer thumbnails mode.
@@ -117,9 +122,14 @@ public static AppSettings ReadSettings(this IConfiguration configuration)
// Load product name from entry exe file.
settings.ProductName = FileVersionInfo.GetVersionInfo(assemblyLocation).ProductName;
- if (!settings.MaxConcurrentRequests.HasValue)
+ if (!settings.MaxTransferConcurrentRequests.HasValue)
+ {
+ settings.MaxTransferConcurrentRequests = 6;
+ }
+
+ if (!settings.MaxOperationsConcurrentRequests.HasValue)
{
- settings.MaxConcurrentRequests = int.MaxValue;
+ settings.MaxOperationsConcurrentRequests = int.MaxValue;
}
return settings;
diff --git a/Windows/WebDAVDrive/WebDAVDrive/Program.cs b/Windows/WebDAVDrive/WebDAVDrive/Program.cs
index 81593da..8e94e09 100644
--- a/Windows/WebDAVDrive/WebDAVDrive/Program.cs
+++ b/Windows/WebDAVDrive/WebDAVDrive/Program.cs
@@ -178,7 +178,8 @@ private static async Task RunEngine()
Engine.SyncService.SyncIntervalMs = Settings.SyncIntervalMs;
Engine.AutoLock = Settings.AutoLock;
- Engine.MaxConcurrentRequests = Settings.MaxConcurrentRequests.Value;
+ Engine.MaxTransferConcurrentRequests = Settings.MaxTransferConcurrentRequests.Value;
+ Engine.MaxOperationsConcurrentRequests = Settings.MaxOperationsConcurrentRequests.Value;
Engine.ShellExtensionsComServerRpcEnabled = Settings.ShellExtensionsComServerRpcEnabled; // Enable RPC in case RPC shaell extension handlers, hosted in separate process.
// Print console commands.
diff --git a/Windows/WebDAVDrive/WebDAVDrive/WebDAVDrive.csproj b/Windows/WebDAVDrive/WebDAVDrive/WebDAVDrive.csproj
index 172878f..4268310 100644
--- a/Windows/WebDAVDrive/WebDAVDrive/WebDAVDrive.csproj
+++ b/Windows/WebDAVDrive/WebDAVDrive/WebDAVDrive.csproj
@@ -38,7 +38,7 @@
-
+
diff --git a/Windows/WebDAVDrive/WebDAVDrive/appsettings.json b/Windows/WebDAVDrive/WebDAVDrive/appsettings.json
index c1ae526..9e22525 100644
--- a/Windows/WebDAVDrive/WebDAVDrive/appsettings.json
+++ b/Windows/WebDAVDrive/WebDAVDrive/appsettings.json
@@ -47,8 +47,12 @@
"SyncIntervalMs": 10000,
- // Maximum number of concurrent requests to remote storage. If null then int.Max value is used.
- "MaxConcurrentRequests": 6,
+ // Maximum number of create/update/read concurrent requests to remote storage. If null then 6 value is used.
+ "MaxTransferConcurrentRequests": 6,
+
+
+ // Maximum number of listing/delete/move concurrent requests to remote storage. If null then int.Max value is used.
+ "MaxOperationsConcurrentRequests": null,
// Automatically lock the file in remote storage when a file handle is being opened for writing, unlock on close.