idlefw/plugins/mcsplugin/publisher/src/mcspluginengine.cpp
branchRCL_3
changeset 9 d0529222e3f0
parent 1 844b978f8d5e
child 18 bd874ee5e5e2
--- a/idlefw/plugins/mcsplugin/publisher/src/mcspluginengine.cpp	Tue Feb 02 00:23:10 2010 +0200
+++ b/idlefw/plugins/mcsplugin/publisher/src/mcspluginengine.cpp	Fri Feb 19 23:07:29 2010 +0200
@@ -16,37 +16,36 @@
 */
 
 
-// INCLUDE FILES
-#include "mcspluginengine.h"
-
+// System includes
 #include <gulicon.h>
 #include <AknsItemID.h>
 #include <gslauncher.h>
-#include <aisystemuids.hrh>
-
 #include <mcsmenuitem.h>
 #include <mcsmenufilter.h>
 #include <mcsmenuoperation.h>
 #include <mcsmenuiconutility.h>
 #include <activefavouritesdbnotifier.h>
 #include <favouritesitemlist.h>
-
 #include <bautils.h>
 #include <StringLoader.h>
 #include <aknnotedialog.h>
+#include <AknsConstants.h>
 #include <avkon.rsg>
 #include <mcspluginres.rsg>
+#include <apgtask.h>
+#include <apgcli.h> 
+#include <apacmdln.h>
+#include <gfxtranseffect/gfxtranseffect.h>      
+#include <akntranseffect.h>
+
+// User includes
+#include <aisystemuids.hrh>
+#include "mcspluginengine.h"
 #include "mcsplugin.h"
 #include "mcsplugindata.h"
 #include "mcspluginuids.hrh"
 
-#include <apgtask.h>
-#include <apgcli.h> 
-#include <apacmdln.h>
-#include <gfxtranseffect/gfxtranseffect.h>      // For Transition effect
-#include <akntranseffect.h>
-
-#include <AknsConstants.h>
+// Constants
 _LIT( KMyMenuData, "matrixmenudata" );
 _LIT( KSkin,         "skin" );
 _LIT( KMif,          "mif" );
@@ -65,37 +64,47 @@
 const TUid KMMUid = { 0x101F4CD2 };
 
 // ======== LOCAL FUNCTIONS ========
-
+// ----------------------------------------------------------------------------
+// NextIdToken
+//
+// ----------------------------------------------------------------------------
+//
 static TPtrC NextIdToken( TLex& aLexer )
    {
    aLexer.SkipSpace();
    aLexer.Mark();
+  
    while( !aLexer.Eos() && !aLexer.Peek().IsSpace() && aLexer.Peek() != ')' )
        {
        aLexer.Inc();
        }
+   
    return aLexer.MarkedToken();
    }
 
 // ============================ MEMBER FUNCTIONS ===============================
-// ---------------------------------------------------------
-// Default constructor
-// ---------------------------------------------------------
+// ----------------------------------------------------------------------------
+// CMCSPluginEngine::CMCSPluginEngine
 //
-CMCSPluginEngine::CMCSPluginEngine( CMCSPlugin& aPlugin, const TDesC8& aInstanceUid ) 
-    : iPlugin( aPlugin ), iInstanceUid( aInstanceUid ),
-      iSuspend( EFalse )
+// ----------------------------------------------------------------------------
+//
+CMCSPluginEngine::CMCSPluginEngine( CMCSPlugin& aPlugin, 
+    const TDesC8& aInstanceUid ) 
+    : iPlugin( aPlugin ), iInstanceUid( aInstanceUid )    
     {
     }
     
-// ---------------------------------------------------------
-// Two-phased constructor.
-// Create instance of concrete ECOM interface implementation
-// ---------------------------------------------------------
+// ----------------------------------------------------------------------------
+// CMCSPluginEngine::NewL
+// 
+// ----------------------------------------------------------------------------
 //
-CMCSPluginEngine* CMCSPluginEngine::NewL( CMCSPlugin& aPlugin, const TDesC8& aInstanceUid )
+CMCSPluginEngine* CMCSPluginEngine::NewL( CMCSPlugin& aPlugin, 
+    const TDesC8& aInstanceUid )
     {
-    CMCSPluginEngine* self = new( ELeave ) CMCSPluginEngine( aPlugin, aInstanceUid );
+    CMCSPluginEngine* self = 
+        new( ELeave ) CMCSPluginEngine( aPlugin, aInstanceUid );
+    
     CleanupStack::PushL( self );
     self->ConstructL();
     CleanupStack::Pop( self );
@@ -103,9 +112,10 @@
     return self;
     }
 
-// ---------------------------------------------------------
-// Symbian 2nd phase constructor can leave
-// ---------------------------------------------------------
+// ----------------------------------------------------------------------------
+// CMCSPluginEngine::ConstructL
+//
+// ----------------------------------------------------------------------------
 //
 void CMCSPluginEngine::ConstructL()
     {
@@ -119,12 +129,21 @@
         CCoeEnv::Static()->AddResourceFileL( resourceFile );
     InitL();
     StartObservingL();
+    
+    // Get "Undefined" item
+    CMenuFilter* filter = CMenuFilter::NewL();
+    CleanupStack::PushL( filter );
+    filter->HaveAttributeL( KMenuAttrUid, KMenuAttrUndefUid );
+    iUndefinedItemHeader = FindMenuItemL( *filter );
+    CleanupStack::PopAndDestroy( filter );
+    filter = NULL;
+    iUndefinedItem = CMenuItem::OpenL( iMenu, iUndefinedItemHeader );    
     }
     
-
-// ---------------------------------------------------------
-// Destructor.
-// ---------------------------------------------------------
+// ----------------------------------------------------------------------------
+// CMCSPluginEngine::~CMCSPluginEngine
+//
+// ----------------------------------------------------------------------------
 //
 CMCSPluginEngine::~CMCSPluginEngine()
     {
@@ -136,12 +155,19 @@
     //iWatcher->Cancel();
     delete iWatcher;
     delete iNotifyWatcher;
+
     CCoeEnv::Static()->DeleteResourceFile( iResourceOffset );
+        
+    if ( iUndefinedItem )
+        {
+        delete iUndefinedItem;
+        iUndefinedItem = NULL;
+        }    
     }
 
-
 // ---------------------------------------------------------------------------
-// 
+// CMCSPluginEngine::InitL
+//
 // ---------------------------------------------------------------------------
 //
 void CMCSPluginEngine::InitL()
@@ -149,60 +175,48 @@
     iMenu.OpenL( KMyMenuData );
     iPluginData = CMCSPluginData::NewL( *this, iInstanceUid );
     iWatcher = CMCSPluginWatcher::NewL( CMCSPluginWatcher::EOperation );
-    TInt err = iNotifier.Open( iMenu ); 
+    
+    TInt err( iNotifier.Open( iMenu ) ); 
+    
     if ( err == KErrNone )
         {
         iNotifyWatcher = CMCSPluginWatcher::NewL( CMCSPluginWatcher::ENotify );
+        
         iNotifier.Notify( 0,
             RMenuNotifier::EItemsAddedRemoved |
             RMenuNotifier::EItemsReordered |
             RMenuNotifier::EItemAttributeChanged,
             iNotifyWatcher->iStatus );
+        
         iNotifyWatcher->WatchNotify( this );
         }
     }
 
 // ---------------------------------------------------------------------------
-// Tells the settings container to start observing for changes
+// CMCSPluginEngine::StartObservingL
+//
 // ---------------------------------------------------------------------------
 //
 void CMCSPluginEngine::StartObservingL()
     {
-    // registering to bookmarks db. changes observing
-    User::LeaveIfError( iBookmarkSession.Connect() );
-    User::LeaveIfError( iBookmarkDb.Open( iBookmarkSession, KBrowserBookmarks ) );
-
-    iBookmarkDbObserver = new (ELeave) CActiveFavouritesDbNotifier(
-                                        iBookmarkDb, *this );
-    iBookmarkDbObserver->Start();
-
     // registering to mailbox db. changes observing
-    iMsvSession = CMsvSession::OpenAsObserverL( *this) ;
+    iMsvSession = CMsvSession::OpenAsObserverL( *this );
     }
 
 // ---------------------------------------------------------------------------
-// Tells the settings container to stop observing for changes
+// CMCSPluginEngine::StopObserving
+//
 // ---------------------------------------------------------------------------
 //
 void CMCSPluginEngine::StopObserving()
-    {
-    if ( iBookmarkDbObserver )
-        {
-        delete iBookmarkDbObserver;
-        iBookmarkDbObserver = NULL;
-        }
-    iBookmarkDb.Close();
-    iBookmarkSession.Close();
-
-    if ( iMsvSession )
-        {
-        delete iMsvSession;
-        iMsvSession = NULL;
-        }
+    {       
+    delete iMsvSession;
+    iMsvSession = NULL;    
     }
 
 // ---------------------------------------------------------------------------
-// 
+// CMCSPluginEngine::MenuDataL
+//
 // ---------------------------------------------------------------------------
 //
 TMCSData& CMCSPluginEngine::MenuDataL( const TInt& aIndex )
@@ -211,7 +225,8 @@
     }
 
 // ---------------------------------------------------------------------------
-// 
+// CMCSPluginEngine::MenuItemCount
+//
 // ---------------------------------------------------------------------------
 //
 TInt CMCSPluginEngine::MenuItemCount()
@@ -220,27 +235,32 @@
     }
 
 // ---------------------------------------------------------------------------
+// CMCSPluginEngine::FindMenuItemL
 // Returns the menu item header, which matches the given filter.
 // ---------------------------------------------------------------------------
 //
 TMenuItem CMCSPluginEngine::FindMenuItemL( CMenuFilter& aFilter )
     {    
     TMenuItem item;
-    const TInt root = iMenu.RootFolderL();
+    const TInt root( iMenu.RootFolderL() );
+    
     RArray<TMenuItem> items;
     CleanupClosePushL( items );
+    
     iMenu.GetItemsL( items, root, &aFilter, ETrue );
-    if( items.Count() > 0 )
+    
+    if ( items.Count() > 0 )
         {
-
         item = items[0];
         }
 
     CleanupStack::PopAndDestroy( &items );
+    
     return item;
     }
 
 // ---------------------------------------------------------------------------
+// CMCSPluginEngine::FetchMenuItemL
 // Returns the actual menu item for the given header.
 // ---------------------------------------------------------------------------
 //
@@ -250,66 +270,123 @@
     }
 
 // ---------------------------------------------------------------------------
+// CMCSPluginEngine::ItemIconL
 // Returns MCS default icon if attribute is 'icon' else parses the
 // skin definition from attribute and sets attributes to aMenuItem.
 // ---------------------------------------------------------------------------
 //
-CGulIcon* CMCSPluginEngine::ItemIconL( CMenuItem& aMenuItem, const TDesC& aAttr )
+CGulIcon* CMCSPluginEngine::ItemIconL( CMenuItem& aMenuItem, 
+    const TDesC& aAttr )
     {
+    CMenuItem* menuItem;
+
+    TInt id = aMenuItem.Id();
+
+    // because the flags might have changed, we have
+    // to get a fresh copy of menu item from Menu Server
+    CMenuItem* mi = CMenuItem::OpenL( iMenu, id );
+    TUint32 flags = mi->Flags();
+    delete mi;
+
+    TUint32 isHidden = flags & TMenuItem::EHidden;
+    TUint32 isMissing = flags & TMenuItem::EMissing;
+
+    if ( iUndefinedItem && ( isHidden || isMissing ) )
+        {
+        menuItem = iUndefinedItem;
+        }
+    else
+        {
+        menuItem = &aMenuItem;
+        }
+
     CAknIcon* icon( NULL );
     CGulIcon* gIcon( NULL );
     TBool exists( ETrue );
-    if( aAttr != KIcon )
+    
+    if ( aAttr != KIcon )
         {
         // Resolve secondary icon definition from attribute
-        TPtrC iconDef = aMenuItem.GetAttributeL( aAttr, exists );
-        if( exists )
+        TPtrC iconDef( menuItem->GetAttributeL( aAttr, exists ) );
+    
+        if ( exists )
             {
-            exists = ConstructMenuItemForIconL( iconDef, aMenuItem );
+            exists = ConstructMenuItemForIconL( iconDef, *menuItem );
             }
         }
-    if( exists )
+    
+    if ( exists )
         {
-        icon = MenuIconUtility::GetItemIconL( aMenuItem );
-        if( icon )
+        icon = MenuIconUtility::GetItemIconL( *menuItem );
+    
+        if ( icon )
             {
             CleanupStack::PushL( icon );
-            gIcon = CGulIcon::NewL(icon->Bitmap(), icon->Mask());
+            
+            gIcon = CGulIcon::NewL( icon->Bitmap(), icon->Mask() );
+            
             // Detach and delete
             icon->SetBitmap( NULL );
             icon->SetMask( NULL );    
+            
             CleanupStack::PopAndDestroy( icon );
             }
         }
+    
     return gIcon;
     }
 
 // ---------------------------------------------------------------------------
+// CMCSPluginEngine::ItemTextL
 // Returns text string for the given attribute
 // ---------------------------------------------------------------------------
 //
-TPtrC CMCSPluginEngine::ItemTextL( CMenuItem& aMenuItem, const TDesC& aAttr  )
+TPtrC CMCSPluginEngine::ItemTextL( CMenuItem& aMenuItem, const TDesC& aAttr )
     {    
+    // if item is hidden or missing (mmc card removed)
+    // use "Undefined" text instead
+    CMenuItem* menuItem;
+
+    TInt id = aMenuItem.Id();
+
+    // because the flags might have changed, we have
+    // to get a fresh copy of the menu item from Menu Server
+    CMenuItem* mi = CMenuItem::OpenL( iMenu, id );
+    TUint32 flags = mi->Flags();
+    delete mi;
+
+    TUint32 isHidden = flags & TMenuItem::EHidden;
+    TUint32 isMissing = flags & TMenuItem::EMissing;
+
+    if ( iUndefinedItem && ( isHidden || isMissing ) )
+        {
+        menuItem = iUndefinedItem;
+        }
+    else
+        {
+        menuItem = &aMenuItem;
+        }
+        
     TBool exists( KErrNotFound );
-    TPtrC name = aMenuItem.GetAttributeL( aAttr, exists );
-    if( exists )
+    
+    TPtrC name( menuItem->GetAttributeL( aAttr, exists ) );
+    
+    if ( exists )
         {
         return name;
         }
-    else
-        {
-        return KNullDesC();
-        }
+
+    return KNullDesC();
     }
 
 // ---------------------------------------------------------------------------
+// CMCSPluginEngine::LaunchItemL
 // Calls the open command for the given menu item header
 // ---------------------------------------------------------------------------
 //
 void CMCSPluginEngine::LaunchItemL( const TInt& aIndex )
     {
-
-    if ( iSuspend )
+    if ( iBackupRestore )
         {
         HBufC* temp = StringLoader::LoadLC( R_MCS_DISABLE_OPEN_ITEM );
 
@@ -318,36 +395,71 @@
             CAknNoteDialog::ENoTimeout );
         dialog->SetTextL( temp->Des() );
         dialog->ExecuteDlgLD( R_MCS_DISABLE_OPEN_ITEM_DLG );
-        CleanupStack::PopAndDestroy( temp );
+        
+        CleanupStack::PopAndDestroy( temp );        
         return;
         }
+    
     if( iWatcher->IsActive())
         {
         return;
         }
 
+    TMCSData& dataItem( iPluginData->DataItemL( aIndex ) );
+    
+    CMenuItem* item( CMenuItem::OpenL( iMenu, dataItem.MenuItem().Id() ) );
+    CleanupStack::PushL( item );
+    
 
-    TMCSData& dataItem = iPluginData->DataItemL( aIndex );
-    CMenuItem* item = CMenuItem::OpenL( iMenu, dataItem.MenuItem());
-    CleanupStack::PushL( item );
-    TPtrC type = item->Type();
+    TBool attrExists = ETrue;
+
+    TPtrC uid = item->GetAttributeL( KMenuAttrUid, attrExists );
+
+    // trying to run non-existing application ( that was replaced by "Undefined" app )
+    // OR trying to run hidden or missing application (e.g. unistalled app 
+    // or app on MMC which was removed )
+    // -> We display a note for a user that this is not possible¨
+    TUint32 isHidden = item->Flags() & TMenuItem::EHidden;
+    TUint32 isMissing = item->Flags() & TMenuItem::EMissing;
+
+    if ( ( attrExists && uid == KMenuAttrUndefUid ) || isHidden || isMissing )
+        {
+        CleanupStack::PopAndDestroy( item );
+
+        HBufC* temp = StringLoader::LoadLC( R_MCS_DISABLE_OPEN_ITEM_MISSING );
+
+        CAknNoteDialog* dialog = new (ELeave) CAknNoteDialog(
+            CAknNoteDialog::EConfirmationTone,
+            CAknNoteDialog::ENoTimeout );
+        dialog->SetTextL( temp->Des() );
+        dialog->ExecuteDlgLD( R_MCS_DISABLE_OPEN_ITEM_DLG );
+        CleanupStack::PopAndDestroy( temp );
+        temp = NULL;
+
+        return;
+        }
+
+    // run item based on its type
+    TPtrC type( item->Type() );
 
     // run folder
     if ( type == KMenuTypeFolder )
         {
-
         // message for MM application
         HBufC8* message; 
 
         // prepare message for launching folder
-        TBool hasApplicationGroupName = EFalse;
-        TPtrC applicationGroupName = item->GetAttributeL( KApplicationGroupName, 
-                                                          hasApplicationGroupName );
+        TBool hasApplicationGroupName( EFalse );
+        
+        TPtrC applicationGroupName( item->GetAttributeL(  
+            KApplicationGroupName, hasApplicationGroupName ) );
+                                                          
         if ( !hasApplicationGroupName )
             {
             CleanupStack::PopAndDestroy( item );
             return;
             }
+        
         message = HBufC8::NewLC( KMMApplication().Length() + 
                                  KSetFocusString().Length() +
                                  applicationGroupName.Length() + 
@@ -360,21 +472,25 @@
 
         // find MM application
         TApaTaskList taskList( CCoeEnv::Static()->WsSession() );
-        TApaTask task = taskList.FindApp( KMMUid );
+        TApaTask task( taskList.FindApp( KMMUid ) );
 
         if ( task.Exists() )
             {
             // MM is already running in background - send APA Message
-            task.SendMessage( TUid::Uid( KUidApaMessageSwitchOpenFileValue ), *message );
+            task.SendMessage( 
+                TUid::Uid( KUidApaMessageSwitchOpenFileValue ), *message );
             }
         else
             { 
             // MM not running yet - use Command Line Tail
             RApaLsSession appArcSession;
             CleanupClosePushL( appArcSession );
+            
             User::LeaveIfError( appArcSession.Connect() );
+            
             TApaAppInfo appInfo;
-            TInt err = appArcSession.GetAppInfo( appInfo, KMMUid );
+            TInt err( appArcSession.GetAppInfo( appInfo, KMMUid ) );
+            
             if ( err == KErrNone )
                 {
                 CApaCommandLine* cmdLine = CApaCommandLine::NewLC();
@@ -384,26 +500,31 @@
                 appArcSession.StartApp( *cmdLine );
                 CleanupStack::PopAndDestroy( cmdLine );
                 }
+            
             CleanupStack::PopAndDestroy( &appArcSession ); 
             }
+        
         CleanupStack::PopAndDestroy( message );
         }
     else
         {
         TBool exists( EFalse );
+        
         TPtrC desc( item->GetAttributeL( KMenuAttrUid, exists ) );
         
-        if( exists )
+        if ( exists )
             {      
             _LIT( KPrefix, "0x" );
+            
             const TInt pos( desc.FindF( KPrefix ) );
             
-            if( pos != KErrNotFound )
+            if ( pos != KErrNotFound )
                 {
                 TLex lex( desc.Mid( pos + KPrefix().Length() ) );
+                
                 // Hex parsing needs unsigned int
-                TUint32 value = 0;
-                const TInt parseResult = lex.Val( value, EHex );
+                TUint32 value( 0 );
+                const TInt parseResult( lex.Val( value, EHex ) );
                 
                 if ( parseResult == KErrNone )
                     {
@@ -411,173 +532,94 @@
                     TInt32 value32( value );
                     uid.iUid = value32;   
                     
-                    if( uid != KNullUid )
+                    if ( uid != KNullUid )
                         {
                         //start a full screen effect
                         GfxTransEffect::BeginFullScreen( 
-                        AknTransEffect::EApplicationStart,
-                        TRect(0,0,0,0), 
-                        AknTransEffect::EParameterType, 
-                        AknTransEffect::GfxTransParam( uid,
-                        AknTransEffect::TParameter::EActivateExplicitContinue ));
+                            AknTransEffect::EApplicationStart,
+                            TRect(), 
+                            AknTransEffect::EParameterType, 
+                            AknTransEffect::GfxTransParam( uid,
+                            AknTransEffect::TParameter::EActivateExplicitContinue ) );
                         }
                     }
                 }
             }
 
         // run application/shortcut/bookmark
-        CMenuOperation* operation = item->HandleCommandL(
-            KMenuCmdOpen, KNullDesC8, iWatcher->iStatus );
+        CMenuOperation* operation( item->HandleCommandL(
+            KMenuCmdOpen, KNullDesC8, iWatcher->iStatus ) );
+        
         iWatcher->Watch( operation );  
         }
+    
     CleanupStack::PopAndDestroy( item );
     }
 
 // ---------------------------------------------------------------------------
+// CMCSPluginEngine::HandleNotifyL
 // Handle the change in Menu Content
 // ---------------------------------------------------------------------------
 //
 void CMCSPluginEngine::HandleNotifyL()
     {
-    TInt count( iPluginData->DataCount());
-    for( TInt i = 0; i < count; i++ )
+    TInt count( iPluginData->DataCount() );
+    
+    for ( TInt i = 0; i < count; i++ )
         {
-        TMCSData& data = iPluginData->DataItemL(i);
+        TMCSData& data( iPluginData->DataItemL(i) );
+        data.SetDirty( ETrue );
+        
         // Check that all the data still exist is MCS, if flag is hidden or
         // missing, we have to remove data from UI
-        CMenuItem* menuItem = CMenuItem::OpenL( iMenu, data.MenuItem().Id() );
-        CleanupStack::PushL( menuItem );
-        if ( !menuItem || 
-             ( menuItem->Flags() & TMenuItem::EHidden ) ||
-             ( menuItem->Flags() & TMenuItem::EMissing ) )
+        CMenuItem* menuItem = NULL; 
+
+        TRAP_IGNORE (
+                menuItem = CMenuItem::OpenL( iMenu, data.MenuItem().Id() );
+        )
+
+        // item not found. Use "Undefined" item as a replacement
+        if ( !menuItem )
             {
-            // Get the replacement for hidden data
-            CMenuFilter* filter = CMenuFilter::NewL();
-            CleanupStack::PushL( filter );
-            // 'Undefined' item
-            filter->HaveAttributeL( KMenuAttrUid, KMenuAttrUndefUid );
-            TMenuItem undefItem = FindMenuItemL( *filter );
-            iPluginData->ReplaceMenuItemL( i, undefItem );
-            iPluginData->SaveSettingsL( i, *FetchMenuItemL(undefItem) );
-            CleanupStack::PopAndDestroy( filter );
+            CleanupStack::PushL( menuItem );
+            iPluginData->ReplaceMenuItemL( i, iUndefinedItemHeader );
+            iPluginData->SaveSettingsL( i, *iUndefinedItem );
+            CleanupStack::Pop( menuItem );
             }
-        CleanupStack::PopAndDestroy( menuItem );
+
+        delete menuItem;
         menuItem = NULL;
         }
+
     // Notification must be activated again
     iNotifyWatcher->Cancel();
+    
     iNotifier.Notify( 0,
-                RMenuNotifier::EItemsAddedRemoved |
-                RMenuNotifier::EItemsReordered |
-                RMenuNotifier::EItemAttributeChanged,
-                iNotifyWatcher->iStatus );
+        RMenuNotifier::EItemsAddedRemoved |
+        RMenuNotifier::EItemsReordered |
+        RMenuNotifier::EItemAttributeChanged,
+        iNotifyWatcher->iStatus );
 
     iNotifyWatcher->WatchNotify( this );
+    
     // Publish changed data
     iPlugin.PublishL();
     }
 
 // ---------------------------------------------------------------------------
-// From class MMsvSessionObserver.
+// CMCSPluginEngine::HandleSessionEventL
 // Handles an event from the message server.
 // ---------------------------------------------------------------------------
 //
-void CMCSPluginEngine::HandleSessionEventL(
-    TMsvSessionEvent aEvent, TAny* /*aArg1*/, TAny* /*aArg2*/, TAny* /*aArg3*/)
-    {
-    switch ( aEvent )
-        {
-    case EMsvEntriesDeleted:
-        // fall-through intended here
-    case EMsvEntriesChanged:
-        {
-
-        }
-        break;
-    default:
-        break;
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// From class MFavouritesDbObserver.
-// Handles database event.
-// -----------------------------------------------------------------------------
-//
-void CMCSPluginEngine::HandleFavouritesDbEventL( RDbNotifier::TEvent aEvent )
+void CMCSPluginEngine::HandleSessionEventL( TMsvSessionEvent aEvent, 
+    TAny* /*aArg1*/, TAny* /*aArg2*/, TAny* /*aArg3*/)
     {
     switch ( aEvent )
         {
-        case RDbNotifier::ERollback:
-            // fall-through intended here
-        case RDbNotifier::ERecover:
-            // fall-through intended here
-        case RDbNotifier::ECommit:
+        case EMsvEntriesDeleted:
+        // fall-through intended here
+        case EMsvEntriesChanged:
             {
-            // Get list of favourites bookmarks
-            CFavouritesItemList* favItems =
-                    new (ELeave) CFavouritesItemList();
-            CleanupStack::PushL( favItems );
-            TInt err = iBookmarkDb.GetAll( *favItems, KFavouritesNullUid,
-                    CFavouritesItem::EItem );
-            if ( err != KErrNone )
-                {
-                ASSERT(0);
-                }
-            TInt count_fav = favItems->Count();
-
-            // Do for each plugin data (4x times)
-            TInt count_data( iPluginData->DataCount() );
-            for ( TInt item_index = 0; item_index < count_data; item_index++ )
-                {
-                // Get item ID and open its menu related item
-                TMCSData& data = iPluginData->DataItemL( item_index );
-                TInt itemID( data.MenuItem().Id() );
-                CMenuItem* menuItem = CMenuItem::OpenL( iMenu, itemID );
-                CleanupStack::PushL( menuItem );
-
-                // Get URL aatribute
-                TBool attrExists = EFalse;
-                TPtrC url = menuItem->GetAttributeL( _L("url"), attrExists );
-                // If bookmark...
-                if ( attrExists )
-                    {
-                    // Get bookmark UID
-                    TPtrC uid_item_ptr = menuItem->GetAttributeL(
-                            KMenuAttrUid, attrExists );
-
-                    // Compare with each item in fav. bookmarks list
-                    TBool itemExists = EFalse;
-                    for ( TInt fav_index = count_fav - 1; fav_index >= 0; fav_index-- ) // newest on top
-                        {
-                        // Get list item UID 
-                        TUid uid_fav = TUid::Uid( favItems->At( fav_index )->Uid() );
-                        if ( uid_fav.Name() == uid_item_ptr )
-                            {
-                            // Bookmark still exist in fav. bookmarks list
-                            itemExists = ETrue;
-                            break;
-                            }
-                        }
-
-                    if ( !itemExists )
-                        {
-                        // If item not axist any more, replace it by undefined icon
-                        CMenuFilter* filter = CMenuFilter::NewL();
-                        CleanupStack::PushL( filter );
-                        // 'Undefined' item
-                        filter->HaveAttributeL( KMenuAttrUid,
-                                KMenuAttrUndefUid );
-                        TMenuItem undefItem = FindMenuItemL( *filter );
-                        iPluginData->ReplaceMenuItemL( item_index, undefItem );
-                        iPluginData->SaveSettingsL( item_index, *FetchMenuItemL(
-                                undefItem ) );
-                        CleanupStack::PopAndDestroy( filter );
-                        }
-                    }
-                CleanupStack::PopAndDestroy( menuItem );
-                }
-            CleanupStack::PopAndDestroy( favItems );
             }
             break;
         default:
@@ -586,91 +628,103 @@
     }
 
 // ---------------------------------------------------------------------------
-// Resumes the engine
+// CMCSPluginEngine::SetBackupRestore
+//
 // ---------------------------------------------------------------------------
 //
-void CMCSPluginEngine::ResumeL()
+void CMCSPluginEngine::SetBackupRestore( TBool aBackupRestore )
     {
-    iSuspend = EFalse;
+    iBackupRestore = aBackupRestore;
     }
 
 // ---------------------------------------------------------------------------
-// Suspends the engine
-// ---------------------------------------------------------------------------
-//
-void CMCSPluginEngine::Suspend()
-    {
-    iSuspend = ETrue;
-    }
-
-// ---------------------------------------------------------------------------
+// CMCSPluginEngine::ShowSettingsL
 // Launch General Settings plugin
 // ---------------------------------------------------------------------------
 //
 void CMCSPluginEngine::ShowSettingsL()
     { 
     TUid uid = {AI_UID_ECOM_IMPLEMENTATION_SETTINGS_MCSPLUGIN};
-    CGSLauncher* l = CGSLauncher::NewLC();
-    l->LaunchGSViewL ( uid,
-                       KHomescreenUid,
-                       iInstanceUid );            
-    CleanupStack::PopAndDestroy( l );
+    
+    CGSLauncher* launcher = CGSLauncher::NewLC();
+    
+    launcher->LaunchGSViewL ( uid, KHomescreenUid, iInstanceUid );
+                                                        
+    CleanupStack::PopAndDestroy( launcher );
+    }
 
-    }
 // ---------------------------------------------------------------------------
-// ResolveSkinItemId
+// CMCSPluginEngine::ConstructMenuItemForIconL
 // Syntax: skin(major minor):mif(filename bimapId maskId)
 // ---------------------------------------------------------------------------
 //
-TBool CMCSPluginEngine::ConstructMenuItemForIconL( const TDesC& aPath, CMenuItem& aMenuItem )
+TBool CMCSPluginEngine::ConstructMenuItemForIconL( const TDesC& aPath, 
+    CMenuItem& aMenuItem )
    {
-   TInt pos = aPath.Locate( ':' );
-   if( pos == KErrNotFound )
+   TInt pos( aPath.Locate( ':' ) );
+   
+   if ( pos == KErrNotFound )
        {
        pos = aPath.Length();
        }
-   TPtrC skin = aPath.Left( pos );
-   TInt sf = skin.FindF( KSkin );
-   if( sf == KErrNotFound )
+   
+   TPtrC skin( aPath.Left( pos ) );
+   TInt sf( skin.FindF( KSkin ) );
+   
+   if ( sf == KErrNotFound )
        {
        return EFalse;
        }
-   TPtrC temp = skin.Mid( sf + KSkin().Length());
-   TLex input( temp );
+   
+   TPtrC temp( skin.Mid( sf + KSkin().Length() ) );
+   
+   TLex input( temp );   
    input.SkipSpace();
-   if( !input.Eos() && input.Peek() == '(')
+   
+   if ( !input.Eos() && input.Peek() == '(' )
        {
        input.Inc();
        }
-   TPtrC majorId = NextIdToken( input );
-   TPtrC minorId = NextIdToken( input );
+   
+   TPtrC majorId( NextIdToken( input ) );
+   TPtrC minorId( NextIdToken( input ) );
+   
    aMenuItem.SetAttributeL( KMenuAttrIconSkinMajorId, majorId );
    aMenuItem.SetAttributeL( KMenuAttrIconSkinMinorId, minorId );
       
    //TPtrC mif = aPath.Mid( pos + 1 );
    //TInt mf = mif.FindF( KMif );
-   if( aPath.Length() > pos && (aPath.Mid( pos + 1 ).FindF( KMif ) != KErrNotFound ))
+   
+   if ( aPath.Length() > pos && 
+      ( aPath.Mid( pos + 1 ).FindF( KMif ) != KErrNotFound ) )
        {
-       TPtrC mif = aPath.Mid( pos + 1 );
-       TInt mf = mif.FindF( KMif );
+       TPtrC mif( aPath.Mid( pos + 1 ) );
+       TInt mf( mif.FindF( KMif ) );
+       
        //TPtrC temp1 = mif.Mid( mf+ KMif().Length());
-       TLex input1( mif.Mid( mf+ KMif().Length()) );
+       
+       TLex input1( mif.Mid( mf + KMif().Length() ) );
        input1.SkipSpace();
-       if( !input1.Eos() && input1.Peek() == '(')
+       
+       if ( !input1.Eos() && input1.Peek() == '(' )
           {
           input1.Inc();
           }
-       TPtrC file = NextIdToken( input1 );
-       TPtrC bitmapId = NextIdToken( input1 );
-       TPtrC maskId = NextIdToken( input1 );
+       
+       TPtrC file( NextIdToken( input1 ) );
+       TPtrC bitmapId( NextIdToken( input1 ) );
+       TPtrC maskId( NextIdToken( input1 ) );
+       
        aMenuItem.SetAttributeL( KMenuAttrIconFile, file );
        aMenuItem.SetAttributeL( KMenuAttrIconId, bitmapId );
        aMenuItem.SetAttributeL( KMenuAttrMaskId, maskId );
        }
+   
    return ETrue;
    }
 
 // ---------------------------------------------------------------------------
+// CMCSPluginEngine::CleanMCSItemsL
 // Called during plugin desctruction
 // Decrements reference counters of all run-time generated items
 // and deletes those which have reference counter == 0
@@ -679,26 +733,32 @@
 void CMCSPluginEngine::CleanMCSItemsL()
     {
     const TInt count( iPluginData->DataCount() );
+    
     for( TInt i = 0; i < count; i++ )
         {
-        TMCSData& data = iPluginData->DataItemL(i);
+        TMCSData& data( iPluginData->DataItemL(i) );
         
         CMenuItem* menuItem = CMenuItem::OpenL( iMenu, data.MenuItem().Id() );        
-        if( !menuItem )
+        
+        if ( !menuItem )
             {
             continue;
-            }        
+            }
+        
         CleanupStack::PushL( menuItem );
         
         // check if ref_count attribute exists
-        TBool exists = EFalse;
-        TPtrC param = menuItem->GetAttributeL( KMenuAttrRefcount, exists );
+        TBool exists( EFalse );
+        
+        TPtrC param( menuItem->GetAttributeL( KMenuAttrRefcount, exists ) );
+        
         if( exists )
             {                
-            const TInt references = UpdateMenuItemsRefCountL( menuItem, -1 );
+            const TInt references( UpdateMenuItemsRefCountL( menuItem, -1 ) );
             
             // Create a nested loop inside CActiveScheduler.
-            CActiveSchedulerWait* wait = new (ELeave) CActiveSchedulerWait;
+            CActiveSchedulerWait* wait = 
+                new ( ELeave ) CActiveSchedulerWait;
             CleanupStack::PushL( wait );
             
             if( references > 0 )
@@ -716,7 +776,8 @@
                  // so remove it from MCS
                  if( !iWatcher->IsActive() )
                      {
-                     CMenuOperation* op = iMenu.RemoveL( menuItem->Id(), iWatcher->iStatus );
+                     CMenuOperation* op = 
+                         iMenu.RemoveL( menuItem->Id(), iWatcher->iStatus );
                      iWatcher->StopAndWatch( op, wait );
                      
                       // Start the nested scheduler loop.
@@ -735,16 +796,18 @@
 
 
 // ---------------------------------------------------------------------------
-// Helper method. Adds a given constant to a value of reference counter  
+// CMCSPluginEngine::UpdateMenuItemsRefCountL
+// Adds a given constant to a value of reference counter  
 // ---------------------------------------------------------------------------
 //
 TInt CMCSPluginEngine::UpdateMenuItemsRefCountL( CMenuItem* aItem, 
-                                                 const TInt aValueToAdd )
+    const TInt aValueToAdd )
     {
-    TBool exists = EFalse;
+    TBool exists( EFalse );
     CleanupStack::PushL( aItem ); 
-    TPtrC param = aItem->GetAttributeL( KMenuAttrRefcount, exists );
+    TPtrC param( aItem->GetAttributeL( KMenuAttrRefcount, exists ) );
     CleanupStack::Pop( aItem );
+    
     if ( exists )
         {
         TInt references;
@@ -758,8 +821,13 @@
         CleanupStack::PushL( aItem ); 
         aItem->SetAttributeL( KMenuAttrRefcount, buf);
         CleanupStack::Pop( aItem );
+    
         // return new ref_count
         return references;
         }
+    
     return -1;
     }
+
+// End of file
+