FubarDev.FtpServer.FileSystem.OneDrive.OneDriveFileSystem.SetMacTimeAsync C# (CSharp) Method

SetMacTimeAsync() public method

public SetMacTimeAsync ( IUnixFileSystemEntry entry, DateTimeOffset modify, DateTimeOffset access, DateTimeOffset create, CancellationToken cancellationToken ) : Task
entry IUnixFileSystemEntry
modify DateTimeOffset
access DateTimeOffset
create DateTimeOffset
cancellationToken System.Threading.CancellationToken
return Task
        public async Task<IUnixFileSystemEntry> SetMacTimeAsync(IUnixFileSystemEntry entry, DateTimeOffset? modify, DateTimeOffset? access, DateTimeOffset? create, CancellationToken cancellationToken)
        {
            var item = ((OneDriveFileSystemEntry)entry).Item;

            await _uploadsLock.WaitAsync(cancellationToken);
            try
            {
                var id = GetFileId(item);
                BackgroundUpload uploader;
                if (_uploads.TryGetValue(id, out uploader))
                {
                    if (uploader.ItemChanges == null)
                        uploader.ItemChanges = new Item();
                    if (uploader.ItemChanges.FileSystemInfo == null)
                        uploader.ItemChanges.FileSystemInfo = new FileSystemInfo();
                    if (item.FileSystemInfo == null)
                        item.FileSystemInfo = new FileSystemInfo();
                    if (uploader.Item.FileSystemInfo == null)
                        uploader.Item.FileSystemInfo = new FileSystemInfo();
                    if (modify != null)
                    {
                        uploader.ItemChanges.FileSystemInfo.LastModifiedDateTime = modify;
                        uploader.Item.FileSystemInfo.LastModifiedDateTime = modify;
                        item.FileSystemInfo.LastModifiedDateTime = modify;
                    }
                    if (create != null)
                    {
                        uploader.ItemChanges.FileSystemInfo.CreatedDateTime = create;
                        uploader.Item.FileSystemInfo.CreatedDateTime = create;
                        item.FileSystemInfo.CreatedDateTime = create;
                    }
                    return entry;
                }
            }
            finally
            {
                _uploadsLock.Release();
            }

            var updateItem = new Item() { FileSystemInfo = new FileSystemInfo() };
            if (modify != null)
                updateItem.FileSystemInfo.LastModifiedDateTime = modify;
            if (create != null)
                updateItem.FileSystemInfo.CreatedDateTime = create;

            var newItem = await Service.UpdateAsync(Drive.Id, item.Id, updateItem, cancellationToken);
            _cache.Set(GetFileId(newItem), newItem, _defaultCacheTimeSpan);
            if (newItem.Folder != null)
                return new OneDriveDirectoryEntry(this, newItem, false);
            return new OneDriveFileEntry(this, newItem, null);
        }