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.
This commit is contained in:
parent
9f7963468b
commit
09bd408c28
1 changed files with 18 additions and 0 deletions
18
youtube-dl
18
youtube-dl
|
@ -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):
|
||||||
|
|
Loading…
Reference in a new issue