public virtual async void DragEnter(DragEventArgs e) { var deferral = e.GetDeferral(); itemManipulationModel.ClearSelection(); if (e.DataView.Contains(StandardDataFormats.StorageItems)) { e.Handled = true; e.DragUIOverride.IsCaptionVisible = true; IEnumerable <IStorageItem> draggedItems = new List <IStorageItem>(); try { draggedItems = await e.DataView.GetStorageItemsAsync(); } catch (Exception dropEx) when((uint)dropEx.HResult == 0x80040064) { if (associatedInstance.ServiceConnection != null) { await associatedInstance.ServiceConnection.SendMessageAsync(new ValueSet() { { "Arguments", "FileOperation" }, { "fileop", "DragDrop" }, { "droptext", "DragDropWindowText".GetLocalized() }, { "droppath", associatedInstance.FilesystemViewModel.WorkingDirectory } }); } } catch (Exception ex) { NLog.LogManager.GetCurrentClassLogger().Warn(ex, ex.Message); } if (!draggedItems.Any()) { e.AcceptedOperation = DataPackageOperation.None; deferral.Complete(); return; } var folderName = System.IO.Path.GetFileName(associatedInstance.FilesystemViewModel.WorkingDirectory); // As long as one file doesn't already belong to this folder if (associatedInstance.InstanceViewModel.IsPageTypeSearchResults || draggedItems.All(x => Path.GetDirectoryName(x.Path) == associatedInstance.FilesystemViewModel.WorkingDirectory)) { e.AcceptedOperation = DataPackageOperation.None; } else if (draggedItems.AreItemsInSameDrive(associatedInstance.FilesystemViewModel.WorkingDirectory)) { e.DragUIOverride.Caption = string.Format("MoveToFolderCaptionText".GetLocalized(), folderName); e.AcceptedOperation = DataPackageOperation.Move; } else { e.DragUIOverride.Caption = string.Format("CopyToFolderCaptionText".GetLocalized(), folderName); e.AcceptedOperation = DataPackageOperation.Copy; } } deferral.Complete(); }
public virtual async Task DragOver(DragEventArgs e) { var deferral = e.GetDeferral(); if (associatedInstance.InstanceViewModel.IsPageTypeSearchResults) { e.AcceptedOperation = DataPackageOperation.None; deferral.Complete(); return; } itemManipulationModel.ClearSelection(); if (Filesystem.FilesystemHelpers.HasDraggedStorageItems(e.DataView)) { e.Handled = true; var handledByFtp = await Filesystem.FilesystemHelpers.CheckDragNeedsFulltrust(e.DataView); var draggedItems = await Filesystem.FilesystemHelpers.GetDraggedStorageItems(e.DataView); var pwd = associatedInstance.FilesystemViewModel.WorkingDirectory.TrimPath(); var folderName = (Path.IsPathRooted(pwd) && Path.GetPathRoot(pwd) == pwd) ? Path.GetPathRoot(pwd) : Path.GetFileName(pwd); // As long as one file doesn't already belong to this folder if (associatedInstance.InstanceViewModel.IsPageTypeSearchResults || (draggedItems.Any() && draggedItems.AreItemsAlreadyInFolder(associatedInstance.FilesystemViewModel.WorkingDirectory))) { e.AcceptedOperation = DataPackageOperation.None; } else if (handledByFtp) { if (pwd.StartsWith(CommonPaths.RecycleBinPath, StringComparison.Ordinal)) { e.AcceptedOperation = DataPackageOperation.None; } else { e.DragUIOverride.IsCaptionVisible = true; e.DragUIOverride.Caption = string.Format("CopyToFolderCaptionText".GetLocalized(), folderName); e.AcceptedOperation = DataPackageOperation.Copy; } } else if (!draggedItems.Any()) { e.AcceptedOperation = DataPackageOperation.None; } else { e.DragUIOverride.IsCaptionVisible = true; if (pwd.StartsWith(CommonPaths.RecycleBinPath, StringComparison.Ordinal)) { e.DragUIOverride.Caption = string.Format("MoveToFolderCaptionText".GetLocalized(), folderName); e.AcceptedOperation = DataPackageOperation.Move; } else if (e.Modifiers.HasFlag(DragDropModifiers.Alt) || e.Modifiers.HasFlag(DragDropModifiers.Control | DragDropModifiers.Shift)) { e.DragUIOverride.Caption = string.Format("LinkToFolderCaptionText".GetLocalized(), folderName); e.AcceptedOperation = DataPackageOperation.Link; } else if (e.Modifiers.HasFlag(DragDropModifiers.Control)) { e.DragUIOverride.Caption = string.Format("CopyToFolderCaptionText".GetLocalized(), folderName); e.AcceptedOperation = DataPackageOperation.Copy; } else if (e.Modifiers.HasFlag(DragDropModifiers.Shift)) { e.DragUIOverride.Caption = string.Format("MoveToFolderCaptionText".GetLocalized(), folderName); e.AcceptedOperation = DataPackageOperation.Move; } else if (draggedItems.Any(x => x.Item is ZipStorageFile || x.Item is ZipStorageFolder) || ZipStorageFolder.IsZipPath(pwd)) { e.DragUIOverride.Caption = string.Format("CopyToFolderCaptionText".GetLocalized(), folderName); e.AcceptedOperation = DataPackageOperation.Copy; } else if (draggedItems.AreItemsInSameDrive(associatedInstance.FilesystemViewModel.WorkingDirectory)) { e.DragUIOverride.Caption = string.Format("MoveToFolderCaptionText".GetLocalized(), folderName); e.AcceptedOperation = DataPackageOperation.Move; } else { e.DragUIOverride.Caption = string.Format("CopyToFolderCaptionText".GetLocalized(), folderName); e.AcceptedOperation = DataPackageOperation.Copy; } } } deferral.Complete(); }
public virtual async void DragOver(DragEventArgs e) { var deferral = e.GetDeferral(); itemManipulationModel.ClearSelection(); if (e.DataView.Contains(StandardDataFormats.StorageItems)) { e.Handled = true; IEnumerable <IStorageItem> draggedItems; try { draggedItems = await e.DataView.GetStorageItemsAsync(); } catch (Exception ex) when((uint)ex.HResult == 0x80040064 || (uint)ex.HResult == 0x8004006A) { // Handled by FTP draggedItems = new List <IStorageItem>(); } catch (Exception ex) { App.Logger.Warn(ex, ex.Message); e.AcceptedOperation = DataPackageOperation.None; deferral.Complete(); return; } var pwd = associatedInstance.FilesystemViewModel.WorkingDirectory.TrimPath(); var folderName = (Path.IsPathRooted(pwd) && Path.GetPathRoot(pwd) == pwd) ? Path.GetPathRoot(pwd) : Path.GetFileName(pwd); // As long as one file doesn't already belong to this folder if (associatedInstance.InstanceViewModel.IsPageTypeSearchResults || (draggedItems.Any() && draggedItems.AreItemsAlreadyInFolder(associatedInstance.FilesystemViewModel.WorkingDirectory))) { e.AcceptedOperation = DataPackageOperation.None; } else if (!draggedItems.Any()) { if (pwd.StartsWith(App.AppSettings.RecycleBinPath)) { e.AcceptedOperation = DataPackageOperation.None; } else { e.DragUIOverride.IsCaptionVisible = true; e.DragUIOverride.Caption = string.Format("CopyToFolderCaptionText".GetLocalized(), folderName); e.AcceptedOperation = DataPackageOperation.Copy; } } else { e.DragUIOverride.IsCaptionVisible = true; if (pwd.StartsWith(App.AppSettings.RecycleBinPath)) { e.DragUIOverride.Caption = string.Format("MoveToFolderCaptionText".GetLocalized(), folderName); e.AcceptedOperation = DataPackageOperation.Move; } else if (e.Modifiers.HasFlag(DragDropModifiers.Control)) { e.DragUIOverride.Caption = string.Format("CopyToFolderCaptionText".GetLocalized(), folderName); e.AcceptedOperation = DataPackageOperation.Copy; } else if (e.Modifiers.HasFlag(DragDropModifiers.Shift)) { e.DragUIOverride.Caption = string.Format("MoveToFolderCaptionText".GetLocalized(), folderName); e.AcceptedOperation = DataPackageOperation.Move; } else if (draggedItems.AreItemsInSameDrive(associatedInstance.FilesystemViewModel.WorkingDirectory)) { e.DragUIOverride.Caption = string.Format("MoveToFolderCaptionText".GetLocalized(), folderName); e.AcceptedOperation = DataPackageOperation.Move; } else { e.DragUIOverride.Caption = string.Format("CopyToFolderCaptionText".GetLocalized(), folderName); e.AcceptedOperation = DataPackageOperation.Copy; } } } deferral.Complete(); }