tor-dl 1.0.2 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +22 -180
  2. package/dist/cli/display.d.ts.map +1 -1
  3. package/dist/cli/display.js +9 -7
  4. package/dist/cli/display.js.map +1 -1
  5. package/dist/cli/parser.d.ts.map +1 -1
  6. package/dist/cli/parser.js +21 -27
  7. package/dist/cli/parser.js.map +1 -1
  8. package/dist/commands/download.d.ts +1 -1
  9. package/dist/commands/download.d.ts.map +1 -1
  10. package/dist/commands/download.js +55 -49
  11. package/dist/commands/download.js.map +1 -1
  12. package/dist/download/engine.d.ts +1 -3
  13. package/dist/download/engine.d.ts.map +1 -1
  14. package/dist/download/engine.js +0 -129
  15. package/dist/download/engine.js.map +1 -1
  16. package/dist/index.d.ts +0 -1
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +0 -1
  19. package/dist/index.js.map +1 -1
  20. package/dist/sources/nyaa.d.ts.map +1 -1
  21. package/dist/sources/nyaa.js +3 -0
  22. package/dist/sources/nyaa.js.map +1 -1
  23. package/dist/sources/thepiratebay.d.ts.map +1 -1
  24. package/dist/sources/thepiratebay.js +1 -0
  25. package/dist/sources/thepiratebay.js.map +1 -1
  26. package/dist/sources/yts.d.ts.map +1 -1
  27. package/dist/sources/yts.js +1 -0
  28. package/dist/sources/yts.js.map +1 -1
  29. package/dist/types.d.ts +1 -0
  30. package/dist/types.d.ts.map +1 -1
  31. package/package.json +3 -5
  32. package/src/cli/display.ts +10 -7
  33. package/src/cli/parser.ts +23 -30
  34. package/src/commands/download.ts +48 -15
  35. package/src/commands/search.ts +52 -52
  36. package/src/download/engine.ts +1 -144
  37. package/src/index.ts +0 -1
  38. package/src/sources/nyaa.ts +3 -0
  39. package/src/sources/thepiratebay.ts +1 -0
  40. package/src/sources/yts.ts +1 -0
  41. package/src/types.ts +1 -0
  42. package/src/cli/progress.ts +0 -78
package/README.md CHANGED
@@ -6,33 +6,22 @@
6
6
  <img src="https://img.shields.io/github/license/tor-dl" alt="license">
7
7
  </p>
8
8
 
9
- > A powerful CLI torrent search and download tool. Search across multiple torrent sources, filter results, and download directly to your current directory - all from the terminal.
9
+ > A CLI torrent search tool. Search across multiple sources, open .torrent in browser, or copy magnet links to your clipboard.
10
10
 
11
11
  ## Features
12
12
 
13
- - 🔍 **Multi-Source Search** - Search across 9 popular torrent sources simultaneously
14
- - 🎯 **Smart Filters** - Filter by category, seeders, size with customizable defaults
15
- - 📊 **Sort Options** - Sort by seeds, size, or date (ascending/descending)
16
- - ⬇️ **Direct Downloads** - Download torrents directly using WebTorrent
17
- - 📈 **Rich Progress** - Beautiful CLI progress bar with speed and ETA
18
- - 🔄 **Easy Updates** - Update source configurations via `-u` flag
19
- - ⚙️ **JSON Config** - Fully configurable via `filters.json` and `sources.json`
13
+ - 🔍 **Multi-Source Search** - Search across multiple torrent sources simultaneously
14
+ - 🎯 **Smart Filters** - Filter by category, seeders, size
15
+ - ⬇️ **Open in Browser** - Open .torrent files directly in your browser
16
+ - 📋 **Copy Magnet** - Copy magnet links to clipboard for use with your torrent client
20
17
 
21
18
  ## Installation
22
19
 
23
20
  ```bash
24
- # Clone the repository
25
21
  git clone https://github.com/eaeoz/tor-dl.git
26
22
  cd tor-dl
27
-
28
- # Install dependencies
29
23
  npm install
30
-
31
- # Build the project
32
24
  npm run build
33
-
34
- # Link for global use (optional)
35
- npm link
36
25
  ```
37
26
 
38
27
  ## Quick Start
@@ -41,27 +30,10 @@ npm link
41
30
  # Search for torrents
42
31
  tor-dl search "movie title"
43
32
 
44
- # Download a specific result
45
- tor-dl 3
46
-
47
- # Update sources
48
- tor-dl -u
33
+ # Open .torrent in browser or copy magnet link
34
+ tor-dl o 3
49
35
  ```
50
36
 
51
- ## Supported Sources
52
-
53
- | Source | Categories | Status |
54
- |--------|------------|--------|
55
- | 1337x | All | ✅ Enabled |
56
- | EZTV | TV | ✅ Enabled |
57
- | The Pirate Bay | All | ✅ Enabled |
58
- | RarBG | Movie, TV | ✅ Enabled |
59
- | Limetorrents | All | ✅ Enabled |
60
- | TorLock | All | ✅ Enabled |
61
- | TorrentProject | All | ✅ Enabled |
62
- | SolidTorrents | All | ✅ Enabled |
63
- | torrents-csv | All | ✅ Enabled |
64
-
65
37
  ## Usage
66
38
 
67
39
  ### Search Command
@@ -81,166 +53,40 @@ tor-dl search <query> [options]
81
53
  | `-o, --sort <field>` | Sort by: seeds, size, date | seeds |
82
54
  | `--order <order>` | Order: asc, desc | desc |
83
55
  | `-l, --limit <number>` | Result limit | 50 |
56
+ | `--sources <sources>` | Sources: yts, thepiratebay, nyaa, etc. | all enabled |
84
57
 
85
58
  **Examples:**
86
59
 
87
60
  ```bash
88
- # Basic search (uses filters.json defaults)
61
+ # Basic search
89
62
  tor-dl search "Blade Runner 2049"
90
63
 
91
- # Search with custom filters
64
+ # Filter by seeds and size
92
65
  tor-dl search "game of thrones" --cat tv --min-seeds 100 --min-size 500MB
93
66
 
94
- # Sort by size (ascending)
95
- tor-dl search "movie" --sort size --order asc
96
-
97
- # Limit results to top 10
98
- tor-dl search "linux" -l 10
99
- ```
100
-
101
- ### Download Command
102
-
103
- ```bash
104
- # Download by number (from previous search)
105
- tor-dl <number>
106
-
107
- # Or use explicit download command
108
- tor-dl download <number> [options]
109
- ```
110
-
111
- **Options:**
112
-
113
- | Flag | Description |
114
- |------|-------------|
115
- | `-p, --path <path>` | Custom download path |
116
-
117
- **Example:**
118
-
119
- ```bash
120
- # Download result #3 from previous search
121
- tor-dl 3
122
- ```
123
-
124
- ### Update Command
125
-
126
- ```bash
127
- tor-dl update
128
- # or
129
- tor-dl -u
67
+ # Search specific source
68
+ tor-dl search "movie" --sources yts,thepiratebay
130
69
  ```
131
70
 
132
- Updates source configurations from the remote URL specified in `sources.json`.
133
-
134
- ### Version
71
+ ### Open Command
135
72
 
136
73
  ```bash
137
- tor-dl --version
138
- # or
139
- tor-dl -v
140
- ```
141
-
142
- ## Configuration
143
-
144
- ### filters.json
145
-
146
- Default search filters (can be overridden via CLI):
147
-
148
- ```json
149
- {
150
- "category": "all",
151
- "minSeeds": 0,
152
- "minSize": "0",
153
- "maxSize": "50GB",
154
- "sortBy": "seeds",
155
- "order": "desc",
156
- "limit": 50
157
- }
158
- ```
159
-
160
- ### sources.json
161
-
162
- Source configurations with remote update URL:
163
-
164
- ```json
165
- {
166
- "updateUrl": "https://raw.githubusercontent.com/eaeoz/tor-dl/main/sources.json",
167
- "version": "1.0.0",
168
- "sources": {
169
- "1337x": {
170
- "enabled": true,
171
- "name": "1337x",
172
- "baseUrl": "https://1337x.to",
173
- "searchUrl": "https://1337x.to/category-search",
174
- "categories": ["all", "movie", "tv", "music", "games", "apps"],
175
- "searchParam": "search",
176
- "hasMagnet": true
177
- }
178
- }
179
- }
74
+ tor-dl o <number>
180
75
  ```
181
76
 
182
- ## CLI Output Example
77
+ Opens .torrent file in browser, or copies magnet link to clipboard.
183
78
 
184
- ```
185
- ┌─────┬─────────────────────────────────────────┬───────────┬────────┬──────────┐
186
- │ Num │ Name │ Size │ Seeds │ Source │
187
- ├─────┼─────────────────────────────────────────┼───────────┼────────┼──────────┤
188
- │ 1 │ Blade.Runner.2049.2017.720p.BluRay │ 1.2GB │ 5,000 │ 1337x │
189
- │ 2 │ Blade.Runner.2049.2017.1080p.BluRay │ 2.1GB │ 3,200 │ limetorrent │
190
- │ 3 │ Blade.Runner.2049.2017.4K.BluRay │ 4.5GB │ 1,800 │ rarbg │
191
- └─────┴─────────────────────────────────────────┴───────────┴────────┴──────────┘
192
-
193
- To download: tor-dl <number>
194
- ```
195
-
196
- ## Project Structure
79
+ ## Supported Sources
197
80
 
198
- ```
199
- tor-dl/
200
- ├── bin/
201
- │ └── tor-dl.js # CLI entry point
202
- ├── src/
203
- │ ├── cli/
204
- │ │ ├── parser.ts # Commander.js CLI parser
205
- │ │ ├── display.ts # Terminal output formatting
206
- │ │ └── progress.ts # Download progress bar
207
- │ ├── commands/
208
- │ │ ├── search.ts # Search command
209
- │ │ ├── download.ts # Download command
210
- │ │ └── update.ts # Update sources command
211
- │ ├── sources/
212
- │ │ ├── _1337x.ts # 1337x scraper
213
- │ │ ├── eztv.ts # EZTV scraper
214
- │ │ ├── limetorrent.ts # Limetorrents scraper
215
- │ │ ├── rarbg.ts # RarBG scraper
216
- │ │ └── ... # More source scrapers
217
- │ ├── filters/
218
- │ │ ├── category.ts # Category filter
219
- │ │ ├── size.ts # Size filter
220
- │ │ ├── seeds.ts # Seeds filter
221
- │ │ └── sort.ts # Sort functionality
222
- │ ├── download/
223
- │ │ └── engine.ts # WebTorrent download engine
224
- │ └── types.ts # TypeScript interfaces
225
- ├── sources.json # Source configurations
226
- ├── filters.json # Default filters
227
- └── package.json
228
- ```
81
+ - YTS (Movies)
82
+ - The Pirate Bay
83
+ - Nyaa (Anime)
84
+ - EZTV (TV)
85
+ - And more...
229
86
 
230
87
  ## Requirements
231
88
 
232
89
  - Node.js >= 18.0.0
233
- - npm or yarn
234
-
235
- ## Tech Stack
236
-
237
- - **TypeScript** - Type-safe code
238
- - **Commander.js** - CLI argument parsing
239
- - **Axios + Cheerio** - HTTP requests and HTML parsing
240
- - **WebTorrent** - Torrent downloading
241
- - **cli-progress** - Rich progress bars
242
- - **Chalk** - Terminal colors
243
- - **Ora** - Loading spinners
244
90
 
245
91
  ## License
246
92
 
@@ -248,8 +94,4 @@ MIT License - See [LICENSE](LICENSE) for details.
248
94
 
249
95
  ## Disclaimer
250
96
 
251
- This tool is for educational purposes. Always respect copyright laws and the terms of service of torrent sites. Download only content you have the right to access.
252
-
253
- ---
254
-
255
- <p align="center">Made with ❤️ for the CLI community</p>
97
+ This tool is for educational purposes. Always respect copyright laws and the terms of service of torrent sites.
@@ -1 +1 @@
1
- {"version":3,"file":"display.d.ts","sourceRoot":"","sources":["../../src/cli/display.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAIzC,wBAAgB,cAAc,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,IAAI,CA6B7D;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAYhE;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAElD;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEpD;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEjD"}
1
+ {"version":3,"file":"display.d.ts","sourceRoot":"","sources":["../../src/cli/display.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAIzC,wBAAgB,cAAc,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,IAAI,CAgC7D;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAYhE;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAElD;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEpD;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEjD"}
@@ -15,11 +15,12 @@ function displayResults(results) {
15
15
  console.log(chalk_1.default.yellow('No results found.'));
16
16
  return;
17
17
  }
18
+ console.log(chalk_1.default.gray('\nTip: "tor-dl o <number>" to open .torrent or copy magnet link\n'));
18
19
  const out = (s) => process.stdout.write(s + '\n');
19
20
  out('\n' + [
20
- '┌─────┬────────────────────────────────────────┬────────┬───────┬───────┬────────┐',
21
- '│ Num │ Name │ Size │ Seeds │ Leech │ Source │',
22
- '├─────┼────────────────────────────────────────┼────────┼───────┼───────┼────────┤'
21
+ '┌─────┬───┬────────────────────────────────────────┬────────┬───────┬───────┬────────┐',
22
+ '│ Num │ L │ Name │ Size │ Seeds │ Leech │ Source │',
23
+ '├─────┼───┼────────────────────────────────────────┼────────┼───────┼───────┼────────┤'
23
24
  ].join('\n'));
24
25
  for (const r of results) {
25
26
  const name = r.name.length > 38 ? r.name.substring(0, 35) + '...' : r.name;
@@ -28,12 +29,13 @@ function displayResults(results) {
28
29
  const peers = r.peers > 50 ? chalk_1.default.cyan(r.peers.toString().padStart(5)) : r.peers.toString().padStart(5);
29
30
  const source = (r.source || 'unknown').slice(0, 6).padEnd(6);
30
31
  const num = chalk_1.default.cyan(r.num.toString().padStart(3));
31
- out(`│ ${num} ${name.padEnd(38)} ${size} ${seeds} ${peers} │ ${source} │`);
32
+ const link = r.torrentUrl || r.magnet ? chalk_1.default.green('✓') : ' ';
33
+ out(`│ ${num} │ ${link} │ ${name.padEnd(38)} │ ${size} │ ${seeds} │ ${peers} │ ${source} │`);
32
34
  }
33
- out('├─────┼────────────────────────────────────────┼────────┼───────┼───────┼────────┤');
34
- out('└─────┴────────────────────────────────────────┴────────┴───────┴───────┴────────┘');
35
+ out('├─────┼───┼────────────────────────────────────────┼────────┼───────┼───────┼────────┤');
36
+ out('└─────┴───┴────────────────────────────────────────┴────────┴───────┴───────┴────────┘');
35
37
  out('');
36
- out('To download: tor-dl <number>');
38
+ out(chalk_1.default.gray('Use: tor-dl o <number> to open in browser or copy magnet link'));
37
39
  }
38
40
  function displayResultDetails(result) {
39
41
  console.log(chalk_1.default.bold('\n--- Torrent Details ---'));
@@ -1 +1 @@
1
- {"version":3,"file":"display.js","sourceRoot":"","sources":["../../src/cli/display.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"display.js","sourceRoot":"","sources":["../../src/cli/display.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/cli/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAE,YAAY,EAAiB,MAAM,UAAU,CAAC;AAEvD,wBAAgB,WAAW,IAAI,YAAY,CAc1C;AAED,wBAAgB,YAAY,IAAI,OAAO,CA0EtC"}
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/cli/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAE,YAAY,EAAiB,MAAM,UAAU,CAAC;AAWvD,wBAAgB,WAAW,IAAI,YAAY,CAc1C;AAED,wBAAgB,YAAY,IAAI,OAAO,CA0DtC"}
@@ -38,6 +38,15 @@ exports.createParser = createParser;
38
38
  const commander_1 = require("commander");
39
39
  const fs_1 = require("fs");
40
40
  const path_1 = require("path");
41
+ function getVersion() {
42
+ try {
43
+ const pkg = JSON.parse((0, fs_1.readFileSync)((0, path_1.join)(__dirname, '../../package.json'), 'utf-8'));
44
+ return pkg.version || '1.0.0';
45
+ }
46
+ catch {
47
+ return '1.0.0';
48
+ }
49
+ }
41
50
  function loadFilters() {
42
51
  const filtersPath = (0, path_1.join)(process.cwd(), 'filters.json');
43
52
  if ((0, fs_1.existsSync)(filtersPath)) {
@@ -57,13 +66,8 @@ function createParser() {
57
66
  const program = new commander_1.Command();
58
67
  program
59
68
  .name('tor-dl')
60
- .description('CLI torrent search and download tool')
61
- .version('1.0.0')
62
- .hook('preAction', (thisCommand) => {
63
- if (thisCommand.name() === 'update') {
64
- return;
65
- }
66
- });
69
+ .description('CLI torrent search tool - search, open in browser, copy magnet links')
70
+ .version(getVersion(), '-v, --version');
67
71
  program
68
72
  .command('search <query>')
69
73
  .description('Search for torrents')
@@ -91,27 +95,17 @@ function createParser() {
91
95
  const { searchCommand } = await Promise.resolve().then(() => __importStar(require('../commands/search')));
92
96
  await searchCommand(searchOptions);
93
97
  });
94
- program
95
- .command('download <number>')
96
- .description('Download a torrent by number from previous search')
97
- .option('-p, --path <path>', 'Download path')
98
- .action(async (number, options) => {
99
- const { downloadCommand } = await Promise.resolve().then(() => __importStar(require('../commands/download')));
100
- await downloadCommand(parseInt(number), options.path);
101
- });
102
- program
103
- .command('update')
104
- .description('Update sources from remote config')
105
- .alias('u')
106
- .action(async () => {
107
- const { updateCommand } = await Promise.resolve().then(() => __importStar(require('../commands/update')));
108
- await updateCommand();
98
+ const openCmd = program.command('open <number>', { hidden: true });
99
+ openCmd.description('Open .torrent in browser or copy magnet to clipboard');
100
+ openCmd.action(async (number) => {
101
+ const { openInBrowser } = await Promise.resolve().then(() => __importStar(require('../commands/download')));
102
+ await openInBrowser(parseInt(number));
109
103
  });
110
- program
111
- .argument('<number>', 'Torrent number to download')
112
- .action(async (number) => {
113
- const { downloadCommand } = await Promise.resolve().then(() => __importStar(require('../commands/download')));
114
- await downloadCommand(parseInt(number));
104
+ const oCmd = program.command('o <number>');
105
+ oCmd.description('Open .torrent in browser or copy magnet to clipboard');
106
+ oCmd.action(async (number) => {
107
+ const { openInBrowser } = await Promise.resolve().then(() => __importStar(require('../commands/download')));
108
+ await openInBrowser(parseInt(number));
115
109
  });
116
110
  program.on('command:*', () => {
117
111
  console.error('Invalid command: %s\nSee --help for a list of available commands.', program.args[0]);
@@ -1 +1 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/cli/parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/cli/parser.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export declare function downloadCommand(number: number, savePath?: string): Promise<void>;
1
+ export declare function openInBrowser(number: number): Promise<void>;
2
2
  //# sourceMappingURL=download.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../../src/commands/download.ts"],"names":[],"mappings":"AAIA,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BtF"}
1
+ {"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../../src/commands/download.ts"],"names":[],"mappings":"AAKA,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+DjE"}
@@ -1,46 +1,14 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
36
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
37
4
  };
38
5
  Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.downloadCommand = downloadCommand;
6
+ exports.openInBrowser = openInBrowser;
40
7
  const display_1 = require("../cli/display");
41
8
  const engine_1 = require("../download/engine");
42
- const ora_1 = __importDefault(require("ora"));
43
- async function downloadCommand(number, savePath) {
9
+ const child_process_1 = require("child_process");
10
+ const chalk_1 = __importDefault(require("chalk"));
11
+ async function openInBrowser(number) {
44
12
  const results = (0, engine_1.getCachedResults)();
45
13
  if (results.length === 0) {
46
14
  (0, display_1.displayError)('No search results found. Run "tor-dl search <query>" first.');
@@ -51,20 +19,58 @@ async function downloadCommand(number, savePath) {
51
19
  process.exit(1);
52
20
  }
53
21
  const result = results[number - 1];
54
- (0, display_1.displayInfo)(`Downloading: ${result.name}`);
55
- (0, display_1.displayInfo)(`Source: ${result.source}`);
56
- (0, display_1.displayInfo)(`Size: ${result.size}`);
57
- (0, display_1.displayInfo)(`Seeds: ${result.seeds}\n`);
58
- const spinner = (0, ora_1.default)('Starting download...').start();
59
- try {
60
- const { downloadTorrent } = await Promise.resolve().then(() => __importStar(require('../download/engine')));
61
- await downloadTorrent(result, { savePath });
62
- spinner.succeed('Download complete!');
63
- }
64
- catch (error) {
65
- spinner.fail(`Download failed: ${error.message}`);
66
- (0, display_1.displayError)('Make sure you have a stable internet connection and sufficient disk space.');
22
+ if (!result.torrentUrl && !result.magnet) {
23
+ (0, display_1.displayError)('No .torrent URL or magnet available for this result.');
67
24
  process.exit(1);
68
25
  }
26
+ const url = result.torrentUrl || result.magnet || '';
27
+ if (url.startsWith('magnet:')) {
28
+ try {
29
+ if (process.platform === 'win32') {
30
+ (0, child_process_1.execSync)(`echo ${url} | clip`, { stdio: 'ignore' });
31
+ }
32
+ else if (process.platform === 'darwin') {
33
+ (0, child_process_1.execSync)(`echo "${url}" | pbcopy`, { stdio: 'ignore' });
34
+ }
35
+ else {
36
+ (0, child_process_1.execSync)(`echo "${url}" | xclip -selection clipboard`, { stdio: 'ignore' });
37
+ }
38
+ (0, display_1.displaySuccess)('Magnet link copied to clipboard!');
39
+ console.log(chalk_1.default.gray(url));
40
+ }
41
+ catch {
42
+ (0, display_1.displayInfo)('Magnet link:');
43
+ console.log(chalk_1.default.cyan(url));
44
+ }
45
+ }
46
+ else {
47
+ (0, display_1.displayInfo)('Opening: ' + url);
48
+ const cmd = process.platform === 'win32' ? `start "" "${url}"` :
49
+ process.platform === 'darwin' ? `open "${url}"` :
50
+ `xdg-open "${url}"`;
51
+ (0, child_process_1.exec)(cmd, (err) => {
52
+ if (err) {
53
+ try {
54
+ if (process.platform === 'win32') {
55
+ (0, child_process_1.execSync)(`echo ${url} | clip`, { stdio: 'ignore' });
56
+ }
57
+ else if (process.platform === 'darwin') {
58
+ (0, child_process_1.execSync)(`echo "${url}" | pbcopy`, { stdio: 'ignore' });
59
+ }
60
+ else {
61
+ (0, child_process_1.execSync)(`echo "${url}" | xclip -selection clipboard`, { stdio: 'ignore' });
62
+ }
63
+ (0, display_1.displaySuccess)('URL copied to clipboard!');
64
+ }
65
+ catch {
66
+ (0, display_1.displayError)('Failed to open. Copy this URL manually:');
67
+ console.log(chalk_1.default.cyan(url));
68
+ }
69
+ }
70
+ else {
71
+ (0, display_1.displaySuccess)('Opened in browser');
72
+ }
73
+ });
74
+ }
69
75
  }
70
76
  //# sourceMappingURL=download.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"download.js","sourceRoot":"","sources":["../../src/commands/download.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,0CA+BC;AAnCD,4CAA2E;AAC3E,+CAAsD;AACtD,8CAAsB;AAEf,KAAK,UAAU,eAAe,CAAC,MAAc,EAAE,QAAiB;IACrE,MAAM,OAAO,GAAG,IAAA,yBAAgB,GAAE,CAAC;IAEnC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,IAAA,sBAAY,EAAC,6DAA6D,CAAC,CAAC;QAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAC1C,IAAA,sBAAY,EAAC,oDAAoD,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QACpF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEnC,IAAA,qBAAW,EAAC,gBAAgB,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3C,IAAA,qBAAW,EAAC,WAAW,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACxC,IAAA,qBAAW,EAAC,SAAS,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACpC,IAAA,qBAAW,EAAC,UAAU,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;IAExC,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,sBAAsB,CAAC,CAAC,KAAK,EAAE,CAAC;IAEpD,IAAI,CAAC;QACH,MAAM,EAAE,eAAe,EAAE,GAAG,wDAAa,oBAAoB,GAAC,CAAC;QAC/D,MAAM,eAAe,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,oBAAoB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAClD,IAAA,sBAAY,EAAC,4EAA4E,CAAC,CAAC;QAC3F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"download.js","sourceRoot":"","sources":["../../src/commands/download.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,4 @@
1
- import { TorrentResult, DownloadOptions } from '../types';
1
+ import { TorrentResult } from '../types';
2
2
  export declare function cacheResults(results: TorrentResult[]): void;
3
3
  export declare function getCachedResults(): TorrentResult[];
4
- export declare function downloadTorrent(result: TorrentResult, options?: DownloadOptions): Promise<void>;
5
- export declare function downloadByNumber(number: number, savePath?: string): Promise<void>;
6
4
  //# sourceMappingURL=engine.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/download/engine.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAwB1D,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,IAAI,CAG3D;AAED,wBAAgB,gBAAgB,IAAI,aAAa,EAAE,CAKlD;AAED,wBAAsB,eAAe,CACnC,MAAM,EAAE,aAAa,EACrB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAgGf;AAuBD,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAaf"}
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/download/engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAuBzC,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,IAAI,CAG3D;AAED,wBAAgB,gBAAgB,IAAI,aAAa,EAAE,CAKlD"}