コード例 #1
0
		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;
		}