extragear/multimedia/amarok/src

Alejandro Daniel Wainzinger aikawarazuni at gmail.com
Fri Jul 18 20:55:04 CEST 2008


SVN commit 834376 by awainzinger:

CollectionFactory classes should be in charge of dealing with Collection classes, and nothing else.  Introducing the MediaDeviceMonitor, another layer on top the MediaDeviceCache and Solid, which takes care of lower-level hardware detection, connection, and disconnection.  Media Device Collection classes plug into it and seamlessly get the needed information to build Collections, without doing dirty work.  See IpodCollection for reference implementation.
CCMAIL: amarok-devel at kde.org


 M  +1 -0      CMakeLists.txt  
 A             MediaDeviceMonitor.cpp   [License: GPL (v2+)]
 A             MediaDeviceMonitor.h   [License: GPL (v2+)]
 M  +19 -93    collection/ipodcollection/IpodCollection.cpp  
 M  +7 -5      collection/ipodcollection/IpodCollection.h  


--- trunk/extragear/multimedia/amarok/src/CMakeLists.txt #834375:834376
@@ -440,6 +440,7 @@
     MainWindow.cpp
 #    MediaDevice.cpp
     MediaDeviceCache.cpp
+    MediaDeviceMonitor.cpp
 #    MediaDevicePluginManager.cpp
 #    MediaItem.cpp
     Osd.cpp
--- trunk/extragear/multimedia/amarok/src/collection/ipodcollection/IpodCollection.cpp #834375:834376
@@ -25,14 +25,15 @@
 #include "amarokconfig.h"
 #include "Debug.h"
 
-#include "MediaDeviceCache.h"
+//#include "MediaDeviceCache.h"
+#include "MediaDeviceMonitor.h"
 #include "MemoryQueryMaker.h"
 
 //solid specific includes
-#include <solid/devicenotifier.h>
-#include <solid/device.h>
-#include <solid/storageaccess.h>
-#include <solid/storagedrive.h>
+//#include <solid/devicenotifier.h>
+//#include <solid/device.h>
+//#include <solid/storageaccess.h>
+//#include <solid/storagedrive.h>
 
 #include <KUrl>
 
@@ -58,97 +59,34 @@
 {
     DEBUG_BLOCK
 
-    IpodCollection *coll = 0;
+            // connect to the monitor
 
-    /* Refresh cache */
-    MediaDeviceCache::instance()->refreshCache();
-    QStringList udiList = MediaDeviceCache::instance()->getAll();
+        connect( MediaDeviceMonitor::instance(), SIGNAL( ipodDetected( const QString &, const QString & ) ),
+                 SLOT( ipodDetected( const QString &, const QString & ) ) );
 
-    /* poll udi list for ipod */
-    foreach(const QString &udi, udiList )
-        {
-            /* if iPod found, make collection */
-            if( isIpod( udi ) )
-            {
-                coll = new IpodCollection(MediaDeviceCache::instance()->volumeMountPoint(udi), udi );
-                if ( coll )
-                {
-                    connect( coll, SIGNAL( collectionDisconnected( const QString &) ),
-                             SLOT( slotCollectionDisconnected( const QString & ) ) );
-                    emit newCollection( coll );
-                    debug() << "emitting new ipod collection";
-                }
-            }
+    // force refresh to scan for ipod
+    // NOTE: perhaps a signal/slot mechanism would make more sense
+    MediaDeviceMonitor::instance()->refreshDevices();
 
-        }
 
-    // connect to device cache so new devices tested for ipod
-    connect(  MediaDeviceCache::instance(),  SIGNAL(  deviceAdded( const QString& ) ),
-              SLOT(  deviceAdded( const QString& ) ) );
-    connect(  MediaDeviceCache::instance(),  SIGNAL(  deviceRemoved( const QString& ) ),
-              SLOT(  deviceRemoved( const QString& ) ) );
-    connect(  MediaDeviceCache::instance(), SIGNAL( accessibilityChanged( bool, const QString & ) ),
-              SLOT(  slotAccessibilityChanged( bool, const QString & ) ) );
-
-
     return;
 }
 
-bool
-IpodCollectionFactory::isIpod( const QString &udi )
-{
-
-    Solid::Device device;
-
-    device = Solid::Device(udi);
-    /* going until we reach a vendor, e.g. Apple */
-    while ( device.isValid() && device.vendor().isEmpty() )
-    {
-        device = Solid::Device( device.parentUdi() );
-    }
-
-    debug() << "Device udi: " << udi;
-    debug() << "Device name: " << MediaDeviceCache::instance()->deviceName(udi);
-    debug() << "Mount point: " << MediaDeviceCache::instance()->volumeMountPoint(udi);
-    if ( device.isValid() )
-    {
-        debug() << "vendor: " << device.vendor() << ", product: " << device.product();
-    }
-
-    /* if iPod found, return true */
-    return (device.product() == "iPod");
-
-}
-
 void
-IpodCollectionFactory::deviceAdded(  const QString &udi )
+IpodCollectionFactory::ipodDetected( const QString &mountPoint, const QString &udi )
 {
-    DEBUG_BLOCK
+    IpodCollection* coll = 0;
 
-        debug() << "New device added, testing if Ipod";
-
-    IpodCollection *coll = 0;
-    /* if iPod found, make collection if udi is new */
-    if( isIpod( udi ) )
-    {
-        if ( m_collectionMap.contains( udi ) )
-        {
-            debug() << "Ipod collection for this iPod already made!";
-            return;
-        }
-
-        coll = new IpodCollection(MediaDeviceCache::instance()->volumeMountPoint(udi), udi );
+    coll = new IpodCollection( mountPoint, udi );
         if ( coll )
         {
-            connect( coll, SIGNAL( collectionDisconnected( const QString & ) ),
-                     SLOT( slotCollectionDisconnected( const QString & ) ) );
+            // TODO: connect to MediaDeviceMonitor signals
+         //   connect( coll, SIGNAL( collectionDisconnected( const QString &) ),
+           //          SLOT( slotCollectionDisconnected( const QString & ) ) );
             emit newCollection( coll );
-            m_collectionMap.insert( udi, coll );
-            debug() << "New Ipod Found, collection created!";
+            debug() << "emitting new ipod collection";
         }
-    }
 
-    return;
 }
 
 void
@@ -179,18 +117,6 @@
 }
 
 void
-IpodCollectionFactory::slotAccessibilityChanged( bool accessible, const QString & udi)
-{
-    DEBUG_BLOCK
-        debug() << "Accessibility changed to: " << ( accessible ? "true":"false" );
-    if ( !accessible )
-        deviceRemoved( udi );
-    else
-        deviceAdded( udi );
-
-}
-
-void
 IpodCollectionFactory::slotCollectionReady()
 {
     DEBUG_BLOCK
--- trunk/extragear/multimedia/amarok/src/collection/ipodcollection/IpodCollection.h #834375:834376
@@ -47,15 +47,17 @@
 
     private slots:
 
+    void ipodDetected( const QString &mountPoint, const QString &udi );
+    void deviceRemoved( const QString &udi );
     void slotCollectionReady();
-    bool isIpod( const QString &udi);
-    void deviceAdded( const QString &udi );
-    void deviceRemoved( const QString &udi );
-    void slotCollectionDisconnected( const QString & udi);
-    void slotAccessibilityChanged( bool accessible, const QString & udi);
+    void slotCollectionDisconnected( const QString & udi );
     
     private:
+
+        
+        
     QMap<QString, IpodCollection*> m_collectionMap;
+    
 
 };
 


More information about the Amarok-devel mailing list