public Main() { InitializeComponent(); _validationHistoryRepository = new ValidationHistoryRepository(); _recentCheckedEmails = new BindingList <EmailContent>(); srcTxt.Text = Settings.Default.src; desTxt.Text = Settings.Default.des; // Maybe utilize Managed Extensibility Framework (MEF) to dynamic load IFilter instances from assemblies in the production var filters = new Collection <IFilter>() { new SendCustomerIDFilter(), new SensitiveInfoFilter() // add many filter here if need }; _fileMailFilterService = new MailFilterService(new FileMailRepository(Settings.Default.src, Settings.Default.des), _validationHistoryRepository) { OnEmailChecked = e => AddToRecentList(e), Filters = filters }; _dbMailFilterService = new MailFilterService(new MailRepository(), _validationHistoryRepository) { OnEmailChecked = e => AddToRecentList(e), Filters = filters }; fileEmailContentBindingSource.DataSource = _fileMailFilterService.EmailContentQueue; dbEmailContentBindingSource.DataSource = _dbMailFilterService.EmailContentQueue; checkedEmailContentBindingSource.DataSource = _recentCheckedEmails; //_source.Token.Register(() => //{ // _isRunning = false; // startBtn.Enabled = !_isRunning; // stopBtn.Enabled = _isRunning; //}); }
public MailFilterService(IMailRepository mailRepository, IValidationHistoryRepository validationHistoryRepository) { _emailContentQueue = new ConcurrentQueue <EmailContent>(); _mailRepository = mailRepository; _validationHistoryRepository = validationHistoryRepository; EmailContentQueue = new BindingList <EmailContent>(); Filters = new Collection <IFilter>(); _timer = new Timer(1000); _timer.Elapsed += _timer_Elapsed; EnqueueProgress = new Progress <EmailContent>(s => { EmailContentQueue.Add(s); }); DequeueProgress = new Progress <EmailContent>(s => { EmailContentQueue.Remove(s); OnEmailChecked?.Invoke(s); }); }