DDownloader 0.3.6__py3-none-any.whl → 0.3.8__py3-none-any.whl
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.
- DDownloader/bin/N_m3u8DL-RE.exe +0 -0
- DDownloader/bin/aria2c.exe +0 -0
- DDownloader/bin/ffmpeg.exe +0 -0
- DDownloader/bin/mkvmerge.exe +0 -0
- DDownloader/bin/mp4decrypt.exe +0 -0
- DDownloader/bin/shaka-packager.exe +0 -0
- DDownloader/bin/yt-dlp.exe +0 -0
- DDownloader/modules/__init__.py +1 -1
- DDownloader/modules/banners.py +1 -1
- DDownloader/modules/downloader.py +3 -4
- DDownloader/modules/helper.py +63 -26
- {DDownloader-0.3.6.dist-info → ddownloader-0.3.8.dist-info}/METADATA +135 -127
- ddownloader-0.3.8.dist-info/RECORD +20 -0
- {DDownloader-0.3.6.dist-info → ddownloader-0.3.8.dist-info}/WHEEL +1 -2
- ddownloader-0.3.8.dist-info/entry_points.txt +3 -0
- DDownloader-0.3.6.dist-info/RECORD +0 -14
- DDownloader-0.3.6.dist-info/entry_points.txt +0 -2
- DDownloader-0.3.6.dist-info/top_level.txt +0 -1
- {DDownloader-0.3.6.dist-info → ddownloader-0.3.8.dist-info}/LICENSE +0 -0
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
DDownloader/modules/__init__.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
__version__ = "0.3.
|
1
|
+
__version__ = "0.3.8"
|
DDownloader/modules/banners.py
CHANGED
@@ -23,7 +23,7 @@ def banners():
|
|
23
23
|
stdout.write(""+Fore.YELLOW +"╔════════════════════════════════════════════════════════════════════════════╝\n")
|
24
24
|
stdout.write(""+Fore.YELLOW +"║ \x1b[38;2;255;20;147m• "+Fore.GREEN+"GITHUB "+Fore.RED+" |"+Fore.LIGHTWHITE_EX+" GITHUB.COM/THATNOTEASY "+Fore.YELLOW+"║\n")
|
25
25
|
stdout.write(""+Fore.YELLOW +"╚════════════════════════════════════════════════════════════════════════════╝\n")
|
26
|
-
print(f"{Fore.YELLOW}[DDownloader] - {Fore.GREEN}A DRM-Protected & Non-Protected Content Downloader - {Fore.RED}[V0.3.
|
26
|
+
print(f"{Fore.YELLOW}[DDownloader] - {Fore.GREEN}A DRM-Protected & Non-Protected Content Downloader - {Fore.RED}[V0.3.8] \n{Fore.RESET}")
|
27
27
|
|
28
28
|
# =========================================================================================================== #
|
29
29
|
|
@@ -61,17 +61,16 @@ class DOWNLOADER:
|
|
61
61
|
# =========================================================================================================== #
|
62
62
|
|
63
63
|
def _build_command(self):
|
64
|
-
self.binary_path = self._get_binary_path("N_m3u8DL-RE")
|
65
64
|
command = [
|
66
|
-
self.
|
65
|
+
self._get_binary_path("N_m3u8DL-RE"),
|
67
66
|
f'"{self.manifest_url}"',
|
68
|
-
'--select-video', 'BEST',
|
69
|
-
'--select-audio', 'BEST',
|
70
67
|
'-mt',
|
71
68
|
'-M', 'format=mp4',
|
72
69
|
'--save-dir', '"downloads"',
|
73
70
|
'--tmp-dir', '"downloads"',
|
74
71
|
'--del-after-done',
|
72
|
+
'--decryption-engine', '"FFMPEG"',
|
73
|
+
'--decryption-binary-path', f'"{self._get_binary_path("ffmpeg")}"',
|
75
74
|
'--save-name', f'"{self.output_name}"'
|
76
75
|
]
|
77
76
|
|
DDownloader/modules/helper.py
CHANGED
@@ -92,52 +92,89 @@ def detect_platform():
|
|
92
92
|
|
93
93
|
def get_media_info(file_path):
|
94
94
|
try:
|
95
|
-
logger.info(f"Parsing media file: {file_path}")
|
95
|
+
logger.info(f"📂 Parsing media file: {file_path}")
|
96
96
|
media_info = MediaInfo.parse(file_path)
|
97
|
-
|
97
|
+
|
98
|
+
result = {
|
99
|
+
"file_path": file_path,
|
100
|
+
"tracks": [],
|
101
|
+
"container": None,
|
102
|
+
"file_size": None,
|
103
|
+
"duration": None,
|
104
|
+
"bit_rate": None,
|
105
|
+
}
|
98
106
|
|
99
107
|
for track in media_info.tracks:
|
100
108
|
track_info = {"track_type": track.track_type}
|
101
109
|
|
102
|
-
if track.track_type == "
|
110
|
+
if track.track_type == "General":
|
111
|
+
result.update({
|
112
|
+
"container": getattr(track, "format", None),
|
113
|
+
"file_size": getattr(track, "file_size", None),
|
114
|
+
"duration": getattr(track, "duration", None),
|
115
|
+
"bit_rate": getattr(track, "overall_bit_rate", None),
|
116
|
+
"title": getattr(track, "title", None),
|
117
|
+
"encoded_application": getattr(track, "encoded_application", None),
|
118
|
+
"encoded_library": getattr(track, "encoded_library", None),
|
119
|
+
"writing_library": getattr(track, "writing_library", None),
|
120
|
+
"file_creation_date": getattr(track, "file_created_date", None),
|
121
|
+
})
|
122
|
+
|
123
|
+
elif track.track_type == "Video":
|
103
124
|
track_info.update({
|
104
|
-
"codec": track
|
105
|
-
"
|
106
|
-
"
|
107
|
-
"
|
108
|
-
"
|
109
|
-
"
|
110
|
-
"
|
125
|
+
"codec": getattr(track, "codec_id", getattr(track, "format", None)),
|
126
|
+
"codec_profile": getattr(track, "format_profile", None),
|
127
|
+
"width": getattr(track, "width", None),
|
128
|
+
"height": getattr(track, "height", None),
|
129
|
+
"frame_rate": getattr(track, "frame_rate", None),
|
130
|
+
"bit_rate": getattr(track, "bit_rate", None),
|
131
|
+
"duration": getattr(track, "duration", None),
|
132
|
+
"aspect_ratio": getattr(track, "display_aspect_ratio", None),
|
133
|
+
"hdr_format": getattr(track, "hdr_format", None),
|
134
|
+
"bit_depth": getattr(track, "bit_depth", None),
|
135
|
+
"color_space": getattr(track, "colour_primaries", None),
|
136
|
+
"color_range": getattr(track, "colour_range", None),
|
137
|
+
"color_transfer": getattr(track, "transfer_characteristics", None),
|
138
|
+
"chroma_subsampling": getattr(track, "chroma_subsampling", None),
|
111
139
|
})
|
140
|
+
|
112
141
|
elif track.track_type == "Audio":
|
113
142
|
track_info.update({
|
114
|
-
"codec": track
|
115
|
-
"
|
116
|
-
"
|
117
|
-
"
|
118
|
-
"
|
119
|
-
"
|
143
|
+
"codec": getattr(track, "codec_id", getattr(track, "format", None)),
|
144
|
+
"codec_profile": getattr(track, "format_profile", None),
|
145
|
+
"channels": getattr(track, "channel_s", None),
|
146
|
+
"sample_rate": getattr(track, "sampling_rate", None),
|
147
|
+
"bit_rate": getattr(track, "bit_rate", None),
|
148
|
+
"duration": getattr(track, "duration", None),
|
149
|
+
"language": getattr(track, "language", "Unknown"),
|
150
|
+
"compression_mode": getattr(track, "compression_mode", None),
|
151
|
+
"bit_depth": getattr(track, "bit_depth", None),
|
120
152
|
})
|
153
|
+
|
121
154
|
elif track.track_type == "Text":
|
122
155
|
track_info.update({
|
123
|
-
"
|
124
|
-
"
|
156
|
+
"format": getattr(track, "format", None),
|
157
|
+
"language": getattr(track, "language", "Unknown"),
|
158
|
+
"default": getattr(track, "default", None),
|
159
|
+
"forced": getattr(track, "forced", None),
|
160
|
+
"format_profile": getattr(track, "format_profile", None),
|
125
161
|
})
|
126
|
-
|
162
|
+
|
163
|
+
elif track.track_type == "Chapters":
|
127
164
|
track_info.update({
|
128
|
-
"
|
129
|
-
"
|
130
|
-
"duration": track.duration,
|
131
|
-
"overall_bit_rate": track.overall_bit_rate,
|
165
|
+
"title": getattr(track, "title", None),
|
166
|
+
"chapter_count": getattr(track, "part_count", None),
|
132
167
|
})
|
133
168
|
|
134
|
-
|
169
|
+
if any(value is not None for value in track_info.values()): # Avoid empty entries
|
170
|
+
result["tracks"].append(track_info)
|
135
171
|
|
136
|
-
logger.info(f"Successfully extracted media
|
172
|
+
logger.info(f"✅ Successfully extracted media info for: {file_path}")
|
137
173
|
return result
|
138
174
|
|
139
175
|
except Exception as e:
|
140
|
-
logger.error(f"Error
|
176
|
+
logger.error(f"❌ Error parsing media file '{file_path}': {e}")
|
141
177
|
return None
|
178
|
+
|
142
179
|
|
143
180
|
# =========================================================================================================== #
|
@@ -1,127 +1,135 @@
|
|
1
|
-
Metadata-Version: 2.
|
2
|
-
Name: DDownloader
|
3
|
-
Version: 0.3.
|
4
|
-
Summary: A downloader for DRM-protected content.
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
Classifier: Programming Language :: Python :: 3
|
30
|
-
Classifier: Programming Language :: Python :: 3.
|
31
|
-
Classifier: Programming Language :: Python :: 3.
|
32
|
-
Classifier: Programming Language :: Python :: 3.
|
33
|
-
Classifier:
|
34
|
-
Classifier:
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
-
|
44
|
-
-
|
45
|
-
|
46
|
-
|
47
|
-
-
|
48
|
-
|
49
|
-
##
|
50
|
-
|
51
|
-
- **
|
52
|
-
- **
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
##
|
67
|
-
-
|
68
|
-
|
69
|
-
```
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
```
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
-
|
122
|
-
|
123
|
-
```bash
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
1
|
+
Metadata-Version: 2.3
|
2
|
+
Name: DDownloader
|
3
|
+
Version: 0.3.8
|
4
|
+
Summary: A downloader for DRM-protected & Non DRM-protected content.
|
5
|
+
License: MIT License
|
6
|
+
|
7
|
+
Copyright (c) [2024] [DDownloader]
|
8
|
+
|
9
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
10
|
+
of this software and associated documentation files (the "Software"), to deal
|
11
|
+
in the Software without restriction, including without limitation the rights
|
12
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
13
|
+
copies of the Software, and to permit persons to whom the Software is
|
14
|
+
furnished to do so, subject to the following condition:
|
15
|
+
|
16
|
+
The above copyright notice and this permission notice shall be included in
|
17
|
+
all copies or substantial portions of the Software.
|
18
|
+
|
19
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
20
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
21
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
22
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
23
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
24
|
+
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
25
|
+
IN THE SOFTWARE.
|
26
|
+
Author: ThatNotEasy
|
27
|
+
Author-email: apidotmy@proton.me
|
28
|
+
Requires-Python: >=3.7
|
29
|
+
Classifier: Programming Language :: Python :: 3
|
30
|
+
Classifier: Programming Language :: Python :: 3.7
|
31
|
+
Classifier: Programming Language :: Python :: 3.8
|
32
|
+
Classifier: Programming Language :: Python :: 3.9
|
33
|
+
Classifier: Programming Language :: Python :: 3.10
|
34
|
+
Classifier: Programming Language :: Python :: 3.11
|
35
|
+
Classifier: License :: OSI Approved :: MIT License
|
36
|
+
Classifier: Operating System :: OS Independent
|
37
|
+
Requires-Dist: colorama (>=0.4.5)
|
38
|
+
Requires-Dist: coloredlogs (>=15.0)
|
39
|
+
Requires-Dist: loguru (>=0.6.0)
|
40
|
+
Requires-Dist: pymediainfo (>=6.1.0,<7.0.0)
|
41
|
+
Requires-Dist: requests (>=2.26.0)
|
42
|
+
Requires-Dist: tqdm (>=4.64.0)
|
43
|
+
Project-URL: Homepage, https://github.com/ThatNotEasy/DDownloader
|
44
|
+
Description-Content-Type: text/markdown
|
45
|
+
|
46
|
+
# DDownloader
|
47
|
+
_DDownloader is a powerful Python-based tool and library designed to download and decrypt DRM-protected content from DASH, HLS, and ISM manifests. It provides seamless support for encrypted media streams, extracting metadata and ensuring high compatibility with various DRM standards._
|
48
|
+
|
49
|
+
## Features
|
50
|
+
- **Download and Decrypt**: Supports DASH, HLS, and ISM manifests with seamless decryption using provided keys.
|
51
|
+
- **Automatic Detection**: Automatically detects manifest types (.mpd, .m3u8, .ism) and processes accordingly.
|
52
|
+
- **Media Information Extraction**: Extracts metadata (e.g., codec, resolution, duration) for .mp4 files and saves it in a `logs/` directory.
|
53
|
+
- **CLI and Library Support**: Flexible usage via command-line or Python library.
|
54
|
+
- **Detailed Logging**: Provides real-time progress and logs errors for debugging.
|
55
|
+
|
56
|
+
## Requirements
|
57
|
+
|
58
|
+
- **Python**: Version 3.7 or higher.
|
59
|
+
- **Required binaries**:
|
60
|
+
|
61
|
+
- `N_m3u8DL-RE` for downloading protected DRM content.
|
62
|
+
- `mp4decrypt` for decrypting protected media files.
|
63
|
+
- `ffmpeg` for re-encoding and muxer method
|
64
|
+
- a proper environment variable configuration for binaries.
|
65
|
+
|
66
|
+
## Installation
|
67
|
+
- Install `DDownloader` using pip:
|
68
|
+
|
69
|
+
```bash
|
70
|
+
pip install DDownloader
|
71
|
+
```
|
72
|
+
|
73
|
+
## Usage
|
74
|
+
- Download Content:
|
75
|
+
|
76
|
+
```python
|
77
|
+
from DDownloader.modules.downloader import DOWNLOADER
|
78
|
+
|
79
|
+
downloader = DOWNLOADER()
|
80
|
+
downloader.manifest_url = "https://example.com/path/to/manifest" # DASH, HLS, or ISM manifest URL
|
81
|
+
downloader.output_name = "output.mp4" # Desired output file name
|
82
|
+
downloader.decryption_keys = ["12345:678910"] # Provide decryption keys if needed
|
83
|
+
downloader.download() # Start the downloading and decryption process
|
84
|
+
```
|
85
|
+
|
86
|
+
- Extract Media Information:
|
87
|
+
|
88
|
+
```python
|
89
|
+
from DDownloader.modules.helper import get_media_info
|
90
|
+
|
91
|
+
file_path = "downloads/example.mp4"
|
92
|
+
media_info = get_media_info(file_path)
|
93
|
+
print(media_info)
|
94
|
+
```
|
95
|
+
|
96
|
+
- Re-encoding:
|
97
|
+
|
98
|
+
```python
|
99
|
+
from DDownloader.modules.downloader import DOWNLOADER
|
100
|
+
|
101
|
+
re_encode = DOWNLOADER()
|
102
|
+
quality = ["HD", "FHD", "UHD"]
|
103
|
+
input_content = "downloads/example.mp4"
|
104
|
+
output_content = "/path/to/output.mp4"
|
105
|
+
re_encode.re_encode_content(input_file=input_content,quality=quality,codec="libx265",crf=20,preset="medium")
|
106
|
+
```
|
107
|
+
|
108
|
+
## CLI Usage
|
109
|
+
- Download Media
|
110
|
+
|
111
|
+
```bash
|
112
|
+
DDownloader -u https://example.com/path/to/manifest -o output.mp4
|
113
|
+
```
|
114
|
+
|
115
|
+
- Specify Decryption Keys
|
116
|
+
|
117
|
+
```bash
|
118
|
+
DDownloader -u https://example.com/path/to/manifest -o output.mp4 -k 12345:678910
|
119
|
+
```
|
120
|
+
|
121
|
+
- Re-encoding
|
122
|
+
|
123
|
+
```bash
|
124
|
+
DDownloader -i "input.mp4" -o "output.mp4" -q "HD, FHD, UHD"
|
125
|
+
```
|
126
|
+
|
127
|
+
|
128
|
+
- Display Help
|
129
|
+
|
130
|
+
```bash
|
131
|
+
DDownloader -h
|
132
|
+
```
|
133
|
+
|
134
|
+
- 
|
135
|
+
|
@@ -0,0 +1,20 @@
|
|
1
|
+
DDownloader/__init__.py,sha256=lVZwmZNId0Dai7XBQpxglmJtIxAtZplRHDsvobL2UNo,33
|
2
|
+
DDownloader/bin/aria2c.exe,sha256=7NovO7hmaCdsPJK3Hue8N5mefFlAcJMjU_LnUnE9f6g,4840960
|
3
|
+
DDownloader/bin/ffmpeg.exe,sha256=NqWbY4tJ-ObGIvTefEyKr4RC8wE4pYiC7irz9BDl_Vw,148103168
|
4
|
+
DDownloader/bin/mkvmerge.exe,sha256=s2WkBPBuhpWPNHKXwDBfQ4vOMXLYTfxu62PbnRqK55A,19144712
|
5
|
+
DDownloader/bin/mp4decrypt.exe,sha256=JnI7mk4UduPVnUDg1aZBr4y_SWRFy8s-u_H6gG5xeOg,452096
|
6
|
+
DDownloader/bin/N_m3u8DL-RE.exe,sha256=5ck6jeDFjFCSLBeoo7q9fSGT-0Oxp_rNCxjeknTvgGE,17197568
|
7
|
+
DDownloader/bin/shaka-packager.exe,sha256=oQmfiToKeryylxsR9BiKuhXR_fS-PqPEu9W9rEsbrt8,5369344
|
8
|
+
DDownloader/bin/yt-dlp.exe,sha256=TYiozhv_gpxxZ90h6LSo7rDbFEG8JzQPCJa754HJw8A,19557107
|
9
|
+
DDownloader/main.py,sha256=7XJrLtMaw_5taymEoPfDgfQCw9K3JJmW8gScR6gVOPw,5792
|
10
|
+
DDownloader/modules/__init__.py,sha256=kd0YV9qLZ1Lpx7vbSzAMrAwjgdZJD_tInTnDqY6-nTY,21
|
11
|
+
DDownloader/modules/args_parser.py,sha256=Xc9ZzBu-QPFrBURIcq7rl8IJbrdPMy7EMWc-odVM2QU,1105
|
12
|
+
DDownloader/modules/banners.py,sha256=yiMLSbH92XXf_92g4No5i7wLF50bPyp2wuBh4rfV5Yk,5656
|
13
|
+
DDownloader/modules/downloader.py,sha256=Ul0zCB5t9DR8sx1YisP_RFzCWVWm7J8mor4rhOKudNA,7867
|
14
|
+
DDownloader/modules/helper.py,sha256=-PMfT0pd3AsXY1K_WP1mER3dpw9gJ99Y-Erque_62nQ,8242
|
15
|
+
DDownloader/modules/streamlink.py,sha256=t7aaHCnINzSFybTmAd-dvfGFQkepFHJwrOBcNxyJviY,504
|
16
|
+
ddownloader-0.3.8.dist-info/entry_points.txt,sha256=36xFMHKWyVvFKBCCMd3ctyd6tyujf685-qilrMpsA1E,53
|
17
|
+
ddownloader-0.3.8.dist-info/LICENSE,sha256=cnjTim3BMjb9cVC_b3oS41FESKLuvuDsufVHa_ymZRw,1090
|
18
|
+
ddownloader-0.3.8.dist-info/METADATA,sha256=hM7TxtkmJc31-ftcjhhTcmNhyjm7Xz-a7ILCZq9fGUI,4906
|
19
|
+
ddownloader-0.3.8.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
|
20
|
+
ddownloader-0.3.8.dist-info/RECORD,,
|
@@ -1,14 +0,0 @@
|
|
1
|
-
DDownloader/__init__.py,sha256=lVZwmZNId0Dai7XBQpxglmJtIxAtZplRHDsvobL2UNo,33
|
2
|
-
DDownloader/main.py,sha256=7XJrLtMaw_5taymEoPfDgfQCw9K3JJmW8gScR6gVOPw,5792
|
3
|
-
DDownloader/modules/__init__.py,sha256=eauHvAzEXc0aJ5xQZmFSxwn1EEN1n8i04B7G0Sk7rzI,21
|
4
|
-
DDownloader/modules/args_parser.py,sha256=Xc9ZzBu-QPFrBURIcq7rl8IJbrdPMy7EMWc-odVM2QU,1105
|
5
|
-
DDownloader/modules/banners.py,sha256=vJQF9XCbTkeoGa4kOn92PyNJw_8NRjXj6jhBBb6PDXY,5656
|
6
|
-
DDownloader/modules/downloader.py,sha256=3PJfD0sxK66IR2OPVPjsG_-iQREkBKYFlG5lNnzQ0eI,7861
|
7
|
-
DDownloader/modules/helper.py,sha256=b8h-h4_JqE02D26qBzSRW11LWhYUTnBkNIeYlWRO-ZY,5951
|
8
|
-
DDownloader/modules/streamlink.py,sha256=t7aaHCnINzSFybTmAd-dvfGFQkepFHJwrOBcNxyJviY,504
|
9
|
-
DDownloader-0.3.6.dist-info/LICENSE,sha256=cnjTim3BMjb9cVC_b3oS41FESKLuvuDsufVHa_ymZRw,1090
|
10
|
-
DDownloader-0.3.6.dist-info/METADATA,sha256=hZdSKKDaGMl7YBy1PbXAXGDynGf4neYlF4wF6qApUIQ,4730
|
11
|
-
DDownloader-0.3.6.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
12
|
-
DDownloader-0.3.6.dist-info/entry_points.txt,sha256=tCZVr_SRONlWlMFsVKgcPj3lxe9gBtWD4GuWukMv75g,54
|
13
|
-
DDownloader-0.3.6.dist-info/top_level.txt,sha256=INZYgY1vEHV1MIWTPXKJL8j8-ZXjWb8u4XLuU3S8umY,12
|
14
|
-
DDownloader-0.3.6.dist-info/RECORD,,
|
@@ -1 +0,0 @@
|
|
1
|
-
DDownloader
|
File without changes
|