diff -r 48060abbbeaf -r b3cee849fa46 creator/src/creator_fileelement.cpp --- a/creator/src/creator_fileelement.cpp Thu Aug 19 09:55:38 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,315 +0,0 @@ -/* -* Copyright (c) 2008 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: -* -*/ - - -#include "creator_fileelement.h" -#include -#include -#include "creator_traces.h" -#include "creator_file.h" - -using namespace creatorfile; - -// 15 minutes per time zone, 60 seconds per minute -const TInt KSecondsPerTimeZone = 900; -const TInt KMinuteInMicroseconds = 60000000; -const TInt KTimeZoneIncrement = 15; - -/* - * - */ -CCreatorFileElement* CCreatorFileElement::NewL(CCreatorEngine* aEngine, const TDesC& aName, const TDesC& aContext ) - { - CCreatorFileElement* self = new (ELeave) CCreatorFileElement(aEngine); - CleanupStack::PushL(self); - self->ConstructL(aName, aContext); - CleanupStack::Pop(self); - return self; - } -/* - * - */ -CCreatorFileElement::CCreatorFileElement(CCreatorEngine* aEngine) -: -CCreatorScriptElement(aEngine) - { - iIsCommandElement = ETrue; - - TTime currUniversal; - TTime currLocal; - TInt64 result( 0 ); - currUniversal.UniversalTime(); - currLocal.HomeTime(); - result = currLocal.Int64() - currUniversal.Int64(); - result /= KMinuteInMicroseconds; - result /= KTimeZoneIncrement; - iTimeZone = I64INT( result ); - } -/* - * - */ -void CCreatorFileElement::ExecuteCommandL() - { - const CCreatorScriptAttribute* amountAttr = FindAttributeByName(KAmount); - TInt fileAmount = 1; - if( amountAttr ) - { - fileAmount = ConvertStrToIntL(amountAttr->Value()); - } - // Get 'fields' element - CCreatorScriptElement* fieldsElement = FindSubElement(KFields); - if( fieldsElement && fieldsElement->SubElements().Count() > 0) - { - // Get sub-elements - const RPointerArray& fields = fieldsElement->SubElements(); - // Create files, the amount of files is defined by fileAmount: - for( TInt cI = 0; cI < fileAmount; ++cI ) - { - CFilesParameters* param = new (ELeave) CFilesParameters; - CleanupStack::PushL( param ); - - for( TInt i = 0; i < fields.Count(); ++i ) - { - CCreatorScriptElement* field = fields[i]; - TPtrC elemName = field->Name(); - TPtrC elemContent = field->Content(); - - const CCreatorScriptAttribute* randomAttr = field->FindAttributeByName( KRandomLength ); - - if( elemName == KType ) - { - param->iFileCommand = GetFileCommandL(elemContent, randomAttr || elemContent.Length() == 0); - } - else if( elemName == KDirectory ) - { - delete param->iFullFilePath; - param->iFullFilePath = 0; - if( randomAttr == 0 && elemContent.Length() > 0 ) - { - param->iFullFilePath = elemContent.AllocL(); - } - else - { - TFileName defaultPath; - iEngine->SetDefaultPathForFileCommandL( param->iFileCommand, defaultPath ); - param->iFullFilePath = defaultPath.AllocL(); - } - } - else if ( elemName == KEncryption ) - { - ParseDRMElementsL( field, param ); - } - } - - if ( !param->iFileCommand ) - { - param->iFileCommand = ECmdCreateFileEntryEmptyFolder; - } - iEngine->AppendToCommandArrayL( param->iFileCommand, param); - CleanupStack::Pop( param ); - } - } - else - { - _LIT(KDummy, ""); - for( TInt cI = 0; cI < fileAmount; ++cI ) - { - CFilesParameters* param = new (ELeave) CFilesParameters; - CleanupStack::PushL(param); - delete param->iFullFilePath; - param->iFullFilePath = 0; - TFileName defaultPath; - param->iFileCommand = GetFileCommandL(KDummy, ETrue); - iEngine->SetDefaultPathForFileCommandL(param->iFileCommand, defaultPath); - param->iFullFilePath = defaultPath.AllocL(); - - iEngine->AppendToCommandArrayL(param->iFileCommand, param); - CleanupStack::Pop(param); - } - } - } - -TInt CCreatorFileElement::GetFileCommandL( const TDesC& aFileIdStr, TBool aRandom ) const - { - TInt mapCount = sizeof(FileMap) / sizeof(FileMapping); - - if( aRandom ) - { - return FileMap[iEngine->RandomNumber(0, mapCount-1)].CommandId(); - } - - for( TInt i = 0; i < mapCount; ++i ) - { - if( CompareIgnoreCase(FileMap[i].FileName(), aFileIdStr) == 0 ) - return FileMap[i].CommandId(); - } - LOGSTRING2("CCreatorFileElement::GetFileCommandL: Unknown file id: %S", &aFileIdStr); - User::Leave(KErrGeneral); - return 0; // Not reached, but disables compiler warning... - } - -void CCreatorFileElement::ParseDRMElementsL( CCreatorScriptElement* aField, CFilesParameters* aParam ) - { - const CCreatorScriptAttribute* encryptionTypeAttr = aField->FindAttributeByName( KType ); - if ( encryptionTypeAttr && encryptionTypeAttr->Value().Length() > 0 ) - { - aParam->iEncrypt = ETrue; - if ( encryptionTypeAttr->Value() == KDRMCD ) - { - delete aParam->iPermission; - aParam->iPermission = NULL; - // ownership transferred: - aParam->iPermission = CDRMPermission::NewL(); - } - else if ( encryptionTypeAttr->Value() != KDRMFL ) - { - // must be either KDRMCD or KDRMFL - User::Leave( KErrArgument ); - } - } - else - { - User::Leave( KErrArgument ); - } - - const RPointerArray& rights = aField->SubElements(); - - if ( encryptionTypeAttr->Value() == KDRMFL && rights.Count() ) - { - // Right definitions not allowed with DRM Forward Lock - // User::Leave( KErrArgument ); // Do not leave here - return; // Just omit rights definitions - } - - // parse right elements - CDRMPermission* drmPermission = aParam->iPermission; - for ( TInt r = 0; r < rights.Count(); r++ ) - { - const CCreatorScriptAttribute* rightAttr = rights[r]->FindAttributeByName( KType ); - if ( rightAttr->Value() == KDRMPlayRight && - !( drmPermission->iAvailableRights & ERightsPlay ) ) - { - drmPermission->iAvailableRights |= ERightsPlay; - ParseDRMConstraintsL( rights[r], drmPermission->iPlay ); - } - else if ( rightAttr->Value() == KDRMDisplayRight && - !( drmPermission->iAvailableRights & ERightsDisplay )) - { - drmPermission->iAvailableRights |= ERightsDisplay; - ParseDRMConstraintsL( rights[r], drmPermission->iDisplay ); - } - else if ( rightAttr->Value() == KDRMPrintRight && - !( drmPermission->iAvailableRights & ERightsPrint ) ) - { - drmPermission->iAvailableRights |= ERightsPrint; - ParseDRMConstraintsL( rights[r], drmPermission->iPrint ); - } - else if ( rightAttr->Value() == KDRMExecuteRight && - !( drmPermission->iAvailableRights & ERightsExecute ) ) - { - drmPermission->iAvailableRights |= ERightsExecute; - ParseDRMConstraintsL( rights[r], drmPermission->iExecute ); - } - } - } - -void CCreatorFileElement::ParseDRMConstraintsL( CCreatorScriptElement* aRight, CDRMConstraint* aConstraint ) - { - const RPointerArray& constraints = aRight->SubElements(); - for ( TInt c = 0; c < constraints.Count(); c++ ) - { - TPtrC elemName = constraints[c]->Name(); - TPtrC elemContent = constraints[c]->Content(); - if ( elemName == KDRMCount ) - { - TInt count = ConvertStrToIntL( elemContent ); - // apply count constraint - aConstraint->iActiveConstraints |= EConstraintCounter; - aConstraint->iCounter = count; - aConstraint->iOriginalCounter = count; - } - else if ( elemName == KDRMInterval ) - { - // apply interval constraint - aConstraint->iActiveConstraints |= EConstraintInterval; - aConstraint->iInterval = ParseTimeInterval( elemContent ); - aConstraint->iIntervalStart = Time::NullTTime(); - } - else if ( elemName == KDRMStartTime ) - { - // apply start time constraint - aConstraint->iActiveConstraints |= EConstraintStartTime; - TTimeIntervalSeconds offset( iTimeZone * KSecondsPerTimeZone ); - aConstraint->iStartTime = ConvertToDateTimeL( elemContent ) - offset; - } - else if ( elemName == KDRMEndTime ) - { - // apply end time constraint - aConstraint->iActiveConstraints |= EConstraintEndTime; - TTimeIntervalSeconds offset( iTimeZone * KSecondsPerTimeZone ); - aConstraint->iEndTime = ConvertToDateTimeL( elemContent ) - offset; - } - else if ( elemName == KDRMAccumulated ) - { - // apply accumulated time constraint - aConstraint->iActiveConstraints |= EConstraintAccumulated; - if ( aConstraint->iEndTime == Time::NullTTime() ) - { - aConstraint->iEndTime = Time::MaxTTime(); - } - if ( aConstraint->iStartTime == Time::NullTTime() ) - { - aConstraint->iStartTime = Time::MinTTime(); - } - aConstraint->iAccumulatedTime = ParseTimeInterval( elemContent ); - } - } - } - -TTimeIntervalSeconds CCreatorFileElement::ParseTimeInterval( TDesC& aTimeString ) - { - // Iso8601 format (P1Y2M3DT4H5M6S) to TimeIntervalSeconds - TLex lex; - TInt year = 0; - TInt month = 0; - TInt day = 0; - TInt hour = 0; - TInt minute = 0; - TInt second = 0; - - if (aTimeString.Length() > 0) - { - lex = aTimeString; - lex.Inc(); // skip 'P' - lex.Val(year); - lex.Inc(); - lex.Val(month); - lex.Inc(); - lex.Val(day); - lex.Inc(2); - lex.Val(hour); - lex.Inc(); - lex.Val(minute); - lex.Inc(); - lex.Val(second); - } - TTimeIntervalSeconds result( ( ( ( year * 365 + month * 30 + day ) * 24 + hour ) - * 60 + minute ) * 60 + second ); - return result; - } - -// End of file