Exemple #1
0
        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);
     }
 }
Exemple #3
0
        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);
 }
Exemple #5
0
 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);
 }
Exemple #10
0
        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);
 }
Exemple #13
0
        //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);
        }
Exemple #14
0
        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;
            }
        }
Exemple #16
0
 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;
     }
 }
Exemple #17
0
        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;
        }
Exemple #18
0
        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);
        }
Exemple #19
0
 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);
     }
 }
Exemple #21
0
 public EditSession(PhotoSession session)
 {
     try
     {
         Session = session;
         Session.BeginEdit();
         InitializeComponent();
         DataContext = Session;
         ServiceProvider.Settings.ApplyTheme(this);
     }
     catch (Exception ex)
     {
         Log.Error("EditSession init", ex);
     }
 }
Exemple #22
0
 /// <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);
        }
Exemple #25
0
        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")));
        }
Exemple #26
0
        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;
            }
        }
Exemple #28
0
        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);
        }
Exemple #29
0
        /// <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();
        }