[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [kdepim] 0f76528: Make kalarmdir resource naming work. Fix debug are
From: David Jarvie <djarvie () kde ! org>
Date: 2011-01-13 22:20:20
Message-ID: 20110113222020.98461A6090 () git ! kde ! org
[Download RAW message or body]
commit 0f76528b4c1dfc12ded226dced67d2f5e8a75690
branch master
Author: David Jarvie <djarvie@kde.org>
Date: Thu Jan 13 22:15:49 2011 +0000
Make kalarmdir resource naming work.
Fix debug areas.
diff --git a/kalarm/akonadi/CMakeLists.txt b/kalarm/akonadi/CMakeLists.txt
index a147178..309270f 100644
--- a/kalarm/akonadi/CMakeLists.txt
+++ b/kalarm/akonadi/CMakeLists.txt
@@ -31,6 +31,7 @@ include_directories(
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${KDE4_ENABLE_EXCEPTIONS}")
########### next target ###############
+add_definitions(-DKDE_DEFAULT_DEBUG_AREA=5954)
set(akonadi_serializer_kalarm_SRCS
akonadi_serializer_kalarm.cpp
diff --git a/kalarm/akonadi/common/kalarmresourcecommon.cpp \
b/kalarm/akonadi/common/kalarmresourcecommon.cpp index 0b3e62d..cd375ca 100644
--- a/kalarm/akonadi/common/kalarmresourcecommon.cpp
+++ b/kalarm/akonadi/common/kalarmresourcecommon.cpp
@@ -177,14 +177,7 @@ KAEvent checkItemChanged(const Akonadi::Item& item, \
KAlarm::Calendar::Compat cal }
/******************************************************************************
-* Retrieve all events from the calendar, and set each into a new item's
-* payload. Items are identified by their remote IDs. The Akonadi ID is not
-* used.
-* Signal the retrieval of the items by calling itemsRetrieved(items), which
-* updates Akonadi with any changes to the items. itemsRetrieved() compares
-* the new and old items, matching them on the remoteId(). If the flags or
-* payload have changed, or the Item has any new Attributes, the Akonadi
-* storage is updated.
+* Set a collection's compatibility attribute.
*/
void setCollectionCompatibility(const Collection& collection, \
KAlarm::Calendar::Compat compatibility) {
@@ -195,6 +188,7 @@ void setCollectionCompatibility(const Collection& collection, \
KAlarm::Calendar::
CollectionModifyJob* job = new CollectionModifyJob(col, \
Private::mInstance->parent());
Private::mInstance->connect(job, SIGNAL(result(KJob*)), \
SLOT(modifyCollectionJobDone(KJob*))); }
+
/******************************************************************************
* Return an error message common to more than one resource.
*/
diff --git a/kalarm/akonadi/kalarm/CMakeLists.txt \
b/kalarm/akonadi/kalarm/CMakeLists.txt index 142de23..e9248af 100644
--- a/kalarm/akonadi/kalarm/CMakeLists.txt
+++ b/kalarm/akonadi/kalarm/CMakeLists.txt
@@ -29,6 +29,7 @@ include_directories(
)
########### next target ###############
+add_definitions(-DKDE_DEFAULT_DEBUG_AREA=5952)
add_definitions( -DSETTINGS_NAMESPACE=Akonadi_KAlarm_Resource )
set(kalarmresource_SRCS
diff --git a/kalarm/akonadi/kalarm/kalarmresource.cpp \
b/kalarm/akonadi/kalarm/kalarmresource.cpp index 5a28fc3..0aa248f1 100644
--- a/kalarm/akonadi/kalarm/kalarmresource.cpp
+++ b/kalarm/akonadi/kalarm/kalarmresource.cpp
@@ -47,7 +47,7 @@ KAlarmResource::KAlarmResource(const QString& id)
: ICalResourceBase(id),
mCompatibility(KAlarm::Calendar::Incompatible)
{
- kDebug(5950) << id;
+ kDebug() << id;
KAlarmResourceCommon::initialise(this);
initialise(KAlarmResourceCommon::mimeTypes(id), "kalarm");
}
diff --git a/kalarm/akonadi/kalarmdir/CMakeLists.txt \
b/kalarm/akonadi/kalarmdir/CMakeLists.txt index 2f3db71..b0b8fde 100644
--- a/kalarm/akonadi/kalarmdir/CMakeLists.txt
+++ b/kalarm/akonadi/kalarmdir/CMakeLists.txt
@@ -7,6 +7,7 @@ include_directories(
)
########### next target ###############
+add_definitions(-DKDE_DEFAULT_DEBUG_AREA=5953)
add_definitions( -DSETTINGS_NAMESPACE=Akonadi_KAlarm_Dir_Resource )
set(kalarmdirresource_SRCS
diff --git a/kalarm/akonadi/kalarmdir/kalarmdirresource.cpp \
b/kalarm/akonadi/kalarmdir/kalarmdirresource.cpp index 5f03ba4..a171bcc 100644
--- a/kalarm/akonadi/kalarmdir/kalarmdirresource.cpp
+++ b/kalarm/akonadi/kalarmdir/kalarmdirresource.cpp
@@ -48,6 +48,7 @@
using namespace Akonadi;
using namespace KCalCore;
using namespace Akonadi_KAlarm_Dir_Resource;
+using KAlarm::CollectionAttribute;
using KAlarmResourceCommon::errorMessage;
@@ -56,31 +57,30 @@ KAlarmDirResource::KAlarmDirResource(const QString& id)
mSettings(new Settings(componentData().config())),
mCompatibility(KAlarm::Calendar::Incompatible)
{
- kDebug(5950) << id;
+ kDebug() << id;
KAlarmResourceCommon::initialise(this);
// Set up the resource
new KAlarmDirSettingsAdaptor(mSettings);
DBusConnectionPool::threadConnection().registerObject(QLatin1String("/Settings"),
mSettings, QDBusConnection::ExportAdaptors);
+ connect(mSettings, SIGNAL(configChanged()), SLOT(settingsChanged()));
changeRecorder()->itemFetchScope().fetchFullPayload();
}
KAlarmDirResource::~KAlarmDirResource()
{
- kDebug(5950);
}
void KAlarmDirResource::aboutToQuit()
{
- kDebug(5950);
mSettings->writeConfig();
}
void KAlarmDirResource::configure(WId windowId)
{
- kDebug(5950);
+ kDebug();
SettingsDialog dlg(windowId, mSettings);
if (dlg.exec())
{
@@ -96,13 +96,39 @@ void KAlarmDirResource::configure(WId windowId)
}
}
-// Load and parse data from each file in the directory.
+/******************************************************************************
+* Called when the resource settings have changed.
+* Update the display name if it has changed.
+*/
+void KAlarmDirResource::settingsChanged()
+{
+ kDebug();
+ QString display = mSettings->displayName();
+ if (display != name())
+ setName(display);
+}
+
+/******************************************************************************
+* Load and parse data from each file in the directory.
+* The events are cached in mEvents.
+*/
bool KAlarmDirResource::loadFiles()
{
- kDebug(5950);
+ kDebug() << directoryName();
mEvents.clear();
- QDirIterator it(directoryName());
+ QDir dir(directoryName());
+
+ // Set the resource display name to the configured name, else the directory
+ // name, if not already set.
+ QString display = mSettings->displayName();
+ if (display.isEmpty() && (name().isEmpty() || name() == identifier()))
+ display = dir.dirName();
+ if (!display.isEmpty())
+ setName(display);
+
+ // Read and parse each file in turn
+ QDirIterator it(dir);
while (it.hasNext())
{
it.next();
@@ -137,8 +163,9 @@ bool KAlarmDirResource::loadFiles()
}
}
- emit status(Idle);
+ setCompatibility(false);
+ emit status(Idle);
return true;
}
@@ -150,7 +177,6 @@ bool KAlarmDirResource::loadFiles()
*/
bool KAlarmDirResource::retrieveItem(const Akonadi::Item& item, const \
QSet<QByteArray>&) {
- kDebug(5950);
const QString rid = item.remoteId();
QMap<QString, KAEvent>::ConstIterator it = mEvents.constFind(rid);
if (it == mEvents.constEnd())
@@ -190,6 +216,8 @@ void KAlarmDirResource::itemAdded(const Akonadi::Item& item, \
const Akonadi::Coll return;
}
event.setCompatibility(KAlarm::Calendar::Current);
+ if (mCompatibility != KAlarm::Calendar::Current)
+ mCompatibility = KAlarm::Calendar::ByEvent;
if (!writeToFile(event))
return;
@@ -230,6 +258,8 @@ void KAlarmDirResource::itemChanged(const Akonadi::Item& item, \
const QSet<QByteA return;
}
event.setCompatibility(KAlarm::Calendar::Current);
+ if (mCompatibility != KAlarm::Calendar::Current)
+ setCompatibility();
if (!writeToFile(event))
return;
@@ -251,6 +281,9 @@ void KAlarmDirResource::itemRemoved(const Akonadi::Item& item)
mEvents.remove(item.remoteId());
QFile::remove(directoryFileName(item.remoteId()));
+ if (mCompatibility == KAlarm::Calendar::ByEvent)
+ setCompatibility();
+
changeProcessed();
}
@@ -275,6 +308,7 @@ bool KAlarmDirResource::cancelIfReadOnly()
*/
bool KAlarmDirResource::writeToFile(const KAEvent& event)
{
+ kDebug() << event.id();
Event::Ptr kcalEvent(new Event);
event.updateKCalEvent(kcalEvent, KAEvent::UID_SET);
MemoryCalendar::Ptr calendar(new MemoryCalendar(QLatin1String("UTC")));
@@ -295,11 +329,13 @@ bool KAlarmDirResource::writeToFile(const KAEvent& event)
void KAlarmDirResource::retrieveCollections()
{
+ kDebug();
Collection c;
c.setParentCollection(Collection::root());
c.setRemoteId(directoryName());
const QString display = mSettings->displayName();
- c.setName(display.isEmpty() ? name() : display );
+ c.setName(display.isEmpty() ? name() : display);
+kDebug(5950)<<"display name="<<display<<", name="<<name()<<", id="<<identifier();
c.setContentMimeTypes(KAlarmResourceCommon::mimeTypes(identifier()));
if (mSettings->readOnly())
{
@@ -319,6 +355,9 @@ void KAlarmDirResource::retrieveCollections()
attr->setDisplayName(name());
attr->setIconName("kalarm");
+ CollectionAttribute* cattr = \
c.attribute<CollectionAttribute>(Collection::AddIfMissing); + \
cattr->setCompatibility(mCompatibility); +
Collection::List list;
list << c;
collectionsRetrieved(list);
@@ -359,9 +398,12 @@ void KAlarmDirResource::retrieveItems(const Akonadi::Collection& \
collection) itemsRetrieved(items);
}
+/******************************************************************************
+* Called when the collection has been changed.
+* Set its display name if that has changed.
+*/
void KAlarmDirResource::collectionChanged(const Akonadi::Collection& collection)
{
- kDebug(5950);
QString newName;
EntityDisplayAttribute* attr = 0;
if (collection.hasAttribute<EntityDisplayAttribute>())
@@ -395,6 +437,10 @@ QString KAlarmDirResource::directoryFileName(const QString& \
file) const return mSettings->path() + QDir::separator() + file;
}
+/******************************************************************************
+* Create the directory if it doesn't already exist, and ensure that it
+* contains a WARNING_README.txt file.
+*/
void KAlarmDirResource::initializeDirectory() const
{
QDir dir(directoryName());
@@ -419,6 +465,37 @@ void KAlarmDirResource::initializeDirectory() const
}
}
+/******************************************************************************
+* Evaluate the version compatibility status of the calendar. This is either the
+* status of the individual events if they are all the same, or 'ByEvent'
+* otherwise.
+*/
+void KAlarmDirResource::setCompatibility(bool writeAttr)
+{
+ KAlarm::Calendar::Compat oldCompatibility = mCompatibility;
+ if (mEvents.isEmpty())
+ mCompatibility = KAlarm::Calendar::Current;
+ else
+ {
+ bool first = true;
+ foreach (const KAEvent& event, mEvents)
+ {
+ if (first)
+ {
+ mCompatibility = event.compatibility();
+ first = false;
+ }
+ else if (event.compatibility() != mCompatibility)
+ {
+ mCompatibility = KAlarm::Calendar::ByEvent;
+ break;
+ }
+ }
+ }
+ if (writeAttr && mCompatibility != oldCompatibility && \
currentCollection().isValid()) + \
KAlarmResourceCommon::setCollectionCompatibility(currentCollection(), \
mCompatibility); +}
+
AKONADI_AGENT_FACTORY(KAlarmDirResource, akonadi_kalarm_dir_resource)
#include "kalarmdirresource.moc"
diff --git a/kalarm/akonadi/kalarmdir/kalarmdirresource.h \
b/kalarm/akonadi/kalarmdir/kalarmdirresource.h index 59eff2b..b6e7193 100644
--- a/kalarm/akonadi/kalarmdir/kalarmdirresource.h
+++ b/kalarm/akonadi/kalarmdir/kalarmdirresource.h
@@ -50,6 +50,9 @@ class KAlarmDirResource : public Akonadi::ResourceBase, public \
Akonadi::AgentBas
virtual void itemChanged(const Akonadi::Item&, const QSet<QByteArray>& \
parts); virtual void itemRemoved(const Akonadi::Item&);
+ private Q_SLOTS:
+ void settingsChanged();
+
private:
bool loadFiles();
QString directoryName() const;
@@ -57,6 +60,7 @@ class KAlarmDirResource : public Akonadi::ResourceBase, public \
Akonadi::AgentBas void initializeDirectory() const;
bool cancelIfReadOnly();
bool writeToFile(const KAEvent&);
+ void setCompatibility(bool writeAttr = true);
QMap<QString, KAEvent> mEvents; // cached alarms, indexed by ID
Akonadi_KAlarm_Dir_Resource::Settings* mSettings;
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic