/// <summary>
        /// Gets a list of all categories.
        /// </summary>
        /// <returns>Returns a list of all categories.</returns>
        public Categories GetCategories()
        {
            lock (_categoryLock)
            {
                if (_categories != null)
                {
                    return _categories;
                }

                var filename = CreateFilenameForCategory();
                _categories = _categoriesDataAccess.LoadCategories(filename);

                if (_categories == null)
                {
                    RetrieveCategories();
                }

                return _categories;
            }
        }
        /// <summary>
        /// Retrieves the categories from the channel 9 site.
        /// </summary>
        private void RetrieveCategories()
        {
            var tags = _categoryScraper.GetAllCategories<Tag>();
            var shows = _categoryScraper.GetAllCategories<Show>();
            var series = _categoryScraper.GetAllCategories<Series>();

            if (_categories != null)
            {
                SetIsEnabled(tags, _categories.Tags);
                SetIsEnabled(shows, _categories.Shows);
                SetIsEnabled(series, _categories.Series);
            }

            _categories = new Categories(tags, shows, series);
        }