public async void SaveVideoThumbnailTest() { List <string> types = new List <string>() { "T", "R", "M" }; SaveImageThumbnailResult result = await StaticFunctions .SaveImageThumbnail(idCatalogItemFirstVideo, Db, DbThumbs, types, Settings); if (result.Exceptions.Count > 0) { throw result.Exceptions.First(); } }
/// <summary> /// Generates thumbnails based on parameters /// </summary> /// <param name="configuration">Json configuration of IDBrowserService as IDBrowserConfiguration class</param> /// <param name="siteName">Site name to generate thumbnails</param> /// <param name="fromDateTime">From date filter</param> /// <param name="toDateTime">To date filter</param> /// <param name="fileFilter">File type filter</param> /// <param name="imageGuid">Generate single image guid</param> /// <param name="overwrite">Overwrite existing thumbnails</param> public async static void GenerateThumbnails(IDBrowserConfiguration configuration, string siteName, DateTime fromDateTime, DateTime toDateTime, string fileFilter, string imageGuid, bool overwrite) { SiteSettings siteSettings = configuration.Sites[siteName]; var optionsBuilder = new DbContextOptionsBuilder <IDImagerDB>(); if (siteSettings.ConnectionStrings.DBType.Equals("MsSql")) { optionsBuilder.UseSqlServer(siteSettings.ConnectionStrings.IDImager); } else if (siteSettings.ConnectionStrings.DBType.Equals("Postgres")) { optionsBuilder.UseNpgsql(siteSettings.ConnectionStrings.IDImager); optionsBuilder.ReplaceService <ISqlGenerationHelper, PostgresSqlGenerationHelper>(); } IDImagerDB db = new IDImagerDB(GetIDImagerDBOptionsBuilder <IDImagerDB>(siteSettings.ConnectionStrings.DBType, siteSettings.ConnectionStrings.IDImager).Options); IDImagerThumbsDB dbThumbs = new IDImagerThumbsDB(GetIDImagerDBOptionsBuilder <IDImagerThumbsDB>(siteSettings.ConnectionStrings.DBType, siteSettings.ConnectionStrings.IDImagerThumbs).Options); var queryCatalogItem = from catalogItem in db.idCatalogItem.Include("idFilePath") where configuration.ImageFileExtensions.Contains(catalogItem.idFileType) || configuration.VideoFileExtensions.Contains(catalogItem.idFileType) select catalogItem; if (fromDateTime != DateTime.MinValue) { queryCatalogItem = queryCatalogItem.Where(x => x.idCreated >= fromDateTime); } if (toDateTime != DateTime.MinValue) { queryCatalogItem = queryCatalogItem.Where(x => x.idCreated <= toDateTime); } if (!string.IsNullOrEmpty(fileFilter)) { queryCatalogItem = queryCatalogItem.Where(x => x.idFileType.ToLower().Equals(fileFilter.ToLower())); } if (!string.IsNullOrEmpty(imageGuid)) { queryCatalogItem = queryCatalogItem.Where(x => x.GUID.Equals(imageGuid, StringComparison.OrdinalIgnoreCase)); } int intCountCatalogItem = queryCatalogItem.Count(); int intCatalogItemCounter = 0; int intThumbnailsGenerated = 0; foreach (idCatalogItem catalogItem in queryCatalogItem) { List <String> typesToGenerate = new List <String>(); List <idThumbs> idThumbsT = dbThumbs.idThumbs.Where(x => x.ImageGUID == catalogItem.GUID && x.idType.Equals("T")).ToList(); List <idThumbs> idThumbsM = dbThumbs.idThumbs.Where(x => x.ImageGUID == catalogItem.GUID && x.idType.Equals("M")).ToList(); List <idThumbs> idThumbsR = dbThumbs.idThumbs.Where(x => x.ImageGUID == catalogItem.GUID && x.idType.Equals("R")).ToList(); if (idThumbsT.Count() == 0) { typesToGenerate.Add("T"); } if (idThumbsM.Count() == 0) { typesToGenerate.Add("M"); } if (catalogItem.idHasRecipe > 0 && idThumbsR.Count() == 0) { typesToGenerate.Add("R"); } if (overwrite) { foreach (idThumbs thumb in idThumbsT) { dbThumbs.idThumbs.Remove(thumb); } foreach (idThumbs thumb in idThumbsM) { dbThumbs.idThumbs.Remove(thumb); } foreach (idThumbs thumb in idThumbsR) { dbThumbs.idThumbs.Remove(thumb); } typesToGenerate.Clear(); typesToGenerate.Add("T"); typesToGenerate.Add("M"); if (catalogItem.idHasRecipe > 0) { typesToGenerate.Add("R"); } } if (typesToGenerate.Count() > 0) { try { SaveImageThumbnailResult result = await StaticFunctions.SaveImageThumbnail(catalogItem, db, dbThumbs, typesToGenerate, siteSettings.ServiceSettings); foreach (Exception ex in result.Exceptions) { LogGenerateThumbnailsException(ex); Console.WriteLine(ex.ToString()); } if (result.Exceptions.Count > 0) { LogGenerateThumbnailsFailedCatalogItem(catalogItem); } intThumbnailsGenerated += result.ImageStreams.Count(); } catch (Exception e) { LogGenerateThumbnailsException(e); LogGenerateThumbnailsFailedCatalogItem(catalogItem); Console.WriteLine(e.ToString()); } } intCatalogItemCounter += 1; Console.CursorLeft = 0; Console.Write(String.Format("{0} of {1} catalogitems checked. {2} thumbnails generated", intCatalogItemCounter, intCountCatalogItem, intThumbnailsGenerated)); } }
//private static void GenerateThumbnails(String type) //{ // Boolean keepAspectRatio = Boolean.Parse(ConfigurationManager.AppSettings["KeepAspectRatio"]); // Boolean setGenericVideoThumbnailOnError = Boolean.Parse(ConfigurationManager.AppSettings["SetGenericVideoThumbnailOnError"]); // IDImagerEntities db = new IDBrowserServiceCode.IDImagerEntities(); // IDImagerEntities dbThumbs = new IDBrowserServiceCode.IDImagerEntities(ConfigurationManager.ConnectionStrings["IDImagerThumbsEntities"].ConnectionString); // List<String> imageFileExtensions = ConfigurationManager.AppSettings["ImageFileExtensions"].Split(new char[] {char.Parse(",")}).ToList(); // List<String> videoFileExtensions = ConfigurationManager.AppSettings["VideoFileExtensions"].Split(new char[] { char.Parse(",") }).ToList(); // List<String> thumbImageGuids = dbThumbs.idThumbs.Where(x => x.idType.Equals(type)).Select(x => x.ImageGUID).ToList(); // Console.WriteLine("Getting images without thumbnails...."); // var queryThumbnails = from catalogItem in db.idCatalogItem.Include("idFilePath") // where !thumbImageGuids.Contains(catalogItem.GUID) && (imageFileExtensions.Contains(catalogItem.idFileType) || videoFileExtensions.Contains(catalogItem.idFileType)) // select catalogItem; // int intCountCatalogItem = queryThumbnails.Count(); // int intCatalogItemCounter = 0; // foreach (idCatalogItem catalogItem in queryThumbnails) // { // try // { // SaveImageThumbnailResult result = StaticFunctions.SaveImageThumbnail(catalogItem, ref db, ref dbThumbs, new List<String>() { type }, keepAspectRatio, setGenericVideoThumbnailOnError); // foreach (Exception ex in result.Exceptions) // { // LogException(ex); // Console.WriteLine(ex.ToString()); // } // if (result.Exceptions.Count > 0) // { // LogFailedCatalogItem(catalogItem); // } // } // catch (Exception ex) // { // LogException(ex); // LogFailedCatalogItem(catalogItem); // Console.WriteLine(ex.ToString()); // } // intCatalogItemCounter += 1; // Console.CursorLeft = 0; // Console.Write(String.Format("{0} of {1} T thumbnails generated", intCatalogItemCounter, intCountCatalogItem)); // } //} private static void GenerateThumbnails() { Boolean keepAspectRatio = Boolean.Parse(ConfigurationManager.AppSettings["KeepAspectRatio"]); Boolean setGenericVideoThumbnailOnError = Boolean.Parse(ConfigurationManager.AppSettings["SetGenericVideoThumbnailOnError"]); var commandLineArguments = new CommandLineArguments(); ICommandLineParser parser = new CommandLineParser(); parser.ParseArguments(Environment.GetCommandLineArgs(), commandLineArguments); IDImagerDB db = new IDImagerDB(); IDImagerDB dbThumbs = new IDImagerDB(); dbThumbs.Database.Connection.ConnectionString = ConfigurationManager.ConnectionStrings["IDImagerThumbsEntities"].ConnectionString; List <String> imageFileExtensions = ConfigurationManager.AppSettings["ImageFileExtensions"].Split(new char[] { char.Parse(",") }).ToList(); List <String> videoFileExtensions = ConfigurationManager.AppSettings["VideoFileExtensions"].Split(new char[] { char.Parse(",") }).ToList(); var queryCatalogItem = from catalogItem in db.idCatalogItem.Include("idFilePath") where imageFileExtensions.Contains(catalogItem.idFileType) || videoFileExtensions.Contains(catalogItem.idFileType) select catalogItem; if (commandLineArguments.FromDateTime != DateTime.MinValue) { queryCatalogItem = queryCatalogItem.Where(x => x.idCreated >= commandLineArguments.FromDateTime); } if (commandLineArguments.ToDateTime != DateTime.MinValue) { queryCatalogItem = queryCatalogItem.Where(x => x.idCreated <= commandLineArguments.ToDateTime); } if (commandLineArguments.FileFilter != null) { queryCatalogItem = queryCatalogItem.Where(x => x.idFileType.ToLower().Equals(commandLineArguments.FileFilter.ToLower())); } if (commandLineArguments.ImageGuid != null) { queryCatalogItem = queryCatalogItem.Where(x => x.GUID.Equals(commandLineArguments.ImageGuid, StringComparison.OrdinalIgnoreCase)); } int intCountCatalogItem = queryCatalogItem.Count(); int intCatalogItemCounter = 0; int intThumbnailsGenerated = 0; foreach (idCatalogItem catalogItem in queryCatalogItem) { List <String> typesToGenerate = new List <String>(); List <idThumbs> idThumbsT = dbThumbs.idThumbs.Where(x => x.ImageGUID == catalogItem.GUID && x.idType.Equals("T")).ToList(); List <idThumbs> idThumbsM = dbThumbs.idThumbs.Where(x => x.ImageGUID == catalogItem.GUID && x.idType.Equals("M")).ToList(); List <idThumbs> idThumbsR = dbThumbs.idThumbs.Where(x => x.ImageGUID == catalogItem.GUID && x.idType.Equals("R")).ToList(); if (idThumbsT.Count() == 0) { typesToGenerate.Add("T"); } if (idThumbsM.Count() == 0) { typesToGenerate.Add("M"); } if (catalogItem.idHasRecipe > 0 && idThumbsR.Count() == 0) { typesToGenerate.Add("R"); } if (commandLineArguments.Overwrite) { foreach (idThumbs thumb in idThumbsT) { dbThumbs.idThumbs.Remove(thumb); } foreach (idThumbs thumb in idThumbsM) { dbThumbs.idThumbs.Remove(thumb); } foreach (idThumbs thumb in idThumbsR) { dbThumbs.idThumbs.Remove(thumb); } typesToGenerate.Clear(); typesToGenerate.Add("T"); typesToGenerate.Add("M"); if (catalogItem.idHasRecipe > 0) { typesToGenerate.Add("R"); } } if (typesToGenerate.Count() > 0) { try { SaveImageThumbnailResult result = StaticFunctions.SaveImageThumbnail(catalogItem, ref db, ref dbThumbs, typesToGenerate, keepAspectRatio, setGenericVideoThumbnailOnError); foreach (Exception ex in result.Exceptions) { LogException(ex); Console.WriteLine(ex.ToString()); } if (result.Exceptions.Count > 0) { LogFailedCatalogItem(catalogItem); } intThumbnailsGenerated += result.ImageStreams.Count(); } catch (Exception e) { LogException(e); LogFailedCatalogItem(catalogItem); Console.WriteLine(e.ToString()); } } intCatalogItemCounter += 1; Console.CursorLeft = 0; Console.Write(String.Format("{0} of {1} catalogitems checked. {2} thumbnails generated", intCatalogItemCounter, intCountCatalogItem, intThumbnailsGenerated)); } }
public async static Task <SaveImageThumbnailResult> SaveImageThumbnail(idCatalogItem catalogItem, IDImagerDB db, IDImagerThumbsDB dbThumbs, List <string> types, ServiceSettings serviceSettings) { SaveImageThumbnailResult result = new SaveImageThumbnailResult(); Stream imageStream = null; String filePath = null; try { filePath = GetImageFilePath(catalogItem, serviceSettings.FilePathReplace); imageStream = GetImageFileStream(filePath); foreach (String type in types) { int imageWidth; int imageHeight; if (type.Equals("T")) { imageWidth = 160; imageHeight = 120; } else { imageWidth = serviceSettings.MThumbmailWidth; imageHeight = serviceSettings.MThumbnailHeight; } XmpRecipeContainer xmpRecipeContainer = null; if (type.Equals("T") || type.Equals("R")) { if (catalogItem.idHasRecipe > 0) { XDocument recipeXDocument = await GetRecipeXDocument(db, catalogItem); xmpRecipeContainer = XmpRecipeHelper.ParseXmlRecepie(recipeXDocument); } } MemoryStream resizedImageStream = new MemoryStream(); MagickReadSettings magickReadSettings = null; if (Enum.TryParse <MagickFormat>(catalogItem.idFileType, true, out MagickFormat magickFormat)) { magickReadSettings = new MagickReadSettings { Format = magickFormat }; } imageStream.Position = 0; MagickImage image = new MagickImage(imageStream, magickReadSettings) { Format = MagickFormat.Jpeg, }; image.Resize(imageWidth, imageHeight); if (xmpRecipeContainer != null) { XmpRecipeHelper.ApplyXmpRecipe(xmpRecipeContainer, image); } image.Write(resizedImageStream); resizedImageStream.Position = 0; bool boolThumbExists = await dbThumbs.idThumbs .AnyAsync(x => x.ImageGUID == catalogItem.GUID && x.idType == type); if (!boolThumbExists) { idThumbs newThumb = new idThumbs { GUID = Guid.NewGuid().ToString().ToUpper(), ImageGUID = catalogItem.GUID, idThumb = StreamToByteArray(resizedImageStream), idType = type }; dbThumbs.idThumbs.Add(newThumb); } result.ImageStreams.Add(resizedImageStream); } if (imageStream != null) { imageStream.Close(); } await dbThumbs.SaveChangesAsync(); } catch (Exception ex) { if (imageStream != null) { imageStream.Close(); } result.Exceptions.Add(new Exception(String.Format("Error generating thumbnail for imageGUID {0} file {1}", catalogItem.GUID, filePath), ex)); } return(result); }