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);
}