Files
FluentTerminal/FluentTerminal.App/Services/FileSystemService.cs
T
Aleksandar Pesic be4d1d5cab Reviewed async pattern throughout FluentTerminal.App project (#624)
* Reviewed async pattern in App.xaml.cs.

* Reviewed async pattern throughout FluentTerminal.App project.
2019-12-12 13:17:39 +01:00

76 lines
2.6 KiB
C#

using FluentTerminal.Models;
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using Windows.Storage;
using Windows.Storage.Pickers;
using File = FluentTerminal.Models.File;
namespace FluentTerminal.App.Services
{
public class FileSystemService : IFileSystemService
{
public Task<string> BrowseForDirectory()
{
var picker = new FolderPicker{ SuggestedStartLocation = PickerLocationId.ComputerFolder };
picker.FileTypeFilter.Add(".whatever"); // else a ComException is thrown
return picker.PickSingleFolderAsync().AsTask()
.ContinueWith(t => t.Result?.Path, TaskContinuationOptions.OnlyOnRanToCompletion);
}
public async Task<File> OpenFile(IEnumerable<string> fileTypes)
{
var picker = new FileOpenPicker
{
SuggestedStartLocation = PickerLocationId.ComputerFolder
};
foreach (var fileType in fileTypes)
{
picker.FileTypeFilter.Add(fileType);
}
var file = await picker.PickSingleFileAsync();
if (file != null)
{
var stream = await file.OpenStreamForReadAsync().ConfigureAwait(true);
return new File(file.DisplayName, file.FileType, file.Path, stream);
}
return null;
}
public async Task<ImageFile> SaveImageInRoaming(ImageFile imageFile)
{
var file = await StorageFile.GetFileFromPathAsync(imageFile.Path);
var backgroundThemeFolder = await ApplicationData.Current.RoamingFolder.CreateFolderAsync("BackgroundTheme", CreationCollisionOption.OpenIfExists);
var storageFile = await file.CopyAsync(backgroundThemeFolder, file.DisplayName, NameCollisionOption.GenerateUniqueName);
return new ImageFile(
storageFile.DisplayName,
storageFile.FileType,
storageFile.Path);
}
public async Task SaveTextFile(string name, string fileTypeDescription, string fileType, string content)
{
var picker = new FileSavePicker
{
SuggestedStartLocation = PickerLocationId.ComputerFolder,
SuggestedFileName = name
};
picker.FileTypeChoices.Add(fileTypeDescription, new List<string> { fileType });
var file = await picker.PickSaveFileAsync();
if (file != null)
{
await FileIO.WriteTextAsync(file, content);
}
}
}
}