Precompute File.DisplayPath
This is an optimization for dir lookups in torrentfs.
This commit is contained in:
parent
555cb064dd
commit
e04c9a13f1
23
file.go
23
file.go
|
@ -1,8 +1,6 @@
|
|||
package torrent
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"github.com/anacrolix/missinggo/v2/bitmap"
|
||||
|
||||
"github.com/anacrolix/torrent/metainfo"
|
||||
|
@ -10,12 +8,13 @@ import (
|
|||
|
||||
// Provides access to regions of torrent data that correspond to its files.
|
||||
type File struct {
|
||||
t *Torrent
|
||||
path string
|
||||
offset int64
|
||||
length int64
|
||||
fi metainfo.FileInfo
|
||||
prio piecePriority
|
||||
t *Torrent
|
||||
path string
|
||||
offset int64
|
||||
length int64
|
||||
fi metainfo.FileInfo
|
||||
displayPath string
|
||||
prio piecePriority
|
||||
}
|
||||
|
||||
func (f *File) Torrent() *Torrent {
|
||||
|
@ -89,13 +88,9 @@ func (f *File) bytesLeft() (left int64) {
|
|||
}
|
||||
|
||||
// The relative file path for a multi-file torrent, and the torrent name for a
|
||||
// single-file torrent.
|
||||
// single-file torrent. Dir separators are '/'.
|
||||
func (f *File) DisplayPath() string {
|
||||
fip := f.FileInfo().Path
|
||||
if len(fip) == 0 {
|
||||
return f.t.info.Name
|
||||
}
|
||||
return strings.Join(fip, "/")
|
||||
return f.displayPath
|
||||
}
|
||||
|
||||
// The download status of a piece that comprises part of a File.
|
||||
|
|
5
t.go
5
t.go
|
@ -203,12 +203,17 @@ func (t *Torrent) initFiles() {
|
|||
} else {
|
||||
path = fi.Path
|
||||
}
|
||||
dp := t.info.Name
|
||||
if len(fi.Path) != 0 {
|
||||
dp = strings.Join(fi.Path, "/")
|
||||
}
|
||||
*t.files = append(*t.files, &File{
|
||||
t,
|
||||
strings.Join(append([]string{t.info.Name}, path...), "/"),
|
||||
offset,
|
||||
fi.Length,
|
||||
fi,
|
||||
dp,
|
||||
PiecePriorityNone,
|
||||
})
|
||||
offset += fi.Length
|
||||
|
|
Loading…
Reference in New Issue