[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