You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

64 lines
1.7 KiB

  1. package filer
  2. import (
  3. "path/filepath"
  4. )
  5. type FilerEmbedded struct {
  6. directories *DirectoryManagerInMap
  7. files *FileListInLevelDb
  8. }
  9. func NewFilerEmbedded(dir string) (filer *FilerEmbedded, err error) {
  10. dm, de := NewDirectoryManagerInMap(filepath.Join(dir, "dir.log"))
  11. if de != nil {
  12. return nil, de
  13. }
  14. fl, fe := NewFileListInLevelDb(dir)
  15. if fe != nil {
  16. return nil, fe
  17. }
  18. filer = &FilerEmbedded{
  19. directories: dm,
  20. files: fl,
  21. }
  22. return
  23. }
  24. func (filer *FilerEmbedded) CreateFile(filePath string, fid string) (err error) {
  25. dir, file := filepath.Split(filePath)
  26. dirId, e := filer.directories.MakeDirectory(dir)
  27. if e != nil {
  28. return e
  29. }
  30. return filer.files.CreateFile(dirId, file, fid)
  31. }
  32. func (filer *FilerEmbedded) FindFile(filePath string) (fid string, err error) {
  33. dir, file := filepath.Split(filePath)
  34. dirId, e := filer.directories.FindDirectory(dir)
  35. if e != nil {
  36. return "", e
  37. }
  38. return filer.files.FindFile(dirId, file)
  39. }
  40. func (filer *FilerEmbedded) ListDirectories(dirPath string) (dirs []DirectoryEntry, err error) {
  41. return filer.directories.ListDirectories(dirPath)
  42. }
  43. func (filer *FilerEmbedded) ListFiles(dirPath string, lastFileName string, limit int) (files []FileEntry, err error) {
  44. dirId, e := filer.directories.FindDirectory(dirPath)
  45. if e != nil {
  46. return nil, e
  47. }
  48. return filer.files.ListFiles(dirId, lastFileName, limit), nil
  49. }
  50. func (filer *FilerEmbedded) DeleteDirectory(dirPath string) (err error) {
  51. return filer.directories.DeleteDirectory(dirPath)
  52. }
  53. func (filer *FilerEmbedded) DeleteFile(filePath string) (fid string, err error) {
  54. dir, file := filepath.Split(filePath)
  55. dirId, e := filer.directories.FindDirectory(dir)
  56. if e != nil {
  57. return "", e
  58. }
  59. return filer.files.DeleteFile(dirId, file)
  60. }