idlefw/plugins/wrtdataplugin/src/wrtdataobserver.cpp
changeset 3 ff572005ac23
parent 1 844b978f8d5e
child 15 a0713522ab97
equal deleted inserted replaced
2:b7904b40483f 3:ff572005ac23
    14 * Description:
    14 * Description:
    15 * Plug-in main class
    15 * Plug-in main class
    16 *
    16 *
    17 */
    17 */
    18 
    18 
       
    19 
       
    20 // INCLUDE FILES
    19 #include <liwservicehandler.h>
    21 #include <liwservicehandler.h>
    20 #include <liwvariant.h>
    22 #include <liwvariant.h>
    21 #include <liwgenericparam.h>
    23 #include <liwgenericparam.h>
       
    24 #include <s32mem.h>
    22 #include "wrtdata.h"
    25 #include "wrtdata.h"
    23 #include "wrtdataobserver.h"
    26 #include "wrtdataobserver.h"
    24 #include "wrtdatapluginconst.h"
    27 #include "wrtdatapluginconst.h"
    25 // ---------------------------------------------------------------------------
       
    26 // Constructor
       
    27 // ---------------------------------------------------------------------------
       
    28 //
       
    29 CWrtDataObserver::CWrtDataObserver ()
       
    30     {
       
    31 
       
    32     }
       
    33         
       
    34 // ---------------------------------------------------------------------------
       
    35 // Destructor
       
    36 // ---------------------------------------------------------------------------
       
    37 //
       
    38 CWrtDataObserver ::~CWrtDataObserver ()
       
    39     {
       
    40     TRAP_IGNORE( ReleaseL());
       
    41     iInterface = NULL;
       
    42     iData = NULL;
       
    43     }
       
    44 
       
    45 // ---------------------------------------------------------------------------
       
    46 // Register for notifications
       
    47 // ---------------------------------------------------------------------------
       
    48 //
       
    49 void CWrtDataObserver::RegisterL( CLiwDefaultMap* aFilter )
       
    50     {
       
    51     CLiwGenericParamList* inParamList = CLiwGenericParamList::NewL();
       
    52     CleanupStack::PushL( inParamList );
       
    53     CLiwGenericParamList* outParamList = CLiwGenericParamList::NewL();
       
    54     CleanupStack::PushL( outParamList );
       
    55         
       
    56     // Fill in input list for RequestNotification command
       
    57     inParamList->AppendL(TLiwGenericParam(KType,TLiwVariant(KCpData_PubData)));
       
    58     inParamList->AppendL(TLiwGenericParam(KFilter ,TLiwVariant(aFilter)));
       
    59         
       
    60     iError = KErrNone;
       
    61     TRAP( iError, iInterface->ExecuteCmdL( 
       
    62                 KRequestNotification,
       
    63                 *inParamList,
       
    64                 *outParamList,
       
    65                 0,
       
    66                 this ) );
       
    67     
       
    68     CleanupStack::PopAndDestroy( outParamList );
       
    69     CleanupStack::PopAndDestroy( inParamList ); 
       
    70     }
       
    71 
       
    72 // ---------------------------------------------------------------------------
       
    73 // Sing off to notification
       
    74 // ---------------------------------------------------------------------------
       
    75 //
       
    76 void CWrtDataObserver ::ReleaseL()
       
    77     {
       
    78     if( iInterface )
       
    79         {
       
    80         CLiwGenericParamList* inParamList = CLiwGenericParamList::NewL();
       
    81         CleanupStack::PushL( inParamList );
       
    82         CLiwGenericParamList* outParamList = CLiwGenericParamList::NewL();
       
    83         CleanupStack::PushL( outParamList );
       
    84         
       
    85         TInt err(KErrNone);
       
    86         TRAP(err, iInterface->ExecuteCmdL( 
       
    87                 KRequestNotification,
       
    88                 *inParamList,
       
    89                 *outParamList,
       
    90                 KLiwOptCancel,
       
    91                 this ));
       
    92         
       
    93         CleanupStack::PopAndDestroy( outParamList );
       
    94         CleanupStack::PopAndDestroy( inParamList );
       
    95         }
       
    96     }
       
    97 
    28 
    98 // ---------------------------------------------------------------------------
    29 // ---------------------------------------------------------------------------
    99 // Factory method construction
    30 // Factory method construction
   100 // ---------------------------------------------------------------------------
    31 // ---------------------------------------------------------------------------
   101 //
    32 //
   105     CleanupStack::PushL( self );
    36     CleanupStack::PushL( self );
   106     self->ConstructL( aInterface, aData );
    37     self->ConstructL( aInterface, aData );
   107     CleanupStack::Pop( self );
    38     CleanupStack::Pop( self );
   108     return self;    
    39     return self;    
   109     }
    40     }
   110         
    41 
       
    42 
   111 // ---------------------------------------------------------------------------
    43 // ---------------------------------------------------------------------------
   112 // 2n phase constructor
    44 // 2n phase constructor
   113 // ---------------------------------------------------------------------------
    45 // ---------------------------------------------------------------------------
   114 //
    46 //
   115 void CWrtDataObserver::ConstructL( MLiwInterface* aInterface, CWrtData* aData )
    47 void CWrtDataObserver::ConstructL( MLiwInterface* aInterface, CWrtData* aData )
   117     iData = aData;
    49     iData = aData;
   118     iInterface = aInterface;
    50     iInterface = aInterface;
   119     }
    51     }
   120 
    52 
   121 // ---------------------------------------------------------------------------
    53 // ---------------------------------------------------------------------------
       
    54 // Constructor
       
    55 // ---------------------------------------------------------------------------
       
    56 //
       
    57 CWrtDataObserver::CWrtDataObserver ()
       
    58     {
       
    59 
       
    60     }
       
    61         
       
    62 // ---------------------------------------------------------------------------
       
    63 // Destructor
       
    64 // ---------------------------------------------------------------------------
       
    65 //
       
    66 CWrtDataObserver ::~CWrtDataObserver ()
       
    67     {
       
    68     TRAP_IGNORE( ReleaseL());
       
    69     iInterface = NULL;
       
    70     iData = NULL;
       
    71     }
       
    72 
       
    73 // ---------------------------------------------------------------------------
       
    74 // CWrtDataObserver::HandleNotifyL
   122 // Handles Published content notification
    75 // Handles Published content notification
   123 // ---------------------------------------------------------------------------
    76 // ---------------------------------------------------------------------------
   124 //
    77 //
   125 TInt CWrtDataObserver::HandleNotifyL(
    78 TInt CWrtDataObserver::HandleNotifyL(
   126         TInt aErrorCode,
    79         TInt aErrorCode,
   148 		listOfMaps->AtL(i,variant);
   101 		listOfMaps->AtL(i,variant);
   149 		HBufC16* operation = NULL;
   102 		HBufC16* operation = NULL;
   150 
   103 
   151 		CLiwDefaultMap *map = CLiwDefaultMap::NewLC();
   104 		CLiwDefaultMap *map = CLiwDefaultMap::NewLC();
   152 		variant.Get( *map );
   105 		variant.Get( *map );
   153 		TBool found;
   106 		if (map->FindL( KOperation, variant ))
   154 		found = map->FindL( KOperation, variant );
       
   155 		if (found)
       
   156 		   {
   107 		   {
   157 		   operation = variant.AsDes().AllocLC();
   108 		   operation = variant.AsDes().AllocLC();
   158 		   }
   109 	       variant.Reset();
   159 		variant.Reset();
   110             if( operation->Des() != KOperationExecute )
   160 		if( operation->Des() != KOperationExecute )
   111                {
   161 		   {
   112                // Nothing to update for execute action
   162 		   // Nothing to update for execute action
   113                if ( map->FindL( KFLAG, variant ))
   163 		   HBufC16* publisher = NULL; 
   114                    {
   164 		   HBufC16* contentType = NULL;
   115                    // notification from publisher registry
   165 		   HBufC16* contentId = NULL;
   116                   if ( operation->Des() !=  KOperationDelete )
   166 		   found = map->FindL( KFLAG, variant );
   117                       {
   167 		   if ( found)
   118                       iData->UpdatePublisherStatusL();
   168 			   {
   119                       }
   169 			   // notification from publisher registry
   120                    }
   170 			  if ( operation->Des() !=  KOperationDelete )
   121                // ignore update if plugin is in suspend mode
   171 				  {
   122                else if ( iData->IsPluginActive() ) 
   172 				  iData->UpdatePublisherStatusL();
   123                    {
   173 				  }
   124                    HBufC16* contentId = NULL; 
   174 			   }
   125                    CLiwDefaultMap* dataMap = NULL;
   175 		   // ignore update if plugin is in suspend mode
   126                     // Get the data Map if available
   176 		   else if ( iData->IsPluginActive() ) 
   127                     if ( map->FindL( KDataMap, variant))
   177 			   { 
   128                         {
   178 			   // notification from content registry
   129                         TPtrC8 data = variant.AsData();
   179 			   found = map->FindL( KPublisherId, variant );
   130                         RDesReadStream datastrm ( data );
   180 			   if (found)
   131                         dataMap = CLiwDefaultMap::NewLC(datastrm);
   181 				   {
   132                         }
   182 				   publisher = variant.AsDes().AllocLC();
   133                     // Get the content Id
   183 				   }
   134                    if ( map->FindL( KContentId, variant ))
   184 			   variant.Reset();
   135                        {
   185 			   found = map->FindL( KContentType, variant );
   136                        contentId = variant.AsDes().AllocLC();
   186 			   if (found)
   137                        // Refresh only if contentId is retrieved
   187 				  {
   138                        iData->RefreshL( *contentId, *operation, dataMap );
   188 				  contentType = variant.AsDes().AllocLC();
   139                        CleanupStack::PopAndDestroy( contentId );
   189 				  }
   140                        }
   190 			   variant.Reset();
   141 
   191 			   found = map->FindL( KContentId, variant );
   142                    if ( dataMap )
   192 			   if (found)
   143                         {
   193 				  {
   144                         CleanupStack::PopAndDestroy( dataMap );
   194 				  contentId = variant.AsDes().AllocLC();
   145                         }
   195 				  }
   146                    }
   196 			   variant.Reset();
   147                  variant.Reset();
   197 			   iData->RefreshL( *publisher, *contentType, *contentId, *operation );
   148                }
   198 			   
   149             if ( operation )
   199 			   if ( contentId )
   150                 {
   200 				   {
   151                 CleanupStack::PopAndDestroy( operation );
   201 				   CleanupStack::PopAndDestroy( contentId );
   152                 }
   202 				   }
   153 		     }
   203 			  if ( contentType )
       
   204 				   {
       
   205 				   CleanupStack::PopAndDestroy( contentType );
       
   206 				   }
       
   207 			  if ( publisher )
       
   208 				   {
       
   209 				   CleanupStack::PopAndDestroy( publisher );
       
   210 				   }
       
   211 			}
       
   212 			 variant.Reset();
       
   213 		   }
       
   214 		if ( operation )
       
   215 			{
       
   216 			CleanupStack::PopAndDestroy( operation );
       
   217 			}
       
   218 		CleanupStack::PopAndDestroy( map );
   154 		CleanupStack::PopAndDestroy( map );
   219 		}
   155 		}
   220 	CleanupStack::PopAndDestroy( listOfMaps );
   156 	CleanupStack::PopAndDestroy( listOfMaps );
   221 	
   157 	
   222     return aErrorCode;
   158     return aErrorCode;
   223     }
   159     }
   224 
   160 
       
   161 // ---------------------------------------------------------------------------
       
   162 // CWrtDataObserver::RegisterL
       
   163 // Register for notifications
       
   164 // ---------------------------------------------------------------------------
       
   165 //
       
   166 void CWrtDataObserver::RegisterL( CLiwDefaultMap* aFilter )
       
   167     {
       
   168     CLiwGenericParamList* inParamList = CLiwGenericParamList::NewL();
       
   169     CleanupStack::PushL( inParamList );
       
   170     CLiwGenericParamList* outParamList = CLiwGenericParamList::NewL();
       
   171     CleanupStack::PushL( outParamList );
       
   172         
       
   173     // Fill in input list for RequestNotification command
       
   174     inParamList->AppendL(TLiwGenericParam(KType,TLiwVariant(KCpData_PubData)));
       
   175     inParamList->AppendL(TLiwGenericParam(KFilter ,TLiwVariant(aFilter)));
       
   176         
       
   177     iError = KErrNone;
       
   178     TRAP( iError, iInterface->ExecuteCmdL( 
       
   179                 KRequestNotification,
       
   180                 *inParamList,
       
   181                 *outParamList,
       
   182                 0,
       
   183                 this ) );
       
   184     
       
   185     CleanupStack::PopAndDestroy( outParamList );
       
   186     CleanupStack::PopAndDestroy( inParamList ); 
       
   187     }
       
   188 
       
   189 // ---------------------------------------------------------------------------
       
   190 // CWrtDataObserver ::ReleaseL
       
   191 // Sing off to notification
       
   192 // ---------------------------------------------------------------------------
       
   193 //
       
   194 void CWrtDataObserver ::ReleaseL()
       
   195     {
       
   196     if( iInterface )
       
   197         {
       
   198         CLiwGenericParamList* inParamList = CLiwGenericParamList::NewL();
       
   199         CleanupStack::PushL( inParamList );
       
   200         CLiwGenericParamList* outParamList = CLiwGenericParamList::NewL();
       
   201         CleanupStack::PushL( outParamList );
       
   202         
       
   203         TInt err(KErrNone);
       
   204         TRAP(err, iInterface->ExecuteCmdL( 
       
   205                 KRequestNotification,
       
   206                 *inParamList,
       
   207                 *outParamList,
       
   208                 KLiwOptCancel,
       
   209                 this ));
       
   210         
       
   211         CleanupStack::PopAndDestroy( outParamList );
       
   212         CleanupStack::PopAndDestroy( inParamList );
       
   213         }
       
   214     }