Skip to content

Commit 38982e3

Browse files
committed
Prevent repeat download in single_trailer mode
Previously there was a situation where the script would download multiple trailers, even in single_trailer mode. If a movie only had a "Trailer 2" and no "Trailer 1", the script would download "Trailer 2" in single_trailer mode. Then, if a "Trailer 1" appeared for that movie, the script would have downloaded that trailer as well. This commit changes the behavior so that if the script has downloaded any trailer for a particular movie, it will never download another trailer in single_trailer mode.
1 parent e0780dd commit 38982e3

2 files changed

Lines changed: 38 additions & 2 deletions

File tree

download_trailers.py

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,21 @@ def record_downloaded_file(filename, dl_list_path):
184184
write_downloaded_files(file_list, dl_list_path)
185185

186186

187+
def file_already_downloaded(file_list, movie_title, video_type, res,
188+
requested_types):
189+
"""Returns true if the file_list contains a file that matches the file
190+
properties."""
191+
192+
if requested_types.lower() == 'single_trailer':
193+
trailer_prefix = '{}.trailer'.format(movie_title.lower())
194+
movie_trailers = [f for f in file_list
195+
if f.lower().startswith(trailer_prefix)]
196+
return bool(movie_trailers)
197+
198+
trailer_file_name = get_trailer_filename(movie_title, video_type, res)
199+
return trailer_file_name in file_list
200+
201+
187202
def download_trailer_file(url, destdir, filename):
188203
"""Accepts a URL to a trailer video file and downloads it
189204
You have to spoof the user agent or the site will deny the request
@@ -196,7 +211,7 @@ def download_trailer_file(url, destdir, filename):
196211
existing_file_size = os.path.getsize(file_path)
197212

198213
data = None
199-
headers = {'User-Agent': 'Quick_time/7.6.2'}
214+
headers = {}
200215

201216
resume_download = False
202217
if file_exists and (existing_file_size > 0):
@@ -256,7 +271,13 @@ def download_trailers_from_page(page_url, settings):
256271
trailer_file_name = get_trailer_filename(trailer_url['title'],
257272
trailer_url['type'],
258273
trailer_url['res'])
259-
if trailer_file_name not in downloaded_files:
274+
already_downloaded = (
275+
file_already_downloaded(downloaded_files, trailer_url['title'],
276+
trailer_url['type'], trailer_url['res'],
277+
settings['video_types'])
278+
)
279+
280+
if not already_downloaded:
260281
logging.info('Downloading %s: %s', trailer_url['type'],
261282
trailer_file_name)
262283
download_trailer_file(trailer_url['url'], settings['download_dir'],

test/test_download_trailers.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,21 @@ def test_get_download_types_trailers():
167167
assert download_types == expected_types
168168

169169

170+
def test_file_already_downloaded_downloaded():
171+
download_list = [u'Film.Trailer 2.1080p.mov', u'☃.Clip.480p.mov']
172+
assert trailers.file_already_downloaded(download_list, 'Film', 'Trailer 2', '1080', 'all')
173+
174+
175+
def test_file_already_downloaded_single_trailer():
176+
download_list = [u'Film.Trailer 2.1080p.mov', u'☃.Clip.480p.mov']
177+
assert trailers.file_already_downloaded(download_list, 'Film', 'Trailer 1', '1080', 'single_trailer')
178+
179+
180+
def test_file_already_downloaded_single_trailer():
181+
download_list = [u'Film.Clip 2.1080p.mov', u'☃.Clip.480p.mov']
182+
assert not trailers.file_already_downloaded(download_list, 'Film', 'Trailer 1', '1080', 'single_trailer')
183+
184+
170185
def test_get_downloaded_files_missing_file():
171186
assert trailers.get_downloaded_files('/not/a/real/path/to/file.txt') == []
172187

0 commit comments

Comments
 (0)