Browse Source

Logging a warning when timezone difference is not know yet at the moment it's needed to convert timestamps from FTP LIST command

Source commit: 365ff08888fa466fcb45aa1bcfa3c042b9e246c3
Martin Prikryl 9 years ago
parent
commit
17f055a342
2 changed files with 28 additions and 6 deletions
  1. 26 6
      source/core/FtpFileSystem.cpp
  2. 2 0
      source/core/FtpFileSystem.h

+ 26 - 6
source/core/FtpFileSystem.cpp

@@ -2447,17 +2447,30 @@ void __fastcall TFTPFileSystem::DoReadDirectory(TRemoteFileList * FileList)
 
   AutoDetectTimeDifference(FileList);
 
-  if ((FTimeDifference != 0) || !FUploadedTimes.empty())// optimization
+  if (!IsEmptyFileList(FileList))
   {
-    for (int Index = 0; Index < FileList->Count; Index++)
+    CheckTimeDifference();
+
+    if ((FTimeDifference != 0) || !FUploadedTimes.empty())// optimization
     {
-      ApplyTimeDifference(FileList->Files[Index]);
+      for (int Index = 0; Index < FileList->Count; Index++)
+      {
+        ApplyTimeDifference(FileList->Files[Index]);
+      }
     }
   }
 
   FLastDataSent = Now();
 }
 //---------------------------------------------------------------------------
+void __fastcall TFTPFileSystem::CheckTimeDifference()
+{
+  if (NeedAutoDetectTimeDifference())
+  {
+    FTerminal->LogEvent("Warning: Timezone difference was not detected yet, timestamps may be incorrect");
+  }
+}
+//---------------------------------------------------------------------------
 void __fastcall TFTPFileSystem::ApplyTimeDifference(TRemoteFile * File)
 {
   DebugAssert(File->Modification == File->LastAccess);
@@ -2474,6 +2487,7 @@ void __fastcall TFTPFileSystem::ApplyTimeDifference(TRemoteFile * File)
 void __fastcall TFTPFileSystem::ApplyTimeDifference(
   const UnicodeString & FileName, TDateTime & Modification, TModificationFmt & ModificationFmt)
 {
+  CheckTimeDifference();
   TRemoteFile::ShiftTimeInSeconds(Modification, ModificationFmt, FTimeDifference);
 
   if (LookupUploadModificationTime(FileName, Modification, ModificationFmt))
@@ -2520,11 +2534,17 @@ bool __fastcall TFTPFileSystem::LookupUploadModificationTime(
   return Result;
 }
 //---------------------------------------------------------------------------
+bool __fastcall TFTPFileSystem::NeedAutoDetectTimeDifference()
+{
+  return
+    FDetectTimeDifference &&
+    // Does not support MLST/MLSD, but supports MDTM at least
+    !FFileZillaIntf->UsingMlsd() && SupportsReadingFile();
+}
+//---------------------------------------------------------------------------
 void __fastcall TFTPFileSystem::AutoDetectTimeDifference(TRemoteFileList * FileList)
 {
-  if (FDetectTimeDifference &&
-      // Does not support MLST/MLSD, but supports MDTM at least
-      !FFileZillaIntf->UsingMlsd() && SupportsReadingFile())
+  if (NeedAutoDetectTimeDifference())
   {
     FTerminal->LogEvent(L"Detecting timezone difference...");
 

+ 2 - 0
source/core/FtpFileSystem.h

@@ -192,6 +192,8 @@ protected:
   void __fastcall ApplyTimeDifference(TRemoteFile * File);
   void __fastcall ApplyTimeDifference(
     const UnicodeString & FileName, TDateTime & Modification, TModificationFmt & ModificationFmt);
+  void __fastcall CheckTimeDifference();
+  bool __fastcall NeedAutoDetectTimeDifference();
   bool __fastcall LookupUploadModificationTime(
     const UnicodeString & FileName, TDateTime & Modification, TModificationFmt ModificationFmt);
   UnicodeString __fastcall DoCalculateFileChecksum(bool UsingHashCommand, const UnicodeString & Alg, TRemoteFile * File);