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.
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 {
}
dstWriter := bufio.NewWriter(f)
-
+ done := make(chan struct{})
for _, arg := range posArgs {
t := func() torrent.Torrent {
if strings.HasPrefix(arg, "magnet:") {
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 {
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()) {