///<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); }
///<inheritdoc> public async Task LockAsync(LockMode lockMode) { Logger.LogMessage($"{nameof(ILock)}.{nameof(LockAsync)}()", UserFileSystemPath); ExternalDataManager customDataManager = Engine.CustomDataManager(UserFileSystemPath, Logger); LockManager lockManager = customDataManager.LockManager; if (!await lockManager.IsLockedAsync() && !Engine.CustomDataManager(UserFileSystemPath).IsNew) { // Set pending icon, so the user has a feedback as lock operation may take some time. await customDataManager.SetLockPendingIconAsync(true); // Call your remote storage here to lock the item. // Save the lock token and other lock info received from the remote storage on the client. // Supply the lock-token as part of each remote storage update in File.WriteAsync() method. // For demo purposes we just fill some generic data. ServerLockInfo lockInfo = new ServerLockInfo() { LockToken = "ServerToken", Owner = "You", Exclusive = true, LockExpirationDateUtc = DateTimeOffset.Now.AddMinutes(30) }; // Save lock-token and lock-mode. await lockManager.SetLockInfoAsync(lockInfo); await lockManager.SetLockModeAsync(lockMode); // Set lock icon and lock info in custom columns. await customDataManager.SetLockInfoAsync(lockInfo); Logger.LogMessage("Locked in remote storage succesefully.", UserFileSystemPath); } }
///<inheritdoc> public async Task LockAsync(LockMode lockMode) { Logger.LogMessage($"{nameof(ILock)}.{nameof(LockAsync)}()", UserFileSystemPath); ExternalDataManager customDataManager = Engine.CustomDataManager(UserFileSystemPath, Logger); LockManager lockManager = customDataManager.LockManager; if (!await lockManager.IsLockedAsync() && !Engine.CustomDataManager(UserFileSystemPath).IsNew) { // Set pending icon, so the user has a feedback as lock operation may take some time. await customDataManager.SetLockPendingIconAsync(true); // Call your remote storage here to lock the item. // Save the lock token and other lock info received from the remote storage on the client. // Supply the lock-token as part of each remote storage update in IFile.WriteAsync() method. LockInfo lockInfo = await Program.DavClient.LockAsync(new Uri(RemoteStoragePath), LockScope.Exclusive, false, null, TimeSpan.MaxValue); ServerLockInfo serverLockInfo = new ServerLockInfo { LockToken = lockInfo.LockToken.LockToken, Exclusive = lockInfo.LockScope == LockScope.Exclusive, Owner = lockInfo.Owner, LockExpirationDateUtc = DateTimeOffset.Now.Add(lockInfo.TimeOut) }; // Save lock-token and lock-mode. await lockManager.SetLockInfoAsync(serverLockInfo); await lockManager.SetLockModeAsync(lockMode); // Set lock icon and lock info in custom columns. await customDataManager.SetLockInfoAsync(serverLockInfo); Logger.LogMessage("Locked in remote storage succesefully.", UserFileSystemPath); } }