driver.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. package driver
  2. import (
  3. "context"
  4. "github.com/IceWhaleTech/CasaOS/model"
  5. )
  6. type Driver interface {
  7. Meta
  8. Reader
  9. User
  10. //Writer
  11. //Other
  12. }
  13. type Meta interface {
  14. Config() Config
  15. // GetStorage just get raw storage, no need to implement, because model.Storage have implemented
  16. GetStorage() *model.StorageA
  17. SetStorage(model.StorageA)
  18. // GetAddition Additional is used for unmarshal of JSON, so need return pointer
  19. GetAddition() Additional
  20. // Init If already initialized, drop first
  21. Init(ctx context.Context) error
  22. Drop(ctx context.Context) error
  23. }
  24. type Other interface {
  25. Other(ctx context.Context, args model.OtherArgs) (interface{}, error)
  26. }
  27. type Reader interface {
  28. // List files in the path
  29. // if identify files by path, need to set ID with path,like path.Join(dir.GetID(), obj.GetName())
  30. // if identify files by id, need to set ID with corresponding id
  31. // List(ctx context.Context, dir model.Obj, args model.ListArgs) ([]model.Obj, error)
  32. // Link get url/filepath/reader of file
  33. // Link(ctx context.Context, file model.Obj, args model.LinkArgs) (*model.Link, error)
  34. }
  35. type User interface {
  36. // GetRoot get root directory of user
  37. GetUserInfo(ctx context.Context) (string, error)
  38. GetInfo(ctx context.Context) (string, string, string, error)
  39. }
  40. type Getter interface {
  41. GetRoot(ctx context.Context) (model.Obj, error)
  42. }
  43. //type Writer interface {
  44. // Mkdir
  45. // Move
  46. // Rename
  47. // Copy
  48. // Remove
  49. // Put
  50. //}
  51. type Mkdir interface {
  52. MakeDir(ctx context.Context, parentDir model.Obj, dirName string) error
  53. }
  54. type Move interface {
  55. Move(ctx context.Context, srcObj, dstDir model.Obj) error
  56. }
  57. type Rename interface {
  58. Rename(ctx context.Context, srcObj model.Obj, newName string) error
  59. }
  60. type Copy interface {
  61. Copy(ctx context.Context, srcObj, dstDir model.Obj) error
  62. }
  63. type Remove interface {
  64. Remove(ctx context.Context, obj model.Obj) error
  65. }
  66. type Put interface {
  67. Put(ctx context.Context, dstDir model.Obj, stream model.FileStreamer, up UpdateProgress) error
  68. }
  69. //type WriteResult interface {
  70. // MkdirResult
  71. // MoveResult
  72. // RenameResult
  73. // CopyResult
  74. // PutResult
  75. // Remove
  76. //}
  77. type MkdirResult interface {
  78. MakeDir(ctx context.Context, parentDir model.Obj, dirName string) (model.Obj, error)
  79. }
  80. type MoveResult interface {
  81. Move(ctx context.Context, srcObj, dstDir model.Obj) (model.Obj, error)
  82. }
  83. type RenameResult interface {
  84. Rename(ctx context.Context, srcObj model.Obj, newName string) (model.Obj, error)
  85. }
  86. type CopyResult interface {
  87. Copy(ctx context.Context, srcObj, dstDir model.Obj) (model.Obj, error)
  88. }
  89. type PutResult interface {
  90. Put(ctx context.Context, dstDir model.Obj, stream model.FileStreamer, up UpdateProgress) (model.Obj, error)
  91. }
  92. type UpdateProgress func(percentage int)
  93. type Progress struct {
  94. Total int64
  95. Done int64
  96. up UpdateProgress
  97. }
  98. func (p *Progress) Write(b []byte) (n int, err error) {
  99. n = len(b)
  100. p.Done += int64(n)
  101. p.up(int(float64(p.Done) / float64(p.Total) * 100))
  102. return
  103. }
  104. func NewProgress(total int64, up UpdateProgress) *Progress {
  105. return &Progress{
  106. Total: total,
  107. up: up,
  108. }
  109. }