BOOL CHostBrowser::LoadDC(LPCTSTR pszFile, CQueryHit*& pHits) { CFile pFile; if ( ! pFile.Open( pszFile, CFile::modeRead | CFile::shareDenyWrite ) ) return FALSE; // File open error UINT nInSize = (UINT)pFile.GetLength(); if ( ! nInSize ) return FALSE; // Empty file CBuffer pBuffer; if ( ! pBuffer.EnsureBuffer( nInSize ) ) return FALSE; // Out of memory if ( pFile.Read( pBuffer.GetData(), nInSize ) != nInSize ) return FALSE; // File read error pBuffer.m_nLength = nInSize; if ( ! pBuffer.UnBZip() ) return FALSE; // Decompression error augment::auto_ptr< CXMLElement > pXML ( CXMLElement::FromString( pBuffer.ReadString( pBuffer.m_nLength, CP_UTF8 ), TRUE ) ); if ( ! pXML.get() ) return FALSE; // XML decoding error // <FileListing Version="1" CID="SKCB4ZF4PZUDF7RKQ5LX6SVAARQER7QEVELZ2TY" Base="/" Generator="DC++ 0.762"> if ( ! pXML->IsNamed( L"FileListing" ) ) return FALSE; // Invalid XML file format // CString strTitle = pXML->GetAttributeValue( L"CID" ); return LoadDCDirectory( pXML.get(), pHits ); }
CG2Packet* CLocalSearch::AlbumToPacket(CAlbumFolder* pFolder) { if ( pFolder == NULL ) return NULL; if ( pFolder->m_pSchema != NULL && pFolder->m_pSchema->m_bPrivate ) return NULL; if ( pFolder->GetSharedCount( TRUE ) == 0 ) return NULL; CG2Packet* pPacket = CG2Packet::New( G2_PACKET_VIRTUAL_FOLDER, TRUE ); if ( ! pPacket ) return NULL; if ( pFolder->m_pSchema != NULL ) { auto_ptr< CXMLElement > pXML( pFolder->m_pSchema->Instantiate( TRUE ) ); if ( ! pXML.get() ) return NULL; if ( pFolder->m_pXML != NULL ) { pXML->AddElement( pFolder->m_pXML->Clone() ); } else { if ( CXMLElement* pBody = pXML->AddElement( pFolder->m_pSchema->m_sSingular ) ) { pBody->AddAttribute( pFolder->m_pSchema->GetFirstMemberName(), pFolder->m_sName ); } } CString strXML = pXML->ToString(); pPacket->WritePacket( G2_PACKET_METADATA, pPacket->GetStringLen( strXML ) ); pPacket->WriteString( strXML, FALSE ); } for ( POSITION pos = pFolder->GetFolderIterator() ; pos ; ) { if ( CG2Packet* pChild = AlbumToPacket( pFolder->GetNextFolder( pos ) ) ) { pPacket->WritePacket( pChild ); pChild->Release(); } } if ( DWORD nFiles = pFolder->GetSharedCount( FALSE ) ) { pPacket->WritePacket( G2_PACKET_FILES, nFiles * 4u ); for ( POSITION pos = pFolder->GetFileIterator() ; pos ; ) { const CLibraryFile* pFile = pFolder->GetNextFile( pos ); if ( pFile->IsShared() ) pPacket->WriteLongBE( pFile->m_nIndex ); } } return pPacket; }
BOOL CCollectionFile::LoadDC(LPCTSTR pszFile) { m_nType = SimpleCollection; // ToDo: Add schema detection m_sThisURI = CSchema::uriFolder; m_sParentURI = CSchema::uriCollectionsFolder; CFile pFile; if ( ! pFile.Open( pszFile, CFile::modeRead | CFile::shareDenyWrite ) ) return FALSE; // File open error UINT nInSize = (UINT)pFile.GetLength(); if ( ! nInSize ) return FALSE; // Empty file CBuffer pBuffer; if ( ! pBuffer.EnsureBuffer( nInSize ) ) return FALSE; // Out of memory if ( pFile.Read( pBuffer.GetData(), nInSize ) != nInSize ) return FALSE; // File read error pBuffer.m_nLength = nInSize; if ( ! pBuffer.UnBZip() ) return FALSE; // Decompression error augment::auto_ptr< CXMLElement > pXML ( CXMLElement::FromString( pBuffer.ReadString( pBuffer.m_nLength, CP_UTF8 ), TRUE ) ); if ( ! pXML.get() ) return FALSE; // XML decoding error // <FileListing Version="1" CID="SKCB4ZF4PZUDF7RKQ5LX6SVAARQER7QEVELZ2TY" Base="/" Generator="DC++ 0.762"> if ( ! pXML->IsNamed( L"FileListing" ) ) return FALSE; // Invalid XML file format m_sTitle = pXML->GetAttributeValue( L"CID" ); LoadDC( pXML.get() ); return ( m_pFiles.GetCount() != 0 ); }
void CPWL_Edit::SetText(const CFX_WideString& csText) { CFX_WideString swText = csText; if (!HasFlag(PES_RICH)) { m_pEdit->SetText(swText); return; } CFX_ByteString sValue = CFX_ByteString::FromUnicode(swText); std::unique_ptr<CXML_Element> pXML( CXML_Element::Parse(sValue.c_str(), sValue.GetLength())); if (!pXML) { m_pEdit->SetText(swText); return; } int32_t nCount = pXML->CountChildren(); bool bFirst = true; swText.clear(); for (int32_t i = 0; i < nCount; i++) { CXML_Element* pSubElement = pXML->GetElement(i); if (!pSubElement) continue; CFX_ByteString tag = pSubElement->GetTagName(); if (tag.EqualNoCase("p")) { int nChild = pSubElement->CountChildren(); CFX_WideString swSection; for (int32_t j = 0; j < nChild; j++) swSection += pSubElement->GetContent(j); if (bFirst) bFirst = false; else swText += FWL_VKEY_Return; swText += swSection; } } m_pEdit->SetText(swText); }
BOOL CUploadTransferDC::RequestFileList(BOOL bFile, BOOL bZip, const std::string& strFilename, QWORD nOffset, QWORD nLength) { m_pXML.Clear(); theApp.Message( MSG_NOTICE, IDS_UPLOAD_BROWSE, (LPCTSTR)m_sAddress, (LPCTSTR)m_sUserAgent ); BOOL bBZip = bFile && ( strFilename == "files.xml.bz2" ); m_sName = ( bFile ? "/" : strFilename.c_str() ); // Create library file list CAutoPtr< CXMLElement > pXML( LibraryFolders.CreateXML( m_sName, TRUE, xmlDC ) ); if ( ! pXML ) return FALSE; // Out of memory m_pXML.Print( pXML->ToString( TRUE, TRUE, TRUE, TRI_TRUE ), CP_UTF8 ); // ToDo: Implement partial request of file list nOffset = 0; nLength = m_pXML.m_nLength; if ( bBZip ) { // BZip it if ( ! m_pXML.BZip() ) return FALSE; // Out of memory bZip = FALSE; nLength = m_pXML.m_nLength; } if ( bZip ) { // Zip it if ( ! m_pXML.Deflate() ) return FALSE; // Out of memory } m_nOffset = nOffset; m_nLength = m_pXML.m_nLength; m_nPosition = 0; if ( m_bGet ) { CString strAnswer; strAnswer.Format( _T("$FileLength %I64u|"), nLength ); m_pClient->SendCommand( strAnswer ); return TRUE; } CString strAnswer; strAnswer.Format( _T("$ADCSND %hs %hs %I64u %I64u%hs|"), ( bFile ? "file" : "list" ), strFilename.c_str(), nOffset, nLength, ( bZip ? " ZL1" : "") ); m_pClient->SendCommand( strAnswer ); StartSending( upsBrowse ); m_pClient->Write( &m_pXML ); m_pXML.Clear(); return TRUE; }
BOOL CCollectionFile::LoadCollection(LPCTSTR pszFile) { m_nType = EnvyCollection; CZIPFile pZIP; if ( ! pZIP.Open( pszFile ) ) return FALSE; CZIPFile::File* pFile = pZIP.GetFile( L"Collection.xml", TRUE ); if ( ! pFile ) return FALSE; if ( pZIP.GetCount() == 1 ) // xml-only m_nType = SimpleCollection; augment::auto_ptr< CBuffer > pBuffer ( pFile->Decompress() ); if ( ! pBuffer.get() ) return FALSE; augment::auto_ptr< CXMLElement > pXML ( CXMLElement::FromString( pBuffer->ReadString( pBuffer->m_nLength, CP_UTF8 ), TRUE ) ); if ( ! pXML.get() ) return FALSE; if ( ! pXML->IsNamed( L"collection" ) ) return FALSE; CXMLElement* pProperties = pXML->GetElementByName( L"properties" ); if ( ! pProperties ) return FALSE; CXMLElement* pContents = pXML->GetElementByName( L"contents" ); if ( ! pContents ) return FALSE; for ( POSITION pos = pContents->GetElementIterator(); pos; ) { CXMLElement* pElement = pContents->GetNextElement( pos ); if ( pElement->IsNamed( L"file" ) ) { augment::auto_ptr< File > pNewFile( new File( this ) ); if ( pNewFile.get() && pNewFile->Parse( pElement ) ) m_pFiles.AddTail( pNewFile.release() ); } } if ( CXMLElement* pMetadata = pProperties->GetElementByName( L"metadata" ) ) { m_pMetadata = CloneMetadata( pMetadata ); if ( m_pMetadata ) m_sThisURI = m_pMetadata->GetAttributeValue( CXMLAttribute::schemaName ); } if ( CXMLElement* pTitle = pProperties->GetElementByName( L"title" ) ) m_sTitle = pTitle->GetValue(); if ( CXMLElement* pMounting = pProperties->GetElementByName( L"mounting" ) ) { if ( CXMLElement* pParent = pMounting->GetElementByName( L"parent" ) ) m_sParentURI = pParent->GetAttributeValue( L"uri" ); if ( CXMLElement* pThis = pMounting->GetElementByName( L"this" ) ) m_sThisURI = pThis->GetAttributeValue( L"uri" ); } if ( m_sThisURI.IsEmpty() ) { Close(); return FALSE; } return TRUE; }