public string Pharse(string template, PhotoSession session, ICameraDevice device, string fileName, string tempfileName) { if (!File.Exists(tempfileName)) { return(""); } IBarcodeReader reader = new BarcodeReader() { AutoRotate = true, TryInverted = true, Options = new DecodingOptions { TryHarder = true } }; // load a bitmap PhotoUtils.WaitForFile(tempfileName); using (var barcodeBitmap = (Bitmap)Bitmap.FromFile(tempfileName)) { // detect and decode the barcode inside the bitmap var result = reader.Decode(barcodeBitmap); // do something with the result if (result != null) { return(result.Text); } } return(template); }
private void NewSession() { try { var defaultsessionfile = Path.Combine(Core.Classes.Settings.SessionFolder, "Default.xml"); var session = new PhotoSession(); // copy session with default name if (File.Exists(defaultsessionfile)) { session = ServiceProvider.Settings.LoadSession(defaultsessionfile); session.Files.Clear(); } var editSession = new EditSession(session); editSession.Owner = ServiceProvider.PluginManager.SelectedWindow as Window; ServiceProvider.Settings.ApplyTheme(editSession); if (editSession.ShowDialog() == true) { ServiceProvider.Settings.Add(editSession.Session); ServiceProvider.Settings.DefaultSession = editSession.Session; } } catch (Exception ex) { Log.Error("Error create session ", ex); ServiceProvider.WindowsManager.ExecuteCommand(WindowsCmdConsts.MainWnd_Message, "Error create session " + ex.Message); } }
public void ExecuteCommand(string cmd, object param) { switch (cmd) { case WindowsCmdConsts.BrowseWnd_Show: ServiceProvider.Settings.PropertyChanged += Settings_PropertyChanged; Dispatcher.Invoke(new Action(delegate { Owner = ServiceProvider.PluginManager.SelectedWindow as Window; SelectedPhotoSession = ServiceProvider.Settings.DefaultSession; Show(); Activate(); Focus(); })); break; case WindowsCmdConsts.BrowseWnd_Hide: { ServiceProvider.Settings.PropertyChanged -= Settings_PropertyChanged; Dispatcher.Invoke(new Action(Hide)); } break; case CmdConsts.All_Close: Dispatcher.Invoke(new Action(delegate { Hide(); Close(); })); break; } }
public string Pharse(string template, PhotoSession session, ICameraDevice device, string fileName, string tempfileName) { if (!File.Exists(tempfileName)) { return(""); } try { _sp.PortName = Port; _sp.BaudRate = 9600; _sp.WriteTimeout = 3500; _sp.ReadTimeout = 3500; _sp.Open(); _sp.WriteLine(ArduinoLabelCommand); Thread.Sleep(500); return(_sp.ReadLine()); } catch (Exception ex) { Log.Debug("ArduinoLabel error", ex); StaticHelper.Instance.SystemMessage = ex.Message; } finally { if (_sp != null && _sp.IsOpen) { _sp.Close(); } } return(template); }
private void Settings_PropertyChanged(object sender, PropertyChangedEventArgs e) { if (e.PropertyName == "DefaultSession") { SelectedPhotoSession = ServiceProvider.Settings.DefaultSession; } }
private void btn_del_Sesion_Click(object sender, RoutedEventArgs e) { if (ServiceProvider.Settings.PhotoSessions.Count > 1) { try { if (MessageBox.Show(string.Format(TranslationStrings.MsgDeleteSessionQuestion, ServiceProvider.Settings.DefaultSession.Name), TranslationStrings.LabelDeleteSession, MessageBoxButton.YesNo) == MessageBoxResult.Yes) { PhotoSession session = ServiceProvider.Settings.DefaultSession; if (!string.IsNullOrEmpty(session.ConfigFile) && File.Exists(session.ConfigFile)) { File.Delete(session.ConfigFile); } ServiceProvider.Settings.PhotoSessions.Remove(session); ServiceProvider.Settings.DefaultSession = ServiceProvider.Settings.PhotoSessions[0]; ServiceProvider.Settings.Save(); } } catch (Exception exception) { Log.Error("Unable to remove session", exception); MessageBox.Show(TranslationStrings.LabelUnabletoDeleteSession + exception.Message); } } else { MessageBox.Show(TranslationStrings.MsgLastSessionCantBeDeleted); } }
private void DelSession() { if (ServiceProvider.Settings.PhotoSessions.Count > 1) { try { if ( MessageBox.Show( string.Format(TranslationStrings.MsgDeleteSessionQuestion, ServiceProvider.Settings.DefaultSession.Name), TranslationStrings.LabelDeleteSession, MessageBoxButton.YesNo) == MessageBoxResult.Yes) { PhotoSession session = ServiceProvider.Settings.DefaultSession; if (!string.IsNullOrEmpty(session.ConfigFile) && File.Exists(session.ConfigFile)) { File.Delete(session.ConfigFile); } ServiceProvider.Settings.PhotoSessions.Remove(session); ServiceProvider.Settings.DefaultSession = ServiceProvider.Settings.PhotoSessions[0]; ServiceProvider.Settings.Save(); } } catch (Exception exception) { Log.Error("Unable to remove session", exception); ServiceProvider.WindowsManager.ExecuteCommand(WindowsCmdConsts.MainWnd_Message, TranslationStrings.LabelUnabletoDeleteSession + exception.Message); } } else { ServiceProvider.WindowsManager.ExecuteCommand(WindowsCmdConsts.MainWnd_Message, TranslationStrings.MsgLastSessionCantBeDeleted); } }
public string Pharse(string template, PhotoSession session, ICameraDevice device, string fileName, string tempfileName) { if (!File.Exists(tempfileName)) { return(""); } // load a bitmap PhotoUtils.WaitForFile(tempfileName); var file = tempfileName; if (Path.GetExtension(fileName).ToLower() == ".cr2" || Path.GetExtension(fileName).ToLower() == ".nef") { string dcraw_exe = Path.Combine(Settings.ApplicationFolder, "dcraw.exe"); if (File.Exists(dcraw_exe)) { string thumb = Path.Combine(Path.GetTempPath(), Path.GetFileNameWithoutExtension(tempfileName) + ".thumb.jpg"); PhotoUtils.RunAndWait(dcraw_exe, string.Format(" -e -O \"{0}\" \"{1}\"", thumb, tempfileName)); if (File.Exists(thumb)) { var res = GetBarcode(thumb, template); File.Delete(thumb); return(res); } } } else { return(GetBarcode(tempfileName, template)); } return(template); }
public EditDefaultSession() { Session = ServiceProvider.Settings.DefaultSession; Session.BeginEdit(); InitializeComponent(); DataContext = Session; ServiceProvider.Settings.ApplyTheme(this); }
private static void AddPhotoToSession(PhotoSession session, Photo photo) { // tag photo into session photo.SessionId = session.SessionId; session.NumPhotos += 1; session.ToDate = photo.Creation; }
private void Apply() { PhotoSession.ApplyPlugin(Config); if (Config.IsError) { MessageBox.Show(Config.Error); } }
public EditSession(PhotoSession session) { Session = session; Session.BeginEdit(); InitializeComponent(); DataContext = Session; ServiceProvider.Settings.ApplyTheme(this); }
//private bool IsLocationExcluded(PhotoSession session) => !_locationService.IsWithinDistanceOfAndExcludedLocation(session.Location, ExclusionDistanceMi); private bool IsSessionDateWithinTrip(PhotoSession session) { if (!CurrentTripCandidate.PhotoSessions.Any() && session.FromDate.Year > 1980) { return(true); } return(session.FromDate.Subtract(CurrentTripCandidate.ToDate).TotalHours < MaxIdleHours); }
public bool IsTripSessionTest( [PexAssumeUnderTest] TripCreationService target, PhotoSession session ) { bool result = target.IsTripSession(session); return(result); // TODO: add assertions to method TripCreationServiceTest.IsTripSessionTest(TripCreationService, PhotoSession) }
private void PhotoCaptured(PhotoCapturedEventArgs eventArgs) { if (eventArgs == null) { throw new ArgumentNullException("eventArgs"); } Debug.Assert(eventArgs.CameraDevice != null, "PhotoCaptured: eventArgs.CameraDevice == null"); ICameraDevice cameraDev = eventArgs.CameraDevice; try { cameraDev.IsBusy = true; CameraProperty property = ServiceProvider.Settings.CameraProperties.Get(cameraDev); PhotoSession session = (PhotoSession)cameraDev.AttachedPhotoSession ?? ServiceProvider.Settings.DefaultSession; if ((property.NoDownload && !eventArgs.CameraDevice.CaptureInSdRam)) { cameraDev.IsBusy = false; return; } string fileName = GetTempFilePathWithExtension(".jpg"); DateTime testTime = DateTime.Now; Debug.WriteLine("Pre transfer: {0}:{1}:{2}:{3}", testTime.Hour, testTime.Minute, testTime.Second, testTime.Millisecond); cameraDev.TransferFile(eventArgs.Handle, fileName); testTime = DateTime.Now; Debug.WriteLine("Post transfer: {0}:{1}:{2}:{3}", testTime.Hour, testTime.Minute, testTime.Second, testTime.Millisecond); if (this.DeleteFromDevice) { try { AsyncObservableCollection <DeviceObject> devObjs = cameraDev.GetObjects(eventArgs.Handle); if (devObjs.Count == 1) { Debug.WriteLine("delete {0}", devObjs[0].FileName); //cameraDev.DeleteObject(devObjs[0]); } } catch (NotImplementedException) { } } this.lastImageFile = fileName; this.imageCaptured = true; cameraDev.IsBusy = false; Debug.WriteLine("Captured image at {0} to {1}{2}", DateTime.Now.ToLongTimeString(), fileName, Environment.NewLine); } catch (Exception ex) { Debug.WriteLine("PhotoCaptured exception: {0}", ex); eventArgs.CameraDevice.IsBusy = false; } }
void Settings_SessionSelected(PhotoSession oldvalue, PhotoSession newvalue) { if (oldvalue != null) { ServiceProvider.Settings.Save(oldvalue); } ServiceProvider.QueueManager.Clear(); if (ServiceProvider.DeviceManager.SelectedCameraDevice != null) { ServiceProvider.DeviceManager.SelectedCameraDevice.AttachedPhotoSession = newvalue; } }
public DestinationCandidate(PhotoSession mainPhotoSession) { Id = NewId++; PhotoSessions = new List <PhotoSession>(); PhotoSessions.Add(mainPhotoSession); FromDate = new DateTime(mainPhotoSession.FromDate.Ticks); ToDate = new DateTime(mainPhotoSession.ToDate.Ticks); TotalScore = mainPhotoSession.Score; }
private PhotoSession CreateSessionWithPhoto(Photo photo) { PhotoSession newSession = new PhotoSession(_photoRepo.Content.NewSessionId++); newSession.FromDate = photo.Creation; newSession.ToDate = photo.Creation; newSession.NumPhotos = 1; newSession.Location = photo.Location; newSession.DisplayName = $"{photo?.Location.DisplayName}"; return(newSession); }
public BraketingWnd(ICameraDevice device, PhotoSession session) { InitializeComponent(); _device = device; _photoSession = session; _photoSession.Braketing.IsBusy = false; backgroundWorker.DoWork += delegate { _photoSession.Braketing.TakePhoto(ServiceProvider.DeviceManager.SelectedCameraDevice); }; _photoSession.Braketing.IsBusyChanged += Braketing_IsBusyChanged; _photoSession.Braketing.PhotoCaptured += Braketing_PhotoCaptured; _photoSession.Braketing.BracketingDone += Braketing_BracketingDone; ServiceProvider.Settings.ApplyTheme(this); }
public EditSession(PhotoSession session) { try { Session = session; Session.BeginEdit(); InitializeComponent(); DataContext = Session; } catch (Exception ex) { Log.Error("EditSession init", ex); } }
public EditSession(PhotoSession session) { try { Session = session; Session.BeginEdit(); InitializeComponent(); DataContext = Session; ServiceProvider.Settings.ApplyTheme(this); } catch (Exception ex) { Log.Error("EditSession init", ex); } }
/// <summary> /// Called when default session is assigned or changed /// </summary> /// <param name="oldvalue">The oldvalue.</param> /// <param name="newvalue">The newvalue.</param> private void Settings_SessionSelected(PhotoSession oldvalue, PhotoSession newvalue) { // check if same session is used if (oldvalue == newvalue) { return; } if (oldvalue != null && ServiceProvider.Settings.PhotoSessions.Contains(oldvalue)) { ServiceProvider.Settings.Save(oldvalue); } ServiceProvider.QueueManager.Clear(); if (ServiceProvider.DeviceManager.SelectedCameraDevice != null) { ServiceProvider.DeviceManager.SelectedCameraDevice.AttachedPhotoSession = newvalue; } }
public void Init() { PhotoSession session = SavePhotoSessionController.GetSession; if (session.folders == null) { return; } for (int i = 0; i < session.folders.Count; i++) { Transform el = Instantiate(element.transform, new Vector3(0, 0, 0), Quaternion.identity); el.SetParent(container.transform); el.localScale = new Vector3(1, 1, 1); el.gameObject.SetActive(true); el.gameObject.GetComponent <SessionViewer>().Setdata(session.folders[i]); } }
public string Pharse(string template, PhotoSession session, ICameraDevice device, string fileName, string tempfileName) { if (!File.Exists(tempfileName)) { return(""); } FileItem item = new FileItem(tempfileName); BitmapLoader.Instance.GetMetadata(item); string tag = template.Replace("[", "").Replace("]", ""); if (item.FileInfo.ExifTags.ContainName(tag)) { return(item.FileInfo.ExifTags[tag].Replace(":", "_").Replace("?", "_").Replace("*", "_").Replace("\\", "_")); } ; return(template); }
private void TransferFiles() { DateTime starttime = DateTime.Now; long totalbytes = 0; AsyncObservableCollection <FileItem> itemstoExport = new AsyncObservableCollection <FileItem>(Items.Where(x => x.IsChecked)); dlg.MaxValue = itemstoExport.Count; dlg.Progress = 0; int i = 0; PhotoSession session = (PhotoSession)CameraDevice.AttachedPhotoSession ?? ServiceProvider.Settings.DefaultSession; foreach (FileItem fileItem in itemstoExport) { dlg.Label = fileItem.FileName; dlg.ImageSource = fileItem.Thumbnail; string fileName = Path.Combine(session.Folder, fileItem.FileName); if (File.Exists(fileName)) { fileName = StaticHelper.GetUniqueFilename( Path.GetDirectoryName(fileName) + "\\" + Path.GetFileNameWithoutExtension(fileName) + "_", 0, Path.GetExtension(fileName)); } CameraDevice.TransferFile(fileItem.DeviceObject.Handle, fileName); // double check if file was transferred if (File.Exists(fileName) && delete) { CameraDevice.DeleteObject(fileItem.DeviceObject); } totalbytes += new FileInfo(fileName).Length; session.AddFile(fileName); i++; dlg.Progress = i; } dlg.Hide(); double transfersec = (DateTime.Now - starttime).TotalSeconds; Log.Debug(string.Format( "[BENCHMARK]Total byte transferred ;{0}\nTotal seconds :{1}\nSpeed : {2} Mbyte/sec ", totalbytes, transfersec, (totalbytes / transfersec / 1024 / 1024).ToString("0000.00"))); }
private PhotoSession CreateOneSessionFromTop(IEnumerable <Photo> photos, int maxHourBeforeEndOfSession) { if (photos == null || photos.Count() == 0) { return(null); } PhotoSession session = CreateSessionWithPhoto(photos.First()); foreach (var photo in photos) { if ((photo.Creation - session.ToDate).TotalHours > maxHourBeforeEndOfSession) { break; // remaining photo will be part of another session maybe! } AddPhotoToSession(session, photo); } return(session); }
private void btn_add_Sesion_Click(object sender, RoutedEventArgs e) { var defaultsessionfile = Path.Combine(Settings.SessionFolder, "Default.xml"); var session = new PhotoSession(); // copy session with default name if (File.Exists(defaultsessionfile)) { session = ServiceProvider.Settings.LoadSession(defaultsessionfile); session.Files.Clear(); } var editSession = new EditSession(session); editSession.Owner = this; ServiceProvider.Settings.ApplyTheme(editSession); if (editSession.ShowDialog() == true) { ServiceProvider.Settings.Add(editSession.Session); ServiceProvider.Settings.DefaultSession = editSession.Session; } }
private void TransferFiles() { DateTime starttime = DateTime.Now; long totalbytes = 0; bool somethingwrong = false; AsyncObservableCollection <FileItem> itemstoExport = new AsyncObservableCollection <FileItem>(Items.Where(x => x.IsChecked)); dlg.MaxValue = itemstoExport.Count; dlg.Progress = 0; int i = 0; foreach (FileItem fileItem in itemstoExport) { if (fileItem.ItemType == FileItemType.Missing) { continue; } if (!fileItem.IsChecked) { continue; } dlg.Label = fileItem.FileName; dlg.ImageSource = fileItem.Thumbnail; PhotoSession session = (PhotoSession)fileItem.Device.AttachedPhotoSession ?? ServiceProvider.Settings.DefaultSession; string fileName = ""; if (!session.UseOriginalFilename) { fileName = session.GetNextFileName(Path.GetExtension(fileItem.FileName), fileItem.Device); } else { fileName = Path.Combine(session.Folder, fileItem.FileName); if (File.Exists(fileName)) { fileName = StaticHelper.GetUniqueFilename( Path.GetDirectoryName(fileName) + "\\" + Path.GetFileNameWithoutExtension(fileName) + "_", 0, Path.GetExtension(fileName)); } } string dir = Path.GetDirectoryName(fileName); if (dir != null && !Directory.Exists(dir)) { Directory.CreateDirectory(dir); } try { fileItem.Device.TransferFile(fileItem.DeviceObject.Handle, fileName); } catch (Exception exception) { somethingwrong = true; Log.Error("Transfer error", exception); } // double check if file was transferred if (File.Exists(fileName)) { if (delete) { fileItem.Device.DeleteObject(fileItem.DeviceObject); } } else { somethingwrong = true; } if (!File.Exists(fileName)) { MessageBox.Show("Unable download file. Aborting!"); break; } totalbytes += new FileInfo(fileName).Length; FileItem item1 = fileItem; Dispatcher.Invoke(new Action(delegate { var item = session.AddFile(fileName); item.CameraSerial = item1.Device.SerialNumber; item.OriginalName = item1.FileName; })); i++; dlg.Progress = i; } Log.Debug("File transfer done"); if (format) { dlg.MaxValue = ServiceProvider.DeviceManager.ConnectedDevices.Count; dlg.Progress = 0; int ii = 0; if (!somethingwrong) { foreach (ICameraDevice connectedDevice in ServiceProvider.DeviceManager.ConnectedDevices) { try { dlg.Label = connectedDevice.DisplayName; ii++; dlg.Progress = ii; Log.Debug("Start format"); Log.Debug(connectedDevice.PortName); connectedDevice.FormatStorage(null); Thread.Sleep(200); Log.Debug("Format done"); } catch (Exception exception) { Log.Error("Unable to format device ", exception); } } } else { Log.Debug("File transfer failed, format aborted!"); StaticHelper.Instance.SystemMessage = "File transfer failed, format aborted!"; } } dlg.Hide(); double transfersec = (DateTime.Now - starttime).TotalSeconds; Log.Debug(string.Format("[BENCHMARK]Total byte transferred ;{0} Total seconds :{1} Speed : {2} Mbyte/sec ", totalbytes, transfersec, (totalbytes / transfersec / 1024 / 1024).ToString("0000.00"))); ServiceProvider.Settings.Save(); ServiceProvider.WindowsManager.ExecuteCommand(WindowsCmdConsts.DownloadPhotosWnd_Hide); }
/// <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; var extension = Path.GetExtension(eventArgs.FileName); // the capture is for live view preview if (LiveViewManager.PreviewRequest.ContainsKey(eventArgs.CameraDevice) && LiveViewManager.PreviewRequest[eventArgs.CameraDevice]) { LiveViewManager.PreviewRequest[eventArgs.CameraDevice] = false; var file = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName() + extension); eventArgs.CameraDevice.TransferFile(eventArgs.Handle, file); eventArgs.CameraDevice.IsBusy = false; eventArgs.CameraDevice.TransferProgress = 0; eventArgs.CameraDevice.ReleaseResurce(eventArgs.Handle); LiveViewManager.Preview[eventArgs.CameraDevice] = file; LiveViewManager.OnPreviewCaptured(eventArgs.CameraDevice, file); return; } CameraProperty property = eventArgs.CameraDevice.LoadProperties(); PhotoSession session = (PhotoSession)eventArgs.CameraDevice.AttachedPhotoSession ?? ServiceProvider.Settings.DefaultSession; StaticHelper.Instance.SystemMessage = ""; if (!eventArgs.CameraDevice.CaptureInSdRam || PhotoUtils.IsMovie(eventArgs.FileName)) { if (property.NoDownload) { eventArgs.CameraDevice.IsBusy = false; eventArgs.CameraDevice.ReleaseResurce(eventArgs.Handle); return; } if (extension != null && (session.DownloadOnlyJpg && extension.ToLower() != ".jpg")) { eventArgs.CameraDevice.IsBusy = false; eventArgs.CameraDevice.ReleaseResurce(eventArgs.Handle); return; } } StaticHelper.Instance.SystemMessage = TranslationStrings.MsgPhotoTransferBegin; string tempFile = Path.GetTempFileName(); if (File.Exists(tempFile)) { File.Delete(tempFile); } Stopwatch stopWatch = new Stopwatch(); // transfer file from camera to temporary folder // in this way if the session folder is used as hot folder will prevent write errors stopWatch.Start(); if (!eventArgs.CameraDevice.CaptureInSdRam && session.DownloadThumbOnly) { eventArgs.CameraDevice.TransferFileThumb(eventArgs.Handle, tempFile); } else { eventArgs.CameraDevice.TransferFile(eventArgs.Handle, tempFile); } eventArgs.CameraDevice.TransferProgress = 0; eventArgs.CameraDevice.IsBusy = false; stopWatch.Stop(); string strTransfer = "Transfer time : " + stopWatch.Elapsed.TotalSeconds.ToString("##.###") + " Speed :" + Math.Round( new System.IO.FileInfo(tempFile).Length / 1024.0 / 1024 / stopWatch.Elapsed.TotalSeconds, 2) + " Mb/s"; Log.Debug(strTransfer); string fileName = ""; if (!session.UseOriginalFilename || eventArgs.CameraDevice.CaptureInSdRam) { fileName = session.GetNextFileName(eventArgs.FileName, eventArgs.CameraDevice, tempFile); } 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)); } string backupfile = null; if (session.BackUp) { backupfile = session.CopyBackUp(tempFile, fileName); if (string.IsNullOrEmpty(backupfile)) { StaticHelper.Instance.SystemMessage = "Unable to save the backup"; } } // execute plugins which are executed before transfer if (ServiceProvider.Settings.DefaultSession.AutoExportPluginConfigs.Count((x) => !x.RunAfterTransfer) > 0) { FileItem tempitem = new FileItem(tempFile); tempitem.Name = Path.GetFileName(fileName); tempitem.BackupFileName = backupfile; tempitem.Series = session.Series; tempitem.AddTemplates(eventArgs.CameraDevice, session); ExecuteAutoexportPlugins(eventArgs.CameraDevice, tempitem, false); } if ((!eventArgs.CameraDevice.CaptureInSdRam || PhotoUtils.IsMovie(fileName)) && session.DeleteFileAfterTransfer) { eventArgs.CameraDevice.DeleteObject(new DeviceObject() { Handle = eventArgs.Handle }); } File.Copy(tempFile, fileName); if (File.Exists(tempFile)) { PhotoUtils.WaitForFile(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.Transformed = tempitem.Transformed; _selectedItem.AddTemplates(eventArgs.CameraDevice, session); ServiceProvider.Database.Add(new DbFile(_selectedItem, eventArgs.CameraDevice.SerialNumber, eventArgs.CameraDevice.DisplayName, session.Name)); } catch (Exception ex) { } })); // execute plugins which are executed after transfer ExecuteAutoexportPlugins(eventArgs.CameraDevice, _selectedItem, true); 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 + " " + strTransfer; 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(); } eventArgs.CameraDevice.ReleaseResurce(eventArgs.Handle); //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); } 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(); }
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 = ""; if (!eventArgs.CameraDevice.CaptureInSdRam) { if (property.NoDownload) { eventArgs.CameraDevice.IsBusy = false; return; } var extension = Path.GetExtension(eventArgs.FileName); if (extension != null && (session.DownloadOnlyJpg && extension.ToLower() != ".jpg")) { eventArgs.CameraDevice.IsBusy = false; return; } } StaticHelper.Instance.SystemMessage = TranslationStrings.MsgPhotoTransferBegin; string fileName = ""; if (!session.UseOriginalFilename || eventArgs.CameraDevice.CaptureInSdRam) { fileName = session.GetNextFileName(Path.GetExtension(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)) { File.Delete(fileName); } if (!Directory.Exists(Path.GetDirectoryName(fileName))) { Directory.CreateDirectory(Path.GetDirectoryName(fileName)); } Log.Debug("Transfer started :" + fileName); //DateTime startTIme = DateTime.Now; eventArgs.CameraDevice.TransferFile(eventArgs.Handle, fileName); //Log.Debug("Transfer done :" + fileName); //Log.Debug("[BENCHMARK]Speed :" + // (new FileInfo(fileName).Length / (DateTime.Now - startTIme).TotalSeconds / 1024 / 1024).ToString("0000.00")); //Log.Debug("[BENCHMARK]Transfer time :" + ((DateTime.Now - startTIme).TotalSeconds).ToString("0000.000")); // write comment and tags directly in transferred file if (ServiceProvider.Settings.DefaultSession.WriteComment) { if (!string.IsNullOrEmpty(ServiceProvider.Settings.DefaultSession.Comment)) { Exiv2Helper.SaveComment(fileName, ServiceProvider.Settings.DefaultSession.Comment); } if (ServiceProvider.Settings.DefaultSession.SelectedTag1 != null && !string.IsNullOrEmpty(ServiceProvider.Settings.DefaultSession.SelectedTag1.Value)) { Exiv2Helper.AddKeyword(fileName, ServiceProvider.Settings.DefaultSession.SelectedTag1.Value); } if (ServiceProvider.Settings.DefaultSession.SelectedTag2 != null && !string.IsNullOrEmpty(ServiceProvider.Settings.DefaultSession.SelectedTag2.Value)) { Exiv2Helper.AddKeyword(fileName, ServiceProvider.Settings.DefaultSession.SelectedTag2.Value); } if (ServiceProvider.Settings.DefaultSession.SelectedTag3 != null && !string.IsNullOrEmpty(ServiceProvider.Settings.DefaultSession.SelectedTag3.Value)) { Exiv2Helper.AddKeyword(fileName, ServiceProvider.Settings.DefaultSession.SelectedTag3.Value); } if (ServiceProvider.Settings.DefaultSession.SelectedTag4 != null && !string.IsNullOrEmpty(ServiceProvider.Settings.DefaultSession.SelectedTag4.Value)) { Exiv2Helper.AddKeyword(fileName, ServiceProvider.Settings.DefaultSession.SelectedTag4.Value); } } _selectedItem = session.AddFile(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 (ServiceProvider.Settings.DelayImageLoading && (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(); } } catch (Exception ex) { eventArgs.CameraDevice.IsBusy = false; StaticHelper.Instance.SystemMessage = string.Format(TranslationStrings.MsgPhotoTransferError, ex.Message); Log.Error("Transfer error !", ex); } Log.Debug("Photo transfer done."); // not indicated to be used GC.Collect(); //GC.WaitForPendingFinalizers(); }