diff -r 000000000000 -r dd21522fd290 browserutilities/favouritesengine/ClientServer/src/ActiveFavouritesDbNotifier.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browserutilities/favouritesengine/ClientServer/src/ActiveFavouritesDbNotifier.cpp Mon Mar 30 12:54:55 2009 +0300 @@ -0,0 +1,116 @@ +/* +* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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: +* Implementation of CActiveFavouritesDbNotifier. +* +* +*/ + + +// INCLUDE FILES + +#include "ActiveFavouritesDbNotifier.h" +#include "FavouritesDbObserver.h" + +// ================= MEMBER FUNCTIONS ======================= + +// --------------------------------------------------------- +// CActiveFavouritesDbNotifier::CActiveFavouritesDbNotifier +// --------------------------------------------------------- +// +EXPORT_C CActiveFavouritesDbNotifier::CActiveFavouritesDbNotifier +( RFavouritesDb& aDb, MFavouritesDbObserver& aObserver ) +: CActive( EPriorityStandard ), iDb( aDb ), iObserver( &aObserver ) + { + CActiveScheduler::Add( this ); + } + +// --------------------------------------------------------- +// CActiveFavouritesDbNotifier::~CActiveFavouritesDbNotifier +// --------------------------------------------------------- +// +EXPORT_C CActiveFavouritesDbNotifier::~CActiveFavouritesDbNotifier() + { + iNotifier.Close(); + Cancel(); + } + +// --------------------------------------------------------- +// CActiveFavouritesDbNotifier::RunL +// --------------------------------------------------------- +// +EXPORT_C void CActiveFavouritesDbNotifier::RunL() + { + if ( iStatus == KErrCancel ) + { + // Cancelled, do nothing. + } + else + { + // Otherwise, the event must be one of RDbNotifier::TEvent. + RDbNotifier::TEvent event = + STATIC_CAST( RDbNotifier::TEvent, iStatus.Int() ); + if ( iStatus == RDbNotifier::EClose ) + { + // Finish if the database is closed. + iNotifier.Close(); + } + else + { + // Reschedule automatically (as long as the database is open). + NotifyChange(); + } + // Call observer *after* the notifier is rescheduled: this way + // the notifier stays alive even if observer leaves. + iObserver->HandleFavouritesDbEventL( event ); + } + } + +// --------------------------------------------------------- +// CActiveFavouritesDbNotifier::DoCancel +// --------------------------------------------------------- +// +EXPORT_C void CActiveFavouritesDbNotifier::DoCancel() + { + iNotifier.Close(); + } + +// --------------------------------------------------------- +// CActiveFavouritesDbNotifier::Start +// --------------------------------------------------------- +// +EXPORT_C TInt CActiveFavouritesDbNotifier::Start() + { + TInt err = iNotifier.Open( iDb ); + if ( !err ) + { + NotifyChange(); + } + return err; + } + +// --------------------------------------------------------- +// CActiveFavouritesDbNotifier::NotifyChange +// --------------------------------------------------------- +// +void CActiveFavouritesDbNotifier::NotifyChange() + { + if ( !IsActive() ) + { + iNotifier.NotifyChange( iStatus ); + SetActive(); + } + } + +// End of File