Spaces:
Running
Running
package model | |
import ( | |
"context" | |
"io" | |
"net/http" | |
"time" | |
"github.com/alist-org/alist/v3/pkg/http_range" | |
"github.com/alist-org/alist/v3/pkg/utils" | |
) | |
type ListArgs struct { | |
ReqPath string | |
S3ShowPlaceholder bool | |
} | |
type LinkArgs struct { | |
IP string | |
Header http.Header | |
Type string | |
HttpReq *http.Request | |
} | |
type Link struct { | |
URL string `json:"url"` // most common way | |
Header http.Header `json:"header"` // needed header (for url) | |
RangeReadCloser RangeReadCloserIF `json:"-"` // recommended way if can't use URL | |
MFile File `json:"-"` // best for local,smb... file system, which exposes MFile | |
Expiration *time.Duration // local cache expire Duration | |
IPCacheKey bool `json:"-"` // add ip to cache key | |
//for accelerating request, use multi-thread downloading | |
Concurrency int `json:"concurrency"` | |
PartSize int `json:"part_size"` | |
} | |
type OtherArgs struct { | |
Obj Obj | |
Method string | |
Data interface{} | |
} | |
type FsOtherArgs struct { | |
Path string `json:"path" form:"path"` | |
Method string `json:"method" form:"method"` | |
Data interface{} `json:"data" form:"data"` | |
} | |
type RangeReadCloserIF interface { | |
RangeRead(ctx context.Context, httpRange http_range.Range) (io.ReadCloser, error) | |
utils.ClosersIF | |
} | |
var _ RangeReadCloserIF = (*RangeReadCloser)(nil) | |
type RangeReadCloser struct { | |
RangeReader RangeReaderFunc | |
utils.Closers | |
} | |
func (r RangeReadCloser) RangeRead(ctx context.Context, httpRange http_range.Range) (io.ReadCloser, error) { | |
rc, err := r.RangeReader(ctx, httpRange) | |
r.Closers.Add(rc) | |
return rc, err | |
} | |
// type WriterFunc func(w io.Writer) error | |
type RangeReaderFunc func(ctx context.Context, httpRange http_range.Range) (io.ReadCloser, error) | |