IT Hit User File System for .NET Release History
v8.3.27213.0
November 18, 2024- WebDAV Drive sample for Windows now runs on MAUI. No development certificate installation is required any more. Sample custom protocol to open, edit, lock and unlock documents from web page implemented. WebDAVDrive Package project removed.
- Automatic locking is now supported for Adobe Acrobat Pro. The PDF file is now locked/unlocked automatically when file is opened/closed if Engie.AutoLock is set to true.
- AutoLockFilter provided on Windows. Now calls from Windows Explorer and search protocol host can be ignored and IFileSystemItem.LockAsync() and IFileSystemItem.UnlockAsync() not called.
- IClientNotifications.ExecuteVerb() method added that can execute a shell verb, such as open, edit, print, openas.
- IClientNotifications.LockAsync(), IClientNotifications.UnlockAsync() failed if folders in item path were not populated. Now these methods populate folders in item path automatically prior executing the commend.
- Remote storage item ID (IOperationContext.RemoteStorageItemId) was null in operation context in IFileSystemItem.LockAsync(), IFileSystemItem.UnlockAsync(), IFile.WriteAsync() when saving Microsoft Office, documents, AutoCAD caocuments and during outgoing synchronization execution. This bug s now fixed.
- ICustomDataWindows moved from ITHit.FileSystem.Windows.ExternalDataManager to ITHit.FileSystem.Windows namespace.
- IStorageProviderCopyHook moved from ITHit.FileSystem.Windows.ShellExtension.Interop to ITHit.FileSystem.Windows.ShellExtension.
v8.2.27026.0
August 19, 2024- The Refresh button in Windows Explorer can now be used to refresh folder content if server push synchronization is disabled. EngineWindows.FolderInvalidationIntervalMs property is provided to set folder invalidation period for this purpose.
- ItemsChanging even is provided on Windows platform. The new event fires before every call of Engine interface methods.
- Multiple changes in ItemsChanged event on Windows platform: ItemChangedEventHandler renamed to ItemsChangeEventHandler. ItemsChangeEventArgs.Parent property added, containing the parent item data during population and creation events. ItemChangeEventType is renamed to NotificationTime and moved from ITHit.FileSystem.Windows to ITHit.FileSystem. ChangeEventItem moved from ITHit.FileSystem.Windows to ITHit.FileSystem. IItemsChange.Source property provided, indicating if the operation was initiated by the client or by the remote storage.
- Authentication methods provided on Windows platform: IEngine.IsAuthenticatedAsync() and EngineWindows.AuthenticateAsync() methods. The new methods are now called before every Engine method.
- Synchronization modes implementation refactored in WebDAV Drive sample for Windows. IncomingSyncMode in can now be Off, SyncId, CRUD, TimerPooling, Auto.
- ITransferDataResultContext.ReturnData() renamed to ReturnDataAsync() and is now asynchronous.
- The Microsoft Office documents on Windows platform in WebDAV Drive sample are now automatically unlocked if the lock file (owner file) is not found during lock refresh.
- Search by remote storage item ID did not work when receiving notifications from remote storage on non-English Windows platforms. This bug is now fixed.
- In WebDAV Drive sample on Windows platform notifications from server about folder being moved and the target folder being offline or the folder being updated received via remote storage monitor were filtered and did not reflect in user file system. This bug is now fixed.
- On Windows platform if an error was reported using IResultContext.ReportStatus() method call during IFile.ReadAsync() or IFolder.getChildrenAsync() call the Engine erroneously reported successful result in the Engine.ItemsChanged event. Now the unsuccessful result is properly reported.
- ShellExtensionsComServerExePath and ShellExtensionsComServerRpcEnabled settings removed from WebDAV Drive sample.
v8.1.26901.0
June 5, 2024- Metadata eTag received from remote storage is now set for every file system item in WebDAV Drive sample on Windows platform.
- IFileMetadata now passed into IFile.ReadAsync() method.
- On Windows platform if file is dehydrated and file content changes received from remote storage in GetChangesAsync(), ItemsChanged event is not fired and Windows Explorer is not updated. Now the event is fired for dehydrated files and Windows Explorer is updated properly.
- Development certificate in samples is updated on Windows platform.
- On Windows platform move after creation may cause two concurrent IFolder.CreateFolderAsync() calls. Now creation blocks any other calls until creation is completed.
- LocalServer class is replaced with LocalServerIntegarated and LocalServerRpc classes for Windows platform.
- Custom remote storage ID column is added in WebDAV Drive sample on Windows platform.
- On Windows platform tray application context menu does not work in samples. Now this bug is fixed.
- Remote storage monitor in Virtual File System sample and Virtual Drive sample on Windows platform throw exception when folder was deleted when application was not running, on application start. Now this bug is fixed.
- Exception during incoming synchronization on Windows platform when the folder is deleted on the client when the app is not running, during the app start: FileNotFoundException: The system cannot find the file specified. (0x80070002). This bug is now fixed.
v8.1.26791.0 Beta2
April 26, 2024- Exception WebDAVFileProviderExtension "Microsoft.macOS: Failed to initialize the VM" on macOS 14.4 and later. This bug is now fixed.
- The Win32LastModifiedTime custom WebDAV property did not serialize correctly on-English macOS. The IT Hit WebDAV Server samples are throwing FormatException "String '' was not recognized as a valid DateTime." This bug is now fixed.
- Cookies authentication is now supported in WebDAV Drive sample on macOS in host application.
- Remote storage monitor connected only to the first storage in WebDAV Drive sample for macOS if more than one drive was mounted. This bug is now fixed.
v8.1.26727.0 Beta2
March 28, 2024- WebDAV Drive sample on macOS now supports cookies authentication.
- WebDAV Drive sample on macOS now provides custom protocol "fuse:" implementation.
- All Windows platform samples now run on .NET 8.
- Challenge-response authentication dialog (Basic, Digest, NTLM, Kerberos) is replaced with system authentication dialog in WebDAV Drive sample on Windows platform.
- On Windows platform the IFileSystemItem.GetPropertiesAsync() and IFileSystemItem.GetThumbnailAsync() were called only if remote storage ID was set for the item. Now these methods are called for any item.
- On Windows platform if the IFileSystemItem.GetPropertiesAsync() is called before the Engine is has started, the ArgumentNullException is thrown. Now the IFileSystemItem.GetPropertiesAsync() is never called before the Engine start.
- In WebDAV Drive sample on Windows if web sockets failed to connect, the client was trying to reconnect to server infinitely. Now web sockets try to re-connnect only if first connection was successful. Otherwise RemoteStorageMonitorBase.StartAsync() throws exception. If SyncID or CRUDE web sockets are not supported, the timer pooling is used now in WebDAV Drive sample.
- If remote storage did not support resource-id property on the root item, the WebDAV Drive sample was throwing WebDavException "resource-id or parent-resource-id is not found. Your WebDAV server does not support collection synchronization. Upgrade your .NET WebDAV server to v13.2 or Java WebDAV server to v6.2 or later version." On sample start. Now if resource-id is not supported on the root item, the sample runs with CRUDE remote storage monitor or timer pooling.
- In WebDAV Drive sample for Windows, if remote storage did not return resource-id on files and folders creation exception was thrown. Now this bug is fixed.
- PreferredIncomingSyncMode is added to the WebDAV Drive settings on Windows platform. Allowed values are: SyncId, Disabled, TimerPooling.
- In Windows platform samples if any file is read-only, unmounting failed. The read-only attribute is now removed during unmounting.
v8.1.26224.0 Beta2
March 12, 2024- Engine on macOS platform now supports setting capabilities for each item. IFileSystemItemMetadataMac.Capabilities property is added. Now the implementer can specify if an item can be moved, renamed, deleted, excluded from synchronization as well as if applications can read and write the item.
- WebDAV Drive sample on macOS now supports pooling synchronization. If collection synchronization is not supported (Sync ID) by the remote storage, CRUDE web sockets + pooling will be used instead.
- EngineMac now protects read-only items from writing. If the file is locked by third-party user the item is protected from updates.
- EngineWindows.ItemsChanged event is provided. The post-event is fired after each item creation, update, delete and move operations. The event provides information about synchronization direction, type of the operation, result of the operation and number of items updated.
- Microsoft Office merging is now supported on Windows platform. The Utilities.TryNotifyUpdateAvailable() method can be used to merge Microsoft Word and PowerPoint documents.
- Metadata can now be updated separately from content using IFileSystemItemMetadata.MetadataETag and IFileMetadata.ContentETag properties.
- On Windows platform custom properties can now be accessed via IOperationContext.Properties of the IOperationContext parameter. All IFile and IFolder methods now provide IOperationContext parameter.
- Pooling synchronization mode is now provided by the EngineWindows. The EngineWindows.SyncService.IncomingSyncMode can now be used to the sync mode.
- WebDAV Drive sample on Windows now supports Sync ID synchronization, CRUDE synchronization and pooling synchronization modes.
v8.0.26019.0 Beta
February 8, 2024- Virtual File System sample on macOS can now synch items from remote storage to client using pooling, if Sync ID algorithm is not supported by the server.
- EngineWindows.ItemsChanged event is provided. Now every incoming and outgoing creation, update, delete, move lock and unlock triggers the ItemsChanged event. IChangedItem.BeforeAction and IChangedItem.AfterAction events removed. Properties can not be updated inside ItemsChanged event.
- If a Microsoft Word or PowerPoint document is open for editing nad is not locked, it can now merge with incoming updates. AppHelper project edded that helps merging MS Office documents.
- Virtual File System sample on Windows refactored to reference items by path.
- All IFile and IFolder methods not provide custom list of properties associated with every file/folder (ICustomData) in IOperationContext.Property parameter of every method.
- EngineWindows.ServerNotifications() overloaded method added that returns IServerNotifications by remote storage ID on Windows platform.
- IServerNotifications.MoveTo() overloaded method added on Windows platform that accepts new target remote storage ID and new file name. It creates and deletes items automatically if moved outside of the synchronised folders.
- Memory violation exception (Win32Exception (998)) during GetUsnByPathAsync() method call on Windows platform. This bug is now fixed.
- IContext.FileNameHint returns path that starts with "\?\" when GetFileSystemItemAsync() is called from from outgoing sync service on Windows platform. Now IContext.FileNameHint is always returned without "\?\" prefix.
- ILock.LockAsync()/UnlockAsync() was throwing NotSupportedException if ILock was not implemented on Windows platform. Now NotImplementedException is thrown.
- ErrorStatusFilter on Windows platform can now ignore in-sync files during incoming sync. Error state that was set during previous updates is now cleared when the item is dehydrated (only if item is in-sync) or on content update.
v7.3.24116.0
December 14, 2023- WebDAV Drive sample for macOS can now show login user interface in macOS Finder. UI Extension provider is implemented.
- EngineMac.IsAuthenticated() virtual method provided, indicating if user is authenticated.
- IFile.WriteAsync() IFolder.WriteAsync() first parameter type changed to IFileSystemBasicInfo. All file and folder info can now be nullable.
v7.2.23868.0
October 16, 2023- Locking is now supported on macOS. ILock interface is moved to ILock to ITHit.FileSystem.
- Automatic locking implemented in WebDAV Drive for macOS. When a document is opened in macOS Finder it is automatically locked. The document is automatically unlocked when closed.
- Manual locking added to WebDAV Drive for macOS. A document can now be locked and unlocked via macOS Finder context menu.
- Error message is displayed in Windows samples if UserFileSystemRootPath is not indexed.
- IFileSystemItemMetadataMac now provides UserInfo property to set context menu and tooltip to the icon.
- IFileSystemItemMetadataMac now provides Decorations property to set item icon.
v7.1.23701.0
September 4, 2023- "Do Not Sync"/"Sync" menu is now available on macOS.
- WebDAV Drive sample on macOS did not show thumbnails. This bug is now fixed.
- Unused code deleted in macOS context menu implementation.
v7.1.23463.0 Beta
August 23, 2023- Method added to find items by remote storage ID in Windows version: Placeholders.TryFindByRemoteStorageId().
v7.1.23457.0 Beta
August 17, 2023- ISynchronizationCollection.GetChangesAsync() method implementation refactored in WebDAV Drive sample on Windows. Content and data is is now updated only if eTag is different from the one stored on the client.
- If file or folder was created under the pinned folder changes were ignored. Now this bug is fixed.
- IChangedItem interface now provides BeforeAction and AfterAction, called before and after change is applied in user file system on the client machine. This allows adding a custom processing code for each item, such as update of custom properties. savePropertiesAction parameter is removed from ProcessChangesAsync() method.
- The Engine incorrectly called ISynchronizationCollection.GetChangesAsync() passing false for depth parameter on initial sync-token request on Windows. Now true is passed for the depth parameter.
- WebDAV Drive sample on Windows may throw "Failed to set remote storage item id" Win32Exception "The operation failed due to a conflicting cloud file property lock.". This bug is now fixed.
- WebDAV Drive sample on Windows may throw "Fetch data failed" FileLoadException "The process cannot access the file because it is being used by another process. (0x80070020)". This bug is now fixed.
- WebDAV Drive sample on Windows may throw "Processing folder failed" DirectoryNotFoundException "Could not find a part of the path". This bug is now fixed.
v7.1.23321.0 Beta
July 28, 2023- Remote storage monitor queue processing refactored in WebDAV Drive for Windows and macOS samples. Message queue is now optimized to send only minimum number of changed requests to remote storage. The sample code is unified between Windows and macOS samples.
- WebDAV Drive sample for macOS now requests changes from remote storage on application start and on web sockets reconnection.
v7.1.23216.0 Beta
July 24, 2023- IEngine.GetFileSystemItemAsync() method signature changed. Path parameter removed (path is not available on iOS & macOS). The context parameter added. On Windows platform the path can now be extracted by casting context to IContextWindows.
- IFileSystemItem.MoveToCompletionAsync() and IFileSystemItem.DeleteCompletionAsync() methods moved to the a new IfileSystemItemWindows interface. IFileSystemItem.GetMetadataAsync() moved to a new IFileSystemItemMac interface.
- Drive registration/unregistration code refactored on macOS.
- appsettings.json is now linked in File Provider extension project from Container application project. AppGroupId removed from AppGroupSettings.
- In WebDAV Drive sample on macOS file content was buffered in memory during download (hydration) and upload. Progress does not show on macOS during download. Now this bug is fixed.
- Context menu did not show on macOS. Now this bug is fixed.
- File provider extension did not sign on macOS. Now the extension is properly signed.
- ProcessChangesAsync() call optimized in WebDAV Drive sample for Windows. Now only first and last notifications from server are processed, reducing number of requests to the remote storage.
v7.0.22362.0 Beta
June 8, 2023- On Windows platform long file names or long remote storage item ID could cause the ERROR_CLOUD_FILE_METADATA_CORRUPT "The cloud file metadata is corrupt and unreadable." error in some scenarios. This bug is now fixed.
- On Windows platform the Engine passes null to GetFileSystemItemAsync() for rootRemoteStorageItemId parameter instead of actual remote storage ID. This bug is now fixed.
- Engine.Path was readonly. Now this property is read-write.
v7.0.22286.0 Beta
June 5, 2023- Long file name name and long remote storage ID combination may cause the ERROR_CLOUD_FILE_METADATA_CORRUPT "The cloud file metadata is corrupt and unreadable." error. This bus is now fixed.
- Default constructor for EngineWindows class is provided.
v7.0.22272.0 Beta
June 1, 2023- In WebDAV Drive sample on Windows every notification from remote storage generated GetChangesAsync() call. Now the request to the remote storage is sent only if the item exists in the user file system.
- In WebDAV Drive sample on Windows, if item was deleted when saving properties in ProcessChangesAsync() exception was thrown. Now if item is not found the properties save call is ignored.
- savePropertiesAction parameter in ProcessChangesAsync() is now optional.
- Remote storage ID was not passed during initial call to IEngine.GetFileSystemItemAsync(). Virtual File System sample throw ArgumentNullException "Value can not be null". Now Remote storage ID is properly passed to IEngine.GetFileSystemItemAsync().
- Sync-token initial call was done after connecting transfer callbacks. This could cause listing folder content to be done before initialization of sync-token. Now sync-token is initiated before connecting callbacks.
- Developer certificate supplied with Windows samples updated .
v7.0.22158.0 Beta
May 25, 2023- On Windows platform sync-token is now initialized on Engine start if the root folder implements ISynchronizationCollection interface. The Engine calls GetChangesAsync() on first start.
- On Windows platform items were set into conflict state during initial synchronization on WebDAV Drive sample start. Item creation during incoming sync may interfere with same item creation by other threads, such as folder listing. Now if item already exists, the item is not set into a conflict state. The conflict state is determined using eTag during outgoing synchronization.
- On Windows platform IServerCollectionNotifications.ProcessChangesAsync() and IServerNotifications.DeleteAsync() methods deleted not in-sync items (new, moved and updated items). Now if such items are set to conflict state in case of the ProcessChangesAsync() call.
- On Windows platform if item is blocked during deletion by a concurrent thread, the incoming sync did not display conflict icon. Now this bug is fixed.
- On Windows platform, in case item already exists, the incoming sync did not display conflict icon. Now this bug is fixed.
- On Windows platform setting conflict state during move may cause exceptions in IServerCollectionNotifications.ProcessChangesAsync() call if source did not exit. Now this bug is fixed.
- EngineWindows.UninstallCleanupAsync() method is replaced with a path to data storage to be deleted on uninstall, The data storage path is provided in EngineWindows.DataPath property.
- Remote storage monitor in WebDAV Drive sample on Windows did not dispose WebSockets if server is disconnected. Now WebSockets are properly disposedovided sync toke.
- CancellationToken parameter now added to IServerCollectionNotifications.ProcessChangesAsync() and ISynchronizationCollection.GetChangesAsync() methods.
- Logging refactored. IEngine interface does not inherit ILogger any more. ILogger is now available via IEngine.Logger property.
v7.0.22106.0 Beta
May 18, 2023- High-performance synchronization based on sync-token algorithm is now implemented in WebDAV Drive sample. Full synchronization (IncomngFullSync class) removed removed from WebDAV Drive sample.
- Class reference provided for ITHit.FileSystem.Mac namespace.
v7.0.22091.0 Beta
May 16, 2023- The Engine for macOS (ITHit.FileSystem.Mac) now supports .NET 7.
- Samples for macOS now run on .NET 7.
- Engine.SetRemoteStorageRootItemId() method is now available in both on macOS and Windows platforms.
- Synchronization from remote storage to user file system is now unified between Windows and macOS platforms. Synchronization performance improved.
- Search in the User Files System by Remote Storage ID provided on Windows platform.
- If synchronization from remote storage to user file system failed on Windows platform, the conflict icon is now displayed in Windows Explorer.
- ServerNotifications class is provided on macOS platform. Synchronization on macOS can now be started by calling ServerNotifications.ProcessChangesAsync() method call.
v6.4.21218.0
April 1, 2023- COM shell extensions registration sample code refactored.
- Class reference documentation updated.
v6.4.21210.0
March 27, 2023- IStorageProviderCopyHook interface is now supported. You can now limit copy, move, delete, hydrate and dehydrate operations on Windows platform by implementing IFolderWindows.GetFolderOperationsAsync().
v6.3.20496.0
February 28, 2023- Synchronization based on sync token is now supported on macOS. ISynchronizationCollection interface provided on macOS.
- RemoteStorageParentItemId property is added to IFileSystemItemMetadata interface. Now each item parent on macOS can be properly identified.
- WebDAV Drive sample for macOS displayed an error when a file or folder were moved. The move operation is now fully supported.
v6.2.20461.0
January 18, 2023- WebDAV Drive sample for MacOS added.
- Added static methods Hydrate(), Dehydrate(), TryHydrate(), TryDehydrate() to PlaceholderFile class.
- Updated Newtonsoft.Json to version 13.0.2 for tests projects in source code version.
v6.1.20210.0
October 10, 2022- Remote storage notifications did not update the user file system on Mac OS. This bug is now fixed.
- WebDAV Drive sample is now using the latest version of WebDAV Client Library for .NET.
v6.1.19907.0 Beta
September 26, 2022- If an item is moved in the remote storage and the target folder is offline or not populated in user file system, the source item did not delete in the WebDAV Drive. This bug is now fixed.
- WebSockets notifications do not work with cookies authentication and MS-OFBA authentication in WebDAV Drive sample. Now cookies are passed to sockets connection.
- Instance ID header is now passed to server in WebSockets in InstanceId header.
- Locks and eTag storage refactored in WebDAV Drive and Virtual Drive samples.
- Expired locks remain in the user file system in WebDAV Drive and Virtual Drive samples. This bug is now fixed.
v6.1.18982.0 Beta
September 14, 2022- System.ArgumentNullException: Value cannot be null. (Parameter 'folderId') in OutgoingSync when a folder is created and than deleted. This bug is now fixed.
- Full incoming sync is provided for created, deleted and updated items in WebDAV Drive sample. Updated items are detected based on eTag.
- SyncService.BeforeStateChanged event is provided.
- Windows Explorer did not update UI in case an item is updated in the remote storage and notification received via remote storage monitor in all samples. This bug is now fixed.
- Windows Explorer did is not update UI in case an item is locked or unlocked in the remote storage and notification received via remote storage monitor in all WebDAV Drive sample. This bug is now fixed.
v6.1.18304.0 Beta
September 9, 2022- Errors can now be reported in IFile.ReadAsync(), IFolder.GetChildrenAsync(), IFileSystemItem.MoveToAsync(), IFileSystemItem.DeleteAsync() methods by throwing the StatusException or by calling IResultContext.ReportStatus() method with CloudFilesStatus structure.
- IResultContext.ReportStatus() and IConfirmationResultContext.ReturnErrorResult() methods signature changed. Errors can now be reported by passing CloudFileStatus to this method.
- Virtual Drive and WebDAV Drive samples now check minimum required Windows version when registering a sparse package.
- WebDAV Drive sample Web sockets client implementation failed to parse events generated by samples provided with IT Hit WebDAV Server Library for Java. Case sensitive comparison of events names was used in web sockets client implementation. Now this bug is fixed.
v6.1.18092.0 Beta
September 3, 2022- If timeout occurs or if the OperationCanceledException is thrown, the Engine did not start synchronization after stopping. This bug is now fixed.
- InvalidOperationException: "Operations that change non-concurrent collections must have exclusive access" may be thrown during synchronization. This bug is now fixed.
- If the SyncService is stopped, the synchronisation can start again if SyncService.StopSync() was called when the synchronization was still running. This bug is now fixed.
- Adding static methods to PlaceholderItem: SetErrorStatus(), GetErrorStatus(), TrySetErrorStatus(), TrySetErrorStatus(), UpdateUI().
- Adding ErrorStatusFilter. All samples now filter update operations for items in error state.
- Filters moved from ITHit.FileSystem to ITHit.FileSystem.Windows.
v6.1.17328.0 Beta
August 22, 2022- Item conflict status can now be set on Windows. SetErrorStatus(), TrySetErrorStatus(), GetErrorStatus() and TryGetErrorStatus() methods added to PlaceholderItem class. The status can propagate to upper folder levels in Windows Explorer.
- If client and server eTags do not match, the WebDAV Drive sample can now display conflict icon in Status column.
- If the StorageProviderSyncRootInfo.ShowSiblingsAsGroup = true during the root registration, the root item is shown in the not in-sync state. Now the root item is set to in-sync state during EngineWindows.StartAsync() call.
- Slow performance and thread starvation when creating new items and EngineWindows.MaxTransferConcurrentRequests is set to 2 and OutgoingSync is triggered. Now this bug is fixed.
v6.0.16962.0 Beta
August 16, 2022- Slow performance and thread starvation when creating new items and EngineWindows.MaxTransferConcurrentRequests is set to 1. Now this bug is fixed.
v6.0.16897.0 Beta
August 12, 2022- The create/update/read operations and list/move/delete operations can now be limited separately. The EngineWindows.MaxConcurrentRequests property is now replaced by 2 properties: MaxTransferConcurrentRequests and MaxOperationsConcurrentRequests.
- Maximum number of concurrent create, update and read requests are now limited by the EngineWindows. MaxTransferConcurrentRequests property and is set to 6 by default.
- Maximum number of concurrent list, move and delete requests are now limited by the EngineWindows. MaxOperationsConcurrentRequests property and is set to Int.MaxValue by default.
- Slow hydration and creation performance with EngineWindows.MaxConcurrentRequests property set to default (Int.MaxValue). This bug is now fixed.
v6.0.16872.0 Beta
August 3, 2022- Now you can set number of concurrent requests to the remote storage using Engine.MaxConcurrentRequests property. Number of concurrent requests is now set to 6 in WebDAV Drive sample by default.
- The EngineWindows.ShellExtensionsComServerRpcEnabled property is provided to enable/disable gRpc channel for shell extension handlers. If you are using RPC shell extension handlers in the external COM exe server, you must explicitly set this property to true.
- New hydration methods added to the PlacholderFile class: TryHydrate(), TryDehydrate(), TryHydrationRequired(), TryDehydrationRequired(). Refactored Hydrate(), Dehydrate(), HydrationRequired(), DehydrationRequired() methods, removed in v5.6 release are now made public.
- PlaceholderItem.TryGetState() method added. PlaceholderItem.GetState() method, removed in v5.6 release is now made public.
- AccessViolationException was thrown when app was running with identity under heavy load. Now this bug is fixed.
- Shell extensions did not register when WebDAV Drive and Virtual Drive samples were running without identity. Now this bug is fixed. Samples can now be configured to run without identity by commenting-out sparse package registration.
- Sample sync root registration code and sparse package registration code refactored.
v5.6.16439.0
July 16, 2022- Performance of creating files/folder in Outgoing Sync and User File System monitor improved. Items were created by a single thread. “Parent item not synced yet” message in debug mode was logged. Now items are created in parallel threads.
- If StorageProviderItemProperty.IconResource or StorageProviderItemProperty.Value properties are empty - Windows Explorer crashes. This bug is now fixed.
- iconsFolderPath parameter removed in CustomStateHandlerIntegratedBase constructor.
v5.6.16427.0
July 14, 2022- If a IFolderMetadata item does not contain FileAttribute.Directory attribute when passed to IFolderListingResultContext.ReturnChildrenAsync(), the item did not delete. The item type is detected incorrectly. Now the item type is detected properly regardless of the FileAttribute.Directory attribute set on creation.
- In WebDAV Drive sample, it the item is not found in the remote storage (already deleted) the sample code always sets the resultContext.SetInSync = false causing the Engine to repeat the detele operation. Now this bug is fixed.
- Tray app in WebDAV Drive sample now properly reflects synchronizing and paused state. Tray application fixed and refactored.
v5.6.16415.0
July 9, 2022- Upload created folders with offline attribute (with cloud icon). Now the folders are created without offline attribute (with green checkbox on white background).
- Sync status did not refresh after folders upload. Now the folder status is refreshed after the upload.
- If IFileSystemItem.GetPropertiesAsync() returns FileSystemItemPropertyData with empty value, Windows Explorer crushes. Now the empty or null vaues are replaced with "n/a".
- Lock state icon does not refresh in Windows Explorer in WebDAV Drive sample after the item is locked or unlocked. Now the icon is properly refreshed.
- If thumbnail IFileSystemItem.GetThumbnailAsync() throw NotImplementedException the error "Thumbnail for is not implemnted" was logged. Now the debug message is logged.
v5.6.16382.0
July 8, 2022- IFolder.GetChildrenAsync() is called on every app start, including if the sample app was exited with Spacebar ("Reboot" scenario). Registrar.IsRegisteredAsync() method always returned false, causing every sample app start registering file system. Now this bug is fixed.
- If exception parameter was not specified in ILogger.LogError() method call, the sample code did not log the error. This bug is now fixed.
- If EngineWindows is disposed without stopping the engine, the synchronization service did not stop, causing exceptions. This bug is now fixed.
- IOException The file already exists may be thrown by Virtual File System Sample and Virtual Drive sample in IFolder.CreateFileAsync() and IFolder.CreateFolderAsync() methods when deleting items if parent is moved to the recycle bin while Engine was still processing the item. Now such items are ignored.
- "The engine must be running" exception may be thrown by the Engine when stopping. This bug is now fixed.
- IOException "Can not create because the file or directory with the same name already exsts." can be thrown when calling IFolderListingResultContext.ReturnChildrenAsync() in Virtual File System and Virtual Drive samples if the directory is deleted in the remote storage while the listing is performed. This bug is now fixed.
- "Missing item failed to save" FileNotFoundException: The system cannot find the file specified. (0x80070002) error may be thrown when deleting items. This bug is now fixed.
- UnautorizedAccessException: "Access is denied" may be thrown when deleting an item and the parent folder is deleted before the child item. This bug is now fixed.
- "Getting deleted folder failed" DirectoryNotFoludException may be thrown during delete. Now this bug is fixed.
- Outgoing Sync service did not stop on Engine.StopAsync() call. This bug is now fixed.
- Attributes parameter is removed from IEngine.FilterAsync() method.
- TimeSpan formatting unified in logging.
- LocalServer class is moved to ITHit.FileSystem.Windows.ShellExtension namespace.
v5.6.16274.0 Beta 2
July 6, 2022- Folders with 8 characters may fail to delete if MsOfficeFilter is applied. The IFileSystemItem.DeleteCompletionAsync() is not called. This bug is now fixed.
- IEngine.FilterAsync() now provides FileSystemItemType parameter.
- FileNotFoundException may be thrown in IFileSystemItem.GetLockModeAsync() method implementation during deletion in Virtual Drive and WebDAV Drive samples. This bug is now fixed.
- AutoCAD filter did not filter .dwl and .dwl2 files. This bug is now fixed.
v5.6.16262.0 Beta 2
July 4, 2022- Context menu performance improved.
- PlaceholderItem.UpdateUI() method provided to refresh Windows Explorer user interface.
- Sparse package startup sequence refactored. Developer certificate installation and uninstall sequence refactored.
v5.6.15918.0 Beta 2
June 30, 2022- Context menu on MacOS is now supported.
- New shell extension handler classes provided to run handlers in one process with the Engine: ThumbnailProviderHandlerIntegratedBase, CloudFilesContextMenuVerbIntegratedBase and CustomStateHandlerIntegratedBase classes provided. Virtual Drive and WebDAV Drive Samples updated to run shell extension handlers in one process with the main application.
- ZipFilter is provided. Now zip archiver is supported.
- Microsoft Excel and PowerPoint filters improved.
- Filtering refactored. Now both client to server sync and server to client operations are anow filtered in IEngine.FilterAsync() method.
- Microsoft Office / AutoCAD documents editing is now supported in Virtual File System sample and is supported both in remote storage and in user file system in all samples.
- Lock and Unlock commands in Virtual Drive and WebDAV Drive samples did not refresh status icons in the Windows Explorer. This bug is now fixed.
- ProcessAsync() erronously called IFileSystemItem.DeleteAsync()/MoveToAsync() methods before DeleteCompletionAsync()/MoveToCompletionAsync(). As soon as the delete/move operation can be canceled only if the Engine is running, now the DeleteCompletionAsync()/MoveToCompletionAsync() methods are only called from ProcessAsync().
- Incorrect operation type of OperationType.Delete was passed to FilterAsync() on DeleteCompletionsAsync() call. Now the correct OperationType.DeleteCompletion type is passed.
- The Win32Exception 0x80004005 "The cloud file metadata is corrupt and unreadable" may be thrown if the placeholder did not complete saving. This bug is now fixed.
- Create or update failed. DirectoryNotFoundException "The system can not find the path specified." error may be thrown on delete. This bug is now fixed.
- "Get moved item failed" Win32Exception "The cloud operation is invalid" can be thrown during synchronization. This bug is now fixed.
- Dehydration may throw exceptions if called for new files. This bug is now fixed.
v5.5.15752.0 Beta 2
June 21, 2022- Thumbnails on MacOS are now supported.
- Replacing GetPathByItemId() with TryGetPathByItemId() in Virtual File System and Virtual Drive sample.
v5.0.15216.0 Beta 1
June 13, 2022- UnauthorizedAccessException 'Access to the path..' is denied exception during delete. This bug is now fixed.
- If 0-lenght file failed to set in-sync on creation, the file did not se in-sync at any later time in ProcessAsync() method. This bug is now fixed.
- EngineWindows.ProcessAsync() moved to EngineWindows.SyncService.Outgoing.ProcessAsync().
- IServerNotifications methods now do not update items if create/update/delate/move operation is in progress.
- PlaceholderItem.SetMetadataAsync() and IServerNotifications.UpdateAsync() methods now provide autoHydration parameter.
v5.0.14943.0 Beta 1
June 9, 2022- User file system to remote storage synchronization service is now integrated with the EngineWindows. Periodical synchronization now starts by default every 10 sec.
- Folder Copy->Paste to virtual drive caused Win32Exception 'The file is not a cloud file', cased by child items being created before parent items. This bug is now fixed.
- If the Engine crushed or the drive deleted without cleanup and than recreated in the same location, the Engine may delete items in the remote storage on the next IEngine.StartAsync(true) call or during EngineWindows.ProcessAsync() call. This bug is now fixed.
- Context menu may throw exception on root folder in WebDAV Drive sample. Item identity may non be saved on the root item if the remote storage ID was never set. This bug is now fixed.
v5.0.14726.0 Beta 1
June 3, 2022- All modules are now .NET Standard 2.0 compliant. All Windows samples can now run both .NET Framework 4.8 and .NET Core.
- Custom state provider C++ projects are replaced with C#/.NET projects.
- Thumbnails support is now built into Engine. Thumbnails handler shell extension base class is provided. Thumbnails are now generated in IFileSystemItem.GetThumbnailAsync() method implementation.
- Properties support is now built into Engine. Properties handler shell extensions base class is provided. Properties are now provided in IFileSystemItem.GetPropertiesAsync() method implementation.
- Context menu support is now built into Engine. Context menu handler shell extensions base class is provided. Context menu is now provided in IEngine.GetMenuCommandAsync() method implementation.
- WebDAV Drive and Virtual Drive projects now build a sparse package. Context menu is now supported when you run the WebDAV Drive and Virtual Drive projects directly from Visual Studio.
- Debug logging is provided. Debug logging can now be enabled in samples using the 'd' console key.
v4.4.14432.0
May 24, 2022- Sample shell extension project did not compile. Incorrect references references in C++ project. This bug is now fixed.
v4.4.14419.0
May 2, 2022- IBatch interface provided. When the EngineWindows.ProcessAync() is called and this interface is implement on the Engine object, this interface is called instead of the IFileSystemItem, IFile and IFolder interfaces to process all items created, updated, moved and deleted in the virtual file system.
- Now all IFileSystemItem, IFile and IFolder, ILock, IClientNotification interface methods provide a cancellation token parameter. A cancellation is fired on Engine.StopAsync() method call.
- On Windows the cancelation token passed to IFolder.GetChildrenAsync() and IFile.ReadAsync() methods is now automatically fired by the platform after 60sec timeout.
- The Engine.StopAsync() call now cancels EngineWindows.ProcessAsync() method and all IServerNotifications interface methods.
- Listing performance improved on Windows platform. The IFolderListingResultContext ReturnChildrenAsync() can now return over 100K items in one block on the average machine from IFolder.GetChildrenAsync().
- IConfirmationResultContext.ReturnErrorResult() now can return error code, defined in CloudFileStatus enum.
- EngineWindows.ProcessAsync() method performance improved.
- IFile.OpenAsync(), IFile.CloseAsync() and IFile.ValidateDataAsync() methods are moved to ITHit.FileSystem.Windows.IFileWindows interface.
- Thumbnails handler is now registered when the VirtualDrive project run directly (not via packaging project).
- Placeholders.TryGetItem() method provided.
- If folder listing failed to complete successfully the Win32Exception (380): "The cloud operation is invalid." exception is thrown when engine is started the next time. The Engine failed to distinguish between new and existing items. Now new and existing items are distinguished correctly under any circumstances.
- If Engine.StopAsync() is called during ProcessAsync() call and the hydration was in progress the "Hydration/Dehydration failed." error is logged. Now now errors are logged if engine is stopped when hydration is in progress.
- Incorrect operation type OperationType.List was passed to Engine.FilterAsync() before calling IFile.ReadAsync() method. Now the correct OperationType.Hydrate enum value is passed.
v4.3.12907.0 Beta 2
April 1, 2022- Status of the operation can now be reported to the Engine without throwing an exception. The IFile.WriteAsync(), IFolder.WriteAsync(), IFolder.CreateFileAsync() and IFolder.CreateFolderAsync() methods now provide a new IInSyncResultContext parameter parameter to explicitly set the in-sync status of the item. The resultContext parameter of the IFileSystemItem.MoveToCompletion() and IFileSystemItem.DeleteCompletion() methods now implement IInSyncResultContext interface.
- Placeholders.GetRootItem() method added.
- Deleted items processing in Engine.ProcessAsync() performance improved.
- New items were treated as existing by the Engine.ProcessAsync() method. The IFile.WriteAsync() method was called for new items. Now this bug is fixed.
- gRpc channel did not work if package is installed for more than one user on the same machine. Thumbnails and custom columns does not work in Windows Explorer. Now the gRpc channel is unique per user.
- PlaceholderItem.GetCustomData() method and IFileSystemItemMetadata.CustomData property are removed (replaced with PlaceholderItem.properties dictionary).
- IServerNotifications.MoveToAsync() returned false even if the file is successfully moved. Now this bug is fixed.
v4.2.12691.0 Beta 2
March 22, 2022- The Engine can now process items that were changed when the Engine was not running. Created, updated, moved, deleted, pinned and unpinned items are now synched from the user file system to the remote storage on Engine start.
- The IClientNotificationsWindows interface is removed. The user file system to remote storage synchronization is now performed by EngineWindows.ProcessAsync() method call.
- CustomStateHandler is implemented in WebDAV Drive sample.
- On Windows 11 the ReportProgress() method throws System.Runtime.InteropServices.COMException: 0xDDE0DBB0. This bug is now fixed.
- On Windows 11 the PlaceholderItem.SetRemoteStorageItemId(itemId) method call throws System.AccessViolationException: "Attempted to read or write protected memory. This is often an indication that other memory is corrupt.". This bug is now fixed.
v4.1.12172.0 Beta 2
February 22, 2022- Transactional save operations are now supported by the Engine core. Microsoft Office, AutoCAD can now save documents, no file system monitoring or external storage is required. The sample code was simplified and refactored. The virtual Drive sample is now using a remote storage ID.
- A new dictionary-based custom properties system is provided. Now custom data of unlimited size can be associated with any file and survive transactional save operations.
- New CustomStateHandler implemented. Windows Explorer now requests properties via web sockets when properties are requested by Windows Explorer.
- The file content was blocked for writing when IFile.WriteAsync() method is called. Now file content is not blocked for writing anymore. Microsoft Office Word file content can be synced to the remote storage on every Microsoft Word save or on unlocking event. All samples are now configured to save content to remote storage on every update.
- The FilteredDocsMonitor class is removed from the sample code. Now when the item needs to be converted back to the placeholder after MS Office/AutoCAD transactional save operation or after the removal of the attributes (typically by Notepad++), the IFolder.CreateFileAsync() method is called by the Engine.
- The IClientNotificationsWindows.UpdateAsync() call now can throw ClientLockFailedException exception if the item is being created/updated/locked/unlocked from another thread. Previously the UpdateAsync() call just logged the message. Now both IClientNotificationsWindows.CreateAsync() and IClientNotificationsWindows.UpdateAsync() methods have identical ClientLockFailedException semantics.
v4.0.11399.0 Beta
December 8, 2021- The hydration policy is set to Full in all samples. Opening mp4 files by Windows Movies & TV app is now supported.
- Throwing any exception in IFile.ReadAsync() resulted in file download hanging. Now the download is cancelled if any exception is thrown in IFile.ReadAsync() method implementation.
- ITransferDataResultContext.ReportStatus() call throwed NotImplemntedException. Now the ReportStatus() is implemented.
v4.0.11250.0 Beta
November 29, 2021- WebDAV Drive Sample now supports thumbnails mode.
- Common.Windows.Core sources were missing. Now this bug is fixed.
- The NullReferenceException may be thrown in context menu shell extension in WebDAV Drive and Virtual Drive samples when context menu is called on empty space or when no items are selected in Windows Explorer. Now this bug is fixed.
v4.0.11187.0 Beta
November 23, 2021- Packaging project is added in WebDAV Drive sample.
- Lock/Unlock menu in Windows Explorer is added in WebDAV Drive sample.
- The item did not delete in remote storage when moved outside of the user file system. Now the item is deleted in all samples.
- The folder is now marked as in-sync inside the MoveToCompletionAsync() call in all samples.
- Folder move (Cut-Paste) from virtual disk to local file system throws exception in remote storage monitor. Now this bug is fixed.
- Remote storage to user file system sync service in Virtual Drive and WebDAV Drive samples failed with DirectoryNotFoundEcxception 'Could not find part of the path' exception in case a regular folder (typically new folder) was found in folders hierarchy in user file system. Now this bug is fixed.
- User file system to remote storage sync service in Virtual Drive and WebDAV Drive samples did not sync new folders to remote storage. Now this bug is fixed.
- User file system to remote storage sync service in Virtual Drive and WebDAV Drive samples did not mark folders as in-sync after rename. Now folders are marked as in-sync after successful call to Folder.WriteAsync().
- UnauthorizedAcessException "Access to the path '' is denied" was thrown by the Engine during folder move/rename operation. ILock.UnlockAsync() was not called on folder if it implemented ILock. Now this bug is fixed.
- Crating and than moving/renaming a folder in user file system in WebDAV Drive sample left the folder in the not-in sync state after rename. The folder was not marked as not new after the creation. Now this bug is fixed.
v4.0.10902.0 Beta
November 5, 2021- Deleting a file or a folder failed. Deleting a file or folder in Windows Explorer failed with the "The cloud operation was unsuccessful" error. Now, this bug is fixed.
v4.0.10891.0 Beta
November 2, 2021- Full synchronization added to Virtual Drive and WebDAV Drive samples.
- The file/folder is now left in the not In-Sync state after the move operation. Rolling back changes made in v4.0.10312.0 Beta.
- The file did not auto-unlock after IClientNotifications.UpdteAsync() call. Now is auto-unlocked.
- Sample Lock/Unlock context menu was displayed on all Cloud Filter API-based drives, such as OneDrive. Now this bug is fixed.
- IEngine.FilterAsync() was not called inside IClientNotifications.UpdateAsync() method for Locking and unlocking. Now FilterAsync() is called for locking and unlocking.
- OperationType.Unlock added.
- Detetion code in Virtual File System and WebDAV Drive samples moved from DeleteCompletionAsync() to DeleteAsync().
- Logging refactored.
- Adding start/stop console commands for engine, remote storage monitor and full sync service in all samples.
- FileLoadException "the process can not access the file because it is being used by another process." may be thrown during hydration and dehydration if the file is blocked. Now the info message is logged by the Engine instead of throwing an exception.
v4.0.10509.0 Beta
October 12, 2021- WebDAV Drive sample now receives "created", "updated", "deleted", "moved", "locked", "unlocked" change notifications from the server via Web sockets.
- IEngine.FilterAsync() method now has an OperationType parameter. The FilterAsync() implementation is refactored in Virtual Drive and WebDAV Drive samples.
- IOperationContext optional parameter added to the IEngine.FilterAsync(), ILock.LockAsync(), ILock.UnlockAsync() and ILock.GetLockModeAsync() methods.
- AutoCAD temp files filter prototype added to Virtual Drive and WebDAV Drive sample. Filtering code moved to Windows Common project.
- MS Office / AutoCAD sample docs monitor did not dispose of. Now the monitor is properly disposed of.
- Locking refactored in WebDAV Drive sample.
- Detetion code in VirtualDrive sample moved from DeleteCompletionAsync() to DeleteAsync().
- Icons in Lock/Unlock context menu provided in Virtual Drive sample.
- Deleting ETag or custom columns for folder caused the deletion of all columns, ETags and locks data for underlying folders. Now the ETag or custom columns are properly deleted for the specified folder only.
- Virtual Drive and Virtual File System samples hydrate the file when a file is added to the remote storage. Now, this bug is fixed.
v4.0.10312.0 Beta
September 24, 2021- Lock/Unlock context menu provided in Virtual Drive sample.
- The file is left in the not in-sync state after the rename/move operation and is being hydrated. The IFile.WriteAsync() is called after rename/move operation. Now the file is marked as in-sync after the move and is not being hydrated after the move.
- The folder was left in the not in-sync state after the rename/move operation. Now the folder is marked as in-sync after the rename/move if it was in-sync before rename/move.
- All samples now use .NET 5.
- Logging refactored in samples. Now process name is being added to the log.
- WebDAV Drive sample is now using WebDAV Client Library for .NET 5 Beta.
- macOS source codes were missing from the source codes version of the archive supplied with the source codes license. Now macOS souce codes are supplied.
- Folder move operation to the user file system does not create items in the folder. Now, this bug is fixed.
- WebDAV Drive sample throws STG_E_ACCESSDENIED exception on files locked by other users. The ExternalDataManager.ShowCustomColumnsAsync() method throws an exception if the method is called on a file with a read-only attribute. This bug is now fixed.
- IFile.WriteAsync(), IFolder.WriteAsync(), ILogger.LogError() and ILogger.LogMessage() methods now provides optional IOperationContext parameter. EngineErrorEventArgs and EngineMessageEventArgs now provide OperationContext property.
- The ProcessInfo class was added.
- The IOperationContext.ItemId property added.
- The IMoveCompletionContext now inherits IOperationContext.
- IClientNotifications.GetLockModeAsync() method added.
v3.3.9602.0
August 16, 2021- An error is displayed in Windows Explorer when a hydrated file is being deleted in Virtual File System sample. The hydrated file is being moved to the recycle bin during the delete operation. The move method implementation is now refactored to avoid moving hydrated files to the recycle bin in Virtual file System sample.
- The PlaceholderItem.RevertPlaceholder() method is provided to revert the placeholder back to the file/folder.
v3.3.9488.0
August 2, 2021- Thumbnails did not work if Virtual Drive sample deployed as a package. Surrogate COM handler is broken in latest Windows updates. Thumbnails handler now refactored to run as a COM exe server.
v3.2.8936.0
July 16, 2021- Some applications, such as Notpad++, remove the Offline attribute when saving a document, converting a placeholder to a regular file. In Virtual Drive sample the Attributes filter is added to the MsOfficeDocsMonitor class to monitor Changed event and convert the file back to the placeholder.
- If exception occurred during sample start-up the exception did not log. Now all exceptions that occurred during app start-up are logged.
v3.2.8901.0
June 30, 2021- msix packaging is now supported. The packaging project is added to the Virtual Dive sample.
- The thumbnails provider in the Virtual Drive sample now runs as a surrogate COM and can be installed/removed without admin privileges as part of the packaged installation. The thumbnails handler can now be debugged running the project directly from Visual Studio.
- Virtual File System sample refactored. The file/folder ID is now used to link user file system file with remote storage. Mapping.MapPath() function is removed from the sample project.
- targetParentItemId parameter, representing a new parent folder ID, added to IFileSystemItem.MoveToAsync() method.
- Item ID is now returned by the IFolder.CreateFileAsync() and IFolder.CreateFolderAsync() methods.
- Placeholder creation performance improved.
- Selecting "Always keep on this devise" on a folder that was never enumerated does not load file content. Now, this bug is fixed.
Virtual File System for macOS sample refactored.
v3.1.7115.0 Beta
June 9, 2021- Item ID support provided. The IEngine.GetFileSystemItemAsync() method now has an itemId parameter. IFileSystemItemMetadata.ItemId property added. PlaceholderItem.GetItemId() method added. The IFolder.CreateFileAsync() and IFolder.CreateFolderAsync() methods now return item ID.
- PlaceholderItem.SetItemInfo() method renamed to PlaceholderItem.SetMetadata().
- The CustomDataManager calss in sample code renamed to ExternalDataManager to avoid confusion with IFileSystemItemMetadata.CustomData/PlaceholderItem.GetCustomData().
v3.0.7021.0 Beta
June 2, 2021- Thumbnails implementation is provided in the Virtual Drive sample. The Virtual Drive can now read thumbnails from the remote storage and display them in Windows Explorer in thumbnail mode.
- FileSystemItemMetadata.CustomData property getter returned incorrect data. Now, this bug is fixed.
v3.0.6973.0 Beta
May 26, 2021- Virtual File System sample for macOS now supports all file management functionality: remote storage to user file system sync, user file system to remote storage sync, files creation, hydration/dehydration, deletion, copy, move, etc.
- Virtual File System sample for Windows refactored and simplified to provide only minimum code required to create a file system with synchronization, on-demand loading, hydration/dehydration.
- Virtual Drive sample is provided with advanced functionality: Microsoft Office files editing, automatic Microsoft Office documents locking, custom columns/states in Windows File Manger.
- Virtual File System sample performance improved. The sample folder listing is tested with up to 35K files in a single folder. File hydration is tested up to 30GB per file.
- New locking interfaces are provided. ILock interface is provided in ITHit.FileSystem.Windows module. EngineWindows.AutoLock property is provided to enable automatic Microsoft Office documents locking.
- IEngine.FilterAsync() method is provided to avoid synchronization of specified files (typically Microsoft Office temp files) to the remote storage and back.
- Rename and delete operations can now automatically confirm the operation if no exception is thrown inside the method implementation or reject operation in case of exception.
- The IEngine.GetFileSystemItemAsync() method now provides FileSystemItemType parameter, indicating if a file or a folder is requested.
- EngineWindows class now processes hydration/dehydration as well as files and folder creation. No need to create a separate file system monitoring thread.
- PlaceholderItem class now provides HydrationRequired() and DehydrationRequired() methods.
- EngineWindows now provides the public StopAsync() method.
- IFile & IFolder now provides WriteAsync() method.
- IFolder now provides CreateFileAsync() and CreateFolderAsync() methods.
- IFile.TransferDataAsync() method is replaced by IFile.ReadAsync() with a stream parameter.
- IClientNotifications and IClientNotificationsWindows interfaces as well as EngineWindows.ClientNotifications() method is provided. To be called if the file system was not running to process operations and sent to remote storage.
- IServerNotifications interface and IEngine.ServerNotifications() method is provided for notifying the user file system about changes in the remote storage.
- If custom data is not specified in FileSystemItemMetadata.CustomData when creating a placeholder, the Win32Exception is thrown "Cloud Operation is invalid". Now, this bug is fixed.
- Custom columns data was erased when setting the file icon. Now custom data is stored in the external file in the data folder, separately for each file. Custom columns implementation is moved to a new Virtual Drive sample.
- Files and folders are now only marked as modified when file content is modified or the folder is moved. The StorageProviderSyncRootInfo.InSyncPolicy is now set to StorageProviderInSyncPolicy.Default in Registrar class in samples.
- New files are now converted to a placeholder only after successful file upload in the sample code.
- File comparison changed in Virtual Drive and User File System samples. Instead of ETag-LastModifiedDate now file hashes are computed.
v2.5.5091.0
April 27, 2021- Virtual File System Sample for Mac Alpha sample now supports download and upload the file content as well as move/rename and delete for files and folders.
- Incorrect references in sample projects for Windows to ITHit.FileSystem.dll and ITHit.FileSystem.Windows.dll. Now references are properly set to the NuGet repository.
- Samples solution for Windows does not include the ITHit.FileSystem.Samples.Common.Windows project. Now this project is included in samples solution.
- The Virtual File System sample for Windows included the unused source files in the "\Framework\" folder. Now, this folder is deleted.
- The Virtual File System sample for Windows contained the "License" configuration property in the appsettings.json file instead of the "UserFileSystemLicense". Now, this bug is fixed.
v2.5.5083.0
April 22, 2021- File hydration time significantly improved.
- Files of unlimited size are now supported.
- IVirtualLock interface is provided. Now this interface can be optionally implemented on files and folders that require locking support.
- IFileSystemItem.DeleteCompletionAsync() and IFileSystemItem.MoveToCompletionAsync() methods are provided, called when the delete or move operation is completed by the platform.
- Locking management code is refactored in samples.
- ETag management code is refactored in samples.
- ETag file did not delete after folder deletion, now this bug is fixed.
- Sample move code refactored in samples.
- "*User*" interfaces renamed to "*Virtual*" interfaces in sample code. "*BasicInfo" classes and interfaces renamed to "*Metadata".
- The installer project is provided for the WebDAVDrive sample.
- File content validation is disabled by default in samples.
- Folders with incorrect creation/modification/access date-time are created in remote storage. Now, this bug is fixed.
- MS Office documents did not unlock after editing. This bug is now fixed.
- Conflict error in Virtual File System sample. "ETags a not equal" after the file is saved a second time. This bug is now fixed.
v2.0.4465.0
March 19, 2021- ITHit.FileSystem.Mac module with User File System Engine for macOS implementation is provided.
- Virtual File System sample Alpha for macOS is provided in Xamarin. The sample implements on-demand folders listing as well as demonstrates virtual drive installation and uninstall. The sample also provides macOS status bar application (container app).
v1.4.4298.0
February 24, 2021- Challenge-response authentication (Basic, Digest, NTLM/Kerberos) is now supported in WebDAV Drive sample. The login form is provided. The credentials are securely stored in Windows Credential Manager.
- Web browser login form does not work in WebDAV Drive sample. If server replies with 302 redirect the request failed and the login form does not show. This bug is now fixed.
- WebDAV Drive sample is now using WPF for UI rendering.
v1.3.4108.0
January 22, 2021- Samples now use .NET 5.0 by default.
- The latest build of WebDAV Client Library for .NET with .NET Standard 2.0 Support is used in the WebDAV Drive sample.
v1.3.4102.0
January 18, 2021- Map Drive sample now supports Cookies authentication. The HTML log in window is rendered using Edge Chromium Canary.
- ITHit.FileSystem.Windows module now supports .NET 5.0.
v1.3.4067.0
January 15, 2021- WebDAV Drive sample added. The sample can synchronize documents from and to the WebDAV server, automatically locks/unlocks Microsoft Office documents when opened for editing, supports on-demand loading and selective offline availability. IT Hit WebDAV Client library for .NET is used to access the WebDAV server. The sample currently supports anonymous WebDAV servers only.
v1.2.3984.0
December 14, 2020- ITHit.FileSystem and ITHit.FileSystem.Windows now support .NET Standard 2.0.
- Delete and move operations triggered hydration in the Virtual File System Sample. Now, this bug is fixed.
- Memory violation excess exception was thrown in by IsPlaceholder() method in some environments. This bug is now fixed.
- Files locking on the server in the Virtual File System Sample can now be simulated with a read-only attribute set on the files in remote storage. Read-only attribute is no more used for in-sync detection in Virtual File System Sample. the StorageProviderInSyncPolicy.FileReadOnlyAttribute and StorageProviderInSyncPolicy.DirectoryReadOnlyAttribute are removed from StorageProviderSyncRootInfo.InSyncPolicy.
- Files locked by other users now show a gray lock icon in the Virtual File System Sample.
- FileSystemBasicnfo.LockedByAnotherUser property is provided in the Virtual File System Sample.
- Temporary excel files detection fixed in the Virtual File System Sample.
- Folder with ETags and locks moved from the current user temp folder to LocalApplicationData in the Virtual File System Sample.
- ETags comparison in the Virtual File System sample fixed. If both client and server ETags are null or empty they are now considered equal.
- URIs comparison in PlaceholderItem.IsMoved() extension method in the Virtual File System sample fixed is fixed. URIs with/without trailing slash are now considered equal.
v1.2.3941.0
November 19, 2020- When a new file is created in the user file system sent an update request to the remote storage calling UserFile.UpdateAsync() method instead of the new file creation. An exception is thrown when a new file is being created. Now new file detection implemented in VfsFile.CloseAsync() method, the UserFolder.CreateFileAsync() is now properly called.
v1.2.3810.0
November 10, 2020- Automatic locking is implemented in the Virtual File System sample. Microsoft Office documents are now automatically locked when opened for ending and automatically unlocked when closed. The file is also automatically locked before being sent to the remote storage and unlocked when saving is completed. The lock icon is displayed in the Windows File Manager in the Status column. The UserFileSystemItem.LockAsync(), UserFileSystemItem.UnlockAsync() methods and UserFileSystemPath.Lock property is provided.
- Excel temp files (A6TG7GPI.tmp) are now detected in the Virtual File System sample and are filtered from files being sent to remote storage.
v1.1.3573.0 Beta
October 22, 2020- All storage-specific operations in Virtual File System Sample are now performed in UserFileSystemItem.cs, UserFile.cs and UserFolder.cs files in sample code.
- ETag is deleted together with a file in the user file system. Now ETags are stored in external files. ETags moved/renamed or deleted when a file or folder in remote storage is moved/renamed or deleted.
- Save As in MS Office did not work. Save As in MS Office throw "ETags not equal" exception, because ETag is deleted during MS Office transactional save. Now Save As is supported in MS Office applications.
- Excel temp files synchronized to remote storage. Now excel temp files are not synchronized.
v1.0.0.3019 Alpha
October 1, 2020- Synchronization service from the user file system to remote storage is implemented in the Virtual File System sample.
- ETags comparison is refactored and fixed in the Virtual File System Sample. Remote storage ETag and user file system ETag are now compared during the user file system to remote storage upload operation.
- Conflicts between the user file system and the remote storage are now properly processed in the Virtual File System Sample. The conflict icon is displayed in the Windows File Manager. A ConflictException is provided by the Engine.
- If the move or rename operation was performed when the Virtual File System sample was not running, the delete-create sequence occurred in the remote storage (potentially deleting file history and attached data). Now move/rename in remote storage is performed when the app starts, during the synchronization process.
- MS Office documents saving refactored in the Virtual File System sample. ETags and all custom data on MS Office documents during MS Office transactional save are preserved now.
- MS Office lock file (~$file.docx) detection is fixed and refactored in the Virtual File System Sample.
- When a non-empty folder is deleted in the user file system in the Virtual File System sample, the respective folder deletion failed in remote storage. Now, this bug is fixed.
v1.0.0.2562 Alpha
September 14, 2020- File System Engine for Windows with on-demand loading, offline files support, download, and upload progress reporting provided.
- Virtual File System Sample in C# provided. The sample simulates remote storage using a folder in the file system and synchronizes files both from the user file system to remote storage and from remote storage to the user file system.