public bool Execute(FileItem item, AutoExportPluginConfig configData) { configData.IsRedy = false; configData.IsError = false; var filename = item.FileName; var conf = new TransformPluginViewModel(configData); var outfile = Path.GetTempFileName(); outfile = PhotoUtils.ReplaceExtension(outfile, Path.GetExtension(filename)); outfile = AutoExportPluginHelper.ExecuteTransformPlugins(item, configData, outfile); if (conf.CreateNew) { string newFile = Path.Combine(Path.GetDirectoryName(filename), Path.GetFileNameWithoutExtension(filename) + "_transformed" + ".jpg"); newFile = PhotoUtils.GetNextFileName(newFile); File.Copy(outfile, newFile, true); if (ServiceProvider.Settings.DefaultSession.GetFile(newFile) == null) { Application.Current.Dispatcher.Invoke(new Action(() => { FileItem im = new FileItem(newFile); im.Transformed = true; var i = ServiceProvider.Settings.DefaultSession.Files.IndexOf(item); if (ServiceProvider.Settings.DefaultSession.Files.Count - 1 == i) { ServiceProvider.Settings.DefaultSession.Files.Add(im); } else { ServiceProvider.Settings.DefaultSession.Files.Insert(i + 1, im); } })); } } else { // wait for file to be not locked PhotoUtils.WaitForFile(filename); File.Copy(outfile, filename, true); item.IsLoaded = false; item.RemoveThumbs(); item.Transformed = true; } // remove unused file if (outfile != item.FileName) { PhotoUtils.WaitForFile(outfile); File.Delete(outfile); } configData.IsRedy = true; return true; }
public bool Execute(FileItem item, AutoExportPluginConfig configData) { configData.IsRedy = false; configData.IsError = false; var filename = item.FileName; var outfile = Path.GetTempFileName(); AutoExportPluginHelper.ExecuteTransformPlugins(item, configData, outfile); // wait for file to be not locked PhotoUtils.WaitForFile(filename); File.Copy(outfile, filename, true); File.Delete(outfile); item.IsLoaded = false; item.RemoveThumbs(); // remove unused file if (outfile != item.FileName) { PhotoUtils.WaitForFile(outfile); File.Delete(outfile); } configData.IsRedy = true; return true; }
/// <summary> /// Photoes the captured. /// </summary> /// <param name="o">The o.</param> private void PhotoCaptured(object o) { PhotoCapturedEventArgs eventArgs = o as PhotoCapturedEventArgs; if (eventArgs == null) return; try { Log.Debug("Photo transfer begin."); eventArgs.CameraDevice.IsBusy = true; CameraProperty property = eventArgs.CameraDevice.LoadProperties(); PhotoSession session = (PhotoSession) eventArgs.CameraDevice.AttachedPhotoSession ?? ServiceProvider.Settings.DefaultSession; StaticHelper.Instance.SystemMessage = ""; var extension = Path.GetExtension(eventArgs.FileName); if (!eventArgs.CameraDevice.CaptureInSdRam || (extension != null && extension.ToLower() == ".mov")) { if (property.NoDownload) { eventArgs.CameraDevice.IsBusy = false; return; } if (extension != null && (session.DownloadOnlyJpg && extension.ToLower() != ".jpg")) { eventArgs.CameraDevice.IsBusy = false; return; } } StaticHelper.Instance.SystemMessage = TranslationStrings.MsgPhotoTransferBegin; string tempFile = Path.GetTempFileName(); if (File.Exists(tempFile)) File.Delete(tempFile); if (!eventArgs.CameraDevice.CaptureInSdRam && session.DownloadThumbOnly) eventArgs.CameraDevice.TransferFileThumb(eventArgs.Handle, tempFile); else eventArgs.CameraDevice.TransferFile(eventArgs.Handle, tempFile); string fileName = ""; if (!session.UseOriginalFilename || eventArgs.CameraDevice.CaptureInSdRam) { fileName = session.GetNextFileName(eventArgs.FileName, eventArgs.CameraDevice); } else { fileName = Path.Combine(session.Folder, eventArgs.FileName); if (File.Exists(fileName) && !session.AllowOverWrite) fileName = StaticHelper.GetUniqueFilename( Path.GetDirectoryName(fileName) + "\\" + Path.GetFileNameWithoutExtension(fileName) + "_", 0, Path.GetExtension(fileName)); } if (session.AllowOverWrite&& File.Exists(fileName)) { PhotoUtils.WaitForFile(fileName); File.Delete(fileName); } // make lower case extension if (session.LowerCaseExtension && !string.IsNullOrEmpty(Path.GetExtension(fileName))) { fileName = Path.Combine(Path.GetDirectoryName(fileName), Path.GetFileNameWithoutExtension(fileName) + Path.GetExtension(fileName).ToLower()); } if (session.AskSavePath) { SaveFileDialog dialog = new SaveFileDialog(); dialog.Filter = "All files|*.*"; dialog.Title = "Save captured photo"; dialog.FileName = fileName; dialog.InitialDirectory = Path.GetDirectoryName(fileName); if (dialog.ShowDialog() == true) { fileName = dialog.FileName; } else { eventArgs.CameraDevice.IsBusy = false; if (File.Exists(tempFile)) File.Delete(tempFile); return; } } if (!Directory.Exists(Path.GetDirectoryName(fileName))) { Directory.CreateDirectory(Path.GetDirectoryName(fileName)); } File.Copy(tempFile, fileName); string backupfile = null; if (session.BackUp) { backupfile = session.CopyBackUp(tempFile, fileName); if (string.IsNullOrEmpty(backupfile)) StaticHelper.Instance.SystemMessage = "Unable to save the backup"; } if (!eventArgs.CameraDevice.CaptureInSdRam && session.DeleteFileAfterTransfer) eventArgs.CameraDevice.DeleteObject(new DeviceObject() {Handle = eventArgs.Handle}); if (File.Exists(tempFile)) File.Delete(tempFile); if (session.WriteComment) { if (!string.IsNullOrEmpty(session.Comment)) Exiv2Helper.SaveComment(fileName, session.Comment); if (session.SelectedTag1 != null && !string.IsNullOrEmpty(session.SelectedTag1.Value)) Exiv2Helper.AddKeyword(fileName, session.SelectedTag1.Value); if (session.SelectedTag2 != null && !string.IsNullOrEmpty(session.SelectedTag2.Value)) Exiv2Helper.AddKeyword(fileName, session.SelectedTag2.Value); if (session.SelectedTag3 != null && !string.IsNullOrEmpty(session.SelectedTag3.Value)) Exiv2Helper.AddKeyword(fileName, session.SelectedTag3.Value); if (session.SelectedTag4 != null && !string.IsNullOrEmpty(session.SelectedTag4.Value)) Exiv2Helper.AddKeyword(fileName, session.SelectedTag4.Value); } if (session.ExternalData != null) session.ExternalData.FileName = fileName; // prevent crash og GUI when item count updated Dispatcher.Invoke(new Action(delegate { try { _selectedItem = session.GetNewFileItem(fileName); _selectedItem.BackupFileName = backupfile; _selectedItem.Series = session.Series; _selectedItem.AddTemplates(eventArgs.CameraDevice, session); ServiceProvider.Database.Add(new DbFile(_selectedItem, eventArgs.CameraDevice.DisplayName, eventArgs.CameraDevice.SerialNumber, session.Name)); } catch (Exception ex) { } })); foreach (AutoExportPluginConfig plugin in ServiceProvider.Settings.DefaultSession.AutoExportPluginConfigs) { if(!plugin.IsEnabled) continue; var pl = ServiceProvider.PluginManager.GetAutoExportPlugin(plugin.Type); try { pl.Execute(_selectedItem, plugin); ServiceProvider.Analytics.PluginExecute(plugin.Type); Log.Debug("AutoexportPlugin executed " + plugin.Type); } catch (Exception ex) { plugin.IsError = true; plugin.Error = ex.Message; plugin.IsRedy = true; Log.Error("Error to apply plugin", ex); } } Dispatcher.Invoke(() => { _selectedItem.RemoveThumbs(); session.Add(_selectedItem); ServiceProvider.OnFileTransfered(_selectedItem); }); if (ServiceProvider.Settings.MinimizeToTrayIcon && !IsVisible && !ServiceProvider.Settings.HideTrayNotifications) { MyNotifyIcon.HideBalloonTip(); MyNotifyIcon.ShowBalloonTip("Photo transfered", fileName, BalloonIcon.Info); } ServiceProvider.DeviceManager.LastCapturedImage[eventArgs.CameraDevice] = fileName; //select the new file only when the multiple camera support isn't used to prevent high CPU usage on raw files if (ServiceProvider.Settings.AutoPreview && !ServiceProvider.WindowsManager.Get(typeof (MultipleCameraWnd)).IsVisible && !ServiceProvider.Settings.UseExternalViewer) { if ((Path.GetExtension(fileName).ToLower() == ".jpg" && ServiceProvider.Settings.AutoPreviewJpgOnly) || !ServiceProvider.Settings.AutoPreviewJpgOnly) { if ((DateTime.Now - _lastLoadTime).TotalSeconds < 4) { _selectiontimer.Stop(); _selectiontimer.Start(); } else { ServiceProvider.WindowsManager.ExecuteCommand(WindowsCmdConsts.Select_Image, _selectedItem); } } } _lastLoadTime = DateTime.Now; //ServiceProvider.Settings.Save(session); StaticHelper.Instance.SystemMessage = TranslationStrings.MsgPhotoTransferDone; eventArgs.CameraDevice.IsBusy = false; //show fullscreen only when the multiple camera support isn't used if (ServiceProvider.Settings.Preview && !ServiceProvider.WindowsManager.Get(typeof (MultipleCameraWnd)).IsVisible && !ServiceProvider.Settings.UseExternalViewer) ServiceProvider.WindowsManager.ExecuteCommand(WindowsCmdConsts.FullScreenWnd_ShowTimed); if (ServiceProvider.Settings.UseExternalViewer && File.Exists(ServiceProvider.Settings.ExternalViewerPath)) { string arg = ServiceProvider.Settings.ExternalViewerArgs; arg = arg.Contains("%1") ? arg.Replace("%1", fileName) : arg + " " + fileName; PhotoUtils.Run(ServiceProvider.Settings.ExternalViewerPath, arg, ProcessWindowStyle.Normal); } if (ServiceProvider.Settings.PlaySound) { PhotoUtils.PlayCaptureSound(); } Log.Debug("Photo transfer done."); } catch (Exception ex) { eventArgs.CameraDevice.IsBusy = false; StaticHelper.Instance.SystemMessage =TranslationStrings.MsgPhotoTransferError+" "+ ex.Message; Log.Error("Transfer error !", ex); } // not indicated to be used GC.Collect(); //GC.WaitForPendingFinalizers(); }