/// <summary> /// Initializes a new instance of the <see cref="TorrentInfo" /> class. /// </summary> /// <param name="dictionary">The dictionary.</param> /// <param name="infoHash">The hash.</param> /// <param name="pieceLength">Length of the piece.</param> /// <param name="piecesHashValues">The pieces.</param> /// <param name="isPrivate">if set to <c>true</c> this torrent is private.</param> /// <param name="announceList">The announce list.</param> /// <param name="creationDate">The creation date.</param> /// <param name="comment">The comment.</param> /// <param name="createdBy">The created by.</param> /// <param name="encoding">The encoding.</param> /// <param name="files">The files.</param> private TorrentInfo(BEncodedDictionary dictionary, string infoHash, long pieceLength, IEnumerable <string> piecesHashValues, bool isPrivate, IEnumerable <Uri> announceList, DateTime?creationDate, string comment, string createdBy, Encoding encoding, IEnumerable <TorrentFileInfo> files) { dictionary.CannotBeNull(); infoHash.CannotBeNullOrEmpty(); infoHash.Length.MustBeEqualTo(40); pieceLength.MustBeGreaterThan(0); piecesHashValues.CannotBeNullOrEmpty(); announceList.CannotBeNullOrEmpty(); encoding.CannotBeNull(); files.CannotBeNullOrEmpty(); this.dictionary = dictionary; this.InfoHash = infoHash; this.PieceLength = pieceLength; this.PieceHashes = piecesHashValues; this.IsPrivate = isPrivate; this.AnnounceList = announceList; this.CreationDate = creationDate; this.Comment = comment; this.CreatedBy = createdBy; this.Encoding = encoding; this.Files = files; this.Length = files.Sum(x => x.Length); this.PiecesCount = piecesHashValues.Count(); this.BlockLength = PieceMessage.DefaultBlockLength; this.BlocksCount = (int)(pieceLength / PieceMessage.DefaultBlockLength); }