Skip to content

Commit 30b768f

Browse files
Add torrent client to Danzo
Co-authored-by: Tanq16 <37408906+Tanq16@users.noreply.github.com>
1 parent b9b3f11 commit 30b768f

9 files changed

Lines changed: 798 additions & 1 deletion

File tree

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,4 @@ download.yaml
3535
.danzo-resume-state.json
3636
danzo-gdrive.json
3737

38-
.agents
38+
.agents.torrent.db*

cmd/highway.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
httpjob "github.com/tanq16/danzo/internal/jobs/http"
99
m3u8job "github.com/tanq16/danzo/internal/jobs/live-stream"
1010
s3job "github.com/tanq16/danzo/internal/jobs/s3"
11+
torrentjob "github.com/tanq16/danzo/internal/jobs/torrent"
1112
ytdlpjob "github.com/tanq16/danzo/internal/jobs/ytdlp"
1213
)
1314

@@ -27,4 +28,5 @@ func registerJobTypes(hw *highway.Highway) {
2728
hw.RegisterType("google-drive", gdrivejob.Unmarshal)
2829
hw.RegisterType("live-stream", m3u8job.Unmarshal)
2930
hw.RegisterType("ytdlp", ytdlpjob.Unmarshal)
31+
hw.RegisterType("torrent", torrentjob.Unmarshal)
3032
}

cmd/root.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,4 +96,5 @@ func init() {
9696
rootCmd.AddCommand(newGDriveCmd())
9797
rootCmd.AddCommand(newResumeCmd())
9898
rootCmd.AddCommand(newYtdlpCmd())
99+
rootCmd.AddCommand(newTorrentCmd())
99100
}

cmd/torrent.go

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package cmd
2+
3+
import (
4+
"context"
5+
"os"
6+
"os/signal"
7+
8+
"github.com/spf13/cobra"
9+
"github.com/tanq16/danzo/internal/display"
10+
torrentjob "github.com/tanq16/danzo/internal/jobs/torrent"
11+
"github.com/tanq16/danzo/utils"
12+
)
13+
14+
var torrentFlags struct {
15+
outputPath string
16+
}
17+
18+
var torrentCmd = &cobra.Command{
19+
Use: "torrent [URI] [--output OUTPUT_PATH]",
20+
Short: "Download file via Torrent or Magnet link",
21+
Args: cobra.ExactArgs(1),
22+
Run: func(cmd *cobra.Command, args []string) {
23+
ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt)
24+
defer cancel()
25+
26+
hw := newHighway()
27+
28+
disp := display.New(display.DefaultConfig())
29+
30+
job := torrentjob.New(args[0], torrentFlags.outputPath, connections, globalHTTPConfig)
31+
disp.RegisterJob(job.ID())
32+
hw.Submit(job)
33+
34+
disp.Start(hw.Progress())
35+
err := hw.Run(ctx)
36+
disp.Stop()
37+
38+
if err != nil {
39+
utils.PrintFatal("Download failed", err)
40+
}
41+
},
42+
}
43+
44+
func newTorrentCmd() *cobra.Command {
45+
return torrentCmd
46+
}
47+
48+
func init() {
49+
torrentCmd.Flags().StringVarP(&torrentFlags.outputPath, "output", "o", "", "Output directory path")
50+
}

cmd/torrent_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package cmd
2+
import "testing"
3+
func TestTorrentCompile(t *testing.T){}

go.mod

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ require (
66
charm.land/bubbles/v2 v2.1.0
77
charm.land/bubbletea/v2 v2.0.6
88
charm.land/lipgloss/v2 v2.0.3
9+
github.com/anacrolix/torrent v1.61.0
910
github.com/aws/aws-sdk-go-v2 v1.41.7
1011
github.com/aws/aws-sdk-go-v2/config v1.32.17
1112
github.com/aws/aws-sdk-go-v2/service/s3 v1.101.0
@@ -22,6 +23,24 @@ require (
2223
dario.cat/mergo v1.0.0 // indirect
2324
github.com/Microsoft/go-winio v0.6.2 // indirect
2425
github.com/ProtonMail/go-crypto v1.1.6 // indirect
26+
github.com/RoaringBitmap/roaring v1.2.3 // indirect
27+
github.com/alecthomas/atomic v0.1.0-alpha2 // indirect
28+
github.com/anacrolix/btree v0.0.0-20251201064447-d86c3fa41bd8 // indirect
29+
github.com/anacrolix/chansync v0.7.0 // indirect
30+
github.com/anacrolix/dht/v2 v2.23.0 // indirect
31+
github.com/anacrolix/envpprof v1.4.0 // indirect
32+
github.com/anacrolix/generics v0.1.1-0.20251125230353-15d98d46693b // indirect
33+
github.com/anacrolix/go-libutp v1.3.2 // indirect
34+
github.com/anacrolix/log v0.17.1-0.20251118025802-918f1157b7bb // indirect
35+
github.com/anacrolix/missinggo v1.3.0 // indirect
36+
github.com/anacrolix/missinggo/perf v1.0.0 // indirect
37+
github.com/anacrolix/missinggo/v2 v2.10.0 // indirect
38+
github.com/anacrolix/mmsg v1.0.1 // indirect
39+
github.com/anacrolix/multiless v0.4.0 // indirect
40+
github.com/anacrolix/stm v0.5.0 // indirect
41+
github.com/anacrolix/sync v0.5.5-0.20251119100342-d78dd1f686f1 // indirect
42+
github.com/anacrolix/upnp v0.1.4 // indirect
43+
github.com/anacrolix/utp v0.1.0 // indirect
2544
github.com/atotto/clipboard v0.1.4 // indirect
2645
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.10 // indirect
2746
github.com/aws/aws-sdk-go-v2/credentials v1.19.16 // indirect
@@ -38,6 +57,11 @@ require (
3857
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.21 // indirect
3958
github.com/aws/aws-sdk-go-v2/service/sts v1.42.1 // indirect
4059
github.com/aws/smithy-go v1.25.1 // indirect
60+
github.com/bahlo/generic-list-go v0.2.0 // indirect
61+
github.com/benbjohnson/immutable v0.4.1-0.20221220213129-8932b999621d // indirect
62+
github.com/bits-and-blooms/bitset v1.24.4 // indirect
63+
github.com/bradfitz/iter v0.0.0-20191230175014-e8f45d346db8 // indirect
64+
github.com/cespare/xxhash v1.1.0 // indirect
4165
github.com/charmbracelet/colorprofile v0.4.3 // indirect
4266
github.com/charmbracelet/ultraviolet v0.0.0-20260416155717-489999b90468 // indirect
4367
github.com/charmbracelet/x/ansi v0.11.7 // indirect
@@ -48,10 +72,22 @@ require (
4872
github.com/clipperhouse/uax29/v2 v2.7.0 // indirect
4973
github.com/cloudflare/circl v1.6.3 // indirect
5074
github.com/cyphar/filepath-securejoin v0.6.1 // indirect
75+
github.com/davecgh/go-spew v1.1.1 // indirect
76+
github.com/dustin/go-humanize v1.0.1 // indirect
77+
github.com/edsrzf/mmap-go v1.1.0 // indirect
5178
github.com/emirpasic/gods v1.18.1 // indirect
5279
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect
5380
github.com/go-git/go-billy/v5 v5.9.0 // indirect
81+
github.com/go-llsqlite/adapter v0.0.0-20230927005056-7f5ce7f0c916 // indirect
82+
github.com/go-llsqlite/crawshaw v0.5.6-0.20250312230104-194977a03421 // indirect
83+
github.com/go-logr/logr v1.4.3 // indirect
84+
github.com/go-logr/stdr v1.2.2 // indirect
5485
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect
86+
github.com/google/btree v1.1.2 // indirect
87+
github.com/google/go-cmp v0.7.0 // indirect
88+
github.com/google/uuid v1.6.0 // indirect
89+
github.com/gorilla/websocket v1.5.0 // indirect
90+
github.com/huandu/xstrings v1.3.2 // indirect
5591
github.com/inconshreveable/mousetrap v1.1.0 // indirect
5692
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
5793
github.com/kevinburke/ssh_config v1.2.0 // indirect
@@ -60,16 +96,58 @@ require (
6096
github.com/mattn/go-colorable v0.1.14 // indirect
6197
github.com/mattn/go-isatty v0.0.20 // indirect
6298
github.com/mattn/go-runewidth v0.0.23 // indirect
99+
github.com/minio/sha256-simd v1.0.0 // indirect
100+
github.com/mr-tron/base58 v1.2.0 // indirect
101+
github.com/mschoch/smat v0.2.0 // indirect
63102
github.com/muesli/cancelreader v0.2.2 // indirect
103+
github.com/multiformats/go-multihash v0.2.3 // indirect
104+
github.com/multiformats/go-varint v0.0.6 // indirect
105+
github.com/pion/datachannel v1.5.9 // indirect
106+
github.com/pion/dtls/v3 v3.0.3 // indirect
107+
github.com/pion/ice/v4 v4.0.2 // indirect
108+
github.com/pion/interceptor v0.1.40 // indirect
109+
github.com/pion/logging v0.2.3 // indirect
110+
github.com/pion/mdns/v2 v2.0.7 // indirect
111+
github.com/pion/randutil v0.1.0 // indirect
112+
github.com/pion/rtcp v1.2.15 // indirect
113+
github.com/pion/rtp v1.8.18 // indirect
114+
github.com/pion/sctp v1.8.33 // indirect
115+
github.com/pion/sdp/v3 v3.0.9 // indirect
116+
github.com/pion/srtp/v3 v3.0.4 // indirect
117+
github.com/pion/stun/v3 v3.0.0 // indirect
118+
github.com/pion/transport/v3 v3.0.7 // indirect
119+
github.com/pion/turn/v4 v4.0.0 // indirect
120+
github.com/pion/webrtc/v4 v4.0.0 // indirect
64121
github.com/pjbgf/sha1cd v0.6.0 // indirect
122+
github.com/pkg/errors v0.9.1 // indirect
123+
github.com/protolambda/ctxlock v0.1.0 // indirect
124+
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
65125
github.com/rivo/uniseg v0.4.7 // indirect
126+
github.com/rs/dnscache v0.0.0-20211102005908-e0241e321417 // indirect
66127
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect
67128
github.com/skeema/knownhosts v1.3.1 // indirect
129+
github.com/spaolacci/murmur3 v1.1.0 // indirect
68130
github.com/spf13/pflag v1.0.9 // indirect
131+
github.com/tidwall/btree v1.8.1 // indirect
132+
github.com/wlynxg/anet v0.0.3 // indirect
69133
github.com/xanzy/ssh-agent v0.3.3 // indirect
70134
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
135+
go.etcd.io/bbolt v1.3.6 // indirect
136+
go.opentelemetry.io/auto/sdk v1.2.1 // indirect
137+
go.opentelemetry.io/otel v1.38.0 // indirect
138+
go.opentelemetry.io/otel/metric v1.38.0 // indirect
139+
go.opentelemetry.io/otel/trace v1.38.0 // indirect
71140
golang.org/x/crypto v0.50.0 // indirect
141+
golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f // indirect
72142
golang.org/x/net v0.53.0 // indirect
73143
golang.org/x/sys v0.44.0 // indirect
144+
golang.org/x/text v0.36.0 // indirect
145+
golang.org/x/time v0.14.0 // indirect
74146
gopkg.in/warnings.v0 v0.1.2 // indirect
147+
lukechampine.com/blake3 v1.1.6 // indirect
148+
modernc.org/libc v1.22.3 // indirect
149+
modernc.org/mathutil v1.5.0 // indirect
150+
modernc.org/memory v1.5.0 // indirect
151+
modernc.org/sqlite v1.21.1 // indirect
152+
zombiezen.com/go/sqlite v0.13.1 // indirect
75153
)

0 commit comments

Comments
 (0)