emailservices/emailserver/cmailhandlerplugin/src/cmailcpsif.cpp
branchRCL_3
changeset 8 e1b6206813b4
parent 4 e7aa27f58ae1
child 10 f5907b1a1053
--- a/emailservices/emailserver/cmailhandlerplugin/src/cmailcpsif.cpp	Tue Feb 02 00:02:40 2010 +0200
+++ b/emailservices/emailserver/cmailhandlerplugin/src/cmailcpsif.cpp	Fri Feb 19 22:37:30 2010 +0200
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008 - 2009 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2008 - 2010 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"
@@ -23,7 +23,7 @@
 #include <emailwidget.rsg>
 
 #include "emailtrace.h"
-#include "CFSMailClient.h"
+#include "cfsmailclient.h"
 #include "cmailcpsif.h"
 #include "cmailcpsifconsts.h"
 #include "FreestyleEmailUiConstants.h"
@@ -74,6 +74,8 @@
     iMsgInterface = GetMessagingInterfaceL();
     RegisterForObserverL();
     PublisherRegisteryActionL();
+    
+    ResetPublishedDataL( KCPAll );
     }
 
 // ---------------------------------------------------------------------------
@@ -232,6 +234,31 @@
     }
 
 // ---------------------------------------------------------------------------
+// CMailCpsIf::PublishActiveMailboxNameL
+// ---------------------------------------------------------------------------
+//
+void CMailCpsIf::PublishMailboxNameL(
+    const TInt aInstance, 
+    const TDesC& aMailboxName,
+    const TDesC8& aAction )
+    {
+    FUNC_LOG;
+    
+    TBuf<KMaxDescLen> contentType;
+    contentType.Copy(KContTypeBodyText);        
+    contentType.Append(_L("1"));
+    
+    TBuf<KMaxDescLen> textKey;
+    textKey.Copy(KKeyBodyText);
+    textKey.Append(_L("1"));
+
+    TFSMailMsgId dummy;
+    
+    PublishDescriptorL( KPubId, contentType, iInstIdList[aInstance]->Des(),
+        aMailboxName, textKey, aAction, 0, dummy, dummy );
+    }
+
+// ---------------------------------------------------------------------------
 // CMailCpsIf::PublishIndicatorIconL
 // ---------------------------------------------------------------------------
 //
@@ -300,6 +327,71 @@
     }
 
 // ---------------------------------------------------------------------------
+// CMailCpsIf::PublishMailboxIconL
+// ---------------------------------------------------------------------------
+//
+void CMailCpsIf::PublishMailboxIconL( const TInt aInstance, const TDesC& aIconPath )
+    {
+    FUNC_LOG;
+
+    TBuf<KMaxDescLen> contentType;
+    contentType.Copy(KContTypeMailboxIcons);        
+    contentType.Append(_L("1"));
+
+    TBuf8<KMaxDescLen> key;
+    key.Copy(KKeyMailboxIcons);     
+    key.Append(_L8("1"));
+
+    User::LeaveIfNull( iInstIdList[aInstance] );
+    PublishIconReferenceL(
+        iInstIdList[aInstance]->Des(),
+        contentType,
+        key,
+        aIconPath );
+    }
+
+// ---------------------------------------------------------------------------
+// CMailCpsIf::PublishIconReferenceL
+// ---------------------------------------------------------------------------
+//
+void CMailCpsIf::PublishIconReferenceL(
+    const TDesC& aContentId,
+    const TDesC& aContentType,
+    const TDesC8& aKey,
+    const TDesC& aIconPath )
+    {
+    FUNC_LOG;
+    CLiwGenericParamList* inparam = &(iServiceHandler->InParamListL());
+    CLiwGenericParamList* outparam = &(iServiceHandler->OutParamListL());
+
+    TLiwGenericParam type( KType, TLiwVariant( KCpData ) );
+    inparam->AppendL( type );
+
+    CLiwDefaultMap* pdatamap = CLiwDefaultMap::NewLC();
+    CLiwDefaultMap* datamap = CLiwDefaultMap::NewLC();
+
+    pdatamap->InsertL( KPublisherId, TLiwVariant( KPubId ) );
+    pdatamap->InsertL( KContentType, TLiwVariant( aContentType ) );
+    pdatamap->InsertL( KContentId, TLiwVariant( aContentId ) );
+    
+    datamap->InsertL( aKey, TLiwVariant( aIconPath ) );
+
+    pdatamap->InsertL( KDataMap, TLiwVariant(datamap) );
+    TLiwGenericParam item( KItem, TLiwVariant( pdatamap ) );       
+    inparam->AppendL( item );
+    
+    iMsgInterface->ExecuteCmdL( KAdd, *inparam, *outparam );
+    
+    CleanupStack::PopAndDestroy( datamap );
+    CleanupStack::PopAndDestroy( pdatamap );    
+    
+    item.Reset();
+    type.Reset();
+    outparam->Reset();
+    inparam->Reset();
+    }
+
+// ---------------------------------------------------------------------------
 // CMailCpsIf::PublishMailDetailL
 // ---------------------------------------------------------------------------
 //
@@ -492,6 +584,7 @@
         iconIds.Append( KSpace );
         id.Num( aBitmapMaskId );
         iconIds.Append( id );
+        iconIds.Append( _L(")") );        
         }
 
     // The actual image publishing part starts here   
@@ -668,14 +761,14 @@
 // ---------------------------------------------------------------------------
 //
 TInt CMailCpsIf::HandleNotifyL(
-        TInt aErrorCode,
+        TInt /*aCmdId*/,
         TInt /*aEventId*/,
         CLiwGenericParamList& aEventParamList,
         const CLiwGenericParamList& /*aInParamList*/ )
     {
     FUNC_LOG;
     PublisherStatusL  ( aEventParamList);
-    return aErrorCode;
+    return KErrNone;
     }
    
 // ---------------------------------------------------------------------------
@@ -751,6 +844,7 @@
                              TInt widgetInstance = FindWidgetInstanceId(cid->Des());
                              PublishSetupWizardL(widgetInstance);
                              iMailCpsHandler->UpdateMailboxesL(widgetInstance, cid->Des());
+                             iMailCpsHandler->UpdateExtAccountL( cid->Des() );
                              // Widget visible on the homescreen. Publishing allowed.
                              iAllowedToPublish[widgetInstance] = ETrue;
                              iInactive[widgetInstance] = EFalse;
@@ -776,6 +870,7 @@
                              {                            
                              // Widget removed from homescreen.
                              HBufC* cid = contentid.AllocLC();
+                             ResetPublishedDataL( cid->Des() );
                              TInt widgetInstance = FindWidgetInstanceId(cid->Des());
                              if (widgetInstance != KErrNotFound )
                             	 {
@@ -799,7 +894,7 @@
                              {
                              // If no accounts are created launch email wizard
                              // otherwice launch widget settings app                             
-                             if (iMailCpsHandler->GetMailboxCount())
+                             if ( iMailCpsHandler->TotalMailboxCountL() )
                                  {
                                  HBufC* cid = contentid.AllocLC();
                                  iMailCpsHandler->LaunchWidgetSettingsL(cid->Des());
@@ -877,3 +972,35 @@
     return instance;
     }
 
+// ---------------------------------------------------------------------------
+// CMailCpsIf::ResetPublishedDataL
+// ---------------------------------------------------------------------------
+//
+void CMailCpsIf::ResetPublishedDataL( const TDesC& aContentId )
+    {
+    FUNC_LOG;
+    // Clean up all published data
+    if( !iMsgInterface ) GetMessagingInterfaceL();
+    CLiwGenericParamList* inParam = &(iServiceHandler->InParamListL());
+    CLiwGenericParamList* outParam = &(iServiceHandler->OutParamListL());
+
+    // Fill input param
+    TLiwGenericParam cptype( KType, TLiwVariant( KCpData ));
+    inParam->AppendL( cptype );
+
+    CLiwDefaultMap* cpData = CLiwDefaultMap::NewLC();
+    cpData->InsertL( KPublisherId, TLiwVariant( KPubId ) );
+    cpData->InsertL( KContentType, TLiwVariant( KCPAll ) );
+    cpData->InsertL( KContentId, TLiwVariant( aContentId ) );
+    TLiwGenericParam item( KData8, TLiwVariant( cpData ) );
+    inParam->AppendL( item );
+
+    // Execute command
+    iMsgInterface->ExecuteCmdL( KDelete , *inParam, *outParam );
+    
+    CleanupStack::PopAndDestroy( cpData );
+    item.Reset();
+    cptype.Reset();
+    outParam->Reset();
+    inParam->Reset();
+    }