void DefsDownloadDlg::FetchList() { wxArrayString Urls = Manager::Get()->GetConfigManager(_T("lib_finder"))->ReadArrayString(_T("download_urls")); Urls.Add(_T("http://localhost/lib_finder_test")); for ( size_t i=0; i<Urls.Count(); i++ ) { wxString Url = Urls[i]; if ( Url.IsEmpty() ) continue; if ( Url.Last() != _T('/') ) Url.Append(_T('/')); Url << _T("list") << _T(".xml"); wxURL UrlData(Url); if ( !UrlData.IsOk() ) { #if wxCHECK_VERSION(2, 9, 0) LogManager::Get()->LogWarning(F(_T("lib_finder: Invalid url '%s'"),Url.wx_str())); #else LogManager::Get()->LogWarning(F(_T("lib_finder: Invalid url '%s'"),Url.c_str())); #endif continue; } UrlData.SetProxy( ConfigManager::GetProxy() ); std::auto_ptr< wxInputStream > is ( UrlData.GetInputStream() ); if ( !is.get() || !is->IsOk() ) { #if wxCHECK_VERSION(2, 9, 0) LogManager::Get()->LogWarning(F(_T("lib_finder: Couldn't open stream for '%s'"),Url.wx_str())); #else LogManager::Get()->LogWarning(F(_T("lib_finder: Couldn't open stream for '%s'"),Url.c_str())); #endif continue; } wxMemoryOutputStream memory; is->Read( memory ); // Don't need input stream anymore is.reset(); // Add padding zero to have valid ASCII-z string memory.PutC(0); // Parse XML data TiXmlDocument doc; if ( !doc.Parse( (const char*) memory.GetOutputStreamBuffer()->GetBufferStart() ) ) { #if wxCHECK_VERSION(2, 9, 0) LogManager::Get()->LogWarning(F(_T("lib_finder: Invalid XML data in '%s'"),Url.wx_str())); #else LogManager::Get()->LogWarning(F(_T("lib_finder: Invalid XML data in '%s'"),Url.c_str())); #endif continue; } } }
bool lib_finder::TryDownload(const wxString& ShortCode,const wxString& FileName) { wxArrayString Urls = Manager::Get()->GetConfigManager(_T("lib_finder"))->ReadArrayString(_T("download_urls")); for ( size_t i=0; i<Urls.Count(); i++ ) { wxString Url = Urls[i]; if ( Url.IsEmpty() ) continue; if ( Url.Last() != _T('/') ) Url.Append(_T('/')); Url << ShortCode << _T(".xml"); wxURL UrlData(Url); if ( !UrlData.IsOk() ) { LogManager::Get()->LogWarning(F(_T("lib_finder: Invalid url '%s'"),Url.wx_str())); continue; } UrlData.SetProxy( ConfigManager::GetProxy() ); wxInputStream* is = UrlData.GetInputStream(); if ( !is || !is->IsOk() ) { LogManager::Get()->LogWarning(F(_T("lib_finder: Couldn't open stream for '%s'"),Url.wx_str())); delete is; continue; } wxFileOutputStream Output(FileName); if ( !Output.IsOk() ) { LogManager::Get()->LogWarning(F(_T("lib_finder: Couldn't write to file '%s'"),FileName.wx_str())); delete is; return false; } is->Read( Output ); bool ret = is->IsOk() && Output.IsOk(); delete is; return ret; } LogManager::Get()->LogWarning(F(_T("lib_finder: Couldn't find suitable download url for '%s'"),ShortCode.wx_str())); return false; }