using System;
using DiscImageChef.CommonTypes.Enums;
using DiscImageChef.Devices;
namespace DiscImageChef.Core.Devices.Scanning
{
public partial class MediaScan
{
readonly Device dev;
readonly string devicePath;
readonly string ibgLogPath;
readonly string mhddLogPath;
bool aborted;
/// Path to a MHDD log file
/// Path to a IMGBurn log file
/// Device path
/// Device
public MediaScan(string mhddLogPath, string ibgLogPath, string devicePath, Device dev)
{
this.mhddLogPath = mhddLogPath;
this.ibgLogPath = ibgLogPath;
this.devicePath = devicePath;
this.dev = dev;
aborted = false;
}
public ScanResults Scan()
{
switch(dev.Type)
{
case DeviceType.ATA: return Ata();
case DeviceType.MMC:
case DeviceType.SecureDigital: return SecureDigital();
case DeviceType.NVMe: return Nvme();
case DeviceType.ATAPI:
case DeviceType.SCSI: return Scsi();
default: throw new NotSupportedException("Unknown device type.");
}
}
public void Abort()
{
aborted = true;
}
///
/// Event raised when the progress bar is not longer needed
///
public event EndProgressHandler EndProgress;
///
/// Event raised when a progress bar is needed
///
public event InitProgressHandler InitProgress;
///
/// Event raised to report status updates
///
public event UpdateStatusHandler UpdateStatus;
///
/// Event raised to report a fatal error that stops the dumping operation and should call user's attention
///
public event ErrorMessageHandler StoppingErrorMessage;
///
/// Event raised to update the values of a determinate progress bar
///
public event UpdateProgressHandler UpdateProgress;
///
/// Event raised to update the status of an undeterminate progress bar
///
public event PulseProgressHandler PulseProgress;
public event ScanTimeHandler ScanTime;
public event ScanUnreadableHandler ScanUnreadable;
public event InitBlockMapHandler InitBlockMap;
public event ScanSpeedHandler ScanSpeed;
}
}