1/*
2 Copyright (c) 2008 Volker Krause <vkrause@kde.org>
3
4 This library is free software; you can redistribute it and/or modify it
5 under the terms of the GNU Library General Public License as published by
6 the Free Software Foundation; either version 2 of the License, or (at your
7 option) any later version.
8
9 This library is distributed in the hope that it will be useful, but WITHOUT
10 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
12 License for more details.
13
14 You should have received a copy of the GNU Library General Public License
15 along with this library; see the file COPYING.LIB. If not, write to the
16 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
17 02110-1301, USA.
18*/
19
20#ifndef AKONADI_FIRSTRUN_P_H
21#define AKONADI_FIRSTRUN_P_H
22
23#include <QObject>
24#include <QStringList>
25#include <QVariant>
26
27class KConfig;
28class KJob;
29class KProcess;
30struct QMetaObject;
31
32namespace Akonadi {
33
34/**
35 Takes care of setting up default resource agents when running Akonadi for the first time.
36
37 <h4>Defining your own default agent setups</h4>
38
39 To add an additional agent to the default Akonadi setup, add a file with the
40 agent setup description into $KDEDIR/share/akonadi/firstrun.
41
42 Such a file looks as follows:
43
44 @verbatim
45 [Agent]
46 Id=defaultaddressbook
47 Type=akonadi_vcard_resource
48 Name=My Addressbook
49
50 [Settings]
51 Path[$e]=~/.kde/share/apps/kabc/std.ics
52 AutosaveInterval=1
53 @endverbatim
54
55 The keys in the [Agent] group are mandatory:
56 <ul>
57 <li>Id: A unique identifier of the setup description, should never change to avoid the agent
58 being set up twice.</li>
59 <li>Type: The agent type</li>
60 <li>Name: The user visible name for this agent (only used for resource agents currently)</li>
61 </ul>
62
63 The [Settings] group is optional and contains agent-dependent settings.
64 For those settings to be applied, the agent needs to export its settings
65 via D-Bus using the KConfigXT &lt;-&gt; D-Bus bridge.
66*/
67class Firstrun : public QObject
68{
69 Q_OBJECT
70public:
71 explicit Firstrun(QObject *parent = 0);
72 ~Firstrun();
73
74private:
75 void findPendingDefaults();
76 void setupNext();
77#ifndef KDEPIM_NO_KRESOURCES
78 void migrateKresType(const QString &resourceFamily);
79#endif
80 static QVariant::Type argumentType(const QMetaObject *mo, const QString &method);
81
82private Q_SLOTS:
83 void instanceCreated(KJob *job);
84#ifndef KDEPIM_NO_KRESOURCES
85 void migrationFinished(int exitCode);
86#endif
87
88private:
89 QStringList mPendingDefaults;
90 KConfig *mConfig;
91 KConfig *mCurrentDefault;
92 KProcess *mProcess;
93#ifndef KDEPIM_NO_KRESOURCES
94 QStringList mPendingKres;
95 QString mResourceFamily;
96#endif
97};
98
99}
100
101#endif
102