diff --git a/ShareX/TaskManager.cs b/ShareX/TaskManager.cs index 375491d42..f83ca64ab 100644 --- a/ShareX/TaskManager.cs +++ b/ShareX/TaskManager.cs @@ -423,7 +423,7 @@ private static void task_TaskCompleted(WorkerTask task) }; if (info.DataType == EDataType.Image) { - toastConfig.Image = task.GetImage(); + toastConfig.Image = task.Image; } NotificationForm.Show((int)(info.TaskSettings.AdvancedSettings.ToastWindowDuration * 1000), (int)(info.TaskSettings.AdvancedSettings.ToastWindowFadeDuration * 1000), diff --git a/ShareX/WorkerTask.cs b/ShareX/WorkerTask.cs index e6aaa9265..f07fff50c 100644 --- a/ShareX/WorkerTask.cs +++ b/ShareX/WorkerTask.cs @@ -55,8 +55,8 @@ public class WorkerTask : IDisposable public bool StopRequested { get; private set; } public bool RequestSettingUpdate { get; private set; } public Stream Data { get; private set; } + public Image Image { get; private set; } - private Image tempImage; private string tempText; private ThreadWorker threadWorker; private GenericUploader uploader; @@ -112,7 +112,7 @@ public static WorkerTask CreateFileUploaderTask(string filePath, TaskSettings ta if (task.Info.TaskSettings.AdvancedSettings.ProcessImagesDuringFileUpload && task.Info.DataType == EDataType.Image) { task.Info.Job = TaskJob.Job; - task.tempImage = ImageHelpers.LoadImage(task.Info.FilePath); + task.Image = ImageHelpers.LoadImage(task.Info.FilePath); } else { @@ -142,7 +142,7 @@ public static WorkerTask CreateImageUploaderTask(ImageInfo imageInfo, TaskSettin task.Info.FileName = TaskHelpers.GetFilename(taskSettings, "bmp", imageInfo); } - task.tempImage = imageInfo.Image; + task.Image = imageInfo.Image; return task; } @@ -304,7 +304,14 @@ private void ThreadDoWork() } finally { - if (Info.Job == TaskJob.Job && Info.TaskSettings.AfterCaptureJob.HasFlag(AfterCaptureTasks.DeleteFile) && !string.IsNullOrEmpty(Info.FilePath) && File.Exists(Info.FilePath)) + bool hasFile = !string.IsNullOrEmpty(Info.FilePath) && File.Exists(Info.FilePath); + + if (hasFile || Info.DataType != EDataType.Image) + { + Dispose(); + } + + if (Info.Job == TaskJob.Job && Info.TaskSettings.AfterCaptureJob.HasFlag(AfterCaptureTasks.DeleteFile) && hasFile) { File.Delete(Info.FilePath); } @@ -554,16 +561,16 @@ private bool DoThreadJob() private bool DoAfterCaptureJobs() { - if (tempImage == null) + if (Image == null) { return true; } if (Info.TaskSettings.AfterCaptureJob.HasFlag(AfterCaptureTasks.AddImageEffects)) { - tempImage = TaskHelpers.AddImageEffects(tempImage, Info.TaskSettings.ImageSettingsReference); + Image = TaskHelpers.AddImageEffects(Image, Info.TaskSettings.ImageSettingsReference); - if (tempImage == null) + if (Image == null) { DebugHelper.WriteLine("Error: Applying image effects resulted empty image."); return false; @@ -572,9 +579,9 @@ private bool DoAfterCaptureJobs() if (Info.TaskSettings.AfterCaptureJob.HasFlag(AfterCaptureTasks.AnnotateImage)) { - tempImage = TaskHelpers.AnnotateImage(tempImage, null, Info.TaskSettings, true); + Image = TaskHelpers.AnnotateImage(Image, null, Info.TaskSettings, true); - if (tempImage == null) + if (Image == null) { return false; } @@ -582,95 +589,92 @@ private bool DoAfterCaptureJobs() if (Info.TaskSettings.AfterCaptureJob.HasFlag(AfterCaptureTasks.CopyImageToClipboard)) { - ClipboardHelpers.CopyImage(tempImage); + ClipboardHelpers.CopyImage(Image); DebugHelper.WriteLine("Image copied to clipboard."); } if (Info.TaskSettings.AfterCaptureJob.HasFlag(AfterCaptureTasks.SendImageToPrinter)) { - TaskHelpers.PrintImage(tempImage); + TaskHelpers.PrintImage(Image); } if (Info.TaskSettings.AfterCaptureJob.HasFlagAny(AfterCaptureTasks.SaveImageToFile, AfterCaptureTasks.SaveImageToFileWithDialog, AfterCaptureTasks.DoOCR, AfterCaptureTasks.UploadImageToHost)) { - using (var image = (Image)tempImage.Clone()) + ImageData imageData = TaskHelpers.PrepareImage(Image, Info.TaskSettings); + Data = imageData.ImageStream; + Info.FileName = Path.ChangeExtension(Info.FileName, imageData.ImageFormat.GetDescription()); + + if (Info.TaskSettings.AfterCaptureJob.HasFlag(AfterCaptureTasks.SaveImageToFile)) { - ImageData imageData = TaskHelpers.PrepareImage(image, Info.TaskSettings); - Data = imageData.ImageStream; - Info.FileName = Path.ChangeExtension(Info.FileName, imageData.ImageFormat.GetDescription()); + string filePath = TaskHelpers.HandleExistsFile(Info.TaskSettings.CaptureFolder, Info.FileName, Info.TaskSettings); - if (Info.TaskSettings.AfterCaptureJob.HasFlag(AfterCaptureTasks.SaveImageToFile)) + if (!string.IsNullOrEmpty(filePath)) { - string filePath = TaskHelpers.HandleExistsFile(Info.TaskSettings.CaptureFolder, Info.FileName, Info.TaskSettings); - - if (!string.IsNullOrEmpty(filePath)) - { - Info.FilePath = filePath; - imageData.Write(Info.FilePath); - DebugHelper.WriteLine("Image saved to file: " + Info.FilePath); - } + Info.FilePath = filePath; + imageData.Write(Info.FilePath); + DebugHelper.WriteLine("Image saved to file: " + Info.FilePath); } + } - if (Info.TaskSettings.AfterCaptureJob.HasFlag(AfterCaptureTasks.SaveImageToFileWithDialog)) + if (Info.TaskSettings.AfterCaptureJob.HasFlag(AfterCaptureTasks.SaveImageToFileWithDialog)) + { + using (SaveFileDialog sfd = new SaveFileDialog()) { - using (SaveFileDialog sfd = new SaveFileDialog()) - { - bool imageSaved; + bool imageSaved; - do + do + { + if (string.IsNullOrEmpty(lastSaveAsFolder) || !Directory.Exists(lastSaveAsFolder)) { - if (string.IsNullOrEmpty(lastSaveAsFolder) || !Directory.Exists(lastSaveAsFolder)) - { - lastSaveAsFolder = Info.TaskSettings.CaptureFolder; - } + lastSaveAsFolder = Info.TaskSettings.CaptureFolder; + } - sfd.InitialDirectory = lastSaveAsFolder; - sfd.FileName = Info.FileName; - sfd.DefaultExt = Path.GetExtension(Info.FileName).Substring(1); - sfd.Filter = string.Format("*{0}|*{0}|All files (*.*)|*.*", Path.GetExtension(Info.FileName)); - sfd.Title = Resources.UploadTask_DoAfterCaptureJobs_Choose_a_folder_to_save + " " + Path.GetFileName(Info.FileName); + sfd.InitialDirectory = lastSaveAsFolder; + sfd.FileName = Info.FileName; + sfd.DefaultExt = Path.GetExtension(Info.FileName).Substring(1); + sfd.Filter = string.Format("*{0}|*{0}|All files (*.*)|*.*", Path.GetExtension(Info.FileName)); + sfd.Title = Resources.UploadTask_DoAfterCaptureJobs_Choose_a_folder_to_save + " " + Path.GetFileName(Info.FileName); - if (sfd.ShowDialog() == DialogResult.OK && !string.IsNullOrEmpty(sfd.FileName)) - { - Info.FilePath = sfd.FileName; - lastSaveAsFolder = Path.GetDirectoryName(Info.FilePath); - imageSaved = imageData.Write(Info.FilePath); + if (sfd.ShowDialog() == DialogResult.OK && !string.IsNullOrEmpty(sfd.FileName)) + { + Info.FilePath = sfd.FileName; + lastSaveAsFolder = Path.GetDirectoryName(Info.FilePath); + imageSaved = imageData.Write(Info.FilePath); - if (imageSaved) - { - DebugHelper.WriteLine("Image saved to file with dialog: " + Info.FilePath); - } - } - else + if (imageSaved) { - break; + DebugHelper.WriteLine("Image saved to file with dialog: " + Info.FilePath); } - } while (!imageSaved); - } + } + else + { + break; + } + } while (!imageSaved); + } + } + + if (Info.TaskSettings.AfterCaptureJob.HasFlag(AfterCaptureTasks.SaveThumbnailImageToFile)) + { + string thumbnailFilename, thumbnailFolder; + + if (!string.IsNullOrEmpty(Info.FilePath)) + { + thumbnailFilename = Path.GetFileName(Info.FilePath); + thumbnailFolder = Path.GetDirectoryName(Info.FilePath); + } + else + { + thumbnailFilename = Info.FileName; + thumbnailFolder = Info.TaskSettings.CaptureFolder; } - if (Info.TaskSettings.AfterCaptureJob.HasFlag(AfterCaptureTasks.SaveThumbnailImageToFile)) + Info.ThumbnailFilePath = TaskHelpers.CreateThumbnail(Image, thumbnailFolder, thumbnailFilename, Info.TaskSettings); + + if (!string.IsNullOrEmpty(Info.ThumbnailFilePath)) { - string thumbnailFilename, thumbnailFolder; - - if (!string.IsNullOrEmpty(Info.FilePath)) - { - thumbnailFilename = Path.GetFileName(Info.FilePath); - thumbnailFolder = Path.GetDirectoryName(Info.FilePath); - } - else - { - thumbnailFilename = Info.FileName; - thumbnailFolder = Info.TaskSettings.CaptureFolder; - } - - Info.ThumbnailFilePath = TaskHelpers.CreateThumbnail(tempImage, thumbnailFolder, thumbnailFilename, Info.TaskSettings); - - if (!string.IsNullOrEmpty(Info.ThumbnailFilePath)) - { - DebugHelper.WriteLine("Thumbnail saved to file: " + Info.ThumbnailFilePath); - } + DebugHelper.WriteLine("Thumbnail saved to file: " + Info.ThumbnailFilePath); } } } @@ -954,11 +958,6 @@ public UploadResult ShareURL(string url) return null; } - public Image GetImage() - { - return tempImage; - } - private UploadResult GetInvalidConfigResult(IUploaderService uploaderService) { UploadResult ur = new UploadResult(); @@ -1126,10 +1125,10 @@ public void Dispose() Data = null; } - if (tempImage != null) + if (Image != null) { - tempImage.Dispose(); - tempImage = null; + Image.Dispose(); + Image = null; } } }