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;
@@ -404,7 +405,8 @@ namespace DiscImageChef.Commands
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,20 +451,16 @@ 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; if(!useLong) break;
doneSectors = 0;
byte[] sector;
bool result;
switch(tag) switch(tag)
{ {
case SectorTagType.AppleSectorTag: case SectorTagType.AppleSectorTag:
@@ -475,10 +473,21 @@ namespace DiscImageChef.Commands
case SectorTagType.CdSectorEcc: case SectorTagType.CdSectorEcc:
// This tags are inline in long sector // This tags are inline in long sector
continue; continue;
}
foreach(Track track in tracks)
{
doneSectors = 0;
ulong trackSectors = track.TrackEndSector - track.TrackStartSector + 1;
byte[] sector;
bool result;
switch(tag)
{
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;
@@ -495,7 +504,8 @@ namespace DiscImageChef.Commands
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,10 +533,22 @@ namespace DiscImageChef.Commands
doneSectors += sectorsToDo; doneSectors += sectorsToDo;
} }
}
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)", DicConsole.Write("\rConverting tag {4} for sectors {0} to {1} in track {3} ({2:P2} done)",
trackSectors + track.TrackStartSector, trackSectors + track.TrackStartSector, inputFormat.Info.Sectors, inputFormat.Info.Sectors, 1.0, tracks.Count,
1.0, track.TrackSequence, tag); tag);
break;
}
DicConsole.WriteLine(); DicConsole.WriteLine();
} }
} }