protected override void PerformAction(object parameter) { var photo = parameter as FacebookPhoto; if (photo == null) { return; } string defaultFileName = "Facebook Photo"; if (photo.Album != null) { defaultFileName = photo.Album.Title + " (" + (photo.Album.Photos.IndexOf(photo) + 1) + ")"; } string filePath = null; if (Utility.IsOSVistaOrNewer) { IFileSaveDialog pFileSaveDialog = null; try { pFileSaveDialog = CLSID.CoCreateInstance <IFileSaveDialog>(CLSID.FileSaveDialog); pFileSaveDialog.SetOptions(pFileSaveDialog.GetOptions() | FOS.FORCEFILESYSTEM | FOS.OVERWRITEPROMPT); pFileSaveDialog.SetTitle("Select where to save the photo"); pFileSaveDialog.SetOkButtonLabel("Save Photo"); var filterspec = new COMDLG_FILTERSPEC { pszName = "Images", pszSpec = "*.jpg;*.png;*.bmp;*.gif" }; pFileSaveDialog.SetFileTypes(1, ref filterspec); pFileSaveDialog.SetFileName(defaultFileName); Guid clientId = _SavePhotoId; pFileSaveDialog.SetClientGuid(ref clientId); IShellItem pItem = null; try { pItem = ShellUtil.GetShellItemForPath(Environment.GetFolderPath(Environment.SpecialFolder.MyPictures)); pFileSaveDialog.SetDefaultFolder(pItem); } finally { Utility.SafeRelease(ref pItem); } HRESULT hr = pFileSaveDialog.Show(new WindowInteropHelper(Application.Current.MainWindow).Handle); if (hr.Failed) { Assert.AreEqual((HRESULT)Win32Error.ERROR_CANCELLED, hr); return; } pItem = null; try { pItem = pFileSaveDialog.GetResult(); filePath = ShellUtil.GetPathFromShellItem(pItem); } finally { Utility.SafeRelease(ref pItem); } } finally { Utility.SafeRelease(ref pFileSaveDialog); } } else { var saveFileDialog = new Microsoft.Win32.SaveFileDialog { Filter = "Image Files|*.jpg;*.png;*.bmp;*.gif", FileName = defaultFileName, InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures), }; if (saveFileDialog.ShowDialog(Application.Current.MainWindow) != true) { return; } filePath = saveFileDialog.FileName; } FacebookImageSaveOptions fiso = FacebookImageSaveOptions.FindBetterName; // We told the file dialog to prompt about overwriting, so if the user specified a location // with a file extension and the file already exists, prepare to overwrite. // This isn't quite right because the file extension may be different, so we may overwrite a jpg // when it was asked to be a gif, but it's not a likely scenario. if (System.IO.File.Exists(filePath)) { fiso = FacebookImageSaveOptions.Overwrite; } photo.Image.SaveToFile(FacebookImageDimensions.Big, filePath, true, fiso, _OnPhotoSaveProgressCallback, null); }
private static String ShowDialogInner(IFileSaveDialog dialog, IntPtr parentWindowHandle, String title, String initialDirectory, String defaultFileName, IReadOnlyCollection <Filter> filters, Int32 selectedFilterZeroBasedIndex = -1) { FileOpenOptions flags = FileOpenOptions.NoTestFileCreate | FileOpenOptions.PathMustExist | FileOpenOptions.ForceFilesystem | FileOpenOptions.OverwritePrompt; dialog.SetOptions(flags); if (title != null) { dialog.SetTitle(title); } if (initialDirectory != null) { IShellItem2 initialDirectoryShellItem = Utility.ParseShellItem2Name(initialDirectory); if (initialDirectoryShellItem != null) { dialog.SetFolder(initialDirectoryShellItem); } } // if( initialSaveAsItem != null ) // { // IShellItem2 initialSaveAsItemShellItem = Utility.ParseShellItem2Name( initialDirectory ); // if( initialSaveAsItemShellItem != null ) // { // dialog.SetSaveAsItem( initialSaveAsItemShellItem ); // } // } if (defaultFileName != null) { dialog.SetFileName(defaultFileName); } Utility.SetFilters(dialog, filters, selectedFilterZeroBasedIndex); HResult result = dialog.Show(parentWindowHandle); if (result == HResult.Ok) { IShellItem selectedItem; dialog.GetResult(out selectedItem); if (selectedItem != null) { return(Utility.GetFileNameFromShellItem(selectedItem)); } else { return(null); } } else if (result == HResult_Win32_Canceled) { // Cancelled by user. return(null); } else { UInt32 win32ErrorCode = Utility.Win32ErrorFromHResult((UInt32)result); throw new Win32Exception(error: (Int32)win32ErrorCode); } }
private static String ShowDialogInner(IFileSaveDialog dialog, IntPtr parentHWnd, String title, String initialDirectory, String defaultFileName, IReadOnlyCollection <Filter> filters, Int32 selectedFilterZeroBasedIndex = -1) { FileOpenOptions flags = FileOpenOptions.NoTestFileCreate | FileOpenOptions.PathMustExist | FileOpenOptions.ForceFilesystem | FileOpenOptions.OverwritePrompt; dialog.SetOptions(flags); if (title != null) { dialog.SetTitle(title); } if (initialDirectory != null) { IShellItem2 initialDirectoryShellItem = Utility.ParseShellItem2Name(initialDirectory); if (initialDirectoryShellItem != null) { dialog.SetFolder(initialDirectoryShellItem); } } // if( initialSaveAsItem != null ) // { // IShellItem2 initialSaveAsItemShellItem = Utility.ParseShellItem2Name( initialDirectory ); // if( initialSaveAsItemShellItem != null ) // { // dialog.SetSaveAsItem( initialSaveAsItemShellItem ); // } // } if (defaultFileName != null) { dialog.SetFileName(defaultFileName); } Utility.SetFilters(dialog, filters, selectedFilterZeroBasedIndex); HResult result = dialog.Show(parentHWnd); HResult cancelledAsHResult = Utility.HResultFromWin32((int)HResult.Win32ErrorCanceled); if (result == cancelledAsHResult) { // Cancelled return(null); } else { // OK IShellItem selectedItem; dialog.GetResult(out selectedItem); if (selectedItem != null) { return(Utility.GetFileNameFromShellItem(selectedItem)); } else { return(null); } } }
private static String ShowDialogInner(IFileSaveDialog dialog, IntPtr parentHWnd, String title, String initialDirectory, String defaultFileName, IReadOnlyCollection <Filter> filters, Int32 selectedFilterZeroBasedIndex = -1) #endif { FileOpenOptions flags = FileOpenOptions.NoTestFileCreate | FileOpenOptions.PathMustExist | FileOpenOptions.ForceFilesystem | FileOpenOptions.OverwritePrompt; dialog.SetOptions(flags); if (title != null) { dialog.SetTitle(title); } if (initialDirectory != null) { #if NETCOREAPP3_1_OR_GREATER IShellItem2?initialDirectoryShellItem = Utility.ParseShellItem2Name(initialDirectory); #else IShellItem2 initialDirectoryShellItem = Utility.ParseShellItem2Name(initialDirectory); #endif if (initialDirectoryShellItem != null) { dialog.SetFolder(initialDirectoryShellItem); } } // if( initialSaveAsItem != null ) // { // IShellItem2 initialSaveAsItemShellItem = Utility.ParseShellItem2Name( initialDirectory ); // if( initialSaveAsItemShellItem != null ) // { // dialog.SetSaveAsItem( initialSaveAsItemShellItem ); // } // } if (defaultFileName != null) { dialog.SetFileName(defaultFileName); } Utility.SetFilters(dialog, filters, selectedFilterZeroBasedIndex); // HResult hr = dialog.Show(parentHWnd); if (hr.ValidateDialogShowHResult()) { dialog.GetResult(out IShellItem selectedItem); if (selectedItem != null) { return(Utility.GetFileNameFromShellItem(selectedItem)); } else { return(null); } } else { // User cancelled. return(null); } }