Package: eyefiserver
Version: 2.3~rc2+dfsg-1
Severity: wishlist
Tags: patch

--- Please enter the report below this line. ---

File modification times which EyeFi firmware (on Pro X2 at least) puts into the 
tarfile are in local time, not UTC as in standard tar files, so images get 
wrong 
timestamps while extracting. An attempt to correct this proposed with the 
patch.


--- System information. ---
Architecture: amd64
Kernel:       Linux 3.14.12-custom0-amd64

Debian Release: jessie/sid
  990 stable          security.debian.org 
  990 stable          kxstudio.sourceforge.net 
  990 stable          ftp.fi.debian.org 
  990 stable          dl.google.com 
  990 stable          deb.torproject.org 
  500 testing         security.debian.org 
  500 testing         ftp.fi.debian.org 
  500 testing         deb.torproject.org 
  500 lucid           ppa.launchpad.net 
  100 unstable        deb.i2p2.no 
  100 jessie-backports ftp.debian.org 

--- Package information. ---
Depends      (Version) | Installed
======================-+-===========
python                 | 2.7.8-1


Package's Recommends field is empty.

Package's Suggests field is empty.


diff -uri a/etc/eyefiserver.conf b/etc/eyefiserver.conf
--- a/etc/eyefiserver.conf	2012-10-17 19:44:55.000000000 +0600
+++ b/etc/eyefiserver.conf	2014-07-27 17:36:47.000000000 +0600
@@ -34,6 +34,11 @@
 
 use_date_from_file=no
 
+# EyeFi puts local timestamp into its tarfile instead UTC, so extracted files
+# get wrong modification time. This behavior is corrected by default.
+# If it's not what you want, put 'no' here.
+
+#correct_mtime=no
 
 # This parameter executes the specified command on each incoming file passing in
 # the full file path as the first argument.
diff -uri a/src/eyefiserver b/src/eyefiserver
--- a/src/eyefiserver	2012-10-17 19:44:55.000000000 +0600
+++ b/src/eyefiserver	2014-07-27 17:37:46.000000000 +0600
@@ -52,6 +52,7 @@
 from BaseHTTPServer import BaseHTTPRequestHandler
 import BaseHTTPServer
 import SocketServer
+import time
 
 # Default is to listen to all addresses on port 59278
 # Exemple: SERVER_ADDRESS = '127.0.0.1', 59278
@@ -680,12 +681,18 @@
         use_date_from_file = self.server.config.get(macaddress,
             'use_date_from_file', False)
 
+        correct_mtime = self.server.config.getboolean(macaddress,
+            'correct_mtime', True)
+
         # if needed, get reference date from the tar fragment
         # This is possible because the tar content is at the begining
         if use_date_from_file:
             tarinfo = imagetarfile.getmembers()[0]
             imageinfo = tarinfo.get_info(encoding=None, errors=None)
-            reference_date = datetime.fromtimestamp(imageinfo['mtime'])
+            if correct_mtime:
+                reference_date = datetime.utcfromtimestamp(imageinfo['mtime'])
+            else:
+                reference_date = datetime.fromtimestamp(imageinfo['mtime'])
         else:
             reference_date = datetime.now()
 
@@ -704,6 +711,11 @@
         imagefilename = imagetarfile.getnames()[0]
         imagetarfile.extractall(path=upload_dir)
 
+        if correct_mtime:
+            corr_mtime = time.mktime(reference_date.timetuple())
+            os.utime(os.path.join(upload_dir, imagefilename),
+                (corr_mtime, corr_mtime))
+
         eyeFiLogger.debug("Closing TAR file %s", tarpath)
         imagetarfile.close()
 

Reply via email to