add Stat()
This commit is contained in:
parent
328e74fe93
commit
a3cc4ebe01
47
client.go
47
client.go
@ -125,6 +125,53 @@ func (c *Client) ReadDir(path string) ([]os.FileInfo, error) {
|
|||||||
return files, err
|
return files, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Client) Stat(path string) (os.FileInfo, error) {
|
||||||
|
var f *File = nil
|
||||||
|
parse := func(resp interface{}) error {
|
||||||
|
r := resp.(*response)
|
||||||
|
if p := getProps(r, "200"); p != nil && f == nil {
|
||||||
|
f = new(File)
|
||||||
|
f.name = p.Name
|
||||||
|
f.path = path
|
||||||
|
|
||||||
|
if p.Type.Local == "collection" {
|
||||||
|
if !strings.HasSuffix(f.path, "/") {
|
||||||
|
f.path += "/"
|
||||||
|
}
|
||||||
|
f.size = 0
|
||||||
|
f.modified = time.Unix(0, 0)
|
||||||
|
f.isdir = true
|
||||||
|
} else {
|
||||||
|
f.size = parseInt64(&p.Size)
|
||||||
|
f.modified = parseModified(&p.Modified)
|
||||||
|
f.isdir = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
r.Props = nil
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
err := c.propfind(path, true,
|
||||||
|
`<d:propfind xmlns:d='DAV:'>
|
||||||
|
<d:prop>
|
||||||
|
<d:displayname/>
|
||||||
|
<d:resourcetype/>
|
||||||
|
<d:getcontentlength/>
|
||||||
|
<d:getlastmodified/>
|
||||||
|
</d:prop>
|
||||||
|
</d:propfind>`,
|
||||||
|
&response{},
|
||||||
|
parse)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
if _, ok := err.(*os.PathError); !ok {
|
||||||
|
err = &os.PathError{"ReadDir", path, err}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return f, err
|
||||||
|
}
|
||||||
|
|
||||||
func (c *Client) Remove(path string) error {
|
func (c *Client) Remove(path string) error {
|
||||||
return c.RemoveAll(path)
|
return c.RemoveAll(path)
|
||||||
}
|
}
|
||||||
|
@ -26,7 +26,7 @@ func Fail(err interface{}) {
|
|||||||
fmt.Println(" CP | COPY <OLD_PATH> <NEW_PATH>")
|
fmt.Println(" CP | COPY <OLD_PATH> <NEW_PATH>")
|
||||||
fmt.Println(" GET | PULL | READ <PATH>")
|
fmt.Println(" GET | PULL | READ <PATH>")
|
||||||
fmt.Println(" PUT | PUSH | WRITE <PATH> <FILE>")
|
fmt.Println(" PUT | PUSH | WRITE <PATH> <FILE>")
|
||||||
|
fmt.Println(" STAT <PATH>")
|
||||||
}
|
}
|
||||||
os.Exit(-1)
|
os.Exit(-1)
|
||||||
}
|
}
|
||||||
@ -73,6 +73,13 @@ func main() {
|
|||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case "STAT":
|
||||||
|
if file, err := c.Stat(path); err == nil {
|
||||||
|
fmt.Println(file)
|
||||||
|
} else {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
|
||||||
case "GET", "PULL", "READ":
|
case "GET", "PULL", "READ":
|
||||||
if bytes, err := c.Read(path); err == nil {
|
if bytes, err := c.Read(path); err == nil {
|
||||||
if lidx := strings.LastIndex(path, "/"); lidx != -1 {
|
if lidx := strings.LastIndex(path, "/"); lidx != -1 {
|
||||||
|
Loading…
Reference in New Issue
Block a user