diff --git a/amarok/src/playlist.cpp b/amarok/src/playlist.cpp index eda08281..bd173b58 100644 --- a/amarok/src/playlist.cpp +++ b/amarok/src/playlist.cpp @@ -3476,34 +3476,35 @@ Playlist::deleteSelectedFiles() //SLOT void Playlist::removeDuplicates() //SLOT { - // Remove dead entries: - - for( TQListViewItemIterator it( this ); it.current(); ) { - PlaylistItem* item = static_cast( *it ); + // Remove dead entries + for (TQListViewItemIterator it(this); it.current(); ) + { + PlaylistItem *item = static_cast(*it); const KURL url = item->url(); - if ( url.isLocalFile() && !TQFile::exists( url.path() ) ) { - removeItem( item ); + if (url.isLocalFile() && !TQFile::exists(url.path())) + { + removeItem(item); ++it; delete item; } else ++it; } - // Remove dupes: - - TQPtrList list; - for( TQListViewItemIterator it( this ); it.current(); ++it ) - list.prepend( static_cast( it.current() ) ); - - list.sort(); - - TQPtrListIterator it( list ); - PlaylistItem *item; - while( (item = it.current()) ) { - const KURL &compare = item->url(); - ++it; - if ( *it && compare == it.current()->url() ) { - removeItem( item ); + // Remove duplicates + TQMap existingItems; + for (TQListViewItemIterator it(this); it.current(); ) + { + PlaylistItem *item = static_cast(*it); + const KURL &itemUrl = item->url(); + if (!existingItems.contains(itemUrl)) + { + existingItems[itemUrl] = true; + ++it; + } + else + { + removeItem(item); + ++it; delete item; } }