|
@@ -9,6 +9,7 @@
|
|
import cookielib
|
|
import cookielib
|
|
import ctypes
|
|
import ctypes
|
|
import datetime
|
|
import datetime
|
|
|
|
+import email.utils
|
|
import gzip
|
|
import gzip
|
|
import htmlentitydefs
|
|
import htmlentitydefs
|
|
import httplib
|
|
import httplib
|
|
@@ -117,6 +118,14 @@ def sanitize_open(filename, open_mode):
|
|
stream = open(filename, open_mode)
|
|
stream = open(filename, open_mode)
|
|
return (stream, filename)
|
|
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):
|
|
class DownloadError(Exception):
|
|
"""Download Error exception.
|
|
"""Download Error exception.
|
|
|
|
|
|
@@ -748,6 +757,15 @@ class FileDownloader(object):
|
|
if data_len is not None and byte_counter != data_len:
|
|
if data_len is not None and byte_counter != data_len:
|
|
raise ContentTooShortError(byte_counter, long(data_len))
|
|
raise ContentTooShortError(byte_counter, long(data_len))
|
|
self.try_rename(tmpfilename, filename)
|
|
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
|
|
return True
|
|
|
|
|
|
class InfoExtractor(object):
|
|
class InfoExtractor(object):
|