Updated logger module

This is just a copy & paste of morituri-whatlogger’s one.
This commit is contained in:
JoeLametta
2016-04-23 15:12:51 +02:00
parent 17157884c8
commit 98cf7388a6

View File

@@ -13,24 +13,12 @@ class MorituriLogger(result.Logger):
_errors = False
def _framesToMSF(self, frames):
# format specifically for EAC log; examples (5:39.57)
f = frames % common.FRAMES_PER_SECOND
frames -= f
s = (frames / common.FRAMES_PER_SECOND) % 60
frames -= s * 60
m = frames / common.FRAMES_PER_SECOND / 60
return "%2d:%02d.%02d" % (m, s, f)
def _framesToHMSH(self, frames):
# format specifically for EAC log; examples (0:00.00.70)
f = frames % common.FRAMES_PER_SECOND
frames -= f
s = (frames / common.FRAMES_PER_SECOND) % 60
frames -= s * 60
m = frames / common.FRAMES_PER_SECOND / 60
frames -= m * 60
h = frames / common.FRAMES_PER_SECOND / 60 / 60
return "%2d:%02d:%02d.%02d" % (h, m, s, f)
return "%02d:%02d.%02d" % (m, s, f)
def log(self, ripResult, epoch=time.time()):
lines = self.logRip(ripResult, epoch=epoch)
@@ -43,17 +31,17 @@ class MorituriLogger(result.Logger):
lines.append("Ripped at: %s" % date)
lines.append("Drive: %s%s (revision %s)" %
(ripResult.vendor, ripResult.model, ripResult.release))
lines.append("")
defeat = "Unknown"
if ripResult.cdparanoiaDefeatsCache is True:
defeat = "Yes"
if ripResult.cdparanoiaDefeatsCache is False:
defeat = "No"
lines.append("Defeat audio cache: %s" % defeat)
lines.append("")
lines.append("Read offset correction: %d" % ripResult.offset)
lines.append("Read offset correction: %+d" % ripResult.offset)
# Currently unsupported by the official cdparanoia package
lines.append("Overread: No")
lines.append("Overread into lead-out: No")
# Fully working only using the patched cdparanoia package
# lines.append("Fill up missing offset samples with silence: Yes")
lines.append("Gap detection: cdrdao %s" % ripResult.cdrdaoVersion)
@@ -78,17 +66,18 @@ class MorituriLogger(result.Logger):
htoastart = htoa.absolute
htoaend = table.getTrackEnd(0)
htoalength = table.tracks[0].getIndex(1).absolute - htoastart + 1
lines.append(" 0:")
lines.append(" 00:")
lines.append(" Start: %s" % self._framesToMSF(htoastart))
lines.append(" Length: %s" % self._framesToMSF(htoalength))
lines.append(" Start sector: %d" % htoastart)
lines.append(" End sector: %d" % htoaend)
for t in table.tracks:
# FIXME: what happens to a track start over 60 minutes ?
# Answer: tested experimentally, everything seems OK
start = t.getIndex(1).absolute
length = table.getTrackLength(t.number)
end = table.getTrackEnd(t.number)
lines.append(" %d:" % t.number)
lines.append(" %02d:" % t.number)
lines.append(" Start: %s" % self._framesToMSF(start))
lines.append(" Length: %s" % self._framesToMSF(length))
lines.append(" Start sector: %d" % start)
@@ -104,70 +93,60 @@ class MorituriLogger(result.Logger):
lines.append("")
duration += t.testduration + t.copyduration
lines.append("AccurateRip Summary:")
lines.append("Informations:")
lines.append(" AccurateRip summary:")
if self._inARDatabase == 0:
lines.append(" None of the tracks are present in "
lines.append(" Result: None of the tracks are present in "
"the AccurateRip database")
else:
nonHTOA = len(ripResult.tracks)
if ripResult.tracks[0].number == 0:
nonHTOA -= 1
if self._accuratelyRipped == 0:
lines.append(" No tracks could be verified as accurate")
lines.append(" You may have a different pressing "
lines.append(" Result: No tracks could be verified as "
"accurate (you may have a different pressing "
"from the one(s) in the database")
elif self._accuratelyRipped < nonHTOA:
lines.append(" %d track(s) accurately ripped" %
lines.append(" %d track(s) accurately ripped" %
self._accuratelyRipped)
lines.append(" %d track(s) could not be verified as "
lines.append(" %d track(s) could not be verified as "
"accurate" % (nonHTOA - self._accuratelyRipped))
lines.append("")
lines.append(" Some tracks could not be verified as accurate")
lines.append(" Some tracks could not be verified as "
"accurate")
else:
lines.append(" All tracks accurately ripped")
lines.append(" Result: All tracks accurately ripped")
lines.append("")
lines.append("Errors:")
lines.append(" Health status:")
if self._errors:
lines.append(" There were errors")
lines.append(" Result: There were errors")
else:
lines.append(" No errors occurred")
lines.append(" Result: No errors occurred")
lines.append("")
lines.append("End of status report")
lines.append(" EOF: End of status report")
lines.append("")
hasher = hashlib.sha256()
hasher.update("\n".join(lines).encode("utf-8"))
lines.append("Log checksum: %s" % hasher.hexdigest())
lines.append("SHA-256 hash: %s" % hasher.hexdigest().upper())
lines.append("")
return lines
def trackLog(self, trackResult):
lines = []
lines.append(" %d:" % trackResult.number)
lines.append(" %02d:" % trackResult.number)
lines.append(" Filename: %s" % trackResult.filename)
# EAC adds the 2 seconds to the first track pregap
pregap = trackResult.pregap
# if trackResult.number == 1:
# pregap += 2 * common.FRAMES_PER_SECOND
if pregap:
lines.append(" Pre-gap length: %s" % self._framesToHMSH(pregap))
# EAC seems to format peak differently, truncating to the 3rd digit,
# and also calculating it against a max of 32767
# MBV - Feed me with your kiss: replaygain 0.809875,
# EAC's peak level 80.9 % instead of 90.0 %
lines.append(" Pre-gap length: %s" % self._framesToMSF(pregap))
peak = trackResult.peak
# lines.append(' Peak level %r' % peak)
lines.append(" Peak level: %.6f %%" % peak)
# level = "%.2f" % (trackResult.peak * 100.0)
# level = level[:-1]
# lines.append(' Peak level %s %%' % level)
if trackResult.copyspeed:
lines.append(" Extraction speed: %.1f X" % (
trackResult.copyspeed))
# Track quality is shown in secure mode
if trackResult.quality and trackResult.quality > 0.001:
lines.append(" Track quality: %.1f %%" %
lines.append(" Track quality: %.2f %%" %
(trackResult.quality * 100.0, ))
if trackResult.testcrc is not None:
lines.append(" Test CRC: %08X" % trackResult.testcrc)
@@ -177,22 +156,25 @@ class MorituriLogger(result.Logger):
if trackResult.accurip:
self._inARDatabase += 1
if trackResult.ARCRC == trackResult.ARDBCRC:
lines.append(" Result: Found, exact match")
lines.append(" Confidence: %d" %
trackResult.ARDBConfidence)
lines.append(" Checksum: %08X" % trackResult.ARCRC)
self._accuratelyRipped += 1
else:
lines.append(" Result: Found, no exact match")
lines.append(" Cannot be verified as accurate "
"(confidence %d), [%08X], "
"AccurateRip returned [%08x]" % (
trackResult.ARDBConfidence,
trackResult.ARCRC, trackResult.ARDBCRC))
else:
lines.append(" Track not present in AccurateRip database")
lines.append(" Result: Track not present in "
"AccurateRip database")
if trackResult.testcrc == trackResult.copycrc:
lines.append(" Copy OK")
lines.append(" Status: Copy OK")
else:
self._errors = True
lines.append(" Error: CRC mismatch!")
lines.append(" Status: Error, CRC mismatch")
return lines