1
0
mirror of https://github.com/Luzifer/cloudbox.git synced 2024-09-19 15:12:55 +00:00
cloudbox/providers/file.go

55 lines
1.0 KiB
Go

package providers
import (
"hash"
"io"
"time"
"github.com/pkg/errors"
)
var ErrFileNotFound = errors.New("File not found")
type File interface {
Info() FileInfo
Checksum(hash.Hash) (string, error)
Content() (io.ReadCloser, error)
}
type FileInfo struct {
RelativeName string
LastModified time.Time
Checksum string // Expected to be present on CapAutoChecksum
Size uint64
}
func (f *FileInfo) Equal(other *FileInfo) bool {
if f == nil && other == nil {
// Both are not present: No change
return true
}
if (f != nil && other == nil) || (f == nil && other != nil) {
// One is not present, the other is: Change
return false
}
if (f.Checksum != "" || other.Checksum != "") && f.Checksum != other.Checksum {
// Checksum is present in one, doesn't match: Change
return false
}
if f.Size != other.Size {
// No checksums present, size differs: Change
return false
}
if !f.LastModified.Equal(other.LastModified) {
// LastModified date differs: Change
return false
}
// No changes detected yet: No change
return true
}