mirror of
https://github.com/Luzifer/cloudbox.git
synced 2024-12-23 03:01:18 +00:00
54 lines
1 KiB
Go
54 lines
1 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
|
|
}
|