From 81a2ab599ffac7ac992fd433c861d69188a34a4f Mon Sep 17 00:00:00 2001 From: Nick Craig-Wood Date: Wed, 2 Aug 2017 16:44:36 +0100 Subject: [PATCH] fs: add optional ID to fs.Directory and set it in the remotes which care --- amazonclouddrive/amazonclouddrive.go | 2 +- box/box.go | 2 +- drive/drive.go | 2 +- fs/dir.go | 12 ++++++++++++ fs/fs.go | 4 ++++ onedrive/onedrive.go | 2 +- 6 files changed, 20 insertions(+), 4 deletions(-) diff --git a/amazonclouddrive/amazonclouddrive.go b/amazonclouddrive/amazonclouddrive.go index e42d13eb9..ca7f325a8 100644 --- a/amazonclouddrive/amazonclouddrive.go +++ b/amazonclouddrive/amazonclouddrive.go @@ -427,7 +427,7 @@ func (f *Fs) List(dir string) (entries fs.DirEntries, err error) { // cache the directory ID for later lookups f.dirCache.Put(remote, *node.Id) when, _ := time.Parse(timeFormat, *node.ModifiedDate) // FIXME - d := fs.NewDir(remote, when) + d := fs.NewDir(remote, when).SetID(*node.Id) entries = append(entries, d) case fileKind: o, err := f.newObjectWithInfo(remote, node) diff --git a/box/box.go b/box/box.go index 6af16ce43..0fb076468 100644 --- a/box/box.go +++ b/box/box.go @@ -454,7 +454,7 @@ func (f *Fs) List(dir string) (entries fs.DirEntries, err error) { if info.Type == api.ItemTypeFolder { // cache the directory ID for later lookups f.dirCache.Put(remote, info.ID) - d := fs.NewDir(remote, info.ModTime()) + d := fs.NewDir(remote, info.ModTime()).SetID(info.ID) // FIXME more info from dir? entries = append(entries, d) } else if info.Type == api.ItemTypeFile { diff --git a/drive/drive.go b/drive/drive.go index 9605c4ae8..ff277e7ad 100644 --- a/drive/drive.go +++ b/drive/drive.go @@ -591,7 +591,7 @@ func (f *Fs) List(dir string) (entries fs.DirEntries, err error) { // cache the directory ID for later lookups f.dirCache.Put(remote, item.Id) when, _ := time.Parse(timeFormatIn, item.ModifiedDate) - d := fs.NewDir(remote, when) + d := fs.NewDir(remote, when).SetID(item.Id) entries = append(entries, d) case item.Md5Checksum != "" || item.FileSize > 0: // If item has MD5 sum or a length it is a file stored on drive diff --git a/fs/dir.go b/fs/dir.go index d95a0f5e8..891dc8d63 100644 --- a/fs/dir.go +++ b/fs/dir.go @@ -8,6 +8,7 @@ type Dir struct { modTime time.Time // modification or creation time - IsZero for unknown size int64 // size of directory and contents or -1 if unknown items int64 // number of objects or -1 for unknown + id string // optional ID } // NewDir creates an unspecialized Directory object @@ -46,6 +47,17 @@ func (d *Dir) SetRemote(remote string) *Dir { return d } +// ID gets the optional ID +func (d *Dir) ID() string { + return d.id +} + +// SetID sets the optional ID +func (d *Dir) SetID(id string) *Dir { + d.id = id + return d +} + // ModTime returns the modification date of the file // It should return a best guess if one isn't available func (d *Dir) ModTime() time.Time { diff --git a/fs/fs.go b/fs/fs.go index c3500edc0..38e3ae010 100644 --- a/fs/fs.go +++ b/fs/fs.go @@ -219,6 +219,10 @@ type Directory interface { // Items returns the count of items in this directory or this // directory and subdirectories if known, -1 for unknown Items() int64 + + // ID returns the internal ID of this directory if known, or + // "" otherwise + ID() string } // MimeTyper is an optional interface for Object diff --git a/onedrive/onedrive.go b/onedrive/onedrive.go index ab53b1b6c..3616edcea 100644 --- a/onedrive/onedrive.go +++ b/onedrive/onedrive.go @@ -423,7 +423,7 @@ func (f *Fs) List(dir string) (entries fs.DirEntries, err error) { if info.Folder != nil { // cache the directory ID for later lookups f.dirCache.Put(remote, info.ID) - d := fs.NewDir(remote, time.Time(info.LastModifiedDateTime)) + d := fs.NewDir(remote, time.Time(info.LastModifiedDateTime)).SetID(info.ID) if info.Folder != nil { d.SetItems(info.Folder.ChildCount) }