vector<ITunesTrack> ITunesComWrapper::searchForTrack( ITPlaylistSearchField searchField, wstring searchTerm ) { vector<ITunesTrack> results; if ( !isValid() ) throw ITunesException( "COM not initialised" ); IITLibraryPlaylist* playlist; HRESULT res = m_iTunesApp->get_LibraryPlaylist( &playlist ); handleComResult( res, L"Failed to get iTunes library playlist" ); _bstr_t bTerm( searchTerm.c_str() ); IITTrackCollection* tc; res = playlist->Search( bTerm, searchField, &tc ); try { handleComResult( res, L"Failed to search iTunes library" ); } catch ( ITunesException& ) { playlist->Release(); throw; } if ( tc == 0 ) { playlist->Release(); return results; } long count; tc->get_Count( &count ); try { handleComResult( res, L"Failed to get count of search results" ); } catch ( ITunesException& ) { playlist->Release(); throw; } for ( long i = 1; i < ( count + 1 ); ++i ) { try { IITTrack* track; tc->get_Item( i, &track ); handleComResult( res, L"Failed to get track out of search results" ); ITunesTrack t( track ); setPersistentIDForTrack( t, track ); results.push_back( t ); } catch ( ITunesException& ) { // Just move on to the next } } playlist->Release(); return results; }
void CiTunes::GetPlaylist() { Init(); long lSourceID; long lPlaylistID; long lTrackId; long countSource; IITObject * pObject; // IITUserPlaylist * pUserPlaylist; IITSourceCollection * pCollection; USES_CONVERSION; short bIsSmart=0; HRESULT hr=m_iITunes->get_Sources(&pCollection); hr=pCollection->get_Count (&countSource); IITSource * pSource = NULL; IITPlaylistCollection * pPlaylistCollection = NULL; IITPlaylist * pPlaylist = NULL; IITTrackCollection * pTrackCollection = NULL; IITTrack * pTrack = NULL; CComPtr<IITFileOrCDTrack> fileTrack; long countPlaylist; long countTracklist; CComBSTR bstrName; for(long i=1;i<=countSource;i++) { hr=pCollection->get_Item (i,&pSource); // pSource->get_SourceID (&lSourceID); pSource->get_Playlists (&pPlaylistCollection); pPlaylistCollection->get_Count (&countPlaylist); for(long j=7;j<=countPlaylist;j++)//get playlists { hr=pPlaylistCollection->get_Item (j,&pPlaylist); pPlaylist->get_PlaylistID (&lPlaylistID); CLOUD_MEIDA_METADATA_STRUCT* cmd = new CLOUD_MEIDA_METADATA_STRUCT(); InitMetadataStruct(cmd); hr=m_iITunes->GetITObjectByID (lSourceID,lPlaylistID,0,0,&pObject); pObject->get_Name (&bstrName); CComPtr<IITUserPlaylist> spUserPlaylist; hr=pPlaylist->QueryInterface(&spUserPlaylist); if(SUCCEEDED(hr)) { /* spUserPlaylist->get_Smart(&bIsSmart); if(bIsSmart==0)*/ //{ /* ITUserPlaylistSpecialKind plKind; spUserPlaylist->get_SpecialKind (&plKind);*/ //if(plKind==ITUserPlaylistSpecialKindPodcasts) //{ //AfxMessageBox(OLE2T(bstrName)); spUserPlaylist->get_Tracks (&pTrackCollection); pTrackCollection->get_Count (&countTracklist); long _lSourceID,_lPlaylistID,_lTrackId, _lDatabaseID; pPlaylist->get_SourceID (&_lSourceID); pPlaylist->get_PlaylistID(&_lPlaylistID); pPlaylist->get_TrackID(&_lTrackId); pPlaylist->get_TrackDatabaseID(&_lDatabaseID); cmd->UID = cmd->PlaylistID = GetGUID(_lSourceID,_lPlaylistID,_lTrackId,_lDatabaseID); cmd->PlaylistName = OLE2T(bstrName); cmd->Count = (int)countTracklist; cmd->Source = PLAYER_TYPE_iTunes; cmd->MediaType = MEDIA_TYPE_audio; cmd->MetadataType = _Metadata_Playlist; for(long k=1;k<=countTracklist;k++)//get tracks form playlist { hr=pTrackCollection->get_Item (k,&pTrack); CComPtr<IITFileOrCDTrack> spFileTrack; hr=pTrack->QueryInterface (__uuidof(spFileTrack),(void **)&spFileTrack); if(SUCCEEDED(hr)) { spFileTrack->get_SourceID (&_lSourceID); spFileTrack->get_PlaylistID(&_lPlaylistID); spFileTrack->get_TrackID(&_lTrackId); spFileTrack->get_TrackDatabaseID(&_lDatabaseID); cmd->ContentIDs.AddTail(GetGUID(_lSourceID,_lPlaylistID,_lTrackId,_lDatabaseID)); /* GetTrackInfo(spFileTrack );*/ } spFileTrack.Release(); pTrack->Release(); //pTrack->get_TrackID(&lTrackId); //pTrack->get_Name (&bstrName); //AfxMessageBox(OLE2T(bstrName)); //} //} } if(countTracklist >0) m_litem->insert(std::make_pair(cmd->UID,cmd)); } spUserPlaylist.Release(); } if(pSource!= NULL) SAFE_RELEASE(pSource); if(pPlaylistCollection!= NULL) SAFE_RELEASE(pPlaylistCollection); if(pPlaylist!= NULL) SAFE_RELEASE(pPlaylist); if(pTrackCollection!= NULL) SAFE_RELEASE(pTrackCollection); } ReleaseiTunes(); }