From 9078004dca5fbbe543767137a683f1bf54d2de16 Mon Sep 17 00:00:00 2001 From: "alex.sharov" Date: Wed, 13 Sep 2023 14:53:32 +0700 Subject: [PATCH] save --- downloader/downloader.go | 15 +++++---------- downloader/downloader_grpc_server.go | 2 +- downloader/snaptype/files.go | 11 +++++++++++ 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/downloader/downloader.go b/downloader/downloader.go index 0afafabb9..88fe35e03 100644 --- a/downloader/downloader.go +++ b/downloader/downloader.go @@ -37,7 +37,6 @@ import ( "github.com/ledgerwatch/erigon-lib/common/dir" "github.com/ledgerwatch/erigon-lib/downloader/downloadercfg" "github.com/ledgerwatch/erigon-lib/downloader/snaptype" - prototypes "github.com/ledgerwatch/erigon-lib/gointerfaces/types" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/kv/mdbx" "github.com/ledgerwatch/log/v3" @@ -466,24 +465,20 @@ func (d *Downloader) VerifyData(ctx context.Context) error { return d.db.Update(context.Background(), func(tx kv.RwTx) error { return nil }) } -func (d *Downloader) createMagnetLinkWithInfoHash(ctx context.Context, hash *prototypes.H160, name string, snapDir string) (bool, error) { +func (d *Downloader) AddInfoHashAsMagnetLink(ctx context.Context, infoHash metainfo.Hash, name string) error { mi := &metainfo.MetaInfo{AnnounceList: Trackers} - if hash == nil { - return false, nil - } - infoHash := Proto2InfoHash(hash) //log.Debug("[downloader] downloading torrent and seg file", "hash", infoHash) if _, ok := d.torrentClient.Torrent(infoHash); ok { //log.Debug("[downloader] torrent client related to hash found", "hash", infoHash) - return true, nil + return nil } magnet := mi.Magnet(&infoHash, &metainfo.Info{Name: name}) t, err := d.torrentClient.AddMagnet(magnet.String()) if err != nil { //log.Warn("[downloader] add magnet link", "err", err) - return false, err + return err } t.DisallowDataDownload() t.AllowDataUpload() @@ -497,13 +492,13 @@ func (d *Downloader) createMagnetLinkWithInfoHash(ctx context.Context, hash *pro } mi := t.Metainfo() - if err := CreateTorrentFileIfNotExists(snapDir, t.Info(), &mi); err != nil { + if err := CreateTorrentFileIfNotExists(d.SnapDir(), t.Info(), &mi); err != nil { log.Warn("[downloader] create torrent file", "err", err) return } }(t) //log.Debug("[downloader] downloaded both seg and torrent files", "hash", infoHash) - return false, nil + return nil } func seedableFiles(snapDir string) ([]string, error) { diff --git a/downloader/downloader_grpc_server.go b/downloader/downloader_grpc_server.go index 812fe9648..9dfc524c8 100644 --- a/downloader/downloader_grpc_server.go +++ b/downloader/downloader_grpc_server.go @@ -77,7 +77,7 @@ func (s *GrpcServer) Download(ctx context.Context, request *proto_downloader.Dow continue } - _, err := s.d.createMagnetLinkWithInfoHash(ctx, it.TorrentHash, it.Path, snapDir) + err := s.d.AddInfoHashAsMagnetLink(ctx, Proto2InfoHash(it.TorrentHash), it.Path) if err != nil { return nil, err } diff --git a/downloader/snaptype/files.go b/downloader/snaptype/files.go index 01b0cc95b..43b0a9392 100644 --- a/downloader/snaptype/files.go +++ b/downloader/snaptype/files.go @@ -17,8 +17,10 @@ package snaptype import ( + "encoding/hex" "errors" "fmt" + "github.com/anacrolix/torrent/metainfo" "os" "path/filepath" "strconv" @@ -225,3 +227,12 @@ func ParseDir(dir string) (res []FileInfo, err error) { return res, nil } + +func Hex2InfoHash(in string) (infoHash metainfo.Hash) { + inHex, err := hex.DecodeString(in) + if err != nil { + panic(err) + } + copy(infoHash[:], inHex) + return infoHash +}