2 * calendarmigrator.h - migrates or creates KAlarm Akonadi resources
4 * Copyright © 2011-2014 by David Jarvie <djarvie@kde.org>
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License along
17 * with this program; if not, write to the Free Software Foundation, Inc.,
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
21 #ifndef CALENDARMIGRATOR_H
22 #define CALENDARMIGRATOR_H
24 #include <kalarmcal/kacalendar.h>
26 #include <AkonadiCore/agentinstance.h>
27 #include <AkonadiCore/collection.h>
30 namespace KRES
{ class Resource
; }
31 namespace Akonadi
{ class CollectionFetchJob
; }
33 class CalendarCreator
;
34 class CalendarUpdater
;
36 using namespace KAlarmCal
;
39 * Class to migrate KResources alarm calendars from pre-Akonadi versions of
40 * KAlarm, and to create default calendar resources if none exist.
42 class CalendarMigrator
: public QObject
47 static CalendarMigrator
* instance();
49 static void execute();
50 static void updateToCurrentFormat(const Akonadi::Collection
&, bool ignoreKeepFormat
, QWidget
* parent
);
51 static bool completed() { return mCompleted
; }
52 template <class Interface
> static Interface
* getAgentInterface(const Akonadi::AgentInstance
&, QString
& errorMessage
, QObject
* parent
);
55 /** Signal emitted when a resource is about to be created, and when creation has
56 * completed (successfully or not).
57 * @param id collection ID if @p finished is true, else invalid
59 void creating(const QString
& path
, Akonadi::Collection::Id id
, bool finished
);
62 void collectionFetchResult(KJob
*);
63 void creatingCalendar(const QString
& path
);
64 void calendarCreated(CalendarCreator
*);
67 CalendarMigrator(QObject
* parent
= Q_NULLPTR
);
68 void migrateOrCreate();
69 void createDefaultResources();
70 template <class Interface
> static bool updateStorageFormat(const Akonadi::AgentInstance
&, QString
& errorMessage
, QObject
* parent
);
72 static CalendarMigrator
* mInstance
;
73 QList
<CalendarCreator
*> mCalendarsPending
; // pending calendar migration or creation jobs
74 QList
<Akonadi::CollectionFetchJob
*> mFetchesPending
; // pending collection fetch jobs for existing resources
75 CalEvent::Types mExistingAlarmTypes
; // alarm types provided by existing Akonadi resources
76 static bool mCompleted
; // execute() has completed
78 friend class CalendarUpdater
;
81 #endif // CALENDARMIGRATOR_H