public async Task <ImageInfo> CaptureImageAndDownload(bool returnImageData = false, string path = "/data/")
        {
            using (var executer = new CommandExecuter($"gphoto2 --capture-image-and-download --filename '{path}%Y%m%d-%H%M%S.jpg'"))
            {/*
              * Detected a 'Canon:EOS 350D (normal mode)'.
              * New file is in location /DCIM/351CANON/IMG_5101.JPG on the camera
              *
              *** Error ***
              ***canon_usb_set_file_attributes: canon_usb_dialogue failed
              ***Saving file as 20170910-203546.jpg
              ***Deleting file /DCIM/351CANON/IMG_5101.JPG on the camera
              */
                var lines = await executer.Execute();

                var filename = lines.GetFirstLineStartingWith("Saving file as ", true);

                var result = new ImageInfo()
                {
                    Filename = filename,
                    MimeType = "image/jpeg"
                };

                if (returnImageData)
                {
                    result.Data = File.ReadAllBytes(filename);
                }

                return(result);
            }
        }
        public async Task <DateTime> GetDateTime()
        {
            using (var executer = new CommandExecuter("gphoto2 --get-config /main/status/datetime"))
            { /*
               * Detected a 'Canon:EOS 350D (normal mode)'.
               * Label: Date and Time
               * Type: TEXT
               * Current: 2017-09-10 20:03:46
               */
                var lines = await executer.Execute();

                var date = lines.GetFirstLineStartingWith("Current: ");
                if (string.IsNullOrWhiteSpace(date))
                {
                    return(DateTime.MinValue);
                }

                DateTime result;
                if (DateTime.TryParse(date, CultureInfo.InvariantCulture, DateTimeStyles.None, out result))
                {
                    return(result);
                }

                return(DateTime.MinValue);
            }
        }
 public Task <string> Summary()
 {
     using (var executer = new CommandExecuter("gphoto2 --summary"))
     {
         return(executer.Execute());
     }
 }
        public async Task <bool> SyncDateTime()
        {
            using (var executer = new CommandExecuter("gphoto2 --set-config /main/actions/syncdatetime=1"))
            {/*
              * Detected a 'Canon:EOS 350D (normal mode)'.
              * time set
              */
                var lines = await executer.Execute();

                return(!string.IsNullOrWhiteSpace(lines.GetFirstLineStartingWith("time set")));
            }
        }