6 "github.com/anacrolix/missinggo/resource"
8 "github.com/anacrolix/torrent/metainfo"
11 type piecePerResource struct {
15 func NewResourcePieces(p resource.Provider) ClientImpl {
16 return &piecePerResource{
21 func (s *piecePerResource) OpenTorrent(info *metainfo.Info, infoHash metainfo.Hash) (TorrentImpl, error) {
25 func (s *piecePerResource) Close() error {
29 func (s *piecePerResource) Piece(p metainfo.Piece) PieceImpl {
30 completed, err := s.p.NewInstance(path.Join("completed", p.Hash().HexString()))
34 incomplete, err := s.p.NewInstance(path.Join("incomplete", p.Hash().HexString()))
38 return piecePerResourcePiece{
45 type piecePerResourcePiece struct {
51 func (s piecePerResourcePiece) GetIsComplete() bool {
53 return err == nil && fi.Size() == s.p.Length()
56 func (s piecePerResourcePiece) MarkComplete() error {
57 return resource.Move(s.i, s.c)
60 func (s piecePerResourcePiece) MarkNotComplete() error {
64 func (s piecePerResourcePiece) ReadAt(b []byte, off int64) (int, error) {
65 if s.GetIsComplete() {
66 return s.c.ReadAt(b, off)
68 return s.i.ReadAt(b, off)
72 func (s piecePerResourcePiece) WriteAt(b []byte, off int64) (n int, err error) {
73 return s.i.WriteAt(b, off)