diff -r b3cee849fa46 -r fad26422216a creator/src/creator_browser.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/creator/src/creator_browser.cpp Wed Sep 01 12:30:35 2010 +0100 @@ -0,0 +1,592 @@ +/* +* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + +#include "creator_browser.h" +#include "creator_traces.h" + +#include + + +static const TInt KBrowserFieldLength = 128; + +_LIT(KCreatorBrowserPrefixName, "CR_"); +_LIT(KCreatorBrowserPrefixFolderName, "CR_FLDR_"); + +//---------------------------------------------------------------------------- + +CBrowserParameters::CBrowserParameters() + { + LOGSTRING("Creator: CBrowserParameters::CBrowserParameters"); + + iBookmarkName = HBufC::New(KBrowserFieldLength); + iBookmarkAddress = HBufC::New(KBrowserFieldLength); + iBookmarkUsername = HBufC::New(KBrowserFieldLength); + iBookmarkPassword = HBufC::New(KBrowserFieldLength); + iBookmarkFolderName = HBufC::New(KBrowserFieldLength); + iSavedDeckLinkName = HBufC::New(KBrowserFieldLength); + iSavedDeckLocalAddress = HBufC::New(KBrowserFieldLength); + iSavedDeckFolderName = HBufC::New(KBrowserFieldLength); + } + +CBrowserParameters::~CBrowserParameters() + { + LOGSTRING("Creator: CBrowserParameters::~CBrowserParameters"); + + delete iSavedDeckFolderName; + delete iSavedDeckLocalAddress; + delete iSavedDeckLinkName; + delete iBookmarkFolderName; + delete iBookmarkPassword; + delete iBookmarkUsername; + delete iBookmarkAddress; + delete iBookmarkName; + + } + +//---------------------------------------------------------------------------- + +CCreatorBrowser* CCreatorBrowser::NewL(CCreatorEngine* aEngine) + { + CCreatorBrowser* self = CCreatorBrowser::NewLC(aEngine); + CleanupStack::Pop(self); + return self; + } + +CCreatorBrowser* CCreatorBrowser::NewLC(CCreatorEngine* aEngine) + { + CCreatorBrowser* self = new (ELeave) CCreatorBrowser; + CleanupStack::PushL(self); + self->ConstructL(aEngine); + return self; + } + +CCreatorBrowser::CCreatorBrowser() + { + } + +void CCreatorBrowser::ConstructL(CCreatorEngine* aEngine) + { + LOGSTRING("Creator: CCreatorBrowser::ConstructL"); + + iEngine = aEngine; + } + +CCreatorBrowser::~CCreatorBrowser() + { + LOGSTRING("Creator: CCreatorBrowser::~CCreatorBrowser"); + if ( iEngine && iBmEntryIds.Count() ) + { + TRAP_IGNORE( iEngine->WriteEntryIdsToStoreL( iBmEntryIds, KUidDictionaryUidBrowserBookmarks ) ); + } + iBmEntryIds.Reset(); + iBmEntryIds.Close(); + + if ( iEngine && iBmFEntryIds.Count() ) + { + TRAP_IGNORE( iEngine->WriteEntryIdsToStoreL( iBmFEntryIds, KUidDictionaryUidBrowserBookmarkF ) ); + } + iBmFEntryIds.Reset(); + iBmFEntryIds.Close(); + + if ( iEngine && iSpEntryIds.Count() ) + { + TRAP_IGNORE( iEngine->WriteEntryIdsToStoreL( iSpEntryIds, KUidDictionaryUidBrowserSavedPg ) ); + } + iSpEntryIds.Reset(); + iSpEntryIds.Close(); + + if ( iEngine && iSpFEntryIds.Count() ) + { + TRAP_IGNORE( iEngine->WriteEntryIdsToStoreL( iSpFEntryIds, KUidDictionaryUidBrowserSavedPgF ) ); + } + iSpFEntryIds.Reset(); + iSpFEntryIds.Close(); + + delete iParameters; + } + +//---------------------------------------------------------------------------- + +TBool CCreatorBrowser::AskDataFromUserL(TInt aCommand, TInt& aNumberOfEntries) + { + LOGSTRING("Creator: CCreatorBrowser::AskDataFromUserL"); + + TBool result( EFalse ); + switch ( aCommand ) + { + case ECmdDeleteBrowserBookmarks: + { + result = iEngine->YesNoQueryDialogL( _L("Delete all Browser bookmarks?") ); + break; + } + case ECmdDeleteCreatorBrowserBookmarks: + { + result = iEngine->YesNoQueryDialogL( _L("Delete all Browser bookmarks created with Creator?") ); + break; + } + case ECmdDeleteBrowserBookmarkFolders: + { + result = iEngine->YesNoQueryDialogL( _L("Delete all Browser bookmark folders?") ); + break; + } + case ECmdDeleteCreatorBrowserBookmarkFolders: + { + result = iEngine->YesNoQueryDialogL( _L("Delete all Browser bookmark folders created with Creator?") ); + break; + } + case ECmdDeleteBrowserSavedPages: + { + result = iEngine->YesNoQueryDialogL( _L("Delete all Browser saved pages?") ); + break; + } + case ECmdDeleteCreatorBrowserSavedPages: + { + result = iEngine->YesNoQueryDialogL( _L("Delete all Browser saved pages created with Creator?") ); + break; + } + case ECmdDeleteBrowserSavedPageFolders: + { + result = iEngine->YesNoQueryDialogL( _L("Delete all Browser saved pages folders?") ); + break; + } + case ECmdDeleteCreatorBrowserSavedPageFolders: + { + result = iEngine->YesNoQueryDialogL( _L("Delete all Browser saved pages folders created with Creator?") ); + break; + } + default: + { + result = iEngine->EntriesQueryDialogL(aNumberOfEntries, _L("How many entries to create?")); + break; + } + } + return result; + } + + +//---------------------------------------------------------------------------- + +TInt CCreatorBrowser::CreateBookmarkEntryL(CBrowserParameters *aParameters) + { + LOGSTRING("Creator: CCreatorBrowser::CreateBookmarkEntryL"); + + // clear any existing parameter definations + delete iParameters; + iParameters = NULL; + + CBrowserParameters* parameters = aParameters; + + // random data needed if no predefined data available + if( !parameters ) + { + iParameters = new(ELeave) CBrowserParameters; + parameters = iParameters; + + TFileName userAndPassword = iEngine->RandomString(CCreatorEngine::EFirstName); + TFileName name = iEngine->RandomString(CCreatorEngine::ECompany); + TFileName url = name; + url.Insert(0, _L("http://www.")); + url.Append(_L(".com/")); + name.Insert(0, KCreatorBrowserPrefixName); + + parameters->iBookmarkName->Des() = name; + parameters->iBookmarkAddress->Des() = url; + parameters->iBookmarkUsername->Des() = userAndPassword; + parameters->iBookmarkPassword->Des() = userAndPassword; + } + + TInt err = KErrNone; + + RFavouritesSession session; + User::LeaveIfError( session.Connect() ); + CleanupClosePushL(session); + RFavouritesDb db; + User::LeaveIfError( db.Open(session, KBrowserBookmarks) ); + CleanupClosePushL(db); + + CFavouritesItem* item = CFavouritesItem::NewLC(); + item->SetType( CFavouritesItem::EItem ); + item->SetParentFolder( KFavouritesRootUid ) ; + item->SetNameL( parameters->iBookmarkName->Des() ); + item->SetUrlL( parameters->iBookmarkAddress->Des() ); + item->SetUserNameL( parameters->iBookmarkUsername->Des() ); + item->SetPasswordL( parameters->iBookmarkPassword->Des() ); + err = db.Add(*item, /*aAutoRename=*/ETrue); + if (err) + db.Commit(); + + // id has been generated, store it for being able to delete + // only entries created with Creator + iBmEntryIds.Append( item->Uid() ); + + CleanupStack::PopAndDestroy(3); //db, session, item + + return err; + } + +//---------------------------------------------------------------------------- + +TInt CCreatorBrowser::CreateBookmarkFolderEntryL(CBrowserParameters *aParameters) + { + LOGSTRING("Creator: CCreatorBrowser::CreateBookmarkFolderEntryL"); + + // clear any existing parameter definations + delete iParameters; + iParameters = NULL; + + CBrowserParameters* parameters = aParameters; + + // random data needed if no predefined data available + if (!parameters) + { + iParameters = new(ELeave) CBrowserParameters; + parameters = iParameters; + + TFileName name = iEngine->RandomString(CCreatorEngine::ECompany); + name.Insert(0, KCreatorBrowserPrefixFolderName); + + parameters->iBookmarkFolderName->Des() = name; + } + + TInt err = KErrNone; + + RFavouritesSession session; + User::LeaveIfError( session.Connect() ); + CleanupClosePushL(session); + RFavouritesDb db; + User::LeaveIfError( db.Open(session, KBrowserBookmarks) ); + CleanupClosePushL(db); + + CFavouritesItem* item = CFavouritesItem::NewLC(); + item->SetType( CFavouritesItem::EFolder ); + item->SetParentFolder( KFavouritesRootUid ) ; + item->SetNameL( parameters->iBookmarkFolderName->Des() ); + + err = db.Add(*item, /*aAutoRename=*/ETrue); + if (err) + db.Commit(); + + // id has been generated, store it for being able to delete + // only entries created with Creator + iBmFEntryIds.Append( item->Uid() ); + + CleanupStack::PopAndDestroy(3); //db, session, item + + + return err; + + } + +//---------------------------------------------------------------------------- + +TInt CCreatorBrowser::CreateSavedDeckEntryL(CBrowserParameters *aParameters) + { + LOGSTRING("Creator: CCreatorBrowser::CreateSavedDeckEntryL"); + + // clear any existing parameter definations + delete iParameters; + iParameters = NULL; + + CBrowserParameters* parameters = aParameters; + + // random data needed if no predefined data available + if (!parameters) + { + iParameters = new(ELeave) CBrowserParameters; + parameters = iParameters; + + TFileName name = iEngine->RandomString(CCreatorEngine::ECompany); + name.Insert(0, KCreatorBrowserPrefixName); + + parameters->iSavedDeckLinkName->Des() = name; + parameters->iSavedDeckLocalAddress->Des() = iEngine->TestDataPathL(CCreatorEngine::ESavedDeck_1kB); + } + + TInt err = KErrNone; + + // check the deck address is correct + if ( parameters->iSavedDeckLocalAddress->Des().Length() == 0 || + !BaflUtils::FileExists( CEikonEnv::Static()->FsSession(), parameters->iSavedDeckLocalAddress->Des() )) + { + // not found, use a default deck instead + delete parameters->iSavedDeckLocalAddress; + parameters->iSavedDeckLocalAddress = 0; + TPtrC tmp = iEngine->TestDataPathL(CCreatorEngine::ESavedDeck_1kB); + parameters->iSavedDeckLocalAddress = HBufC::NewL(tmp.Length()); + parameters->iSavedDeckLocalAddress->Des() = tmp; + } + + + RFavouritesSession session; + User::LeaveIfError( session.Connect() ); + CleanupClosePushL(session); + RFavouritesDb db; + User::LeaveIfError( db.Open(session, KBrowserSavedPages) ); + CleanupClosePushL(db); + + CFavouritesItem* item = CFavouritesItem::NewLC(); + item->SetType( CFavouritesItem::EItem ); + item->SetParentFolder( KFavouritesRootUid ) ; + item->SetNameL( parameters->iSavedDeckLinkName->Des() ); + item->SetUrlL( _L(" ") ); + + TFavouritesWapAp favouritesAp; + favouritesAp.SetDefault(); + item->SetWapAp( favouritesAp ); + + + err = db.Add(*item, /*aAutoRename=*/ETrue); + if (err) + db.Commit(); + + // read the source deck to buffer + RFile sourceFile; + User::LeaveIfError( sourceFile.Open(CEikonEnv::Static()->FsSession(), parameters->iSavedDeckLocalAddress->Des(), EFileRead) ); + CleanupClosePushL(sourceFile); + TInt sourceFileSize(0); + err = sourceFile.Size(sourceFileSize); + HBufC8* sourceBuf = HBufC8::NewLC(sourceFileSize); + TPtr8 sourcePtr = sourceBuf->Des(); + sourceFile.Read(sourcePtr); + + // write the deck + RFavouritesFile destinationFile; + User::LeaveIfError( destinationFile.Replace(db, item->Uid() )); + CleanupClosePushL(destinationFile); + err = destinationFile.Write(sourceBuf->Des()); + + // id has been generated, store it for being able to delete + // only entries created with Creator + iSpEntryIds.Append( item->Uid() ); + + + CleanupStack::PopAndDestroy(6); //db, session, item, sourceFile, destinationFile, sourceBuf + + return err; + } + +//---------------------------------------------------------------------------- + +TInt CCreatorBrowser::CreateSavedDeckFolderEntryL(CBrowserParameters *aParameters) + { + LOGSTRING("Creator: CCreatorBrowser::CreateSavedDeckFolderEntryL"); + + // clear any existing parameter definations + delete iParameters; + iParameters = NULL; + + CBrowserParameters* parameters = aParameters; + // random data needed if no predefined data available + if (!parameters) + { + iParameters = new(ELeave) CBrowserParameters; + parameters = iParameters; + + TFileName name = iEngine->RandomString(CCreatorEngine::ECompany); + name.Insert(0, KCreatorBrowserPrefixFolderName); + + parameters->iSavedDeckFolderName->Des() = name; + } + + TInt err = KErrNone; + + RFavouritesSession session; + User::LeaveIfError( session.Connect() ); + CleanupClosePushL(session); + RFavouritesDb db; + User::LeaveIfError( db.Open(session, KBrowserSavedPages) ); + CleanupClosePushL(db); + + CFavouritesItem* item = CFavouritesItem::NewLC(); + item->SetType( CFavouritesItem::EFolder ); + item->SetParentFolder( KFavouritesRootUid ) ; + item->SetNameL( parameters->iSavedDeckFolderName->Des() ); + + err = db.Add(*item, /*aAutoRename=*/ETrue); + if (err) + db.Commit(); + + // id has been generated, store it for being able to delete + // only entries created with Creator + iSpFEntryIds.Append( item->Uid() ); + + CleanupStack::PopAndDestroy(3); //db, session, item + + return err; + + } + + +//---------------------------------------------------------------------------- +void CCreatorBrowser::DeleteAllL() + { + LOGSTRING("Creator: CCreatorBrowser::DeleteAllL"); + User::Leave( KErrNotSupported ); + // will not be supported, see separate implementations below + } + +//---------------------------------------------------------------------------- +void CCreatorBrowser::DeleteAllCreatedByCreatorL() + { + LOGSTRING("Creator: CCreatorBrowser::DeleteAllCreatedByCreatorL"); + User::Leave( KErrNotSupported ); + // will not be supported, see separate implementations below + } + +//---------------------------------------------------------------------------- +void CCreatorBrowser::DeleteAllBookmarksL() + { + LOGSTRING("Creator: CCreatorBrowser::DeleteAllBookmarksL"); + DeleteAllItemsL( KBrowserBookmarks, + CFavouritesItem::EItem, + EFalse, + iBmEntryIds, // ignored, because deleting all + KUidDictionaryUidBrowserBookmarks ); + } + +//---------------------------------------------------------------------------- +void CCreatorBrowser::DeleteAllBookmarksCreatedByCreatorL() + { + LOGSTRING("Creator: CCreatorBrowser::DeleteAllBookmarksCreatedByCreatorL"); + DeleteAllItemsL( KBrowserBookmarks, + CFavouritesItem::EItem, + ETrue, + iBmEntryIds, + KUidDictionaryUidBrowserBookmarks ); + } + +//---------------------------------------------------------------------------- +void CCreatorBrowser::DeleteAllBookmarkFoldersL() + { + LOGSTRING("Creator: CCreatorBrowser::DeleteAllBookmarkFoldersL"); + DeleteAllItemsL( KBrowserBookmarks, + CFavouritesItem::EFolder, + EFalse, + iBmFEntryIds, // ignored, because deleting all + KUidDictionaryUidBrowserBookmarkF ); + } + +//---------------------------------------------------------------------------- +void CCreatorBrowser::DeleteAllBookmarkFoldersCreatedByCreatorL() + { + LOGSTRING("Creator: CCreatorBrowser::DeleteAllBookmarkFoldersCreatedByCreatorL"); + DeleteAllItemsL( KBrowserBookmarks, + CFavouritesItem::EFolder, + ETrue, + iBmFEntryIds, + KUidDictionaryUidBrowserBookmarkF ); + } + +//---------------------------------------------------------------------------- +void CCreatorBrowser::DeleteAllSavedPagesL() + { + LOGSTRING("Creator: CCreatorBrowser::DeleteAllSavedPagesL"); + DeleteAllItemsL( KBrowserSavedPages, + CFavouritesItem::EItem, + EFalse, + iSpEntryIds, // ignored, because deleting all + KUidDictionaryUidBrowserSavedPg ); + } + +//---------------------------------------------------------------------------- +void CCreatorBrowser::DeleteAllSavedPagesCreatedByCreatorL() + { + LOGSTRING("Creator: CCreatorBrowser::DeleteAllSavedPagesCreatedByCreatorL"); + DeleteAllItemsL( KBrowserSavedPages, + CFavouritesItem::EItem, + ETrue, + iSpEntryIds, + KUidDictionaryUidBrowserSavedPg ); + } + +//---------------------------------------------------------------------------- +void CCreatorBrowser::DeleteAllSavedPageFoldersL() + { + LOGSTRING("Creator: CCreatorBrowser::DeleteAllSavedPageFoldersL"); + DeleteAllItemsL( KBrowserSavedPages, + CFavouritesItem::EFolder, + EFalse, + iSpFEntryIds, // ignored, because deleting all + KUidDictionaryUidBrowserSavedPgF ); + } + +//---------------------------------------------------------------------------- +void CCreatorBrowser::DeleteAllSavedPageFoldersCreatedByCreatorL() + { + LOGSTRING("Creator: CCreatorBrowser::DeleteAllSavedPageFolderssCreatedByCreatorL"); + DeleteAllItemsL( KBrowserSavedPages, + CFavouritesItem::EFolder, + ETrue, + iSpFEntryIds, + KUidDictionaryUidBrowserSavedPgF ); + } + +//---------------------------------------------------------------------------- +void CCreatorBrowser::DeleteAllItemsL( const TDesC& aDbName, + CFavouritesItem::TType aTypeFilter, + TBool aOnlyCreatedWithCreator, + RArray& aEntryIds, + const TUid aDictUid ) + { + LOGSTRING("Creator: CCreatorBrowser::DeleteItemL"); + RFavouritesSession session; + User::LeaveIfError( session.Connect() ); + CleanupClosePushL( session ); + RFavouritesDb db; + User::LeaveIfError( db.Open( session, aDbName ) ); + CleanupClosePushL( db ); + + if ( aOnlyCreatedWithCreator ) + { + // read uids from Creator internal store + aEntryIds.Reset(); + iEngine->ReadEntryIdsFromStoreL( aEntryIds, aDictUid ); + + // delete entries from db + for ( TInt i = 0; i < aEntryIds.Count(); i++ ) + { + db.Delete( aEntryIds[i] ); + } + } + else + { + CArrayFixFlat* uids = new (ELeave) CArrayFixFlat(64); + CleanupStack::PushL( uids ); + + // read uids from browser db + User::LeaveIfError( db.GetUids( *uids, KFavouritesRootUid, aTypeFilter ) ); + + // delete entries from db + for ( TInt i = 0; i < uids->Count(); i++ ) + { + db.Delete( uids->At(i) ); + } + + // db.Commit() seems to panic with EFavouritesNoTransaction + // deletion is successful even without commit, so not calling it + CleanupStack::PopAndDestroy( uids ); + } + + // entries deleted, remove the Browser related registry + aEntryIds.Reset(); + iEngine->RemoveStoreL( aDictUid ); + + CleanupStack::PopAndDestroy( &db ); + CleanupStack::PopAndDestroy( &session ); + }