4CH)|(?PRE)|(?SCMS))\s*)+$";
+
// Trurip extensions
const string REGEX_APPLICATION = @"\bREM\s+Ripping Tool:\s+(?.+)$";
const string REGEX_TRURIP_DISC_HASHES = @"\bREM\s+DISC\s+HASHES$";
@@ -169,5 +171,9 @@ namespace DiscImageChef.DiscImages
const string REGEX_TRURIP_TRACK_MD5 = @"\bREM\s+(Gap|Trk)\s+(?\d{2}):\s+[\da-f]{32}$";
const string REGEX_TRURIP_TRACK_SHA1 = @"\bREM\s+(Gap|Trk)\s+(?\d{2}):\s+[\da-f]{40}$";
const string REGEX_TRURIP_TRACK_UNKNOWN = @"\bREM\s+(Gap|Trk)\s+(?\d{2}):\s+[\da-f]{8,}$";
+ const string REGEX_DIC_MEDIA_TYPE = @"\bREM\s+METADATA DIC MEDIA-TYPE:\s+(?.+)$";
+ const string REGEX_APPLICATION_VERSION = @"\bREM\s+Ripping Tool Version:\s+(?.+)$";
+ const string REGEX_DUMP_EXTENT =
+ @"\bREM\s+METADATA DUMP EXTENT:\s+(?.+)\s+\|\s+(?.+)\s+\|\s+(?.+)\s+\|\s+(?.+)\s+\|\s+(?.+)\s+\|\s+(?.+)\s+\|\s+(?.+)\s+\|\s+(?\d+):(?\d+)$";
}
}
\ No newline at end of file
diff --git a/DiscImageChef.DiscImages/CDRWin/Helpers.cs b/DiscImageChef.DiscImages/CDRWin/Helpers.cs
index 2d0898a89..4f138a6e5 100644
--- a/DiscImageChef.DiscImages/CDRWin/Helpers.cs
+++ b/DiscImageChef.DiscImages/CDRWin/Helpers.cs
@@ -38,14 +38,14 @@ namespace DiscImageChef.DiscImages
{
public partial class CdrWin
{
- static ulong CdrWinMsftoLba(string msf)
+ static ulong CdrWinMsfToLba(string msf)
{
string[] msfElements = msf.Split(':');
ulong minute = ulong.Parse(msfElements[0]);
ulong second = ulong.Parse(msfElements[1]);
ulong frame = ulong.Parse(msfElements[2]);
- ulong sectors = minute * 60 * 75 + second * 75 + frame;
+ ulong sectors = (minute * 60 * 75) + (second * 75) + frame;
return sectors;
}
@@ -144,8 +144,8 @@ namespace DiscImageChef.DiscImages
}
}
- static (byte minute, byte second, byte frame) LbaToMsf(ulong sector) =>
- ((byte)(sector / 75 / 60), (byte)(sector / 75 % 60), (byte)(sector % 75));
+ static(byte minute, byte second, byte frame) LbaToMsf(ulong sector) =>
+ ((byte)(sector / 75 / 60), (byte)((sector / 75) % 60), (byte)(sector % 75));
static string GetTrackMode(Track track)
{
@@ -235,7 +235,7 @@ namespace DiscImageChef.DiscImages
case MediaType.HDDVDROM: return CDRWIN_DISK_TYPE_HDDVD;
case MediaType.HDDVDRW: return CDRWIN_DISK_TYPE_HDDVDRW;
case MediaType.HDDVDRWDL: return CDRWIN_DISK_TYPE_HDDVDRWDL;
- default: return "";
+ default: return"";
}
}
}
diff --git a/DiscImageChef.DiscImages/CDRWin/Identify.cs b/DiscImageChef.DiscImages/CDRWin/Identify.cs
index 2b8647435..93f4fdfc0 100644
--- a/DiscImageChef.DiscImages/CDRWin/Identify.cs
+++ b/DiscImageChef.DiscImages/CDRWin/Identify.cs
@@ -43,7 +43,7 @@ namespace DiscImageChef.DiscImages
// Due to .cue format, this method must parse whole file, ignoring errors (those will be thrown by OpenImage()).
public bool Identify(IFilter imageFilter)
{
- cdrwinFilter = imageFilter;
+ _cdrwinFilter = imageFilter;
try
{
@@ -51,37 +51,45 @@ namespace DiscImageChef.DiscImages
byte[] testArray = new byte[512];
imageFilter.GetDataForkStream().Read(testArray, 0, 512);
imageFilter.GetDataForkStream().Seek(0, SeekOrigin.Begin);
+
// Check for unexpected control characters that shouldn't be present in a text file and can crash this plugin
bool twoConsecutiveNulls = false;
+
for(int i = 0; i < 512; i++)
{
- if(i >= imageFilter.GetDataForkStream().Length) break;
+ if(i >= imageFilter.GetDataForkStream().Length)
+ break;
if(testArray[i] == 0)
{
- if(twoConsecutiveNulls) return false;
+ if(twoConsecutiveNulls)
+ return false;
twoConsecutiveNulls = true;
}
- else twoConsecutiveNulls = false;
+ else
+ twoConsecutiveNulls = false;
- if(testArray[i] < 0x20 && testArray[i] != 0x0A && testArray[i] != 0x0D && testArray[i] != 0x00)
+ if(testArray[i] < 0x20 &&
+ testArray[i] != 0x0A &&
+ testArray[i] != 0x0D &&
+ testArray[i] != 0x00)
return false;
}
- cueStream = new StreamReader(cdrwinFilter.GetDataForkStream());
+ _cueStream = new StreamReader(_cdrwinFilter.GetDataForkStream());
- while(cueStream.Peek() >= 0)
+ while(_cueStream.Peek() >= 0)
{
- string line = cueStream.ReadLine();
+ string line = _cueStream.ReadLine();
- Regex sr = new Regex(REGEX_SESSION);
- Regex rr = new Regex(REGEX_COMMENT);
- Regex cr = new Regex(REGEX_MCN);
- Regex fr = new Regex(REGEX_FILE);
- Regex tr = new Regex(REGEX_CDTEXT);
+ var sr = new Regex(REGEX_SESSION);
+ var rr = new Regex(REGEX_COMMENT);
+ var cr = new Regex(REGEX_MCN);
+ var fr = new Regex(REGEX_FILE);
+ var tr = new Regex(REGEX_CDTEXT);
- // First line must be SESSION, REM, CATALOG, FILE or CDTEXTFILE.
+ // First line must be SESSION, REM, CATALOG, FILE or CDTEXTFILE.
Match sm = sr.Match(line ?? throw new InvalidOperationException());
Match rm = rr.Match(line);
Match cm = cr.Match(line);
@@ -95,9 +103,10 @@ namespace DiscImageChef.DiscImages
}
catch(Exception ex)
{
- DicConsole.ErrorWriteLine("Exception trying to identify image file {0}", cdrwinFilter);
- DicConsole.ErrorWriteLine("Exception: {0}", ex.Message);
- DicConsole.ErrorWriteLine("Stack trace: {0}", ex.StackTrace);
+ DicConsole.ErrorWriteLine("Exception trying to identify image file {0}", _cdrwinFilter);
+ DicConsole.ErrorWriteLine("Exception: {0}", ex.Message);
+ DicConsole.ErrorWriteLine("Stack trace: {0}", ex.StackTrace);
+
return false;
}
}
diff --git a/DiscImageChef.DiscImages/CDRWin/Properties.cs b/DiscImageChef.DiscImages/CDRWin/Properties.cs
index 839ff805c..665eea96d 100644
--- a/DiscImageChef.DiscImages/CDRWin/Properties.cs
+++ b/DiscImageChef.DiscImages/CDRWin/Properties.cs
@@ -41,12 +41,13 @@ namespace DiscImageChef.DiscImages
{
public partial class CdrWin
{
- public ImageInfo Info => imageInfo;
+ public ImageInfo Info => _imageInfo;
public string Name => "CDRWin cuesheet";
public Guid Id => new Guid("664568B2-15D4-4E64-8A7A-20BDA8B8386F");
public string Format => "CDRWin CUESheet";
public string Author => "Natalia Portillo";
public List Partitions { get; private set; }
+
public List