From 05d597a9f739c2f7b064e35032c3878a2560ed0f Mon Sep 17 00:00:00 2001
From: Alexander Baranov <scr4t@yandex.ru>
Date: Mon, 1 Jun 2015 23:11:45 +0300
Subject: [PATCH] Only wait for io.Copy; Remove obsolete from client

---
 client.go                | 24 ------------------------
 cmd/torrent-pick/main.go | 13 +++----------
 torrent.go               |  8 --------
 3 files changed, 3 insertions(+), 42 deletions(-)

diff --git a/client.go b/client.go
index e43c9f19..f4e6bbb0 100644
--- a/client.go
+++ b/client.go
@@ -2400,17 +2400,6 @@ func (cl *Client) allTorrentsCompleted() bool {
 	return true
 }
 
-func (cl *Client) allNeededTorrentsCompleted() bool {
-	for _, t := range cl.torrents {
-		if !t.haveInfo() {
-			return false
-		}
-		if ! t.neededPiecesDownloaded() {
-			return false
-		}
-	}
-	return true
-}
 
 // Returns true when all torrents are completely downloaded and false if the
 // client is stopped before that.
@@ -2426,19 +2415,6 @@ func (me *Client) WaitAll() bool {
 	return true
 }
 
-// Returns true when all requested chunks are completely downloaded and false if the
-// client is stopped before that.
-func (me *Client) WaitNeeded() bool {
-	me.mu.Lock()
-	defer me.mu.Unlock()
-	for !me.allNeededTorrentsCompleted() {
-		if me.stopped() {
-			return false
-		}
-		me.event.Wait()
-	}
-	return true
-}
 
 func (me *Client) fillRequests(t *torrent, c *connection) {
 	if c.Interested {
diff --git a/cmd/torrent-pick/main.go b/cmd/torrent-pick/main.go
index 88e3c32b..3b64152a 100644
--- a/cmd/torrent-pick/main.go
+++ b/cmd/torrent-pick/main.go
@@ -135,7 +135,7 @@ func main() {
 	}
 	dstWriter := bufio.NewWriter(f)
 
-
+	done := make(chan struct{})
 	for _, arg := range posArgs {
 		t := func() torrent.Torrent {
 			if strings.HasPrefix(arg, "magnet:") {
@@ -171,21 +171,14 @@ func main() {
 
 					srcReader := io.NewSectionReader(t.NewReader(), file.Offset(), file.Length())
 					io.Copy(dstWriter, srcReader)
+					close(done)
 					break
 				}
 			}
 		}()
 	}
 
-	done := make(chan struct{})
-	go func() {
-		defer close(done)
-		if client.WaitNeeded() {
-			log.Print("downloaded ALL the torrents")
-		} else {
-			log.Fatal("y u no complete torrents?!")
-		}
-	}()
+
 	ticker := time.NewTicker(time.Second)
 waitDone:
 	for {
diff --git a/torrent.go b/torrent.go
index d025185b..74e49831 100644
--- a/torrent.go
+++ b/torrent.go
@@ -515,14 +515,6 @@ func (t *torrent) numPieces() int {
 	return t.Info.NumPieces()
 }
 
-func (t *torrent) neededPiecesDownloaded() bool {
-	for i := range iter.N(t.Info.NumPieces()) {
-		if t.Pieces[i].Priority != piecePriorityNone && !t.pieceComplete(i) {
-			return false
-		}
-	}
-	return true
-}
 
 func (t *torrent) numPiecesCompleted() (num int) {
 	for i := range iter.N(t.Info.NumPieces()) {
-- 
2.51.0