]> Sergey Matveev's repositories - btrtrc.git/blobdiff - spec.go
Drop support for go 1.20
[btrtrc.git] / spec.go
diff --git a/spec.go b/spec.go
index 6708db9093ce6420c73bd5312ee067944a3f578f..8cce3cb326f1ff3594b921338804f381d5a7e7cd 100644 (file)
--- a/spec.go
+++ b/spec.go
@@ -4,27 +4,36 @@ import (
        "fmt"
 
        "github.com/anacrolix/torrent/metainfo"
+       pp "github.com/anacrolix/torrent/peer_protocol"
        "github.com/anacrolix/torrent/storage"
 )
 
-// Specifies a new torrent for adding to a client. There are helpers for magnet URIs and torrent
-// metainfo files.
+// Specifies a new torrent for adding to a client, or additions to an existing Torrent. There are
+// constructor functions for magnet URIs and torrent metainfo files. TODO: This type should be
+// dismantled into a new Torrent option type, and separate Torrent mutate method(s).
 type TorrentSpec struct {
        // The tiered tracker URIs.
-       Trackers  [][]string
+       Trackers [][]string
+       // TODO: Move into a "new" Torrent opt type.
        InfoHash  metainfo.Hash
        InfoBytes []byte
        // The name to use if the Name field from the Info isn't available.
        DisplayName string
-       Webseeds    []string
-       DhtNodes    []string
-       PeerAddrs   []string
+       // WebSeed URLs. For additional options add the URLs separately with Torrent.AddWebSeeds
+       // instead.
+       Webseeds  []string
+       DhtNodes  []string
+       PeerAddrs []string
        // The combination of the "xs" and "as" fields in magnet links, for now.
        Sources []string
 
-       // The chunk size to use for outbound requests. Defaults to 16KiB if not set.
-       ChunkSize int
-       Storage   storage.ClientImpl
+       // The chunk size to use for outbound requests. Defaults to 16KiB if not set. Can only be set
+       // for new Torrents. TODO: Move into a "new" Torrent opt type.
+       ChunkSize pp.Integer
+       // TODO: Move into a "new" Torrent opt type.
+       Storage storage.ClientImpl
+
+       DisableInitialPieceCheck bool
 
        // Whether to allow data download or upload
        DisallowDataUpload   bool
@@ -48,10 +57,12 @@ func TorrentSpecFromMagnetUri(uri string) (spec *TorrentSpec, err error) {
        return
 }
 
+// The error will be from unmarshalling the info bytes. The TorrentSpec is still filled out as much
+// as possible in this case.
 func TorrentSpecFromMetaInfoErr(mi *metainfo.MetaInfo) (*TorrentSpec, error) {
        info, err := mi.UnmarshalInfo()
        if err != nil {
-               return nil, fmt.Errorf("unmarshalling info: %w", err)
+               err = fmt.Errorf("unmarshalling info: %w", err)
        }
        return &TorrentSpec{
                Trackers:    mi.UpvertedAnnounceList(),
@@ -66,9 +77,10 @@ func TorrentSpecFromMetaInfoErr(mi *metainfo.MetaInfo) (*TorrentSpec, error) {
                        }
                        return
                }(),
-       }, nil
+       }, err
 }
 
+// Panics if there was anything missing from the metainfo.
 func TorrentSpecFromMetaInfo(mi *metainfo.MetaInfo) *TorrentSpec {
        ts, err := TorrentSpecFromMetaInfoErr(mi)
        if err != nil {