/// <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; } }
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 }); } }
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); }