void CLibraryFrame::RunLocalSearch(CQuerySearch* pSearch) { CWaitCursor pCursor; pSearch->BuildWordList( true, true ); CSingleLock oLock( &Library.m_pSection, TRUE ); CAlbumFolder* pRoot = Library.GetAlbumRoot(); if ( ! pRoot ) return; CAlbumFolder* pFolder = pRoot->GetFolderByURI( CSchema::uriSearchFolder ); if ( pFolder == NULL ) { pFolder = pRoot->AddFolder( CSchema::uriSearchFolder, L"Search Results" ); if ( pFolder->m_pSchema != NULL ) { int nColon = pFolder->m_pSchema->m_sTitle.Find( L':' ); if ( nColon >= 0 ) pFolder->m_sName = pFolder->m_pSchema->m_sTitle.Mid( nColon + 1 ); } } else { // Get translated name of the default search folder // We will clear it, not others as user may want to keep several folders CString strFolderName; int nColon = pFolder->m_pSchema->m_sTitle.Find( L':' ); if ( nColon >= 0 ) strFolderName = pFolder->m_pSchema->m_sTitle.Mid( nColon + 1 ); if ( ! strFolderName.IsEmpty() ) pFolder = pRoot->GetFolder( strFolderName ); if ( pFolder == NULL ) { pFolder = pRoot->AddFolder( CSchema::uriSearchFolder, L"Search Results" ); if ( pFolder->m_pSchema != NULL && ! strFolderName.IsEmpty() ) pFolder->m_sName = strFolderName; } else pFolder->Clear(); } if ( pFolder->m_pSchema ) { CString strDate, strTime; SYSTEMTIME pTime; GetLocalTime( &pTime ); GetDateFormat( LOCALE_USER_DEFAULT, 0, &pTime, L"yyyy-MM-dd", strDate.GetBuffer( 64 ), 64 ); GetTimeFormat( LOCALE_USER_DEFAULT, 0, &pTime, L"hh:mm tt", strTime.GetBuffer( 64 ), 64 ); strDate.ReleaseBuffer(); strTime.ReleaseBuffer(); CXMLElement* pOuter = pFolder->m_pSchema->Instantiate(); CXMLElement* pInner = pOuter->AddElement( L"searchFolder" ); pInner->AddAttribute( L"title", pFolder->m_sName ); pInner->AddAttribute( L"content", pSearch->m_sSearch ); pInner->AddAttribute( L"date", strDate ); pInner->AddAttribute( L"time", strTime ); pFolder->SetMetadata( pOuter ); delete pOuter; } if ( CFileList* pFiles = Library.Search( pSearch, 0, TRUE ) ) { for ( POSITION pos = pFiles->GetHeadPosition(); pos; ) { const CLibraryFile* pFile = pFiles->GetNext( pos ); if ( Settings.Search.SchemaTypes && pSearch->m_pSchema != NULL ) { if ( ! pSearch->m_pSchema->FilterType( pFile->m_sName ) ) pFile = NULL; } if ( pFile != NULL && pFile->IsAvailable() ) pFolder->AddFile( const_cast< CLibraryFile* >( pFile ) ); } delete pFiles; } oLock.Unlock(); Update(); Display( pFolder ); GetParent()->PostMessage( WM_COMMAND, ID_VIEW_LIBRARY ); }