Skip to content

Commit

Permalink
handle all edge cases for lr
Browse files Browse the repository at this point in the history
  • Loading branch information
divyam234 committed Nov 3, 2023
1 parent 19d581d commit 9e7bdd6
Showing 1 changed file with 22 additions and 9 deletions.
31 changes: 22 additions & 9 deletions utils/reader/lr.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ type linearReader struct {
parts []types.Part
pos int
client *telegram.Client
next func() []byte
next func() ([]byte, error)
buffer []byte
bytesread int64
chunkSize int64
Expand Down Expand Up @@ -49,11 +49,20 @@ func (r *linearReader) Read(p []byte) (n int, err error) {
}

if r.i >= int64(len(r.buffer)) {
r.buffer = r.next()
r.buffer, err = r.next()
if err != nil {
return 0, err
}
if len(r.buffer) == 0 {
r.pos++
if r.pos < len(r.parts) {
if r.pos == len(r.parts) {
return 0, io.EOF
} else {
r.next = r.partStream()
r.buffer, err = r.next()
if err != nil {
return 0, err
}
}

}
Expand Down Expand Up @@ -91,7 +100,7 @@ func (r *linearReader) chunk(offset int64, limit int64) ([]byte, error) {
}
}

func (r *linearReader) partStream() func() []byte {
func (r *linearReader) partStream() func() ([]byte, error) {

start := r.parts[r.pos].Start
end := r.parts[r.pos].End
Expand All @@ -105,16 +114,20 @@ func (r *linearReader) partStream() func() []byte {

currentPart := 1

readData := func() []byte {
readData := func() ([]byte, error) {

if currentPart > partCount {
return make([]byte, 0)
return make([]byte, 0), nil
}

res, _ := r.chunk(offset, r.chunkSize)
res, err := r.chunk(offset, r.chunkSize)

if err != nil {
return nil, err
}

if len(res) == 0 {
return res
return res, nil
} else if partCount == 1 {
res = res[firstPartCut:lastPartCut]

Expand All @@ -130,7 +143,7 @@ func (r *linearReader) partStream() func() []byte {

offset += r.chunkSize

return res
return res, nil

}
return readData
Expand Down

0 comments on commit 9e7bdd6

Please sign in to comment.