]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Show MTP devices in case support for it is installed
authorAlex Fiestas <afiestas@kde.org>
Tue, 23 Oct 2012 23:21:02 +0000 (01:21 +0200)
committerAlex Fiestas <afiestas@kde.org>
Tue, 23 Oct 2012 23:21:02 +0000 (01:21 +0200)
Basically adds a conditional that in case that mtp kioslave is installed
devices with MTP are added to the predicated.
REVIEW: 106651

src/panels/places/placesitem.cpp
src/panels/places/placesitem.h
src/panels/places/placesitemmodel.cpp

index f72f63975887d3603c2c9b0434badcfb7c518f8c..f78c98b76d1202cb3c5acaac2efc88094d1f8ea1 100644 (file)
@@ -37,6 +37,7 @@ PlacesItem::PlacesItem(const KBookmark& bookmark, PlacesItem* parent) :
     m_access(),
     m_volume(),
     m_disc(),
     m_access(),
     m_volume(),
     m_disc(),
+    m_mtp(),
     m_signalHandler(0),
     m_trashDirLister(0),
     m_bookmark()
     m_signalHandler(0),
     m_trashDirLister(0),
     m_bookmark()
@@ -124,6 +125,7 @@ void PlacesItem::setBookmark(const KBookmark& bookmark)
     delete m_access;
     delete m_volume;
     delete m_disc;
     delete m_access;
     delete m_volume;
     delete m_disc;
+    delete m_mtp;
 
 
     const QString udi = bookmark.metaDataItem("UDI");
 
 
     const QString udi = bookmark.metaDataItem("UDI");
@@ -252,6 +254,7 @@ void PlacesItem::initializeDevice(const QString& udi)
     m_access = m_device.as<Solid::StorageAccess>();
     m_volume = m_device.as<Solid::StorageVolume>();
     m_disc = m_device.as<Solid::OpticalDisc>();
     m_access = m_device.as<Solid::StorageAccess>();
     m_volume = m_device.as<Solid::StorageVolume>();
     m_disc = m_device.as<Solid::OpticalDisc>();
+    m_mtp = m_device.as<Solid::PortableMediaPlayer>();
 
     setText(m_device.description());
     setIcon(m_device.icon());
 
     setText(m_device.description());
     setIcon(m_device.icon());
@@ -265,6 +268,9 @@ void PlacesItem::initializeDevice(const QString& udi)
     } else if (m_disc && (m_disc->availableContent() & Solid::OpticalDisc::Audio) != 0) {
         const QString device = m_device.as<Solid::Block>()->device();
         setUrl(QString("audiocd:/?device=%1").arg(device));
     } else if (m_disc && (m_disc->availableContent() & Solid::OpticalDisc::Audio) != 0) {
         const QString device = m_device.as<Solid::Block>()->device();
         setUrl(QString("audiocd:/?device=%1").arg(device));
+    } else if (m_mtp && m_mtp->supportedProtocols().contains("mtp")) {
+        setText(m_device.product());
+        setUrl(QString("mtp:udi=%1").arg(m_device.udi()));
     }
 }
 
     }
 }
 
index 5a24a526867f6649e6f156bedb3e0ab69b6fa898..297f12d9123e6eb50df787f21c649e15102c3ae9 100644 (file)
@@ -28,6 +28,7 @@
 #include <Solid/OpticalDisc>
 #include <Solid/StorageAccess>
 #include <Solid/StorageVolume>
 #include <Solid/OpticalDisc>
 #include <Solid/StorageAccess>
 #include <Solid/StorageVolume>
+#include <Solid/PortableMediaPlayer>
 
 class KDirLister;
 class PlacesItemSignalHandler;
 
 class KDirLister;
 class PlacesItemSignalHandler;
@@ -115,6 +116,7 @@ private:
     QPointer<Solid::StorageAccess> m_access;
     QPointer<Solid::StorageVolume> m_volume;
     QPointer<Solid::OpticalDisc> m_disc;
     QPointer<Solid::StorageAccess> m_access;
     QPointer<Solid::StorageVolume> m_volume;
     QPointer<Solid::OpticalDisc> m_disc;
+    QPointer<Solid::PortableMediaPlayer> m_mtp;
     QPointer<PlacesItemSignalHandler> m_signalHandler;
     QPointer<KDirLister> m_trashDirLister;
     KBookmark m_bookmark;
     QPointer<PlacesItemSignalHandler> m_signalHandler;
     QPointer<KDirLister> m_trashDirLister;
     KBookmark m_bookmark;
index 89488610fe8eca5d90d1066f0ee24d6c67ea91ab..31285aea285b1a75dc54eb6297e30706ba47c773 100644 (file)
@@ -31,6 +31,7 @@
 #include <KComponentData>
 #include <KDebug>
 #include <KIcon>
 #include <KComponentData>
 #include <KDebug>
 #include <KIcon>
+#include <kprotocolinfo.h>
 #include <KLocale>
 #include <KStandardDirs>
 #include <KUser>
 #include <KLocale>
 #include <KStandardDirs>
 #include <KUser>
@@ -554,11 +555,14 @@ void PlacesItemModel::onItemChanged(int index, const QSet<QByteArray>& changedRo
 void PlacesItemModel::slotDeviceAdded(const QString& udi)
 {
     const Solid::Device device(udi);
 void PlacesItemModel::slotDeviceAdded(const QString& udi)
 {
     const Solid::Device device(udi);
-    if (m_predicate.matches(device)) {
-        m_availableDevices << udi;
-        const KBookmark bookmark = PlacesItem::createDeviceBookmark(m_bookmarkManager, udi);
-        appendItem(new PlacesItem(bookmark));
+
+    if (!m_predicate.matches(device)) {
+        return;
     }
     }
+
+    m_availableDevices << udi;
+    const KBookmark bookmark = PlacesItem::createDeviceBookmark(m_bookmarkManager, udi);
+    appendItem(new PlacesItem(bookmark));
 }
 
 void PlacesItemModel::slotDeviceRemoved(const QString& udi)
 }
 
 void PlacesItemModel::slotDeviceRemoved(const QString& udi)
@@ -947,14 +951,21 @@ void PlacesItemModel::createSystemBookmarks()
 
 void PlacesItemModel::initializeAvailableDevices()
 {
 
 void PlacesItemModel::initializeAvailableDevices()
 {
-    m_predicate = Solid::Predicate::fromString(
-        "[[[[ StorageVolume.ignored == false AND [ StorageVolume.usage == 'FileSystem' OR StorageVolume.usage == 'Encrypted' ]]"
+    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 ]");
         " 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();
     Q_ASSERT(m_predicate.isValid());
 
     Solid::DeviceNotifier* notifier = Solid::DeviceNotifier::instance();