private void ExecuteChooseAccount()
        {
            if (BudgeteerData.Accounts.Count == 0)
            {
                Console.WriteLine("\nNo accounts (press enter to return to menu)");
                Console.ReadLine();
                Program.ChangeController("Menu", true);
                return;
            }

            var input = Console.ReadLine();

            var accountIndex = 0;
            if (int.TryParse(input, out accountIndex) && (accountIndex < BudgeteerData.Accounts.Count))
            {
                Account = BudgeteerData.Accounts[accountIndex];
                _state = LoadTransactionsState.File;
            }
            else
            {
                Console.WriteLine("\nPlease enter a valid account index (press enter to retry)");
                Console.ReadLine();
            }
        }
        private void ExecuteChooseFile()
        {
            var input = Console.ReadLine();

            if (File.Exists(input))
            {
                FileName = input;
                _state = LoadTransactionsState.Progress;
                _loader = new Thread(LoadFile);
                _loader.Start();
            }
            else
            {
                Console.WriteLine("\nPlease enter a valid filename!");
                Console.ReadLine();
            }
        }
        public void LoadFile()
        {
            var lines = File.ReadAllLines(FileName).ToList();

            for (int i = 1; i < lines.Count; i++)
            {
                var csvEntry = CsvEntry.FromCsvLine(lines[i]);

                if (csvEntry == null)
                    continue;

                var preProcessors = _preprocessors.Where(p => p.Match(csvEntry));

                foreach (var preProcessor in preProcessors)
                {
                    csvEntry = preProcessor.Process(csvEntry);
                }

                _transactions.Add(csvEntry.ToTransaction(Account));

                _progressMutex.WaitOne();
                Progress = GetProgress(i, lines.Count -1);
                _progressMutex.ReleaseMutex();

                //Thread.Sleep(10);
            }

            BudgeteerData.Transactions.AddRange(_transactions);

            _state = LoadTransactionsState.Summary;
            _overdraw = false;
        }