Use the transfer context also for the progress bars

This commit is contained in:
Philipp Wolfer 2025-05-22 08:52:52 +02:00
parent 3b545a0fd6
commit adfe3f5771
No known key found for this signature in database
GPG key ID: 8FDF744D4919943B
2 changed files with 14 additions and 6 deletions

View file

@ -18,6 +18,7 @@ Scotty. If not, see <https://www.gnu.org/licenses/>.
package cli
import (
"context"
"sync"
"time"
@ -39,9 +40,10 @@ type progressBarUpdater struct {
importedItems int
}
func setupProgressBars(updateChan chan models.TransferProgress) progressBarUpdater {
func setupProgressBars(ctx context.Context, updateChan chan models.TransferProgress) progressBarUpdater {
wg := &sync.WaitGroup{}
p := mpb.New(
p := mpb.NewWithContext(
ctx,
mpb.WithWaitGroup(wg),
mpb.WithOutput(color.Output),
// mpb.WithWidth(64),

View file

@ -110,11 +110,13 @@ func (c *TransferCmd[E, I, R]) Transfer(exp backends.ExportProcessor[R], imp bac
}
printTimestamp("From timestamp: %v (%v)", timestamp)
// Use a context with cancel to abort the transfer
ctx, cancel := context.WithCancel(context.Background())
// Prepare progress bars
progressChan := make(chan models.TransferProgress)
progress := setupProgressBars(progressChan)
progress := setupProgressBars(ctx, progressChan)
ctx, cancel := context.WithCancel(context.Background())
wg := &sync.WaitGroup{}
// Export from source
@ -126,8 +128,12 @@ func (c *TransferCmd[E, I, R]) Transfer(exp backends.ExportProcessor[R], imp bac
go imp.Process(ctx, wg, exportChan, resultChan, progressChan)
result := <-resultChan
// Once import is done, the context can be cancelled
cancel()
// If the import has errored, the context can be cancelled immediately
if result.Error != nil {
cancel()
} else {
defer cancel()
}
// Wait for all goroutines to finish
wg.Wait()