Spaces:
Paused
Paused
| package crypt | |
| import ( | |
| stdpath "path" | |
| "path/filepath" | |
| "strings" | |
| "github.com/alist-org/alist/v3/internal/op" | |
| ) | |
| // will give the best guessing based on the path | |
| func guessPath(path string) (isFolder, secondTry bool) { | |
| if strings.HasSuffix(path, "/") { | |
| //confirmed a folder | |
| return true, false | |
| } | |
| lastSlash := strings.LastIndex(path, "/") | |
| if strings.Index(path[lastSlash:], ".") < 0 { | |
| //no dot, try folder then try file | |
| return true, true | |
| } | |
| return false, true | |
| } | |
| func (d *Crypt) getPathForRemote(path string, isFolder bool) (remoteFullPath string) { | |
| if isFolder && !strings.HasSuffix(path, "/") { | |
| path = path + "/" | |
| } | |
| dir, fileName := filepath.Split(path) | |
| remoteDir := d.cipher.EncryptDirName(dir) | |
| remoteFileName := "" | |
| if len(strings.TrimSpace(fileName)) > 0 { | |
| remoteFileName = d.cipher.EncryptFileName(fileName) | |
| } | |
| return stdpath.Join(d.RemotePath, remoteDir, remoteFileName) | |
| } | |
| // actual path is used for internal only. any link for user should come from remoteFullPath | |
| func (d *Crypt) getActualPathForRemote(path string, isFolder bool) (string, error) { | |
| _, remoteActualPath, err := op.GetStorageAndActualPath(d.getPathForRemote(path, isFolder)) | |
| return remoteActualPath, err | |
| } | |