Added MEGA module
This commit is contained in:
parent
41783d965b
commit
87929750ae
|
@ -0,0 +1,163 @@
|
||||||
|
package mega
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os/exec"
|
||||||
|
"path/filepath"
|
||||||
|
"sort"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
CP = "/usr/bin/mega-cp"
|
||||||
|
FIND = "/usr/bin/mega-find"
|
||||||
|
GET = "/usr/bin/mega-get"
|
||||||
|
LS = "/usr/bin/mega-ls"
|
||||||
|
MKDIR = "/usr/bin/mega-mkdir"
|
||||||
|
MV = "/usr/bin/mega-mv"
|
||||||
|
RM = "/usr/bin/mega-rm"
|
||||||
|
)
|
||||||
|
|
||||||
|
type FileInfo struct {
|
||||||
|
Dir string
|
||||||
|
Name string
|
||||||
|
FQN string
|
||||||
|
}
|
||||||
|
|
||||||
|
// List returns an array of mega.FileInfo restricted by specified filetype. Pass an empty
|
||||||
|
// string array for all files. The array will be sorted by name based on the sortorder parameter.
|
||||||
|
// Valid values are:
|
||||||
|
//
|
||||||
|
// "asc|desc"
|
||||||
|
//
|
||||||
|
// Passing an empty string will default to "asc"
|
||||||
|
func List(dir string, filetypes []string, sortorder string) (files []FileInfo, err error) {
|
||||||
|
|
||||||
|
out, err := exec.Command(LS, dir).Output()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
lines := strings.Split(string(out), "\n")
|
||||||
|
for _, line := range lines {
|
||||||
|
|
||||||
|
if len(filetypes) == 0 {
|
||||||
|
files = append(files, FileInfo{dir, line, filepath.Join(dir, line)})
|
||||||
|
} else {
|
||||||
|
for _, filetype := range filetypes {
|
||||||
|
if strings.HasSuffix(line, filetype) {
|
||||||
|
files = append(files, FileInfo{dir, line, filepath.Join(dir, line)})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(sortorder) == 0 {
|
||||||
|
sortorder = "asc"
|
||||||
|
}
|
||||||
|
|
||||||
|
sort.Slice(files, func(i, j int) bool {
|
||||||
|
iVal := strings.ToLower(files[i].Name)
|
||||||
|
jVal := strings.ToLower(files[j].Name)
|
||||||
|
if sortorder == "asc" {
|
||||||
|
return iVal < jVal
|
||||||
|
}
|
||||||
|
return iVal > jVal
|
||||||
|
})
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Backwards compatability
|
||||||
|
func Files(dir string, filetypes []string, sortorder string) (files []FileInfo, err error) {
|
||||||
|
return List(dir, filetypes, sortorder)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Find returns an array of mega.FileInfo restricted by specified filetype. Pass an empty
|
||||||
|
// string array for all files. The array will be sorted by name based on the sortorder parameter.
|
||||||
|
// Valid values are:
|
||||||
|
//
|
||||||
|
// "asc|desc"
|
||||||
|
//
|
||||||
|
// Passing an empty string will default to "asc"
|
||||||
|
func Find(dir, pattern, sortorder string) (files []FileInfo, err error) {
|
||||||
|
|
||||||
|
pattern = "--pattern=" + pattern
|
||||||
|
|
||||||
|
fmt.Println("cmd:", FIND, dir, pattern)
|
||||||
|
out, err := exec.Command(FIND, dir, pattern).Output()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
lines := strings.Split(string(out), "\n")
|
||||||
|
for _, line := range lines {
|
||||||
|
files = append(files, FileInfo{filepath.Dir(line), filepath.Base(line), filepath.Join(dir, line)})
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(sortorder) == 0 {
|
||||||
|
sortorder = "asc"
|
||||||
|
}
|
||||||
|
|
||||||
|
sort.Slice(files, func(i, j int) bool {
|
||||||
|
iVal := strings.ToLower(files[i].Name)
|
||||||
|
jVal := strings.ToLower(files[j].Name)
|
||||||
|
if sortorder == "asc" {
|
||||||
|
return iVal < jVal
|
||||||
|
}
|
||||||
|
return iVal > jVal
|
||||||
|
})
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove executes mega-rm src
|
||||||
|
func Remove(src string) (err error) {
|
||||||
|
_, err = exec.Command(RM, src).Output()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Copy executes mega-cp src dest
|
||||||
|
func Copy(src, dest string) (err error) {
|
||||||
|
_, err = exec.Command(CP, src, dest).Output()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Move executes mega-mv src dest
|
||||||
|
func Move(src, dest string) (err error) {
|
||||||
|
_, err = exec.Command(MV, src, dest).Output()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get executes mega-get src dest
|
||||||
|
func Get(src, dest string) (err error) {
|
||||||
|
_, err = exec.Command(GET, src, dest).Output()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mkdir executes mega-mkdir src dest
|
||||||
|
func Mkdir(path string) (err error) {
|
||||||
|
_, err = exec.Command(MKDIR, path).Output()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
Loading…
Reference in New Issue