@cryptotaxi247 / kubo / commits / fcd8ebcca

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.

Juan Batiz-Benet committed Feb 1, 2015 at 07:20 UTC fcd8ebcca5c685618712e18e2fd7ebed30a1392f
1 file changed +8 -4
unixfs/io/dagreader.go
+8 -4
@@ -54,7 +54,7 @@ type ReadSeekCloser interface {
54
55 // NewDagReader creates a new reader object that reads the data represented by the given
56 // node, using the passed in DAGService for data retreival
57 -func NewDagReader(ctx context.Context, n *mdag.Node, serv mdag.DAGService) (ReadSeekCloser, error) {
57 +func NewDagReader(ctx context.Context, n *mdag.Node, serv mdag.DAGService) (*DagReader, error) {
58 pb := new(ftpb.Data)
59 err := proto.Unmarshal(n.Data, pb)
60 if err != nil {
@@ -65,6 +65,8 @@ func NewDagReader(ctx context.Context, n *mdag.Node, serv mdag.DAGService) (Read
65 case ftpb.Data_Directory:
66 // Dont allow reading directories
67 return nil, ErrIsDir
68 + case ftpb.Data_Raw:
69 + fallthrough
70 case ftpb.Data_File:
71 fctx, cancel := context.WithCancel(ctx)
72 promises := serv.GetDAG(fctx, n)
@@ -77,9 +79,6 @@ func NewDagReader(ctx context.Context, n *mdag.Node, serv mdag.DAGService) (Read
79 cancel: cancel,
80 pbdata: pb,
81 }, nil
80 - case ftpb.Data_Raw:
81 - // Raw block will just be a single level, return a byte buffer
82 - return NewRSNCFromBytes(pb.GetData()), nil
82 default:
83 return nil, ft.ErrUnrecognizedType
84 }
@@ -123,6 +122,11 @@ func (dr *DagReader) precalcNextBuf() error {
122 }
123 }
124
125 +// Size return the total length of the data from the DAG structured file.
126 +func (dr *DagReader) Size() int64 {
127 + return int64(dr.pbdata.GetFilesize())
128 +}
129 +
130 // Read reads data from the DAG structured file
131 func (dr *DagReader) Read(b []byte) (int, error) {
132 // If no cached buffer, load one