Prefer UTF-8 fields when present
This commit is contained in:
parent
a1072bfee9
commit
ff3b74ad88
|
@ -77,6 +77,7 @@ func pprintMetainfo(metainfo *metainfo.MetaInfo, flags pprintMetainfoFlags) erro
|
||||||
}
|
}
|
||||||
d := map[string]interface{}{
|
d := map[string]interface{}{
|
||||||
"Name": info.Name,
|
"Name": info.Name,
|
||||||
|
"Name.Utf8": info.NameUtf8,
|
||||||
"NumPieces": info.NumPieces(),
|
"NumPieces": info.NumPieces(),
|
||||||
"PieceLength": info.PieceLength,
|
"PieceLength": info.PieceLength,
|
||||||
"InfoHash": metainfo.HashInfoBytes().HexString(),
|
"InfoHash": metainfo.HashInfoBytes().HexString(),
|
||||||
|
|
|
@ -6,14 +6,14 @@ import "strings"
|
||||||
type FileInfo struct {
|
type FileInfo struct {
|
||||||
Length int64 `bencode:"length"` // BEP3
|
Length int64 `bencode:"length"` // BEP3
|
||||||
Path []string `bencode:"path"` // BEP3
|
Path []string `bencode:"path"` // BEP3
|
||||||
PathUTF8 []string `bencode:"path.utf-8,omitempty"`
|
PathUtf8 []string `bencode:"path.utf-8,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fi *FileInfo) DisplayPath(info *Info) string {
|
func (fi *FileInfo) DisplayPath(info *Info) string {
|
||||||
if info.IsDir() {
|
if info.IsDir() {
|
||||||
return strings.Join(fi.Path, "/")
|
return strings.Join(fi.BestPath(), "/")
|
||||||
} else {
|
} else {
|
||||||
return info.Name
|
return info.BestName()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,3 +26,10 @@ func (me FileInfo) Offset(info *Info) (ret int64) {
|
||||||
}
|
}
|
||||||
panic("not found")
|
panic("not found")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (fi FileInfo) BestPath() []string {
|
||||||
|
if len(fi.PathUtf8) != 0 {
|
||||||
|
return fi.PathUtf8
|
||||||
|
}
|
||||||
|
return fi.Path
|
||||||
|
}
|
||||||
|
|
|
@ -153,3 +153,10 @@ func (info *Info) UpvertedFiles() []FileInfo {
|
||||||
func (info *Info) Piece(index int) Piece {
|
func (info *Info) Piece(index int) Piece {
|
||||||
return Piece{info, pieceIndex(index)}
|
return Piece{info, pieceIndex(index)}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (info Info) BestName() string {
|
||||||
|
if info.NameUtf8 != "" {
|
||||||
|
return info.NameUtf8
|
||||||
|
}
|
||||||
|
return info.Name
|
||||||
|
}
|
||||||
|
|
14
t.go
14
t.go
|
@ -211,23 +211,13 @@ func (t *Torrent) initFiles() {
|
||||||
var offset int64
|
var offset int64
|
||||||
t.files = new([]*File)
|
t.files = new([]*File)
|
||||||
for _, fi := range t.info.UpvertedFiles() {
|
for _, fi := range t.info.UpvertedFiles() {
|
||||||
var path []string
|
|
||||||
if len(fi.PathUTF8) != 0 {
|
|
||||||
path = fi.PathUTF8
|
|
||||||
} 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.files = append(*t.files, &File{
|
||||||
t,
|
t,
|
||||||
strings.Join(append([]string{t.info.Name}, path...), "/"),
|
strings.Join(append([]string{t.info.BestName()}, fi.BestPath()...), "/"),
|
||||||
offset,
|
offset,
|
||||||
fi.Length,
|
fi.Length,
|
||||||
fi,
|
fi,
|
||||||
dp,
|
fi.DisplayPath(t.info),
|
||||||
PiecePriorityNone,
|
PiecePriorityNone,
|
||||||
})
|
})
|
||||||
offset += fi.Length
|
offset += fi.Length
|
||||||
|
|
Loading…
Reference in New Issue