github.com/vmware/go-vcloud-director/v2@v2.24.0/govcd/uploadtask.go (about) 1 /* 2 * Copyright 2018 VMware, Inc. All rights reserved. Licensed under the Apache v2 License. 3 */ 4 5 package govcd 6 7 import ( 8 "fmt" 9 "time" 10 ) 11 12 type UploadTask struct { 13 uploadProgress *mutexedProgress 14 *Task 15 uploadError *error 16 } 17 18 // Creates wrapped Task which is dedicated for upload functionality and 19 // provides additional functionality to monitor upload progress. 20 func NewUploadTask(task *Task, uploadProgress *mutexedProgress, uploadError *error) *UploadTask { 21 return &UploadTask{ 22 uploadProgress, 23 task, 24 uploadError, 25 } 26 } 27 28 func (uploadTask *UploadTask) GetUploadProgress() string { 29 return fmt.Sprintf("%.2f", uploadTask.uploadProgress.LockedGet()) 30 } 31 32 func (uploadTask *UploadTask) ShowUploadProgress() error { 33 fmt.Printf("Waiting...") 34 35 for { 36 if *uploadTask.uploadError != nil { 37 return *uploadTask.uploadError 38 } 39 40 fmt.Printf("\rUpload progress %.2f%%", uploadTask.uploadProgress.LockedGet()) 41 if uploadTask.uploadProgress.LockedGet() == 100.00 { 42 fmt.Println() 43 break 44 } 45 // Upload may be cancelled by user on GUI manually, detect task status 46 if err := uploadTask.Refresh(); err != nil { 47 return err 48 } 49 if uploadTask.Task.Task.Status != "queued" && uploadTask.Task.Task.Status != "preRunning" && uploadTask.Task.Task.Status != "running" { 50 fmt.Println() 51 break 52 } 53 time.Sleep(1 * time.Second) 54 } 55 return nil 56 } 57 58 func (uploadTask *UploadTask) GetUploadError() error { 59 return *uploadTask.uploadError 60 }