/// <summary>
        /// Main view model for the BooruReader window
        /// </summary>
        public MainScreenVM()
            : base()
        {
            _imageList = new ObservableCollection<BasePost>();
            _previewList = new List<PrviewScreenView>();
            _postFetcher = new PostsFetcher();
            _threadList = new List<BasePost>();
            _imageLoader = new BackgroundWorker();
            _cache = new ImageCache();
            DownloadList = new ObservableCollection<BasePost>();
            DownloadList.CollectionChanged += DowloadList_CollectionChanged;
            _imageLoader.DoWork += BackgroundLoaderWork;
            _imageLoader.RunWorkerCompleted += ServerListLoadWorkerCompleted;
            _imageLoader.WorkerSupportsCancellation = true;
            _showedLastPageWarning = false;
            //Ugly hack for settings vm
            GlobalSettings.Instance.MainScreenVM = this;
            SettingsOpen = false;
            IsFavoritesMode = false;
            _favorites = new FavoriteHandler();

            InitialiseDelegates();

            ProgressBarVisibility = Visibility.Hidden;
        }
        /// <summary>
        /// Checks that the board user is adding is valid
        /// </summary>
        private string IsValidBooru()
        {
            string retval = null;
            bool hadErrors = false;

            try
            {
                if (!string.IsNullOrEmpty(CurrentSelectedBoard.Name) && !string.IsNullOrEmpty(CurrentSelectedBoard.URL))
                {
                    CurrentSelectedBoard.URL = NormalizeURL(CurrentSelectedBoard.URL);

                    //Now we try and fetch a page until we get result... or an exception
                    PostsFetcher posts = new PostsFetcher(true);

                    try
                    {
                        CurrentSelectedBoard.ProviderType = ProviderAccessType.DanbooruV2;
                        if (posts.GetImages(1).Count > 0)
                            hadErrors = false;
                    }
                    catch
                    {
                        hadErrors = true;
                    }

                    if (hadErrors)
                    {
                        try
                        {
                            CurrentSelectedBoard.ProviderType = ProviderAccessType.XML;
                            if (posts.GetImages(1).Count > 0)
                                hadErrors = false;
                        }
                        catch
                        {
                            hadErrors = true;
                        }
                    }

                    if (hadErrors)
                    {
                        try
                        {
                            CurrentSelectedBoard.ProviderType = ProviderAccessType.JSON;
                            if (posts.GetImages(1).Count > 0)
                                hadErrors = false;
                        }
                        catch
                        {
                            hadErrors = true;
                        }
                    }

                    if (hadErrors)
                    {
                        try
                        {
                            CurrentSelectedBoard.ProviderType = ProviderAccessType.Gelbooru;
                            if (posts.GetImages(1).Count > 0)
                                hadErrors = false;
                        }
                        catch
                        {
                            hadErrors = true;
                        }
                    }

                    if (hadErrors)
                        retval = "Invalid or unsupported booru.";
                }
                else
                {
                    hadErrors = true;
                    retval = "Enter address and name.";
                }
            }
            catch
            {
                hadErrors = true;
                retval = "Invalid or unsupported booru.";
            }
            finally
            {
                if (!hadErrors)
                    retval = null;
            }

            return retval;
        }