(ctx context.Context, path string)
| 185 | } |
| 186 | |
| 187 | func (d *Crypt) Get(ctx context.Context, path string) (model.Obj, error) { |
| 188 | if utils.PathEqual(path, "/") { |
| 189 | return &model.Object{ |
| 190 | Name: "Root", |
| 191 | IsFolder: true, |
| 192 | Path: "/", |
| 193 | }, nil |
| 194 | } |
| 195 | remoteFullPath := "" |
| 196 | var remoteObj model.Obj |
| 197 | var err, err2 error |
| 198 | firstTryIsFolder, secondTry := guessPath(path) |
| 199 | remoteFullPath = d.getPathForRemote(path, firstTryIsFolder) |
| 200 | remoteObj, err = fs.Get(ctx, remoteFullPath, &fs.GetArgs{NoLog: true}) |
| 201 | if err != nil { |
| 202 | if errs.IsObjectNotFound(err) && secondTry { |
| 203 | //try the opposite |
| 204 | remoteFullPath = d.getPathForRemote(path, !firstTryIsFolder) |
| 205 | remoteObj, err2 = fs.Get(ctx, remoteFullPath, &fs.GetArgs{NoLog: true}) |
| 206 | if err2 != nil { |
| 207 | return nil, err2 |
| 208 | } |
| 209 | } else { |
| 210 | return nil, err |
| 211 | } |
| 212 | } |
| 213 | var size int64 = 0 |
| 214 | name := "" |
| 215 | if !remoteObj.IsDir() { |
| 216 | size, err = d.cipher.DecryptedSize(remoteObj.GetSize()) |
| 217 | if err != nil { |
| 218 | log.Warnf("DecryptedSize failed for %s ,will use original size, err:%s", path, err) |
| 219 | size = remoteObj.GetSize() |
| 220 | } |
| 221 | name, err = d.cipher.DecryptFileName(remoteObj.GetName()) |
| 222 | if err != nil { |
| 223 | log.Warnf("DecryptFileName failed for %s ,will use original name, err:%s", path, err) |
| 224 | name = remoteObj.GetName() |
| 225 | } |
| 226 | } else { |
| 227 | name, err = d.cipher.DecryptDirName(remoteObj.GetName()) |
| 228 | if err != nil { |
| 229 | log.Warnf("DecryptDirName failed for %s ,will use original name, err:%s", path, err) |
| 230 | name = remoteObj.GetName() |
| 231 | } |
| 232 | } |
| 233 | obj := &model.Object{ |
| 234 | Path: path, |
| 235 | Name: name, |
| 236 | Size: size, |
| 237 | Modified: remoteObj.ModTime(), |
| 238 | IsFolder: remoteObj.IsDir(), |
| 239 | } |
| 240 | return obj, nil |
| 241 | //return nil, errs.ObjectNotFound |
| 242 | } |
| 243 | |
| 244 | func (d *Crypt) Link(ctx context.Context, file model.Obj, args model.LinkArgs) (*model.Link, error) { |
nothing calls this directly
no test coverage detected