Exemple #1
0
        /// <summary>
        /// Populates the image tree and sets <see cref="RootImageTree"/>. Must be called before calling <see cref="GenerateWebsite"/>.
        /// </summary>
        /// <param name="token"></param>
        public void PopulateImageTree(CancellationToken token)
        {
            if (!IsImageTreePopulated)
            {
                EnsureWebFolderIsBlacklisted();

                RootImageTree = new ImageTreeDirectory(RootDirectory)
                {
                    Blacklist = Blacklist
                };

                RootImageTree.ScanStarted += ScanStarted;
                RootImageTree.ScanFailed  += ScanFailed;

                RootImageTree.Populate(token);

                //If cancel was requested, don't let IsImageTreePopulated be set to true.
                if (token.IsCancellationRequested)
                {
                    return;
                }

                IsImageTreePopulated = true;
            }
        }
Exemple #2
0
        private void CreateGalleryPage(ImageTreeDirectory currentImageTree, DirectoryInfo currentSlideDirectory, CancellationToken token)
        {
            GenerationStarted?.Invoke(new DirectoryGenerateInfo {
                Directory = currentSlideDirectory
            });

            if (token.IsCancellationRequested)
            {
                return;
            }

            try
            {
                var currentImages = currentImageTree.DescendantImages.Where(p => p.Depth == 0).OrderBy(p => p.Item.FileInfo.Name);
                var deepImages    = currentImageTree.DescendantImages;

                int countOwnImages = currentImages.Count();
                //Don't count current images as deep images, even though they will be included in the recursive JSON.
                int countDeepImages = deepImages.Count(p => p.Depth > 0);

                var subTreesWithImages = currentImageTree.ChildDirectories.Where(p => p.DescendantImages.Count > 0);

                WriteJson(currentSlideDirectory, currentImages, deepImages, countOwnImages, countDeepImages);

                if (token.IsCancellationRequested)
                {
                    return;
                }

                WriteIndexPage(currentImageTree, subTreesWithImages, currentSlideDirectory, countOwnImages, countDeepImages);
                WriteSlideshowPage(currentSlideDirectory);

                foreach (var subImageTree in subTreesWithImages)
                {
                    if (token.IsCancellationRequested)
                    {
                        return;
                    }

                    var subSlideDirectory = currentSlideDirectory.CreateSubdirectory(subImageTree.DirectoryInfo.Name);

                    CreateGalleryPage(subImageTree, subSlideDirectory, token);
                }
            }
            catch (Exception ex)
            {
                GenerationFailed?.Invoke(new DirectoryGenerateInfo {
                    Directory = currentSlideDirectory, Exception = ex
                });
            }
        }
Exemple #3
0
        private void WriteIndexPage(ImageTreeDirectory currentImageTree, IEnumerable <ImageTreeDirectory> subDirectoriesWithImages, DirectoryInfo currentSlideDirectory, int countOwnImages, int countDeepImages)
        {
            string template        = GetEmbeddedResourceString("Auto.StaticWebGalleryGenerator.StaticResources.Html.index.html");
            string subDirTableRows = GetSubDirectoryLinks(subDirectoriesWithImages);

            string output =
                template
                .Replace("`imageFolderPath`", currentImageTree.DirectoryInfo.FullName)
                .Replace("`webFolderName`", WebFolderName)
                .Replace("`subDirs`", subDirTableRows)
                .Replace("`numberOfOwnImages`", countOwnImages.ToString())
                .Replace("`numberOfRecursiveImages`", Math.Min(MaxDeepImages, countDeepImages).ToString());

            var ownImageButtonsExtraClass  = countOwnImages > 0 ? string.Empty : INDEX_BUTTON_DISABLED_CLASS;
            var deepImageButtonsExtraClass = countDeepImages > 0 ? string.Empty : INDEX_BUTTON_DISABLED_CLASS;

            output = output.Replace(@"`SlideshowExtraClass`", ownImageButtonsExtraClass);
            output = output.Replace(@"`SlideshowRndExtraClass`", ownImageButtonsExtraClass);
            output = output.Replace(@"`SlideshowRecursiveRndExtraClass`", deepImageButtonsExtraClass);
            //numberOfOwnImages
            //numberOfRecursiveImages

            File.WriteAllText(Path.Combine(currentSlideDirectory.FullName, "index.html"), output);
        }