diff --git a/CMakeLists.txt b/CMakeLists.txt
index 6072a18ae..dec14ea11 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -157,9 +157,7 @@ set(kmailprivate_LIB_SRCS
attachmentfrompublickeyjob.cpp
mdnadvicedialog.cpp
backupjob.cpp
- importjob.cpp
archivefolderdialog.cpp
- importarchivedialog.cpp
tagging.cpp
#subscriptiondialog.cpp
diff --git a/importarchivedialog.cpp b/importarchivedialog.cpp
deleted file mode 100644
index 8b3f88045..000000000
--- a/importarchivedialog.cpp
+++ /dev/null
@@ -1,114 +0,0 @@
-/* Copyright 2009 Klarälvdalens Datakonsult AB
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2 of
- the License or (at your option) version 3 or any later version
- accepted by the membership of KDE e.V. (or its successor approved
- by the membership of KDE e.V.), which shall act as a proxy
- defined in Section 14 of version 3 of the license.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-#include "importarchivedialog.h"
-
-#include "folderrequester.h"
-#include "kmmainwidget.h"
-#include "importjob.h"
-
-#include
-
-#include
-#include
-#include
-
-#include
-#include
-
-using namespace KMail;
-
-ImportArchiveDialog::ImportArchiveDialog( QWidget *parent )
- : KDialog( parent ), mParentWidget( parent )
-{
- setObjectName( "import_archive_dialog" );
- setCaption( i18n( "Import Archive" ) );
- setButtons( Ok|Cancel );
- setDefaultButton( Ok );
- setModal( true );
- QWidget *mainWidget = new QWidget( this );
- QGridLayout *mainLayout = new QGridLayout( mainWidget );
- mainLayout->setSpacing( KDialog::spacingHint() );
- mainLayout->setMargin( KDialog::marginHint() );
- setMainWidget( mainWidget );
-
- int row = 0;
-
- // TODO: Explaination label
- // TODO: Use QFormLayout in KDE4
- // TODO: better label for "Ok" button
-
- QLabel *folderLabel = new QLabel( i18n( "&Folder:" ), mainWidget );
- mainLayout->addWidget( folderLabel, row, 0 );
- mFolderRequester = new FolderRequester( mainWidget );
- folderLabel->setBuddy( mFolderRequester );
- mainLayout->addWidget( mFolderRequester, row, 1 );
- row++;
-
- QLabel *fileNameLabel = new QLabel( i18n( "&Archive File:" ), mainWidget );
- mainLayout->addWidget( fileNameLabel, row, 0 );
- mUrlRequester = new KUrlRequester( mainWidget );
- mUrlRequester->setFilter( "*.tar *.zip *.tar.gz *.tar.bz2" );
- fileNameLabel->setBuddy( mUrlRequester );
- mainLayout->addWidget( mUrlRequester, row, 1 );
- row++;
-
- // TODO: what's this, tooltips
-
- mainLayout->setColumnStretch( 1, 1 );
- mainLayout->addItem( new QSpacerItem( 1, 1, QSizePolicy::Expanding, QSizePolicy::Expanding ), row, 0 );
-
- // Make it a bit bigger, else the folder requester cuts off the text too early
- resize( 500, minimumSize().height() );
-}
-
-void ImportArchiveDialog::setFolder( const Akonadi::Collection &defaultCollection )
-{
- mFolderRequester->setFolder( defaultCollection );
-}
-
-void ImportArchiveDialog::slotButtonClicked( int button )
-{
- if ( button == KDialog::Cancel ) {
- reject();
- return;
- }
- Q_ASSERT( button == KDialog::Ok );
-
- if ( !QFile::exists( mUrlRequester->url().path() ) ) {
- KMessageBox::information( this, i18n( "Please select an archive file that should be imported." ),
- i18n( "No archive file selected" ) );
- return;
- }
-
- if ( !mFolderRequester->folderCollection().isValid() ) {
- KMessageBox::information( this, i18n( "Please select the folder where the archive should be imported to." ),
- i18n( "No target folder selected" ) );
- return;
- }
-
- // TODO: check if url is empty. or better yet, disable ok button until file is chosen
-
- ImportJob *importJob = new KMail::ImportJob( mParentWidget );
- importJob->setFile( mUrlRequester->url() );
- importJob->setRootFolder( mFolderRequester->folderCollection() );
- importJob->start();
- accept();
-}
-
-#include "importarchivedialog.moc"
diff --git a/importarchivedialog.h b/importarchivedialog.h
deleted file mode 100644
index 71368f5d3..000000000
--- a/importarchivedialog.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/* Copyright 2009 Klarälvdalens Datakonsult AB
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2 of
- the License or (at your option) version 3 or any later version
- accepted by the membership of KDE e.V. (or its successor approved
- by the membership of KDE e.V.), which shall act as a proxy
- defined in Section 14 of version 3 of the license.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-#ifndef IMPORTARCHIVEDIALOG_H
-#define IMPORTARCHIVEDIALOG_H
-
-#include
-
-class KUrlRequester;
-
-namespace Akonadi
-{
- class Collection;
-}
-
-namespace KMail
-{
-class FolderRequester;
-
-// TODO: Common base class for ArchiveFolderDialog and ImportArchiveDialog?
-class ImportArchiveDialog : public KDialog
-{
- Q_OBJECT
-
- public:
-
- ImportArchiveDialog( QWidget *parent );
- void setFolder( const Akonadi::Collection &defaultCollection );
-
- protected slots:
-
- /** reimp */
- virtual void slotButtonClicked( int button );
-
- private:
-
- QWidget *mParentWidget;
- FolderRequester *mFolderRequester;
- KUrlRequester *mUrlRequester;
-};
-
-}
-
-#endif
diff --git a/importjob.cpp b/importjob.cpp
deleted file mode 100644
index 5503ef324..000000000
--- a/importjob.cpp
+++ /dev/null
@@ -1,328 +0,0 @@
-/* Copyright 2009 Klarälvdalens Datakonsult AB
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2 of
- the License or (at your option) version 3 or any later version
- accepted by the membership of KDE e.V. (or its successor approved
- by the membership of KDE e.V.), which shall act as a proxy
- defined in Section 14 of version 3 of the license.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-#include "importjob.h"
-
-#include "progressmanager.h"
-
-#include
-#include
-#include
-#include
-#include
-
-#include
-#include
-#include
-#include
-#include
-#include
-
-#include
-#include
-
-using namespace KMail;
-using namespace Akonadi;
-
-ImportJob::ImportJob( QWidget *parentWidget )
- : QObject( parentWidget ),
- mArchive( 0 ),
- mRootFolder( 0 ),
- mParentWidget( parentWidget ),
- mNumberOfImportedMessages( 0 ),
- mProgressItem( 0 ),
- mAborted( false )
-{
-}
-
-ImportJob::~ImportJob()
-{
- if ( mArchive && mArchive->isOpen() ) {
- mArchive->close();
- }
- delete mArchive;
- mArchive = 0;
-}
-
-void ImportJob::setFile( const KUrl &archiveFile )
-{
- mArchiveFile = archiveFile;
-}
-
-void ImportJob::setRootFolder( const Collection &rootFolder )
-{
- mRootFolder = rootFolder;
-}
-
-void ImportJob::finish()
-{
- kDebug() << "Finished import job.";
- mProgressItem->setComplete();
- mProgressItem = 0;
- QString text = i18n( "Importing the archive file '%1' into the folder '%2' succeeded.",
- mArchiveFile.path(), mRootFolder.name() );
- text += '\n' + i18np( "1 message was imported.", "%1 messages were imported.", mNumberOfImportedMessages );
- KMessageBox::information( mParentWidget, text, i18n( "Import finished." ) );
- deleteLater();
-}
-
-void ImportJob::cancelJob()
-{
- abort( i18n( "The operation was canceled by the user." ) );
-}
-
-void ImportJob::abort( const QString &errorMessage )
-{
- if ( mAborted )
- return;
-
- mAborted = true;
- QString text = i18n( "Failed to import the archive into folder '%1'.", mRootFolder.name() );
- text += '\n' + errorMessage;
- if ( mProgressItem ) {
- mProgressItem->setComplete();
- mProgressItem = 0;
- // The progressmanager will delete it
- }
- KMessageBox::sorry( mParentWidget, text, i18n( "Importing archive failed." ) );
- deleteLater();
-}
-
-void ImportJob::enqueueMessages( const KArchiveDirectory *dir, const Collection &folder )
-{
- const KArchiveDirectory *messageDir = dynamic_cast( dir->entry( "cur" ) );
- if ( messageDir ) {
- Messages messagesToQueue;
- messagesToQueue.parent = folder;
- const QStringList entries = messageDir->entries();
- for ( int i = 0; i < entries.size(); i++ ) {
- const KArchiveEntry *entry = messageDir->entry( entries[i] );
- Q_ASSERT( entry );
- if ( entry->isDirectory() ) {
- kWarning() << "Unexpected subdirectory in archive folder " << dir->name();
- }
- else {
- kDebug() << "Queueing message " << entry->name();
- const KArchiveFile *file = static_cast( entry );
- messagesToQueue.files.append( file );
- }
- }
- mQueuedMessages.append( messagesToQueue );
- }
- else {
- kWarning() << "No 'cur' subdirectory for archive directory " << dir->name();
- }
-}
-
-void ImportJob::importNextMessage()
-{
- if ( mAborted )
- return;
-
- if ( mQueuedMessages.isEmpty() ) {
- kDebug() << "Processed all messages in the queue.";
- mCurrentFolder = Collection();
- importNextDirectory();
- return;
- }
-
- Messages &messages = mQueuedMessages.front();
- if ( messages.files.isEmpty() ) {
- mQueuedMessages.pop_front();
- importNextMessage();
- return;
- }
-
- Collection folder = messages.parent;
- if ( folder != mCurrentFolder ) {
- kDebug() << "Processed all messages in the current folder of the queue.";
- mCurrentFolder = folder;
- kDebug() << "Current folder of queue is now: " << mCurrentFolder.name();
- mProgressItem->setStatus( i18n( "Importing folder '%1'", mCurrentFolder.name() ) );
- }
-
- const KArchiveFile *file = messages.files.first();
- Q_ASSERT( file );
- messages.files.removeFirst();
-
- KMime::Message::Ptr newMessage( new KMime::Message() );
- newMessage->setContent( file->data() );
- newMessage->parse();
-
- Akonadi::Item item;
- item.setMimeType( "message/rfc822" );
- item.setPayload( newMessage );
-
- // FIXME: Get rid of the exec()
- ItemCreateJob *job = new ItemCreateJob( item, mCurrentFolder );
- job->exec();
- if ( job->error() ) {
- abort( i18n( "Failed to add a message to the folder '%1'.", mCurrentFolder.name() ) );
- return;
- }
- else {
- mNumberOfImportedMessages++;
- kDebug() << "Added message with subject" << newMessage->subject()
- << "to folder" << mCurrentFolder.name();
- }
- QTimer::singleShot( 0, this, SLOT( importNextMessage() ) );
-}
-
-
-// Input: .inbox.directory
-// Output: inbox
-// Can also return an empty string if this is no valid dir name
-static QString folderNameForDirectoryName( const QString &dirName )
-{
- Q_ASSERT( dirName.startsWith( QLatin1String( "." ) ) );
- const QString end = ".directory";
- const int expectedIndex = dirName.length() - end.length();
- if ( dirName.toLower().indexOf( end ) != expectedIndex )
- return QString();
- QString returnName = dirName.left( dirName.length() - end.length() );
- returnName = returnName.right( returnName.length() - 1 );
- return returnName;
-}
-
-Collection ImportJob::getOrCreateSubFolder( const Collection &parentFolder,
- const QString &subFolderName )
-{
- // First, get list of subcollections and see if it already has the requested
- // folder
- // FIXME: Get rid of the exec()
- CollectionFetchJob *fetchJob = new CollectionFetchJob( parentFolder );
- fetchJob->exec();
- if ( fetchJob->error() ) {
- abort( i18n( "Unable to retrieve list of subfolders for folder '%1'", parentFolder.name() ) );
- return Collection();
- }
-
- foreach( const Collection &col, fetchJob->collections() ) {
- if ( col.name() == subFolderName )
- return col;
- }
-
- // No subcollection with this name yet, create it
- // FIXME: This does not make the new collection inherit the parent's settings
- // FIXME: Get rid of the exec()
- Collection newCollection;
- newCollection.setName( subFolderName );
- newCollection.parentCollection().setId( parentFolder.id() );
- CollectionCreateJob *job = new CollectionCreateJob( newCollection );
- job->exec();
- if ( job->error() ) {
- abort( i18n( "Unable to create subfolder for folder '%1'", parentFolder.name() ) );
- return Collection();
- }
- return job->collection();
-}
-
-void ImportJob::importNextDirectory()
-{
- if ( mAborted )
- return;
-
- if ( mQueuedDirectories.isEmpty() ) {
- finish();
- return;
- }
-
- Folder folder = mQueuedDirectories.first();
- Collection currentFolder = folder.parent;
- mQueuedDirectories.pop_front();
- kDebug() << "Working on directory " << folder.archiveDir->name();
-
- QStringList entries = folder.archiveDir->entries();
- for ( int i = 0; i < entries.size(); i++ ) {
- const KArchiveEntry *entry = folder.archiveDir->entry( entries[i] );
- Q_ASSERT( entry );
- kDebug() << "Queueing entry " << entry->name();
- if ( entry->isDirectory() ) {
- const KArchiveDirectory *dir = static_cast( entry );
- if ( !dir->name().startsWith( QLatin1String( "." ) ) ) {
-
- kDebug() << "Queueing messages in folder " << entry->name();
- Collection subFolder = getOrCreateSubFolder( currentFolder, entry->name() );
- if ( !subFolder.isValid() )
- return;
-
- enqueueMessages( dir, subFolder );
- }
-
- // Entry starts with a dot, so we assume it is a subdirectory
- else {
-
- const QString folderName = folderNameForDirectoryName( entry->name() );
- if ( folderName.isEmpty() ) {
- abort( i18n( "Unexpected subdirectory named '%1'.", entry->name() ) );
- return;
- }
- Collection subFolder = getOrCreateSubFolder( currentFolder, folderName );
- if ( !subFolder.isValid() )
- return;
-
- Folder newFolder;
- newFolder.archiveDir = dir;
- newFolder.parent = subFolder;
- kDebug() << "Enqueueing directory " << entry->name();
- mQueuedDirectories.push_back( newFolder );
- }
- }
- }
-
- importNextMessage();
-}
-
-void ImportJob::start()
-{
- Q_ASSERT( mRootFolder.isValid() );
- Q_ASSERT( mArchiveFile.isValid() );
-
- KMimeType::Ptr mimeType = KMimeType::findByUrl( mArchiveFile, 0, true /* local file */ );
- if ( !mimeType->patterns().filter( "tar", Qt::CaseInsensitive ).isEmpty() )
- mArchive = new KTar( mArchiveFile.path() );
- else if ( !mimeType->patterns().filter( "zip", Qt::CaseInsensitive ).isEmpty() )
- mArchive = new KZip( mArchiveFile.path() );
- else {
- abort( i18n( "The file '%1' does not appear to be a valid archive.", mArchiveFile.path() ) );
- return;
- }
-
- if ( !mArchive->open( QIODevice::ReadOnly ) ) {
- abort( i18n( "Unable to open archive file '%1'", mArchiveFile.path() ) );
- return;
- }
-
- mProgressItem = KPIM::ProgressManager::createProgressItem(
- "ImportJob",
- i18n( "Importing Archive" ),
- QString(),
- true );
- mProgressItem->setUsesBusyIndicator( true );
- connect( mProgressItem, SIGNAL(progressItemCanceled(KPIM::ProgressItem*)),
- this, SLOT(cancelJob()) );
-
- Folder nextFolder;
- nextFolder.archiveDir = mArchive->directory();
- nextFolder.parent = mRootFolder;
- mQueuedDirectories.push_back( nextFolder );
-
- importNextDirectory();
-}
-
-#include "importjob.moc"
diff --git a/importjob.h b/importjob.h
deleted file mode 100644
index 7766d8e8a..000000000
--- a/importjob.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/* Copyright 2009 Klarälvdalens Datakonsult AB
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2 of
- the License or (at your option) version 3 or any later version
- accepted by the membership of KDE e.V. (or its successor approved
- by the membership of KDE e.V.), which shall act as a proxy
- defined in Section 14 of version 3 of the license.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-#ifndef IMPORTJOB_H
-#define IMPORTJOB_H
-
-#include
-
-#include
-
-#include
-#include
-
-class QWidget;
-class KArchive;
-class KArchiveDirectory;
-class KArchiveFile;
-
-namespace KPIM
-{
- class ProgressItem;
-}
-
-namespace KMail
-{
-
-/**
- * Imports an archive that was previously backed up with an BackupJob.
- * This job will re-create the folder structure, under the root folder given in setRootFolder().
- *
- * The job deletes itself after it finished.
- */
-class ImportJob : public QObject
-{
- Q_OBJECT
-
- public:
-
- explicit ImportJob( QWidget *parentWidget = 0 );
- ~ImportJob();
- void start();
- void setFile( const KUrl &archiveFile );
- void setRootFolder( const Akonadi::Collection &rootFolder );
-
- private slots:
-
- void importNextMessage();
- void cancelJob();
-
- private:
-
- struct Folder
- {
- Akonadi::Collection parent;
- const KArchiveDirectory *archiveDir;
- };
-
- struct Messages
- {
- Akonadi::Collection parent;
- QList files;
- };
-
- void finish();
- void abort( const QString &errorMessage );
- void queueFolders();
- void importNextDirectory();
-
- Akonadi::Collection getOrCreateSubFolder( const Akonadi::Collection &parentFolder,
- const QString &subFolderName );
- void enqueueMessages( const KArchiveDirectory *dir, const Akonadi::Collection &folder );
-
- KArchive *mArchive;
-
- // The root folder which the user has selected as the folder to which everything should be
- // imported
- Akonadi::Collection mRootFolder;
-
- QWidget *mParentWidget;
- KUrl mArchiveFile;
- int mNumberOfImportedMessages;
-
- // List of archive folders with their corresponding KMail parent folder that are awaiting
- // processing
- QList mQueuedDirectories;
-
- // List of list of messages and their parent folders which are awaiting processing
- QList mQueuedMessages;
-
- // The folder to which we are currently importing messages
- Akonadi::Collection mCurrentFolder;
-
- KPIM::ProgressItem *mProgressItem;
- bool mAborted;
-};
-
-}
-
-#endif
diff --git a/kmkernel.cpp b/kmkernel.cpp
index 23e495484..0e34b8edf 100644
--- a/kmkernel.cpp
+++ b/kmkernel.cpp
@@ -26,7 +26,6 @@ using KPIM::RecentAddresses;
#include "kmsystemtray.h"
#include "stringutil.h"
#include "messagehelper.h"
-#include "importarchivedialog.h"
#include "foldertreeview.h"
// kdepimlibs includes
@@ -1047,15 +1046,6 @@ int KMKernel::dbusAddMessage_fastImport( const QString & foldername,
return retval;
}
-void KMKernel::showImportArchiveDialog()
-{
- KMMainWidget *mainWidget = getKMMainWidget();
- KMail::ImportArchiveDialog *importDialog = new KMail::ImportArchiveDialog( mainWidget );
- importDialog->setAttribute( Qt::WA_DeleteOnClose );
- importDialog->setFolder( mainWidget->folderTreeView()->currentFolder() );
- importDialog->show();
-}
-
QStringList KMKernel::folderList() const
{
#if 0
diff --git a/kmkernel.h b/kmkernel.h
index 6f08327e3..1c8582b2b 100644
--- a/kmkernel.h
+++ b/kmkernel.h
@@ -138,7 +138,6 @@ public Q_SLOTS:
Q_SCRIPTABLE void selectFolder( const QString & folder );
Q_SCRIPTABLE QString getFolder( const QString & vpath );
- Q_SCRIPTABLE void showImportArchiveDialog();
Q_SCRIPTABLE bool canQueryClose();