public void StartCapture(object sender, EventArgs ea)
        {
            // Instead of using a predefined capture program, we add shots on the fly
            if (this.CaptureMode == CaptureMode.Stream || this.CaptureMode == CaptureMode.Sweeping)
            {
                ShotDefinition videoShot = new DS4VideoShotDefintion();

                _session.AddShot(videoShot);
            }
            else
            {
                _session.AddShot(ShotDefinition.DEFAULT);
            }

            _sessionManager.PrepareForNextShot();

            if (this.CaptureMode == CaptureMode.Sweeping)
            {
                _logger.info("Sweeping Start...");
                try
                {
                    _sessionManager.SweepingStart();
                }
                catch (Exception e)
                {
                    _logger.info("Unexpected exception: " + e.Message);
                    throw e;
                }
            }
            else
            {
                _sessionManager.CaptureShot(this.CaptureMode);
            }
        }
        public CaptureController(string baseDirectory, SmithersLogger logger)
        {
            _baseDirectory = baseDirectory;
            _logger        = logger;

            try
            {
                _reader = new FrameReader(_pool, logger);
            }
            catch (Smithers.Reading.FrameData.ScannerNotFoundException e)
            {
                _logger.info("Failed to initizale camera" + e.Message);
                throw e;
            }
            StartNewSession();
            _sessionManager  = new SmithersDS4.Sessions.SessionManager <DS4Session, DS4Meta, Shot <ShotDefinition, DS4SavedItem>, ShotDefinition, DS4SavedItem>(_session);
            this.CaptureMode = CaptureMode.Sweeping;

            _sessionManager.AttachToReader(_reader);
            //_reader.FrameArrived += _sessionManager.FrameArrived;
            _reader.FrameArrived += _frameRateReporter.FrameArrived;
            //_reader.StartCapture += StartCapture;

            try
            {
                _reader.StartAsync();
            }
            catch (Smithers.Reading.FrameData.ScannerNotFoundException e)
            {
                _logger.info(e.Message);
            }
        }
        public void TryCancelUpload()
        {
            Uploader uploader;

            if (_uploadManager.AllUploads.TryGetValue(_captureController.Session, out uploader))
            {
                _logger.info("Upload Canceled");
                uploader.TryCancel();
            }
        }
        public ApplicationController(string baseDirectory)
        {
            _logger            = new SmithersLogger(baseDirectory);
            _captureController = new CaptureController(baseDirectory, _logger);
            _uploadManager     = new UploadManager();

            //Read credential into settings
            try
            {
                _loadCredentials(baseDirectory);
            }
            catch (InvalidDataException e)
            {
                _logger.info("Bad Credentials format: " + e.Message);
                return;
            }
        }