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

List:       kde-commits
Subject:    extragear/multimedia/amarok/src
From:       Martin Aumüller <aumuell () reserv ! at>
Date:       2006-02-04 12:31:32
Message-ID: 1139056292.104674.3868.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 505584 by aumuell:

- allow cancellation delete operations
- abort operations currently in progress when disconnecting media device


 M  +59 -9     mediabrowser.cpp  
 M  +5 -0      mediabrowser.h  
 M  +9 -2      mediadevice/ipod/ipodmediadevice.cpp  
 M  +3 -3      mediadevice/ipod/kiomediadevice.cpp  


--- trunk/extragear/multimedia/amarok/src/mediabrowser.cpp #505583:505584
@@ -332,6 +332,7 @@
     connect( m_disconnectButton, SIGNAL( clicked() ),        SLOT( \
                disconnectClicked() ) );
     connect( m_transferButton,   SIGNAL( clicked() ),        SLOT( transferClicked() \
                ) );
     connect( m_cancelButton,     SIGNAL( clicked() ),        SLOT( cancelClicked() ) \
); +    connect( kapp,               SIGNAL( aboutToQuit() ),    SLOT( \
prepareToQuit() ) );  
 }
 
@@ -542,10 +543,9 @@
         currentDevice()->view()->setFilter( m_searchEdit->text() );
 }
 
-MediaBrowser::~MediaBrowser()
+void
+MediaBrowser::prepareToQuit()
 {
-    queue()->save( amaroK::saveLocation() + "transferlist.xml" );
-
     debug() << "have to remove " << m_devices.count() << " devices" << endl;
 
     m_waitForTranscode = false;
@@ -558,7 +558,14 @@
         next++;
         removeDevice( *it );
     }
+}
 
+MediaBrowser::~MediaBrowser()
+{
+    prepareToQuit();
+
+    queue()->save( amaroK::saveLocation() + "transferlist.xml" );
+
     delete m_deviceCombo;
     delete m_queue;
 }
@@ -1724,6 +1731,8 @@
     , m_hasPlaylists( false )
     , m_cancelled( false )
     , m_transferring( false )
+    , m_deleting( false )
+    , m_deferredDisconnect( false )
     , m_transferredItem( 0 )
     , m_playlistItem( 0 )
     , m_podcastItem( 0 )
@@ -1965,7 +1974,7 @@
 void
 MediaDevice::abortTransfer()
 {
-    m_cancelled = true;
+    setCancelled( true );
     cancelTransfer();
 }
 
@@ -1980,6 +1989,7 @@
 void
 MediaBrowser::transferClicked()
 {
+    m_transferButton->setEnabled( false );
     if( currentDevice()
             && currentDevice()->isConnected()
             && !currentDevice()->isTransferring() )
@@ -2015,7 +2025,13 @@
 void
 MediaBrowser::disconnectClicked()
 {
-    if ( m_queue->childCount() != 0 && currentDevice() && \
currentDevice()->isConnected() ) +    m_transferButton->setEnabled( false );
+    m_disconnectButton->setEnabled( false );
+
+    if ( m_queue->childCount() != 0 &&
+            currentDevice() &&
+            currentDevice()->isConnected() &&
+            !currentDevice()->isTransferring() )
     {
         KGuiItem transfer = KGuiItem(i18n("&Transfer"),"rebuild");
         KGuiItem disconnect = KGuiItem(i18n("Disconnect immediately"),"connect_no");
@@ -2031,7 +2047,6 @@
         }
     }
 
-    m_transferButton->setEnabled( false );
     if( currentDevice() )
     {
         currentDevice()->disconnectDevice();
@@ -2055,6 +2070,8 @@
 
     while( !lockDevice( true ) )
     {
+        if( isCancelled() )
+            return false;
         kapp->processEvents();
         usleep( 10000 );
     }
@@ -2103,6 +2120,12 @@
 
     updateRootItems();
 
+    if( m_deferredDisconnect )
+    {
+        m_deferredDisconnect = false;
+        disconnectDevice( m_runDisconnectHook );
+    }
+
     return true;
 }
 
@@ -2113,10 +2136,11 @@
 
     abortTransfer();
 
-    while( !lockDevice( true ) )
+    if( !lockDevice( true ) )
     {
-        kapp->processEvents();
-        usleep( 10000 );
+        m_runDisconnectHook = postDisconnectHook;
+        m_deferredDisconnect = true;
+        return false;
     }
 
     if( m_syncStats )
@@ -2252,6 +2276,8 @@
     if( !lockDevice( true ) )
         return;
 
+    setCancelled( false );
+
     m_transferring = true;
     m_parent->m_transferButton->setEnabled( false );
 
@@ -2380,6 +2406,8 @@
             }
         }
 
+        //synchronizeDevice();
+
         delete m_transferredItem;
         m_transferredItem = 0;
         m_parent->m_queue->itemCountChanged();
@@ -2390,6 +2418,12 @@
 
     m_parent->updateButtons();
     m_transferring = false;
+
+    if( m_deferredDisconnect )
+    {
+        m_deferredDisconnect = false;
+        disconnectDevice( m_runDisconnectHook );
+    }
 }
 
 int
@@ -2428,6 +2462,10 @@
         if( !lockDevice( true ) )
             return 0;
 
+        setCancelled( false );
+
+        m_deleting = true;
+
         QPtrList<MediaItem> list;
         //NOTE we assume that currentItem is the main target
         int numFiles  = m_view->getSelectedLeaves(item, &list, true /* only selected \
*/, onlyPlayed); @@ -2465,6 +2503,11 @@
     {
         MediaItem *next = static_cast<MediaItem*>(fi->nextSibling());
 
+        if( isCancelled() )
+        {
+            break;
+        }
+
         if( !fi->isVisible() )
         {
             fi = next;
@@ -2499,12 +2542,19 @@
     {
         purgeEmptyItems();
         synchronizeDevice();
+        m_deleting = false;
         unlockDevice();
 
         if(!isTransferring())
         {
             QTimer::singleShot( 1500, m_parent->m_progressBox, SLOT(hide()) );
         }
+
+        if( m_deferredDisconnect )
+        {
+            m_deferredDisconnect = false;
+            disconnectDevice( m_runDisconnectHook );
+        }
     }
     m_parent->updateStats();
 
--- trunk/extragear/multimedia/amarok/src/mediabrowser.h #505583:505584
@@ -175,6 +175,7 @@
         void updateStats();
         void updateButtons();
         void updateDevices();
+        void prepareToQuit();
 
 
     private slots:
@@ -361,6 +362,7 @@
         virtual bool autoConnect() { return false; }
         virtual bool asynchronousTransfer() { return false; }
         bool         isTransferring() { return m_transferring; }
+        bool         isDeleting() { return m_deleting; }
         MediaItem   *transferredItem() { return m_transferredItem; }
         bool         isCancelled() { return m_cancelled; }
         void         setCancelled( const bool b ) { m_cancelled = b; }
@@ -506,6 +508,9 @@
         bool             m_hasPlaylists;
         bool             m_cancelled;
         bool             m_transferring;
+        bool             m_deleting;
+        bool             m_deferredDisconnect;
+        bool             m_runDisconnectHook;
         MediaItem       *m_transferredItem;
         QString          m_type;
 
--- trunk/extragear/multimedia/amarok/src/mediadevice/ipod/ipodmediadevice.cpp \
#505583:505584 @@ -443,6 +443,9 @@
     if(!item)
         return -1;
 
+    if( isCancelled() )
+        return 0;
+
     if( !item->isVisible() )
         return 0;
 
@@ -512,6 +515,9 @@
                     it;
                     it = next)
             {
+                if( isCancelled() )
+                    break;
+
                 next = dynamic_cast<IpodMediaItem *>(it->nextSibling());
                 int ret = deleteItemFromDevice(it, onlyPlayed);
                 if( ret >= 0 && count >= 0 )
@@ -520,7 +526,7 @@
                     count = -1;
             }
         }
-        if(item->type() == MediaItem::PLAYLIST)
+        if(item->type() == MediaItem::PLAYLIST && !isCancelled())
         {
             m_dbChanged = true;
             itdb_playlist_remove(item->m_playlist);
@@ -535,7 +541,8 @@
             {
                 if(item->childCount() > 0)
                     debug() << "recursive deletion should have removed all children \
                from " << item << "(" << item->text(0) << ")" << endl;
-                delete item;
+                else
+                    delete item;
             }
         }
         break;
--- trunk/extragear/multimedia/amarok/src/mediadevice/ipod/kiomediadevice.cpp \
#505583:505584 @@ -68,7 +68,7 @@
 }
 
 MediaItem *
-KioMediaDevice::copyTrackToDevice(const MetaBundle &bundle, const PodcastInfo \
*podcastInfo) // used in GpodMediaDevice +KioMediaDevice::copyTrackToDevice(const \
MetaBundle &bundle, const PodcastInfo *podcastInfo) // used in IpodMediaDevice  {
     KURL url = determineURLOnDevice(bundle);
 
@@ -105,12 +105,10 @@
     {
         usleep(10000);
         kapp->processEvents( 100 );
-
         if( isCancelled() )
         {
            job->kill( false /* still emit result */ );
            tryToRemove = true;
-           setCancelled( false );
         }
     }
 
@@ -586,6 +584,8 @@
     do
     {
         kapp->processEvents( 100 );
+        if( isCancelled() )
+            break;
         usleep( 10000 );
     } while( m_waitForDeletion );
 


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

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