public async Task<bool> MoveDocuments (IFile[] files, UIBarButtonItem duplicateButton, UIViewController fromViewController) { if (DismissSheetsAndPopovers ()) return false; if (files.Length == 0) return false; // // Make sure all the file systems are initialized // foreach (var fs in FileSystemManager.Shared.FileSystems) { await InitializeFileSystemAsync (fs); } // // Find where we're supposed to move to // var tcs = new TaskCompletionSource<bool> (); var form = new MoveDocumentsForm { Title = "Move " + DescribeFiles (files) + " to", AutoCancelButton = true, AutoDoneButton = false, }; form.Dismissed += tcs.SetResult; var formNav = new UINavigationController (form) { ModalPresentationStyle = UIModalPresentationStyle.FormSheet, }; formNav.NavigationBar.BarStyle = Theme.NavigationBarStyle; await fromViewController.PresentViewControllerAsync (formNav, true); var shouldMove = await tcs.Task; if (!shouldMove) return false; // // Skip the move? // if (ActiveFileSystem == form.FileSystem && CurrentDirectory == form.Directory) { return true; } // // Make sure we're not trying to move a directory into its own child // if (ActiveFileSystem == form.FileSystem) { if (files.Any (x => x.IsDirectory && form.Directory.StartsWith (x.Path, StringComparison.Ordinal))) { throw new Exception ("You cannot move a folder into one of its subfolders."); } } // // Perform the move // var list = CurrentDocumentListController; foreach (var f in files) { await MoveDoc (f, list, form.FileSystem, form.Directory, false); } // // Update the UI // await list.LoadDocs (); return true; }