]> Sergey Matveev's repositories - btrtrc.git/commitdiff
metainfo: Add helper methods to FileInfo
authorMatt Joiner <anacrolix@gmail.com>
Wed, 4 Jan 2017 06:15:11 +0000 (17:15 +1100)
committerMatt Joiner <anacrolix@gmail.com>
Wed, 4 Jan 2017 06:15:11 +0000 (17:15 +1100)
metainfo/fileinfo.go [new file with mode: 0644]
metainfo/metainfo.go

diff --git a/metainfo/fileinfo.go b/metainfo/fileinfo.go
new file mode 100644 (file)
index 0000000..ff2d563
--- /dev/null
@@ -0,0 +1,27 @@
+package metainfo
+
+import "strings"
+
+// Information specific to a single file inside the MetaInfo structure.
+type FileInfo struct {
+       Length int64    `bencode:"length"`
+       Path   []string `bencode:"path"`
+}
+
+func (fi *FileInfo) DisplayPath(info *Info) string {
+       if info.IsDir() {
+               return strings.Join(fi.Path, "/")
+       } else {
+               return info.Name
+       }
+}
+
+func (me FileInfo) Offset(info *Info) (ret int64) {
+       for _, fi := range info.Files {
+               if me.DisplayPath(info) == fi.DisplayPath(info) {
+                       return
+               }
+               ret += fi.Length
+       }
+       panic("not found")
+}
index 96a64cbc0b4499bfca26818c51602cfafb2a4170..ea09cce517f9cfc86956bddf933be56c4ed5a706 100644 (file)
@@ -20,12 +20,6 @@ type MetaInfo struct {
        URLList      interface{}   `bencode:"url-list,omitempty"`
 }
 
-// Information specific to a single file inside the MetaInfo structure.
-type FileInfo struct {
-       Length int64    `bencode:"length"`
-       Path   []string `bencode:"path"`
-}
-
 // Load a MetaInfo from an io.Reader. Returns a non-nil error in case of
 // failure.
 func Load(r io.Reader) (*MetaInfo, error) {