[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