Example #1
0
        public string GenerateResult(ScanOptions scanOptions, DiscoveredScanner scanner)
        {
            try
            {
                string result = "";

                foreach (IFileNamingBlock block in Blocks)
                {
                    result += block.ToString(scanOptions, scanner);
                }

                return(result + ConvertImageScannerFormatToString(scanOptions.Format.TargetFormat));
            }
            catch (Exception exc)
            {
                ILogService       logService       = Ioc.Default.GetService <ILogService>();
                IAppCenterService appCenterService = Ioc.Default.GetService <IAppCenterService>();

                logService.Log.Error(exc, "Generating file name from {pattern} failed", GetSerialized(true));
                appCenterService.TrackError(exc);

                // fallback to rudimentary legacy file naming
                return("SCN" + DateTime.Now.Hour.ToString("00") + DateTime.Now.Minute.ToString("00") + DateTime.Now.Second.ToString("00"));;
            }
        }
Example #2
0
        /// <summary>
        ///     Deletes the saved <see cref="PersistentScanOptions"/> for the given <paramref name="scanner"/>, if any
        ///     exist.
        /// </summary>
        public void DeletePersistentScanOptionsForScanner(DiscoveredScanner scanner)
        {
            try
            {
                string id;
                if (scanner.Debug)
                {
                    id = "DEBUG";
                }
                else
                {
                    id = scanner.Id;
                }

                // prepare command
                Connection.Open();
                SqliteCommand deleteCommand = new SqliteCommand
                                                  ($"DELETE FROM {TableName.ToUpper()} WHERE id = \"{id}\"", Connection);

                // execute
                deleteCommand.ExecuteReader();

                Connection.Close();
                LogService?.Log.Information("DeletePersistentScanOptionsForScanner: Deleted scan options");
            }
            catch (Exception exc)
            {
                LogService.Log.Warning(exc, "Deleting persistent scan options for scanner failed.");
                return;
            }
        }
        public void TestGenerateBrightnessConfigInvalid()
        {
            var _mockSourceConfig = new Mock <IImageScannerSourceConfiguration>();

            _mockSourceConfig.Setup(x => x.BrightnessStep).Returns(0);

            BrightnessConfig brightnessConfig = DiscoveredScanner.GenerateBrightnessConfig(_mockSourceConfig.Object);

            Assert.IsNull(brightnessConfig);
        }
        public void TestGenerateContrastConfigInvalid()
        {
            var _mockSourceConfig = new Mock <IImageScannerSourceConfiguration>();

            _mockSourceConfig.Setup(x => x.ContrastStep).Returns(0);

            ContrastConfig contrastConfig = DiscoveredScanner.GenerateContrastConfig(_mockSourceConfig.Object);

            Assert.IsNull(contrastConfig);
        }
        public void TestGenerateBrightnessConfigVirtualDefaultUp()
        {
            var _mockSourceConfig = new Mock <IImageScannerSourceConfiguration>();

            _mockSourceConfig.Setup(x => x.MinBrightness).Returns(-999);
            _mockSourceConfig.Setup(x => x.DefaultBrightness).Returns(0);
            _mockSourceConfig.Setup(x => x.MaxBrightness).Returns(1000);
            _mockSourceConfig.Setup(x => x.BrightnessStep).Returns(1);

            BrightnessConfig brightnessConfig = DiscoveredScanner.GenerateBrightnessConfig(_mockSourceConfig.Object);

            Assert.IsNotNull(brightnessConfig);
            Assert.AreEqual(brightnessConfig.MinBrightness, -999);
            Assert.AreEqual(brightnessConfig.DefaultBrightness, 0);
            Assert.AreEqual(brightnessConfig.VirtualDefaultBrightness, 1);
            Assert.AreEqual(brightnessConfig.MaxBrightness, 1000);
            Assert.AreEqual(brightnessConfig.BrightnessStep, 1);
        }
        public void TestGenerateContrastConfigVirtualDefaultUp()
        {
            var _mockSourceConfig = new Mock <IImageScannerSourceConfiguration>();

            _mockSourceConfig.Setup(x => x.MinContrast).Returns(-999);
            _mockSourceConfig.Setup(x => x.DefaultContrast).Returns(0);
            _mockSourceConfig.Setup(x => x.MaxContrast).Returns(1000);
            _mockSourceConfig.Setup(x => x.ContrastStep).Returns(1);

            ContrastConfig contrastConfig = DiscoveredScanner.GenerateContrastConfig(_mockSourceConfig.Object);

            Assert.IsNotNull(contrastConfig);
            Assert.AreEqual(contrastConfig.MinContrast, -999);
            Assert.AreEqual(contrastConfig.DefaultContrast, 0);
            Assert.AreEqual(contrastConfig.VirtualDefaultContrast, 1);
            Assert.AreEqual(contrastConfig.MaxContrast, 1000);
            Assert.AreEqual(contrastConfig.ContrastStep, 1);
        }
Example #7
0
        /// <summary>
        ///     Saves the <paramref name="scanOptions"/> for the given <paramref name="scanner"/>.
        /// </summary>
        public void SavePersistentScanOptionsForScanner(DiscoveredScanner scanner, PersistentScanOptions scanOptions)
        {
            try
            {
                string id;
                if (scanner.Debug)
                {
                    id = "DEBUG";
                }
                else
                {
                    id = scanner.Id;
                }

                // prepare command
                Connection.Open();
                SqliteCommand upsertCommand = new SqliteCommand
                                                  ($"INSERT INTO {TableName.ToUpper()} VALUES" +
                                                  $"(\"{id}\", {scanOptions.FlatbedBrightness != null}, {scanOptions.FlatbedBrightness ?? 0}, {scanOptions.FlatbedContrast != null}, " +
                                                  $"{scanOptions.FlatbedContrast ?? 0}, {scanOptions.FeederBrightness != null}, {scanOptions.FeederBrightness ?? 0}, " +
                                                  $"{scanOptions.FeederContrast != null}, {scanOptions.FeederContrast ?? 0}) " +
                                                  $"ON CONFLICT(id) DO UPDATE SET flatbed_brightness_set={scanOptions.FlatbedBrightness != null}, " +
                                                  $"flatbed_brightness={scanOptions.FlatbedBrightness ?? 0}, " +
                                                  $"flatbed_contrast_set={scanOptions.FlatbedContrast != null}, " +
                                                  $"flatbed_contrast={scanOptions.FlatbedContrast ?? 0}, " +
                                                  $"feeder_brightness_set={scanOptions.FeederBrightness != null}, " +
                                                  $"feeder_brightness={scanOptions.FeederBrightness ?? 0}, " +
                                                  $"feeder_contrast_set={scanOptions.FeederContrast != null}, " +
                                                  $"feeder_contrast={scanOptions.FeederContrast ?? 0}", Connection);

                // execute
                upsertCommand.ExecuteReader();

                Connection.Close();

                LogService?.Log.Information("SaveScanOptionsForScanner: Saved scan options");
            }
            catch (Exception exc)
            {
                AppCenterService?.TrackError(exc);
                LogService.Log.Error(exc, "Saving persistent scan options for scanner failed.");
            }
        }
        /// <summary>
        ///     Saves the <paramref name="scanOptions"/> for the given <paramref name="scanner"/>.
        /// </summary>
        public void SaveScanOptionsForScanner(DiscoveredScanner scanner, ScanOptions scanOptions)
        {
            try
            {
                string id;
                if (scanner.Debug)
                {
                    id = "DEBUG";
                }
                else
                {
                    id = scanner.Id;
                }

                // prepare command
                Connection.Open();
                SqliteCommand upsertCommand = new SqliteCommand
                                                  ($"INSERT INTO {TableName.ToUpper()} VALUES" +
                                                  $"(\"{id}\", {(int)scanOptions.Source}, {(int)scanOptions.ColorMode}, {(int)scanOptions.Resolution}, " +
                                                  $"{scanOptions.FeederMultiplePages}, {scanOptions.FeederDuplex}, {(int)scanOptions.Format.TargetFormat}, " +
                                                  $"{(int)scanOptions.AutoCropMode}) " +
                                                  $"ON CONFLICT(id) DO UPDATE SET source_mode={(int)scanOptions.Source}, color_mode={(int)scanOptions.ColorMode}, " +
                                                  $"resolution={(int)scanOptions.Resolution}, multiple_pages={scanOptions.FeederMultiplePages}, " +
                                                  $"duplex={scanOptions.FeederDuplex}, file_format={(int)scanOptions.Format.TargetFormat}, " +
                                                  $"auto_crop_mode={(int)scanOptions.AutoCropMode}", Connection);

                // execute
                upsertCommand.ExecuteReader();

                Connection.Close();

                LogService?.Log.Information("SaveScanOptionsForScanner: Saved scan options");
            }
            catch (Exception exc)
            {
                AppCenterService?.TrackError(exc);
                LogService.Log.Error(exc, "Saving scan options for scanner failed.");
            }
        }
Example #9
0
        /// <summary>
        ///     Gets <see cref="PersistentScanOptions"/> for the given <paramref name="scanner"/>.
        /// </summary>
        public PersistentScanOptions GetPersistentScanOptionsForScanner(DiscoveredScanner scanner)
        {
            try
            {
                string id;
                if (scanner.Debug)
                {
                    id = "DEBUG";
                }
                else
                {
                    id = scanner.Id;
                }

                Connection.Open();
                SqliteCommand selectCommand = new SqliteCommand
                                                  ($"SELECT * FROM {TableName.ToUpper()} WHERE ID = \"{id}\"", Connection);
                SqliteDataReader query = selectCommand.ExecuteReader();

                // check if data for this scanner even exists
                if (!query.HasRows)
                {
                    return(null);
                }

                // load data
                PersistentScanOptions result = new PersistentScanOptions();
                while (query.Read())
                {
                    if (Convert.ToBoolean(int.Parse(query.GetString(1))))
                    {
                        result.FlatbedBrightness = int.Parse(query.GetString(2));
                    }

                    if (Convert.ToBoolean(int.Parse(query.GetString(3))))
                    {
                        result.FlatbedContrast = int.Parse(query.GetString(4));
                    }

                    if (Convert.ToBoolean(int.Parse(query.GetString(5))))
                    {
                        result.FeederBrightness = int.Parse(query.GetString(6));
                    }

                    if (Convert.ToBoolean(int.Parse(query.GetString(7))))
                    {
                        result.FeederContrast = int.Parse(query.GetString(8));
                    }
                }

                Connection.Close();

                LogService?.Log.Information($"GetPersistentScanOptionsForScanner: Returning scan options for {scanner.Name}");
                return(result);
            }
            catch (Exception exc)
            {
                AppCenterService?.TrackError(exc);
                LogService.Log.Error(exc, $"Getting persistent scan options for {scanner.Name} failed.");
                return(null);
            }
        }
        /// <summary>
        ///     Gets <see cref="ScanOptions"/> for the given <paramref name="scanner"/>.
        /// </summary>
        public ScanOptions GetScanOptionsForScanner(DiscoveredScanner scanner)
        {
            try
            {
                string id;
                if (scanner.Debug)
                {
                    id = "DEBUG";
                }
                else
                {
                    id = scanner.Id;
                }

                Connection.Open();
                SqliteCommand selectCommand = new SqliteCommand
                                                  ($"SELECT * FROM {TableName.ToUpper()} WHERE ID = \"{id}\"", Connection);
                SqliteDataReader query = selectCommand.ExecuteReader();

                // check if data for this scanner even exists
                if (!query.HasRows)
                {
                    return(null);
                }

                // load data
                ScanOptions result = new ScanOptions();
                while (query.Read())
                {
                    // common properties
                    result.Source    = (ScannerSource)int.Parse(query.GetString(1));
                    result.ColorMode = (ScannerColorMode)int.Parse(query.GetString(2));
                    result.Format    = new ScannerFileFormat((ImageScannerFormat)int.Parse(query.GetString(6)));

                    // source mode-dependent properties
                    switch (result.Source)
                    {
                    case ScannerSource.Flatbed:
                        result.Resolution   = float.Parse(query.GetString(3));
                        result.AutoCropMode = (ScannerAutoCropMode)int.Parse(query.GetString(7));
                        break;

                    case ScannerSource.Feeder:
                        result.Resolution          = float.Parse(query.GetString(3));
                        result.FeederMultiplePages = Convert.ToBoolean(int.Parse(query.GetString(4)));
                        result.FeederDuplex        = Convert.ToBoolean(int.Parse(query.GetString(5)));
                        result.AutoCropMode        = (ScannerAutoCropMode)int.Parse(query.GetString(7));
                        break;

                    case ScannerSource.None:
                    case ScannerSource.Auto:
                    default:
                        break;
                    }
                }

                Connection.Close();

                LogService?.Log.Information("GetScanOptionsForScanner: Returning {@Result} for {Name}", result, scanner.Name);
                return(result);
            }
            catch (Exception exc)
            {
                AppCenterService?.TrackError(exc);
                LogService.Log.Error(exc, "Getting scan options for {Name} failed", scanner.Name);
                return(null);
            }
        }