Prefer torrents with real seeders: resolve connected seeder count from swarm during magnet resolution

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/claude-agent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
Alexander
2026-05-11 20:02:02 +02:00
parent 3e8b8153b6
commit ff6bc444d0
3 changed files with 71 additions and 17 deletions
+14 -3
View File
@@ -11,8 +11,13 @@ import (
"github.com/rs/zerolog/log"
)
type ResolveResult struct {
Data []byte
ConnectedSeeders int
}
type Resolver interface {
Resolve(magnetURI string) ([]byte, error)
Resolve(magnetURI string) (*ResolveResult, error)
}
type MagnetResolver struct {
@@ -41,7 +46,7 @@ func NewMagnetResolver(timeout time.Duration) (*MagnetResolver, error) {
}, nil
}
func (r *MagnetResolver) Resolve(magnetURI string) ([]byte, error) {
func (r *MagnetResolver) Resolve(magnetURI string) (*ResolveResult, error) {
truncated := magnetURI
if len(truncated) > 80 {
truncated = truncated[:80] + "..."
@@ -104,11 +109,14 @@ func (r *MagnetResolver) Resolve(magnetURI string) ([]byte, error) {
}
resolved:
stats := t.Stats()
info := t.Info()
log.Debug().
Str("name", info.Name).
Int("files", len(info.Files)).
Int64("size", info.TotalLength()).
Int("connected_seeders", stats.ConnectedSeeders).
Int("active_peers", stats.ActivePeers).
Msg("magnet resolved")
mi := t.Metainfo()
@@ -121,7 +129,10 @@ resolved:
return nil, fmt.Errorf("marshaling torrent data: %w", err)
}
return data, nil
return &ResolveResult{
Data: data,
ConnectedSeeders: stats.ConnectedSeeders,
}, nil
}
func (r *MagnetResolver) Close() {