public MainWindowViewModel()
        {
            Settings = new FilerSettings();
            Debug.Assert(Settings != null);

            Settings.SessionLog = $"---Session Debug Log Started At {DateTime.Now.ToString()}---\n";

            LaunchItemChosenCommand   = new RelayCommand(_OnLaunchItemChosen);
            EnterPressedCommand       = new RelayCommand(_OnEnterPressed);
            ShowSettingsWindowCommand = new RelayCommand(_ShowSettingsWindow);
            ShowMoreResultsCommand    = new RelayCommand(_ShowMoreResults);

            _InitializeDatabase();

            m_limitedResultCollection = new ObservableCollection <Controls.SearchResultControl>();

            m_latestSearchResult = null;

            m_resultLock = new object();

            StatusMessage          = "Ready";
            m_enableShowMoreButton = false;

            m_directoryMonitor = new DirectoryMonitor();

            m_directoryMonitor.ScanCompleted             += _DirectoryMonitor_ScanCompleted;
            m_directoryMonitor.MonitoredDirectoryRemoved += _DirectoryMonitor_MonitoredDirectoryRemoved;
            m_directoryMonitor.StatusChanged             += _DirectoryMonitor_StatusChanged;
            m_directoryMonitor.ScanProgress         += _DirectoryMonitor_ScanProgress;
            m_directoryMonitor.ScanStarted          += _DirectoryMonitor_ScanStarted;
            m_directoryMonitor.MonitoredFileCreated += _DirectoryMonitor_MonitoredFileCreated;
            m_directoryMonitor.MonitoredFileDeleted += _DirectoryMonitor_MonitoredFileDeleted;
            m_directoryMonitor.MonitoredFileRenamed += _DirectoryMonitor_MonitoredFileRenamed;

            if (Settings.FirstRun)
            {
                //add the user's special folders as a default
                m_directoryMonitor.AddMonitoredDirectory(Environment.GetFolderPath(Environment.SpecialFolder.Desktop));
                m_directoryMonitor.AddMonitoredDirectory(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments));
                m_directoryMonitor.AddMonitoredDirectory(Environment.GetFolderPath(Environment.SpecialFolder.MyMusic));
                m_directoryMonitor.AddMonitoredDirectory(Environment.GetFolderPath(Environment.SpecialFolder.MyPictures));
                m_directoryMonitor.AddMonitoredDirectory(Environment.GetFolderPath(Environment.SpecialFolder.MyVideos));
                m_directoryMonitor.AddMonitoredDirectory(Environment.GetFolderPath(Environment.SpecialFolder.Personal));
                m_directoryMonitor.AddMonitoredDirectory(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles));
                m_directoryMonitor.AddMonitoredDirectory(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86));
                m_directoryMonitor.AddMonitoredDirectory(Environment.GetFolderPath(Environment.SpecialFolder.StartMenu));
                m_directoryMonitor.AddMonitoredDirectory(Environment.GetFolderPath(Environment.SpecialFolder.System), false);                 //just want top-level for calc, notepad, etc.

                Settings.MonitoredDirectories = m_directoryMonitor.GetFormattedStringFromDirectoryList();

                m_directoryMonitor.ScanMonitoredDirectories();
            }
            else
            {
                var extractedDirectories = DirectoryMonitor.GetDirectoryListFromFormattedString(Settings.MonitoredDirectories);
                foreach (DirectoryMonitor.Directory directory in extractedDirectories)
                {
                    m_directoryMonitor.AddMonitoredDirectory(directory);
                }
            }

            try
            {
                DatabaseItemCount = m_database.QueryDatabaseSize();
            }
            catch (Exception crap)
            {
                Settings.SessionLog += crap.Message + "\n";
                Debug.WriteLine(crap.Message);
            }
        }