Skip to content

Commit

Permalink
wip: switch to io/fs
Browse files Browse the repository at this point in the history
References: emersion#40
  • Loading branch information
emersion authored and aduffeck committed Nov 13, 2023
1 parent dddaf27 commit 648555f
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 9 deletions.
19 changes: 10 additions & 9 deletions client.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package webdav
import (
"fmt"
"io"
"io/fs"
"net/http"
"time"

Expand Down Expand Up @@ -76,13 +77,13 @@ var fileInfoPropFind = internal.NewPropNamePropFind(
internal.GetETagName,
)

func fileInfoFromResponse(resp *internal.Response) (*FileInfo, error) {
func fileInfoFromResponse(resp *internal.Response) (*fileInfo, error) {
path, err := resp.Path()
if err != nil {
return nil, err
}

fi := &FileInfo{Path: path}
fi := FileInfo{Path: path}

var resType internal.ResourceType
if err := resp.DecodeProp(&resType); err != nil {
Expand Down Expand Up @@ -118,10 +119,10 @@ func fileInfoFromResponse(resp *internal.Response) (*FileInfo, error) {
}
fi.ModTime = time.Time(getMod.LastModified)

return fi, nil
return &fileInfo{fi}, nil
}

func (c *Client) Stat(name string) (*FileInfo, error) {
func (c *Client) Stat(name string) (fs.FileInfo, error) {
resp, err := c.ic.PropFindFlat(name, fileInfoPropFind)
if err != nil {
return nil, err
Expand All @@ -143,24 +144,24 @@ func (c *Client) Open(name string) (io.ReadCloser, error) {
return resp.Body, nil
}

func (c *Client) Readdir(name string, recursive bool) ([]FileInfo, error) {
func (c *Client) ReadDir(name string) ([]fs.DirEntry, error) {
depth := internal.DepthOne
if recursive {
/*if recursive {
depth = internal.DepthInfinity
}
}*/

ms, err := c.ic.PropFind(name, depth, fileInfoPropFind)
if err != nil {
return nil, err
}

l := make([]FileInfo, 0, len(ms.Responses))
l := make([]fs.DirEntry, 0, len(ms.Responses))
for _, resp := range ms.Responses {
fi, err := fileInfoFromResponse(&resp)
if err != nil {
return l, err
}
l = append(l, *fi)
l = append(l, fi)
}

return l, nil
Expand Down
47 changes: 47 additions & 0 deletions webdav.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
package webdav

import (
"io/fs"
"path"
"time"
)

Expand All @@ -15,3 +17,48 @@ type FileInfo struct {
MIMEType string
ETag string
}

type fileInfo struct {
FileInfo
}

var (
_ fs.FileInfo = (*fileInfo)(nil)
_ fs.DirEntry = (*fileInfo)(nil)
)

func (fi *fileInfo) Name() string {
return path.Base(fi.Path)
}

func (fi *fileInfo) Size() int64 {
return fi.FileInfo.Size
}

func (fi *fileInfo) Mode() fs.FileMode {
var mode fs.FileMode
if fi.FileInfo.IsDir {
mode |= fs.ModeDir
}
return mode
}

func (fi *fileInfo) ModTime() time.Time {
return fi.FileInfo.ModTime
}

func (fi *fileInfo) IsDir() bool {
return fi.FileInfo.IsDir
}

func (fi *fileInfo) Sys() interface{} {
return nil
}

func (fi *fileInfo) Type() fs.FileMode {
return fi.Mode()
}

func (fi *fileInfo) Info() (fs.FileInfo, error) {
return fi, nil
}

0 comments on commit 648555f

Please sign in to comment.