MCPcopy
hub / github.com/OpenListTeam/OpenList / Link

Method Link

drivers/mega/driver.go:88–123  ·  view source on GitHub ↗
(ctx context.Context, file model.Obj, args model.LinkArgs)

Source from the content-addressed store, hash-verified

86}
87
88func (d *Mega) Link(ctx context.Context, file model.Obj, args model.LinkArgs) (*model.Link, error) {
89 if node, ok := file.(*MegaNode); ok {
90
91 //down, err := d.c.NewDownload(n.Node)
92 //if err != nil {
93 // return nil, fmt.Errorf("open download file failed: %w", err)
94 //}
95
96 size := file.GetSize()
97 resultRangeReader := func(ctx context.Context, httpRange http_range.Range) (io.ReadCloser, error) {
98 length := httpRange.Length
99 if httpRange.Length < 0 || httpRange.Start+httpRange.Length >= size {
100 length = size - httpRange.Start
101 }
102 var down *mega.Download
103 err := utils.Retry(3, time.Second, func() (err error) {
104 down, err = d.c.NewDownload(node.n)
105 return err
106 })
107 if err != nil {
108 return nil, fmt.Errorf("open download file failed: %w", err)
109 }
110 oo := &openObject{
111 ctx: ctx,
112 d: down,
113 skip: httpRange.Start,
114 }
115
116 return readers.NewLimitedReadCloser(oo, length), nil
117 }
118 return &model.Link{
119 RangeReader: stream.RateLimitRangeReaderFunc(resultRangeReader),
120 }, nil
121 }
122 return nil, fmt.Errorf("unable to convert dir to mega n")
123}
124
125func (d *Mega) MakeDir(ctx context.Context, parentDir model.Obj, dirName string) error {
126 if parentNode, ok := parentDir.(*MegaNode); ok {

Callers

nothing calls this directly

Calls 3

RetryFunction · 0.92
RateLimitRangeReaderFuncTypeAlias · 0.92
GetSizeMethod · 0.65

Tested by

no test coverage detected