1#if UNITY_WSA && !UNITY_EDITOR
3using System.Collections.Generic;
5using System.Threading.Tasks;
12 public class StandaloneFileBrowserWinRT : IStandaloneFileBrowser<ItemWithStream>
14 public IList<ItemWithStream> OpenFilePanel(
string title,
string directory, ExtensionFilter[] extensions,
bool multiselect)
19 public IList<ItemWithStream> OpenFolderPanel(
string title,
string directory,
bool multiselect)
24 public ItemWithStream SaveFilePanel(
string title,
string directory,
string defaultName, ExtensionFilter[] extensions)
29 public void OpenFilePanelAsync(
string title,
string directory, ExtensionFilter[] extensions,
bool multiselect, Action<IList<ItemWithStream>> cb)
31 UnityEngine.WSA.Application.InvokeOnUIThread(async () =>
33 var filePicker =
new Windows.Storage.Pickers.FileOpenPicker();
34 if (extensions !=
null)
36 var existingExtensions =
new List<string>();
37 foreach (var extension
in extensions)
39 foreach (var filter
in extension.Extensions)
41 if (filter ==
"*" || filter ==
".*" || filter ==
"*.*" || existingExtensions.Contains(filter)) {
44 filePicker.FileTypeFilter.Add(
"." + filter);
45 existingExtensions.Add(filter);
51 var files = await filePicker.PickMultipleFilesAsync();
52 var result =
new ItemWithStream[files.Count];
53 for (var i = 0; i < files.Count; i++)
55 result[i] =
new ItemWithStream()
58 Stream = await ReadStorageFile(files[i])
61 await Task.Run(() => cb(result));
65 var file = await filePicker.PickSingleFileAsync();
66 var fileWithStream =
new ItemWithStream()
69 Stream = await ReadStorageFile(file)
71 await Task.Run(() => cb(
new[] { fileWithStream }));
76 public void OpenFolderPanelAsync(
string title,
string directory,
bool multiselect, Action<IList<ItemWithStream>> cb)
78 UnityEngine.WSA.Application.InvokeOnUIThread(async () =>
80 var folderPicker =
new Windows.Storage.Pickers.FolderPicker();
81 var folder = await folderPicker.PickSingleFolderAsync();
82 var folderWithStream =
new ItemWithStream()
86 await Task.Run(() => cb(
new[] { folderWithStream }));
90 public void SaveFilePanelAsync(
string title,
string directory,
string defaultName, ExtensionFilter[] extensions, Action<ItemWithStream> cb)
92 UnityEngine.WSA.Application.InvokeOnUIThread(async () =>
94 var filePicker =
new Windows.Storage.Pickers.FileSavePicker();
95 filePicker.SuggestedFileName = defaultName;
96 foreach (var extension
in extensions)
98 filePicker.FileTypeChoices.Add(extension.Name, extension.Extensions);
100 var file = await filePicker.PickSaveFileAsync();
101 var fileWithStream =
new ItemWithStream()
105 await Task.Run(() => cb(fileWithStream));
109 private static async Task<Stream> ReadStorageFile(StorageFile storageFile)
111 return await storageFile.OpenStreamForReadAsync();