github.com/ngocphuongnb/tetua@v0.0.7-alpha/packages/rclonefs/local.go (about) 1 package rclonefs 2 3 import ( 4 "context" 5 "os" 6 7 "github.com/ngocphuongnb/tetua/app/fs" 8 "github.com/rclone/rclone/backend/local" 9 "github.com/rclone/rclone/fs/config/configmap" 10 ) 11 12 type RcloneLocal struct { 13 *BaseRcloneDisk 14 Root string `json:"root"` 15 BaseUrl string `json:"base_url"` 16 BaseUrlFn func() string `json:"-"` 17 } 18 19 type RcloneLocalConfig struct { 20 Name string `json:"name"` 21 Root string `json:"root"` 22 BaseUrl string `json:"base_url"` 23 BaseUrlFn func() string `json:"-"` 24 } 25 26 func NewLocal(cfg *RcloneLocalConfig) fs.FSDisk { 27 rl := &RcloneLocal{ 28 BaseRcloneDisk: &BaseRcloneDisk{ 29 DiskName: cfg.Name, 30 }, 31 Root: cfg.Root, 32 BaseUrl: cfg.BaseUrl, 33 BaseUrlFn: cfg.BaseUrlFn, 34 } 35 36 if err := os.MkdirAll(cfg.Root, os.ModePerm); err != nil { 37 panic(err) 38 } 39 40 cfgMap := configmap.New() 41 cfgMap.Set("root", rl.Root) 42 fsDriver, err := local.NewFs(context.Background(), rl.DiskName, rl.Root, cfgMap) 43 44 if err != nil { 45 panic(err) 46 } 47 48 rl.Fs = fsDriver 49 50 return rl 51 } 52 53 func (r *RcloneLocal) Url(filepath string) string { 54 if r.BaseUrlFn != nil { 55 return r.BaseUrlFn() + "/" + filepath 56 } 57 return r.BaseUrl + "/" + filepath 58 } 59 60 func (r *RcloneLocal) Delete(ctx context.Context, filepath string) error { 61 obj, err := r.Fs.NewObject(ctx, filepath) 62 63 if err != nil { 64 return err 65 } 66 67 return obj.Remove(ctx) 68 }