<-t.GotInfo()
mi := t.Metainfo()
t.Drop()
- f, err := os.Create(t.Info().Name + ".torrent")
+ f, err := os.Create(t.Info().BestName() + ".torrent")
if err != nil {
log.Fatalf("error creating torrent metainfo file: %s", err)
}
return fmt.Errorf("error unmarshalling info: %s", err)
}
if flags.JustName {
- fmt.Printf("%s\n", info.Name)
+ fmt.Printf("%s\n", info.BestName())
return nil
}
d := map[string]interface{}{
return fmt.Errorf("building info from path %q: %w", filePath, err)
}
for _, fi := range info.UpvertedFiles() {
- log.Printf("added %q", fi.Path)
+ log.Printf("added %q", fi.BestPath())
}
mi := metainfo.MetaInfo{
InfoBytes: bencode.MustMarshal(info),
Storage: storage.NewFileOpts(storage.NewFileClientOpts{
ClientBaseDir: filePath,
FilePathMaker: func(opts storage.FilePathMakerOpts) string {
- return filepath.Join(opts.File.Path...)
+ return filepath.Join(opts.File.BestPath()...)
},
TorrentDirMaker: nil,
PieceCompletion: pc,
func (dn dirNode) ReadDirAll(ctx context.Context) (des []fuse.Dirent, err error) {
names := map[string]bool{}
for _, fi := range dn.metadata.UpvertedFiles() {
- filePathname := strings.Join(fi.Path, "/")
+ filePathname := strings.Join(fi.BestPath(), "/")
if !isSubPath(dn.path, filePathname) {
continue
}
var name string
if dn.path == "" {
- name = fi.Path[0]
+ name = fi.BestPath()[0]
} else {
dirPathname := strings.Split(dn.path, "/")
- name = fi.Path[len(dirPathname)]
+ name = fi.BestPath()[len(dirPathname)]
}
if names[name] {
continue
de := fuse.Dirent{
Name: name,
}
- if len(fi.Path) == len(dn.path)+1 {
+ if len(fi.BestPath()) == len(dn.path)+1 {
de.Type = fuse.DT_File
} else {
de.Type = fuse.DT_Dir
continue
}
dirents = append(dirents, fuse.Dirent{
- Name: info.Name,
+ Name: info.BestName(),
Type: func() fuse.DirentType {
if !info.IsDir() {
return fuse.DT_File
}()
go func() {
defer cancel()
- _, err := ioutil.ReadFile(filepath.Join(layout.MountDir, tt.Info().Name))
+ _, err := ioutil.ReadFile(filepath.Join(layout.MountDir, tt.Info().BestName()))
require.Error(t, err)
}()
log.Fatal(err)
}
for _, fi := range info.Files {
- log.Printf("added %q", fi.Path)
+ log.Printf("added %q", fi.BestPath())
}
mi := &metainfo.MetaInfo{
InfoBytes: bencode.MustMarshal(info),
}
}
err := info.GeneratePieces(func(fi metainfo.FileInfo) (io.ReadCloser, error) {
- return io.NopCloser(strings.NewReader(t.GetFile(strings.Join(fi.Path, "/")).Data)), nil
+ return io.NopCloser(strings.NewReader(t.GetFile(strings.Join(fi.BestPath(), "/")).Data)), nil
})
expect.Nil(err)
return info
return
}
slices.Sort(info.Files, func(l, r FileInfo) bool {
- return strings.Join(l.Path, "/") < strings.Join(r.Path, "/")
+ return strings.Join(l.BestPath(), "/") < strings.Join(r.BestPath(), "/")
})
if info.PieceLength == 0 {
info.PieceLength = ChoosePieceLength(info.TotalLength())
}
err = info.GeneratePieces(func(fi FileInfo) (io.ReadCloser, error) {
- return os.Open(filepath.Join(root, strings.Join(fi.Path, string(filepath.Separator))))
+ return os.Open(filepath.Join(root, strings.Join(fi.BestPath(), string(filepath.Separator))))
})
if err != nil {
err = fmt.Errorf("error generating pieces: %s", err)
require.NoError(t, err)
if len(info.Files) == 1 {
- t.Logf("Single file: %s (length: %d)\n", info.Name, info.Files[0].Length)
+ t.Logf("Single file: %s (length: %d)\n", info.BestName(), info.Files[0].Length)
} else {
- t.Logf("Multiple files: %s\n", info.Name)
+ t.Logf("Multiple files: %s\n", info.BestName())
for _, f := range info.Files {
t.Logf(" - %s (length: %d)\n", path.Join(f.Path...), f.Length)
}
InfoHashV2: v2Infohash,
PieceLayers: mi.PieceLayers,
InfoBytes: mi.InfoBytes,
- DisplayName: info.Name,
+ DisplayName: info.BestName(),
Webseeds: mi.UrlList,
DhtNodes: func() (ret []string) {
ret = make([]string, 0, len(mi.Nodes))
if opts.FilePathMaker == nil {
opts.FilePathMaker = func(opts FilePathMakerOpts) string {
var parts []string
- if opts.Info.Name != metainfo.NoName {
- parts = append(parts, opts.Info.Name)
+ if opts.Info.BestName() != metainfo.NoName {
+ parts = append(parts, opts.Info.BestName())
}
- return filepath.Join(append(parts, opts.File.Path...)...)
+ return filepath.Join(append(parts, opts.File.BestPath()...)...)
}
}
if opts.PieceCompletion == nil {
}()
for _, miFile := range md.UpvertedFiles() {
var safeName string
- safeName, err = ToSafeFilePath(append([]string{md.Name}, miFile.Path...)...)
+ safeName, err = ToSafeFilePath(append([]string{md.BestName()}, miFile.BestPath()...)...)
if err != nil {
return
}
if strings.HasSuffix(url_, "/") {
// BEP specifies that we append the file path. We need to escape each component of the path
// for things like spaces and '#'.
- url_ += trailingPath(info.Name, fileInfo.Path, pathEscaper)
+ url_ += trailingPath(info.BestName(), fileInfo.BestPath(), pathEscaper)
}
req, err := http.NewRequestWithContext(ctx, http.MethodGet, url_, nil)
if err != nil {