Browse Source

Merge branch 'storage-api' of https://github.com/AvaloniaUI/Avalonia into storage-api

# Conflicts:
#	src/Android/Avalonia.Android/Platform/Storage/AndroidStorageItem.cs
#	src/Avalonia.Base/Platform/Storage/FileIO/BclStorageFolder.cs
#	src/Avalonia.Base/Platform/Storage/IStorageFolder.cs
pull/10607/head
Max Katz 3 years ago
parent
commit
da409f6857
  1. 39
      src/Android/Avalonia.Android/Platform/Storage/AndroidStorageItem.cs
  2. 4
      src/Avalonia.Base/Platform/Storage/FileIO/BclStorageFolder.cs
  3. 4
      src/Avalonia.Base/Platform/Storage/IStorageFolder.cs
  4. 5
      src/Avalonia.Controls.DataGrid/DataGrid.cs

39
src/Android/Avalonia.Android/Platform/Storage/AndroidStorageItem.cs

@ -172,7 +172,7 @@ internal class AndroidStorageFolder : AndroidStorageItem, IStorageBookmarkFolder
{
}
public async Task<IStorageFile?> CreateFile(string name)
public async Task<IStorageFile?> CreateFileAsync(string name)
{
var mimeType = MimeTypeMap.Singleton?.GetMimeTypeFromExtension(MimeTypeMap.GetFileExtensionFromUrl(name)) ?? "application/octet-stream";
var newFile = Document.CreateFile(mimeType, name);
@ -185,7 +185,7 @@ internal class AndroidStorageFolder : AndroidStorageItem, IStorageBookmarkFolder
return new AndroidStorageFile(Activity, newFile.Uri, this);
}
public async Task<IStorageFolder?> CreateFolder(string name)
public async Task<IStorageFolder?> CreateFolderAsync(string name)
{
var newFolder = Document?.CreateDirectory(name);
@ -211,9 +211,7 @@ internal class AndroidStorageFolder : AndroidStorageItem, IStorageBookmarkFolder
async Task DeleteContents(AndroidStorageFolder storageFolder)
{
var files = await storageFolder.GetItemsAsync();
foreach (var file in files)
await foreach (var file in storageFolder.GetItemsAsync())
{
if(file is AndroidStorageFolder folder)
{
@ -240,7 +238,7 @@ internal class AndroidStorageFolder : AndroidStorageItem, IStorageBookmarkFolder
{
yield break;
}
var contentResolver = Activity.ContentResolver;
if (contentResolver == null)
{
@ -273,7 +271,6 @@ internal class AndroidStorageFolder : AndroidStorageItem, IStorageBookmarkFolder
{
continue;
}
yield return isDirectory ? new AndroidStorageFolder(Activity, uri, false, this, root) :
new AndroidStorageFile(Activity, uri, this, root);
}
@ -291,15 +288,14 @@ internal class AndroidStorageFolder : AndroidStorageItem, IStorageBookmarkFolder
async Task<AndroidStorageFolder?> MoveRecursively(AndroidStorageFolder storageFolder, AndroidStorageFolder destination)
{
destination = await destination.CreateFolder(storageFolder.Name) as AndroidStorageFolder;
destination = await destination.CreateFolderAsync(storageFolder.Name) as AndroidStorageFolder;
if (destination == null)
{
return null;
}
var files = await storageFolder.GetItemsAsync();
foreach (var file in files)
await foreach (var file in storageFolder.GetItemsAsync())
{
if (file is AndroidStorageFolder folder)
{
@ -502,20 +498,27 @@ internal sealed class AndroidStorageFile : AndroidStorageItem, IStorageBookmarkF
}
}
async Task<AndroidStorageFile> MoveFileByCopy()
async Task<AndroidStorageFile?> MoveFileByCopy()
{
var newFile = await storageFolder.CreateFile(Name) as AndroidStorageFile;
var newFile = await storageFolder.CreateFileAsync(Name) as AndroidStorageFile;
if (newFile != null)
try
{
using var input = await OpenReadAsync();
using var output = await newFile.OpenWriteAsync();
if (newFile != null)
{
using var input = await OpenReadAsync();
using var output = await newFile.OpenWriteAsync();
await input.CopyToAsync(output);
await input.CopyToAsync(output);
await DeleteAsync();
await DeleteAsync();
return new AndroidStorageFile(Activity, newFile.Uri, storageFolder);
return new AndroidStorageFile(Activity, newFile.Uri, storageFolder);
}
}
catch
{
newFile?.DeleteAsync();
}
return null;

4
src/Avalonia.Base/Platform/Storage/FileIO/BclStorageFolder.cs

@ -113,7 +113,7 @@ internal class BclStorageFolder : IStorageBookmarkFolder
return null;
}
public async Task<IStorageFile?> CreateFile(string name)
public async Task<IStorageFile?> CreateFileAsync(string name)
{
var fileName = System.IO.Path.Combine(DirectoryInfo.FullName, name);
var newFile = new FileInfo(fileName);
@ -123,7 +123,7 @@ internal class BclStorageFolder : IStorageBookmarkFolder
return new BclStorageFile(newFile);
}
public async Task<IStorageFolder?> CreateFolder(string name)
public async Task<IStorageFolder?> CreateFolderAsync(string name)
{
var newFolder = DirectoryInfo.CreateSubdirectory(name);

4
src/Avalonia.Base/Platform/Storage/IStorageFolder.cs

@ -23,12 +23,12 @@ public interface IStorageFolder : IStorageItem
/// </summary>
/// <param name="name">The display name</param>
/// <returns>A new <see cref="IStorageFile"/> pointing to the moved file. If not null, the current storage item becomes invalid</returns>
Task<IStorageFile?> CreateFile(string name);
Task<IStorageFile?> CreateFileAsync(string name);
/// <summary>
/// Creates a folder with specified name as a child of the current storage folder
/// </summary>
/// <param name="name">The display name</param>
/// <returns>A new <see cref="IStorageFolder"/> pointing to the moved file. If not null, the current storage item becomes invalid</returns>
Task<IStorageFolder?> CreateFolder(string name);
Task<IStorageFolder?> CreateFolderAsync(string name);
}

5
src/Avalonia.Controls.DataGrid/DataGrid.cs

@ -6066,8 +6066,9 @@ namespace Avalonia.Controls
var numberOfItem = clipboardRowContent.Count;
for (int cellIndex = 0; cellIndex < numberOfItem; cellIndex++)
{
var cellContent = clipboardRowContent[cellIndex];
text.Append(cellContent.Content);
var cellContent = clipboardRowContent[cellIndex].Content?.ToString();
cellContent = cellContent?.Replace("\"", "\"\"");
text.Append($"\"{cellContent}\"");
if (cellIndex < numberOfItem - 1)
{
text.Append('\t');

Loading…
Cancel
Save