Blob Blame History Raw
diff --git a/dolphin/src/dolphincontextmenu.cpp b/dolphin/src/dolphincontextmenu.cpp
index bb26c7a..e706695 100644
--- a/dolphin/src/dolphincontextmenu.cpp
+++ b/dolphin/src/dolphincontextmenu.cpp
@@ -48,6 +48,7 @@
 #include <KStandardAction>
 #include <KStandardDirs>
 #include <KToolBar>
+#include <KBookmarkManager>
 
 #include <panels/places/placesitem.h>
 #include <panels/places/placesitemmodel.h>
@@ -402,14 +403,17 @@ void DolphinContextMenu::addShowMenuBarAction()
 
 bool DolphinContextMenu::placeExists(const KUrl& url) const
 {
-    PlacesItemModel model;
+    const QString file = KStandardDirs::locateLocal("data", "kfileplaces/bookmarks.xml");
+    KBookmarkManager* manager = KBookmarkManager::managerForFile(file, "kfilePlaces");
+    KBookmarkGroup group = manager->root();
 
-    const int count = model.count();
-    for (int i = 0; i < count; ++i) {
-        const KUrl placeUrl = model.placesItem(i)->url();
-        if (placeUrl.equals(url, KUrl::CompareWithoutTrailingSlash)) {
-            return true;
-        }
+    KBookmark bookmark = group.first();
+    while (!bookmark.isNull()) {
+	if (bookmark.url().equals(url, KUrl::CompareWithoutTrailingSlash)) {
+	    return true;
+	}
+
+        bookmark = group.next(bookmark);
     }
 
     return false;
diff --git a/dolphin/src/panels/places/placesitemmodel.cpp b/dolphin/src/panels/places/placesitemmodel.cpp
index 1789f18..b352712 100644
--- a/dolphin/src/panels/places/placesitemmodel.cpp
+++ b/dolphin/src/panels/places/placesitemmodel.cpp
@@ -41,6 +41,8 @@
 #include <QMimeData>
 #include <QTimer>
 
+#include <kfileplacesdevicecache.h>
+
 #include <Solid/Device>
 #include <Solid/DeviceNotifier>
 #include <Solid/OpticalDisc>
@@ -76,8 +78,6 @@ PlacesItemModel::PlacesItemModel(QObject* parent) :
     KStandardItemModel(parent),
     m_fileIndexingEnabled(false),
     m_hiddenItemsShown(false),
-    m_availableDevices(),
-    m_predicate(),
     m_bookmarkManager(0),
     m_systemBookmarks(),
     m_systemBookmarksIndexes(),
@@ -556,7 +556,7 @@ void PlacesItemModel::slotDeviceAdded(const QString& udi)
 {
     const Solid::Device device(udi);
 
-    if (!m_predicate.matches(device)) {
+    if (!KFilePlacesDeviceCache::self()->predicate().matches(device)) {
         return;
     }
 
@@ -567,10 +567,6 @@ void PlacesItemModel::slotDeviceAdded(const QString& udi)
 
 void PlacesItemModel::slotDeviceRemoved(const QString& udi)
 {
-    if (!m_availableDevices.contains(udi)) {
-        return;
-    }
-
     for (int i = 0; i < m_bookmarkedItems.count(); ++i) {
         PlacesItem* item = m_bookmarkedItems[i];
         if (item && item->udi() == udi) {
@@ -953,30 +949,13 @@ void PlacesItemModel::createSystemBookmarks()
 
 void PlacesItemModel::initializeAvailableDevices()
 {
-    QString predicate("[[[[ StorageVolume.ignored == false AND [ StorageVolume.usage == 'FileSystem' OR StorageVolume.usage == 'Encrypted' ]]"
-        " OR "
-        "[ IS StorageAccess AND StorageDrive.driveType == 'Floppy' ]]"
-        " OR "
-        "OpticalDisc.availableContent & 'Audio' ]"
-        " OR "
-        "StorageAccess.ignored == false ]");
-
-
-    if (KProtocolInfo::isKnownProtocol("mtp")) {
-        predicate.prepend("[");
-        predicate.append(" OR PortableMediaPlayer.supportedProtocols == 'mtp']");
-    }
-
-    m_predicate = Solid::Predicate::fromString(predicate);
-    Q_ASSERT(m_predicate.isValid());
-
-    Solid::DeviceNotifier* notifier = Solid::DeviceNotifier::instance();
-    connect(notifier, SIGNAL(deviceAdded(QString)),   this, SLOT(slotDeviceAdded(QString)));
-    connect(notifier, SIGNAL(deviceRemoved(QString)), this, SLOT(slotDeviceRemoved(QString)));
+    KFilePlacesDeviceCache* placesCache = KFilePlacesDeviceCache::self();
+    connect(placesCache, SIGNAL(deviceAdded(QString)), SLOT(slotDeviceAdded(QString)));
+    connect(placesCache, SIGNAL(deviceRemoved(QString)), SLOT(slotDeviceRemoved(QString)));
 
-    const QList<Solid::Device>& deviceList = Solid::Device::listFromQuery(m_predicate);
-    foreach (const Solid::Device& device, deviceList) {
-        m_availableDevices << device.udi();
+    const QSet<QString> &devices = placesCache->devices();
+    foreach (const QString& device, devices) {
+	slotDeviceAdded(device);
     }
 }
 
diff --git a/dolphin/src/panels/places/placesitemmodel.h b/dolphin/src/panels/places/placesitemmodel.h
index 463e564..fc513be 100644
--- a/dolphin/src/panels/places/placesitemmodel.h
+++ b/dolphin/src/panels/places/placesitemmodel.h
@@ -267,7 +267,6 @@ private:
     bool m_hiddenItemsShown;
 
     QSet<QString> m_availableDevices;
-    Solid::Predicate m_predicate;
     KBookmarkManager* m_bookmarkManager;
 
     struct SystemBookmarkData