diff -r f683e24efca3 -r 608f67c22514 internetradio2.0/dataprovidersrc/irdataprovider.cpp --- a/internetradio2.0/dataprovidersrc/irdataprovider.cpp Wed Jun 23 18:04:00 2010 +0300 +++ b/internetradio2.0/dataprovidersrc/irdataprovider.cpp Tue Jul 06 14:07:20 2010 +0300 @@ -15,6 +15,9 @@ * */ +#include +#include +#include #include "irdataprovider.h" #include "irdataproviderobserver.h" @@ -23,6 +26,9 @@ #include "irhttprequestdata.h" #include "irsettings.h" +_LIT( KGzXmlFile, "iSdsResponse.xml.gz" ); +_LIT( KXmlFile, "iSdsResponse.xml" ); + // --------------------------------------------------------------------------- // CIRDataProvider::NewL(MIRDataProviderObserver& aObserver) // Creates instance of CIRDataProvider. @@ -110,7 +116,7 @@ // Create or replace the file used to store xml response from iSDS - User::LeaveIfError(iFile.Replace( iFsSession, iXmlFilePath, EFileWrite )); + User::LeaveIfError(iFile.Replace( iFsSession, iXmlGzFilePath, EFileWrite )); iHttpDataProvider->CancelTransaction(); TInt err = iHttpDataProvider->IssueHttpRequestL( aRequestObject ); @@ -179,6 +185,10 @@ iFile.Close(); iDataProviderTimer->Cancel(); + // unzip the gz file + TRAP_IGNORE( UnzipFileL( iXmlFilePath ) ); + // delete the original gz file + BaflUtils::DeleteFile( iFsSession, iXmlGzFilePath ); // Need to take a member to a local variable, as the IRHttpDataReceived may initiate // an IRHttpIssueRequestL() call, causing the headers to be replaced with empty ones, and // causing crashes. @@ -341,8 +351,7 @@ void CIRDataProvider::ConstructL() // second-phase constructor { IRLOG_DEBUG( "CIRDataProvider::ConstructL - Entering" ); - _LIT( KXmlFile, "iSdsResponse.xml" ); - ConstructL(KXmlFile); + ConstructL( KGzXmlFile ); iHttpDataProvider->iSetNonUAProfUserAgent = EFalse; IRLOG_DEBUG( "CIRDataProvider::ConstructL - Exiting" ); } @@ -359,8 +368,10 @@ iDataProviderTimer = CIRDataProviderTimer::NewL( EPriorityHigh, *this ); User::LeaveIfError(iFsSession.Connect()); iIRSettings = CIRSettings::OpenL(); - iXmlFilePath = iIRSettings->PrivatePath(); - iXmlFilePath.Append( aFileName ); + iXmlGzFilePath = iIRSettings->PrivatePath(); + iXmlFilePath = iXmlGzFilePath; + iXmlGzFilePath.Append( aFileName ); + iXmlFilePath.Append( KXmlFile ); iTimeOut = iIRSettings->GetTimeOut(); iHttpDataProvider->iSetNonUAProfUserAgent = ETrue; IRLOG_DEBUG( "CIRDataProvider::ConstructL(const TDesC &aFileName) - Exiting." ); @@ -430,4 +441,25 @@ IRLOG_DEBUG( "CIRDataProvider::SetOffsetSeconds - Exiting." ); } +// --------------------------------------------------------------------------- +// CIRDataProvider::UnzipFileL +// --------------------------------------------------------------------------- +// +void CIRDataProvider::UnzipFileL( const TDesC& aOutputFile ) + { + IRLOG_DEBUG( "CIRDataProvider::UnzipFileL - Enter." ); + RFile outputFile; + CleanupClosePushL( outputFile ); + User::LeaveIfError( outputFile.Replace( iFsSession, aOutputFile, + EFileStream | EFileWrite | EFileShareExclusive ) ); + CEZGZipToFile* gZip = + CEZGZipToFile::NewLC( iFsSession, iXmlGzFilePath, outputFile ); + while ( gZip->InflateL() ) + { + // unzip the gz file, quit when finish + } + CleanupStack::PopAndDestroy( gZip ); + CleanupStack::PopAndDestroy( &outputFile ); + IRLOG_DEBUG( "CIRDataProvider::UnzipFileL - Exit." ); + }