hi there,

i really like to have downloaded contents to have the same mtime as remote
file (when provided in Last-Modified header, for example).  cclive seems to
lack this option right now.  i've created a simple patch (against v0.7.11,
but should not be hard to adopt to 0.9+ i guess), have a look.  i've been
using it for some time now, seems to work fine.

%%%
--- orig/cclive-0.7.11/src/cc/file.cpp  2012-12-12 21:12:49.000000000 +0800
+++ mtime/cclive-0.7.11/src/cc/file.cpp 2013-07-20 16:20:30.000000000 +0800
@@ -201,6 +201,9 @@ bool file::write(const quvi::query& q,
   curl_off_t resume_from = static_cast<curl_off_t>(_initial_length);
   curl_easy_setopt(curl, CURLOPT_RESUME_FROM_LARGE, resume_from);
 
+  if (map.count("timestamp"))
+    curl_easy_setopt(curl, CURLOPT_FILETIME, 1L);
+
   curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT,
                    map["connect-timeout"].as<int>());
 
@@ -233,6 +236,7 @@ bool file::write(const quvi::query& q,
   curl_easy_setopt(curl, CURLOPT_HEADER, 1L);
   curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L);
   curl_easy_setopt(curl, CURLOPT_RESUME_FROM_LARGE, 0L);
+  curl_easy_setopt(curl, CURLOPT_FILETIME, 0L);
   curl_easy_setopt(curl,
                    CURLOPT_MAX_RECV_SPEED_LARGE,
                    static_cast<curl_off_t>(0L));
@@ -240,6 +244,18 @@ bool file::write(const quvi::query& q,
   out.flush();
   out.close();
 
+  if (map.count("timestamp")) {
+    // Ask libcurl if we got a remote file time
+    long filetime = -1;
+    curl_easy_getinfo(curl, CURLINFO_FILETIME, &filetime);
+    if (filetime >= 0) {
+      struct timeval times[2];
+      times[0].tv_sec = times[1].tv_sec = (time_t)filetime;
+      times[0].tv_usec = times[1].tv_usec = (suseconds_t)0;
+      utimes(_path.c_str(), times);
+    }
+  }
+
   long resp_code = 0;
   long conn_code = 0;
 
--- orig/cclive-0.7.11/src/cc/options.cpp       2012-12-12 21:12:49.000000000 
+0800
+++ mtime/cclive-0.7.11/src/cc/options.cpp      2013-07-20 15:57:45.000000000 
+0800
@@ -89,6 +89,8 @@ void options::exec(int argc, char **argv
    "Download media format")
   ("continue,c",
    "Resume partially downloaded media")
+  ("timestamp,N",
+   "Try to preserve modification time")
   ("overwrite,W",
    "Overwrite existing media")
   ("output-file,O",
%%%

./danfe

------------------------------------------------------------------------------
See everything from the browser to the database with AppDynamics
Get end-to-end visibility with application monitoring from AppDynamics
Isolate bottlenecks and diagnose root cause in seconds.
Start your free trial of AppDynamics Pro today!
http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk
_______________________________________________
cclive-devel mailing list
cclive-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/cclive-devel

Reply via email to