// --------------------------------------------------------------------------- // rename a media object // --------------------------------------------------------------------------- // void CMPXCollectionHelperImp::RenameL( const TDesC& aOldUri, const TDesC& aNewUri, TMPXGeneralCategory aItemCat ) { MPX_FUNC("CMPXCollectionHelperImp::RenameL"); MPX_DEBUG3("aOldUri = %S, aNewUri = %S", &aOldUri, &aNewUri); if (aItemCat != EMPXSong && aItemCat != EMPXPlaylist && aItemCat != EMPXAbstractAlbum) { User::Leave(KErrArgument); } // find the media using the old URI RArray<TMPXAttribute> attributes; CleanupClosePushL( attributes ); attributes.AppendL(KMPXMediaGeneralId); attributes.AppendL(KMPXMediaMusicAlbumArtFileName); CMPXMedia* media = GetL(aOldUri, attributes.Array(), aItemCat); CleanupStack::PopAndDestroy(&attributes); CleanupStack::PushL(media); const TDesC& fileName(media->ValueText(KMPXMediaMusicAlbumArtFileName)); // the songs have embedded albumart. if(fileName.CompareF(aOldUri) == 0) { // change the Art filename to the new Uri media->SetTextValueL(KMPXMediaMusicAlbumArtFileName, aNewUri); // Rename the thumbnail TRAPD(err, RenameThumbnailL(aOldUri, aNewUri)); if(KErrNone != err) { MPX_DEBUG2("Thumbnail renames failed. Err: %d", err); } } // change file path to the new file path media->SetTextValueL(KMPXMediaGeneralUri, aNewUri); // ask harvester to rename the file if any of the following is true: // 1) renaming a song // 2) renaming a playlist scanned through file system. // // There are 3 types of playlists. The ones created from the device // are virtual playlists which have file extension .vir. There are // no physical playlist files associated with them; hence not // registered with harvester. For virtual playlists, IsPlaylistL // will return EFalse because there is not a playlist plugin that // deals with .vir playlist files. // // The ones synced from PC through MTP have file extension .pla. // There are 0-byte .pla files associated with them but they // are not registered with harvester either. IsPlaylistL will also // return EFalse because there is not a playlist plugin that deals // with .pla. // // The 3rd type of playlists is .m3u on the file system. They are // added to the collection through file scan and registered with // harvester. IsPlaylistL will return ETrue. if (aItemCat == EMPXSong || iHvsUtility->IsPlaylistL(aOldUri)) { const TUid& collection = media->ValueTObjectL<TUid>(KMPXMediaGeneralCollectionId); iHvsUtility->RenameFileL( aOldUri, aNewUri, collection.iUid ); } // Update collection via CMPXCommand // CMPXCommand* cmd = CMPXCommand::NewL(); CleanupStack::PushL( cmd ); cmd->SetTObjectValueL( KMPXCommandGeneralId, KMPXCommandIdCollectionSet ); TUid colId (media->ValueTObjectL<TUid>(KMPXMediaGeneralCollectionId) ); cmd->SetTObjectValueL( KMPXCommandGeneralCollectionId, colId.iUid ); cmd->SetTObjectValueL( KMPXCommandGeneralDoSync, ETrue ); cmd->SetCObjectValueL( KMPXCommandColSetMedia, media ); iCollectionUtil->Collection().CommandL( *cmd ); CleanupStack::PopAndDestroy( cmd ); CleanupStack::PopAndDestroy(media); }
// --------------------------------------------------------------------------- // Remove a file from the collection // --------------------------------------------------------------------------- // void CMPXCollectionHelperImp::RemoveL( const TDesC& aFile, TMPXGeneralCategory aItemCat ) { MPX_FUNC("CMPXCollectionHelperImp::RemoveL"); MPX_DEBUG3("aFile %S, category %d", &aFile, aItemCat); if (aItemCat != EMPXSong && aItemCat != EMPXPlaylist) { User::Leave(KErrArgument); } // // ask harvester to remove the file if any of the following is true: // 1) removing a song // 2) removing a playlist scanned through file system. // // There are 3 types of playlists. The ones created from the device // are virtual playlists which have file extension .vir. There are // no physical playlist files associated with them; hence not // registered with harvester. For virtual playlists, IsPlaylistL // will return EFalse because there is not a playlist plugin that // deals with .vir playlist files. // // The ones synced from PC through MTP have file extension .pla. // There are 0-byte .pla files associated with them but they // are not registered with harvester either. IsPlaylistL will also // return EFalse because there is not a playlist plugin that deals // with .pla. // // The 3rd type of playlists is .m3u on the file system. They are // added to the collection through file scan and registered with // harvester. IsPlaylistL will return ETrue. // // For now virtual playlists and synced playlists are assumed to // be in the music collection for now until there is a generic way // resolving collections aside from using file extension or UID. // TInt collection(iMusicCollectionId.iUid); if (aItemCat == EMPXSong || iHvsUtility->IsPlaylistL(aFile)) { // Remove from the harvester collection = iHvsUtility->RemoveFileL( aFile ); } // Remove from the collection // Construct a CMPXMedia object with URI, collection id, type and category // RArray<TInt> contID; CleanupClosePushL( contID ); contID.AppendL( KMPXMediaIdGeneral ); CMPXMedia* media = CMPXMedia::NewL( contID.Array() ); CleanupStack::PushL( media ); media->SetTextValueL( KMPXMediaGeneralUri, aFile ); media->SetTObjectValueL<TUid>( KMPXMediaGeneralCollectionId, TUid::Uid( collection ) ); media->SetTObjectValueL( KMPXMediaGeneralType, EMPXItem ); media->SetTObjectValueL( KMPXMediaGeneralCategory, aItemCat ); // Remove the item via CMPXCommand // CMPXCommand* cmd = CMPXCommand::NewL(); CleanupStack::PushL( cmd ); cmd->SetTObjectValueL( KMPXCommandGeneralCollectionId, collection ); cmd->SetTObjectValueL( KMPXCommandGeneralId, KMPXCommandIdCollectionRemoveMedia ); cmd->SetTObjectValueL( KMPXCommandGeneralDoSync, ETrue ); cmd->SetCObjectValueL( KMPXCommandCollectionRemoveMedia, media ); cmd->SetTObjectValueL( KMPXCommandCollectionRemoveMediaDeleteRecord, ETrue ); iCollectionUtil->Collection().CommandL( *cmd ); CleanupStack::PopAndDestroy( cmd ); CleanupStack::PopAndDestroy( media ); CleanupStack::PopAndDestroy( &contID ); }