]> Sergey Matveev's repositories - btrtrc.git/blobdiff - storage/file-piece.go
cmd/btrtrc client
[btrtrc.git] / storage / file-piece.go
index 47772017e3e1680f28a8e4de7bb74aa40202aa5f..d30e1c1a4d8cee554507f290758059bfefc90e6e 100644 (file)
@@ -6,6 +6,7 @@ import (
        "os"
 
        "github.com/anacrolix/torrent/metainfo"
+       "github.com/anacrolix/torrent/segments"
 )
 
 type filePieceImpl struct {
@@ -32,12 +33,19 @@ func (fs *filePieceImpl) Completion() Completion {
        verified := true
        if c.Complete {
                // If it's allegedly complete, check that its constituent files have the necessary length.
-               for _, fi := range extentCompleteRequiredLengths(fs.p.Info, fs.p.Offset(), fs.p.Length()) {
-                       s, err := os.Stat(fs.files[fi.fileIndex].path)
-                       if err != nil || s.Size() < fi.length {
+               if !fs.segmentLocater.Locate(segments.Extent{
+                       Start:  fs.p.Offset(),
+                       Length: fs.p.Length(),
+               }, func(i int, extent segments.Extent) bool {
+                       file := fs.files[i]
+                       s, err := os.Stat(PathShortener(file.path))
+                       if err != nil || s.Size() < extent.Start+extent.Length {
                                verified = false
-                               break
+                               return false
                        }
+                       return true
+               }) {
+                       panic("files do not cover piece extent")
                }
        }