}
type ChunksReaderer interface {
- ChunksReader(prefix string) (PieceReader, error)
+ ChunksReader(dir string) (PieceReader, error)
}
type PrefixDeleter interface {
return ok
}
-func (s piecePerResourcePiece) getChunksReader(prefix string) (PieceReader, error) {
+// Chunks are in dirs, we add the prefix ourselves.
+func (s piecePerResourcePiece) getChunksReader(dir string) (PieceReader, error) {
if opt, ok := s.rp.(ChunksReaderer); ok {
- return opt.ChunksReader(prefix)
+ return opt.ChunksReader(dir)
}
- return chunkPieceReader{s.getChunks(prefix)}, nil
+ return chunkPieceReader{s.getChunks(dir)}, nil
}
func (s piecePerResourcePiece) NewReader() (PieceReader, error) {
defer s.mu.RUnlock()
if s.mustIsComplete() {
if s.hasMovePrefix() {
- return s.getChunksReader(s.completedDirPath() + "/")
+ return s.getChunksReader(s.completedDirPath())
}
return instancePieceReader{s.completedInstance()}, nil
}
- return s.getChunksReader(s.incompleteDirPath() + "/")
+ return s.getChunksReader(s.incompleteDirPath())
}
type instancePieceReader struct {
// TODO: Should the parent ReadConsecutiveChunks method take the expected number of bytes to avoid
// trying to read discontinuous or incomplete sequences of chunks?
-func (p Provider) ChunksReader(prefix string) (ret storage.PieceReader, err error) {
+func (p Provider) ChunksReader(dir string) (ret storage.PieceReader, err error) {
+ prefix := dir + "/"
p.Logger.Levelf(log.Critical, "ChunkReader(%q)", prefix)
//debug.PrintStack()
pr, err := p.Handle.NewReader()
} else {
pieceImpl = t.TorrentImpl.Piece(p)
}
- return Piece{pieceImpl, t, p}
+ return Piece{pieceImpl, p}
}
type Piece struct {
PieceImpl
- t *Torrent
mip metainfo.Piece
}