diff --git a/gallery_dl/downloader/http.py b/gallery_dl/downloader/http.py index f971175f..e0839d85 100644 --- a/gallery_dl/downloader/http.py +++ b/gallery_dl/downloader/http.py @@ -151,6 +151,9 @@ class HttpDownloader(DownloaderBase): self.downloading = False if adj_ext: pathfmt.set_extension(adj_ext) + filetime = response.headers.get("Last-Modified") + if filetime: + pathfmt.keywords["_filetime"] = filetime return True def receive(self, response, file): diff --git a/gallery_dl/util.py b/gallery_dl/util.py index 1c2b1606..b7b6253d 100644 --- a/gallery_dl/util.py +++ b/gallery_dl/util.py @@ -12,6 +12,7 @@ import re import os import sys import json +import time import shutil import string import _string @@ -19,6 +20,7 @@ import sqlite3 import datetime import operator import itertools +import email.utils import urllib.parse from . import text, exception @@ -613,17 +615,23 @@ class PathFormat(): os.unlink(self.temppath) return - if self.temppath == self.realpath: - return + if self.temppath != self.realpath: + # move temp file to its actual location + try: + os.replace(self.temppath, self.realpath) + except OSError: + shutil.copyfile(self.temppath, self.realpath) + os.unlink(self.temppath) - try: - os.replace(self.temppath, self.realpath) - return - except OSError: - pass - - shutil.copyfile(self.temppath, self.realpath) - os.unlink(self.temppath) + if "_filetime" in self.keywords: + # try to set file times + try: + filetime = email.utils.mktime_tz(email.utils.parsedate_tz( + self.keywords["_filetime"])) + if filetime: + os.utime(self.realpath, (time.time(), filetime)) + except Exception: + pass @staticmethod def adjust_path(path):