From 09bd408c284771224db5665d937b62d6c36759fb Mon Sep 17 00:00:00 2001 From: Gergely Imreh Date: Thu, 27 Jan 2011 13:02:51 +0800 Subject: [PATCH] Set downloaded file's time stamp from last-modified header This file stamp setting is very relaxed. If there's any problem along the way (no last-modified header, bad time string format, no time set privileges,...) or if nothing is downloaded (e.g. using resumed download but the file was already complete) then nothing is done. --- youtube-dl | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/youtube-dl b/youtube-dl index be859a5a1c..e28788e3c9 100755 --- a/youtube-dl +++ b/youtube-dl @@ -9,6 +9,7 @@ import cookielib import ctypes import datetime +import email.utils import gzip import htmlentitydefs import httplib @@ -117,6 +118,14 @@ def sanitize_open(filename, open_mode): stream = open(filename, open_mode) return (stream, filename) +def timeconvert(timestr): + """Convert RFC 2822 defined time string into system timestamp""" + timestamp = None + timetuple = email.utils.parsedate_tz(timestr) + if timetuple is not None: + timestamp = email.utils.mktime_tz(timetuple) + return timestamp + class DownloadError(Exception): """Download Error exception. @@ -748,6 +757,15 @@ class FileDownloader(object): if data_len is not None and byte_counter != data_len: raise ContentTooShortError(byte_counter, long(data_len)) self.try_rename(tmpfilename, filename) + # Update file modification time + timestr = data.info().get('last-modified', None) + if timestr is not None: + filetime = timeconvert(timestr) + if filetime is not None: + try: + os.utime(filename,(time.time(), filetime)) + except: + pass return True class InfoExtractor(object):