1
0
mirror of https://github.com/ipfs/kubo.git synced 2025-10-25 02:16:56 +08:00

NewDagReader: return DagReader for more functions

Since the DagReader has lots of useful information (like sizes etc)
it's good to be able to use it.
This commit is contained in:
Juan Batiz-Benet
2015-02-01 07:20:09 -08:00
parent 4539b977c4
commit fcd8ebcca5

View File

@ -54,7 +54,7 @@ type ReadSeekCloser interface {
// NewDagReader creates a new reader object that reads the data represented by the given
// node, using the passed in DAGService for data retreival
func NewDagReader(ctx context.Context, n *mdag.Node, serv mdag.DAGService) (ReadSeekCloser, error) {
func NewDagReader(ctx context.Context, n *mdag.Node, serv mdag.DAGService) (*DagReader, error) {
pb := new(ftpb.Data)
err := proto.Unmarshal(n.Data, pb)
if err != nil {
@ -65,6 +65,8 @@ func NewDagReader(ctx context.Context, n *mdag.Node, serv mdag.DAGService) (Read
case ftpb.Data_Directory:
// Dont allow reading directories
return nil, ErrIsDir
case ftpb.Data_Raw:
fallthrough
case ftpb.Data_File:
fctx, cancel := context.WithCancel(ctx)
promises := serv.GetDAG(fctx, n)
@ -77,9 +79,6 @@ func NewDagReader(ctx context.Context, n *mdag.Node, serv mdag.DAGService) (Read
cancel: cancel,
pbdata: pb,
}, nil
case ftpb.Data_Raw:
// Raw block will just be a single level, return a byte buffer
return NewRSNCFromBytes(pb.GetData()), nil
default:
return nil, ft.ErrUnrecognizedType
}
@ -123,6 +122,11 @@ func (dr *DagReader) precalcNextBuf() error {
}
}
// Size return the total length of the data from the DAG structured file.
func (dr *DagReader) Size() int64 {
return int64(dr.pbdata.GetFilesize())
}
// Read reads data from the DAG structured file
func (dr *DagReader) Read(b []byte) (int, error) {
// If no cached buffer, load one