forked from Elara6331/itd
Implement file transfer progress
This commit is contained in:
@@ -16,13 +16,15 @@ const DefaultAddr = "/tmp/itd/socket"
|
||||
|
||||
// Client is the socket API client
|
||||
type Client struct {
|
||||
conn net.Conn
|
||||
respCh chan types.Response
|
||||
heartRateCh chan types.Response
|
||||
battLevelCh chan types.Response
|
||||
stepCountCh chan types.Response
|
||||
motionCh chan types.Response
|
||||
dfuProgressCh chan types.Response
|
||||
conn net.Conn
|
||||
respCh chan types.Response
|
||||
heartRateCh chan types.Response
|
||||
battLevelCh chan types.Response
|
||||
stepCountCh chan types.Response
|
||||
motionCh chan types.Response
|
||||
dfuProgressCh chan types.Response
|
||||
readProgressCh chan types.FSTransferProgress
|
||||
writeProgressCh chan types.FSTransferProgress
|
||||
}
|
||||
|
||||
// New creates a new client and sets it up
|
||||
@@ -100,6 +102,24 @@ func (c *Client) handleResp(res types.Response) error {
|
||||
c.motionCh <- res
|
||||
case types.ReqTypeFwUpgrade:
|
||||
c.dfuProgressCh <- res
|
||||
case types.ReqTypeFS:
|
||||
if res.Value == nil {
|
||||
c.respCh <- res
|
||||
break
|
||||
}
|
||||
var progress types.FSTransferProgress
|
||||
if err := mapstructure.Decode(res.Value, &progress); err != nil {
|
||||
c.respCh <- res
|
||||
break
|
||||
}
|
||||
switch progress.Type {
|
||||
case types.FSTypeRead:
|
||||
c.readProgressCh <- progress
|
||||
case types.FSTypeWrite:
|
||||
c.writeProgressCh <- progress
|
||||
default:
|
||||
c.respCh <- res
|
||||
}
|
||||
default:
|
||||
c.respCh <- res
|
||||
}
|
||||
|
23
api/fs.go
23
api/fs.go
@@ -66,22 +66,28 @@ func (c *Client) ReadDir(path string) ([]types.FileInfo, error) {
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func (c *Client) ReadFile(localPath, remotePath string) error {
|
||||
_, err := c.request(types.Request{
|
||||
func (c *Client) ReadFile(localPath, remotePath string) (<-chan types.FSTransferProgress, error) {
|
||||
c.readProgressCh = make(chan types.FSTransferProgress, 5)
|
||||
|
||||
err := c.requestNoRes(types.Request{
|
||||
Type: types.ReqTypeFS,
|
||||
Data: types.ReqDataFS{
|
||||
Type: types.FSTypeRead,
|
||||
Files: []string{localPath, remotePath},
|
||||
},
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
return nil, err
|
||||
}
|
||||
return nil
|
||||
|
||||
return c.readProgressCh, nil
|
||||
}
|
||||
|
||||
func (c *Client) WriteFile(localPath, remotePath string) error {
|
||||
_, err := c.request(types.Request{
|
||||
func (c *Client) WriteFile(localPath, remotePath string) (<-chan types.FSTransferProgress, error) {
|
||||
c.writeProgressCh = make(chan types.FSTransferProgress, 5)
|
||||
|
||||
err := c.requestNoRes(types.Request{
|
||||
Type: types.ReqTypeFS,
|
||||
Data: types.ReqDataFS{
|
||||
Type: types.FSTypeWrite,
|
||||
@@ -89,7 +95,8 @@ func (c *Client) WriteFile(localPath, remotePath string) error {
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
return nil, err
|
||||
}
|
||||
return nil
|
||||
|
||||
return c.writeProgressCh, nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user