// -------------------------------------------------------------------------------- // bool DownloadImage( const wxString &source, const wxString &target, const wxBitmapType imagetype, int maxwidth, int maxheight ) { bool RetVal = false; wxBitmapType ImageType; wxImage * Image = guGetRemoteImage( source, ImageType ); if( Image ) { if( maxwidth != -1 ) { guImageResize( Image, maxwidth, ( maxheight != -1 ) ? maxheight : maxwidth ); } RetVal = Image->SaveFile( target, imagetype ); delete Image; } return RetVal; }
// -------------------------------------------------------------------------------- // guChannelUpdateImageThread::ExitCode guChannelUpdateImageThread::Entry() { wxImage * Image = NULL; if( !m_ImageUrl.IsEmpty() ) { if( !TestDestroy() ) { wxBitmapType ImageType; Image = guGetRemoteImage( m_ImageUrl, ImageType ); if( Image ) { //guLogMessage( wxT( "Image loaded ok %u" ), Index ); if( Image->IsOk() && !TestDestroy() ) { Image->Rescale( guPODCASTS_IMAGE_SIZE, guPODCASTS_IMAGE_SIZE, wxIMAGE_QUALITY_HIGH ); } else { delete Image; Image = NULL; } } } } // if( !TestDestroy() ) { wxCommandEvent event( guChannelEditorEvent, guCHANNELEDITOR_EVENT_UPDATE_IMAGE ); event.SetClientData( Image ); wxPostEvent( m_ChannelEditor, event ); } else if( Image ) { delete Image; } return 0; }
// -------------------------------------------------------------------------------- // guDownloadCoverThread::ExitCode guDownloadCoverThread::Entry() { wxBitmapType ImageType; guCoverImage * CoverImage = NULL; wxImage * Image = guGetRemoteImage( m_UrlStr, ImageType ); if( Image ) { if( !TestDestroy() ) { CoverImage = new guCoverImage( m_UrlStr, m_SizeStr, Image ); } else { //guLogWarning( wxT( "Could not load image from the net index %u." ), LastDownload ); delete Image; } } if( !TestDestroy() ) { //guLogMessage( wxT( "Done: '%s'" ), m_UrlStr.c_str() ); //m_CoverEditor->m_DownloadEventsMutex.Lock(); wxCommandEvent event( wxEVT_COMMAND_MENU_SELECTED, ID_COVEREDITOR_ADDCOVERIMAGE ); event.SetClientObject( ( wxClientData * ) this ); event.SetClientData( CoverImage ); wxPostEvent( m_CoverEditor, event ); //m_CoverEditor->m_DownloadEventsMutex.Unlock(); } else { if( CoverImage ) delete CoverImage; } return 0; }
// -------------------------------------------------------------------------------- // wxImage * guGetRemoteImage( const wxString &url, wxBitmapType &imgtype ) { wxImage * Image = NULL; wxURI Uri( url ); wxString FileName = Uri.GetPath().Lower(); //guLogMessage( wxT( "Downloading '%s' from '%s'" ), FileName.c_str(), url.c_str() ); wxMemoryOutputStream Buffer; wxCurlHTTP http; http.AddHeader( wxT( "User-Agent: " ) guDEFAULT_BROWSER_USER_AGENT ); //http.AddHeader( wxT( "Accept: */*" ) ); //http.SetOpt( CURLOPT_FOLLOWLOCATION, 1 ); try { http.Get( Buffer, url ); if( Buffer.IsOk() ) { long ResCode = http.GetResponseCode(); //guLogMessage( wxT( "ResCode: %lu" ), ResCode ); if( ( ResCode < 200 ) || ( ResCode > 299 ) ) { //guLogMessage( wxT( "Code : %u\n%s" ), ResCode, http.GetResponseHeader().c_str() ); if( ( ResCode == 301 ) || ( ResCode == 302 ) || ( ResCode == 307 ) ) { wxString Location = http.GetResponseHeader(); int Pos = Location.Lower().Find( wxT( "location: " ) ); if( Pos != wxNOT_FOUND ) { Location = Location.Mid( Pos + 10 ); Location.Truncate( Location.Find( wxT( "\r\n" ) ) ); return guGetRemoteImage( Location, imgtype ); } } } // if( ResCode != 200 ) // { // guLogMessage( wxT( "Error %u getting remote image '%s'\n%s" ), // http.GetResponseCode(), // url.c_str(), // http.GetResponseHeader().c_str() ); // } wxMemoryInputStream Ins( Buffer ); if( Ins.IsOk() ) { if( FileName.EndsWith( wxT( ".jpg" ) ) || FileName.EndsWith( wxT( ".jpeg" ) ) ) imgtype = wxBITMAP_TYPE_JPEG; else if( FileName.EndsWith( wxT( ".png" ) ) ) imgtype = wxBITMAP_TYPE_PNG; else if( FileName.EndsWith( wxT( ".gif" ) ) ) imgtype = wxBITMAP_TYPE_GIF; else if( FileName.EndsWith( wxT( ".bmp" ) ) ) imgtype = wxBITMAP_TYPE_BMP; else imgtype = wxBITMAP_TYPE_INVALID; if( imgtype != wxBITMAP_TYPE_INVALID ) { Image = new wxImage( Ins, imgtype ); if( Image ) { if( Image->IsOk() ) { return Image; } delete Image; } } } } } catch( ... ) { guLogError( wxT( "Exception downloading image '%s'" ), url.c_str() ); } return NULL; }