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:
@ -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
|
||||
|
||||
Reference in New Issue
Block a user