[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdepim (merge)
From:       Thomas McGuire <mcguire () kde ! org>
Date:       2009-11-25 18:55:08
Message-ID: 1259175308.590430.15532.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 1054219 by tmcguire:

SVN_MERGE
Merged revisions 1047703 via svnmerge from 
svn+ssh://tmcguire@svn.kde.org/home/kde/branches/kdepim/enterprise4/kdepim

................
  r1047703 | winterz | 2009-11-11 22:21:55 +0100 (Wed, 11 Nov 2009) | 10 lines
  
  Merged revisions 1047665 via svnmerge from 
  https://svn.kde.org/home/kde/branches/kdepim/enterprise/kdepim
  
  ........
    r1047665 | tmcguire | 2009-11-11 14:12:16 -0500 (Wed, 11 Nov 2009) | 3 lines
    
    Use the correct permissions and the correct user/group when writing to the
    archive.
  ........
................


 _M            . (directory)  
 M  +64 -5     kmail/backupjob.cpp  
 M  +1 -0      kmail/backupjob.h  
 M  +2 -2      kmail/kmmainwidget.cpp  


--- trunk/KDE/kdepim/kmail/backupjob.cpp #1054218:1054219
@@ -212,6 +212,21 @@
   }
 }
 
+static int fileInfoToUnixPermissions( const QFileInfo &fileInfo )
+{
+  int perm = 0;
+  if ( fileInfo.permission( QFile::ExeOther ) ) perm += S_IXOTH;
+  if ( fileInfo.permission( QFile::WriteOther ) ) perm += S_IWOTH;
+  if ( fileInfo.permission( QFile::ReadOther ) ) perm += S_IROTH;
+  if ( fileInfo.permission( QFile::ExeGroup ) ) perm += S_IXGRP;
+  if ( fileInfo.permission( QFile::WriteGroup ) ) perm += S_IWGRP;
+  if ( fileInfo.permission( QFile::ReadGroup ) ) perm += S_IRGRP;
+  if ( fileInfo.permission( QFile::ExeOwner ) ) perm += S_IXUSR;
+  if ( fileInfo.permission( QFile::WriteOwner ) ) perm += S_IWUSR;
+  if ( fileInfo.permission( QFile::ReadOwner ) ) perm += S_IRUSR;
+  return perm;
+}
+
 void BackupJob::processCurrentMessage()
 {
   if ( mCurrentMessage ) {
@@ -219,14 +234,45 @@
     const DwString &messageDWString = mCurrentMessage->asDwString();
     const qint64 messageSize = messageDWString.size();
     const char *messageString = mCurrentMessage->asDwString().c_str();
-    QString messageName = mCurrentMessage->fileName();
+    QString messageName;
+    QFileInfo fileInfo;
     if ( messageName.isEmpty() ) {
       messageName = QString::number( mCurrentMessage->getMsgSerNum() ); // IMAP \
doesn't have filenames +      if ( mCurrentMessage->storage() ) {
+        fileInfo.setFile( mCurrentMessage->storage()->location() );
+        // TODO: what permissions etc to take when there is no storage file?
+      }
     }
+    else {
+      // TODO: What if the message is not in the "cur" directory?
+      fileInfo.setFile( mCurrentFolder->location() + "/cur/" + \
mCurrentMessage->fileName() ); +      messageName = mCurrentMessage->fileName();
+    }
+
     const QString fileName = stripRootPath( mCurrentFolder->location() ) +
                              "/cur/" + messageName;
 
-    if ( !mArchive->writeFile( fileName, "root", "root", messageString, messageSize \
) ) { +    QString user;
+    QString group;
+    mode_t permissions = 0700;
+    time_t creationTime = time( 0 );
+    time_t modificationTime = time( 0 );
+    time_t accessTime = time( 0 );
+    if ( !fileInfo.fileName().isEmpty() ) {
+      user = fileInfo.owner();
+      group = fileInfo.group();
+      permissions = fileInfoToUnixPermissions( fileInfo );
+      creationTime = fileInfo.created().toTime_t();
+      modificationTime = fileInfo.lastModified().toTime_t();
+      accessTime = fileInfo.lastRead().toTime_t();
+    }
+    else {
+      kWarning() << "Unable to find file for message " << fileName;
+    }
+
+    if ( !mArchive->writeFile( fileName, user, group,
+                               messageString, messageSize, permissions,
+                               accessTime, modificationTime, creationTime ) ) {
       abort( i18n( "Failed to write a message into the archive folder '%1'.", \
mCurrentFolder->name() ) );  return;
     }
@@ -264,6 +310,19 @@
   }
 }
 
+bool BackupJob::writeDirHelper( const QString &directoryPath, const QString \
&permissionPath ) +{
+  QFileInfo fileInfo( permissionPath );
+  QString user = fileInfo.owner();
+  QString group = fileInfo.group();
+  mode_t permissions = fileInfoToUnixPermissions( fileInfo );
+  time_t creationTime = fileInfo.created().toTime_t();
+  time_t modificationTime = fileInfo.lastModified().toTime_t();
+  time_t accessTime = fileInfo.lastRead().toTime_t();
+  return mArchive->writeDir( stripRootPath( directoryPath ), user, group, \
permissions, accessTime, +                             modificationTime, creationTime \
); +}
+
 void BackupJob::archiveNextFolder()
 {
   if ( mPendingFolders.isEmpty() ) {
@@ -282,12 +341,12 @@
   const QString folderName = mCurrentFolder->name();
   bool success = true;
   if ( hasChildren( mCurrentFolder ) ) {
-    if ( !mArchive->writeDir( stripRootPath( mCurrentFolder->subdirLocation() ), \
"root", "root" ) ) +    if ( !writeDirHelper( mCurrentFolder->subdirLocation(), \
mCurrentFolder->subdirLocation() ) )  success = false;
   }
-  if ( !mArchive->writeDir( stripRootPath( mCurrentFolder->location() ), "root", \
"root" ) ) +  if ( !writeDirHelper( mCurrentFolder->location(), \
mCurrentFolder->location() ) )  success = false;
-  if ( !mArchive->writeDir( stripRootPath( mCurrentFolder->location() ) + "/cur", \
"root", "root" ) ) +  if ( !writeDirHelper( mCurrentFolder->location() + "/cur", \
mCurrentFolder->location() ) )  success = false;
   if ( !success ) {
     abort( i18n( "Unable to create folder structure for folder '%1' within archive \
                file.",
--- trunk/KDE/kdepim/kmail/backupjob.h #1054218:1054219
@@ -64,6 +64,7 @@
     bool hasChildren( KMFolder *folder ) const;
     void finish();
     void abort( const QString &errorMessage );
+    bool writeDirHelper( const QString &directoryPath, const QString &permissionPath \
);  
     KUrl mMailArchivePath;
     ArchiveType mArchiveType;
--- trunk/KDE/kdepim/kmail/kmmainwidget.cpp #1054218:1054219
@@ -3791,13 +3791,13 @@
   actionCollection()->addAction("delete_folder", mRemoveFolderAction );
   connect(mRemoveFolderAction, SIGNAL(triggered(bool)), SLOT(slotRemoveFolder()));
 
-  /*mArchiveFolderAction = new KAction( i18n( "&Archive Folder..." ), this );
+  mArchiveFolderAction = new KAction( i18n( "&Archive Folder..." ), this );
   actionCollection()->addAction( "archive_folder", mArchiveFolderAction );
   connect( mArchiveFolderAction, SIGNAL(triggered(bool)), SLOT(slotArchiveFolder()) \
);  
   mImportArchiveAction = new KAction( i18n( "Import Archive..." ), this );
   actionCollection()->addAction( "import_archive", mImportArchiveAction );
-  connect( mImportArchiveAction, SIGNAL(triggered(bool)), SLOT(slotImportArchive()) \
);*/ +  connect( mImportArchiveAction, SIGNAL(triggered(bool)), \
SLOT(slotImportArchive()) );  
   mPreferHtmlAction = new KToggleAction(i18n("Prefer &HTML to Plain Text"), this);
   actionCollection()->addAction("prefer_html", mPreferHtmlAction );


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic