Propagate FS errors on read/write and close files when finished writing
This commit is contained in:
parent
233b0f77f0
commit
dcec9f593b
@ -69,7 +69,7 @@ func (c *Client) ReadDir(path string) ([]types.FileInfo, error) {
|
|||||||
func (c *Client) ReadFile(localPath, remotePath string) (<-chan types.FSTransferProgress, error) {
|
func (c *Client) ReadFile(localPath, remotePath string) (<-chan types.FSTransferProgress, error) {
|
||||||
c.readProgressCh = make(chan types.FSTransferProgress, 5)
|
c.readProgressCh = make(chan types.FSTransferProgress, 5)
|
||||||
|
|
||||||
err := c.requestNoRes(types.Request{
|
_, err := c.request(types.Request{
|
||||||
Type: types.ReqTypeFS,
|
Type: types.ReqTypeFS,
|
||||||
Data: types.ReqDataFS{
|
Data: types.ReqDataFS{
|
||||||
Type: types.FSTypeRead,
|
Type: types.FSTypeRead,
|
||||||
@ -87,7 +87,7 @@ func (c *Client) ReadFile(localPath, remotePath string) (<-chan types.FSTransfer
|
|||||||
func (c *Client) WriteFile(localPath, remotePath string) (<-chan types.FSTransferProgress, error) {
|
func (c *Client) WriteFile(localPath, remotePath string) (<-chan types.FSTransferProgress, error) {
|
||||||
c.writeProgressCh = make(chan types.FSTransferProgress, 5)
|
c.writeProgressCh = make(chan types.FSTransferProgress, 5)
|
||||||
|
|
||||||
err := c.requestNoRes(types.Request{
|
_, err := c.request(types.Request{
|
||||||
Type: types.ReqTypeFS,
|
Type: types.ReqTypeFS,
|
||||||
Data: types.ReqDataFS{
|
Data: types.ReqDataFS{
|
||||||
Type: types.FSTypeWrite,
|
Type: types.FSTypeWrite,
|
||||||
|
2
go.mod
2
go.mod
@ -23,7 +23,7 @@ require (
|
|||||||
github.com/srwiley/oksvg v0.0.0-20211120171407-1837d6608d8c // indirect
|
github.com/srwiley/oksvg v0.0.0-20211120171407-1837d6608d8c // indirect
|
||||||
github.com/srwiley/rasterx v0.0.0-20210519020934-456a8d69b780 // indirect
|
github.com/srwiley/rasterx v0.0.0-20210519020934-456a8d69b780 // indirect
|
||||||
github.com/yuin/goldmark v1.4.4 // indirect
|
github.com/yuin/goldmark v1.4.4 // indirect
|
||||||
go.arsenm.dev/infinitime v0.0.0-20211212212540-382b1d9556cf
|
go.arsenm.dev/infinitime v0.0.0-20211213175634-9250d26fdc8c
|
||||||
golang.org/x/image v0.0.0-20211028202545-6944b10bf410 // indirect
|
golang.org/x/image v0.0.0-20211028202545-6944b10bf410 // indirect
|
||||||
golang.org/x/net v0.0.0-20211209124913-491a49abca63 // indirect
|
golang.org/x/net v0.0.0-20211209124913-491a49abca63 // indirect
|
||||||
golang.org/x/sys v0.0.0-20211210111614-af8b64212486 // indirect
|
golang.org/x/sys v0.0.0-20211210111614-af8b64212486 // indirect
|
||||||
|
4
go.sum
4
go.sum
@ -447,8 +447,8 @@ github.com/yuin/goldmark v1.3.8/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1
|
|||||||
github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
|
github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
|
||||||
github.com/yuin/goldmark v1.4.4 h1:zNWRjYUW32G9KirMXYHQHVNFkXvMI7LpgNW2AgYAoIs=
|
github.com/yuin/goldmark v1.4.4 h1:zNWRjYUW32G9KirMXYHQHVNFkXvMI7LpgNW2AgYAoIs=
|
||||||
github.com/yuin/goldmark v1.4.4/go.mod h1:rmuwmfZ0+bvzB24eSC//bk1R1Zp3hM0OXYv/G2LIilg=
|
github.com/yuin/goldmark v1.4.4/go.mod h1:rmuwmfZ0+bvzB24eSC//bk1R1Zp3hM0OXYv/G2LIilg=
|
||||||
go.arsenm.dev/infinitime v0.0.0-20211212212540-382b1d9556cf h1:TJhKfJLW9rMOCZnn7j8PJp8Ye4qxRX4HG1oaK0M7gQY=
|
go.arsenm.dev/infinitime v0.0.0-20211213175634-9250d26fdc8c h1:cnvVLBNWyBHRhNUI01xKL+gE/2UQ49fFDnvQ5YdMwvQ=
|
||||||
go.arsenm.dev/infinitime v0.0.0-20211212212540-382b1d9556cf/go.mod h1:xioFSrICUc4ghNJPOMSZjF7nj7QHAFLUJ2qkrSsgFfQ=
|
go.arsenm.dev/infinitime v0.0.0-20211213175634-9250d26fdc8c/go.mod h1:xioFSrICUc4ghNJPOMSZjF7nj7QHAFLUJ2qkrSsgFfQ=
|
||||||
go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs=
|
go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs=
|
||||||
go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs=
|
go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs=
|
||||||
go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g=
|
go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g=
|
||||||
|
@ -582,6 +582,8 @@ func handleConnection(conn net.Conn, dev *infinitime.Device, fs *blefs.FS) {
|
|||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
json.NewEncoder(conn).Encode(types.Response{Type: req.Type})
|
||||||
|
|
||||||
io.Copy(remoteFile, localFile)
|
io.Copy(remoteFile, localFile)
|
||||||
|
|
||||||
json.NewEncoder(conn).Encode(types.Response{
|
json.NewEncoder(conn).Encode(types.Response{
|
||||||
@ -603,12 +605,14 @@ func handleConnection(conn net.Conn, dev *infinitime.Device, fs *blefs.FS) {
|
|||||||
connErr(conn, req.Type, err, "Error creating local file")
|
connErr(conn, req.Type, err, "Error creating local file")
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
defer localFile.Close()
|
||||||
|
|
||||||
remoteFile, err := fs.Open(reqData.Files[1])
|
remoteFile, err := fs.Open(reqData.Files[1])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
connErr(conn, req.Type, err, "Error opening remote file")
|
connErr(conn, req.Type, err, "Error opening remote file")
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
defer remoteFile.Close()
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
// For every progress event
|
// For every progress event
|
||||||
@ -626,8 +630,9 @@ func handleConnection(conn net.Conn, dev *infinitime.Device, fs *blefs.FS) {
|
|||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
json.NewEncoder(conn).Encode(types.Response{Type: req.Type})
|
||||||
|
|
||||||
io.Copy(localFile, remoteFile)
|
io.Copy(localFile, remoteFile)
|
||||||
localFile.Sync()
|
|
||||||
|
|
||||||
json.NewEncoder(conn).Encode(types.Response{
|
json.NewEncoder(conn).Encode(types.Response{
|
||||||
Type: req.Type,
|
Type: req.Type,
|
||||||
|
Loading…
Reference in New Issue
Block a user