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  }