Skip to content

Commit

Permalink
use offset when caching TOC info
Browse files Browse the repository at this point in the history
  • Loading branch information
JoeLametta committed Nov 29, 2015
1 parent 468d6cb commit d83e2fe
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 14 deletions.
34 changes: 21 additions & 13 deletions morituri/common/program.py
Original file line number Diff line number Diff line change
Expand Up @@ -151,29 +151,39 @@ def function(r, t):
assert toc.hasTOC()
return toc

def getTable(self, runner, cddbdiscid, mbdiscid, device):
def getTable(self, runner, cddbdiscid, mbdiscid, device, offset):
"""
Retrieve the Table either from the cache or the drive.
@rtype: L{table.Table}
"""
tcache = cache.TableCache()
ptable = tcache.get(cddbdiscid, mbdiscid)
itable = None
tdict = {}

if not ptable.object:
self.debug('getTable: cddbdiscid %s, mbdiscid %s not in cache, '
# Ingore old cache, since we do not know what offset it used.
if type(ptable.object) is dict:
tdict = ptable.object

if offset in tdict:
itable = tdict[offset]

if not itable:
self.debug('getTable: cddbdiscid %s, mbdiscid %s not in cache for offset %s, '
'reading table' % (
cddbdiscid, mbdiscid))
cddbdiscid, mbdiscid, offset))
t = cdrdao.ReadTableTask(device=device)
runner.run(t)
ptable.persist(t.table)
self.debug('getTable: read table %r' % t.table)
itable = t.table
tdict[offset] = itable
ptable.persist(tdict)
self.debug('getTable: read table %r' % itable)
else:
self.debug('getTable: cddbdiscid %s, mbdiscid %s in cache' % (
cddbdiscid, mbdiscid))
ptable.object.unpickled()
self.debug('getTable: loaded table %r' % ptable.object)
itable = ptable.object
self.debug('getTable: cddbdiscid %s, mbdiscid %s in cache for offset %s' % (
cddbdiscid, mbdiscid, offset))
self.debug('getTable: loaded table %r' % itable)

assert itable.hasTOC()

self.result.table = itable
Expand All @@ -182,8 +192,6 @@ def getTable(self, runner, cddbdiscid, mbdiscid, device):
itable.getMusicBrainzDiscId())
return itable

# FIXME: the cache should be model/offset specific

def getRipResult(self, cddbdiscid):
"""
Retrieve the persistable RipResult either from our cache (from a
Expand Down
2 changes: 1 addition & 1 deletion morituri/rip/cd.py
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ def do(self, args):

self.itable = self.program.getTable(self.runner,
self.ittoc.getCDDBDiscId(),
self.ittoc.getMusicBrainzDiscId(), self.device)
self.ittoc.getMusicBrainzDiscId(), self.device, self.options.offset)

assert self.itable.getCDDBDiscId() == self.ittoc.getCDDBDiscId(), \
"full table's id %s differs from toc id %s" % (
Expand Down

0 comments on commit d83e2fe

Please sign in to comment.