--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/customization/isadapter/src/IdleSoftkeysWebTargetManager.cpp Thu Dec 17 08:40:12 2009 +0200
@@ -0,0 +1,1024 @@
+/*
+* 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 "IdleSoftkeysWebTargetManager.h"
+#include "UiSettingsUtil.h"
+// symbian
+// s60
+#include <centralrepository.h>
+// tarm
+#include "IsAdapterLiterals.h"
+#include "IsAdapterDefines.h"
+#include "nsmldmuri.h"
+#include "TARMCharConv.h"
+#include "TPtrC8I.h"
+#include "debug.h"
+
+// #define ISADAPTER_USE_CAPTION_IN_WEBTARGET_NAME
+
+
+CIdleSoftkeysWebTargetManager::CIdleSoftkeysWebTargetManager( MSmlDmCallback *& aCallBack,
+ RFavouritesDb & aFavDb ) : iCallBack( aCallBack ), iFavDb( aFavDb )
+ {
+ iUiSettingsNotInitialized = ETrue;
+ }
+
+CIdleSoftkeysWebTargetManager::~CIdleSoftkeysWebTargetManager()
+ {
+ if(iUiSettingsNotInitialized == EFalse)
+ {
+ delete iUiSettings;
+ }
+ }
+
+
+// -------------------------------------------------------------------------------------
+// CIdleSoftkeysWebTargetManager::ListWebTargetsL
+// -------------------------------------------------------------------------------------
+TInt CIdleSoftkeysWebTargetManager::ListWebTargetsL( CBufFlat &aList )
+ {
+ RDEBUG( "CIdleSoftkeysWebTargetManager::ListWebTargetsL() >" );
+
+ TInt i, num = 6, offset;
+ if(iUiSettingsNotInitialized)
+ {
+ iUiSettings = CUiSettingsUtil::NewL( );
+ iUiSettings->ReadBookmarksL();
+ iUiSettingsNotInitialized = EFalse;
+ }
+ iUiSettings->GetWebTargetsCount( num ) ;
+ HBufC8* dataH = HBufC8::NewLC( KRepositoryEntryMaxLength );
+ RDEBUG_2( "CIdleSoftkeysWebTargetManager::ListWebTargetsL() HBufC8 dataH ALLOC %x", dataH);
+ TPtr8 data( dataH->Des() );
+
+ for(i=0, offset=0; i<num; i++)
+ {
+ TBuf8<MAX_NUMBER_OF_DIGITS_IN_10BASE_INT64> numBuf;
+ TInt mappingIndex;
+ TInt bmUid;
+
+ //
+ // List BM's with valid UID (>= 0)
+ //
+ // General names for the new bookmarks on the fly
+ //
+ User::LeaveIfError(iUiSettings->GetWebTargetAppUid( i, bmUid ));
+
+
+ if( bmUid >= 0 )
+ {
+ mappingIndex = -1;
+ numBuf.Num( bmUid );
+ HBufC8* targetName = NULL;
+
+ //
+ // Case 1: There is already URI to LUID mapping, continue with that
+ //
+ if( (KErrNone == FindURIByLUIDL( data, numBuf, mappingIndex )) && (mappingIndex != -1) )
+ {
+ //
+ // LUid was found in the database
+ //
+ targetName = GenerateNodeNameL( NSmlDmURI::LastURISeg(data) );
+ CleanupStack::PushL(targetName);
+ }
+#ifdef ISADAPTER_USE_CAPTION_IN_WEBTARGET_NAME
+ else
+ //
+ // Case 2: Bookmark caption is not used in mappings, use that webtarget name
+ //
+ if( NULL != (targetName = GenerateNodeNameL( i )) )
+ {
+ //
+ //
+ //
+ CleanupStack::PushL(targetName);
+ UpdateLUIDDatabaseL( *targetName, numBuf, mappingIndex);
+ }
+#endif
+ else
+ {
+ //
+ // Generate unique name
+ //
+ targetName = GenerateNodeNameL( offset, KPrefixWebTargetURI() );
+ CleanupStack::PushL(targetName);
+
+ mappingIndex = -1;
+ while( (KErrNone == FindLUIDByURIL( *targetName, data, mappingIndex )) &&
+ (mappingIndex != -1) )
+ {
+ offset ++;
+ mappingIndex = -1;
+
+ CleanupStack::PopAndDestroy( targetName );
+ targetName = GenerateNodeNameL( offset, KPrefixWebTargetURI() );
+ CleanupStack::PushL(targetName);
+ }
+
+ // We have now unique webtarget node name and unique LUid
+ //
+ numBuf.Num( bmUid );
+ mappingIndex = -1;
+ UpdateLUIDDatabaseL( *targetName, numBuf, mappingIndex);
+ }
+
+ // Add webtarget node name to list
+ //
+ if( aList.Size() > 0 )
+ {
+ aList.InsertL( aList.Size(), KNSmlISSeparator() );
+ }
+ aList.InsertL( aList.Size(), NSmlDmURI::LastURISeg(*targetName) );
+ CleanupStack::PopAndDestroy( targetName );
+ }
+ }
+
+ CleanupStack::PopAndDestroy( dataH );
+
+ RDEBUG( "CIdleSoftkeysWebTargetManager::ListWebTargetsL() <" );
+ return KErrNone;
+ }
+
+// -------------------------------------------------------------------------------------
+// CIdleSoftkeysWebTargetManager::CheckWebTargetsL
+// -------------------------------------------------------------------------------------
+void CIdleSoftkeysWebTargetManager::CheckWebTargetsL()
+ {
+ RDEBUG( "CIdleSoftkeysWebTargetManager::CheckWebTargetsL() ><" );
+ }
+
+#ifdef ISADAPTER_USE_CAPTION_IN_WEBTARGET_NAME
+// -------------------------------------------------------------------------------------
+// CIdleSoftkeysWebTargetManager::GenerateNodeNameL
+// -------------------------------------------------------------------------------------
+HBufC8* CIdleSoftkeysWebTargetManager::GenerateNodeNameL(TInt aIndex)
+ {
+ RDEBUG( "CIdleSoftkeysWebTargetManager::GenerateNodeNameL() 1 >" );
+
+ //
+ // Get caption of the bookmark
+ //
+ TBuf<64> caption;
+ if(iUiSettingsNotInitialized)
+ {
+ iUiSettings = CUiSettingsUtil::NewL( );
+ iUiSettings->ReadBookmarksL();
+ iUiSettingsNotInitialized = EFalse;
+ }
+
+ User::LeaveIfError( iUiSettings->GetWebTargetCaption( aIndex, caption ) );
+
+
+
+ if( HasInvalidCharacters( caption ) )
+ {
+ return NULL;
+ }
+
+ //
+ // Generate URI with caption
+ // Reserve space
+ //
+ TInt length = caption.Length() + KPrefixWebTargetURI().Length();
+ HBufC8* targetName = HBufC8::NewLC( length );
+ TPtr8 ptr( targetName->Des() );
+
+ //
+ // Generate URI with caption
+ // Append strings
+ //
+ ptr.Append( KPrefixWebTargetURI() );
+ ptr.Append( caption );
+
+ HBufC8* dataH = HBufC8::NewLC( KRepositoryEntryMaxLength );
+ TPtr8 data( dataH->Des() );
+ TInt index = -1;
+ TBool okToAdd = (KErrNone != FindLUIDByURIL( ptr, data, index ));
+ CleanupStack::PopAndDestroy( dataH );
+
+ if( okToAdd )
+ {
+ RDEBUG8_2( "CIdleSoftkeysWebTargetManager::GenerateNodeNameL() 1 < %S", &targetName );
+ CleanupStack::Pop(targetName);
+ return targetName;
+ }
+ else
+ {
+ RDEBUG( "CIdleSoftkeysWebTargetManager::GenerateNodeNameL() 1 < NULL, WebTarget name was reserved!" );
+ CleanupStack::PopAndDestroy(targetName);
+ return NULL;
+ }
+ }
+#endif
+
+// -------------------------------------------------------------------------------------
+// CIdleSoftkeysWebTargetManager::GenerateNodeNameL
+// -------------------------------------------------------------------------------------
+HBufC8* CIdleSoftkeysWebTargetManager::GenerateNodeNameL(TInt aIndex, const TDesC8 &aPrefix)
+ {
+ RDEBUG( "CIdleSoftkeysWebTargetManager::GenerateNodeNameL() 2 >" );
+
+ TInt length = aPrefix.Length()
+ + KPrefixWebTargetNodeName().Length()
+ + MAX_NUMBER_OF_DIGITS_IN_10BASE_INT64;
+
+ RDEBUG_2( "CIdleSoftkeysWebTargetManager::GenerateNodeNameL() 2 About to ALLOC %d bytes.", length );
+
+ HBufC8* targetName = HBufC8::NewL( length );
+
+ RDEBUG_2( "CIdleSoftkeysWebTargetManager::GenerateNodeNameL() 2 ALLOC HBufC8 targetName %x", targetName );
+
+ TPtr8 ptr( targetName->Des() );
+
+ ptr.Format(KFormatWebTargetNodeName, aIndex+1);
+ ptr.Insert(0, aPrefix);
+
+ RDEBUG8_2( "CIdleSoftkeysWebTargetManager::GenerateNodeNameL() 2 < %S", &targetName );
+ return targetName;
+ }
+
+// -------------------------------------------------------------------------------------
+// CIdleSoftkeysWebTargetManager::GenerateNodeNameL
+// -------------------------------------------------------------------------------------
+HBufC8* CIdleSoftkeysWebTargetManager::GenerateNodeNameL(const TDesC8 &aText)
+ {
+ RDEBUG( "CIdleSoftkeysWebTargetManager::GenerateNodeNameL() 3 >" );
+
+ TInt length = aText.Length();
+
+ RDEBUG_2( "CIdleSoftkeysWebTargetManager::GenerateNodeNameL() 3 About to ALLOC %d bytes.", length );
+
+ HBufC8* targetName = HBufC8::NewL( length );
+
+ RDEBUG_2("CIdleSoftkeysWebTargetManager::GenerateNodeNameL() 3 ALLOC HBufC8 targetName %x", targetName );
+
+ TPtr8 ptr( targetName->Des() );
+
+ ptr.Copy( aText );
+
+ RDEBUG8_2( "CIdleSoftkeysWebTargetManager::GenerateNodeNameL() 3 < %S", &targetName );
+ return targetName;
+ }
+
+// -------------------------------------------------------------------------------------
+// CIdleSoftkeysWebTargetManager::RenameL
+// -------------------------------------------------------------------------------------
+TInt CIdleSoftkeysWebTargetManager::RenameL( const TDesC8& aURI, const TDesC8& /*aLUID*/,
+ const TDesC8& aNewURI )
+ {
+ RDEBUG( "CIdleSoftkeysWebTargetManager::RenameL() >" );
+
+ HBufC8* dataH = HBufC8::NewLC( KRepositoryEntryMaxLength );
+ RDEBUG_2( "CIdleSoftkeysWebTargetManager::RenameL() HBufC8 dataH ALLOC %x", dataH);
+
+ TPtr8 data( dataH->Des() );
+ TInt index = -1;
+ TInt retVal = KErrNone;
+
+// OPTION 1: URI is already new one, find old according to LUID
+#ifdef NOT_DEFINED
+
+ // If we find some URI with that LUID ...
+ if( ((KErrNone != FindLUIDByURIL( aURI, data, index ))) &&
+ (KErrNone == FindURIByLUIDL( data, aLUID, index )) && (index != -1) )
+
+ {
+ // ... we replace that URI with new one
+ UpdateLUIDDatabaseL( aURI, aLUID, index );
+ }
+ else
+ {
+ retVal = KErrNotFound;
+ }
+
+// OPTION 2: New (complete) URI is found in the argument
+#else
+
+ TInt index2 = -1;
+ if ( (KErrNone != FindLUIDByURIL( aNewURI, data, index )) &&
+ (KErrNone == FindLUIDByURIL( aURI, data, index2 ))
+ )
+ {
+ UpdateLUIDDatabaseL( aNewURI, data, index2 );
+ }
+ else
+ {
+ retVal = KErrNotFound;
+ }
+
+#endif
+
+ CleanupStack::PopAndDestroy( dataH );
+
+ RDEBUG_2( "CIdleSoftkeysWebTargetManager::RenameL() < %d", retVal );
+ return retVal;
+ }
+
+// -------------------------------------------------------------------------------------
+// CIdleSoftkeysWebTargetManager::GetTargetFromNodeNameL
+// -------------------------------------------------------------------------------------
+TInt CIdleSoftkeysWebTargetManager::GetTargetFromNodeNameL(const TDesC8& aURI, TInt &aIndex )
+ {
+ RDEBUG( "CIdleSoftkeysWebTargetManager::GetTargetFromNodeNameL() >" );
+ __UHEAP_MARK;
+ CSmlDmAdapter::TError status = CSmlDmAdapter::EOk;
+ TInt index = -1;
+ TInt compareLen = KPrefixWebTargetNodeName().Length();
+ TPtrC8 nodeName = NSmlDmURI::URISeg(aURI, 3);
+
+ HBufC8* dataH = HBufC8::NewLC( KRepositoryEntryMaxLength );
+ RDEBUG_2( "CIdleSoftkeysWebTargetManager::GetTargetFromNodeNameL() HBufC8 dataH ALLOC %x", dataH);
+ TPtr8 data( dataH->Des() );
+
+ if( NSmlDmURI::NumOfURISegs( aURI ) >= 4 )
+ {
+ TInt bmIndex = -1;
+ HBufC8* targetName = NULL;
+ if( KErrNone == FindLUIDByURIL( NSmlDmURI::URISeg(aURI, 0, 4), data, bmIndex ) )
+ {
+ targetName = GenerateNodeNameL( NSmlDmURI::LastURISeg(aURI) );
+ }
+ else
+ {
+ status = CSmlDmAdapter::EError;
+ }
+
+ if( CSmlDmAdapter::EOk == status )
+ {
+ CleanupStack::PushL( targetName );
+ TPtrC8 ptr( NSmlDmURI::LastURISeg(*targetName) );
+ if( ptr == nodeName )
+ {
+ aIndex = index;
+ }
+ CleanupStack::PopAndDestroy( targetName );
+ }
+ }
+ else
+ {
+ status = CSmlDmAdapter::EError;
+ }
+
+ CleanupStack::PopAndDestroy( dataH );
+ __UHEAP_MARKEND;
+ RDEBUG_2( "CIdleSoftkeysWebTargetManager::GetTargetFromNodeNameL() < %d", (TInt)status );
+ return status;
+ }
+
+// -------------------------------------------------------------------------------------
+// CIdleSoftkeysWebTargetManager::GetTargetFromNodeNameL
+// -------------------------------------------------------------------------------------
+TInt CIdleSoftkeysWebTargetManager::GetTargetFromNodeNameL(const TDesC8& aURI, CFavouritesItem &aItem, TInt &aIndex )
+ {
+ RDEBUG( "CIdleSoftkeysWebTargetManager::GetTargetFromNodeNameL() >" );
+
+ CSmlDmAdapter::TError status = CSmlDmAdapter::EOk;
+ TInt bmIndex = -1;
+ TInt bmUid = -1;
+ TInt compareLen = KPrefixWebTargetNodeName().Length();
+ TPtrC8 nodeName = NSmlDmURI::URISeg(aURI, 3);
+
+ HBufC8* dataH = HBufC8::NewLC( KRepositoryEntryMaxLength );
+ RDEBUG_2( "CIdleSoftkeysWebTargetManager::GetTargetFromNodeNameL() HBufC8 dataH ALLOC %x", dataH);
+ TPtr8 data( dataH->Des() );
+
+ if( NSmlDmURI::NumOfURISegs( aURI ) >= 4 )
+ {
+ TInt repIndex = -1;
+ HBufC8* targetName = NULL;
+ if( KErrNone == FindLUIDByURIL( NSmlDmURI::URISeg(aURI, 0, 4), data, repIndex ) )
+ {
+ targetName = GenerateNodeNameL( nodeName );
+ CleanupStack::PushL( targetName );
+ TPtrC8 ptr( NSmlDmURI::LastURISeg(*targetName) );
+ User::LeaveIfError( ptr == nodeName ? KErrNone : KErrGeneral );
+ CleanupStack::PopAndDestroy( targetName );
+
+ TLex8 lex;
+ lex.Assign(data);
+ User::LeaveIfError( lex.Val( bmUid ) );
+ TInt ret = KErrNone;
+ if(iUiSettingsNotInitialized)
+ {
+ iUiSettings = CUiSettingsUtil::NewL( );
+ iUiSettings->ReadBookmarksL();
+ iUiSettingsNotInitialized = EFalse;
+ }
+ User::LeaveIfError(iUiSettings->GetWebTargetIndex(bmUid,bmIndex));
+ if( -1 == bmIndex )
+ {
+ ret = KErrNotFound;
+ }
+ if( KErrNotFound == ret )
+ {
+ User::LeaveIfError(iUiSettings->GetWebTargetIndex(bmUid, bmIndex));
+ }
+ else
+ {
+ User::LeaveIfError( ret );
+ }
+ }
+ else
+ {
+ status = CSmlDmAdapter::EError;
+ }
+
+ if( CSmlDmAdapter::EOk == status )
+ {
+ if( KErrNone == iFavDb.Get( bmUid, aItem ) )
+ {
+ aIndex = bmIndex;
+ }
+ else
+ {
+ status = CSmlDmAdapter::EError;
+ }
+ }
+ }
+ else
+ {
+ status = CSmlDmAdapter::EError;
+ }
+
+ CleanupStack::PopAndDestroy( dataH );
+
+ RDEBUG_2( "CIdleSoftkeysWebTargetManager::GetTargetFromNodeNameL() < %d", (TInt)status );
+ return status;
+ }
+
+// -------------------------------------------------------------------------------------
+// CIdleSoftkeysWebTargetManager::PrepareItemL
+// -------------------------------------------------------------------------------------
+void CIdleSoftkeysWebTargetManager::PrepareItemL( const TDesC8& aURI, CFavouritesItem &aItem, TInt &aIndex )
+ {
+ RDEBUG( "CIdleSoftkeysWebTargetManager::PrepareItemL() >" );
+ CheckWebTargetsL();
+ TInt error = GetTargetFromNodeNameL( aURI, aItem, aIndex );
+ if( KErrNone != error )
+ {
+ RDEBUG_2( "CIdleSoftkeysWebTargetManager::PrepareItemL TError %d", error );
+ User::Leave( KErrNotFound );
+ }
+
+ RDEBUG( "CIdleSoftkeysWebTargetManager::PrepareItemL() <" );
+ }
+
+// -------------------------------------------------------------------------------------
+// CIdleSoftkeysWebTargetManager::ReleaseItemL
+// -------------------------------------------------------------------------------------
+void CIdleSoftkeysWebTargetManager::ReleaseItemL( CFavouritesItem &aItem, TBool aUpdate/*=ETrue*/ )
+ {
+ if( aUpdate )
+ {
+ User::LeaveIfError( iFavDb.Update( aItem, aItem.Uid(), ETrue ) );
+ }
+ }
+
+// -------------------------------------------------------------------------------------
+// CIdleSoftkeysWebTargetManager::SetCaptionL
+// -------------------------------------------------------------------------------------
+void CIdleSoftkeysWebTargetManager::SetCaptionL( const TDesC8& aURI, const TDesC8& aCaption )
+ {
+ RDEBUG( "CIdleSoftkeysWebTargetManager::SetCaptionL() >" );
+
+ TInt index;
+
+ CFavouritesItem *favItem = CFavouritesItem::NewLC();
+ RDEBUG_2( "CIdleSoftkeysWebTargetManager::SetCaptionL() CFavouritesItem ALLOC %x", favItem);
+
+ HBufC* newCaption = CTARMCharConv::ConvertFromUtf8LC( aCaption );
+
+ PrepareItemL( aURI, *favItem, index );
+ favItem->SetNameL( *newCaption );
+ if( favItem->Name().Compare( *newCaption ) != 0 )
+ {
+ User::Leave( KErrGeneral );
+ }
+ ReleaseItemL( *favItem );
+
+ CleanupStack::PopAndDestroy( newCaption );
+ CleanupStack::PopAndDestroy( favItem );
+
+ RDEBUG( "CIdleSoftkeysWebTargetManager::SetCaptionL() <" );
+ }
+
+// -------------------------------------------------------------------------------------
+// CIdleSoftkeysWebTargetManager::FindWapApL
+// -------------------------------------------------------------------------------------
+void CIdleSoftkeysWebTargetManager::FindWapApL( const TDesC8& aURI, TInt &aWapAp )
+ {
+ TPtrC8 apURI = NSmlDmURI::RemoveDotSlash( aURI );
+ TInt numOfSegs = NSmlDmURI::NumOfURISegs( apURI );
+ TPtrC8I seg1 = NSmlDmURI::URISeg( apURI, 0 );
+ TInt value = 0;
+
+ if( (numOfSegs == 2) && (seg1.Compare( _L8("AP") ) == 0) )
+ {
+ HBufC8* buf = iCallBack->GetLuidAllocL( apURI );
+ CleanupStack::PushL( buf );
+ if( buf->Des().Length() == 0 )
+ {
+ CleanupStack::PopAndDestroy( buf );
+ buf = iCallBack->GetLuidAllocL( aURI );
+ CleanupStack::PushL( buf );
+ if( buf->Des().Length() == 0 )
+ {
+ CleanupStack::PopAndDestroy( buf );
+ User::Leave( KErrNotFound );
+ }
+ }
+
+ TLex8 lex;
+ lex.Assign( buf->Des() );
+ User::LeaveIfError( lex.Val( value ) );
+ CleanupStack::PopAndDestroy( buf );
+ }
+ else
+ {
+ User::Leave( KErrArgument );
+ }
+
+ aWapAp = value;
+ }
+
+
+// -------------------------------------------------------------------------------------
+// CIdleSoftkeysWebTargetManager::UpdateLUIDDatabaseL
+// -------------------------------------------------------------------------------------
+TInt CIdleSoftkeysWebTargetManager::UpdateLUIDDatabaseL(const TDesC8& aURI, const TDesC8& aLUID, TInt &aIndex)
+ {
+ RDEBUG( "CIdleSoftkeysWebTargetManager::UpdateLUIDDatabaseL() >" );
+
+ TInt ret = KErrGeneral;
+
+ CRepository* rep = CRepository::NewLC( KNSmlDMISAdapterCentRepUid );
+ RDEBUG_2( "CIdleSoftkeysWebTargetManager::UpdateLUIDDatabaseL() CRepository ALLOC %x", rep);
+
+ HBufC8* data = HBufC8::NewLC( aURI.Length() + aLUID.Length() + 1 );
+ RDEBUG_2( "CIdleSoftkeysWebTargetManager::UpdateLUIDDatabaseL() HBufC8 ALLOC data %x", data);
+ TPtr8 dataPtr( data->Des() );
+
+ dataPtr.Copy(aURI);
+ dataPtr.Append(TChar(' '));
+ dataPtr.Append(aLUID);
+
+ TInt count = 0;
+
+ // Get / create the count
+ //
+ ret = rep->Get((TUint32)KRepositoryIdBookmarkCount, count);
+ if( ret == KErrNotFound )
+ {
+ ret = rep->Create((TUint32)KRepositoryIdBookmarkCount, count);
+ }
+
+ if( KErrNone == ret )
+ {
+ // Replace old or ...
+ //
+ if( aIndex != -1 )
+ {
+ ret = rep->Set(aIndex, dataPtr );
+ }
+ else
+ // ... Create new index
+ //
+ {
+ TUint32 newIndex = (TUint32)KRepositoryIdBookmarkFirst + count;
+
+ ret = rep->Create(newIndex, dataPtr);
+ if(KErrAlreadyExists == ret)
+ {
+ ret = rep->Set(newIndex, dataPtr);
+ }
+
+ if( KErrNone == ret )
+ {
+ HBufC8* check = HBufC8::NewLC( dataPtr.Length() );
+ RDEBUG_2( "CIdleSoftkeysWebTargetManager::UpdateLUIDDatabaseL() HBufC8 ALLOC check %x", check);
+ TPtr8 checkPtr( check->Des() );
+
+ User::LeaveIfError( rep->Get(newIndex, checkPtr ) );
+ User::LeaveIfError( (dataPtr.Compare( checkPtr )==0)?KErrNone:KErrGeneral );
+ aIndex = newIndex;
+
+ CleanupStack::PopAndDestroy( check );
+
+ rep->Set((TUint32)KRepositoryIdBookmarkCount, count+1 );
+ }
+ }
+ }
+
+ CleanupStack::PopAndDestroy( data );
+ CleanupStack::PopAndDestroy( rep );
+
+ RDEBUG_2( "CIdleSoftkeysWebTargetManager::UpdateLUIDDatabaseL() returns %d<", ret );
+ if(ret == KErrNone && !iUiSettingsNotInitialized)
+ {
+ iUiSettings->ReadBookmarksL();
+ }
+ return ret;
+ }
+
+// -------------------------------------------------------------------------------------
+// CIdleSoftkeysWebTargetManager::CheckLUIDDatabaseL
+// -------------------------------------------------------------------------------------
+TInt CIdleSoftkeysWebTargetManager::CheckLUIDDatabaseL( TBool aCleanDatabase/*=ETrue*/ )
+ {
+ RDEBUG( "CIdleSoftkeysWebTargetManager::CheckLUIDDatabaseL() >" );
+
+ TInt i;
+ TInt j;
+ TInt ret = KErrNone;
+ TUint32 repIndex, repIndex2;
+ TInt strIndex;
+ TLex8 lex;
+
+ if(iUiSettingsNotInitialized)
+ {
+ iUiSettings = CUiSettingsUtil::NewL( );
+ iUiSettings->ReadBookmarksL();
+ iUiSettingsNotInitialized = EFalse;
+ }
+ else
+ {
+ iUiSettings->ReadBookmarksL();
+ }
+
+ CRepository* rep = CRepository::NewLC( KNSmlDMISAdapterCentRepUid );
+ RDEBUG_2( "CIdleSoftkeysWebTargetManager::CheckLUIDDatabaseL() CRepository ALLOC %x", rep);
+
+ HBufC8* repDataH = HBufC8::NewLC( KRepositoryEntryMaxLength );
+ RDEBUG_2("CIdleSoftkeysWebTargetManager::CheckLUIDDatabaseL() HBufC8 repDataH ALLOC %x", repDataH);
+ TPtr8 repData( repDataH->Des() );
+
+ HBufC8* repData2H = HBufC8::NewLC( KRepositoryEntryMaxLength );
+ RDEBUG_2( "CIdleSoftkeysWebTargetManager::CheckLUIDDatabaseL() HBufC8 repData2H ALLOC %x", repData2H);
+ TPtr8 repData2( repData2H->Des() );
+
+ TInt count = 0;
+ ret = rep->Get((TUint32)KRepositoryIdBookmarkCount, count);
+
+ if( KErrNone == ret )
+ {
+ // DEBUG TEST S
+#ifdef __WINS__
+ for( i=0; i<count; i++ )
+ {
+ repIndex = (TUint32)i + KRepositoryIdBookmarkFirst;
+ ret = rep->Get(repIndex, repData);
+ if( KErrNone != ret )
+ {
+ User::Panic(_L("IS_DEBUG"), 1);
+ }
+
+ strIndex = repData.Find( _L8(" ") );
+ if( strIndex < 1 )
+ {
+ User::Panic(_L("IS_DEBUG"), 2);
+ }
+
+ TInt theLuid, bmIndex = -1;
+ lex.Assign( repData );
+ lex.Inc( strIndex );
+
+ TChar ch = lex.Get( );
+ if( ch != TChar(' ') )
+ {
+ User::Panic(_L("IS_DEBUG"), 3);
+ }
+ if( KErrNone != lex.Val( theLuid ) )
+ {
+ User::Panic(_L("IS_DEBUG"), 4);
+ }
+ if( theLuid < 0 )
+ {
+ User::Panic(_L("IS_DEBUG"), 5);
+ }
+
+ if( (KErrNone != iUiSettings->GetWebTargetIndex(theLuid, bmIndex) /*iUiSrv.GetShortcutTargetIndex( EUiSrvRtTypeBm, theLuid, bmIndex )*/ ) ||
+ (bmIndex == -1) )
+ {
+ RDEBUG( "CIdleSoftkeysWebTargetManager::CheckLUIDDatabaseL(): WARNING Non-existent BM-UID in IsAdapter!" );
+ }
+
+ if( (NSmlDmURI::NumOfURISegs( repData.Left(strIndex) ) != 4) ||
+ (NSmlDmURI::URISeg( repData, 0 ) != KNSmlCustomizationNodeName()) ||
+ (NSmlDmURI::URISeg( repData, 1 ) != KNSmlIS_IdleSoftKeyNodeName()) ||
+ (NSmlDmURI::URISeg( repData, 2 ) != KNSmlIS_WebTargetsNodeName())
+ )
+ {
+ User::Panic(_L("IS_DEBUG"), 6);
+ }
+ }
+
+ for( i=0; i<count-1; i++ )
+ {
+ repIndex = (TUint32)i + KRepositoryIdBookmarkFirst;
+ rep->Get(repIndex, repData);
+ strIndex = repData.Find( _L8(" ") );
+ lex.Assign( repData );
+ lex.Inc( strIndex ); lex.Inc( 1 );
+ TInt theLuid;
+ lex.Val( theLuid );
+ for( j=i+1; j<count; j++ )
+ {
+ TInt strIndex2;
+ repIndex2 = (TUint32)j + KRepositoryIdBookmarkFirst;
+ rep->Get(repIndex2, repData2);
+ strIndex2 = repData2.Find( _L8(" ") );
+ lex.Assign( repData2 );
+ lex.Inc( strIndex2 ); lex.Inc( 1 );
+ TInt theLuid2;
+ lex.Val( theLuid2 );
+
+ if( repData.Left( strIndex+1 ).Compare( repData2.Left( strIndex+1 ) ) == 0 )
+ {
+ User::Panic(_L("IS_DEBUG"), 7);
+ }
+ if( theLuid == theLuid2 )
+ {
+ User::Panic(_L("IS_DEBUG"), 8);
+ }
+ }
+ }
+#endif
+ // DEBUG TEST E
+
+ for( i=0; i<count; i++ )
+ {
+ repIndex = (TUint32)i + KRepositoryIdBookmarkFirst;
+
+ ret = rep->Get(repIndex, repData);
+ if( KErrNone == ret )
+ {
+ strIndex = repData.Find( _L8(" ") );
+ if( strIndex > 0 )
+ {
+ TInt theLuid, bmIndex = -1;
+ lex.Assign( repData );
+ lex.Inc( strIndex+1 );
+ if( KErrNone == lex.Val( theLuid ) )
+ {
+ if( theLuid < 0 )
+ {
+ rep->Set( repIndex, KNullDesC() );
+ }
+
+ if( (KErrNone != iUiSettings->GetWebTargetIndex(theLuid, bmIndex) /*iUiSrv.GetShortcutTargetIndex( EUiSrvRtTypeBm, theLuid, bmIndex )*/ ) ||
+ (bmIndex == -1) )
+ {
+ TBool exists = EFalse;
+ iFavDb.ItemExists( theLuid, exists );
+ if( !exists )
+ {
+ if( aCleanDatabase )
+ {
+ rep->Set( repIndex, KNullDesC() );
+ RDEBUG( "CIdleSoftkeysWebTargetManager::CheckLUIDDatabaseL(): WARNING Removing invalid WebTarget LUID mapping" );
+ }
+ else
+ {
+ RDEBUG( "CIdleSoftkeysWebTargetManager::CheckLUIDDatabaseL(): WARNING Invalid WebTarget LUID" );
+ }
+ }
+ }
+
+ }
+ if( (NSmlDmURI::NumOfURISegs( repData.Left(strIndex) ) != 4) ||
+ (NSmlDmURI::URISeg( repData, 0 ).Compare( KNSmlCustomizationNodeName() ) != 0) ||
+ (NSmlDmURI::URISeg( repData, 1 ).Compare( KNSmlIS_IdleSoftKeyNodeName() ) != 0) ||
+ (NSmlDmURI::URISeg( repData, 2 ).Compare( KNSmlIS_WebTargetsNodeName() ) != 0)
+ )
+ {
+ rep->Set( repIndex, KNullDesC() );
+ RDEBUG( "CIdleSoftkeysWebTargetManager::CheckLUIDDatabaseL(): WARNING Invalid WebTarget URI" );
+ }
+ }
+ }
+ }
+ }
+
+ // Get rid of empty entries and update count
+ count = 0;
+ ret = rep->Get((TUint32)KRepositoryIdBookmarkCount, count);
+ TInt oldcount = count;
+ TInt newcount = count;
+ RArray<TInt32> remList;
+ CleanupClosePushL(remList);
+ if( KErrNone == ret )
+ {
+ for( i=0; i<count; i++ )
+ {
+ repIndex = (TUint32)i + KRepositoryIdBookmarkFirst;
+
+ ret = rep->Get(repIndex, repData);
+ if( KErrNone == ret )
+ {
+ if( repData.Length() == 0 )
+ {
+ for( j=count; j>i+1; j-- )
+ {
+ repIndex2 = (TUint32)j-1 + KRepositoryIdBookmarkFirst;
+ ret = rep->Get(repIndex2, repData2);
+ if( (KErrNone == ret) && (repData2.Length() > 0) )
+ {
+ repData.Copy(repData2);
+ repData2.Zero();
+ ret = rep->Set(repIndex, repData);
+ ret = rep->Set(repIndex2, repData2);
+ newcount --;
+ remList.Append(j);
+ break;
+ }
+ }
+ if( j == i+1 && remList.Find(j) == KErrNotFound)
+ {
+ // Did not find a replacement, just delete the entry
+ newcount --;
+ }
+ }
+ }
+ }
+ ret = rep->Set((TUint32)KRepositoryIdBookmarkCount, newcount);
+
+ for(i=newcount; i<oldcount; i++)
+ {
+ repIndex = (TUint32)i + KRepositoryIdBookmarkFirst;
+ ret = rep->Delete( repIndex );
+ }
+
+ for(i=0; i<newcount; i++)
+ {
+ TUint32 repIndex = (TUint32)i + KRepositoryIdBookmarkFirst;
+ ret = rep->Get( repIndex, repData );
+ if( (KErrNone != ret) || (repData.Length() == 0) )
+ {
+ count = i;
+ ret = rep->Set((TUint32)KRepositoryIdBookmarkCount, count);
+ break;
+ }
+ }
+ }
+ CleanupStack::PopAndDestroy(&remList);
+ CleanupStack::PopAndDestroy( repData2H );
+ CleanupStack::PopAndDestroy( repDataH );
+ CleanupStack::PopAndDestroy( rep );
+
+ RDEBUG_2( "CIdleSoftkeysWebTargetManager::CheckLUIDDatabaseL() returns %d<", ret );
+ //iUiSettings->ReadBookmarksL();
+ return ret;
+ }
+
+// -------------------------------------------------------------------------------------
+// CIdleSoftkeysWebTargetManager::FindLUIDByURIL
+// -------------------------------------------------------------------------------------
+TInt CIdleSoftkeysWebTargetManager::FindLUIDByURIL(const TDesC8& aURI, TDes8& aLUID, TInt &aIndex)
+ {
+ RDEBUG8_2( "CIdleSoftkeysWebTargetManager::FindLUIDByURIL() > URI=%S", &aURI );
+
+ TInt ret = KErrGeneral;
+
+ CRepository* rep = CRepository::NewLC( KNSmlDMISAdapterCentRepUid );
+ RDEBUG_2( "CIdleSoftkeysWebTargetManager::FindLUIDByURIL() CRepository ALLOC %x", rep);
+
+ HBufC8* repDataH = HBufC8::NewLC( KRepositoryEntryMaxLength );
+ RDEBUG_2("CIdleSoftkeysWebTargetManager::FindLUIDByURIL() HBufC8 repDataH ALLOC %x", repDataH);
+ TPtr8 repData( repDataH->Des() );
+
+ TInt count;
+
+ ret = rep->Get((TUint32)KRepositoryIdBookmarkCount, count);
+ if( KErrNone == ret )
+ {
+ RDEBUG("CIdleSoftkeysWebTargetManager::FindLUIDByURIL() rep->Get((TUint32)KRepositoryIdBookmarkCount");
+ TInt i;
+ for( i=0; i<count; i++ )
+ {
+ TUint32 repIndex = (TUint32)i + KRepositoryIdBookmarkFirst;
+
+ ret = rep->Get(repIndex, repData);
+ if( KErrNone == ret )
+ {
+ RDEBUG_2( "CIdleSoftkeysWebTargetManager::FindLUIDByURIL() rep->Get(repIndex, repData), repIndex=%d", repIndex);
+ RDEBUG8_2( "CIdleSoftkeysWebTargetManager::FindLUIDByURIL() rep->Get(repIndex, repData), repData=%S", &repData);
+ if(repData.Length() > aURI.Length())
+ {
+ if( repData.Left( aURI.Length() ).Compare( aURI ) == 0 )
+ {
+ RDEBUG( "CIdleSoftkeysWebTargetManager::FindLUIDByURIL(), lexical analysis starts" );
+ TLex8 lex;
+ lex.Assign( repData );
+ lex.Inc( aURI.Length() );
+ TChar ch = lex.Get();
+ RDEBUG( "CIdleSoftkeysWebTargetManager::FindLUIDByURIL(), lexical analysis more" );
+ if( ch == TChar(' ') )
+ {
+ aLUID.Copy( lex.Remainder() );
+ aIndex = repIndex;
+ ret = KErrNone;
+ RDEBUG( "CIdleSoftkeysWebTargetManager::FindLUIDByURIL(), lexical analysis OK." );
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ if( i==count )
+ {
+ ret = KErrNotFound;
+ }
+ }
+
+ CleanupStack::PopAndDestroy( repDataH );
+ CleanupStack::PopAndDestroy( rep );
+
+ RDEBUG_2( "CIdleSoftkeysWebTargetManager::FindLUIDByURIL() < %d", ret );
+ return ret;
+ }
+
+// -------------------------------------------------------------------------------------
+// CIdleSoftkeysWebTargetManager::FindURIByLUIDL
+// -------------------------------------------------------------------------------------
+TInt CIdleSoftkeysWebTargetManager::FindURIByLUIDL(TDes8& aURI, const TDesC8& aLUID, TInt &aIndex)
+ {
+ RDEBUG( "CIdleSoftkeysWebTargetManager::FindURIByLUIDL() >" );
+
+ TInt ret = KErrGeneral;
+
+ CRepository* rep = CRepository::NewLC( KNSmlDMISAdapterCentRepUid );
+ RDEBUG_2( "CIdleSoftkeysWebTargetManager::FindURIByLUIDL() CRepository ALLOC %x", rep);
+
+ HBufC8* repDataH = HBufC8::NewLC( KRepositoryEntryMaxLength );
+ RDEBUG_2( "CIdleSoftkeysWebTargetManager::FindURIByLUIDL() HBufC8 repDataH ALLOC %x", repDataH);
+ TPtr8 repData( repDataH->Des() );
+
+ HBufC8* verifyDataH = HBufC8::NewLC( KRepositoryEntryMaxLength );
+ RDEBUG_2( "CIdleSoftkeysWebTargetManager::FindURIByLUIDL() HBufC8 verifyDataH ALLOC %x", verifyDataH);
+ TPtr8 verifyData( verifyDataH->Des() );
+
+ TInt count;
+
+ ret = rep->Get((TUint32)KRepositoryIdBookmarkCount, count);
+ if( KErrNone == ret )
+ {
+ TInt i;
+ for( i=0; i<count; i++ )
+ {
+ TUint32 repIndex = (TUint32)i + KRepositoryIdBookmarkFirst;
+
+ ret = rep->Get(repIndex, repData);
+ if( KErrNone == ret )
+ {
+ if(repData.Length() > aLUID.Length())
+ {
+ TInt strIndex = repData.Find( aLUID );
+
+ if( strIndex > 0 )
+ {
+ verifyData.Copy( repData.Left( strIndex ) );
+ verifyData.Append( aLUID );
+
+ if( verifyData.Compare( repData ) == 0 )
+ {
+ aURI.Copy( repData.Left( strIndex - 1 ) );
+ aIndex = repIndex;
+ ret = KErrNone;
+ break;
+ }
+ }
+ }
+ }
+ }
+ if( i==count )
+ {
+ ret = KErrNotFound;
+ }
+ }
+
+ CleanupStack::PopAndDestroy( verifyDataH );
+ CleanupStack::PopAndDestroy( repDataH );
+ CleanupStack::PopAndDestroy( rep );
+
+ RDEBUG_2( "CIdleSoftkeysWebTargetManager::FindURIByLUIDL() < %d", ret );
+ return ret;
+ }
+
+// End of file