Make Sidecar class non-static.

This commit is contained in:
2019-04-20 18:11:02 +01:00
parent bc8052f0ae
commit c06f738ca9
18 changed files with 198 additions and 89 deletions

View File

@@ -524,7 +524,18 @@ namespace DiscImageChef.Core.Devices.Dumping
}
DateTime chkStart = DateTime.UtcNow;
CICMMetadataType sidecar = Sidecar.Create(inputPlugin, outputPath, filter.Id, encoding);
Sidecar sidecarClass = new Sidecar(inputPlugin, outputPath, filter.Id, encoding)
{
// TODO: Be able to cancel hashing
InitProgressEvent += InitProgress,
UpdateProgressEvent += UpdateProgress,
EndProgressEvent += EndProgress,
InitProgressEvent2 += InitProgress2,
UpdateProgressEvent2 += UpdateProgress2,
EndProgressEvent2 += EndProgress2,
UpdateStatusEvent += UpdateStatus
};
CICMMetadataType sidecar = sidecarClass.Create();
if(preSidecar != null)
{
preSidecar.BlockMedia = sidecar.BlockMedia;

View File

@@ -1844,7 +1844,18 @@ namespace DiscImageChef.Core.Devices.Dumping
}
DateTime chkStart = DateTime.UtcNow;
CICMMetadataType sidecar = Sidecar.Create(inputPlugin, outputPath, filter.Id, encoding);
Sidecar sidecarClass = new Sidecar(inputPlugin, outputPath, filter.Id, encoding)
{
// TODO: Be able to cancel hashing
InitProgressEvent += InitProgress,
UpdateProgressEvent += UpdateProgress,
EndProgressEvent += EndProgress,
InitProgressEvent2 += InitProgress2,
UpdateProgressEvent2 += UpdateProgress2,
EndProgressEvent2 += EndProgress2,
UpdateStatusEvent += UpdateStatus
};
CICMMetadataType sidecar = sidecarClass.Create();
end = DateTime.UtcNow;
totalChkDuration = (end - chkStart).TotalMilliseconds;

View File

@@ -171,5 +171,17 @@ namespace DiscImageChef.Core.Devices.Dumping
/// Event raised to update the status of an undeterminate progress bar
/// </summary>
public event PulseProgressHandler PulseProgress;
/// <summary>
/// Event raised when the progress bar is not longer needed
/// </summary>
public event EndProgressHandler2 EndProgress2;
/// <summary>
/// Event raised when a progress bar is needed
/// </summary>
public event InitProgressHandler2 InitProgress2;
/// <summary>
/// Event raised to update the values of a determinate progress bar
/// </summary>
public event UpdateProgressHandler2 UpdateProgress2;
}
}

View File

@@ -594,7 +594,18 @@ namespace DiscImageChef.Core.Devices.Dumping
}
DateTime chkStart = DateTime.UtcNow;
CICMMetadataType sidecar = Sidecar.Create(inputPlugin, outputPath, filter.Id, encoding);
Sidecar sidecarClass = new Sidecar(inputPlugin, outputPath, filter.Id, encoding)
{
// TODO: Be able to cancel hashing
InitProgressEvent += InitProgress,
UpdateProgressEvent += UpdateProgress,
EndProgressEvent += EndProgress,
InitProgressEvent2 += InitProgress2,
UpdateProgressEvent2 += UpdateProgress2,
EndProgressEvent2 += EndProgress2,
UpdateStatusEvent += UpdateStatus
};
CICMMetadataType sidecar = sidecarClass.Create();
end = DateTime.UtcNow;
totalChkDuration = (end - chkStart).TotalMilliseconds;
@@ -1062,7 +1073,18 @@ namespace DiscImageChef.Core.Devices.Dumping
}
DateTime chkStart = DateTime.UtcNow;
CICMMetadataType sidecar = Sidecar.Create(inputPlugin, outputPath, filter.Id, encoding);
Sidecar sidecarClass = new Sidecar(inputPlugin, outputPath, filter.Id, encoding)
{
// TODO: Be able to cancel hashing
InitProgressEvent += InitProgress,
UpdateProgressEvent += UpdateProgress,
EndProgressEvent += EndProgress,
InitProgressEvent2 += InitProgress2,
UpdateProgressEvent2 += UpdateProgress2,
EndProgressEvent2 += EndProgress2,
UpdateStatusEvent += UpdateStatus
};
CICMMetadataType sidecar = sidecarClass.Create();
end = DateTime.UtcNow;
totalChkDuration = (end - chkStart).TotalMilliseconds;

View File

@@ -829,7 +829,18 @@ namespace DiscImageChef.Core.Devices.Dumping
}
DateTime chkStart = DateTime.UtcNow;
CICMMetadataType sidecar = Sidecar.Create(inputPlugin, outputPath, filter.Id, encoding);
Sidecar sidecarClass = new Sidecar(inputPlugin, outputPath, filter.Id, encoding)
{
// TODO: Be able to cancel hashing
InitProgressEvent += InitProgress,
UpdateProgressEvent += UpdateProgress,
EndProgressEvent += EndProgress,
InitProgressEvent2 += InitProgress2,
UpdateProgressEvent2 += UpdateProgress2,
EndProgressEvent2 += EndProgress2,
UpdateStatusEvent += UpdateStatus
};
CICMMetadataType sidecar = sidecarClass.Create();
end = DateTime.UtcNow;
totalChkDuration = (end - chkStart).TotalMilliseconds;

View File

@@ -479,7 +479,18 @@ namespace DiscImageChef.Core.Devices.Dumping
if(!inputPlugin.Open(filter)) StoppingErrorMessage?.Invoke("Could not open created image.");
DateTime chkStart = DateTime.UtcNow;
CICMMetadataType sidecar = Sidecar.Create(inputPlugin, outputPath, filter.Id, encoding);
Sidecar sidecarClass = new Sidecar(inputPlugin, outputPath, filter.Id, encoding)
{
// TODO: Be able to cancel hashing
InitProgressEvent += InitProgress,
UpdateProgressEvent += UpdateProgress,
EndProgressEvent += EndProgress,
InitProgressEvent2 += InitProgress2,
UpdateProgressEvent2 += UpdateProgress2,
EndProgressEvent2 += EndProgress2,
UpdateStatusEvent += UpdateStatus
};
CICMMetadataType sidecar = sidecarClass.Create();
if(preSidecar != null)
{

View File

@@ -929,7 +929,18 @@ namespace DiscImageChef.Core.Devices.Dumping
}
DateTime chkStart = DateTime.UtcNow;
CICMMetadataType sidecar = Sidecar.Create(inputPlugin, outputPath, filter.Id, encoding);
Sidecar sidecarClass = new Sidecar(inputPlugin, outputPath, filter.Id, encoding)
{
// TODO: Be able to cancel hashing
InitProgressEvent += InitProgress,
UpdateProgressEvent += UpdateProgress,
EndProgressEvent += EndProgress,
InitProgressEvent2 += InitProgress2,
UpdateProgressEvent2 += UpdateProgress2,
EndProgressEvent2 += EndProgress2,
UpdateStatusEvent += UpdateStatus
};
CICMMetadataType sidecar = sidecarClass.Create();
end = DateTime.UtcNow;
if(preSidecar != null)

View File

@@ -40,7 +40,7 @@ using Schemas;
namespace DiscImageChef.Core
{
public static partial class Sidecar
public partial class Sidecar
{
// TODO: Complete it
/// <summary>

View File

@@ -50,7 +50,7 @@ using Tuple = DiscImageChef.Decoders.PCMCIA.Tuple;
namespace DiscImageChef.Core
{
public static partial class Sidecar
public partial class Sidecar
{
/// <summary>
/// Creates a metadata sidecar for a block media (e.g. floppy, hard disk, flash card, usb stick)
@@ -62,8 +62,8 @@ namespace DiscImageChef.Core
/// <param name="plugins">Image plugins</param>
/// <param name="imgChecksums">List of image checksums</param>
/// <param name="sidecar">Metadata sidecar</param>
static void BlockMedia(IMediaImage image, Guid filterId, string imagePath,
FileInfo fi, PluginBase plugins,
void BlockMedia(IMediaImage image, Guid filterId, string imagePath, FileInfo fi,
PluginBase plugins,
List<ChecksumType> imgChecksums, ref CICMMetadataType sidecar, Encoding encoding)
{
sidecar.BlockMedia = new[]

View File

@@ -36,7 +36,7 @@ using Schemas;
namespace DiscImageChef.Core
{
public static partial class Sidecar
public partial class Sidecar
{
/// <summary>
/// Creates a metadata sidecar for a block tape (e.g. scsi streaming)
@@ -44,9 +44,9 @@ namespace DiscImageChef.Core
/// <param name="files">List of files</param>
/// <param name="folderName">Dump path</param>
/// <param name="blockSize">Expected block size in bytes</param>
public static CICMMetadataType Create(string folderName, List<string> files, int blockSize)
public CICMMetadataType BlockTape(string folderName, List<string> files, int blockSize)
{
CICMMetadataType sidecar = new CICMMetadataType
sidecar = new CICMMetadataType
{
BlockMedia = new[]
{
@@ -84,7 +84,7 @@ namespace DiscImageChef.Core
for(int i = 0; i < files.Count; i++)
{
FileStream fs = new FileStream(files[i], FileMode.Open, FileAccess.Read);
fs = new FileStream(files[i], FileMode.Open, FileAccess.Read);
Checksum fileWorker = new Checksum();
TapeFileType tapeFile = new TapeFileType
{

View File

@@ -32,47 +32,47 @@
namespace DiscImageChef.Core
{
public static partial class Sidecar
public partial class Sidecar
{
public static event InitProgressHandler InitProgressEvent;
public static event UpdateProgressHandler UpdateProgressEvent;
public static event EndProgressHandler EndProgressEvent;
public static event InitProgressHandler2 InitProgressEvent2;
public static event UpdateProgressHandler2 UpdateProgressEvent2;
public static event EndProgressHandler2 EndProgressEvent2;
public static event UpdateStatusHandler UpdateStatusEvent;
public event InitProgressHandler InitProgressEvent;
public event UpdateProgressHandler UpdateProgressEvent;
public event EndProgressHandler EndProgressEvent;
public event InitProgressHandler2 InitProgressEvent2;
public event UpdateProgressHandler2 UpdateProgressEvent2;
public event EndProgressHandler2 EndProgressEvent2;
public event UpdateStatusHandler UpdateStatusEvent;
public static void InitProgress()
public void InitProgress()
{
InitProgressEvent?.Invoke();
}
public static void UpdateProgress(string text, long current, long maximum)
public void UpdateProgress(string text, long current, long maximum)
{
UpdateProgressEvent?.Invoke(string.Format(text, current, maximum), current, maximum);
}
public static void EndProgress()
public void EndProgress()
{
EndProgressEvent?.Invoke();
}
public static void InitProgress2()
public void InitProgress2()
{
InitProgressEvent2?.Invoke();
}
public static void UpdateProgress2(string text, long current, long maximum)
public void UpdateProgress2(string text, long current, long maximum)
{
UpdateProgressEvent2?.Invoke(string.Format(text, current, maximum), current, maximum);
}
public static void EndProgress2()
public void EndProgress2()
{
EndProgressEvent2?.Invoke();
}
public static void UpdateStatus(string text, params object[] args)
public void UpdateStatus(string text, params object[] args)
{
UpdateStatusEvent?.Invoke(string.Format(text, args));
}

View File

@@ -32,7 +32,7 @@
namespace DiscImageChef.Core
{
public static partial class Sidecar
public partial class Sidecar
{
/// <summary>
/// Converts a LBA to MM:SS:FF string for CDs

View File

@@ -40,7 +40,7 @@ using Schemas;
namespace DiscImageChef.Core
{
public static partial class Sidecar
public partial class Sidecar
{
// TODO: Complete it
/// <summary>
@@ -53,7 +53,7 @@ namespace DiscImageChef.Core
/// <param name="plugins">Image plugins</param>
/// <param name="imgChecksums">List of image checksums</param>
/// <param name="sidecar">Metadata sidecar</param>
static void LinearMedia(IMediaImage image, Guid filterId, string imagePath,
void LinearMedia(IMediaImage image, Guid filterId, string imagePath,
FileInfo fi, PluginBase plugins,
List<ChecksumType> imgChecksums, ref CICMMetadataType sidecar, Encoding encoding)
{

View File

@@ -50,7 +50,7 @@ using TrackType = Schemas.TrackType;
namespace DiscImageChef.Core
{
public static partial class Sidecar
public partial class Sidecar
{
/// <summary>
/// Creates a metadata sidecar for an optical disc (e.g. CD, DVD, GD, BD, XGD, GOD)
@@ -62,11 +62,9 @@ namespace DiscImageChef.Core
/// <param name="plugins">Image plugins</param>
/// <param name="imgChecksums">List of image checksums</param>
/// <param name="sidecar">Metadata sidecar</param>
static void OpticalDisc(IOpticalMediaImage image, Guid filterId,
string imagePath, FileInfo fi,
PluginBase plugins, List<ChecksumType> imgChecksums,
ref CICMMetadataType sidecar,
Encoding encoding)
void OpticalDisc(IOpticalMediaImage image, Guid filterId, string imagePath,
FileInfo fi, PluginBase plugins,
List<ChecksumType> imgChecksums, ref CICMMetadataType sidecar, Encoding encoding)
{
sidecar.OpticalDisc = new[]
{
@@ -110,10 +108,8 @@ namespace DiscImageChef.Core
};
ATIP.CDATIP? atip = ATIP.Decode(image.ReadDiskTag(MediaTagType.CD_ATIP));
if(atip.HasValue)
if(atip.Value.DDCD)
dskType = atip.Value.DiscType ? MediaType.DDCDRW : MediaType.DDCDR;
else
dskType = atip.Value.DiscType ? MediaType.CDRW : MediaType.CDR;
if(atip.Value.DDCD) dskType = atip.Value.DiscType ? MediaType.DDCDRW : MediaType.DDCDR;
else dskType = atip.Value.DiscType ? MediaType.CDRW : MediaType.CDR;
break;
case MediaTagType.DVD_BCA:
sidecar.OpticalDisc[0].BCA = new DumpType

View File

@@ -42,26 +42,50 @@ using Schemas;
namespace DiscImageChef.Core
{
public static partial class Sidecar
public partial class Sidecar
{
/// <summary>
/// Implements creating a metadata sidecar
/// </summary>
readonly Encoding encoding;
readonly FileInfo fi;
readonly Guid filterId;
FileStream fs;
readonly IMediaImage image;
readonly string imagePath;
readonly Checksum imgChkWorker;
readonly PluginBase plugins;
CICMMetadataType sidecar;
public Sidecar()
{
plugins = GetPluginBase.Instance;
imgChkWorker = new Checksum();
}
/// <param name="image">Image</param>
/// <param name="imagePath">Path to image</param>
/// <param name="filterId">Filter uuid</param>
/// <param name="encoding">Encoding for analysis</param>
/// <returns>The metadata sidecar</returns>
public static CICMMetadataType Create(IMediaImage image, string imagePath, Guid filterId, Encoding encoding)
public Sidecar(IMediaImage image, string imagePath, Guid filterId, Encoding encoding)
{
CICMMetadataType sidecar = image.CicmMetadata ?? new CICMMetadataType();
PluginBase plugins = GetPluginBase.Instance;
this.image = image;
this.imagePath = imagePath;
this.filterId = filterId;
this.encoding = encoding;
FileInfo fi = new FileInfo(imagePath);
FileStream fs = new FileStream(imagePath, FileMode.Open, FileAccess.Read);
sidecar = image.CicmMetadata ?? new CICMMetadataType();
plugins = GetPluginBase.Instance;
Checksum imgChkWorker = new Checksum();
fi = new FileInfo(imagePath);
fs = new FileStream(imagePath, FileMode.Open, FileAccess.Read);
imgChkWorker = new Checksum();
}
/// <summary>
/// Implements creating a metadata sidecar
/// </summary>
/// <returns>The metadata sidecar</returns>
public CICMMetadataType Create()
{
// For fast debugging, skip checksum
//goto skipImageChecksum;

View File

@@ -46,10 +46,10 @@ namespace DiscImageChef.Gui.Forms
{
public class frmImageSidecar : Form
{
Encoding encoding;
Guid filterId;
string imageSource;
IMediaImage inputFormat;
readonly Encoding encoding;
readonly Guid filterId;
readonly string imageSource;
readonly IMediaImage inputFormat;
public frmImageSidecar(IMediaImage inputFormat, string imageSource, Guid filterId, Encoding encoding)
{
@@ -81,7 +81,8 @@ namespace DiscImageChef.Gui.Forms
btnDestination.Visible = false;
});
CICMMetadataType sidecar = Sidecar.Create(inputFormat, imageSource, filterId, encoding);
Sidecar sidecarClass = new Sidecar(inputFormat, imageSource, filterId, encoding);
CICMMetadataType sidecar = sidecarClass.Create();
DicConsole.WriteLine("Writing metadata sidecar");

View File

@@ -115,14 +115,6 @@ namespace DiscImageChef.Commands
DicConsole.DebugWriteLine("Create sidecar command", "--tape={0}", tape);
DicConsole.DebugWriteLine("Create sidecar command", "--verbose={0}", MainClass.Verbose);
Sidecar.InitProgressEvent += Progress.InitProgress;
Sidecar.UpdateProgressEvent += Progress.UpdateProgress;
Sidecar.EndProgressEvent += Progress.EndProgress;
Sidecar.InitProgressEvent2 += Progress.InitProgress2;
Sidecar.UpdateProgressEvent2 += Progress.UpdateProgress2;
Sidecar.EndProgressEvent2 += Progress.EndProgress2;
Sidecar.UpdateStatusEvent += Progress.UpdateStatus;
Encoding encoding = null;
if(encodingName != null)
@@ -190,7 +182,15 @@ namespace DiscImageChef.Commands
Statistics.AddMediaFormat(imageFormat.Format);
Statistics.AddFilter(inputFilter.Name);
CICMMetadataType sidecar = Sidecar.Create(imageFormat, inputFile, inputFilter.Id, encoding);
Sidecar sidecarClass = new Sidecar(imageFormat, inputFile, inputFilter.Id, encoding);
sidecarClass.InitProgressEvent += Progress.InitProgress;
sidecarClass.UpdateProgressEvent += Progress.UpdateProgress;
sidecarClass.EndProgressEvent += Progress.EndProgress;
sidecarClass.InitProgressEvent2 += Progress.InitProgress2;
sidecarClass.UpdateProgressEvent2 += Progress.UpdateProgress2;
sidecarClass.EndProgressEvent2 += Progress.EndProgress2;
sidecarClass.UpdateStatusEvent += Progress.UpdateStatus;
CICMMetadataType sidecar = sidecarClass.Create();
DicConsole.WriteLine("Writing metadata sidecar");
@@ -223,7 +223,15 @@ namespace DiscImageChef.Commands
files.Sort(StringComparer.CurrentCultureIgnoreCase);
CICMMetadataType sidecar = Sidecar.Create(Path.GetFileName(inputFile), files, blockSize);
Sidecar sidecarClass = new Sidecar();
sidecarClass.InitProgressEvent += Progress.InitProgress;
sidecarClass.UpdateProgressEvent += Progress.UpdateProgress;
sidecarClass.EndProgressEvent += Progress.EndProgress;
sidecarClass.InitProgressEvent2 += Progress.InitProgress2;
sidecarClass.UpdateProgressEvent2 += Progress.UpdateProgress2;
sidecarClass.EndProgressEvent2 += Progress.EndProgress2;
sidecarClass.UpdateStatusEvent += Progress.UpdateStatus;
CICMMetadataType sidecar = sidecarClass.BlockTape(Path.GetFileName(inputFile), files, blockSize);
DicConsole.WriteLine("Writing metadata sidecar");

View File

@@ -144,15 +144,6 @@ namespace DiscImageChef.Commands
devicePath = extra[0];
outputFile = extra[1];
// TODO: Be able to cancel hashing
Sidecar.InitProgressEvent += Progress.InitProgress;
Sidecar.UpdateProgressEvent += Progress.UpdateProgress;
Sidecar.EndProgressEvent += Progress.EndProgress;
Sidecar.InitProgressEvent2 += Progress.InitProgress2;
Sidecar.UpdateProgressEvent2 += Progress.UpdateProgress2;
Sidecar.EndProgressEvent2 += Progress.EndProgress2;
Sidecar.UpdateStatusEvent += Progress.UpdateStatus;
DicConsole.DebugWriteLine("Dump-Media command", "--cicm-xml={0}", cicmXml);
DicConsole.DebugWriteLine("Dump-Media command", "--debug={0}", MainClass.Debug);
DicConsole.DebugWriteLine("Dump-Media command", "--device={0}", devicePath);