aboutsummaryrefslogtreecommitdiffstats
path: root/drive/sync_download.go
diff options
context:
space:
mode:
authorPetter Rasmussen2016-02-20 23:30:30 +0100
committerPetter Rasmussen2016-02-20 23:39:12 +0100
commit28c4eb923fd01d892a17844328d0090830bcd229 (patch)
treeead9f5722894f36c3b641df89a2226ce9094b4dd /drive/sync_download.go
parenta9e9da783481fcb8022eb52fb944cb9ee13997de (diff)
downloadgdrive-28c4eb923fd01d892a17844328d0090830bcd229.tar.bz2
Wrap downloads in TimeoutReader
Diffstat (limited to 'drive/sync_download.go')
-rw-r--r--drive/sync_download.go12
1 files changed, 9 insertions, 3 deletions
diff --git a/drive/sync_download.go b/drive/sync_download.go
index fb7b3ae..5016cc1 100644
--- a/drive/sync_download.go
+++ b/drive/sync_download.go
@@ -187,7 +187,10 @@ func (self *Drive) downloadRemoteFile(id, fpath string, args DownloadSyncArgs, t
return nil
}
- res, err := self.service.Files.Get(id).Download()
+ // Get timeout reader wrapper and context
+ timeoutReaderWrapper, ctx := getTimeoutReaderWrapperContext()
+
+ res, err := self.service.Files.Get(id).Context(ctx).Download()
if err != nil {
if isBackendError(err) && try < MaxBackendErrorRetries {
exponentialBackoffSleep(try)
@@ -202,7 +205,10 @@ func (self *Drive) downloadRemoteFile(id, fpath string, args DownloadSyncArgs, t
defer res.Body.Close()
// Wrap response body in progress reader
- srcReader := getProgressReader(res.Body, args.Progress, res.ContentLength)
+ progressReader := getProgressReader(res.Body, args.Progress, res.ContentLength)
+
+ // Wrap reader in timeout reader
+ reader := timeoutReaderWrapper(progressReader)
// Ensure any parent directories exists
if err = mkdir(fpath); err != nil {
@@ -219,7 +225,7 @@ func (self *Drive) downloadRemoteFile(id, fpath string, args DownloadSyncArgs, t
}
// Save file to disk
- _, err = io.Copy(outFile, srcReader)
+ _, err = io.Copy(outFile, reader)
if err != nil {
outFile.Close()
if try < MaxBackendErrorRetries {