(ctx context.Context, file model.Obj, args model.LinkArgs)
| 86 | } |
| 87 | |
| 88 | func (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 | |
| 125 | func (d *Mega) MakeDir(ctx context.Context, parentDir model.Obj, dirName string) error { |
| 126 | if parentNode, ok := parentDir.(*MegaNode); ok { |
nothing calls this directly
no test coverage detected