void IpodDeviceHelper::unlinkPlaylistsTracksFromItdb( Itdb_iTunesDB *itdb ) { if( !itdb ) return; while( itdb->playlists ) { Itdb_Playlist *ipodPlaylist = (Itdb_Playlist *) itdb->playlists->data; if( !ipodPlaylist || ipodPlaylist->itdb != itdb ) { /* a) itdb_playlist_unlink() cannot work if ipodPlaylist is null, prevent * infinite loop * b) if ipodPlaylist->itdb != itdb, something went horribly wrong. Prevent * infinite loop even in this case */ itdb->playlists = g_list_remove( itdb->playlists, ipodPlaylist ); continue; } itdb_playlist_unlink( ipodPlaylist ); } while( itdb->tracks ) { Itdb_Track *ipodTrack = (Itdb_Track *) itdb->tracks->data; if( !ipodTrack || ipodTrack->itdb != itdb ) { /* a) itdb_track_unlink() cannot work if ipodTrack is null, prevent infinite * loop * b) if ipodTrack->itdb != itdb, something went horribly wrong. Prevent * infinite loop even in this case */ itdb->tracks = g_list_remove( itdb->tracks, ipodTrack ); continue; } itdb_track_unlink( ipodTrack ); } }
bool IpodPlaylistProvider::deletePlaylists( Playlists::PlaylistList playlistlist ) { if( !isWritable() ) return false; foreach( Playlists::PlaylistPtr playlist, playlistlist ) { if( !m_playlists.contains( playlist ) ) continue; if( KSharedPtr<IpodPlaylist>::staticCast( playlist )->type() != IpodPlaylist::Normal ) continue; // special playlists cannot be removed using this method m_playlists.removeOne( playlist ); unsubscribeFrom( playlist ); IpodPlaylist *ipodPlaylist = static_cast<IpodPlaylist *>( playlist.data() ); itdb_playlist_unlink( ipodPlaylist->itdbPlaylist() ); emit playlistRemoved( playlist ); emit startWriteDatabaseTimer(); } return true; }