Compare commits
2 commits
08a36d8165
...
d11fa31023
Author | SHA1 | Date | |
---|---|---|---|
d11fa31023 | |||
d973e67ea3 |
3 changed files with 23 additions and 8 deletions
|
@ -199,7 +199,7 @@ type Format struct {
|
||||||
ManifestURL *string `json:"manifest_url,omitempty"`
|
ManifestURL *string `json:"manifest_url,omitempty"`
|
||||||
Language *Language `json:"language"`
|
Language *Language `json:"language"`
|
||||||
Preference interface{} `json:"preference"`
|
Preference interface{} `json:"preference"`
|
||||||
Quality *int64 `json:"quality,omitempty"`
|
Quality *float64 `json:"quality,omitempty"`
|
||||||
HasDRM *bool `json:"has_drm,omitempty"`
|
HasDRM *bool `json:"has_drm,omitempty"`
|
||||||
SourcePreference *int64 `json:"source_preference,omitempty"`
|
SourcePreference *int64 `json:"source_preference,omitempty"`
|
||||||
ASR *int64 `json:"asr"`
|
ASR *int64 `json:"asr"`
|
||||||
|
|
|
@ -239,6 +239,10 @@ func (d *archiveFile) loadMore(ctx context.Context, to int64) error {
|
||||||
if err != nil && err != io.EOF {
|
if err != nil && err != io.EOF {
|
||||||
return fmt.Errorf("error copying from archive file reader: %w", err)
|
return fmt.Errorf("error copying from archive file reader: %w", err)
|
||||||
}
|
}
|
||||||
|
_, err = d.buffer.Seek(d.offset, io.SeekStart)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to seek to start of the file: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -252,6 +256,7 @@ func (d *archiveFile) Read(ctx context.Context, p []byte) (n int, err error) {
|
||||||
if err != nil && err != io.EOF {
|
if err != nil && err != io.EOF {
|
||||||
return n, fmt.Errorf("failed to read from buffer: %w", err)
|
return n, fmt.Errorf("failed to read from buffer: %w", err)
|
||||||
}
|
}
|
||||||
|
d.offset += int64(n)
|
||||||
return n, nil
|
return n, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -292,12 +297,12 @@ func ZipLoader(ctx context.Context, ctxreader ctxio.ReaderAt, size int64) (map[s
|
||||||
|
|
||||||
zr, err := zip.NewReader(reader, size)
|
zr, err := zip.NewReader(reader, size)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, fmt.Errorf("failed to create zip reader: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
rc, err := zr.File[i].Open()
|
rc, err := zr.File[i].Open()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, fmt.Errorf("failed to open file in zip archive: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return rc, nil
|
return rc, nil
|
||||||
|
|
|
@ -4,7 +4,6 @@ import (
|
||||||
"archive/zip"
|
"archive/zip"
|
||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
"io"
|
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"git.kmsign.ru/royalcat/tstor/src/vfs"
|
"git.kmsign.ru/royalcat/tstor/src/vfs"
|
||||||
|
@ -59,13 +58,24 @@ func TestZipFilesystem(t *testing.T) {
|
||||||
require.Equal("1.txt", e.Name())
|
require.Equal("1.txt", e.Name())
|
||||||
require.NotNil(e)
|
require.NotNil(e)
|
||||||
|
|
||||||
out := make([]byte, 11)
|
out := make([]byte, 5)
|
||||||
f, err := zfs.Open(ctx, "/path/to/test/file/1.txt")
|
f, err := zfs.Open(ctx, "/path/to/test/file/1.txt")
|
||||||
require.NoError(err)
|
require.NoError(err)
|
||||||
n, err := f.Read(ctx, out)
|
n, err := f.Read(ctx, out)
|
||||||
require.Equal(io.EOF, err)
|
require.NoError(err)
|
||||||
require.Equal(11, n)
|
require.Equal(5, n)
|
||||||
require.Equal(fileContent, out)
|
require.Equal([]byte("Hello"), out)
|
||||||
|
|
||||||
|
outSpace := make([]byte, 1)
|
||||||
|
n, err = f.Read(ctx, outSpace)
|
||||||
|
require.NoError(err)
|
||||||
|
require.Equal(1, n)
|
||||||
|
require.Equal([]byte(" "), outSpace)
|
||||||
|
|
||||||
|
n, err = f.Read(ctx, out)
|
||||||
|
require.NoError(err)
|
||||||
|
require.Equal(5, n)
|
||||||
|
require.Equal([]byte("World"), out)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue