Change how converting an image works so data is done first, tags later, and percentage is from total.

This commit is contained in:
2018-01-03 19:36:30 +00:00
parent 2ff96fff8e
commit 6cf8190a01

View File

@@ -386,6 +386,7 @@ namespace DiscImageChef.Commands
} }
} }
else else
{
foreach(Track track in tracks) foreach(Track track in tracks)
{ {
doneSectors = 0; doneSectors = 0;
@@ -402,9 +403,10 @@ namespace DiscImageChef.Commands
(uint)(trackSectors - doneSectors); (uint)(trackSectors - doneSectors);
DicConsole.Write("\rConverting sectors {0} to {1} in track {3} ({2:P2} done)", DicConsole.Write("\rConverting sectors {0} to {1} in track {3} ({2:P2} done)",
doneSectors + track.TrackStartSector, doneSectors + track.TrackStartSector,
doneSectors + sectorsToDo + track.TrackStartSector, doneSectors + sectorsToDo + track.TrackStartSector,
doneSectors / (double)trackSectors, track.TrackSequence); (doneSectors + track.TrackStartSector) / (double)inputFormat.Info.Sectors,
track.TrackSequence);
bool result; bool result;
if(useLong) if(useLong)
@@ -449,36 +451,43 @@ namespace DiscImageChef.Commands
doneSectors += sectorsToDo; doneSectors += sectorsToDo;
} }
}
DicConsole.Write("\rConverting sectors {0} to {1} in track {3} ({2:P2} done)", DicConsole.Write("\rConverting sectors {0} to {1} in track {3} ({2:P2} done)", inputFormat.Info.Sectors,
trackSectors + track.TrackStartSector, trackSectors + track.TrackStartSector, 1.0, inputFormat.Info.Sectors, 1.0, tracks.Count);
track.TrackSequence); DicConsole.WriteLine();
DicConsole.WriteLine();
foreach(SectorTagType tag in inputFormat.Info.ReadableSectorTags) foreach(SectorTagType tag in inputFormat.Info.ReadableSectorTags.OrderBy(t => t))
{
if(!useLong) break;
switch(tag)
{ {
if(!useLong) break; case SectorTagType.AppleSectorTag:
case SectorTagType.CdSectorSync:
case SectorTagType.CdSectorHeader:
case SectorTagType.CdSectorSubHeader:
case SectorTagType.CdSectorEdc:
case SectorTagType.CdSectorEccP:
case SectorTagType.CdSectorEccQ:
case SectorTagType.CdSectorEcc:
// This tags are inline in long sector
continue;
}
doneSectors = 0; foreach(Track track in tracks)
{
doneSectors = 0;
ulong trackSectors = track.TrackEndSector - track.TrackStartSector + 1;
byte[] sector; byte[] sector;
bool result; bool result;
switch(tag) switch(tag)
{ {
case SectorTagType.AppleSectorTag:
case SectorTagType.CdSectorSync:
case SectorTagType.CdSectorHeader:
case SectorTagType.CdSectorSubHeader:
case SectorTagType.CdSectorEdc:
case SectorTagType.CdSectorEccP:
case SectorTagType.CdSectorEccQ:
case SectorTagType.CdSectorEcc:
// This tags are inline in long sector
continue;
case SectorTagType.CdTrackFlags: case SectorTagType.CdTrackFlags:
case SectorTagType.CdTrackIsrc: case SectorTagType.CdTrackIsrc:
DicConsole.Write("\rConverting tag {0} in track {1}.", tag, track.TrackSequence); DicConsole.Write("\rConverting tag {0} in track {1} ({2:P2} done).", tag,
DicConsole.WriteLine(); track.TrackSequence, track.TrackSequence / (double)tracks.Count);
sector = inputFormat.ReadSectorTag(track.TrackStartSector, tag); sector = inputFormat.ReadSectorTag(track.TrackStartSector, tag);
result = outputFormat.WriteSectorTag(sector, track.TrackStartSector, tag); result = outputFormat.WriteSectorTag(sector, track.TrackStartSector, tag);
continue; continue;
@@ -493,9 +502,10 @@ namespace DiscImageChef.Commands
(uint)(trackSectors - doneSectors); (uint)(trackSectors - doneSectors);
DicConsole.Write("\rConverting tag {4} for sectors {0} to {1} in track {3} ({2:P2} done)", DicConsole.Write("\rConverting tag {4} for sectors {0} to {1} in track {3} ({2:P2} done)",
doneSectors + track.TrackStartSector, doneSectors + track.TrackStartSector,
doneSectors + sectorsToDo + track.TrackStartSector, doneSectors + sectorsToDo + track.TrackStartSector,
doneSectors / (double)trackSectors, track.TrackSequence, tag); (doneSectors + track.TrackStartSector) / (double)inputFormat.Info.Sectors,
track.TrackSequence, tag);
if(sectorsToDo == 1) if(sectorsToDo == 1)
{ {
@@ -523,13 +533,25 @@ namespace DiscImageChef.Commands
doneSectors += sectorsToDo; doneSectors += sectorsToDo;
} }
DicConsole.Write("\rConverting tag {4} for sectors {0} to {1} in track {3} ({2:P2} done)",
trackSectors + track.TrackStartSector, trackSectors + track.TrackStartSector,
1.0, track.TrackSequence, tag);
DicConsole.WriteLine();
} }
switch(tag)
{
case SectorTagType.CdTrackFlags:
case SectorTagType.CdTrackIsrc:
DicConsole.Write("\rConverting tag {0} in track {1} ({2:P2} done).", tag, tracks.Count,
1.0);
break;
default:
DicConsole.Write("\rConverting tag {4} for sectors {0} to {1} in track {3} ({2:P2} done)",
inputFormat.Info.Sectors, inputFormat.Info.Sectors, 1.0, tracks.Count,
tag);
break;
}
DicConsole.WriteLine();
} }
}
if(tracks == null) if(tracks == null)
{ {