diff --git a/server/handlers.go b/server/handlers.go index 566e6a5..7b9f704 100644 --- a/server/handlers.go +++ b/server/handlers.go @@ -901,11 +901,10 @@ func (s *Server) checkMetadata(token, filename string, increaseDownload bool) (m metadata.Downloads++ } - if err := s.storage.Meta(token, filename, metadata); err != nil { + if err := s.storage.Patch(token, filename, nil, metadata); err != nil { return metadata, errors.New("could not save metadata for " + file) } } - return metadata, nil } diff --git a/server/storage/common.go b/server/storage/common.go index 5880ca6..d1e6d33 100644 --- a/server/storage/common.go +++ b/server/storage/common.go @@ -27,8 +27,8 @@ type Storage interface { Get(token string, filename string) (reader io.ReadCloser, metaData Metadata, err error) // Head returns the metadata Head(token string, filename string) (metadata Metadata, err error) - // Meta updates the file's metadata - Meta(token string, filename string, metadata Metadata) error + // Patch updates the file, reader can be left nil to not update the body of the file + Patch(token string, filename string, reader io.Reader, metadata Metadata) error // Put stores the content of reader including the metadata Put(token string, filename string, reader io.Reader, metadata Metadata) error // Delete deletes the file diff --git a/server/storage/gdrive.go b/server/storage/gdrive.go index 5790611..5808ad2 100644 --- a/server/storage/gdrive.go +++ b/server/storage/gdrive.go @@ -150,11 +150,13 @@ func (s *GDrive) Head(token string, filename string) (metadata Metadata, err err DeletionToken: fi.Properties["deletionToken"], Secret: fi.Properties["deletionSecret"], } - return } -func (s *GDrive) Meta(token string, filename string, metadata Metadata) error { +func (s *GDrive) Patch(token string, filename string, reader io.Reader, metadata Metadata) error { + if reader == nil { + return s.Put(token, filename, reader, metadata) + } //TODO: implement log.Printf("updating meta %s/%s with %v", token, filename, metadata) return nil diff --git a/server/storage/local.go b/server/storage/local.go index 03b84be..09bcc30 100644 --- a/server/storage/local.go +++ b/server/storage/local.go @@ -74,7 +74,10 @@ func (s *LocalStorage) Head(token string, filename string) (metadata Metadata, e return metadata, nil } -func (s *LocalStorage) Meta(token string, filename string, metadata Metadata) error { +func (s *LocalStorage) Patch(token string, filename string, reader io.Reader, metadata Metadata) error { + if reader == nil { + return s.Put(token, filename, reader, metadata) + } return s.putMetadata(token, filename, metadata) } diff --git a/server/storage/s3.go b/server/storage/s3.go index e54060b..f371adb 100644 --- a/server/storage/s3.go +++ b/server/storage/s3.go @@ -73,7 +73,11 @@ func (s *S3Storage) Head(token string, filename string) (metadata Metadata, err return metadata, nil } -func (s *S3Storage) Meta(token string, filename string, metadata Metadata) error { +func (s *S3Storage) Patch(token string, filename string, reader io.Reader, metadata Metadata) error { + + if reader != nil { + return s.Put(token, filename, reader, metadata) + } key := fmt.Sprintf("%s/%s", token, filename) input := &s3.CopyObjectInput{