diff -r 000000000000 -r e6b17d312c8b brandingserver/bsserver/cbsibywriter.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/brandingserver/bsserver/cbsibywriter.cpp Thu Dec 17 08:54:49 2009 +0200 @@ -0,0 +1,235 @@ +/* +* Copyright (c) 2006-2006 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Writes IBY files +* +*/ + + +#include +#include +#include + +#include "cbsibywriter.h" +#include "bsimportconstants.h" +//#include "importlogwriter.h" +#include "debugtrace.h" + +// CONSTANTS +_LIT8( KIBYHeader1, "\n#ifndef __BRAND_" ); +_LIT8( KIBYHeader2, "\n#define __BRAND_" ); +_LIT8( KIBYHeaderEnd, "_IBY_" ); +_LIT8( KIBYFileItem, "\nfile=" ); +_LIT8( KIBYEmptyLine, "\n" ); +_LIT8( KIBYSpace, " \t\t " ); +_LIT8( KIBYFooter, "\n#endif //__BRAND_" ); + +// File & dir +_LIT8( KIBYBaseSource, "\\epoc32\\winscw\\c" ); + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CBSIBYWriter::NewL +// --------------------------------------------------------------------------- +// +CBSIBYWriter* CBSIBYWriter::NewL() + { + CBSIBYWriter* self = NewLC(); + CleanupStack::Pop(); + return self; + } + +// --------------------------------------------------------------------------- +// CBSIBYWriter::NewLC +// --------------------------------------------------------------------------- +// +CBSIBYWriter* CBSIBYWriter::NewLC() + { + CBSIBYWriter* self = new (ELeave) CBSIBYWriter(); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------------------------- +// CBSIBYWriter::ConstructL +// --------------------------------------------------------------------------- +// +void CBSIBYWriter::ConstructL() + { + } + +// --------------------------------------------------------------------------- +// CBSIBYWriter::CBSIBYWriter +// --------------------------------------------------------------------------- +// +CBSIBYWriter::CBSIBYWriter() + { + } + +// --------------------------------------------------------------------------- +// CBSIBYWriter::~CBSIBYWriter +// --------------------------------------------------------------------------- +// +CBSIBYWriter::~CBSIBYWriter() + { + iSourcePath.ResetAndDestroy(); + iSourceFiles.ResetAndDestroy(); + iDestinations.ResetAndDestroy(); + delete iIbyFile; + } + +// --------------------------------------------------------------------------- +// CBSIBYWriter::SetFileItemL +// --------------------------------------------------------------------------- +// +void CBSIBYWriter::SetFileItemL( const TDesC& aSrc, const TDesC& aDest ) + { + TRACE( T_LIT( "CBSIBYWriter::SetFileItemL begin") ); + // Parse and construct filenames + TParse srcparse; + srcparse.Set( aSrc, NULL, NULL ); + + TParse dstparse; + dstparse.Set( aDest, NULL, NULL ); + + // Path + HBufC8* srcpath = HBufC8::NewLC( srcparse.Path().Length() ); + TPtr8 ptr( srcpath->Des() ); + CnvUtfConverter::ConvertFromUnicodeToUtf8( ptr, srcparse.Path() ); + + HBufC8* src = HBufC8::NewLC( srcparse.NameAndExt().Length() ); + ptr.Set( src->Des() ); + CnvUtfConverter::ConvertFromUnicodeToUtf8( ptr, srcparse.NameAndExt() ); + + HBufC8* dst = HBufC8::NewLC( aDest.Length() ); + ptr.Set( dst->Des() ); + + HBufC* newDst = HBufC::NewLC( aDest.Length() ); + TPtr dstPtr( newDst->Des() ); + TPtrC name = dstparse.NameAndExt(); + TPtrC path = dstparse.Path(); + dstPtr.Append( KBSZDrive ); + dstPtr.Append( path ); + dstPtr.Append( name ); + + CnvUtfConverter::ConvertFromUnicodeToUtf8( ptr, dstPtr ); + + TRACE( T_LIT( "CBSIBYWriter::SetFileItemL - setting source file %S"), &aSrc ); + TRACE( T_LIT( "CBSIBYWriter::SetFileItemL - setting destination file %S"), newDst ); + CleanupStack::PopAndDestroy( newDst ); + CleanupStack::Pop( 3 ); + + // Append filepair + iSourcePath.Append( srcpath ); + iSourceFiles.Append( src ); + iDestinations.Append( dst ); + + TRACE( T_LIT( "CBSIBYWriter::SetFileItemL end") ); + } + +// --------------------------------------------------------------------------- +// CBSIBYWriter::WriteIBYFile() +// --------------------------------------------------------------------------- +// +void CBSIBYWriter::WriteIBYFileL( RFs& aFs, const TDesC& aFileName ) + { + TRACE( T_LIT( "CBSIBYWriter::WriteIBYFileL begin") ); + + TInt count = iSourceFiles.Count(); + if( count == 0 ) + { + TRACE( T_LIT( "CBSIBYWriter::WriteIBYFileL - No file elements, nothing to do.") ); + return; + } + if( count != iDestinations.Count() ) + { + TRACE( T_LIT("Internal error: IBY filename count mismatch ( %d != %d )"), + count, iDestinations.Count() ); + User::Leave( KErrCorrupt ); + } + + RFile outfile; + TInt err = outfile.Open( aFs, aFileName, EFileWrite ); + if( err == KErrNotFound ) + { + TRACE( T_LIT( "CBSIBYWriter::WriteIBYFileL - IBY file not initialized!") ); + // if the file is not initialized -> not ready + err = KErrNotReady; + } + User::LeaveIfError( err ); + + // write data + TInt size = -1; + User::LeaveIfError( outfile.Size( size ) ); + + outfile.Write( size, KIBYEmptyLine ); + + TRACE( T_LIT( "CBSIBYWriter::WriteIBYFileL - start writing files to IBY") ); + + for( TInt i = 0; i < count; i++ ) + { + outfile.Write( KIBYFileItem ); + outfile.Write( KIBYBaseSource ); + outfile.Write( iSourcePath[i]->Des() ); + outfile.Write( iSourceFiles[i]->Des() ); + outfile.Write( KIBYSpace ); + outfile.Write( iDestinations[i]->Des() ); + TRACE( T_LIT( "CBSIBYWriter::WriteIBYFileL - %S"), iDestinations[i] ); + } + + TRACE( T_LIT( "CBSIBYWriter::WriteIBYFileL - writing IBY file footer") ); + outfile.Write( KIBYEmptyLine ); + outfile.Write( KIBYFooter ); + outfile.Write( KIBYHeaderEnd ); + + // cleanup + outfile.Close(); + TRACE( T_LIT( "CBSIBYWriter::WriteIBYFileL end") ); + } + +// --------------------------------------------------------------------------- +// CBSIBYWriter::WriteIBYFile() +// --------------------------------------------------------------------------- +// +void CBSIBYWriter::InitIbyFileL( RFs& aFs, const TDesC& aFileName ) + { + TRACE( T_LIT( "CBSIBYWriter::InitIbyFileL begin") ); + HBufC* temp = aFileName.AllocL(); + delete iIbyFile; + iIbyFile = temp; + + TInt err = aFs.MkDir( KBSIbyDirectory ); + if( err == KErrAlreadyExists ) + { + err = KErrNone; + } + User::LeaveIfError( err ); + + TRACE( T_LIT( "CBSIBYWriter::InitIbyFileL IBY directory (%S) created"), &KBSIbyDirectory() ); + + // Open file for writing + RFile outfile; + User::LeaveIfError( outfile.Replace( aFs, aFileName, EFileWrite ) ); + + TRACE( T_LIT( "CBSIBYWriter::InitIbyFileL IBY file (%S) created"), &aFileName ); + + outfile.Write( KIBYHeader1 ); + outfile.Write( KIBYHeaderEnd ); + outfile.Write( KIBYHeader2 ); + outfile.Write( KIBYHeaderEnd ); + outfile.Close(); + TRACE( T_LIT( "CBSIBYWriter::InitIbyFileL end") ); + } +// End of file