|
|
@@ -24,301 +24,301 @@ namespace ControlCatalog.Pages
|
|
|
{
|
|
|
this.InitializeComponent();
|
|
|
|
|
|
-//// var results = this.Get<ItemsPresenter>("PickerLastResults");
|
|
|
-//// var resultsVisible = this.Get<TextBlock>("PickerLastResultsVisible");
|
|
|
-//// var bookmarkContainer = this.Get<TextBox>("BookmarkContainer");
|
|
|
-//// var openedFileContent = this.Get<TextBox>("OpenedFileContent");
|
|
|
-//// var openMultiple = this.Get<CheckBox>("OpenMultiple");
|
|
|
-
|
|
|
-//// IStorageFolder? lastSelectedDirectory = null;
|
|
|
-
|
|
|
-//// List<FileDialogFilter> GetFilters()
|
|
|
-//// {
|
|
|
-//// if (this.Get<CheckBox>("UseFilters").IsChecked != true)
|
|
|
-//// return new List<FileDialogFilter>();
|
|
|
-//// return new List<FileDialogFilter>
|
|
|
-//// {
|
|
|
-//// new FileDialogFilter
|
|
|
-//// {
|
|
|
-//// Name = "Text files (.txt)", Extensions = new List<string> {"txt"}
|
|
|
-//// },
|
|
|
-//// new FileDialogFilter
|
|
|
-//// {
|
|
|
-//// Name = "All files",
|
|
|
-//// Extensions = new List<string> {"*"}
|
|
|
-//// }
|
|
|
-//// };
|
|
|
-//// }
|
|
|
-
|
|
|
-//// List<FilePickerFileType>? GetFileTypes()
|
|
|
-//// {
|
|
|
-//// if (this.Get<CheckBox>("UseFilters").IsChecked != true)
|
|
|
-//// return null;
|
|
|
-//// return new List<FilePickerFileType>
|
|
|
-//// {
|
|
|
-//// FilePickerFileTypes.All,
|
|
|
-//// FilePickerFileTypes.TextPlain
|
|
|
-//// };
|
|
|
-//// }
|
|
|
-
|
|
|
-//// this.Get<Button>("OpenFile").Click += async delegate
|
|
|
-//// {
|
|
|
-//// // Almost guaranteed to exist
|
|
|
-//// var uri = Assembly.GetEntryAssembly()?.GetModules().FirstOrDefault()?.FullyQualifiedName;
|
|
|
-//// var initialFileName = uri == null ? null : System.IO.Path.GetFileName(uri);
|
|
|
-//// var initialDirectory = uri == null ? null : System.IO.Path.GetDirectoryName(uri);
|
|
|
-
|
|
|
-//// var result = await new OpenFileDialog()
|
|
|
-//// {
|
|
|
-//// Title = "Open file",
|
|
|
-//// Filters = GetFilters(),
|
|
|
-//// Directory = initialDirectory,
|
|
|
-//// InitialFileName = initialFileName
|
|
|
-//// }.ShowAsync(GetWindow());
|
|
|
-//// results.Items = result;
|
|
|
-//// resultsVisible.IsVisible = result?.Any() == true;
|
|
|
-//// };
|
|
|
-//// this.Get<Button>("OpenMultipleFiles").Click += async delegate
|
|
|
-//// {
|
|
|
-//// var result = await new OpenFileDialog()
|
|
|
-//// {
|
|
|
-//// Title = "Open multiple files",
|
|
|
-//// Filters = GetFilters(),
|
|
|
-//// Directory = lastSelectedDirectory?.TryGetUri(out var path) == true ? path.LocalPath : null,
|
|
|
-//// AllowMultiple = true
|
|
|
-//// }.ShowAsync(GetWindow());
|
|
|
-//// results.Items = result;
|
|
|
-//// resultsVisible.IsVisible = result?.Any() == true;
|
|
|
-//// };
|
|
|
-//// this.Get<Button>("SaveFile").Click += async delegate
|
|
|
-//// {
|
|
|
-//// var filters = GetFilters();
|
|
|
-//// var result = await new SaveFileDialog()
|
|
|
-//// {
|
|
|
-//// Title = "Save file",
|
|
|
-//// Filters = filters,
|
|
|
-//// Directory = lastSelectedDirectory?.TryGetUri(out var path) == true ? path.LocalPath : null,
|
|
|
-//// DefaultExtension = filters?.Any() == true ? "txt" : null,
|
|
|
-//// InitialFileName = "test.txt"
|
|
|
-//// }.ShowAsync(GetWindow());
|
|
|
-//// results.Items = new[] { result };
|
|
|
-//// resultsVisible.IsVisible = result != null;
|
|
|
-//// };
|
|
|
-//// this.Get<Button>("SelectFolder").Click += async delegate
|
|
|
-//// {
|
|
|
-//// var result = await new OpenFolderDialog()
|
|
|
-//// {
|
|
|
-//// Title = "Select folder",
|
|
|
-//// Directory = lastSelectedDirectory?.TryGetUri(out var path) == true ? path.LocalPath : null
|
|
|
-//// }.ShowAsync(GetWindow());
|
|
|
-//// if (string.IsNullOrEmpty(result))
|
|
|
-//// {
|
|
|
-//// resultsVisible.IsVisible = false;
|
|
|
-//// }
|
|
|
-//// else
|
|
|
-//// {
|
|
|
-//// lastSelectedDirectory = new BclStorageFolder(new System.IO.DirectoryInfo(result));
|
|
|
-//// results.Items = new[] { result };
|
|
|
-//// resultsVisible.IsVisible = true;
|
|
|
-//// }
|
|
|
-//// };
|
|
|
-//// this.Get<Button>("OpenBoth").Click += async delegate
|
|
|
-//// {
|
|
|
-//// var result = await new OpenFileDialog()
|
|
|
-//// {
|
|
|
-//// Title = "Select both",
|
|
|
-//// Directory = lastSelectedDirectory?.TryGetUri(out var path) == true ? path.LocalPath : null,
|
|
|
-//// AllowMultiple = true
|
|
|
-//// }.ShowManagedAsync(GetWindow(), new ManagedFileDialogOptions
|
|
|
-//// {
|
|
|
-//// AllowDirectorySelection = true
|
|
|
-//// });
|
|
|
-//// results.Items = result;
|
|
|
-//// resultsVisible.IsVisible = result?.Any() == true;
|
|
|
-//// };
|
|
|
-//// this.Get<Button>("DecoratedWindow").Click += delegate
|
|
|
-//// {
|
|
|
-//// new DecoratedWindow().Show();
|
|
|
-//// };
|
|
|
-//// this.Get<Button>("DecoratedWindowDialog").Click += delegate
|
|
|
-//// {
|
|
|
-//// _ = new DecoratedWindow().ShowDialog(GetWindow());
|
|
|
-//// };
|
|
|
-//// this.Get<Button>("Dialog").Click += delegate
|
|
|
-//// {
|
|
|
-//// var window = CreateSampleWindow();
|
|
|
-//// window.Height = 200;
|
|
|
-//// _ = window.ShowDialog(GetWindow());
|
|
|
-//// };
|
|
|
-//// this.Get<Button>("DialogNoTaskbar").Click += delegate
|
|
|
-//// {
|
|
|
-//// var window = CreateSampleWindow();
|
|
|
-//// window.Height = 200;
|
|
|
-//// window.ShowInTaskbar = false;
|
|
|
-//// _ = window.ShowDialog(GetWindow());
|
|
|
-//// };
|
|
|
-//// this.Get<Button>("OwnedWindow").Click += delegate
|
|
|
-//// {
|
|
|
-//// var window = CreateSampleWindow();
|
|
|
-
|
|
|
-//// window.Show(GetWindow());
|
|
|
-//// };
|
|
|
-
|
|
|
-//// this.Get<Button>("OwnedWindowNoTaskbar").Click += delegate
|
|
|
-//// {
|
|
|
-//// var window = CreateSampleWindow();
|
|
|
-
|
|
|
-//// window.ShowInTaskbar = false;
|
|
|
-
|
|
|
-//// window.Show(GetWindow());
|
|
|
-//// };
|
|
|
-
|
|
|
-//// this.Get<Button>("OpenFilePicker").Click += async delegate
|
|
|
-//// {
|
|
|
-//// var result = await GetStorageProvider().OpenFilePickerAsync(new FilePickerOpenOptions()
|
|
|
-//// {
|
|
|
-//// Title = "Open file",
|
|
|
-//// FileTypeFilter = GetFileTypes(),
|
|
|
-//// SuggestedStartLocation = lastSelectedDirectory,
|
|
|
-//// AllowMultiple = openMultiple.IsChecked == true
|
|
|
-//// });
|
|
|
-
|
|
|
-//// await SetPickerResult(result);
|
|
|
-//// };
|
|
|
-//// this.Get<Button>("SaveFilePicker").Click += async delegate
|
|
|
-//// {
|
|
|
-//// var fileTypes = GetFileTypes();
|
|
|
-//// var file = await GetStorageProvider().SaveFilePickerAsync(new FilePickerSaveOptions()
|
|
|
-//// {
|
|
|
-//// Title = "Save file",
|
|
|
-//// FileTypeChoices = fileTypes,
|
|
|
-//// SuggestedStartLocation = lastSelectedDirectory,
|
|
|
-//// SuggestedFileName = "FileName",
|
|
|
-//// DefaultExtension = fileTypes?.Any() == true ? "txt" : null,
|
|
|
-//// ShowOverwritePrompt = false
|
|
|
-//// });
|
|
|
-
|
|
|
-//// if (file is not null && file.CanOpenWrite)
|
|
|
-//// {
|
|
|
-//// // Sync disposal of StreamWriter is not supported on WASM
|
|
|
-////#if NET6_0_OR_GREATER
|
|
|
-//// await using var stream = await file.OpenWriteAsync();
|
|
|
-//// await using var reader = new System.IO.StreamWriter(stream);
|
|
|
-////#else
|
|
|
-//// using var stream = await file.OpenWriteAsync();
|
|
|
-//// using var reader = new System.IO.StreamWriter(stream);
|
|
|
-////#endif
|
|
|
-//// await reader.WriteLineAsync(openedFileContent.Text);
|
|
|
-
|
|
|
-//// lastSelectedDirectory = await file.GetParentAsync();
|
|
|
-//// }
|
|
|
-
|
|
|
-//// await SetPickerResult(file is null ? null : new [] {file});
|
|
|
-//// };
|
|
|
-//// this.Get<Button>("OpenFolderPicker").Click += async delegate
|
|
|
-//// {
|
|
|
-//// var folders = await GetStorageProvider().OpenFolderPickerAsync(new FolderPickerOpenOptions()
|
|
|
-//// {
|
|
|
-//// Title = "Folder file",
|
|
|
-//// SuggestedStartLocation = lastSelectedDirectory,
|
|
|
-//// AllowMultiple = openMultiple.IsChecked == true
|
|
|
-//// });
|
|
|
-
|
|
|
-//// await SetPickerResult(folders);
|
|
|
-
|
|
|
-//// lastSelectedDirectory = folders.FirstOrDefault();
|
|
|
-//// };
|
|
|
-//// this.Get<Button>("OpenFileFromBookmark").Click += async delegate
|
|
|
-//// {
|
|
|
-//// var file = bookmarkContainer.Text is not null
|
|
|
-//// ? await GetStorageProvider().OpenFileBookmarkAsync(bookmarkContainer.Text)
|
|
|
-//// : null;
|
|
|
-
|
|
|
-//// await SetPickerResult(file is null ? null : new[] { file });
|
|
|
-//// };
|
|
|
-//// this.Get<Button>("OpenFolderFromBookmark").Click += async delegate
|
|
|
-//// {
|
|
|
-//// var folder = bookmarkContainer.Text is not null
|
|
|
-//// ? await GetStorageProvider().OpenFolderBookmarkAsync(bookmarkContainer.Text)
|
|
|
-//// : null;
|
|
|
-
|
|
|
-//// await SetPickerResult(folder is null ? null : new[] { folder });
|
|
|
-
|
|
|
-//// lastSelectedDirectory = folder;
|
|
|
-//// };
|
|
|
-
|
|
|
-//// async Task SetPickerResult(IReadOnlyCollection<IStorageItem>? items)
|
|
|
-//// {
|
|
|
-//// items ??= Array.Empty<IStorageItem>();
|
|
|
-//// bookmarkContainer.Text = items.FirstOrDefault(f => f.CanBookmark) is { } f ? await f.SaveBookmarkAsync() : "Can't bookmark";
|
|
|
-//// var mappedResults = new List<string>();
|
|
|
-
|
|
|
-//// if (items.FirstOrDefault() is IStorageItem item)
|
|
|
-//// {
|
|
|
-//// var resultText = item is IStorageFile ? "File:" : "Folder:";
|
|
|
-//// resultText += Environment.NewLine;
|
|
|
-
|
|
|
-//// var props = await item.GetBasicPropertiesAsync();
|
|
|
-//// resultText += @$"Size: {props.Size}
|
|
|
-////DateCreated: {props.DateCreated}
|
|
|
-////DateModified: {props.DateModified}
|
|
|
-////CanBookmark: {item.CanBookmark}
|
|
|
-////";
|
|
|
-//// if (item is IStorageFile file)
|
|
|
-//// {
|
|
|
-//// resultText += @$"
|
|
|
-////CanOpenRead: {file.CanOpenRead}
|
|
|
-////CanOpenWrite: {file.CanOpenWrite}
|
|
|
-////Content:
|
|
|
-////";
|
|
|
-//// if (file.CanOpenRead)
|
|
|
-//// {
|
|
|
-////#if NET6_0_OR_GREATER
|
|
|
-//// await using var stream = await file.OpenReadAsync();
|
|
|
-////#else
|
|
|
-//// using var stream = await file.OpenReadAsync();
|
|
|
-////#endif
|
|
|
-//// using var reader = new System.IO.StreamReader(stream);
|
|
|
-
|
|
|
-//// // 4GB file test, shouldn't load more than 10000 chars into a memory.
|
|
|
-//// const int length = 10000;
|
|
|
-//// var buffer = ArrayPool<char>.Shared.Rent(length);
|
|
|
-//// try
|
|
|
-//// {
|
|
|
-//// var charsRead = await reader.ReadAsync(buffer, 0, length);
|
|
|
-//// resultText += new string(buffer, 0, charsRead);
|
|
|
-//// }
|
|
|
-//// finally
|
|
|
-//// {
|
|
|
-//// ArrayPool<char>.Shared.Return(buffer);
|
|
|
-//// }
|
|
|
-//// }
|
|
|
-//// }
|
|
|
-
|
|
|
-//// openedFileContent.Text = resultText;
|
|
|
-
|
|
|
-//// lastSelectedDirectory = await item.GetParentAsync();
|
|
|
-//// if (lastSelectedDirectory is not null)
|
|
|
-//// {
|
|
|
-//// mappedResults.Add(FullPathOrName(lastSelectedDirectory));
|
|
|
-//// }
|
|
|
-
|
|
|
-//// foreach (var selectedItem in items)
|
|
|
-//// {
|
|
|
-//// mappedResults.Add("+> " + FullPathOrName(selectedItem));
|
|
|
-//// if (selectedItem is IStorageFolder folder)
|
|
|
-//// {
|
|
|
-//// foreach (var innerItems in await folder.GetItemsAsync())
|
|
|
-//// {
|
|
|
-//// mappedResults.Add("++> " + FullPathOrName(innerItems));
|
|
|
-//// }
|
|
|
-//// }
|
|
|
-//// }
|
|
|
-//// }
|
|
|
-
|
|
|
-//// results.Items = mappedResults;
|
|
|
-//// resultsVisible.IsVisible = mappedResults.Any();
|
|
|
-//// }
|
|
|
+ var results = this.Get<ItemsControl>("PickerLastResults");
|
|
|
+ var resultsVisible = this.Get<TextBlock>("PickerLastResultsVisible");
|
|
|
+ var bookmarkContainer = this.Get<TextBox>("BookmarkContainer");
|
|
|
+ var openedFileContent = this.Get<TextBox>("OpenedFileContent");
|
|
|
+ var openMultiple = this.Get<CheckBox>("OpenMultiple");
|
|
|
+
|
|
|
+ IStorageFolder? lastSelectedDirectory = null;
|
|
|
+
|
|
|
+ List<FileDialogFilter> GetFilters()
|
|
|
+ {
|
|
|
+ if (this.Get<CheckBox>("UseFilters").IsChecked != true)
|
|
|
+ return new List<FileDialogFilter>();
|
|
|
+ return new List<FileDialogFilter>
|
|
|
+ {
|
|
|
+ new FileDialogFilter
|
|
|
+ {
|
|
|
+ Name = "Text files (.txt)", Extensions = new List<string> {"txt"}
|
|
|
+ },
|
|
|
+ new FileDialogFilter
|
|
|
+ {
|
|
|
+ Name = "All files",
|
|
|
+ Extensions = new List<string> {"*"}
|
|
|
+ }
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ List<FilePickerFileType>? GetFileTypes()
|
|
|
+ {
|
|
|
+ if (this.Get<CheckBox>("UseFilters").IsChecked != true)
|
|
|
+ return null;
|
|
|
+ return new List<FilePickerFileType>
|
|
|
+ {
|
|
|
+ FilePickerFileTypes.All,
|
|
|
+ FilePickerFileTypes.TextPlain
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ this.Get<Button>("OpenFile").Click += async delegate
|
|
|
+ {
|
|
|
+ // Almost guaranteed to exist
|
|
|
+ var uri = Assembly.GetEntryAssembly()?.GetModules().FirstOrDefault()?.FullyQualifiedName;
|
|
|
+ var initialFileName = uri == null ? null : System.IO.Path.GetFileName(uri);
|
|
|
+ var initialDirectory = uri == null ? null : System.IO.Path.GetDirectoryName(uri);
|
|
|
+
|
|
|
+ var result = await new OpenFileDialog()
|
|
|
+ {
|
|
|
+ Title = "Open file",
|
|
|
+ Filters = GetFilters(),
|
|
|
+ Directory = initialDirectory,
|
|
|
+ InitialFileName = initialFileName
|
|
|
+ }.ShowAsync(GetWindow());
|
|
|
+ results.Items = result;
|
|
|
+ resultsVisible.IsVisible = result?.Any() == true;
|
|
|
+ };
|
|
|
+ this.Get<Button>("OpenMultipleFiles").Click += async delegate
|
|
|
+ {
|
|
|
+ var result = await new OpenFileDialog()
|
|
|
+ {
|
|
|
+ Title = "Open multiple files",
|
|
|
+ Filters = GetFilters(),
|
|
|
+ Directory = lastSelectedDirectory?.TryGetUri(out var path) == true ? path.LocalPath : null,
|
|
|
+ AllowMultiple = true
|
|
|
+ }.ShowAsync(GetWindow());
|
|
|
+ results.Items = result;
|
|
|
+ resultsVisible.IsVisible = result?.Any() == true;
|
|
|
+ };
|
|
|
+ this.Get<Button>("SaveFile").Click += async delegate
|
|
|
+ {
|
|
|
+ var filters = GetFilters();
|
|
|
+ var result = await new SaveFileDialog()
|
|
|
+ {
|
|
|
+ Title = "Save file",
|
|
|
+ Filters = filters,
|
|
|
+ Directory = lastSelectedDirectory?.TryGetUri(out var path) == true ? path.LocalPath : null,
|
|
|
+ DefaultExtension = filters?.Any() == true ? "txt" : null,
|
|
|
+ InitialFileName = "test.txt"
|
|
|
+ }.ShowAsync(GetWindow());
|
|
|
+ results.Items = new[] { result };
|
|
|
+ resultsVisible.IsVisible = result != null;
|
|
|
+ };
|
|
|
+ this.Get<Button>("SelectFolder").Click += async delegate
|
|
|
+ {
|
|
|
+ var result = await new OpenFolderDialog()
|
|
|
+ {
|
|
|
+ Title = "Select folder",
|
|
|
+ Directory = lastSelectedDirectory?.TryGetUri(out var path) == true ? path.LocalPath : null
|
|
|
+ }.ShowAsync(GetWindow());
|
|
|
+ if (string.IsNullOrEmpty(result))
|
|
|
+ {
|
|
|
+ resultsVisible.IsVisible = false;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ lastSelectedDirectory = new BclStorageFolder(new System.IO.DirectoryInfo(result));
|
|
|
+ results.Items = new[] { result };
|
|
|
+ resultsVisible.IsVisible = true;
|
|
|
+ }
|
|
|
+ };
|
|
|
+ this.Get<Button>("OpenBoth").Click += async delegate
|
|
|
+ {
|
|
|
+ var result = await new OpenFileDialog()
|
|
|
+ {
|
|
|
+ Title = "Select both",
|
|
|
+ Directory = lastSelectedDirectory?.TryGetUri(out var path) == true ? path.LocalPath : null,
|
|
|
+ AllowMultiple = true
|
|
|
+ }.ShowManagedAsync(GetWindow(), new ManagedFileDialogOptions
|
|
|
+ {
|
|
|
+ AllowDirectorySelection = true
|
|
|
+ });
|
|
|
+ results.Items = result;
|
|
|
+ resultsVisible.IsVisible = result?.Any() == true;
|
|
|
+ };
|
|
|
+ this.Get<Button>("DecoratedWindow").Click += delegate
|
|
|
+ {
|
|
|
+ new DecoratedWindow().Show();
|
|
|
+ };
|
|
|
+ this.Get<Button>("DecoratedWindowDialog").Click += delegate
|
|
|
+ {
|
|
|
+ _ = new DecoratedWindow().ShowDialog(GetWindow());
|
|
|
+ };
|
|
|
+ this.Get<Button>("Dialog").Click += delegate
|
|
|
+ {
|
|
|
+ var window = CreateSampleWindow();
|
|
|
+ window.Height = 200;
|
|
|
+ _ = window.ShowDialog(GetWindow());
|
|
|
+ };
|
|
|
+ this.Get<Button>("DialogNoTaskbar").Click += delegate
|
|
|
+ {
|
|
|
+ var window = CreateSampleWindow();
|
|
|
+ window.Height = 200;
|
|
|
+ window.ShowInTaskbar = false;
|
|
|
+ _ = window.ShowDialog(GetWindow());
|
|
|
+ };
|
|
|
+ this.Get<Button>("OwnedWindow").Click += delegate
|
|
|
+ {
|
|
|
+ var window = CreateSampleWindow();
|
|
|
+
|
|
|
+ window.Show(GetWindow());
|
|
|
+ };
|
|
|
+
|
|
|
+ this.Get<Button>("OwnedWindowNoTaskbar").Click += delegate
|
|
|
+ {
|
|
|
+ var window = CreateSampleWindow();
|
|
|
+
|
|
|
+ window.ShowInTaskbar = false;
|
|
|
+
|
|
|
+ window.Show(GetWindow());
|
|
|
+ };
|
|
|
+
|
|
|
+ this.Get<Button>("OpenFilePicker").Click += async delegate
|
|
|
+ {
|
|
|
+ var result = await GetStorageProvider().OpenFilePickerAsync(new FilePickerOpenOptions()
|
|
|
+ {
|
|
|
+ Title = "Open file",
|
|
|
+ FileTypeFilter = GetFileTypes(),
|
|
|
+ SuggestedStartLocation = lastSelectedDirectory,
|
|
|
+ AllowMultiple = openMultiple.IsChecked == true
|
|
|
+ });
|
|
|
+
|
|
|
+ await SetPickerResult(result);
|
|
|
+ };
|
|
|
+ this.Get<Button>("SaveFilePicker").Click += async delegate
|
|
|
+ {
|
|
|
+ var fileTypes = GetFileTypes();
|
|
|
+ var file = await GetStorageProvider().SaveFilePickerAsync(new FilePickerSaveOptions()
|
|
|
+ {
|
|
|
+ Title = "Save file",
|
|
|
+ FileTypeChoices = fileTypes,
|
|
|
+ SuggestedStartLocation = lastSelectedDirectory,
|
|
|
+ SuggestedFileName = "FileName",
|
|
|
+ DefaultExtension = fileTypes?.Any() == true ? "txt" : null,
|
|
|
+ ShowOverwritePrompt = false
|
|
|
+ });
|
|
|
+
|
|
|
+ if (file is not null && file.CanOpenWrite)
|
|
|
+ {
|
|
|
+ // Sync disposal of StreamWriter is not supported on WASM
|
|
|
+#if NET6_0_OR_GREATER
|
|
|
+ await using var stream = await file.OpenWriteAsync();
|
|
|
+ await using var reader = new System.IO.StreamWriter(stream);
|
|
|
+#else
|
|
|
+ using var stream = await file.OpenWriteAsync();
|
|
|
+ using var reader = new System.IO.StreamWriter(stream);
|
|
|
+#endif
|
|
|
+ await reader.WriteLineAsync(openedFileContent.Text);
|
|
|
+
|
|
|
+ lastSelectedDirectory = await file.GetParentAsync();
|
|
|
+ }
|
|
|
+
|
|
|
+ await SetPickerResult(file is null ? null : new[] { file });
|
|
|
+ };
|
|
|
+ this.Get<Button>("OpenFolderPicker").Click += async delegate
|
|
|
+ {
|
|
|
+ var folders = await GetStorageProvider().OpenFolderPickerAsync(new FolderPickerOpenOptions()
|
|
|
+ {
|
|
|
+ Title = "Folder file",
|
|
|
+ SuggestedStartLocation = lastSelectedDirectory,
|
|
|
+ AllowMultiple = openMultiple.IsChecked == true
|
|
|
+ });
|
|
|
+
|
|
|
+ await SetPickerResult(folders);
|
|
|
+
|
|
|
+ lastSelectedDirectory = folders.FirstOrDefault();
|
|
|
+ };
|
|
|
+ this.Get<Button>("OpenFileFromBookmark").Click += async delegate
|
|
|
+ {
|
|
|
+ var file = bookmarkContainer.Text is not null
|
|
|
+ ? await GetStorageProvider().OpenFileBookmarkAsync(bookmarkContainer.Text)
|
|
|
+ : null;
|
|
|
+
|
|
|
+ await SetPickerResult(file is null ? null : new[] { file });
|
|
|
+ };
|
|
|
+ this.Get<Button>("OpenFolderFromBookmark").Click += async delegate
|
|
|
+ {
|
|
|
+ var folder = bookmarkContainer.Text is not null
|
|
|
+ ? await GetStorageProvider().OpenFolderBookmarkAsync(bookmarkContainer.Text)
|
|
|
+ : null;
|
|
|
+
|
|
|
+ await SetPickerResult(folder is null ? null : new[] { folder });
|
|
|
+
|
|
|
+ lastSelectedDirectory = folder;
|
|
|
+ };
|
|
|
+
|
|
|
+ async Task SetPickerResult(IReadOnlyCollection<IStorageItem>? items)
|
|
|
+ {
|
|
|
+ items ??= Array.Empty<IStorageItem>();
|
|
|
+ bookmarkContainer.Text = items.FirstOrDefault(f => f.CanBookmark) is { } f ? await f.SaveBookmarkAsync() : "Can't bookmark";
|
|
|
+ var mappedResults = new List<string>();
|
|
|
+
|
|
|
+ if (items.FirstOrDefault() is IStorageItem item)
|
|
|
+ {
|
|
|
+ var resultText = item is IStorageFile ? "File:" : "Folder:";
|
|
|
+ resultText += Environment.NewLine;
|
|
|
+
|
|
|
+ var props = await item.GetBasicPropertiesAsync();
|
|
|
+ resultText += @$"Size: {props.Size}
|
|
|
+ DateCreated: {props.DateCreated}
|
|
|
+ DateModified: {props.DateModified}
|
|
|
+ CanBookmark: {item.CanBookmark}
|
|
|
+ ";
|
|
|
+ if (item is IStorageFile file)
|
|
|
+ {
|
|
|
+ resultText += @$"
|
|
|
+ CanOpenRead: {file.CanOpenRead}
|
|
|
+ CanOpenWrite: {file.CanOpenWrite}
|
|
|
+ Content:
|
|
|
+ ";
|
|
|
+ if (file.CanOpenRead)
|
|
|
+ {
|
|
|
+#if NET6_0_OR_GREATER
|
|
|
+ await using var stream = await file.OpenReadAsync();
|
|
|
+#else
|
|
|
+ using var stream = await file.OpenReadAsync();
|
|
|
+#endif
|
|
|
+ using var reader = new System.IO.StreamReader(stream);
|
|
|
+
|
|
|
+ // 4GB file test, shouldn't load more than 10000 chars into a memory.
|
|
|
+ const int length = 10000;
|
|
|
+ var buffer = ArrayPool<char>.Shared.Rent(length);
|
|
|
+ try
|
|
|
+ {
|
|
|
+ var charsRead = await reader.ReadAsync(buffer, 0, length);
|
|
|
+ resultText += new string(buffer, 0, charsRead);
|
|
|
+ }
|
|
|
+ finally
|
|
|
+ {
|
|
|
+ ArrayPool<char>.Shared.Return(buffer);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ openedFileContent.Text = resultText;
|
|
|
+
|
|
|
+ lastSelectedDirectory = await item.GetParentAsync();
|
|
|
+ if (lastSelectedDirectory is not null)
|
|
|
+ {
|
|
|
+ mappedResults.Add(FullPathOrName(lastSelectedDirectory));
|
|
|
+ }
|
|
|
+
|
|
|
+ foreach (var selectedItem in items)
|
|
|
+ {
|
|
|
+ mappedResults.Add("+> " + FullPathOrName(selectedItem));
|
|
|
+ if (selectedItem is IStorageFolder folder)
|
|
|
+ {
|
|
|
+ foreach (var innerItems in await folder.GetItemsAsync())
|
|
|
+ {
|
|
|
+ mappedResults.Add("++> " + FullPathOrName(innerItems));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ results.Items = mappedResults;
|
|
|
+ resultsVisible.IsVisible = mappedResults.Any();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e)
|