///<inheritdoc> public async Task UnlockAsync() { if (MsOfficeHelper.IsMsOfficeLocked(UserFileSystemPath)) // Required for PowerPoint. It does not block the for writing. { throw new ClientLockFailedException("The file is blocked for writing."); } ExternalDataManager customDataManager = Engine.CustomDataManager(UserFileSystemPath, Logger); LockManager lockManager = customDataManager.LockManager; // Set pending icon, so the user has a feedback as unlock operation may take some time. await customDataManager.SetLockPendingIconAsync(true); // Read lock-token from lock-info file. string lockToken = (await lockManager.GetLockInfoAsync()).LockToken; // Unlock the item in the remote storage. try { await Program.DavClient.UnlockAsync(new Uri(RemoteStoragePath), lockToken); } catch (ITHit.WebDAV.Client.Exceptions.ConflictException) { // The item is already unlocked. } // Delete lock-mode and lock-token info. lockManager.DeleteLock(); // Remove lock icon and lock info in custom columns. await customDataManager.SetLockInfoAsync(null); Logger.LogMessage("Unlocked in the remote storage succesefully", UserFileSystemPath); }