[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdebase/workspace
From:       John Layt <john () layt ! net>
Date:       2010-06-10 21:42:20
Message-ID: 20100610214220.45C79AC8CF () svn ! kde ! org
[Download RAW message or body]

SVN commit 1136834 by jlayt:

Fix data engine to return all holidays without using a multi hash which caused
a memory 'leak'.

See http://reviewboard.kde.org/r/4273/



 M  +8 -6      libs/plasmaclock/calendartable.cpp  
 M  +4 -3      plasma/generic/dataengines/calendar/calendarengine.cpp  
 M  +7 -6      plasma/generic/dataengines/calendar/calendarengine.h  


--- trunk/KDE/kdebase/workspace/libs/plasmaclock/calendartable.cpp #1136833:1136834
@@ -22,6 +22,7 @@
 
 //Qt
 #include <QtCore/QDate>
+#include <QtCore/QListIterator>
 #include <QtGui/QPainter>
 #include <QtGui/QWidget>
 #include <QtGui/QGraphicsSceneWheelEvent>
@@ -579,14 +580,15 @@
     // Just fetch the days displayed in the grid
     QDate startDate = d->dateFromRowColumn(0, 0);
     QDate endDate = d->dateFromRowColumn(DISPLAYED_WEEKS - 1, d->daysInWeek - 1);
-    Plasma::DataEngine::Data holidays = d->dataEngine->query("holidays:" + holidaysRegion() + ':'
-                                                             + startDate.toString(Qt::ISODate) + ':'
-                                                             + endDate.toString(Qt::ISODate));
+    QString queryString = "holidays:" + holidaysRegion() + ':' + startDate.toString(Qt::ISODate)
+                          + ':' + endDate.toString(Qt::ISODate);
+    QList<QVariant> holidays = d->dataEngine->query(queryString).value(queryString).toList();
 
-    Plasma::DataEngine::DataIterator i(holidays);
+    QMutableListIterator<QVariant> i(holidays);
     while (i.hasNext()) {
-        i.next();
-        addHoliday(QDate::fromString(i.key(), Qt::ISODate), i.value().toHash());
+        Plasma::DataEngine::Data holidayData = i.next().toHash();
+        QDate holidayDate = QDate::fromString(holidayData.take("date").toString(), Qt::ISODate);
+        addHoliday(holidayDate, holidayData);
     }
 }
 
--- trunk/KDE/kdebase/workspace/plasma/generic/dataengines/calendar/calendarengine.cpp #1136833:1136834
@@ -259,10 +259,11 @@
             holidays = region->holidays(startDate, endDate);
         }
 
-        Plasma::DataEngine::Data data;
+        QList<QVariant> holidayList;
         foreach (const KHolidays::Holiday &holiday, holidays) {
             if (!holiday.text().isEmpty()) {
                 Plasma::DataEngine::Data holidayData;
+                holidayData.insert("date", holiday.date().toString(Qt::ISODate));
                 holidayData.insert("name", holiday.text());
                 // It's a blunt tool for now, we only know if it's a full public holiday or not
                 if ( holiday.dayType() == KHolidays::Holiday::NonWorkday ) {
@@ -270,11 +271,11 @@
                 } else {
                     holidayData.insert("observanceType", "Other");
                 }
-                data.insertMulti(holiday.date().toString(Qt::ISODate), holidayData);
+                holidayList.append(QVariant(holidayData));
             }
         }
 
-        setData(request, data);
+        setData(request, QVariant(holidayList));
         return true;
     }
 
--- trunk/KDE/kdebase/workspace/plasma/generic/dataengines/calendar/calendarengine.h #1136833:1136834
@@ -49,14 +49,15 @@
         holidaysDefaultRegion:[regionCode]
             * Returns a QString of a sensible default Holiday Region
         holidays:[regionCode]:[YYYY-MM-DD]:[YYYY-MM-DD]
-            * Returns a list of all holidays in a Holiday Region between two given dates
-              Note that multiple holidays can be returned for each date
-              Each holiday is a pair of a QString containing the date in ISO format and a Data
-              containing value pairs for "name" and "observanceType"
+            * Returns a QList of all holidays in a Holiday Region between two given dates.
+              Note that multiple holidays can be returned for each date.
+              Each holiday is a Data containing string value pairs for "date", "name" and
+              "observanceType".  The date is Gregorian in ISO format. The "observanceType"
+              is either "PublicHoliday" or "Other".
         holidays:[regionCode]:[YYYY-MM-DD]
-            * Returns a list of all holidays  in a Holiday Region on a given day
+            * Returns a QList of all holidays  in a Holiday Region on a given day
         holidaysInMonth:[regionCode]:[YYYY-MM-DD]
-            * Returns a list of all holidays in a Holiday Region in a given month
+            * Returns a QList of all holidays in a Holiday Region in a given month
         isHoliday:[regionCode]:[YYYY-MM-DD]
             * Returns a bool if a given date is a Holiday in the given Holiday Region
         description:[regionCode]:[YYYY-MM-DD]
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic