예제 #1
0
        public MainPresenter(IView view, IViewSettings parseSettings, IMessageService messageService)
        {
            _view           = view;
            _parseSettings  = parseSettings;
            _messageService = messageService;

            _parseSettings.Start += _parseSettings_Start;
            _parseSettings.Close += _parseSettings_Closing;
            _view.NewParcing     += _view_NewParcing;
            _view.SaveData       += _view_SaveData;
            _view.ReadAllData    += _view_ReadData;

            _mainForm         = _view.GetForm();
            _parserController = ParserControllerBuilder.GetController <DataTable>("mock", null, null, ParserType.Agility);
            _parserController.NewDataReceived += _parserController_NewDataReceived;
        }
예제 #2
0
        private async void _parseSettings_Start(object sender, ParsingSettings e)
        {
            if (String.IsNullOrWhiteSpace(e.Url) && string.IsNullOrWhiteSpace(e.Source))
            {
                _messageService.ShowError("Данные для парсинга отсутствуют!");
                return;
            }
            else
            if (e.Tags.Length == 0)
            {
                _messageService.ShowError("Теги для парсинга отсутствуют!");
                return;
            }
            else
            if (e.Attributes.Length == 0)
            {
                _messageService.ShowError("Атрибуты для парсинга отсутствуют!");
                return;
            }
            else
            if (string.IsNullOrWhiteSpace(e.Source) & !(Uri.TryCreate(e.Url, UriKind.Absolute, out Uri uri)))
            {
                _messageService.ShowError("Данный URL не валидный!");
                return;
            }


            string[] attrs = e.Attributes;
            _settings = new ParserSettings(e.Tags, attrs);
            ParserType parserType;

            try
            {
                parserType = (ParserType)e.ParserType;
            }
            catch (InvalidCastException ex)
            {
                _messageService.ShowError(ex.Message);
                return;
            }

            try
            {
                _parserController = ParserControllerBuilder.GetController <DataTable>(e.Url, e.Source, _settings, parserType);
                _parserController.NewDataReceived += _parserController_NewDataReceived;
            }
            catch (NotSupportedException ex)
            {
                _messageService.ShowError(ex.Message);
                return;
            }
            catch (NullReferenceException ex)
            {
                _messageService.ShowError(ex.Message);
                return;
            }

            _parseSettings.HideForm();
            bool parsingState = false;

            try
            {
                _view.Reset();
                _view.Write(DateTime.UtcNow.ToLongTimeString() + "  || Выполняется парсинг....");
                await _parserController.ParseAsync();

                parsingState = true;
            }
            catch (ArgumentNullException ex)
            {
                _messageService.ShowError(ex.Message);
                _view.Write(DateTime.UtcNow.ToLongTimeString() + "  ---- Во время парсинга возникла ошибка!");
                parsingState = false;
            }
            finally
            {
                _view.Write(DateTime.UtcNow.ToLongTimeString() + "  || Парсинг " + ((parsingState) ? "успешно " : "не ") + "выполнен");
                _view.ToggleToolStripBusy(false);
            }
        }