Better english
[kdepim.git] / importwizard / abstractsettings.cpp
blob9e5c45a0eb32742c01e75025b3bbba50f9b21be0
1 /*
2 Copyright (c) 2012 Montel Laurent <montel@kde.org>
4 This program is free software; you can redistribute it and/or modify it
5 under the terms of the GNU General Public License, version 2, as
6 published by the Free Software Foundation.
8 This program is distributed in the hope that it will be useful, but
9 WITHOUT ANY WARRANTY; without even the implied warranty of
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 General Public License for more details.
13 You should have received a copy of the GNU General Public License along
14 with this program; if not, write to the Free Software Foundation, Inc.,
15 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17 #include "abstractsettings.h"
18 #include "importwizard.h"
19 #include "importsettingpage.h"
21 #include "mailcommon/filter/filteractionmissingargumentdialog.h"
23 #include <kpimidentities/identitymanager.h>
24 #include <kpimidentities/identity.h>
25 #include <mailtransport/transportmanager.h>
27 #include <KLocale>
28 #include <KDebug>
30 #include <akonadi/agenttype.h>
31 #include <akonadi/agentmanager.h>
32 #include <akonadi/agentinstancecreatejob.h>
34 #include <QDBusReply>
35 #include <QDBusInterface>
36 #include <QMetaMethod>
38 using namespace Akonadi;
40 AbstractSettings::AbstractSettings(ImportWizard *parent)
41 :mImportWizard(parent)
43 mManager = new KPIMIdentities::IdentityManager( false, this, "mIdentityManager" );
46 AbstractSettings::~AbstractSettings()
48 delete mManager;
51 KPIMIdentities::Identity* AbstractSettings::createIdentity()
53 KPIMIdentities::Identity* identity = &mManager->newFromScratch( QString() );
54 addFilterImportInfo(i18n("Setting up identity..."));
55 return identity;
58 void AbstractSettings::storeIdentity(KPIMIdentities::Identity* identity)
60 mManager->setAsDefault( identity->uoid() );
61 mManager->commit();
62 addFilterImportInfo(i18n("Identity set up."));
66 MailTransport::Transport *AbstractSettings::createTransport()
68 MailTransport::Transport* mt = MailTransport::TransportManager::self()->createTransport();
69 return mt;
72 //code from accountwizard
73 static QVariant::Type argumentType( const QMetaObject *mo, const QString &method )
75 QMetaMethod m;
76 for ( int i = 0; i < mo->methodCount(); ++i ) {
77 const QString signature = QString::fromLatin1( mo->method( i ).signature() );
78 if ( signature.startsWith( method ) )
79 m = mo->method( i );
82 if ( !m.signature() ) {
83 kWarning() << "Did not find D-Bus method: " << method << " available methods are:";
84 const int numberOfMethod(mo->methodCount());
85 for ( int i = 0; i < numberOfMethod; ++ i )
86 kWarning() << mo->method( i ).signature();
87 return QVariant::Invalid;
90 const QList<QByteArray> argTypes = m.parameterTypes();
91 if ( argTypes.count() != 1 )
92 return QVariant::Invalid;
94 return QVariant::nameToType( argTypes.first() );
98 void AbstractSettings::createResource( const QString& resources, const QString& name, const QMap<QString, QVariant>& settings )
100 const AgentType type = AgentManager::self()->type( resources );
101 if ( !type.isValid() ) {
102 addFilterImportError( i18n( "Resource type '%1' is not available.", resources ) );
103 return;
106 // check if unique instance already exists
107 kDebug() << type.capabilities();
108 if ( type.capabilities().contains( QLatin1String( "Unique" ) ) ) {
109 foreach ( const AgentInstance &instance, AgentManager::self()->instances() ) {
110 kDebug() << instance.type().identifier() << (instance.type() == type);
111 if ( instance.type() == type ) {
112 addFilterImportInfo( i18n( "Resource '%1' is already set up.", type.name() ) );
113 return;
118 addFilterImportInfo( i18n( "Creating resource instance for '%1'...", type.name() ) );
119 AgentInstanceCreateJob *job = new AgentInstanceCreateJob( type, this );
120 if(job->exec()) {
121 Akonadi::AgentInstance instance = job->instance();
123 if ( !settings.isEmpty() ) {
124 addFilterImportInfo( i18n( "Configuring resource instance..." ) );
125 QDBusInterface iface( "org.freedesktop.Akonadi.Resource." + instance.identifier(), "/Settings" );
126 if ( !iface.isValid() ) {
127 addFilterImportError( i18n( "Unable to configure resource instance." ) );
128 return;
131 // configure resource
132 if ( !name.isEmpty() )
133 instance.setName( name );
134 QMap<QString, QVariant>::const_iterator end( settings.constEnd());
135 for ( QMap<QString, QVariant>::const_iterator it = settings.constBegin(); it != end; ++it ) {
136 kDebug() << "Setting up " << it.key() << " for agent " << instance.identifier();
137 const QString methodName = QString::fromLatin1("set%1").arg( it.key() );
138 QVariant arg = it.value();
139 const QVariant::Type targetType = argumentType( iface.metaObject(), methodName );
140 if ( !arg.canConvert( targetType ) ) {
141 addFilterImportError( i18n( "Could not convert value of setting '%1' to required type %2.", it.key(), QVariant::typeToName( targetType ) ) );
142 return;
144 arg.convert( targetType );
145 QDBusReply<void> reply = iface.call( methodName, arg );
146 if ( !reply.isValid() ) {
147 addFilterImportError( i18n( "Could not set setting '%1': %2", it.key(), reply.error().message() ) );
148 return;
151 instance.reconfigure();
154 addFilterImportError( i18n( "Resource setup completed." ) );
155 } else {
156 if ( job->error() ) {
157 addFilterImportError( i18n( "Failed to create resource instance: %1", job->errorText() ) );
163 void AbstractSettings::addFilterImportInfo( const QString& log )
165 mImportWizard->importSettingPage()->addFilterImportInfo( log );
168 void AbstractSettings::addFilterImportError( const QString& log )
170 mImportWizard->importSettingPage()->addFilterImportError( log );
174 QString AbstractSettings::adaptFolder( const QString& folder)
176 QString newFolder;
177 bool exactPath = false;
178 Akonadi::Collection::List lst = FilterActionMissingCollectionDialog::potentialCorrectFolders( folder, exactPath );
179 if ( lst.count() == 1 && exactPath )
180 newFolder = QString::number(lst.at( 0 ).id());
181 else {
182 FilterActionMissingCollectionDialog *dlg = new FilterActionMissingCollectionDialog( lst, QString(), folder );
183 if ( dlg->exec() ) {
184 newFolder = QString::number(dlg->selectedCollection().id());
186 delete dlg;
188 return newFolder;
191 #include "abstractsettings.moc"