Example #1
0
        private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (e.Error != null)
            {
                MessageBox.Show(String.Format("Во время обработки презентации произошла фатальная ошибка \n\n Постарайтесь запомнить условия возникновения ошибки, и обратитесь к программистам, чтобы они устранили неисправность. \n\n Ошибка:\n {0}.", e.Error.Message));
                Application.Current.Shutdown();
            }

            ParseProgressStatus status = (ParseProgressStatus)e.Result;

            status.PresentationControl.ProgressInfo.Visibility    = System.Windows.Visibility.Collapsed;
            status.PresentationControl.ProgressBar.Visibility     = System.Windows.Visibility.Collapsed;
            status.PresentationControl.PresentationGrid.Opacity   = 1;
            status.PresentationControl.PresentationGrid.IsEnabled = true;

            // Всплывающее собщение, что парсинг прошел успешно
            MessagePopUp.Text       = !status.IsError ? "Парсинг прошел успешно" : "Ошибка парсинга презентации";
            MessagePopUp.Background = !status.IsError ? Brushes.Green : Brushes.IndianRed;
            //MessagePopUp.Visibility = System.Windows.Visibility.Visible;
            Storyboard messagePopUp = (Storyboard)TryFindResource("StoryboardMessagePopUp");

            messagePopUp.Begin();

            RemoveControl(status.PresentationControl);
        }
Example #2
0
        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;
            }
        }