diff --git a/DiscImageChef.Core/Devices/Dumping/CompactDisc.cs b/DiscImageChef.Core/Devices/Dumping/CompactDisc.cs
index 1f26a1c72..a60648349 100644
--- a/DiscImageChef.Core/Devices/Dumping/CompactDisc.cs
+++ b/DiscImageChef.Core/Devices/Dumping/CompactDisc.cs
@@ -45,15 +45,19 @@ using DiscImageChef.CommonTypes.Structs;
using DiscImageChef.Console;
using DiscImageChef.Core.Logging;
using DiscImageChef.Core.Media.Detection;
+using DiscImageChef.Database;
using DiscImageChef.Decoders.CD;
using DiscImageChef.Decoders.SCSI;
using DiscImageChef.Decoders.SCSI.MMC;
using DiscImageChef.Devices;
using Schemas;
+using CdOffset = DiscImageChef.Database.Models.CdOffset;
+using Device = DiscImageChef.Database.Models.Device;
using MediaType = DiscImageChef.CommonTypes.MediaType;
using PlatformID = DiscImageChef.CommonTypes.Interop.PlatformID;
using Session = DiscImageChef.Decoders.CD.Session;
using TrackType = DiscImageChef.CommonTypes.Enums.TrackType;
+// ReSharper disable JoinDeclarationAndInitializer
namespace DiscImageChef.Core.Devices.Dumping
{
@@ -66,6 +70,13 @@ namespace DiscImageChef.Core.Devices.Dumping
/// Disc type as detected in MMC layer
internal void CompactDisc(ref MediaType dskType)
{
+ // Master database context
+ DicContext ctx;
+ // Device database entry
+ Device dbDev;
+ // Read offset from database
+ CdOffset cdOffset;
+
if(dumpRaw)
{
dumpLog.WriteLine("Raw CD dumping not yet implemented");
@@ -73,6 +84,40 @@ namespace DiscImageChef.Core.Devices.Dumping
return;
}
+
+ // Open master database
+ ctx = DicContext.Create(Settings.Settings.MasterDbPath);
+
+ // Search for device in master database
+ dbDev = ctx.Devices.FirstOrDefault(d => d.Manufacturer == dev.Manufacturer &&
+ d.Model == dev.Model &&
+ d.Revision == dev.Revision);
+
+ if(dbDev is null)
+ {
+ dumpLog.WriteLine("Device not in database, please create a device report and attach it to a Github issue.");
+ UpdateStatus?.Invoke("Device not in database, please create a device report and attach it to a Github issue.");
+ }
+ else
+ {
+ dumpLog.WriteLine($"Device in database since {dbDev.LastSynchronized}.");
+ UpdateStatus?.Invoke($"Device in database since {dbDev.LastSynchronized}.");
+ }
+
+ // Search for read offset in master database
+ cdOffset =
+ ctx.CdOffsets.FirstOrDefault(d => d.Manufacturer == dev.Manufacturer && d.Model == dev.Model);
+
+ if(cdOffset is null)
+ {
+ dumpLog.WriteLine("CD reading offset not found in database.");
+ UpdateStatus?.Invoke("CD reading offset not found in database.");
+ }
+ else
+ {
+ dumpLog.WriteLine($"CD reading offset is {cdOffset.Offset} samples.");
+ UpdateStatus?.Invoke($"CD reading offset is {cdOffset.Offset} samples.");
+ }
}
/// Dumps a compact disc