private void worker_DoWork(object sender, DoWorkEventArgs e) { WorkerArgument argument = (WorkerArgument)e.Argument; var progressStatus = new ParseProgressStatus { PresentationControl = argument.PresentationControl }; MySQLPresentationTable abstractpresTable = null; PresentationInfo presInfo = null; try { #region Парсинг презентации ((BackgroundWorker)sender).ReportProgress(0, new ParseProgressStatus { PresentationControl = argument.PresentationControl, Message = "Начало парсинга презентации", IsOnlyMessage = true }); using (PPTFiles pptFiles = new PPTFiles()) { #region Получаюданные настройки соединения с БД string dbRemoteHost = null, dbName = null, dbUser = null, dbPassword = null; try { XDocument xmlDBDoc = XDocument.Load("Lib\\FCashProfile.tss"); var XdbRemoteHost = xmlDBDoc.Root.Element(XName.Get("ExportDBInfo")).Element(XName.Get("DBRemoteHost")); dbRemoteHost = XdbRemoteHost.Value; var XdbName = xmlDBDoc.Root.Element(XName.Get("ExportDBInfo")).Element(XName.Get("DBName")); dbName = XdbName.Value; var XdbUser = xmlDBDoc.Root.Element(XName.Get("ExportDBInfo")).Element(XName.Get("DBUser")); dbUser = XdbUser.Value; var XdbPassword = xmlDBDoc.Root.Element(XName.Get("ExportDBInfo")).Element(XName.Get("DBPassword")); dbPassword = XdbPassword.Value; } catch (Exception ex) { throw new Exception( String.Format("Не получилось получить конфигурационные данные из файла конфигурации: {0}", ex.Message)); } //if (!String.IsNullOrEmpty(argument.UrlNews)) // presInfo.UrlNews = argument.UrlNews; if (String.IsNullOrEmpty(dbRemoteHost) || String.IsNullOrEmpty(dbName) || String.IsNullOrEmpty(dbUser)) throw new Exception( "У вас не заполнена конфигурация соединения с базой данных для экспорта\nПожалуйста заполните ее через настройки"); MySQLPresentationTable presTable = new MySQLPresentationTable(dbRemoteHost, dbName, dbUser, dbPassword); abstractpresTable = presTable; #endregion pptFiles.ParseSlideCompleteCallback += (object pptFile, SlideCompleteParsingInfo slideParsingInfo) => { ((BackgroundWorker)sender).ReportProgress( (int)((decimal)slideParsingInfo.SlideCurrentNumber / (decimal)slideParsingInfo.SlideTotalNumber * 100), new ParseProgressStatus { PresentationControl = argument.PresentationControl, Message = "Обработка слайдов" }); }; presTable.CreateTable(); presInfo = pptFiles.ExtractInfo(argument.PresentationFullPath, presTable); presInfo.Name = argument.PresentationName; presInfo.Title = argument.PresentationTitle; presInfo.Login = argument.Login; presInfo.Categorie = ((KeyValuePair<string, string>)argument.SelectedItem); } #endregion #region Заливка информации по презентации в БД { ((BackgroundWorker)sender).ReportProgress(0, new ParseProgressStatus { PresentationControl = argument.PresentationControl, Message = "Обновление данных на сервере", IsOnlyMessage = true }); abstractpresTable.PutDataOnServer(presInfo); } #endregion #region Отправка на FTP try { ((BackgroundWorker)sender).ReportProgress(0, new ParseProgressStatus { PresentationControl = argument.PresentationControl, Message = "Подготовка к отправке файлов на FTP", IsOnlyMessage = true }); XDocument xmlFtpDoc = XDocument.Load("Lib\\FCashProfile.tss"); var ftpHost = xmlFtpDoc.Root.Element(XName.Get("ExportFtpInfo")).Element(XName.Get("Host")); var ftpUserName = xmlFtpDoc.Root.Element(XName.Get("ExportFtpInfo")).Element(XName.Get("UserName")); var ftpUserPassword = xmlFtpDoc.Root.Element(XName.Get("ExportFtpInfo")).Element(XName.Get("UserPassword")); var ftpImagesDir = xmlFtpDoc.Root.Element(XName.Get("ExportFtpInfo")).Element(XName.Get("ImagesDir")); FTP ftp = new FTP(ftpHost.Value, ftpUserName.Value, ftpUserPassword.Value, ftpImagesDir.Value); ftp.UploadImageCompleteCallback += (object ftpSender, UploadImageCompliteInfo completeInfo) => { ((BackgroundWorker)sender).ReportProgress( (int)((decimal)completeInfo.CurrentImageNumber / (decimal)completeInfo.TotalImagesCount * 100), new ParseProgressStatus { PresentationControl = argument.PresentationControl, Message = "Загрузка изображений на FTP" }); }; ftp.OnUploadPresentationBlockCallbak += (object ftpSender, UploadPresentationBlockInfo blockInfo) => { ((BackgroundWorker)sender).ReportProgress(blockInfo.PercentProgress, new ParseProgressStatus { PresentationControl = argument.PresentationControl, Message = "Загрузка презентации" }); }; List<string> imageNames = new List<string>(); foreach (var slideInfo in presInfo.SlidersInfo) { if (!String.IsNullOrEmpty(slideInfo.ImageNameClientSmall)) imageNames.Add(slideInfo.ImageNameClientSmall); if (!String.IsNullOrEmpty(slideInfo.ImageNameClientAverage)) imageNames.Add(slideInfo.ImageNameClientAverage); if (!String.IsNullOrEmpty(slideInfo.ImageNameClientBig)) imageNames.Add(slideInfo.ImageNameClientBig); } ftp.UploadImages(presInfo); } catch (Exception ex) { throw new Exception(String.Format("Во время отправки изображений на FTP возникла ошибка: {0}", ex.Message)); } #endregion } catch (Exception ex) { lock (_exceptionLoger) { _exceptionLoger.WriteLog(string.Format(Environment.NewLine + Environment.NewLine + "[{0}] Во время обработки презентации [{1}] произошла ошибка.\r\n Ошибка: {2} \r\nСтек вызова: {3}", DateTime.Now, argument.PresentationName, ex.Message, ex.StackTrace)); } // Удаляю пустую подготовленную строчку для презентации из таблицы if (presInfo != null) { try { abstractpresTable.DeleteFromMainTable((ulong)presInfo.DbId); } catch (Exception ex2) { lock (_exceptionLoger) { _exceptionLoger.WriteLog(string.Format(Environment.NewLine + Environment.NewLine + "[{0}] Во время обработки презентации [{1}] произошла ошибка.\r\n Ошибка: {2} \r\nСтек вызова: {3}", DateTime.Now, argument.PresentationName, ex2.Message, ex2.StackTrace)); } } } progressStatus.IsError = true; } finally { e.Result = progressStatus; } }
private void worker_DoWork(object sender, DoWorkEventArgs e) { WorkerArgument argument = (WorkerArgument)e.Argument; var progressStatus = new ParseProgressStatus { PresentationControl = argument.PresentationControl }; MySQLPresentationTable abstractpresTable = null; PresentationInfo presInfo = null; try { #region Парсинг презентации ((BackgroundWorker)sender).ReportProgress(0, new ParseProgressStatus { PresentationControl = argument.PresentationControl, Message = "Начало парсинга презентации", IsOnlyMessage = true }); using (PPTFiles pptFiles = new PPTFiles()) { #region Получаюданные настройки соединения с БД string dbRemoteHost = null, dbName = null, dbUser = null, dbPassword = null; try { XDocument xmlDBDoc = XDocument.Load("Lib\\FCashProfile.tss"); var XdbRemoteHost = xmlDBDoc.Root.Element(XName.Get("ExportDBInfo")).Element(XName.Get("DBRemoteHost")); dbRemoteHost = XdbRemoteHost.Value; var XdbName = xmlDBDoc.Root.Element(XName.Get("ExportDBInfo")).Element(XName.Get("DBName")); dbName = XdbName.Value; var XdbUser = xmlDBDoc.Root.Element(XName.Get("ExportDBInfo")).Element(XName.Get("DBUser")); dbUser = XdbUser.Value; var XdbPassword = xmlDBDoc.Root.Element(XName.Get("ExportDBInfo")).Element(XName.Get("DBPassword")); dbPassword = XdbPassword.Value; } catch (Exception ex) { throw new Exception( String.Format("Не получилось получить конфигурационные данные из файла конфигурации: {0}", ex.Message)); } //if (!String.IsNullOrEmpty(argument.UrlNews)) // presInfo.UrlNews = argument.UrlNews; if (String.IsNullOrEmpty(dbRemoteHost) || String.IsNullOrEmpty(dbName) || String.IsNullOrEmpty(dbUser)) { throw new Exception( "У вас не заполнена конфигурация соединения с базой данных для экспорта\nПожалуйста заполните ее через настройки"); } MySQLPresentationTable presTable = new MySQLPresentationTable(dbRemoteHost, dbName, dbUser, dbPassword); abstractpresTable = presTable; #endregion pptFiles.ParseSlideCompleteCallback += (object pptFile, SlideCompleteParsingInfo slideParsingInfo) => { ((BackgroundWorker)sender).ReportProgress( (int)((decimal)slideParsingInfo.SlideCurrentNumber / (decimal)slideParsingInfo.SlideTotalNumber * 100), new ParseProgressStatus { PresentationControl = argument.PresentationControl, Message = "Обработка слайдов" }); }; presTable.CreateTable(); presInfo = pptFiles.ExtractInfo(argument.PresentationFullPath, presTable); presInfo.Name = argument.PresentationName; presInfo.Title = argument.PresentationTitle; presInfo.Login = argument.Login; presInfo.Categorie = ((KeyValuePair <string, string>)argument.SelectedItem); } #endregion #region Заливка информации по презентации в БД { ((BackgroundWorker)sender).ReportProgress(0, new ParseProgressStatus { PresentationControl = argument.PresentationControl, Message = "Обновление данных на сервере", IsOnlyMessage = true }); abstractpresTable.PutDataOnServer(presInfo); } #endregion #region Отправка на FTP try { ((BackgroundWorker)sender).ReportProgress(0, new ParseProgressStatus { PresentationControl = argument.PresentationControl, Message = "Подготовка к отправке файлов на FTP", IsOnlyMessage = true }); XDocument xmlFtpDoc = XDocument.Load("Lib\\FCashProfile.tss"); var ftpHost = xmlFtpDoc.Root.Element(XName.Get("ExportFtpInfo")).Element(XName.Get("Host")); var ftpUserName = xmlFtpDoc.Root.Element(XName.Get("ExportFtpInfo")).Element(XName.Get("UserName")); var ftpUserPassword = xmlFtpDoc.Root.Element(XName.Get("ExportFtpInfo")).Element(XName.Get("UserPassword")); var ftpImagesDir = xmlFtpDoc.Root.Element(XName.Get("ExportFtpInfo")).Element(XName.Get("ImagesDir")); FTP ftp = new FTP(ftpHost.Value, ftpUserName.Value, ftpUserPassword.Value, ftpImagesDir.Value); ftp.UploadImageCompleteCallback += (object ftpSender, UploadImageCompliteInfo completeInfo) => { ((BackgroundWorker)sender).ReportProgress( (int)((decimal)completeInfo.CurrentImageNumber / (decimal)completeInfo.TotalImagesCount * 100), new ParseProgressStatus { PresentationControl = argument.PresentationControl, Message = "Загрузка изображений на FTP" }); }; ftp.OnUploadPresentationBlockCallbak += (object ftpSender, UploadPresentationBlockInfo blockInfo) => { ((BackgroundWorker)sender).ReportProgress(blockInfo.PercentProgress, new ParseProgressStatus { PresentationControl = argument.PresentationControl, Message = "Загрузка презентации" }); }; List <string> imageNames = new List <string>(); foreach (var slideInfo in presInfo.SlidersInfo) { if (!String.IsNullOrEmpty(slideInfo.ImageNameClientSmall)) { imageNames.Add(slideInfo.ImageNameClientSmall); } if (!String.IsNullOrEmpty(slideInfo.ImageNameClientAverage)) { imageNames.Add(slideInfo.ImageNameClientAverage); } if (!String.IsNullOrEmpty(slideInfo.ImageNameClientBig)) { imageNames.Add(slideInfo.ImageNameClientBig); } } ftp.UploadImages(presInfo); } catch (Exception ex) { throw new Exception(String.Format("Во время отправки изображений на FTP возникла ошибка: {0}", ex.Message)); } #endregion } catch (Exception ex) { lock (_exceptionLoger) { _exceptionLoger.WriteLog(string.Format(Environment.NewLine + Environment.NewLine + "[{0}] Во время обработки презентации [{1}] произошла ошибка.\r\n Ошибка: {2} \r\nСтек вызова: {3}", DateTime.Now, argument.PresentationName, ex.Message, ex.StackTrace)); } // Удаляю пустую подготовленную строчку для презентации из таблицы if (presInfo != null) { try { abstractpresTable.DeleteFromMainTable((ulong)presInfo.DbId); } catch (Exception ex2) { lock (_exceptionLoger) { _exceptionLoger.WriteLog(string.Format(Environment.NewLine + Environment.NewLine + "[{0}] Во время обработки презентации [{1}] произошла ошибка.\r\n Ошибка: {2} \r\nСтек вызова: {3}", DateTime.Now, argument.PresentationName, ex2.Message, ex2.StackTrace)); } } } progressStatus.IsError = true; } finally { e.Result = progressStatus; } }