示例#1
0
        public MainViewModel()
        {
            ChooseFilesCommand        = new DelegateCommand(action => ChooseFiles());
            ExitCommand               = new DelegateCommand(action => Exit());
            PrintResultCommand        = new DelegateCommand(action => PrintResult());
            SaveToFileCommand         = new DelegateCommand(action => SaveToFile());
            ShowAboutAuthorCommand    = new DelegateCommand(action => ShowAboutAuthor());
            ShowAboutProgrammCommand  = new DelegateCommand(action => ShowAboutProgramm());
            ShowSettingsCommand       = new DelegateCommand(action => ShowSettings());
            StartCommand              = new DelegateCommand(action => StartProgramm());
            StopCommand               = new DelegateCommand(action => StopProgramm());
            ClearResultCommand        = new DelegateCommand(action => ClearResult());
            ShowExpandedResultCommand = new DelegateCommand(action => ShowExpandedResult());

            AutoWorkTimer = new DispatcherTimer {
                Interval = TimeSpan.FromHours(1)
            };

            try
            {
                _dbInstance = DataBase.GetInstance(ProgramSettings.GetInstance().ConnectionString,
                                                   ProgramSettings.GetInstance().DataBaseName,
                                                   ProgramSettings.GetInstance().Login,
                                                   ProgramSettings.GetInstance().Password);
            }
            catch (Exception e)
            {
                _dbInstance = null;
                Console.Error.WriteLine("Скорее всего, не удалось подключиться к серверу MongoDb.\n" + e.Message);
            }
        }
示例#2
0
 /// <summary>
 /// Возвращает единственный экземпляр класса ProgramSettings. Необходим для паттерна Singleton
 /// </summary>
 /// <returns>ProgramSettings instance single object</returns>
 public static ProgramSettings GetInstance()
 {
     if (_instanceSettings == null)
     {
         _instanceSettings = new ProgramSettings();
         return(_instanceSettings);
     }
     return(_instanceSettings);
 }
示例#3
0
 private static void ReinitDbInstance()
 {
     try
     {
         _dbInstance = DataBase.GetInstance(ProgramSettings.GetInstance().ConnectionString,
                                            ProgramSettings.GetInstance().DataBaseName,
                                            ProgramSettings.GetInstance().Login,
                                            ProgramSettings.GetInstance().Password);
     }
     catch (Exception e)
     {
         Console.Error.WriteLine("Скорее всего, не удалось подключиться к серверу MongoDb.\n" + e.Message);
         _dbInstance = null;
     }
 }
示例#4
0
        public static void LoadSettings(ProgramSettings loadedProgramSettings)
        {
            //other settings
            ProgramSettings.GetInstance().IsDoc       = loadedProgramSettings.IsDoc;
            ProgramSettings.GetInstance().IsDocx      = loadedProgramSettings.IsDocx;
            ProgramSettings.GetInstance().IsRtf       = loadedProgramSettings.IsRtf;
            ProgramSettings.GetInstance().IsOtd       = loadedProgramSettings.IsOtd;
            ProgramSettings.GetInstance().IsPdf       = loadedProgramSettings.IsPdf;
            ProgramSettings.GetInstance().IsTxt       = loadedProgramSettings.IsTxt;
            ProgramSettings.GetInstance().FileTypes   = loadedProgramSettings.FileTypes;
            ProgramSettings.GetInstance().ThreadCount = loadedProgramSettings.ThreadCount;

            //database and repo
            ProgramSettings.GetInstance().ConnectionString = loadedProgramSettings.ConnectionString;
            ProgramSettings.GetInstance().DataBaseName     = loadedProgramSettings.DataBaseName;
            ProgramSettings.GetInstance().Login            = loadedProgramSettings.Login;
            ProgramSettings.GetInstance().Password         = loadedProgramSettings.Password;
        }
示例#5
0
        /// <summary>
        /// Старт проверки.
        /// </summary>
        private async void StartProgramm()
        {
            if (_dbInstance == null)
            {
                ReinitDbInstance();
            }

            if (_dbInstance == null)
            {
                StopProgramm();
                return;
            }

            M_Model.IsStartBtnEnabled      = false;
            M_Model.IsStopBtnEnabled       = true;
            M_Model.IsChooseFileBtnEnabled = false;

            if (_dbInstance != null && !await _dbInstance.CheckMongoConnection())
            {
                StopProgramm();
                return;
            }

            var fileLists = new List <string>(M_Model.UncheckedFiles.ToList());

            var uncheckedFilesEnumerator = fileLists.GetEnumerator();

            var makeWorkTimer = new DispatcherTimer {
                Interval = TimeSpan.FromSeconds(10)
            };

            EventHandler autoWorkHandler = (sender, args) =>
            {
                //Обработчик "локального" таймера. Отслеживает количество потоков и количество оставшихся файлов.
                EventHandler makeWorkHandler = async(mwSender, mwArgs) =>
                {
                    //Если текущее количество выполняемых потоков больше определенного количества
                    //(указывается в настройках), то текущий "тик" можно пропустить.
                    if (_threadCount >= ProgramSettings.GetInstance().ThreadCount)
                    {
                        return;
                    }

                    //Цикл из количества доступных потоков, в которым идет обработка данных
                    for (; _threadCount < ProgramSettings.GetInstance().ThreadCount;)
                    {
                        //Проходимся по коллекции, если в ней еще есть файлы.
                        if (uncheckedFilesEnumerator.MoveNext())
                        {
                            //Обрабатываем файлы
                            await MakeWorkAsync(uncheckedFilesEnumerator.Current);

                            //После обработки, удаляем его
                            M_Model.UncheckedFiles.Remove(uncheckedFilesEnumerator.Current);
                        }
                        //Если файлов не осталось - останавливаем все таймеры и выходим из цикла.
                        else
                        {
                            makeWorkTimer.Stop();
                            StopProgramm();
                            break;
                        }
                    }
                };

                //Запускаем "локальный" таймер, привязывая к нему обработчик.
                makeWorkTimer.Tick += makeWorkHandler;
                makeWorkTimer.Start();
                makeWorkHandler(this, EventArgs.Empty);
            };

            //По нажатию кнопки старт мы запускаем "главный" таймер и программа начинает выполнять свою работу
            //сразу же.
            AutoWorkTimer.Tick += autoWorkHandler;
            AutoWorkTimer.Start();
            autoWorkHandler(this, EventArgs.Empty);
        }