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