[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