private void MessagesTreeView_DragDrop(object sender, DragEventArgs e) { if (e.Data.GetData(DataFormats.FileDrop) != null) // Some files have been dragged to application { LoadFilesToTree(e.Data.GetData(DataFormats.FileDrop) as string[]); } else // Some Emails from outlook have been dragged to application { CheckTreeMessages(); new Thread(new ThreadStart(delegate() { //wrap standard IDataObject in OutlookDataObject OutlookDataObject dataObject = new OutlookDataObject(e.Data); //get the names and data streams of the files dropped string[] filenames = (string[])dataObject.GetData("FileGroupDescriptor"); MemoryStream[] filestreams = (MemoryStream[])dataObject.GetData("FileContents"); for (int fileIndex = 0; fileIndex < filenames.Length; fileIndex++) { //use the fileindex to get the name and data stream string filename = filenames[fileIndex]; using (MemoryStream filestream = filestreams[fileIndex]) { using (MsgReader.Outlook.Storage.Message message = new MsgReader.Outlook.Storage.Message(filestream, FileAccess.Read)) { this.LoadMsgToTree(message); } } } })).Start(); } }
public static void Form_DragDrop(object sender, DragEventArgs e) { TextBox _thistb = (TextBox)sender; Form1 _thisForm = (Form1)_thistb.FindForm(); try { OutlookDataObject dataObject = new OutlookDataObject(e.Data); string stockname = _thistb.Text; //get the names and data streams of the files dropped string[] filenames = (string[])dataObject.GetData("FileGroupDescriptor"); MemoryStream[] filestreams = (MemoryStream[])dataObject.GetData("FileContents"); if (stockname.Split('.')[1] != filenames[0].Split('.').Last <string>()) { if (_thisForm.TopMost != true) { _thisForm.TopMost = true; MessageBox.Show("Некорректный формат, необходимо вручную пересохранить файл", "Ошибка переноса", MessageBoxButtons.OK, MessageBoxIcon.Error); _thisForm.TopMost = false; } else { MessageBox.Show("Некорректный формат, необходимо вручную пересохранить файл", "Ошибка переноса", MessageBoxButtons.OK, MessageBoxIcon.Error); } _thistb.BackColor = Color.White; return; } for (int fileIndex = 0; fileIndex < filenames.Length; fileIndex++) { //use the fileindex to get the name and data stream string filename = filenames[fileIndex]; MemoryStream filestream = filestreams[fileIndex]; //save the file stream using its name to the application path FileStream outputStream = File.Create(Properties.Settings.Default.self_Stock + @"\" + stockname); filestream.WriteTo(outputStream); outputStream.Close(); } } catch { if (_thisForm.TopMost != true) { _thisForm.TopMost = true; MessageBox.Show("Необходимо перетащить файл из OutLook", "Ошибка переноса", MessageBoxButtons.OK, MessageBoxIcon.Error); _thisForm.TopMost = false; } else { MessageBox.Show("Необходимо перетащить файл из OutLook", "Ошибка переноса", MessageBoxButtons.OK, MessageBoxIcon.Error); } _thistb.BackColor = Color.White; } _thisForm._cRow.AvailableCheak(); _thistb.BackColor = Color.White; }
/// <summary> /// Checkin all documents contained in the given DataObject /// </summary> /// <param name="parentId">Parent ID</param> /// <param name="dataObjectCOM">COM DataObject</param> protected virtual void checkinDataObject(String parentId, IDataObject dataObjectCOM) { if (dataObjectCOM != null) { CheckinEventArgs e = new CheckinEventArgs(); e.ParentId = parentId; if (dataObjectCOM.GetDataPresent("FileGroupDescriptorW")) { //wrap standard IDataObject in OutlookDataObject OutlookDataObject dataObject = new OutlookDataObject(dataObjectCOM); //get the names and data streams of the files dropped string[] filenames = (string[])dataObject.GetData("FileGroupDescriptorW"); MemoryStream[] filestreams = (MemoryStream[])dataObject.GetData("FileContents"); for (int fileIndex = 0; fileIndex < filenames.Length; fileIndex++) { //use the fileindex to get the name and data stream string fname = Conn.Content.TempDir + "\\" + filenames[fileIndex]; MemoryStream filestream = filestreams[fileIndex]; //save the file stream using its name FileStream outputStream = File.Create(fname); filestream.WriteTo(outputStream); outputStream.Close(); File.SetAttributes(fname, FileAttributes.ReadOnly); // checkin if (checkinNewDocument(parentId, fname, fileIndex, filenames.Length)) { break; } } } else if (dataObjectCOM.GetDataPresent(DataFormats.FileDrop)) { string[] filePaths = (string[])dataObjectCOM.GetData(DataFormats.FileDrop, false); for (int fileIndex = 0; fileIndex < filePaths.Length; fileIndex++) { string fname = filePaths[fileIndex]; if (checkinNewDocument(parentId, fname, fileIndex, filePaths.Length)) { break; } } } } }
/// <summary> /// Drop event handler /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private static void OnDrop(object sender, Telerik.Windows.DragDrop.DragEventArgs e) { // Find RadTreeViewItem var item = e.OriginalSource as RadTreeViewItem; if (e.OriginalSource != null && e.OriginalSource is DependencyObject) { var dependencySource = (DependencyObject)e.OriginalSource; item = Framework.UI.WPFVisualTreeHelper.FindParent <RadTreeViewItem>(dependencySource); } var targetDirectory = item?.DataContext as DirectoryViewModel; // Save target filestructure before drop action if (targetDirectory.StructureViewModel.IsDirty) { targetDirectory.StructureViewModel.Save(); } //Check if the the folder is a workflow folder and has a workflow assigned if (IsWorkflowDirectory(targetDirectory)) { return; } // File drag & drop DataObject dataObject = (e.Data as DataObject); var refreshDirectoryPath = true; if (dataObject != null && dataObject.ContainsFileDropList()) { foreach (var file in dataObject.GetFileDropList()) { Helper.ArchiveHelper.ArchiveFile(targetDirectory.StructureViewModel.Model, targetDirectory.Model, file); } refreshDirectoryPath = false; } else if (dataObject != null && dataObject.GetData("FileGroupDescriptorW") != null) { var outlookDataObject = new OutlookDataObject(dataObject); string[] filenames = (string[])outlookDataObject.GetData("FileGroupDescriptorW"); var fileStreams = (MemoryStream[])outlookDataObject.GetData("FileContents"); string directory = GlobalSettings.AppDataPath + "\\Temp\\Blobs\\"; if (!System.IO.Directory.Exists(directory)) { System.IO.Directory.CreateDirectory(directory); } for (int fileIndex = 0; fileIndex < filenames.Length; fileIndex++) { //use the fileindex to get the name and data stream string filename = filenames[fileIndex]; MemoryStream filestream = fileStreams[fileIndex]; //save the file stream using its name to the application path FileStream outputStream = File.Create(directory + filename); filestream.WriteTo(outputStream); outputStream.Close(); if (filename.ToLower().EndsWith(".msg")) { try { OutlookStorage.Message msg = new OutlookStorage.Message(directory + filename); DateTime receiveDateTime = msg.ReceivedDate; msg.Dispose(); File.SetLastWriteTime(directory + filename, receiveDateTime); } catch (Exception ex) { Log.LogManagerInstance.Instance.Error(string.Format(@"Invalid mail format: {0}", filename), ex); } } else { File.SetLastWriteTime(directory + filename, DateTime.Now); } Helper.ArchiveHelper.ArchiveFile(targetDirectory.StructureViewModel.Model, targetDirectory.Model, directory + filename); } refreshDirectoryPath = false; } else if (dataObject != null && dataObject.GetData(typeof(GridViewPayload)) != null) { var service = CommonServiceLocator.ServiceLocator.Current.GetInstance <IFileStructureDocumentPathService>(); var localizationService = CommonServiceLocator.ServiceLocator.Current.GetInstance <ILocalizationService>(); var payload = dataObject.GetData(typeof(GridViewPayload)) as GridViewPayload; foreach (var path in payload.DataObjects.OfType <FileStructureDocumenPath>()) { var copyMode = Keyboard.Modifiers == ModifierKeys.Shift; if (copyMode) { var newPath = new FileStructureDocumenPath { DirectoryGuid = targetDirectory.Model.Id, FileStructureGuid = targetDirectory.StructureViewModel.Model.Id, DocumentGuid = path.DocumentGuid, WorkflowId = targetDirectory.Model.WorkflowId }; service.Save(newPath); } else { if (path.IsProtectedPath) { MessageBox.Show(localizationService.Translate("filestructure_path_protected"), localizationService.Translate("filestructure_path_protected_title"), MessageBoxButton.OK, MessageBoxImage.Information); continue; } path.DirectoryGuid = targetDirectory.Model.Id; path.WorkflowId = targetDirectory.Model.WorkflowId; path.FileStructureGuid = targetDirectory.StructureViewModel.Model.Id; service.Save(path); } if (targetDirectory.Model.WorkflowId != null) { var configurationService = CommonServiceLocator.ServiceLocator.Current.GetInstance <Workflow.IDocumentWorkflowConfigurationService>(); var workflow = configurationService.Get(targetDirectory.Model.WorkflowId.Value); if (!string.IsNullOrWhiteSpace(workflow.AccessProviderName)) { var accessProvider = CommonServiceLocator.ServiceLocator.Current.GetInstance <Workflow.IDocumentWorkflowAccessProvider>(workflow.AccessProviderName); accessProvider.SetUserAccess(GlobalSettings.UserId, path.DocumentGuid, path.Id, path.FileStructureGuid, workflow); } } } refreshDirectoryPath = false; // Refresh grid if (payload.Grid is CursorGridViewControl) { (payload.Grid as CursorGridViewControl).RefreshData(); } } // Save target filestructure before drop action if (refreshDirectoryPath) { targetDirectory.StructureViewModel.Save(); var directoriesToCheck = new List <DirectoryViewModel>(); directoriesToCheck.Add(targetDirectory); //Recalculating the path through the save method while (directoriesToCheck.Any()) { var innerDirectories = new List <DirectoryViewModel>(); foreach (var subDirectory in directoriesToCheck) { var guid = subDirectory.Model.Id; var list = fileStructureDocumentPathService.GetByDirectoryId(guid); foreach (FileStructureDocumenPath fileStructureDocumenPath in list) { fileStructureDocumentPathService.Save(fileStructureDocumenPath); } innerDirectories.AddRange(subDirectory.Directories); } directoriesToCheck.Clear(); directoriesToCheck.AddRange(innerDirectories); } } }
private void DragDropSubmit(object sender, DragEventArgs e) { //If the thing being dragged is an outlook message item. (not the .msg file) if (!e.Data.GetDataPresent(DataFormats.FileDrop)) { Log.ToDebug("Outlook message file from outlook!"); //wrap standard IDataObject in OutlookDataObject var dataObject = new OutlookDataObject(e.Data); //get the names and data streams of the files dropped string[] filenames = (string[])dataObject.GetData("FileGroupDescriptor"); MemoryStream[] filestreams = (MemoryStream[])dataObject.GetData("FileContents"); for (int fileIndex = 0; fileIndex < filenames.Length; fileIndex++) { //use the fileindex to get the name and data stream MemoryStream filestream = filestreams[fileIndex]; HandleOutlookItem(filestream); } } else { string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); if (files.Length == 1) { string path = files[0]; string fExtent = Path.GetExtension(path); //It is a msg file. if (fExtent == ".msg") { HandleEmailFile(path); } //It isn't a msg file. else { /*SubmitInfo info = new SubmitInfo(new List<string> { path }); * if (info.ShowDialog() == DialogResult.OK) * { * /*var handed = HandleFiles(info.SubmissionDetails, new List<string> { path }); * var result = MessageBox.Show( * $"The file has been parsed successfully! See below for the information.\n" + * $"Submission Date: {DateTime.Now:MM-dd-yy HH-mm-ss}\n" + * $"Sender: {info.SubmissionDetails.Sender}\n" + * $"Purpose: {info.SubmissionDetails.Purpose}\n" + * $"Total Files: 1\n" + * $" Images: {handed[1]}\n" + * $" Other Files: {handed[0]}\n\n" + * $"Would you like to open the field data now?", * "Parsing Successful", * MessageBoxButtons.YesNo * ); * if (result == DialogResult.Yes) * { * Process.Start.JobNumbers.GetPath(info.SubmissionDetails.JobNumbers[0]) + "\\Field Data\\"); * } * }*/ } } else { /*SubmitInfo info = new SubmitInfo(files.ToList()); * if (info.ShowDialog() == DialogResult.OK) * { * /*var handed = HandleFiles(info.SubmissionDetails, files.ToList()); * var result = MessageBox.Show( * $"The file has been parsed successfully! See below for the information.\n" + * $"Submission Date: {DateTime.Now:MM-dd-yy HH-mm-ss}\n" + * $"Sender: {info.SubmissionDetails.Sender}\n" + * $"Purpose: {info.SubmissionDetails.Purpose}\n" + * $"Total Files: {files.ToList().Count}\n" + * $" Images: {handed[1]}\n" + * $" Other Files: {handed[0]}\n\n" + * $"Would you like to open the field data now?", * "Parsing Successful", * MessageBoxButtons.YesNo * ); * if (result == DialogResult.Yes) * { * Process.Start.JobNumbers.GetPath(info.SubmissionDetails.JobNumbers[0]) + "\\Field Data\\"); * } * }*/ } } }
/// <summary> /// Перетаскивание сообщений /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Messages_OnDrop(object sender, DragEventArgs e) { //если нет выделенного проекта - некуда копировать if (_viewModel.SelectedProjectItem == null) { return; } //куда будем копировать var correspondencePath = _fileManagerService.GetProjectCorrespondenceFolderName(_viewModel.SelectedProjectItem.Project); //если то, что перетащили - файлы if (e.Data.GetData(DataFormats.FileDrop) is string[] paths) { //отбираем только .msg paths = paths.Where(path => Path.GetExtension(path) == ".msg").ToArray(); if (paths.Any()) { foreach (var path in paths) { //копируем сообщение File.Copy(path, Path.Combine(correspondencePath, $"{Guid.NewGuid()}.msg")); } } } //Переносим непосредственно из Outlook // to get the .msg file contents use this: // credits to "George Vovos", http://stackoverflow.com/a/43577490/1093508 , // https://stackoverflow.com/questions/21101265/drag-and-drop-outlook-attachment-from-outlook-in-to-a-wpf-datagrid if (e.Data.GetData("FileGroupDescriptor", true) is MemoryStream outlookFile) { var dataObject = new OutlookDataObject(e.Data); var filestreams = (MemoryStream[])dataObject.GetData("FileContents"); foreach (var filestream in filestreams) { string filename = $"{Guid.NewGuid()}.msg"; // do whatever you want with filestream, e.g. save to a file: string path = Path.Combine(correspondencePath, filename); using (var outputStream = File.Create(path)) { filestream.WriteTo(outputStream); } } //var filenames = (string[])dataObject.GetData("FileGroupDescriptorW"); //var filestreams = (MemoryStream[])dataObject.GetData("FileContents"); //for (int fileIndex = 0; fileIndex < filenames.Length; fileIndex++) //{ // string filename = filenames[fileIndex]; // MemoryStream filestream = filestreams[fileIndex]; // // do whatever you want with filestream, e.g. save to a file: // string path = Path.GetTempPath() + filename; // using (var outputStream = File.Create(path)) // { // filestream.WriteTo(outputStream); // } //} } _viewModel.Outlook.DeleteDuplicateMessages(); }