diff --git a/carddav/backend.go b/carddav/backend.go index 516088a..345c7e9 100644 --- a/carddav/backend.go +++ b/carddav/backend.go @@ -4,6 +4,7 @@ package carddav import ( "errors" + "os" "github.com/emersion/go-vcard" ) @@ -15,6 +16,7 @@ var ( type AddressObject interface { ID() string Card() (vcard.Card, error) + Stat() (os.FileInfo, error) // can return nil, nil } type AddressBook interface { diff --git a/carddav/carddav.go b/carddav/carddav.go index 3cc4870..fdb1fe3 100644 --- a/carddav/carddav.go +++ b/carddav/carddav.go @@ -117,6 +117,11 @@ func (f *file) Readdir(count int) ([]os.FileInfo, error) { } func (f *file) Stat() (os.FileInfo, error) { + info, err := f.ao.Stat() + if info != nil || err != nil { + return info, err + } + return &fileInfo{ name: f.name, mode: os.ModePerm, @@ -158,10 +163,18 @@ func (d *dir) Readdir(count int) ([]os.FileInfo, error) { d.files = make([]os.FileInfo, len(aos)) for i, ao := range aos { - d.files[i] = &fileInfo{ + f := &file{ + fs: d.fs, name: ao.ID() + ".vcf", - mode: os.ModePerm, + ao: ao, } + + info, err := f.Stat() + if err != nil { + return nil, err + } + + d.files[i] = info } }