Пример #1
0
        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();
            }
        }
Пример #2
0
        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;
        }
Пример #3
0
        /// <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;
                        }
                    }
                }
            }
        }
Пример #4
0
        /// <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);
                }
            }
        }
Пример #5
0
        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\\");
                     *  }
                     * }*/
                }
            }
        }
Пример #6
0
        /// <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();
        }