--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/idlefw/plugins/devicestatus/src/aicontentobserveroptimizer.cpp Wed Sep 01 12:22:09 2010 +0100
@@ -0,0 +1,241 @@
+/*
+* Copyright (c) 2006 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: Active Idle Content Observer optimizer
+*
+*/
+
+
+#include "aicontentobserveroptimizer.h"
+
+CAiContentObserverOptimizer* CAiContentObserverOptimizer::NewL(MAiContentObserver& aObserver)
+ {
+ return new(ELeave) CAiContentObserverOptimizer( aObserver );
+ }
+
+CAiContentObserverOptimizer::~CAiContentObserverOptimizer()
+ {
+ iBlackList.Close();
+ }
+
+TInt CAiContentObserverOptimizer::StartTransaction( TInt aTxId )
+ {
+ TInt err = KErrAlreadyExists;
+ if ( iTransactionStarted )
+ {
+ return err;
+ }
+ iCommitNeeded = EFalse;
+
+ err = iObserver.StartTransaction( aTxId );
+ if ( err == KErrNone )
+ {
+ iTransactionStarted = ETrue;
+ }
+ return err;
+ }
+
+
+TInt CAiContentObserverOptimizer::Commit( TInt aTxId )
+ {
+ TInt err = KErrNotReady;
+ if ( iTransactionStarted )
+ {
+ if ( iCommitNeeded )
+ {
+ iCommitNeeded = EFalse;
+ err = iObserver.Commit( aTxId );
+ }
+ else
+ {
+ err = CancelTransaction( aTxId );
+ }
+ }
+ iTransactionStarted = EFalse;
+ return err;
+ }
+
+
+TInt CAiContentObserverOptimizer::CancelTransaction( TInt aTxId )
+ {
+ TInt err = KErrNotReady;
+ if ( iTransactionStarted )
+ {
+ err = iObserver.CancelTransaction( aTxId );
+ }
+ iTransactionStarted = EFalse;
+ return err;
+ }
+
+
+TBool CAiContentObserverOptimizer::CanPublish( CHsContentPublisher& aPlugin,
+ TInt aContent,
+ TInt aIndex )
+ {
+ return iObserver.CanPublish( aPlugin, aContent, aIndex );
+ }
+
+TInt CAiContentObserverOptimizer::Publish( CHsContentPublisher& aPlugin,
+ TInt aContent,
+ TInt aResource,
+ TInt aIndex )
+ {
+ if ( IsInBlackList( aContent, aIndex ) )
+ {
+ return KErrNotFound;
+ }
+ TInt err = iObserver.Publish( aPlugin, aContent, aResource, aIndex );
+ // Publish went through OK, we need to commit the transaction
+ if ( err == KErrNone && iTransactionStarted )
+ {
+ iCommitNeeded = ETrue;
+ }
+ // publish failed because the ui declaration doesn't
+ // include this content => add to black list and
+ // don't try to publish again
+ else if ( err == KErrNotFound || err == KErrNotSupported )
+ {
+ AddToBlackList( aContent, aIndex );
+ }
+ return err;
+ }
+
+
+TInt CAiContentObserverOptimizer::Publish( CHsContentPublisher& aPlugin,
+ TInt aContent,
+ const TDesC16& aText,
+ TInt aIndex )
+ {
+ if ( IsInBlackList( aContent, aIndex ) )
+ {
+ return KErrNotFound;
+ }
+ TInt err = iObserver.Publish( aPlugin, aContent, aText, aIndex );
+ // Publish went through OK, we need to commit the transaction
+ if ( err == KErrNone && iTransactionStarted )
+ {
+ iCommitNeeded = ETrue;
+ }
+ // publish failed because the ui declaration doesn't
+ // include this content => add to black list and
+ // don't try to publish again
+ else if ( err == KErrNotFound || err == KErrNotSupported )
+ {
+ AddToBlackList( aContent, aIndex );
+ }
+ return err;
+ }
+
+
+TInt CAiContentObserverOptimizer::Publish( CHsContentPublisher& aPlugin,
+ TInt aContent,
+ const TDesC8& aBuf,
+ TInt aIndex )
+ {
+ if ( IsInBlackList( aContent, aIndex ) )
+ {
+ return KErrNotFound;
+ }
+ TInt err = iObserver.Publish( aPlugin, aContent, aBuf, aIndex );
+ // Publish went through OK, we need to commit the transaction
+ if ( err == KErrNone && iTransactionStarted )
+ {
+ iCommitNeeded = ETrue;
+ }
+ // publish failed because the ui declaration doesn't
+ // include this content => add to black list and
+ // don't try to publish again
+ else if ( err == KErrNotFound || err == KErrNotSupported )
+ {
+ AddToBlackList( aContent, aIndex );
+ }
+ return err;
+
+ }
+
+
+TInt CAiContentObserverOptimizer::Publish( CHsContentPublisher& aPlugin,
+ TInt aContent,
+ RFile& aFile,
+ TInt aIndex )
+ {
+ if ( IsInBlackList( aContent, aIndex ) )
+ {
+ return KErrNotFound;
+ }
+ TInt err = iObserver.Publish( aPlugin, aContent, aFile, aIndex );
+ // Publish went through OK, we need to commit the transaction
+ if ( err == KErrNone && iTransactionStarted )
+ {
+ iCommitNeeded = ETrue;
+ }
+ // publish failed because the ui declaration doesn't
+ // include this content => add to black list and
+ // don't try to publish again
+ else if ( err == KErrNotFound || err == KErrNotSupported )
+ {
+ AddToBlackList( aContent, aIndex );
+ }
+ return err;
+ }
+
+
+TInt CAiContentObserverOptimizer::Clean( CHsContentPublisher& aPlugin,
+ TInt aContent,
+ TInt aIndex )
+ {
+ return iObserver.Clean( aPlugin, aContent, aIndex );
+ }
+
+MAiContentObserver& CAiContentObserverOptimizer::Observer() const
+ {
+ return iObserver;
+ }
+
+TInt CAiContentObserverOptimizer::AddToBlackList( TInt aContentId, TInt aIndex )
+ {
+ TInt err = KErrNone;
+ if ( !IsInBlackList( aContentId, aIndex ) )
+ {
+ TAiPublishBlackList entry;
+ entry.iContentId = aContentId;
+ entry.iIndex = aIndex;
+ err = iBlackList.Append( entry );
+ }
+ return err;
+ }
+
+TBool CAiContentObserverOptimizer::IsInBlackList( TInt aContentId, TInt aIndex ) const
+ {
+ for (TInt i = 0; i < iBlackList.Count(); ++i )
+ {
+ if ( iBlackList[i].iContentId == aContentId &&
+ iBlackList[i].iIndex == aIndex )
+ {
+ return ETrue;
+ }
+ }
+ return EFalse;
+ }
+
+void CAiContentObserverOptimizer::ClearBlackList()
+ {
+ iBlackList.Reset();
+ }
+
+CAiContentObserverOptimizer::CAiContentObserverOptimizer(MAiContentObserver& aObserver):
+ iObserver( aObserver )
+ {
+ }
+
+// end of file