--- /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 <favouriteswapap.h>
+
+
+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<RFavouritesSession>(session);
+ RFavouritesDb db;
+ User::LeaveIfError( db.Open(session, KBrowserBookmarks) );
+ CleanupClosePushL<RFavouritesDb>(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<RFavouritesSession>(session);
+ RFavouritesDb db;
+ User::LeaveIfError( db.Open(session, KBrowserBookmarks) );
+ CleanupClosePushL<RFavouritesDb>(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<RFavouritesSession>(session);
+ RFavouritesDb db;
+ User::LeaveIfError( db.Open(session, KBrowserSavedPages) );
+ CleanupClosePushL<RFavouritesDb>(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<RFile>(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<RFavouritesFile>(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<RFavouritesSession>(session);
+ RFavouritesDb db;
+ User::LeaveIfError( db.Open(session, KBrowserSavedPages) );
+ CleanupClosePushL<RFavouritesDb>(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<TInt>& 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<TInt>* uids = new (ELeave) CArrayFixFlat<TInt>(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 );
+ }