diff -r 000000000000 -r 3ce708148e4d customization/isadapter/src/isadapter.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/customization/isadapter/src/isadapter.cpp Thu Dec 17 08:40:12 2009 +0200 @@ -0,0 +1,2537 @@ +/* +* Copyright (c) 2002 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: DM Idle SoftKey Adapter +* +*/ + + +#include "isadapter.h" + +#include "IsAdapterDefines.h" +#include "IsAdapterLiterals.h" +#include "IdleSoftkeysAppTargetManager.h" +#include "UiSettingsUtil.h" + +// symbian +#include +#include +#include +// s60 +#include + +// tarm +//#ifdef __SAP_POLICY_MANAGEMENT +#include +#include +#include +//#endif + +//#include "UISettingsSrvConstants.h" +#include "IsAdapterConstants.h" +#include "nsmldmiapmatcher.h" +#include "nsmldmuri.h" +#include "TPtrC8I.h" +#include "TARMCharConv.h" +#include "FileCoderB64.h" +#include "debug.h" +#include +// ------------------------------------------------------------------------------------------------ +// CIsAdapter* CIsAdapter::NewL( ) +// ------------------------------------------------------------------------------------------------ +CIsAdapter* CIsAdapter::NewL(MSmlDmCallback* aDmCallback ) + { + RDEBUG( "CIsAdapter::NewL() >" ); + CIsAdapter* self = NewLC( aDmCallback ); + CleanupStack::Pop(); + RDEBUG( "CIsAdapter::NewL() <" ); + return self; + } + +// ------------------------------------------------------------------------------------------------ +// CIsAdapter* CIsAdapter::NewLC( ) +// ------------------------------------------------------------------------------------------------ +CIsAdapter* CIsAdapter::NewLC(MSmlDmCallback* aDmCallback ) + { + RDEBUG( "CIsAdapter::NewLC() >" ); + CIsAdapter* self = new (ELeave) CIsAdapter(aDmCallback); + CleanupStack::PushL(self); + self->ConstructL(aDmCallback); + RDEBUG( "CIsAdapter::NewLC() <" ); + return self; + } + +// ------------------------------------------------------------------------------------------------ +// CIsAdapter::CIsAdapter() +// ------------------------------------------------------------------------------------------------ +CIsAdapter::CIsAdapter(TAny* aEcomArguments) +: CTARMDmStreamAdapter((MSmlDmCallback*)aEcomArguments) +, iFavList(0) +, iWebTargetManager(0) +, iAppTargetManager(0) +, iUiSettings(0) + { + RDEBUG( "CIsAdapter::CIsAdapter()" ); + iUiSettingsNotInitialized = ETrue; + } + +// ------------------------------------------------------------------------------------------------ +// CIsAdapter::~CIsAdapter() +// ------------------------------------------------------------------------------------------------ +CIsAdapter::~CIsAdapter() + { + RDEBUG( "CIsAdapter::~CIsAdapter() >" ); + FeatureManager::UnInitializeLib(); + delete iWebTargetManager; + delete iAppTargetManager; + delete iUiSettings; + + iFavDb.Close(); + iFavSession.Close(); + + if( iFavList != 0 ) + { + delete iFavList; + iFavList = 0; + } + + if( iTemporaryImageFile.Length() > 0 ) + { + RDEBUG( "CIsAdapter::~CIsAdapter() Deleting temporary file" ); + RFs fs; + TInt err = fs.Connect(); + if( err == KErrNone ) + { + fs.Delete( iTemporaryImageFile ); + fs.Close(); + iTemporaryImageFile.Zero(); + } + } + + RDEBUG( "CIsAdapter::~CIsAdapter() <" ); + } + + + +// ------------------------------------------------------------------------------------------------ +// CIsAdapter::DDFVersionL() +// ------------------------------------------------------------------------------------------------ +void CIsAdapter::DDFVersionL(CBufBase& aDDFVersion) + { + RDEBUG( "CIsAdapter::DDFVersionL() >" ); + + aDDFVersion.InsertL(0,KNSmlISDDFVersion); + + RDEBUG( "CIsAdapter::DDFVersionL() <" ); + } + +// ------------------------------------------------------------------------------------------------ +// CIsAdapter::DDFStructureL() +// ------------------------------------------------------------------------------------------------ +void CIsAdapter::DDFStructureL( MSmlDmDDFObject& aDDF ) + { + RDEBUG( "CIsAdapter::DDFStructureL() >" ); + + TSmlDmAccessTypes accessTypesGet; + accessTypesGet.SetGet(); + + TSmlDmAccessTypes accessTypesAddGet; + accessTypesAddGet.SetAdd(); + accessTypesAddGet.SetGet(); + + TSmlDmAccessTypes accessTypesGetReplace; + accessTypesGetReplace.SetGet(); + accessTypesGetReplace.SetReplace(); + + TSmlDmAccessTypes accessTypesADGR; + accessTypesADGR.SetAdd(); + accessTypesADGR.SetDelete(); + accessTypesADGR.SetGet(); + accessTypesADGR.SetReplace(); + + /* + Node: ./Customzation + This interior node is the common parent to all customization.. + Status: Required + Occurs: One + Format: Node + Access Types: Get + Values: N/A + */ + MSmlDmDDFObject& apps = aDDF.AddChildObjectL(KNSmlCustomizationNodeName); + FillNodeInfoL(apps,accessTypesGet,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent,MSmlDmDDFObject::ENode, + KNSmlISDescription,KNullDesC8()); + + /* + Node: ./Customization/IdleSoftKey + This interior node acts as a placeholder for one or more update packages within a same content provider group. + Status: Required + Occurs: One + Format: Node + Access Types: Get + Values: N/A + */ + MSmlDmDDFObject& groupNode = apps.AddChildObjectL(KNSmlIS_IdleSoftKeyNodeName); + FillNodeInfoL(groupNode,accessTypesGet,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent, + MSmlDmDDFObject::ENode,KNSmlISIdleSoftKeyNodeDescription,KNullDesC8()); + + // IdleSoftkeys/* + MSmlDmDDFObject& groupNodeSoftkeys = groupNode.AddChildObjectL(KNSmlIS_SoftKeysNodeName); + FillNodeInfoL(groupNodeSoftkeys,accessTypesGet,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent, + MSmlDmDDFObject::ENode,KNSmlISSoftkeysNodeDescription,KNullDesC8()); + + MSmlDmDDFObject& groupNodeTargets = groupNode.AddChildObjectL(KNSmlIS_TargetsNodeName); + FillNodeInfoL(groupNodeTargets,accessTypesGet,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent, + MSmlDmDDFObject::ENode,KNSmlISTargetsNodeDescription,KNullDesC8()); + + MSmlDmDDFObject& groupNodeWebTargets = groupNode.AddChildObjectL(KNSmlIS_WebTargetsNodeName); + FillNodeInfoL(groupNodeWebTargets,accessTypesAddGet,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent, + MSmlDmDDFObject::ENode,KNSmlISWebTargetsNodeDescription,KNullDesC8()); + + // Dynamic node lists, IdleSoftkeys/*/X + MSmlDmDDFObject& groupNodeSoftkeysX = groupNodeSoftkeys.AddChildObjectGroupL(); + FillNodeInfoL(groupNodeSoftkeysX,accessTypesGet,MSmlDmDDFObject::EOneOrMore,MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::ENode,KNSmlISSoftkeysXNodeDescription,KNullDesC8()); + + MSmlDmDDFObject& groupNodeTargetsX = groupNodeTargets.AddChildObjectGroupL(); + FillNodeInfoL(groupNodeTargetsX,accessTypesGet,MSmlDmDDFObject::EZeroOrMore,MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::ENode,KNSmlISTargetsXNodeDescription,KNullDesC8()); + + MSmlDmDDFObject& groupNodeWebTargetsX = groupNodeWebTargets.AddChildObjectGroupL(); + FillNodeInfoL(groupNodeWebTargetsX,accessTypesADGR,MSmlDmDDFObject::EZeroOrMore,MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::ENode,KNSmlISWebTargetsXNodeDescription,KNullDesC8()); + + // Softkeys/X/* + MSmlDmDDFObject& sId = groupNodeSoftkeysX.AddChildObjectL(KNSmlIS_SoftkeysIDNodeName); + FillNodeInfoL(sId,accessTypesGet,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent, + MSmlDmDDFObject::EChr,KNSmlIS_SoftkeysIDDescription,KNSmlISTextPlain()); + MSmlDmDDFObject& sRef = groupNodeSoftkeysX.AddChildObjectL(KNSmlIS_SoftkeysTargetRefNodeName); + FillNodeInfoL(sRef,accessTypesGetReplace,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent, + MSmlDmDDFObject::EChr,KNSmlIS_SoftkeysTargetRefDescription,KNSmlISTextPlain()); +#ifdef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES + MSmlDmDDFObject& sImage = groupNodeSoftkeysX.AddChildObjectL(KNSmlIS_SoftkeysImageNoneName); + FillNodeInfoL(sImage,accessTypesGetReplace,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent, + MSmlDmDDFObject::EBin,KNSmlIS_SoftkeysImageDescription,KMimeTypeImageMbm()); +#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK + MSmlDmDDFObject& sImageMask = groupNodeSoftkeysX.AddChildObjectL(KNSmlIS_SoftkeysMaskNodeName); + FillNodeInfoL(sImageMask,accessTypesGetReplace,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent, + MSmlDmDDFObject::EBin,KNSmlIS_SoftkeysMaskDescription,KMimeTypeImageMbm()); +#endif +#endif + // Targets/X/* + MSmlDmDDFObject& tId = groupNodeTargetsX.AddChildObjectL(KNSmlIS_TargetsIDNodeName); + FillNodeInfoL(tId,accessTypesGet,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent, + MSmlDmDDFObject::EChr,KNSmlIS_TargetsIDDescription,KNSmlISTextPlain()); + + MSmlDmDDFObject& tDesc = groupNodeTargetsX.AddChildObjectL(KNSmlIS_TargetsDescriptionNodeName); + FillNodeInfoL(tDesc,accessTypesGet,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent, + MSmlDmDDFObject::EChr,KNSmlIS_TargetsDescriptionDescription,KNSmlISTextPlain()); + + MSmlDmDDFObject& tCaption = groupNodeTargetsX.AddChildObjectL(KNSmlIS_TargetsCaptionName); + FillNodeInfoL(tCaption,accessTypesGetReplace,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent, + MSmlDmDDFObject::EChr,KNSmlIS_TargetsCaptionDescription,KNSmlISTextPlain()); + +#ifndef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES + MSmlDmDDFObject& tImage = groupNodeTargetsX.AddChildObjectL(KNSmlIS_TargetsImageNodeName); + FillNodeInfoL(tImage,accessTypesGetReplace,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent, + MSmlDmDDFObject::EBin,KNSmlIS_TargetsImageDescription,KMimeTypeImageMbm()); + +#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK + MSmlDmDDFObject& tImageMask = groupNodeTargetsX.AddChildObjectL(KNSmlIS_TargetsMaskNodeName); + FillNodeInfoL(tImageMask,accessTypesGetReplace,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent, + MSmlDmDDFObject::EBin,KNSmlIS_TargetsMaskDescription,KMimeTypeImageMbm()); +#endif +#endif + + // WebTargets/X/* + MSmlDmDDFObject& wId = groupNodeWebTargetsX.AddChildObjectL(KNSmlIS_WebTargetsIDNodeName); + FillNodeInfoL(wId,accessTypesGet,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent, + MSmlDmDDFObject::EChr,KNSmlIS_WebTargetsIDDescription,KNSmlISTextPlain()); + + MSmlDmDDFObject& wDesc = groupNodeWebTargetsX.AddChildObjectL(KNSmlIS_WebTargetsDescriptionNodeName); + FillNodeInfoL(wDesc,accessTypesGetReplace,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent, + MSmlDmDDFObject::EChr,KNSmlIS_WebTargetsDescriptionDescription,KNSmlISTextPlain()); + + MSmlDmDDFObject& wURL = groupNodeWebTargetsX.AddChildObjectL(KNSmlIS_WebTargetsURLNodeName); + FillNodeInfoL(wURL,accessTypesGetReplace,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent, + MSmlDmDDFObject::EChr,KNSmlIS_WebTargetsURLDescription,KNSmlISTextPlain()); + + MSmlDmDDFObject& wUserName = groupNodeWebTargetsX.AddChildObjectL(KNSmlIS_WebTargetsUserNameNodeName); + FillNodeInfoL(wUserName,accessTypesGetReplace,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent, + MSmlDmDDFObject::EChr,KNSmlIS_WebTargetsUserNameDescription,KNSmlISTextPlain()); + + MSmlDmDDFObject& wPassword = groupNodeWebTargetsX.AddChildObjectL(KNSmlIS_WebTargetsPasswordNodeName); + FillNodeInfoL(wPassword,accessTypesGetReplace,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent, + MSmlDmDDFObject::EChr,KNSmlIS_WebTargetsPasswordDescription,KNSmlISTextPlain()); + + MSmlDmDDFObject& wConRef = groupNodeWebTargetsX.AddChildObjectL(KNSmlIS_WebTargetsConRefNodeName); + FillNodeInfoL(wConRef,accessTypesGetReplace,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent, + MSmlDmDDFObject::EChr,KNSmlIS_WebTargetsConRefDescription,KNSmlISTextPlain()); + + MSmlDmDDFObject& wCaption = groupNodeWebTargetsX.AddChildObjectL(KNSmlIS_WebTargetsCaptionNodeName); + FillNodeInfoL(wCaption,accessTypesGetReplace,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent, + MSmlDmDDFObject::EChr,KNSmlIS_WebTargetsCaptionDescription,KNSmlISTextPlain()); + +#ifndef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES + MSmlDmDDFObject& wImage = groupNodeWebTargetsX.AddChildObjectL(KNSmlIS_WebTargetsImageNodeName); + FillNodeInfoL(wImage,accessTypesGetReplace,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent, + MSmlDmDDFObject::EBin,KNSmlIS_WebTargetsImageDescription,KMimeTypeImageMbm()); + +#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK + MSmlDmDDFObject& wImageMask = groupNodeWebTargetsX.AddChildObjectL(KNSmlIS_WebTargetsMaskNodeName); + FillNodeInfoL(wImageMask,accessTypesGetReplace,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent, + MSmlDmDDFObject::EBin,KNSmlIS_WebTargetsMaskDescription,KMimeTypeImageMbm()); +#endif +#endif + + RDEBUG( "CIsAdapter::DDFStructureL() <" ); + } + +// ------------------------------------------------------------------------------------------------ +// CIsAdapter::UpdateLeafObjectL() +// ------------------------------------------------------------------------------------------------ +void CIsAdapter::UpdateLeafObjectL( CSmlDmAdapter::TError &aStatus, + const TDesC8& aURI, const TDesC8& aLUID, + const TDesC8& aObject, const TDesC8& aType) + { + RDEBUG( "CIsAdapter::UpdateLeafObjectL() >" ); +#ifdef __TARM_SYMBIAN_CONVERGENCY + TPtrC8 uriPtrc = NSmlDmURI::RemoveDotSlash( aURI ); + CIsAdapter::TIsNodeIdentifier identifier = GetNodeIdentifier( uriPtrc ); +#else + CIsAdapter::TIsNodeIdentifier identifier = GetNodeIdentifier( aURI ); +#endif + + HBufC16* strBuf; + TInt value; + CFavouritesItem *favItem = CFavouritesItem::NewLC(); + RDEBUG_2( "CIsAdapter::UpdateLeafObjectL() CFavouritesItem ALLOC %x", favItem ); + TPtrC8 ptr8(0, 0); + + switch( identifier ) + { + +#ifdef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES + case EIsNodeSoftKeysXImage: + #ifdef __TARM_SYMBIAN_CONVERGENCY + SetSoftkeyImageL( uriPtrc, aObject, aType ); + #else + SetSoftkeyImageL( aURI, aObject, aType ); + #endif + break; + +#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK + case EIsNodeSoftKeysXMask: + #ifdef __TARM_SYMBIAN_CONVERGENCY + SetSoftkeyImageL( uriPtrc, aObject, aType ); + #else + SetSoftkeyImageL( aURI, aObject, aType ); + #endif + break; +#endif +#endif + + case EIsNodeSoftKeysXTargetRef: +#ifdef __TARM_SYMBIAN_CONVERGENCY + ptr8.Set( NSmlDmURI::URISeg( uriPtrc, 3 ) ); +#else + ptr8.Set( NSmlDmURI::URISeg( aURI, 3 ) ); +#endif + value = GetSoftkeyUidFromNodeNameL( ptr8 ); + SetShortcutTargetL( aObject, value ); + break; + + case EIsNodeTargetsXCaption: +#ifdef __TARM_SYMBIAN_CONVERGENCY + iAppTargetManager->SetCaptionL( uriPtrc, aObject ); +#else + iAppTargetManager->SetCaptionL( aURI, aObject ); +#endif + break; + +#ifndef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES + case EIsNodeTargetsXImage: + #ifdef __TARM_SYMBIAN_CONVERGENCY + SetShortcutTargetImageL( uriPtrc, aObject, aType ); + #else + SetShortcutTargetImageL( aURI, aObject, aType ); + #endif + + break; + +#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK + case EIsNodeTargetsXImageMask: + #ifdef __TARM_SYMBIAN_CONVERGENCY + SetShortcutTargetImageL( uriPtrc, aObject, aType ); + #else + SetShortcutTargetImageL( aURI, aObject, aType ); + #endif + break; +#endif +#endif + + case EIsNodeWebTargetsX: +#ifdef __TARM_SYMBIAN_CONVERGENCY + if( KErrNone != iWebTargetManager->RenameL( uriPtrc, aLUID, aObject ) ) +#else + if( KErrNone != iWebTargetManager->RenameL( aURI, aLUID, aObject ) ) +#endif + { + aStatus = CSmlDmAdapter::EError; + } + break; + + case EIsNodeWebTargetsXDescription: + case EIsNodeWebTargetsXURL: + case EIsNodeWebTargetsXUserName: + case EIsNodeWebTargetsXPassword: + case EIsNodeWebTargetsXConRef: + { +#ifdef __TARM_SYMBIAN_CONVERGENCY + iWebTargetManager->PrepareItemL( uriPtrc, *favItem, value ); +#else + iWebTargetManager->PrepareItemL( aURI, *favItem, value ); +#endif + strBuf = CTARMCharConv::ConvertFromUtf8LC( aObject ); + + switch( identifier ) + { + case EIsNodeWebTargetsXDescription: + favItem->SetNameL( *strBuf ); + break; + + case EIsNodeWebTargetsXURL: + favItem->SetUrlL( *strBuf ); + if( favItem->Url().Compare( *strBuf ) != 0 ) + { + RDEBUG( "CIsAdapter::UpdateLeafObjectL() Bookmark URL setting failed with FavouritesEngine!" ); + aStatus = CSmlDmAdapter::EError; + } + break; + + case EIsNodeWebTargetsXUserName: + favItem->SetUserNameL( *strBuf ); + break; + + case EIsNodeWebTargetsXPassword: + favItem->SetPasswordL( *strBuf ); + break; + + case EIsNodeWebTargetsXConRef: + TFavouritesWapAp wapAp; + if( aObject.Length() == 0 ) + { + wapAp.SetDefault(); + } + else + { + iWebTargetManager->FindWapApL( aObject, value ); + wapAp.SetApId( value ); + } + favItem->SetWapAp( wapAp ); + break; + } + + CleanupStack::PopAndDestroy( strBuf ); + iWebTargetManager->ReleaseItemL( *favItem ); + } + break; + + case EIsNodeWebTargetsXCaption: +#ifdef __TARM_SYMBIAN_CONVERGENCY + iWebTargetManager->SetCaptionL( uriPtrc, aObject ); +#else + iWebTargetManager->SetCaptionL( aURI, aObject ); +#endif + break; + +#ifndef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES + case EIsNodeWebTargetsXImage: + #ifdef __TARM_SYMBIAN_CONVERGENCY + SetShortcutTargetImageL( uriPtrc, aObject, aType ); + #else + SetShortcutTargetImageL( aURI, aObject, aType ); + #endif + break; + +#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK + case EIsNodeWebTargetsXImageMask: + #ifdef __TARM_SYMBIAN_CONVERGENCY + SetShortcutTargetImageL( uriPtrc, aObject, aType ); + #else + SetShortcutTargetImageL( aURI, aObject, aType ); + #endif + break; +#endif +#endif + + default: + aStatus = CSmlDmAdapter::EError; + break; + }; + + CleanupStack::PopAndDestroy( favItem ); + + RDEBUG( "CIsAdapter::UpdateLeafObjectL() <" ); + } + +// ------------------------------------------------------------------------------------------------ +// CIsAdapter::_UpdateLeafObjectL() +// ------------------------------------------------------------------------------------------------ +void CIsAdapter::_UpdateLeafObjectL( const TDesC8& aURI, const TDesC8& aLUID, + const TDesC8& aObject, const TDesC8& aType, + TInt aStatusRef ) + { + RDEBUG( "CIsAdapter::_UpdateLeafObjectL() >" ); + + TBuf8 mimeType; + CopyAndTrimMimeType(mimeType, aType); + + CSmlDmAdapter::TError status = CSmlDmAdapter::EOk; + +#ifdef __TARM_SYMBIAN_CONVERGENCY + TPtrC8 uriPtrc = NSmlDmURI::RemoveDotSlash( aURI ); + TRAPD( reason, + UpdateLeafObjectL( status, uriPtrc, aLUID, aObject, aType ) ); +#else + TRAPD( reason, + UpdateLeafObjectL( status, aURI, aLUID, aObject, aType ) ); +#endif + + if( KErrNone != reason ) + { + RDEBUG_2( "CIsAdapter::_UpdateLeafObjectL: Error code %d", reason ); + status = CSmlDmAdapter::EError; + } + + iCallBack->SetStatusL(aStatusRef, status); + + RDEBUG( "CIsAdapter::_UpdateLeafObjectL() <" ); + } + +// ------------------------------------------------------------------------------------------------ +// CIsAdapter::_UpdateLeafObjectL() +// ------------------------------------------------------------------------------------------------ +void CIsAdapter::_UpdateLeafObjectL( const TDesC8& /*aURI*/, const TDesC8& /*aLUID*/, + RWriteStream*& /*aStream*/, const TDesC8& /*aType*/, + TInt aStatusRef ) + { + RDEBUG( "CIsAdapter::_UpdateLeafObjectL() (stream) >" ); + + // SymbianConvergencyNote! Check _UpdateLeafObjectL() <-> removes the "./" ! + + CSmlDmAdapter::TError ret = CSmlDmAdapter::EError; + iCallBack->SetStatusL(aStatusRef, ret); + + RDEBUG( "CIsAdapter::_UpdateLeafObjectL() (stream) <" ); + } + +// ------------------------------------------------------------------------------------------------ +// CIsAdapter::DeleteObjectL +// ------------------------------------------------------------------------------------------------ +void CIsAdapter::DeleteObjectL( CSmlDmAdapter::TError &aStatus, const TDesC8& aURI, + const TDesC8& /*aLUID*/) + { + RDEBUG( "CIsAdapter::DeleteObjectL() >" ); + + // NOTE! Look _DeleteObjectL() <-> removes the "./" from the aURI !! + + CIsAdapter::TIsNodeIdentifier identifier = GetNodeIdentifier( aURI ); + CFavouritesItem *favItem = CFavouritesItem::NewLC(); + RDEBUG_2( "CIsAdapter::DeleteObjectL() CFavouritesItem ALLOC %x", favItem ); + TInt index; + TInt status = KErrNone; + + switch( identifier ) + { + case EIsNodeWebTargetsX: + status = iWebTargetManager->GetTargetFromNodeNameL( aURI, *favItem, index ); + if( (0 != favItem) && (KErrNone == status) ) + { + User::LeaveIfError( iFavDb.Delete( favItem->Uid() ) ); + iWebTargetManager->CheckLUIDDatabaseL( ETrue ); + //iWebTargetManager->iUiSettings->ReadBookmarksL(); + } + else + { + aStatus = CSmlDmAdapter::EError; + } + break; + + default: + aStatus = CSmlDmAdapter::EError; + break; + }; + + CleanupStack::PopAndDestroy( favItem ); + + RDEBUG( "CIsAdapter::DeleteObjectL() <" ); + } + +// ------------------------------------------------------------------------------------------------ +// CIsAdapter::_DeleteObjectL +// ------------------------------------------------------------------------------------------------ +void CIsAdapter::_DeleteObjectL( const TDesC8& aURI, const TDesC8& aLUID, TInt aStatusRef ) + { + RDEBUG( "CIsAdapter::_DeleteObjectL() >" ); + + CSmlDmAdapter::TError status = CSmlDmAdapter::EOk; + +#ifdef __TARM_SYMBIAN_CONVERGENCY + TPtrC8 uriPtrc = NSmlDmURI::RemoveDotSlash( aURI ); + TRAPD( reason, + DeleteObjectL( status, uriPtrc, aLUID ) ); +#else + TRAPD( reason, + DeleteObjectL( status, aURI, aLUID ) ); +#endif + + if( KErrNone != reason ) + { + RDEBUG_2( "CIsAdapter::_DeleteObjectL: Error code %d", reason ); + status = CSmlDmAdapter::EError; + } + + iCallBack->SetStatusL(aStatusRef, status); + + RDEBUG( "CIsAdapter::_DeleteObjectL() <" ); + } + +// ------------------------------------------------------------------------------------------------ +// CIsAdapter::FetchLeafObjectL +// ------------------------------------------------------------------------------------------------ +CSmlDmAdapter::TError CIsAdapter::FetchLeafObjectL( const TDesC8& aURI, const TDesC8& /*aLUID*/, + TDes8& aNewMime, CBufFlat& aObject ) + { + RDEBUG( "CIsAdapter::FetchLeafObjectL() >" ); + + // SymbianConvergency NOTE! Check _FetchLeafObjectL() <-> removes the "./" from the aURI + + TBuf8 mimeType; + CopyAndTrimMimeType(mimeType, aNewMime); + + CSmlDmAdapter::TError status = CSmlDmAdapter::EOk; + + CIsAdapter::TIsNodeIdentifier identifier = GetNodeIdentifier( aURI ); + + TInt softkeyUid; + HBufC8* strBuf = 0; + TBuf8 numBuf; + TBuf numBuf16; + CFavouritesItem *favItem = CFavouritesItem::NewLC(); + RDEBUG_2( "CIsAdapter::FetchLeafObjectL() CFavouritesItem ALLOC %x", favItem ); + TBuf8 caption; + TInt index; + + switch( identifier ) + { + case EIsNodeCustomization: + case EIsNodeIdleSoftkeys: + case EIsNodeSoftKeys: + case EIsNodeTargets: + case EIsNodeWebTargets: + case EIsNodeSoftKeysX: + case EIsNodeTargetsX: + case EIsNodeWebTargetsX: + // Empty + break; + +#ifdef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES + case EIsNodeSoftKeysXImage: + status = CSmlDmAdapter::EError; + //softkeyUid = GetSoftkeyUidFromNodeNameL( NSmlDmURI::URISeg( aURI, 3 ) ); + //GetSoftkeyImageL( softkeyUid, aObject ); + break; + +#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK + case EIsNodeSoftKeysXMask: + status = CSmlDmAdapter::EError; + //softkeyUid = GetSoftkeyUidFromNodeNameL( NSmlDmURI::URISeg( aURI, 3 ) ); + //GetSoftkeyImageL( softkeyUid, aObject, ETrue ); + break; +#endif +#endif + + case EIsNodeSoftKeysXID: + softkeyUid = GetSoftkeyUidFromNodeNameL( NSmlDmURI::URISeg( aURI, 3 ) ); + numBuf.Num( softkeyUid ); + aObject.InsertL( aObject.Size(), numBuf ); + aObject.InsertL( aObject.Size(), KNSmlISSeparator() ); + AddShortcutNameL( aObject, softkeyUid ); + break; + + case EIsNodeSoftKeysXTargetRef: + status = GetShortcutTargetURIL( aObject, GetSoftkeyUidFromNodeNameL( NSmlDmURI::URISeg( aURI, 3 ) ) ); + break; + + case EIsNodeTargetsXID: + iAppTargetManager->GetTargetFromNodeNameL( NSmlDmURI::URISeg( aURI, 3 ), index, caption ); + numBuf.Num( index ); + aObject.InsertL( aObject.Size(), numBuf ); + break; + + case EIsNodeTargetsXCaption: + iAppTargetManager->GetTargetFromNodeNameL( NSmlDmURI::URISeg( aURI, 3 ), index, caption ); + aObject.InsertL( aObject.Size(), caption ); + break; + +#ifndef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES + case EIsNodeTargetsXImage: + status = CSmlDmAdapter::EError; + //iAppTargetManager->GetTargetFromNodeNameL( NSmlDmURI::URISeg( aURI, 3 ), index, caption ); + //GetApplicationImageL( index, aObject ); + break; + +#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK + case EIsNodeTargetsXImageMask: + status = CSmlDmAdapter::EError; + //iAppTargetManager->GetTargetFromNodeNameL( NSmlDmURI::URISeg( aURI, 3 ), index, caption ); + //GetApplicationImageL( index, aObject, ETrue ); + break; +#endif +#endif + + case EIsNodeTargetsXDescription: + iAppTargetManager->GetTargetFromNodeNameL( NSmlDmURI::URISeg( aURI, 3 ), index, caption ); + aObject.InsertL( aObject.Size(), caption ); + break; + + case EIsNodeWebTargetsXID: + case EIsNodeWebTargetsXDescription: + case EIsNodeWebTargetsXURL: + case EIsNodeWebTargetsXUserName: + case EIsNodeWebTargetsXPassword: + case EIsNodeWebTargetsXCaption: + { + iWebTargetManager->PrepareItemL( aURI, *favItem, index ); + switch( identifier ) + { + case EIsNodeWebTargetsXID: + numBuf16.Num( favItem->Uid() ); + strBuf = CTARMCharConv::ConvertToUtf8LC( numBuf16 ); + aObject.InsertL( aObject.Size(), *strBuf ); + break; + + case EIsNodeWebTargetsXDescription: + strBuf = CTARMCharConv::ConvertToUtf8LC( favItem->Name() ); + aObject.InsertL( aObject.Size(), *strBuf ); + break; + + case EIsNodeWebTargetsXURL: + strBuf = CTARMCharConv::ConvertToUtf8LC( favItem->Url() ); + aObject.InsertL( aObject.Size(), *strBuf ); + break; + + case EIsNodeWebTargetsXUserName: + status = CSmlDmAdapter::EError; + + //strBuf = CTARMCharConv::ConvertToUtf8LC( favItem->UserName() ); + //aObject.InsertL( aObject.Size(), *strBuf ); + break; + + case EIsNodeWebTargetsXPassword: + status = CSmlDmAdapter::EError; + + //strBuf = CTARMCharConv::ConvertToUtf8LC( favItem->Password() ); + //aObject.InsertL( aObject.Size(), *strBuf ); + break; + + case EIsNodeWebTargetsXCaption: + strBuf = CTARMCharConv::ConvertToUtf8LC( favItem->Name() ); + aObject.InsertL( aObject.Size(), *strBuf ); + break; + } + if(strBuf!=NULL) + { + CleanupStack::PopAndDestroy( strBuf ); + } + iWebTargetManager->ReleaseItemL( *favItem, EFalse ); + } + break; + + case EIsNodeWebTargetsXConRef: + { + iWebTargetManager->PrepareItemL( aURI, *favItem, index ); + + TFavouritesWapAp wapAp = favItem->WapAp(); + if( wapAp.IsDefault() ) + { + aObject.InsertL( aObject.Size(), KDefaultApName8() ); + } + else if( wapAp.IsNull() ) + { + // Leave empty + } + else + { + CNSmlDMIAPMatcher *matcher = CNSmlDMIAPMatcher::NewLC( iCallBack ); + TInt id = wapAp.ApId(); + HBufC8* buf = matcher->URIFromIAPIdL( id ); + if( 0 == buf ) + { + User::Leave( KErrNotFound ); + } + CleanupStack::PushL( buf ); + aObject.InsertL( aObject.Size(), *buf ); + CleanupStack::PopAndDestroy( buf ); + CleanupStack::PopAndDestroy( matcher ); + } + + iWebTargetManager->ReleaseItemL( *favItem, EFalse ); + } + break; + +#ifndef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES + case EIsNodeWebTargetsXImage: + status = CSmlDmAdapter::EError; + //iWebTargetManager->PrepareItemL( aURI, *favItem, index ); + //GetBookmarkImageL( index, aObject ); + //iWebTargetManager->ReleaseItemL( *favItem, EFalse ); + break; + +#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK + case EIsNodeWebTargetsXImageMask: + status = CSmlDmAdapter::EError; + //iWebTargetManager->PrepareItemL( aURI, *favItem, index ); + //GetBookmarkImageL( index, aObject, ETrue ); + //iWebTargetManager->ReleaseItemL( *favItem, EFalse ); + break; +#endif +#endif + + default: + status = CSmlDmAdapter::EError; + break; + }; + + CleanupStack::PopAndDestroy( favItem ); + + RDEBUG_2( "CIsAdapter::FetchLeafObjectL() < %d", (TInt)status ); + return status; + } + +// ------------------------------------------------------------------------------------------------ +// CIsAdapter::_FetchLeafObjectL +// ------------------------------------------------------------------------------------------------ +void CIsAdapter::_FetchLeafObjectL( const TDesC8& aURI, const TDesC8& aLUID, + const TDesC8& aType, TInt aResultsRef, + TInt aStatusRef ) + { + RDEBUG("CIsAdapter::_FetchLeafObjectL() >"); + + TBuf8 mimeType; + CopyAndTrimMimeType(mimeType, aType); + + CSmlDmAdapter::TError status = CSmlDmAdapter::EOk; + + CBufFlat *object = CBufFlat::NewL(128); + CleanupStack::PushL( object ); + +#ifdef __TARM_SYMBIAN_CONVERGENCY + TPtrC8 uriPtrc = NSmlDmURI::RemoveDotSlash( aURI ); + TRAPD( + reason, + status = FetchLeafObjectL( uriPtrc, aLUID, mimeType, *object ) ); +#else + TRAPD( + reason, + status = FetchLeafObjectL( aURI, aLUID, mimeType, *object ) ); +#endif + + if( KErrNone != reason ) + { + RDEBUG_2( "CIsAdapter::_FetchLeafObjectL: Error code %d", reason); + status = CSmlDmAdapter::EError; + } + + iCallBack->SetStatusL(aStatusRef, status); + + if( status == CSmlDmAdapter::EOk) + { + object->Compress(); + iCallBack->SetResultsL( aResultsRef, *object, mimeType ); + } + + CleanupStack::PopAndDestroy( object ); + + RDEBUG("CIsAdapter::_FetchLeafObjectL() <"); + } + +// ------------------------------------------------------------------------------------------------ +// CIsAdapter::_FetchLeafObjectSizeL +// ------------------------------------------------------------------------------------------------ +void CIsAdapter::_FetchLeafObjectSizeL( const TDesC8& aURI, const TDesC8& aLUID, + const TDesC8& aType, TInt aResultsRef, + TInt aStatusRef ) + { + RDEBUG("CIsAdapter::_FetchLeafObjectSizeL() >"); + + TBuf8 mimeType; + CopyAndTrimMimeType(mimeType, aType); + + CSmlDmAdapter::TError status = CSmlDmAdapter::EOk; + + CBufFlat *object = CBufFlat::NewL(128); + CleanupStack::PushL( object ); + +#ifdef __TARM_SYMBIAN_CONVERGENCY + TPtrC8 uriPtrc = NSmlDmURI::RemoveDotSlash( aURI ); + TRAPD( + reason, + status = FetchLeafObjectL( uriPtrc, aLUID, mimeType, *object ) ); +#else + TRAPD( + reason, + status = FetchLeafObjectL( aURI, aLUID, mimeType, *object ) ); +#endif + + if( KErrNone != reason ) + { + RDEBUG_2( "CIsAdapter::_FetchLeafObjectSizeL: Error code %d", reason); + status = CSmlDmAdapter::EError; + } + + iCallBack->SetStatusL(aStatusRef, status); + + if( status == CSmlDmAdapter::EOk) + { + TBuf8 numBuf; + object->Compress(); + + CBufFlat *object2 = CBufFlat::NewL(128); + CleanupStack::PushL( object2 ); + + numBuf.Num(object->Size()); + object2->InsertL(0, numBuf); + object2->Compress(); + iCallBack->SetResultsL( aResultsRef, *object2, KNSmlISTextPlain ); + + CleanupStack::PopAndDestroy( object2 ); + } + + CleanupStack::PopAndDestroy( object ); + + RDEBUG("CIsAdapter::_FetchLeafObjectSizeL() <"); + } + +// ------------------------------------------------------------------------------------------------ +// CIsAdapter::_ChildURIListL +// ------------------------------------------------------------------------------------------------ +void CIsAdapter::_ChildURIListL( const TDesC8& aURI, const TDesC8& /*aLUID*/, + const CArrayFix& /*aPreviousURISegmentList*/, + TInt aResultsRef, TInt aStatusRef ) + { + RDEBUG( "CIsAdapter::_ChildURIListL() >" ); + + CSmlDmAdapter::TError ret = CSmlDmAdapter::EOk; + + CBufFlat *currentList = CBufFlat::NewL(128); + CleanupStack::PushL(currentList); + +#ifdef __TARM_SYMBIAN_CONVERGENCY + TPtrC8 uriPtrc = NSmlDmURI::RemoveDotSlash( aURI ); + CIsAdapter::TIsNodeIdentifier identifier = GetNodeIdentifier( uriPtrc ); +#else + CIsAdapter::TIsNodeIdentifier identifier = GetNodeIdentifier( aURI ); +#endif + + switch( identifier ) + { + case EIsNodeCustomization: + currentList->InsertL(currentList->Size(),KNSmlIS_IdleSoftKeyNodeName()); + break; + + case EIsNodeIdleSoftkeys: + currentList->InsertL(currentList->Size(),KNSmlIS_SoftKeysNodeName()); + currentList->InsertL(currentList->Size(),KNSmlISSeparator()); + currentList->InsertL(currentList->Size(),KNSmlIS_TargetsNodeName()); + currentList->InsertL(currentList->Size(),KNSmlISSeparator()); + currentList->InsertL(currentList->Size(),KNSmlIS_WebTargetsNodeName()); + break; + + case EIsNodeSoftKeys: + ListSoftkeysL( *currentList ); + break; + + case EIsNodeTargets: + iAppTargetManager->ListTargetsL( *currentList ); + break; + + case EIsNodeWebTargets: + + //User::LeaveIfError( iUiSrv.UpdateShortcutTargetList() ); + iWebTargetManager->ListWebTargetsL( *currentList ); + iWebTargetManager->CheckLUIDDatabaseL( ETrue ); + break; + + case EIsNodeSoftKeysX: + currentList->InsertL(currentList->Size(),KNSmlIS_SoftkeysIDNodeName()); + currentList->InsertL(currentList->Size(),KNSmlISSeparator()); + currentList->InsertL(currentList->Size(),KNSmlIS_SoftkeysTargetRefNodeName()); +#ifdef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES + currentList->InsertL(currentList->Size(),KNSmlISSeparator()); + currentList->InsertL(currentList->Size(),KNSmlIS_SoftkeysImageNoneName()); +#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK + currentList->InsertL(currentList->Size(),KNSmlISSeparator()); + currentList->InsertL(currentList->Size(),KNSmlIS_SoftkeysMaskNodeName()); +#endif +#endif + break; + + case EIsNodeTargetsX: + currentList->InsertL(currentList->Size(),KNSmlIS_TargetsIDNodeName()); + currentList->InsertL(currentList->Size(),KNSmlISSeparator()); + currentList->InsertL(currentList->Size(),KNSmlIS_TargetsDescriptionNodeName()); + currentList->InsertL(currentList->Size(),KNSmlISSeparator()); + currentList->InsertL(currentList->Size(),KNSmlIS_TargetsCaptionName()); +#ifndef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES + currentList->InsertL(currentList->Size(),KNSmlISSeparator()); + currentList->InsertL(currentList->Size(),KNSmlIS_TargetsImageNodeName()); +#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK + currentList->InsertL(currentList->Size(),KNSmlISSeparator()); + currentList->InsertL(currentList->Size(),KNSmlIS_TargetsMaskNodeName()); +#endif +#endif + break; + + case EIsNodeWebTargetsX: + currentList->InsertL(currentList->Size(),KNSmlIS_WebTargetsIDNodeName()); + currentList->InsertL(currentList->Size(),KNSmlISSeparator()); + currentList->InsertL(currentList->Size(),KNSmlIS_WebTargetsDescriptionNodeName()); + currentList->InsertL(currentList->Size(),KNSmlISSeparator()); + currentList->InsertL(currentList->Size(),KNSmlIS_WebTargetsURLNodeName()); + currentList->InsertL(currentList->Size(),KNSmlISSeparator()); + currentList->InsertL(currentList->Size(),KNSmlIS_WebTargetsUserNameNodeName()); + currentList->InsertL(currentList->Size(),KNSmlISSeparator()); + currentList->InsertL(currentList->Size(),KNSmlIS_WebTargetsPasswordNodeName()); + currentList->InsertL(currentList->Size(),KNSmlISSeparator()); + currentList->InsertL(currentList->Size(),KNSmlIS_WebTargetsConRefNodeName()); + currentList->InsertL(currentList->Size(),KNSmlISSeparator()); + currentList->InsertL(currentList->Size(),KNSmlIS_WebTargetsCaptionNodeName()); +#ifndef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES + currentList->InsertL(currentList->Size(),KNSmlISSeparator()); + currentList->InsertL(currentList->Size(),KNSmlIS_WebTargetsImageNodeName()); +#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK + currentList->InsertL(currentList->Size(),KNSmlISSeparator()); + currentList->InsertL(currentList->Size(),KNSmlIS_WebTargetsMaskNodeName()); +#endif +#endif + break; + + case EIsNodeSoftKeysXID: + case EIsNodeSoftKeysXTargetRef: +#ifdef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES + case EIsNodeSoftKeysXImage: +#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK + case EIsNodeSoftKeysXMask: +#endif +#endif + // Empty + break; + + case EIsNodeTargetsXID: + case EIsNodeTargetsXDescription: + case EIsNodeTargetsXCaption: +#ifndef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES + case EIsNodeTargetsXImage: +#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK + case EIsNodeTargetsXImageMask: +#endif +#endif + // Empty + break; + + case EIsNodeWebTargetsXID: + case EIsNodeWebTargetsXDescription: + case EIsNodeWebTargetsXURL: + case EIsNodeWebTargetsXUserName: + case EIsNodeWebTargetsXPassword: + case EIsNodeWebTargetsXConRef: + case EIsNodeWebTargetsXCaption: +#ifndef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES + case EIsNodeWebTargetsXImage: +#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK + case EIsNodeWebTargetsXImageMask: +#endif +#endif + // Empty + break; + + default: +#ifdef __TARM_SYMBIAN_CONVERGENCY + if( uriPtrc.Length() == 0 ) +#else + if( aURI.Length() == 0 ) +#endif + { + currentList->InsertL(0,KNSmlCustomizationNodeName()); + } + else + { + ret = CSmlDmAdapter::ENotFound; + } + break; + } + + iCallBack->SetStatusL(aStatusRef, ret); + + if( ret == CSmlDmAdapter::EOk ) + { + iCallBack->SetResultsL(aResultsRef, *currentList, KNSmlISTextPlain); + } + + CleanupStack::PopAndDestroy( currentList ); + + RDEBUG( "CIsAdapter::_ChildURIListL() <" ); + } + +// ------------------------------------------------------------------------------------------------ +// CIsAdapter::AddNodeObjectL +// ------------------------------------------------------------------------------------------------ +void CIsAdapter::AddNodeObjectL( CSmlDmAdapter::TError &aStatus, const TDesC8& aURI, + const TDesC8& /*aParentLUID*/ ) + { + RDEBUG( "CIsAdapter::AddNodeObjectL() >" ); + + // SymbianConvergency NOTE! See _AddNodeObjectL() <-> it removes the "./" from aURI + + CIsAdapter::TIsNodeIdentifier identifier = GetNodeIdentifier( aURI ); + + HBufC8* dataH = HBufC8::NewLC( KRepositoryEntryMaxLength ); + RDEBUG_2( "CIsAdapter::AddNodeObjectL() HBufC8 dataH ALLOC %x", dataH); + TPtr8 data( dataH->Des() ); + TInt index = -1; + TInt ret = KErrNone; + + switch( identifier ) + { + case EIsNodeWebTargetsX: + { + TRAPD( reason, + ret = + iWebTargetManager->GetTargetFromNodeNameL( aURI, index ) ); // Ignore index + if( (KErrNone != reason) || (KErrNone != ret) ) + { + RDEBUG_2( "CIsAdapter::AddNodeObjectL: New WebTarget (%d)", reason); + CFavouritesItem *favItem = CFavouritesItem::NewLC(); + RDEBUG_2( "CIsAdapter::AddNodeObjectL() CFavouritesItem ALLOC %x", favItem); + + TPtrC8 namePtr( NSmlDmURI::LastURISeg(aURI) ); + HBufC* nameBuf = HBufC::NewLC( namePtr.Length() ); + RDEBUG_2( "CIsAdapter::AddNodeObjectL() HBufC nameBuf ALLOC %x", nameBuf); + + nameBuf->Des().Copy( namePtr ); + favItem->SetNameL( *nameBuf ); + CleanupStack::PopAndDestroy( nameBuf ); + + favItem->SetUrlL(_L("http://")); + favItem->SetParentFolder(KFavouritesRootUid); + + if( KErrNone == iFavDb.Add( *favItem, ETrue ) ) + { + TBuf8 newUID; + newUID.Num( favItem->Uid() ); + + if( KErrNone == iWebTargetManager->FindLUIDByURIL( aURI, data, index ) ) + { + aStatus = CSmlDmAdapter::EAlreadyExists; + } + + /* + else + if( KErrNone == iWebTargetManager->FindURIByLUIDL( data, newUID, index ) ) + { + aStatus = CSmlDmAdapter::EAlreadyExists; + }*/ + else + { + RDEBUG8_2( "CIsAdapter::AddNodeObjectL: New WebTarget UID=%S", &newUID ); + iWebTargetManager->FindURIByLUIDL( data, newUID, index ); // Replace if LUid exists... + iWebTargetManager->UpdateLUIDDatabaseL( aURI, newUID, index ); + iCallBack->SetMappingL( aURI, newUID ); + } + } + else + { + aStatus = CSmlDmAdapter::EError; + } + + CleanupStack::PopAndDestroy( favItem ); + } + else + { + aStatus = CSmlDmAdapter::EAlreadyExists; + } + } + break; + + default: + aStatus = CSmlDmAdapter::EError; + break; + }; + + CleanupStack::PopAndDestroy(dataH); + + RDEBUG( "CIsAdapter::AddNodeObjectL() <" ); + } + +// ------------------------------------------------------------------------------------------------ +// CIsAdapter::_AddNodeObjectL +// ------------------------------------------------------------------------------------------------ +void CIsAdapter::_AddNodeObjectL( const TDesC8& aURI, const TDesC8& aParentLUID, TInt aStatusRef ) + { + RDEBUG( "CIsAdapter::_AddNodeObjectL() >" ); + + CSmlDmAdapter::TError status = CSmlDmAdapter::EOk; + +#ifdef __TARM_SYMBIAN_CONVERGENCY + TPtrC8 uriPtrc = NSmlDmURI::RemoveDotSlash( aURI ); + TRAPD( + reason, + AddNodeObjectL( status, uriPtrc, aParentLUID ) ); +#else + TRAPD( + reason, + AddNodeObjectL( status, aURI, aParentLUID ) ); +#endif + + if( KErrNone != reason ) + { + RDEBUG_2( "CIsAdapter::_AddNodeObjectL: Error code %d", reason); + status = CSmlDmAdapter::EError; + } + + iCallBack->SetStatusL(aStatusRef, status); + + RDEBUG( "CIsAdapter::_AddNodeObjectL() <" ); + } + +// ------------------------------------------------------------------------------------------------ +// CIsAdapter::_ExecuteCommandL +// ------------------------------------------------------------------------------------------------ +void CIsAdapter::_ExecuteCommandL( const TDesC8& /*aURI*/, const TDesC8& /*aLUID*/, + const TDesC8& /*aArgument*/, const TDesC8& /*aType*/, + TInt aStatusRef ) + { + RDEBUG( "CIsAdapter::_ExecuteCommandL() >" ); + + CSmlDmAdapter::TError ret = CSmlDmAdapter::EError; + iCallBack->SetStatusL(aStatusRef, ret); + + RDEBUG( "CIsAdapter::_ExecuteCommandL() <" ); + } + +// ------------------------------------------------------------------------------------------------ +// CIsAdapter::_ExecuteCommandL +// ------------------------------------------------------------------------------------------------ +void CIsAdapter::_ExecuteCommandL( const TDesC8& /*aURI*/, const TDesC8& /*aLUID*/, + RWriteStream*& /*aStream*/, const TDesC8& /*aType*/, + TInt aStatusRef ) + { + RDEBUG( "CIsAdapter::_ExecuteCommandL() (stream) >" ); + + CSmlDmAdapter::TError ret = CSmlDmAdapter::EError; + iCallBack->SetStatusL(aStatusRef, ret); + + RDEBUG( "CIsAdapter::_ExecuteCommandL() (stream) <" ); + } + +// ------------------------------------------------------------------------------------------------ +// CIsAdapter::_CopyCommandL +// ------------------------------------------------------------------------------------------------ +void CIsAdapter::_CopyCommandL( const TDesC8& /*aTargetURI*/, const TDesC8& /*aTargetLUID*/, + const TDesC8& /*aSourceURI*/, const TDesC8& /*aSourceLUID*/, + const TDesC8& /*aType*/, TInt aStatusRef ) + { + RDEBUG( "CIsAdapter::_CopyCommandL() >" ); + + CSmlDmAdapter::TError ret = CSmlDmAdapter::EError; + iCallBack->SetStatusL(aStatusRef, ret); + + RDEBUG( "CIsAdapter::_CopyCommandL() <" ); + } + +// ------------------------------------------------------------------------------------------------ +// CIsAdapter::StartAtomicL +// ------------------------------------------------------------------------------------------------ +void CIsAdapter::StartAtomicL() + { + RDEBUG( "CIsAdapter::StartAtomicL() ><" ); + } + +// ------------------------------------------------------------------------------------------------ +// CIsAdapter::CommitAtomicL +// ------------------------------------------------------------------------------------------------ +void CIsAdapter::CommitAtomicL() + { + RDEBUG( "CIsAdapter::CommitAtomicL() ><" ); + } + +// ------------------------------------------------------------------------------------------------ +// CIsAdapter::RollbackAtomicL +// ------------------------------------------------------------------------------------------------ +void CIsAdapter::RollbackAtomicL() + { + RDEBUG( "CIsAdapter::RollbackAtomicL() ><" ); + + + CSmlDmAdapter::TError status = CSmlDmAdapter::ERollbackFailed; + iCallBack->SetStatusL(0, status); + } + +// ----------------------------------------------------------------------------- +// CIsAdapter::StreamType +// +// ----------------------------------------------------------------------------- +CTARMDmStreamAdapter::TAdapterStreamType CIsAdapter::StreamType( const TDesC8& /*aURI*/ ) + { + RDEBUG( "CIsAdapter::StreamType()" ); + return CTARMDmStreamAdapter::EStreamToBuffer; + } + +// ------------------------------------------------------------------------------------------------ +// CIsAdapter::StreamingSupport +// ------------------------------------------------------------------------------------------------ +TBool CIsAdapter::StreamingSupport( TInt& aItemSize ) + { + RDEBUG( "CIsAdapter::StreamingSupport()" ); + aItemSize = 1024; // Large images are streamed + return EFalse; // don't support stream + } + +// ------------------------------------------------------------------------------------------------ +// CIsAdapter::CompleteOutstandingCmdsL +// ------------------------------------------------------------------------------------------------ +void CIsAdapter::CompleteOutstandingCmdsL() + { + RDEBUG( "CIsAdapter::CompleteOutstandingCmdsL() ><" ); + } + +// ------------------------------------------------------------------------------------------------ +// ImplementationTable +// ------------------------------------------------------------------------------------------------ +const TImplementationProxy ImplementationTable[] = + { + { { KNSmlDMISAdapterImplUidValue }, (TProxyNewLPtr)CIsAdapter::NewL } + }; + +// ------------------------------------------------------------------------------------------------ +// ImplementationGroupProxy +// ------------------------------------------------------------------------------------------------ +EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount ) + { + aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy); + return ImplementationTable; + } + +// ------------------------------------------------------------------------------------------------ +// CIsAdapter::ConstructL +// ------------------------------------------------------------------------------------------------ +void CIsAdapter::ConstructL(MSmlDmCallback *aDmCallback) + { + RDEBUG( "CIsAdapter::ConstructL() >" ); + + TRAPD( errf, FeatureManager::InitializeLibL() ); + if( errf != KErrNone ) + { + User::Leave(errf); + } + + if(FeatureManager::FeatureSupported(KFeatureIdSapIdleSoftkeyAdapter)) + { + iCallBack = aDmCallback; + + //User::LeaveIfError( iUiSrv.Connect() ); + //iUiSrv.UpdateShortcutTargetList(); + + User::LeaveIfError( iFavSession.Connect() ); + User::LeaveIfError( iFavDb.Open( iFavSession, KBrowserBookmarks ) ); + + TInt count = 0; + // Get / create the count + // + CRepository* rep = CRepository::NewLC( KNSmlDMISAdapterCentRepUid ); + RDEBUG_2( "CIsAdapter::ConstructL() CRepository ALLOC %x", rep); + + TInt ret = rep->Get((TUint32)KRepositoryIdBookmarkCount, count); + if( ret == KErrNotFound ) + { + ret = rep->Create((TUint32)KRepositoryIdBookmarkCount, count); + } + + CleanupStack::PopAndDestroy( rep ); + + iWebTargetManager = new (ELeave) CIdleSoftkeysWebTargetManager( + iCallBack, + iFavDb + ); + iWebTargetManager->CheckLUIDDatabaseL( EFalse ); + + iAppTargetManager = new (ELeave) CIdleSoftkeysAppTargetManager( + iCallBack + + ); + // just creating a pointer to the class + // this needs to be initialized before it is used + // to initialize we use ReadBookmarksL and ReadTargetsL function + iUiSettings = CUiSettingsUtil::NewL( ); + + RDEBUG( "CIsAdapter::ConstructL() <" ); + } + else + { + FeatureManager::UnInitializeLib(); + User::Leave( KErrNotSupported ); + } + + } + +// ------------------------------------------------------------------------------------- +// CIsAdapter::FillNodeInfoL() +// Fills the node info in ddf structure +// ------------------------------------------------------------------------------------- +void CIsAdapter::FillNodeInfoL( MSmlDmDDFObject& aNode,TSmlDmAccessTypes aAccTypes, + MSmlDmDDFObject::TOccurence aOccurrence, MSmlDmDDFObject::TScope aScope, + MSmlDmDDFObject::TDFFormat aFormat,const TDesC8& aDescription,const TDesC8& aMimeType) + { + RDEBUG( "CIsAdapter::FillNodeInfoL() >" ); + + aNode.SetAccessTypesL(aAccTypes); + aNode.SetOccurenceL(aOccurrence); + aNode.SetScopeL(aScope); + aNode.SetDFFormatL(aFormat); + aNode.SetDescriptionL(aDescription); + if(aMimeType.Length() > 0) + { + aNode.AddDFTypeMimeTypeL(aMimeType); + } + + RDEBUG( "CIsAdapter::FillNodeInfoL() <" ); + } + +// ------------------------------------------------------------------------------------- +// CIsAdapter::GetNodeIdentifier +// ------------------------------------------------------------------------------------- +CIsAdapter::TIsNodeIdentifier CIsAdapter::GetNodeIdentifier(const TDesC8& aURI) + { + RDEBUG( "CIsAdapter::GetNodeIdentifier() >" ); + + // SymbianConvergency NOTE! Look _DeleteObjectL() <-> removes the "./" from the aURI !! + + TInt numOfSegs = NSmlDmURI::NumOfURISegs( aURI ); + if(numOfSegs == 0) + { + return CIsAdapter::EIsNodeNotUsedAndAlwaysLast; + } + + TPtrC8I seg1 = NSmlDmURI::URISeg( aURI, 0 ); + + if(seg1 == KNSmlCustomizationNodeName) + { + if(numOfSegs == 1) + { + return EIsNodeCustomization; + } + + // At least 2 segments + TPtrC8I seg2 = NSmlDmURI::URISeg( aURI, 1 ); + if(seg2 == KNSmlIS_IdleSoftKeyNodeName) + { + if(numOfSegs == 2) + { + return CIsAdapter::EIsNodeIdleSoftkeys; + } + + // At least 3 segments + TPtrC8I seg3 = NSmlDmURI::URISeg( aURI, 2 ); + if(seg3 == KNSmlIS_SoftKeysNodeName) + { + if(numOfSegs == 3) + { + return CIsAdapter::EIsNodeSoftKeys; + } + + // At least 4 segments + if(numOfSegs == 4) + { + return CIsAdapter::EIsNodeSoftKeysX; + } + + // At least 5 segments + TPtrC8I seg5 = NSmlDmURI::URISeg( aURI, 4 ); + if(seg5 == KNSmlIS_SoftkeysIDNodeName) + { + return CIsAdapter::EIsNodeSoftKeysXID; + } + else + if(seg5 == KNSmlIS_SoftkeysTargetRefNodeName) + { + return CIsAdapter::EIsNodeSoftKeysXTargetRef; + } +#ifdef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES + else + if(seg5 == KNSmlIS_SoftkeysImageNoneName) + { + return CIsAdapter::EIsNodeSoftKeysXImage; + } +#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK + else + if(seg5 == KNSmlIS_SoftkeysMaskNodeName) + { + return CIsAdapter::EIsNodeSoftKeysXMask; + } +#endif +#endif + else + { + return CIsAdapter::EIsNodeNotUsedAndAlwaysLast; + } + } + else + if(seg3 == KNSmlIS_TargetsNodeName) + { + if(numOfSegs == 3) + { + return CIsAdapter::EIsNodeTargets; + } + + // At least 4 segments + if(numOfSegs == 4) + { + return CIsAdapter::EIsNodeTargetsX; + } + + // At least 5 segments + TPtrC8I seg5 = NSmlDmURI::URISeg( aURI, 4 ); + if(seg5 == KNSmlIS_TargetsIDNodeName) + { + return CIsAdapter::EIsNodeTargetsXID; + } + else + if(seg5 == KNSmlIS_TargetsDescriptionNodeName) + { + return CIsAdapter::EIsNodeTargetsXDescription; + } + // ... + else + if(seg5 == KNSmlIS_TargetsCaptionName) + { + return CIsAdapter::EIsNodeTargetsXCaption; + } +#ifndef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES + else + if(seg5 == KNSmlIS_TargetsImageNodeName) + { + return CIsAdapter::EIsNodeTargetsXImage; + } +#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK + else + if(seg5 == KNSmlIS_TargetsMaskNodeName) + { + return CIsAdapter::EIsNodeTargetsXImageMask; + } +#endif +#endif + // ... + else + + { + return CIsAdapter::EIsNodeNotUsedAndAlwaysLast; + } + } + else + if(seg3 == KNSmlIS_WebTargetsNodeName) + { + if(numOfSegs == 3) + { + return CIsAdapter::EIsNodeWebTargets; + } + + // At least 4 segments + if(numOfSegs == 4) + { + return CIsAdapter::EIsNodeWebTargetsX; + } + + // At least 5 segments + TPtrC8I seg5 = NSmlDmURI::URISeg( aURI, 4 ); + if(seg5 == KNSmlIS_WebTargetsIDNodeName) + { + return CIsAdapter::EIsNodeWebTargetsXID; + } + else + if(seg5 == KNSmlIS_WebTargetsDescriptionNodeName) + { + return CIsAdapter::EIsNodeWebTargetsXDescription; + } + else + if(seg5 == KNSmlIS_WebTargetsURLNodeName) + { + return CIsAdapter::EIsNodeWebTargetsXURL; + } + else + if(seg5 == KNSmlIS_WebTargetsUserNameNodeName) + { + return CIsAdapter::EIsNodeWebTargetsXUserName; + } + else + if(seg5 == KNSmlIS_WebTargetsPasswordNodeName) + { + return CIsAdapter::EIsNodeWebTargetsXPassword; + } + else + if(seg5 == KNSmlIS_WebTargetsConRefNodeName) + { + return CIsAdapter::EIsNodeWebTargetsXConRef; + } + // ... + else + if(seg5 == KNSmlIS_WebTargetsCaptionNodeName) + { + return CIsAdapter::EIsNodeWebTargetsXCaption; + } +#ifndef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES + else + if(seg5 == KNSmlIS_WebTargetsImageNodeName) + { + return CIsAdapter::EIsNodeWebTargetsXImage; + } +#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK + else + if(seg5 == KNSmlIS_WebTargetsMaskNodeName) + { + return CIsAdapter::EIsNodeWebTargetsXImageMask; + } +#endif +#endif + // ... + else + { + return CIsAdapter::EIsNodeNotUsedAndAlwaysLast; + } + } + else + { + return CIsAdapter::EIsNodeNotUsedAndAlwaysLast; + } + } + else + { + return CIsAdapter::EIsNodeNotUsedAndAlwaysLast; + } + } + else + { + return CIsAdapter::EIsNodeNotUsedAndAlwaysLast; + } + + // Note: do not return anything here + } + + +// ------------------------------------------------------------------------------------- +// CIsAdapter::CopyAndTrimMimeType +// ------------------------------------------------------------------------------------- +void CIsAdapter::CopyAndTrimMimeType(TDes8& aNewMime, const TDesC8& aType) + { + RDEBUG( "CIsAdapter::CopyAndTrimMimeType() >" ); + + if(aNewMime.MaxLength() < aType.Length()) + { + aNewMime.Copy( aType.Left(aNewMime.MaxLength()) ); + } + else + { + aNewMime.Copy( aType ); + } + aNewMime.TrimAll(); + aNewMime.LowerCase(); + + TInt pos; + while(( pos = aNewMime.Locate(' ') ) != KErrNotFound) + { + aNewMime.Delete(pos, 1); + } + + RDEBUG( "CIsAdapter::CopyAndTrimMimeType() <" ); + } + +// ------------------------------------------------------------------------------------- +// CIsAdapter::ListSoftkeysL +// ------------------------------------------------------------------------------------- +TInt CIsAdapter::ListSoftkeysL( CBufFlat &aList ) + { + RDEBUG( "CIsAdapter::ListSoftkeysL() >" ); + + TInt i; + for(i=0; iGetSoftkeyCountL()*/; i++) + { + if(i>0) + { + aList.InsertL( aList.Size(), KNSmlISSeparator() ); + } + + HBufC8* softkeyName = GenerateSoftkeyNodeNameL( i ); + CleanupStack::PushL( softkeyName ); + + aList.InsertL( aList.Size(), *softkeyName ); + + CleanupStack::PopAndDestroy( softkeyName ); + } + + RDEBUG( "CIsAdapter::ListSoftkeysL() <" ); + return KErrNone; + } + +// ------------------------------------------------------------------------------------- +// CIsAdapter::GenerateSoftkeyNodeNameL +// ------------------------------------------------------------------------------------- +HBufC8* CIsAdapter::GenerateSoftkeyNodeNameL(TInt aIndex ) + { + RDEBUG( "CIsAdapter::GenerateSoftkeyNodeNameL() >" ); + + TInt index = aIndex; + + HBufC8* softkeyName = HBufC8::NewL( KPrefixSoftkeyNodeName().Length() + + MAX_NUMBER_OF_DIGITS_IN_10BASE_INT64 ); + + TPtr8 ptr( softkeyName->Des() ); + + ptr.Format(KFormatSoftkeyNodeName, index+1); + + RDEBUG8_2( "CIsAdapter::GenerateSoftkeyNodeNameL() < %S", &softkeyName ); + return softkeyName; + } + +// ------------------------------------------------------------------------------------- +// CIsAdapter::GetSoftkeyIndexFromUid +// ------------------------------------------------------------------------------------- +TInt CIsAdapter::GetSoftkeyIndexFromUid( TInt aUid ) + { + RDEBUG( "CIsAdapter::GetSoftkeyIndexFromUid() >" ); + + switch( aUid ) + { + case KScActionTypeUidValueSoftkeyLeft: + return 0; + case KScActionTypeUidValueSoftkeyRight: + return 1; + case KScActionTypeUidValueScrollkeyLeft: + return 2; + case KScActionTypeUidValueScrollkeyRight: + return 3; + case KScActionTypeUidValueScrollkeyUp: + return 4; + case KScActionTypeUidValueScrollkeyDown: + return 5; + case KScActionTypeUidValueScrollkeySelect: + return 6; + case KActiveIdleScUidValueItem1: + return 7; + case KActiveIdleScUidValueItem2: + return 8; + case KActiveIdleScUidValueItem3: + return 9; + case KActiveIdleScUidValueItem4: + return 10; + case KActiveIdleScUidValueItem5: + return 11; + default: + return -1; + } + + // return aUid; + } + +// ------------------------------------------------------------------------------------- +// CIsAdapter::GetSoftkeyUidFromNodeNameL +// ------------------------------------------------------------------------------------- +TInt CIsAdapter::GetSoftkeyUidFromNodeNameL(const TDesC8& aNodeName) + { + RDEBUG( "CIsAdapter::GetSoftkeyUidFromNodeNameL() >" ); + + TInt index = -1; + TInt compareLen = KPrefixSoftkeyNodeName().Length(); + if(aNodeName.Left(compareLen) == KFormatSoftkeyNodeName().Left(compareLen)) + { + TLex8 lex; + lex.Assign( aNodeName ); + + lex.Inc( compareLen ); + User::LeaveIfError( lex.Val(index) ); + index--; + User::LeaveIfError( index>=0 && indexGetSoftkeyCountL()*/ ? KErrNone : KErrGeneral ); + + HBufC8* softkeyName = GenerateSoftkeyNodeNameL( index ); + CleanupStack::PushL( softkeyName ); + + TPtr8 ptr( softkeyName->Des() ); + User::LeaveIfError( ptr == aNodeName ? KErrNone : KErrGeneral ); + + CleanupStack::PopAndDestroy( softkeyName ); + } + else + { + User::Leave( KErrNotFound ); + } + + RDEBUG_2( "CIsAdapter::GetSoftkeyUidFromNodeNameL() < %d", iSoftkeyList[ index ] ); + return iSoftkeyList[ index ]; + } + +// ------------------------------------------------------------------------------------- +// CIsAdapter::AddShortcutNameL +// ------------------------------------------------------------------------------------- +void CIsAdapter::AddShortcutNameL(CBufFlat& aBuffer, TInt aUid) + { + RDEBUG( "CIsAdapter::AddShortcutNameL() >" ); + + switch( aUid ) + { + + case KScActionTypeUidValueSoftkeyLeft: + aBuffer.InsertL( aBuffer.Size(), KISLeftSoftkeyName() ); + break; + case KScActionTypeUidValueSoftkeyRight: + aBuffer.InsertL( aBuffer.Size(), KISRightSoftkeyName() ); + break; + case KScActionTypeUidValueScrollkeyLeft: + aBuffer.InsertL( aBuffer.Size(), KISScrollLeftSoftkeyName() ); + break; + case KScActionTypeUidValueScrollkeyRight: + aBuffer.InsertL( aBuffer.Size(), KISScrollRightSoftkeyName() ); + break; + case KScActionTypeUidValueScrollkeyUp: + aBuffer.InsertL( aBuffer.Size(), KISScrollUpSoftkeyName() ); + break; + case KScActionTypeUidValueScrollkeyDown: + aBuffer.InsertL( aBuffer.Size(), KISScrollDownSoftkeyName() ); + break; + case KScActionTypeUidValueScrollkeySelect: + aBuffer.InsertL( aBuffer.Size(), KISSelectionSoftkeyName() ); + break; + + case KActiveIdleScUidValueItem1: + aBuffer.InsertL( aBuffer.Size(), KISAISoftkeyName1() ); + break; + case KActiveIdleScUidValueItem2: + aBuffer.InsertL( aBuffer.Size(), KISAISoftkeyName2() ); + break; + case KActiveIdleScUidValueItem3: + aBuffer.InsertL( aBuffer.Size(), KISAISoftkeyName3() ); + break; + case KActiveIdleScUidValueItem4: + aBuffer.InsertL( aBuffer.Size(), KISAISoftkeyName4() ); + break; + case KActiveIdleScUidValueItem5: + aBuffer.InsertL( aBuffer.Size(), KISAISoftkeyName5() ); + break; + case KActiveIdleScUidValueItem6: + aBuffer.InsertL( aBuffer.Size(), KISAISoftkeyName6() ); + break; + + + + } + RDEBUG( "CIsAdapter::AddShortcutNameL() <" ); + } + +#ifdef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES + +void CIsAdapter::GetSoftkeyImageL( + TInt /*aSoftkeyUid*/, + CBufFlat &aImageBuffer, + TBool /*aGetMask*//*=EFalse*/ ) + { + RDEBUG( "CIsAdapter::GetSoftkeyImageL() >" ); + + TFileName filename; + TBuf8<128> mimetype; + + + + /* + + if( aGetMask ) + { + User::LeaveIfError( iUiSrv.GetSoftkeyMask( + aSoftkeyUid, + filename, + mimetype + ) ); + } + else + { + User::LeaveIfError( iUiSrv.GetSoftkeyBitmap( + aSoftkeyUid, + filename, + mimetype + ) ); + } + + */ + + RFs fileSession; + RFile file; + + User::LeaveIfError( fileSession.Connect() ); + CleanupClosePushL( fileSession ); + + // + // Create new temp file + // + User::LeaveIfError( file.Open( fileSession, filename, EFileRead ) ); + CleanupClosePushL( file ); + + // + // Decode data to buffer + // + TInt size = 0; + file.Size( size ); + HBufC8* buffer = HBufC8::NewLC( size ); + + TPtr8 ptr( 0, 0 ); + ptr.Set( buffer->Des() ); + User::LeaveIfError( file.Read( ptr ) ); + + EncodeImageL( aImageBuffer, ptr ); + + CleanupStack::PopAndDestroy( buffer ); + + // Close file + CleanupStack::PopAndDestroy( &file ); + + // Close fileSession + CleanupStack::PopAndDestroy( &fileSession ); + + RDEBUG( "CIsAdapter::GetSoftkeyImageL() <" ); + } + +#endif + +#ifndef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES + +// ------------------------------------------------------------------------------------- +// CIsAdapter::GetApplicationImageL +// ------------------------------------------------------------------------------------- +void CIsAdapter::GetApplicationImageL( + TInt aIndex, + CBufFlat &aImageBuffer, + TBool aGetMask/*=EFalse*/ ) + { + RDEBUG( "CIsAdapter::GetApplicationImageL() >" ); + + GetShortcutImageL( + EUiSrvRtTypeApp, + aIndex, + aImageBuffer, + aGetMask + ); + + RDEBUG( "CIsAdapter::GetApplicationImageL() <" ); + } + +// ------------------------------------------------------------------------------------- +// CIsAdapter::GetBookmarkImageL +// ------------------------------------------------------------------------------------- +void CIsAdapter::GetBookmarkImageL( + TInt aIndex, + CBufFlat &aImageBuffer, + TBool aGetMask/*=EFalse*/ ) + { + RDEBUG( "CIsAdapter::GetBookmarkImageL() >" ); + + GetShortcutImageL( + EUiSrvRtTypeBm, + aIndex, + aImageBuffer, + aGetMask + ); + + RDEBUG( "CIsAdapter::GetBookmarkImageL() <" ); + } + +#endif + +#ifndef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES + +// ------------------------------------------------------------------------------------- +// CIsAdapter::GetShortcutImageL +// ------------------------------------------------------------------------------------- +void CIsAdapter::GetShortcutImageL( + TInt aRtMask, + TInt aIndex, + CBufFlat &aImageBuffer, + TBool aGetMask/*=EFalse*/ ) + { + RDEBUG( "CIsAdapter::GetShortcutImageL() >" ); + TFileName filename; + TBuf8<128> mimetype; + + if( aGetMask ) + { + User::LeaveIfError( iUiSrv.GetShortcutTargetMask( + aRtMask, + aIndex, + filename, + mimetype + ) ); + } + else + { + User::LeaveIfError( iUiSrv.GetShortcutTargetBitmap( + aRtMask, + aIndex, + filename, + mimetype + ) ); + } + + RFs fileSession; + RFile file; + + User::LeaveIfError( fileSession.Connect() ); + CleanupClosePushL( fileSession ); + + // + // Create new temp file + // + User::LeaveIfError( file.Open( fileSession, filename, EFileRead ) ); + CleanupClosePushL( file ); + + // + // Decode data to buffer + // + TInt size = 0; + file.Size( size ); + HBufC8* buffer = HBufC8::NewLC( size ); + + TPtr8 ptr( 0, 0 ); + ptr.Set( buffer->Des() ); + User::LeaveIfError( file.Read( ptr ) ); + + EncodeImageL( aImageBuffer, ptr ); + + CleanupStack::PopAndDestroy( buffer ); + + // Close file + CleanupStack::PopAndDestroy( &file ); + + // Close fileSession + CleanupStack::PopAndDestroy( &fileSession ); + + RDEBUG( "CIsAdapter::GetShortcutImageL() <" ); + } +#endif + +#ifdef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES +void CIsAdapter::SetSoftkeyImageL ( + const TDesC8& aURI, + const TDesC8& aObject, + const TDesC8& aType) + { + RDEBUG( "CIsAdapter::SetSoftkeyImageL() >" ); + + // SymbianConvergency NOTE! Functions that call this function will parse off the "./" + // from the aURI -> no need to parse "./" here + + if( aType.Length() == 0 ) + { + RDEBUG( "CIsAdapter::SetSoftkeyImageL() WARNING Mime type is empty!" ); + } + + CIsAdapter::TIsNodeIdentifier identifier = GetNodeIdentifier( aURI ); + TInt softkeyUid = 0; + + if( + + (EIsNodeSoftKeysXImage != identifier) + +#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK + + && (EIsNodeSoftKeysXMask != identifier) + +#endif + + ) + { + User::Leave( KErrArgument ); + } + + // + // Get shortcut target index + // + switch( identifier ) + { + + // Softkeys/* + case EIsNodeSoftKeysXImage: +#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK + case EIsNodeSoftKeysXMask: +#endif + { + softkeyUid = GetSoftkeyUidFromNodeNameL( NSmlDmURI::URISeg( aURI, 3 ) ); + if(softkeyUid) + RDEBUG_2( "CIsAdapter::GetShortcutImageL() < %d", softkeyUid ); + } + break; + + default: + User::Leave( KErrArgument ); + break; + + } + + // + // Decode image data + // + DecodeImageToFileL( aObject ); +/* + switch( identifier ) + { + case EIsNodeSoftKeysXImage: + User::LeaveIfError( iUiSrv.SetSoftkeyBitmap( + softkeyUid, + iTemporaryImageFile, + aType ) ); + break; + +#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK + case EIsNodeSoftKeysXMask: + User::LeaveIfError( iUiSrv.SetSoftkeyMask( + softkeyUid, + iTemporaryImageFile, + aType ) ); + break; + +#endif + } + */ + + RDEBUG( "CIsAdapter::SetSoftkeyImageL() <" ); + } +#endif + +#ifndef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES +// ------------------------------------------------------------------------------------- +// CIsAdapter::SetShortcutTargetImageL +// ------------------------------------------------------------------------------------- +void CIsAdapter::SetShortcutTargetImageL( + const TDesC8& aURI, + const TDesC8& aObject, + const TDesC8& aType) + { + RDEBUG( "CIsAdapter::SetShortcutTargetImageL() >" ); + + // SymbianConvergency NOTE! Functions that call this function will parse off the "./" + // from the aURI -> no need to parse "./" here + + if( aType.Length() == 0 ) + { + RDEBUG( "CIsAdapter::SetShortcutTargetImageL() WARNING Mime type is empty!" ); + } + + CIsAdapter::TIsNodeIdentifier identifier = GetNodeIdentifier( aURI ); + TInt targetIndex = 0; + + if( + (EIsNodeTargetsXImage != identifier) + && (EIsNodeWebTargetsXImage != identifier) + +#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK + + && (EIsNodeTargetsXImageMask != identifier) + && (EIsNodeWebTargetsXImageMask != identifier) + +#endif + + ) + { + User::Leave( KErrArgument ); + } + + // + // Get shortcut target index + // + switch( identifier ) + { + + // Targets/* + case EIsNodeTargetsXImage: +#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK + case EIsNodeTargetsXImageMask: +#endif + { + TBuf8 caption; + iAppTargetManager->GetTargetFromNodeNameL( NSmlDmURI::URISeg( aURI, 3 ), targetIndex, caption ); + } + + break; + + // WebTargets/* + case EIsNodeWebTargetsXImage: +#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK + case EIsNodeWebTargetsXImageMask: +#endif + { + iWebTargetManager->CheckWebTargetsL(); + CFavouritesItem *favItem = CFavouritesItem::NewLC(); + RDEBUG_2( _L("CIsAdapter::SetShortcutTargetImageL() CFavouritesItem ALLOC %x"), favItem); + if( KErrNone != + iWebTargetManager->GetTargetFromNodeNameL( NSmlDmURI::URISeg( aURI, 0, 4 ), *favItem, targetIndex ) ) + { + User::Leave( KErrNotFound ); + } + CleanupStack::PopAndDestroy( favItem ); + } + + break; + + } + + // + // Decode image data + // + DecodeImageToFileL( aObject ); + + switch( identifier ) + { + case EIsNodeTargetsXImage: + User::LeaveIfError( iUiSrv.SetShortcutTargetBitmap( EUiSrvRtTypeApp, + targetIndex, + iTemporaryImageFile, + aType ) ); + break; + + case EIsNodeWebTargetsXImage: + User::LeaveIfError( iUiSrv.SetShortcutTargetBitmap( EUiSrvRtTypeBm, + targetIndex, + iTemporaryImageFile, + aType ) ); + break; + +#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK + case EIsNodeTargetsXImageMask: + User::LeaveIfError( iUiSrv.SetShortcutTargetMask( EUiSrvRtTypeApp, + targetIndex, + iTemporaryImageFile, + aType ) ); + break; + + case EIsNodeWebTargetsXImageMask: + User::LeaveIfError( iUiSrv.SetShortcutTargetMask( EUiSrvRtTypeBm, + targetIndex, + iTemporaryImageFile, + aType ) ); + break; +#endif + } + + RDEBUG( "CIsAdapter::SetShortcutTargetImageL() <" ); + } +#endif + +// ------------------------------------------------------------------------------------- +// CIsAdapter::DecodeImageToFileL +// ------------------------------------------------------------------------------------- +TInt CIsAdapter::DecodeImageToFileL( const TDesC8& aObject ) + { + RDEBUG( "CIsAdapter::DecodeImageToFileL() >" ); + + // + // Write file to a temp file + // + RFs fileSession; + RFile file; + + User::LeaveIfError( fileSession.Connect() ); + CleanupClosePushL( fileSession ); + + // + // Delete previous temp file + // + if( iTemporaryImageFile.Length() > 0 ) + { + fileSession.Delete( iTemporaryImageFile ); + iTemporaryImageFile.Zero(); + } + + // + // Create new temp file + // + User::LeaveIfError( file.Temp( fileSession, KTempFilePath, iTemporaryImageFile, EFileWrite ) ); + CleanupClosePushL( file ); + + // + // Decode data to buffer + // + CBufFlat* buffer = CBufFlat::NewL( 128 ); + CleanupStack::PushL( buffer ); + DecodeImageL( *buffer, aObject ); + + // Write buffer to file and release buffer + User::LeaveIfError( file.Write( buffer->Ptr(0) ) ); + CleanupStack::PopAndDestroy( buffer ); + + // Close file + CleanupStack::PopAndDestroy( &file ); + + // Close fileSession + CleanupStack::PopAndDestroy( &fileSession ); + + RDEBUG( "CIsAdapter::DecodeImageToFileL() <" ); + return KErrNone; + } + +// ------------------------------------------------------------------------------------- +// CIsAdapter::DecodeImageL +// ------------------------------------------------------------------------------------- +void CIsAdapter::DecodeImageL( CBufFlat& aBuffer, const TDesC8& aObject ) + { + RDEBUG( "CIsAdapter::DecodeImageL() >" ); + + // + // Decoce from base 64 + // + TImCodecB64 B64Coder; + HBufC8 *uncoded = HBufC8::NewLC( ( aObject.Length() * 3 ) / 4 + 16 ); + RDEBUG_2( "CIsAdapter::DecodeImageL() HBufC8 uncoded ALLOC %x", uncoded); + TPtr8 uncodedPtr( uncoded->Des() ); + + TBool uncodeResult = TFileCoderB64::CheckB64Encode( aObject );// + + if( uncodeResult ) + { + // use base64 decode + B64Coder.Decode( aObject, uncodedPtr ); + aBuffer.InsertL( 0, uncodedPtr ); + } + else + { + // original data + aBuffer.InsertL( 0, aObject ); + } + + CleanupStack::PopAndDestroy( uncoded ); + + RDEBUG( "CIsAdapter::DecodeImageL() <" ); + } + +// ------------------------------------------------------------------------------------- +// CIsAdapter::EncodeImageL +// ------------------------------------------------------------------------------------- +void CIsAdapter::EncodeImageL( CBufFlat& aBuffer, const TDesC8& aObject ) + { + RDEBUG( "CIsAdapter::EncodeImageL() >" ); + + // + // Decoce from base 64 + // + TImCodecB64 B64Coder; + HBufC8 *encoded = HBufC8::NewLC( ( aObject.Length() * 4 ) / 3 + 16 ); + RDEBUG_2( "CIsAdapter::EncodeImageL() HBufC8 encoded ALLOC %x", encoded); + TPtr8 encodedPtr( encoded->Des() ); + TBool encodeResult = B64Coder.Encode( aObject, encodedPtr ); + + aBuffer.InsertL( 0, encodedPtr ); + + CleanupStack::PopAndDestroy( encoded ); + + RDEBUG( "CIsAdapter::EncodeImageL() <" ); + } + +// ------------------------------------------------------------------------------------- +// CIsAdapter::GetShortcutTargetURIL +// ------------------------------------------------------------------------------------- +CSmlDmAdapter::TError CIsAdapter::GetShortcutTargetURIL(CBufFlat& aBuffer, TInt aUid ) + { + RDEBUG( "CIsAdapter::GetShortcutTargetURIL() >" ); + + TInt rtType = 0; + if(iUiSettingsNotInitialized) + { + iUiSettings->ReadTargetsL() ; + iUiSettings->ReadBookmarksL() ; + iUiSettingsNotInitialized = EFalse; + } + iUiSettings->GetShortcutRtTypeL( aUid, rtType ); + // TScActionType acType = TUid::Uid( aUid ); + CSmlDmAdapter::TError retVal = CSmlDmAdapter::EOk; + + + switch( rtType ) + { + default: + { + TInt index = -1; + User::LeaveIfError(iUiSettings->GetShortcutTargetIndexL( aUid, index )); + + if( index == -1 ) + { + return CSmlDmAdapter::ENotFound; + } + else + { + HBufC8* nodeName = iAppTargetManager->GenerateNodeNameL( index ); + CleanupStack::PushL( nodeName ); + aBuffer.InsertL( aBuffer.Size(), KNSmlCustomizationNodeName() ); + aBuffer.InsertL( aBuffer.Size(), KNSmlISSeparator() ); + aBuffer.InsertL( aBuffer.Size(), KNSmlIS_IdleSoftKeyNodeName() ); + aBuffer.InsertL( aBuffer.Size(), KNSmlISSeparator() ); + aBuffer.InsertL( aBuffer.Size(), KNSmlIS_TargetsNodeName() ); + aBuffer.InsertL( aBuffer.Size(), KNSmlISSeparator() ); + aBuffer.InsertL( aBuffer.Size(), *nodeName ); + CleanupStack::PopAndDestroy( nodeName ); + + return CSmlDmAdapter::EOk; + } + } + + + case KScRtTypeUidValueBookmark: + { + TInt bmId = -1, index = -1; + User::LeaveIfError(iUiSettings->GetShortcutTargetIndexL( aUid, index )); + User::LeaveIfError(iUiSettings->GetWebTargetAppUid( index, bmId )); + + TBuf8 numBuf; + numBuf.Num( bmId ); + TInt ind = -1; + + HBufC8* dataH = HBufC8::NewLC( KRepositoryEntryMaxLength ); + TPtr8 data( dataH->Des() ); + TBool ret = iWebTargetManager->FindURIByLUIDL( data, numBuf, ind ); + User::LeaveIfError( ret ); + + aBuffer.InsertL( aBuffer.Size(), data ); + + CleanupStack::PopAndDestroy( dataH ); + } + break; + + } + + + RDEBUG_2( "CIsAdapter::GetShortcutTargetURIL() < %d", retVal ); + return retVal; + } + +// ------------------------------------------------------------------------------------- +// CIsAdapter::SetShortcutTargetL +// ------------------------------------------------------------------------------------- +void CIsAdapter::SetShortcutTargetL(const TDesC8& aURI, TInt aUid) + { + RDEBUG8_2( "CIsAdapter::SetShortcutTargetL() > %S ", &aURI ); + + // SymbianConvergency NOTE! this should be ok, for the aURI part + if(iUiSettingsNotInitialized) + { + iUiSettings->ReadTargetsL() ; + iUiSettings->ReadBookmarksL() ; + iUiSettingsNotInitialized = EFalse; + } + TPtrC8 uri( aURI ); + if( uri.Left(2).Compare( _L8("./") ) == 0 ) + { + uri.Set( aURI.Right( aURI.Length() - 2 ) ); + } + + CIsAdapter::TIsNodeIdentifier identifier = GetNodeIdentifier( uri ); + if( (EIsNodeTargetsX != identifier) && + (EIsNodeWebTargetsX != identifier) ) + { + User::Leave( KErrArgument ); + } + + HBufC16* buf = CreateCopy16LC( uri ); + TPtrC8 targetNode = NSmlDmURI::URISeg( uri, 2 ); + TPtrC8 segment = NSmlDmURI::URISeg( uri, 3 ); + TInt index = -1; + + if( targetNode == KNSmlIS_WebTargetsNodeName() ) + { + iWebTargetManager->CheckWebTargetsL(); + CFavouritesItem *favItem = CFavouritesItem::NewLC(); + RDEBUG_2( "CIsAdapter::SetShortcutTargetL() CFavouritesItem ALLOC %x", favItem); + + TInt status = KErrNone; + TRAPD( reason, + status = iWebTargetManager->GetTargetFromNodeNameL( uri, *favItem, index ) ); + if( (KErrNone == reason) && (0 != favItem) && (KErrNone == status) && (-1 != index) ) + { + User::LeaveIfError(iUiSettings->SetShortcutTargetWebIndexL (aUid, index)); + } + else + { + RDEBUG8_2( "CIsAdapter::SetShortcutTargetL: Error in argument, WebTarget %S", &targetNode); + User::Leave( KErrArgument ); + } + + CleanupStack::PopAndDestroy( favItem ); + } + else + { + if( targetNode == KNSmlIS_TargetsNodeName() ) + { + // Set new target + TBuf8 caption; + iAppTargetManager->GetTargetFromNodeNameL( segment, index, caption ); + User::LeaveIfError(iUiSettings->SetShortcutTargetAppIndexL (aUid, index)); + } + else + { + RDEBUG8_2( "CIsAdapter::SetShortcutTargetL: Error in argument, AppTarget %S", &targetNode); + User::Leave( KErrArgument ); + } + } + + CleanupStack::PopAndDestroy( buf ); + + RDEBUG( "CIsAdapter::SetShortcutTargetL() <" ); + } + +// ------------------------------------------------------------------------------------- +// CIsAdapter::CreateCopy16LC +// ------------------------------------------------------------------------------------- +HBufC16* CIsAdapter::CreateCopy16LC( const TDesC8& aText ) + { + RDEBUG( "CIsAdapter::CreateCopy16LC() >" ); + + HBufC16* buf = HBufC16::NewLC( aText.Length() ); + RDEBUG_2( "CIsAdapter::CreateCopy16LC() HBufC16 buf ALLOC %x", buf); + buf->Des().Copy( aText ); + + RDEBUG( "CIsAdapter::CreateCopy16LC() <" ); + return buf; + } + +// ----------------------------------------------------------------------------- +// CIsAdapter::PolicyRequestResourceL +// ----------------------------------------------------------------------------- +// +//#ifdef __SAP_POLICY_MANAGEMENT +TPtrC8 CIsAdapter::PolicyRequestResourceL( const TDesC8& /*aURI*/ ) +{ + if(! FeatureManager::FeatureSupported(KFeatureIdSapPolicyManagement )) + { + User::Leave(KErrNotSupported); + } + + RDEBUG8_2( "CIsAdapter::PolicyRequestResourceL() >< %S", + &PolicyEngineXACML::KCustomizationManagement() ); + + return PolicyEngineXACML::KCustomizationManagement(); + +} +//#endif +