kopia lustrzana https://github.com/ytdl-org/youtube-dl
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.pull/65/head
rodzic
9f7963468b
commit
09bd408c28
18
youtube-dl
18
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):
|
||||
|
|
Ładowanie…
Reference in New Issue