void CLibraryFileView::OnLibraryUnlink() { CSingleLock pLock( &Library.m_pSection, TRUE ); CLibraryTreeItem* pItem = GetFolderSelection(); if ( pItem == NULL || pItem->m_pVirtual == NULL || pItem->m_pSelNext != NULL ) return; CAlbumFolder* pFolder = pItem->m_pVirtual; if ( ! LibraryFolders.CheckAlbum( pFolder ) ) return; POSITION posSel = StartSelectedFileLoop(); while ( CLibraryFile* pFile = GetNextSelectedFile( posSel ) ) { pFolder->RemoveFile( pFile ); } }
BOOL CAlbumFolder::OrganiseFile(CLibraryFile* pFile) { BOOL bResult = FALSE; if ( m_sSchemaURI == CSchema::uriAllFiles ) { AddFile( pFile ); return TRUE; } if ( m_bCollSHA1 && ( m_pCollection != NULL || GetCollection() ) ) { if ( m_pCollSHA1 == pFile->m_pSHA1 || m_pCollection->FindFile( pFile, TRUE ) ) { AddFile( pFile ); return TRUE; } else { return FALSE; } } if ( pFile->m_pMetadata == NULL && m_pParent != NULL ) return FALSE; if ( m_sSchemaURI == CSchema::uriMusicRoot ) { if ( ! pFile->IsSchemaURI( CSchema::uriAudio ) ) return FALSE; } else if ( m_sSchemaURI == CSchema::uriMusicAlbumCollection ) { if ( ! pFile->IsSchemaURI( CSchema::uriAudio ) ) return FALSE; CString strAlbum = pFile->m_pMetadata->GetAttributeValue( _T("album") ); CXMLNode::UniformString( strAlbum ); if ( strAlbum.IsEmpty() ) return FALSE; if ( _tcsicmp( strAlbum, _T("tba") ) == 0 ) return FALSE; if ( _tcsicmp( strAlbum, _T("na") ) == 0 ) return FALSE; if ( _tcsicmp( strAlbum, _T("n/a") ) == 0 ) return FALSE; if ( _tcsicmp( strAlbum, _T("none") ) == 0 ) return FALSE; if ( _tcsicmp( strAlbum, _T("empty") ) == 0 ) return FALSE; if ( _tcsicmp( strAlbum, _T("unknown") ) == 0 ) return FALSE; if ( _tcsistr( strAlbum, _T("uploaded by") ) ) return FALSE; if ( _tcsistr( strAlbum, _T("ripped by") ) ) return FALSE; if ( _tcsistr( strAlbum, _T("downloaded") ) ) return FALSE; if ( _tcsistr( strAlbum, _T("http") ) ) return FALSE; if ( _tcsistr( strAlbum, _T("mp3") ) ) return FALSE; if ( _tcsistr( strAlbum, _T("www.mp3sfinder.com") ) ) return FALSE; if ( _tcsistr( strAlbum, _T("single") ) ) strAlbum = _T("Singles"); for ( POSITION pos = GetFolderIterator() ; pos ; ) { CAlbumFolder* pAlbum = GetNextFolder( pos ); if ( pAlbum->m_sName.CompareNoCase( strAlbum ) == 0 ) { bResult = pAlbum->OrganiseFile( pFile ); } else if ( pAlbum->m_bAutoDelete ) { pAlbum->RemoveFile( pFile ); } } if ( bResult ) return TRUE; CAlbumFolder* pAlbum = AddFolder( CSchema::uriMusicAlbum, strAlbum, TRUE ); return pAlbum->OrganiseFile( pFile ); } else if ( m_sSchemaURI == CSchema::uriMusicAlbum ) { if ( ! pFile->IsSchemaURI( CSchema::uriAudio ) ) return FALSE; CString strAlbum = pFile->m_pMetadata->GetAttributeValue( _T("album") ); CXMLNode::UniformString( strAlbum ); if ( _tcsistr( strAlbum, _T("single") ) ) strAlbum = _T("Singles"); if ( strAlbum.CompareNoCase( m_sName ) ) return FALSE; AddFile( pFile ); if ( _tcsistr( m_sName, _T("soundtrack") ) != NULL || _tcsistr( m_sName, _T("ost") ) != NULL ) { // TODO: Scrap artist specific info ! MetaFromFile( pFile ); } else { MetaFromFile( pFile ); } return TRUE; } else if ( m_sSchemaURI == CSchema::uriMusicArtistCollection ) { if ( ! pFile->IsSchemaURI( CSchema::uriAudio ) ) return FALSE; CString strArtist = pFile->m_pMetadata->GetAttributeValue( _T("artist") ); CXMLNode::UniformString( strArtist ); Replace( strArtist, _T(" (www.mp3sfinder.com)"), _T("") ); if ( strArtist.IsEmpty() ) return FALSE; for ( POSITION pos = GetFolderIterator() ; pos ; ) { CAlbumFolder* pAlbum = GetNextFolder( pos ); if ( pAlbum->m_sName.CompareNoCase( strArtist ) == 0 ) { bResult = pAlbum->OrganiseFile( pFile ); } else if ( pAlbum->m_bAutoDelete ) { pAlbum->RemoveFile( pFile ); } } if ( bResult ) return TRUE; CAlbumFolder* pAlbum = AddFolder( CSchema::uriMusicArtist, strArtist, TRUE ); return pAlbum->OrganiseFile( pFile ); } else if ( m_sSchemaURI == CSchema::uriMusicArtist ) { if ( ! pFile->IsSchemaURI( CSchema::uriAudio ) ) return FALSE; CString strArtist = pFile->m_pMetadata->GetAttributeValue( _T("artist") ); CXMLNode::UniformString( strArtist ); if ( strArtist.CompareNoCase( m_sName ) ) return FALSE; AddFile( pFile ); MetaFromFile( pFile ); return TRUE; } else if ( m_sSchemaURI == CSchema::uriMusicGenreCollection ) { if ( ! pFile->IsSchemaURI( CSchema::uriAudio ) ) return FALSE; CString strGenre = pFile->m_pMetadata->GetAttributeValue( _T("genre") ); if ( strGenre.IsEmpty() ) return FALSE; for ( POSITION pos = GetFolderIterator() ; pos ; ) { CAlbumFolder* pAlbum = GetNextFolder( pos ); if ( pAlbum->m_sName.CompareNoCase( strGenre ) == 0 ) { bResult = pAlbum->OrganiseFile( pFile ); } else if ( pAlbum->m_bAutoDelete ) { pAlbum->RemoveFile( pFile ); } } if ( bResult ) return TRUE; CAlbumFolder* pAlbum = AddFolder( CSchema::uriMusicGenre, strGenre, TRUE ); return pAlbum->OrganiseFile( pFile ); } else if ( m_sSchemaURI == CSchema::uriMusicGenre ) { if ( ! pFile->IsSchemaURI( CSchema::uriAudio ) ) return FALSE; CString strGenre = pFile->m_pMetadata->GetAttributeValue( _T("genre") ); if ( strGenre.CompareNoCase( m_sName ) ) return FALSE; AddFile( pFile ); MetaFromFile( pFile ); return TRUE; } else if ( m_sSchemaURI == CSchema::uriMusicAll ) { if ( ! pFile->IsSchemaURI( CSchema::uriAudio ) ) return FALSE; AddFile( pFile ); return TRUE; } else if ( m_sSchemaURI == CSchema::uriVideoRoot ) { if ( ! pFile->IsSchemaURI( CSchema::uriVideo ) ) return FALSE; } else if ( m_sSchemaURI == CSchema::uriVideoSeriesCollection ) { if ( ! pFile->IsSchemaURI( CSchema::uriVideo ) ) return FALSE; CString strSeries = pFile->m_pMetadata->GetAttributeValue( _T("series") ); CXMLNode::UniformString( strSeries ); if ( strSeries.IsEmpty() ) return FALSE; for ( POSITION pos = GetFolderIterator() ; pos ; ) { CAlbumFolder* pAlbum = GetNextFolder( pos ); if ( pAlbum->m_sName.CompareNoCase( strSeries ) == 0 ) { bResult = pAlbum->OrganiseFile( pFile ); } else if ( pAlbum->m_bAutoDelete ) { pAlbum->RemoveFile( pFile ); } } if ( bResult ) return TRUE; CAlbumFolder* pAlbum = AddFolder( CSchema::uriVideoSeries, strSeries, TRUE ); return pAlbum->OrganiseFile( pFile ); } else if ( m_sSchemaURI == CSchema::uriVideoSeries ) { if ( ! pFile->IsSchemaURI( CSchema::uriVideo ) ) return FALSE; CString strSeries = pFile->m_pMetadata->GetAttributeValue( _T("series") ); CXMLNode::UniformString( strSeries ); if ( strSeries.CompareNoCase( m_sName ) ) return FALSE; AddFile( pFile ); MetaFromFile( pFile ); return TRUE; } else if ( m_sSchemaURI == CSchema::uriVideoFilmCollection ) { if ( ! pFile->IsSchemaURI( CSchema::uriVideo ) ) return FALSE; CString strType = pFile->m_pMetadata->GetAttributeValue( _T("type") ); if ( strType.CompareNoCase( _T("film") ) ) return FALSE; CString strTitle = pFile->m_pMetadata->GetAttributeValue( _T("title") ); CXMLNode::UniformString( strTitle ); if ( strTitle.IsEmpty() ) return FALSE; for ( POSITION pos = GetFolderIterator() ; pos ; ) { CAlbumFolder* pAlbum = GetNextFolder( pos ); if ( pAlbum->m_sName.CompareNoCase( strTitle ) == 0 ) { bResult = pAlbum->OrganiseFile( pFile ); } else if ( pAlbum->m_bAutoDelete ) { pAlbum->RemoveFile( pFile ); } } if ( bResult ) return TRUE; CAlbumFolder* pAlbum = AddFolder( CSchema::uriVideoFilm, strTitle, TRUE ); return pAlbum->OrganiseFile( pFile ); } else if ( m_sSchemaURI == CSchema::uriVideoFilm ) { if ( ! pFile->IsSchemaURI( CSchema::uriVideo ) ) return FALSE; CString strType = pFile->m_pMetadata->GetAttributeValue( _T("type") ); if ( strType.CompareNoCase( _T("film") ) ) return FALSE; CString strTitle = pFile->m_pMetadata->GetAttributeValue( _T("title") ); CXMLNode::UniformString( strTitle ); if ( strTitle.CompareNoCase( m_sName ) ) return FALSE; AddFile( pFile ); MetaFromFile( pFile ); return TRUE; } else if ( m_sSchemaURI == CSchema::uriVideoMusicCollection ) { if ( ! pFile->IsSchemaURI( CSchema::uriVideo ) ) return FALSE; CString strType = pFile->m_pMetadata->GetAttributeValue( _T("type") ); if ( strType.CompareNoCase( _T("music video") ) ) return FALSE; AddFile( pFile ); return TRUE; } else if ( m_sSchemaURI == CSchema::uriVideoAll ) { if ( ! pFile->IsSchemaURI( CSchema::uriVideo ) ) return FALSE; AddFile( pFile ); return TRUE; } else if ( m_sSchemaURI == CSchema::uriImageRoot ) { if ( ! pFile->IsSchemaURI( CSchema::uriImage ) ) return FALSE; } else if ( m_sSchemaURI == CSchema::uriImageAll ) { if ( ! pFile->IsSchemaURI( CSchema::uriImage ) ) return FALSE; AddFile( pFile ); return TRUE; } else if ( m_sSchemaURI == CSchema::uriApplicationRoot ) { if ( ! pFile->IsSchemaURI( CSchema::uriApplication ) ) return FALSE; } else if ( m_sSchemaURI == CSchema::uriApplicationAll ) { if ( ! pFile->IsSchemaURI( CSchema::uriApplication ) ) return FALSE; AddFile( pFile ); return TRUE; } else if ( m_sSchemaURI == CSchema::uriBookRoot ) { if ( ! pFile->IsSchemaURI( CSchema::uriBook ) ) return FALSE; } else if ( m_sSchemaURI == CSchema::uriBookAll ) { if ( ! pFile->IsSchemaURI( CSchema::uriBook ) ) return FALSE; AddFile( pFile ); return TRUE; } else if ( m_sSchemaURI == CSchema::uriDocumentRoot ) { if ( ! pFile->IsSchemaURI( CSchema::uriDocument ) && ! pFile->IsSchemaURI( CSchema::uriSpreadsheet ) && ! pFile->IsSchemaURI( CSchema::uriPresentation ) ) return FALSE; } else if ( m_sSchemaURI == CSchema::uriDocumentAll ) { if ( ! pFile->IsSchemaURI( CSchema::uriDocument ) && ! pFile->IsSchemaURI( CSchema::uriSpreadsheet ) && ! pFile->IsSchemaURI( CSchema::uriPresentation ) ) return FALSE; AddFile( pFile ); return TRUE; } for ( POSITION pos = GetFolderIterator() ; pos ; ) { bResult |= GetNextFolder( pos )->OrganiseFile( pFile ); } return bResult; }