MCPcopy Create free account
hub / github.com/OpenListTeam/OpenList / CacheFullAndWriter

Method CacheFullAndWriter

internal/stream/stream.go:65–165  ·  view source on GitHub ↗

CacheFullAndWriter save all data into tmpFile or memory. It's not thread-safe!

(up *model.UpdateProgress, writer io.Writer)

Source from the content-addressed store, hash-verified

63// CacheFullAndWriter save all data into tmpFile or memory.
64// It's not thread-safe!
65func (f *FileStream) CacheFullAndWriter(up *model.UpdateProgress, writer io.Writer) (model.File, error) {
66 if cache := f.GetFile(); cache != nil {
67 _, err := cache.Seek(0, io.SeekStart)
68 if err != nil {
69 return nil, err
70 }
71 if writer == nil {
72 return cache, nil
73 }
74 reader := f.Reader
75 if up != nil {
76 cacheProgress := model.UpdateProgressWithRange(*up, 0, 50)
77 *up = model.UpdateProgressWithRange(*up, 50, 100)
78 reader = &ReaderUpdatingProgress{
79 Reader: &SimpleReaderWithSize{
80 Reader: reader,
81 Size: f.GetSize(),
82 },
83 UpdateProgress: cacheProgress,
84 }
85 }
86 _, err = utils.CopyWithBuffer(writer, reader)
87 if err == nil {
88 _, err = cache.Seek(0, io.SeekStart)
89 }
90 if err != nil {
91 return nil, err
92 }
93 return cache, nil
94 }
95
96 reader := f.Reader
97 if f.peek != nil {
98 f.peek.Seek(0, io.SeekStart)
99 if writer != nil {
100 _, err := utils.CopyWithBuffer(writer, f.peek)
101 if err != nil {
102 return nil, err
103 }
104 f.peek.Seek(0, io.SeekStart)
105 }
106 reader = f.oriReader
107 }
108 if writer != nil {
109 reader = io.TeeReader(reader, writer)
110 }
111
112 // 如果文件大小未知,直接缓存到磁盘
113 if f.GetSize() < 0 {
114 // 检查是否有数据
115 buf := []byte{0}
116 n, err := io.ReadFull(reader, buf)
117 br := bytes.NewReader(buf[:n])
118 if err == io.ErrUnexpectedEOF || err == io.EOF {
119 f.size = br.Size()
120 f.Reader = br
121 return br, nil
122 } else if err != nil {

Callers

nothing calls this directly

Calls 14

GetFileMethod · 0.95
GetSizeMethod · 0.95
ensureCacheMethod · 0.95
UpdateProgressWithRangeFunction · 0.92
CopyWithBufferFunction · 0.92
CreateTempFileFunction · 0.92
CloseFuncFuncType · 0.92
SizeMethod · 0.65
AddMethod · 0.65
CloseMethod · 0.65
RemoveAllMethod · 0.65
NameMethod · 0.65

Tested by

no test coverage detected