Tested first run

This commit is contained in:
2022-08-29 19:30:36 -07:00
parent 659e0e39bf
commit 753eeaba2a
26 changed files with 711 additions and 458 deletions

View File

@ -1,6 +1,5 @@
using System.Drawing;
using System.Drawing.Imaging;
using System.Globalization;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Text;
@ -164,12 +163,16 @@ public class C_Resize
}
}
private byte[] SaveResizedSubfile3(string subFile, int[] resize, byte[] bytes, Shared.Models.FileHolder? fileHolder)
private byte[] SaveResizedSubfile3(Shared.Models.Item item, int[] resize, bool returnAndDoNotWrite, byte[] bytes)
{
if (item.ImageFileHolder is null)
throw new NullReferenceException(nameof(item.ImageFileHolder));
if (item.ResizedFileHolder is null)
throw new NullReferenceException(nameof(item.ResizedFileHolder));
byte[] results;
Bitmap bitmap;
int outputResolutionWidth = resize[_OutputResolutionWidthIndex];
using Bitmap temp = new(subFile, useIcm: false);
using Bitmap temp = new(item.ImageFileHolder.FullName, useIcm: false);
int outputResolutionHeight = resize[_OutputResolutionHeightIndex];
PropertyItem[] propertyItems = temp.PropertyItems;
int outputResolutionOrientation = resize[_OutputResolutionOrientationIndex];
@ -204,23 +207,27 @@ public class C_Resize
default:
break;
}
if (fileHolder is null)
if (returnAndDoNotWrite)
results = GetBitmapData(bitmap);
else
{
results = Array.Empty<byte>();
CopyPropertyItems(bytes, propertyItems, bitmap);
bitmap.Save(fileHolder.FullName, _ImageCodecInfo, _EncoderParameters);
bitmap.Save(item.ResizedFileHolder.FullName, _ImageCodecInfo, _EncoderParameters);
}
bitmap.Dispose();
return results;
}
private byte[] SaveResizedSubfile5(string subFile, int[] resize, byte[] bytes, Shared.Models.FileHolder? fileHolder)
private byte[] SaveResizedSubfile5(Shared.Models.Item item, int[] resize, bool returnAndDoNotWrite, byte[] bytes)
{
if (item.ImageFileHolder is null)
throw new NullReferenceException(nameof(item.ImageFileHolder));
if (item.ResizedFileHolder is null)
throw new NullReferenceException(nameof(item.ResizedFileHolder));
byte[] results;
Bitmap bitmap;
using Bitmap temp = new(subFile, useIcm: false);
using Bitmap temp = new(item.ImageFileHolder.FullName, useIcm: false);
PropertyItem[] propertyItems = temp.PropertyItems;
int tempResolutionWidth = resize[_TempResolutionWidth];
int tempResolutionHeight = resize[_TempResolutionHeight];
@ -268,13 +275,13 @@ public class C_Resize
{
using (Graphics graphics = Graphics.FromImage(preRotated))
graphics.DrawImage(bitmap, new Rectangle(0, 0, outputResolutionWidth, outputResolutionHeight), rectangle, GraphicsUnit.Pixel);
if (fileHolder is null)
if (returnAndDoNotWrite)
results = GetBitmapData(bitmap);
else
{
results = Array.Empty<byte>();
CopyPropertyItems(bytes, propertyItems, bitmap);
bitmap.Save(fileHolder.FullName, _ImageCodecInfo, _EncoderParameters);
bitmap.Save(item.ResizedFileHolder.FullName, _ImageCodecInfo, _EncoderParameters);
}
}
bitmap.Dispose();
@ -283,54 +290,37 @@ public class C_Resize
#pragma warning restore CA1416
private byte[] SaveResizedSubfile(string subFile, Shared.Models.Property property, int[] resize, Shared.Models.FileHolder? fileHolder)
private byte[] SaveResizedSubfile(Shared.Models.Item item, int[] resize, bool returnAndDoNotWrite)
{
if (item.Property is null)
throw new NullReferenceException(nameof(item.Property));
byte[] results;
// string subFile, Shared.Models.Property property, Shared.Models.FileHolder? fileHolder
string dateTimeFormat = Shared.Models.Stateless.Methods.IProperty.DateTimeFormat();
DateTime dateTime = Shared.Models.Stateless.Methods.IProperty.GetMinimumDateTime(property);
DateTime dateTime = Shared.Models.Stateless.Methods.IProperty.GetMinimumDateTime(item.Property);
string dateTimeValue = dateTime.ToString(dateTimeFormat);
byte[] bytes = _ASCIIEncoding.GetBytes(dateTimeValue);
if (_ASCIIEncoding.GetString(bytes, 0, bytes.Length) != dateTimeValue)
throw new Exception();
if (resize.Length == 3)
results = SaveResizedSubfile3(subFile, resize, bytes, fileHolder);
results = SaveResizedSubfile3(item, resize, returnAndDoNotWrite, bytes);
else if (resize.Length == 5)
results = SaveResizedSubfile5(subFile, resize, bytes, fileHolder);
results = SaveResizedSubfile5(item, resize, returnAndDoNotWrite, bytes);
else
throw new Exception();
if (fileHolder is not null && false)
{
#pragma warning disable CA1416
using Image image = Image.FromFile(fileHolder.FullName);
if (image.PropertyIdList.Contains((int)IExif.Tags.DateTimeDigitized))
{
string value;
DateTime checkDateTime;
PropertyItem? propertyItem = image.GetPropertyItem((int)IExif.Tags.DateTimeDigitized);
if (propertyItem?.Value is not null)
{
value = _ASCIIEncoding.GetString(propertyItem.Value, 0, propertyItem.Len - 1);
if (value.Length == dateTimeFormat.Length && DateTime.TryParseExact(value, dateTimeFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out checkDateTime))
_ = checkDateTime;
}
}
#pragma warning restore CA1416
}
return results;
}
public byte[] GetResizedBytes(string outputResolution, string cResultsFullGroupDirectory, List<Tuple<string, DateTime>> subFileTuples, Shared.Models.Item item, Shared.Models.Property property, Dictionary<string, int[]> imageResizes)
public byte[] GetResizedBytes(string outputResolution, string cResultsFullGroupDirectory, List<Tuple<string, DateTime>> subFileTuples, Shared.Models.Item item, Dictionary<string, int[]> imageResizes)
{
byte[] results;
if (item.ImageFileHolder is null)
throw new NullReferenceException(nameof(item.ImageFileHolder));
if (!imageResizes.ContainsKey(outputResolution))
throw new Exception();
int[] resize = imageResizes[outputResolution];
int outputResolutionWidth = resize[_OutputResolutionWidthIndex];
int outputResolutionHeight = resize[_OutputResolutionHeightIndex];
int outputResolutionOrientation = resize[_OutputResolutionOrientationIndex];
results = SaveResizedSubfile(item.ImageFileHolder.FullName, property, resize, fileHolder: null);
results = SaveResizedSubfile(item, resize, returnAndDoNotWrite: true);
subFileTuples.Add(new Tuple<string, DateTime>(nameof(C_Resize), DateTime.Now));
return results;
}
@ -343,19 +333,19 @@ public class C_Resize
throw new NullReferenceException(nameof(item.ImageFileHolder));
if (item.ResizedFileHolder is null)
throw new NullReferenceException(nameof(item.ResizedFileHolder));
Shared.Models.FileHolder fileHolder = item.ResizedFileHolder;
if (!imageResizes.ContainsKey(outputResolution))
throw new Exception();
if (!fileHolder.Exists)
FileInfo fileInfo = new(item.ResizedFileHolder.FullName);
if (!fileInfo.Exists)
{
FileInfo fileInfo = new(fileHolder.FullName);
if (fileInfo.Directory?.Parent is null)
throw new Exception();
string parentCheck = Path.Combine(fileInfo.Directory.Parent.FullName, fileInfo.Name);
if (File.Exists(parentCheck))
{
File.Move(parentCheck, fileInfo.FullName);
item.SetResizedFileHolder(_FilenameExtension, Shared.Models.Stateless.Methods.IFileHolder.Refresh(fileHolder));
item.SetResizedFileHolder(_FilenameExtension, Shared.Models.Stateless.Methods.IFileHolder.Refresh(item.ResizedFileHolder));
fileInfo.Refresh();
}
}
int[] resize = imageResizes[outputResolution];
@ -365,9 +355,10 @@ public class C_Resize
int[] originalCollection = imageResizes[original];
if (outputResolutionWidth == originalCollection[_OutputResolutionWidthIndex] && outputResolutionHeight == originalCollection[_OutputResolutionHeightIndex] && outputResolutionOrientation == originalCollection[_OutputResolutionOrientationIndex])
{
if (!fileHolder.Exists)
if (!fileInfo.Exists)
{
File.Copy(item.ImageFileHolder.FullName, fileHolder.FullName);
File.Copy(item.ImageFileHolder.FullName, fileInfo.FullName);
item.SetResizedFileHolder(_FilenameExtension, Shared.Models.Stateless.Methods.IFileHolder.Refresh(item.ResizedFileHolder));
subFileTuples.Add(new Tuple<string, DateTime>(nameof(C_Resize), DateTime.Now));
}
}
@ -378,13 +369,14 @@ public class C_Resize
List<DateTime> dateTimes = (from l in subFileTuples where changesFrom.Contains(l.Item1) select l.Item2).ToList();
if (_OverrideForResizeImages)
check = true;
else if (!fileHolder.Exists)
else if (!fileInfo.Exists)
check = true;
else if (dateTimes.Any() && dateTimes.Max() > fileHolder.LastWriteTime)
else if (dateTimes.Any() && dateTimes.Max() > fileInfo.LastWriteTime)
check = true;
if (check)
{
_ = SaveResizedSubfile(item.ImageFileHolder.FullName, item.Property, resize, fileHolder);
_ = SaveResizedSubfile(item, resize, returnAndDoNotWrite: false);
item.SetResizedFileHolder(_FilenameExtension, Shared.Models.Stateless.Methods.IFileHolder.Refresh(item.ResizedFileHolder));
subFileTuples.Add(new Tuple<string, DateTime>(nameof(C_Resize), DateTime.Now));
}
}
@ -551,6 +543,8 @@ public class C_Resize
}
}
}
Shared.Models.FileHolder fileHolder = new(Path.Combine(AngleBracketCollection[0].Replace("<>", "()"), Path.GetFileName(item.ImageFileHolder.FullName)));
item.SetResizedFileHolder(_FilenameExtension, fileHolder);
return results;
}