omads/omadsextensions/adapters/mms/src/mmsdatastore.cpp
branchRCL_3
changeset 25 4f0867e42d62
parent 24 8e7494275d3a
equal deleted inserted replaced
24:8e7494275d3a 25:4f0867e42d62
    14 * Description:  Part of SyncML Data Synchronization Plug In Adapter
    14 * Description:  Part of SyncML Data Synchronization Plug In Adapter
    15 *
    15 *
    16 */
    16 */
    17 
    17 
    18 
    18 
    19 #include <e32base.h>
    19 #include <e32base.h>      
    20 #include <msvstd.h>
    20 #include <msvstd.h>       
    21 #include <msvapi.h>
    21 #include <msvapi.h>       
    22 #include <msvids.h>
    22 #include <msvids.h>
    23 #include <mtclreg.h> 
    23 #include <mtclreg.h> 
    24 #include <mmsconst.h>
    24 #include <mmsconst.h>
    25 #include <centralrepository.h>
    25 #include <centralrepository.h>
    26 #include <mmscodecclient.h>
    26 #include <mmscodecclient.h>
   180     LOGGER_ENTERFN("CMmsDataStore::DoStoreName");
   180     LOGGER_ENTERFN("CMmsDataStore::DoStoreName");
   181     
   181     
   182     if ( iDataBaseOpened )
   182     if ( iDataBaseOpened )
   183         {
   183         {
   184         LOGGER_LEAVEFN( "CMmsDataStore::DoStoreName" );
   184         LOGGER_LEAVEFN( "CMmsDataStore::DoStoreName" );
   185         LOGGER_WRITE_1( "Database name: %S", &KNSmlDefaultLocalDbName );
   185         LOGGER_MSG_EC( "Database name: %S", &KNSmlDefaultLocalDbName );
   186         return KNSmlDefaultLocalDbName;
   186         return KNSmlDefaultLocalDbName;
   187         }
   187         }
   188 
   188 
   189     LOGGER_LEAVEFN( "CMmsDataStore::DoStoreName" );
   189     LOGGER_LEAVEFN( "CMmsDataStore::DoStoreName" );
   190     return KNullDesC;
   190     return KNullDesC;
   307         
   307         
   308         delete repository;
   308         delete repository;
   309         }
   309         }
   310     else
   310     else
   311         {
   311         {
   312         LOGGER_WRITE_1( "CRepository::NewL leaved with %d", error );
   312         LOGGER_MSG_EC( "CRepository::NewL leaved with %d", error );
   313         }       
   313         }       
   314         
   314         
   315     LOGGER_LEAVEFN( "CMmsDataStore::DoMaxObjectSize" );
   315     LOGGER_LEAVEFN( "CMmsDataStore::DoMaxObjectSize" );
   316     return maxSendSize;
   316     return maxSendSize;
   317     }
   317     }
   325     TInt& aSize, TSmlDbItemUid& aParent, TDes8& aMimeType, 
   325     TInt& aSize, TSmlDbItemUid& aParent, TDes8& aMimeType, 
   326     TDes8& aMimeVer, TRequestStatus& aStatus )
   326     TDes8& aMimeVer, TRequestStatus& aStatus )
   327     {
   327     {
   328     LOGGER_ENTERFN( "CMmsDataStore::DoOpenItemL" );
   328     LOGGER_ENTERFN( "CMmsDataStore::DoOpenItemL" );
   329 
   329 
   330     LOGGER_WRITE_1( "Opening item %d.", aUid );
   330     LOGGER_MSG_EC( "Opening item %d.", aUid );
   331     
   331     
   332     // Store these for later use
   332     // Store these for later use
   333     iCallerStatus = &aStatus;
   333     iCallerStatus = &aStatus;
   334     *iCallerStatus = KRequestPending;
   334     *iCallerStatus = KRequestPending;
   335     
   335     
   336     // Check that we're in a proper state
   336     // Check that we're in a proper state
   337     if ( iCurrentState != EMmsOpenAndWaiting )
   337     if ( iCurrentState != EMmsOpenAndWaiting )
   338         {
   338         {
   339         LOGGER_WRITE_1( "CMmsDataStore::DoOpenItemL, invalid state %d.", iCurrentState );
   339         LOGGER_MSG_EC( "CMmsDataStore::DoOpenItemL, invalid state %d.", iCurrentState );
   340         User::RequestComplete( iCallerStatus, KErrNotReady );
   340         User::RequestComplete( iCallerStatus, KErrNotReady );
   341         return;
   341         return;
   342         }
   342         }
   343         
   343         
   344     TBool userFolderFound( EFalse );
   344     TBool userFolderFound( EFalse );
   371         CMsvEntry* entry( NULL );
   371         CMsvEntry* entry( NULL );
   372         TRAP( error, entry = iMsvSession->GetEntryL(aUid) );
   372         TRAP( error, entry = iMsvSession->GetEntryL(aUid) );
   373         if ( error != KErrNone )
   373         if ( error != KErrNone )
   374             {
   374             {
   375             User::RequestComplete( iCallerStatus, KErrNotFound ); 
   375             User::RequestComplete( iCallerStatus, KErrNotFound ); 
   376             LOGGER_WRITE_1("iMsvSession->GetEntryL failed with %d.", error);
   376             LOGGER_MSG_EC("iMsvSession->GetEntryL failed with %d.", error);
   377             return;
   377             return;
   378             }
   378             }
   379         
   379         
   380         TMsvEntry messageEntry = entry->Entry();
   380         TMsvEntry messageEntry = entry->Entry();
   381         SAFEDELETE( entry );
   381         SAFEDELETE( entry );
   404                 iMsvWait->iStatus) );
   404                 iMsvWait->iStatus) );
   405             
   405             
   406             if ( error != KErrNone ) 
   406             if ( error != KErrNone ) 
   407                 {
   407                 {
   408                 User::RequestComplete( iCallerStatus, error );
   408                 User::RequestComplete( iCallerStatus, error );
   409                 LOGGER_WRITE_1("iCodecClient->InitializeChunkedRetrievingL failed with %d.", error); 
   409                 LOGGER_MSG_EC("iCodecClient->InitializeChunkedRetrievingL failed with %d.", error); 
   410                 return;         
   410                 return;         
   411                 }
   411                 }
   412             
   412             
   413             // Wait until the message has been processed
   413             // Wait until the message has been processed
   414             iMsvWait->Start();
   414             iMsvWait->Start();
   415             
   415             
   416             if ( iMsvWait->iStatus != KErrNone )
   416             if ( iMsvWait->iStatus != KErrNone )
   417                 {
   417                 {
   418                 User::RequestComplete( iCallerStatus, iMsvWait->iStatus.Int() );
   418                 User::RequestComplete( iCallerStatus, iMsvWait->iStatus.Int() );
   419                 LOGGER_WRITE_1( "iCodecClient->InitializeChunkedRetrievingL failed with %d",
   419                 LOGGER_MSG_EC( "iCodecClient->InitializeChunkedRetrievingL failed with %d",
   420                     iMsvWait->iStatus.Int() ); 
   420                     iMsvWait->iStatus.Int() ); 
   421                 return;
   421                 return;
   422                 }
   422                 }   
   423             LOGGER_WRITE_1("iUnread: %d", (TInt)iUnread);
       
   424             aSize++; // Status byte will be added also, reserve one additional byte for that.
   423             aSize++; // Status byte will be added also, reserve one additional byte for that.
   425             iCurrentState = EMmsItemOpen;
   424             iCurrentState = EMmsItemOpen;
   426             }
   425             }
   427         } // Open MMS message
   426         } // Open MMS message
   428     
   427     
   480 // -----------------------------------------------------------------------------
   479 // -----------------------------------------------------------------------------
   481 void CMmsDataStore::DoCreateItemL( TSmlDbItemUid& aUid, TInt aSize, TSmlDbItemUid aParent, 
   480 void CMmsDataStore::DoCreateItemL( TSmlDbItemUid& aUid, TInt aSize, TSmlDbItemUid aParent, 
   482     const TDesC8& aMimeType, const TDesC8& /*aMimeVer*/, TRequestStatus& aStatus )
   481     const TDesC8& aMimeType, const TDesC8& /*aMimeVer*/, TRequestStatus& aStatus )
   483     {
   482     {
   484     LOGGER_ENTERFN( "CMmsDataStore::DoCreateItemL" );
   483     LOGGER_ENTERFN( "CMmsDataStore::DoCreateItemL" );
   485     LOGGER_WRITE_1( "Parent folder: %d.", aParent );
   484     LOGGER_MSG_EC( "Parent folder: %d.", aParent );
   486     
   485     
   487     // Store some variables for further use
   486     // Store some variables for further use
   488     iCallerStatus = &aStatus;
   487     iCallerStatus = &aStatus;
   489     *iCallerStatus = KRequestPending;
   488     *iCallerStatus = KRequestPending;
   490     
   489     
   491     // Ensure that we're in proper state
   490     // Ensure that we're in proper state
   492     if ( iCurrentState != EMmsOpenAndWaiting )
   491     if ( iCurrentState != EMmsOpenAndWaiting )
   493         {
   492         {
   494         LOGGER_WRITE_1( "Invalid state %d.", iCurrentState );
   493         LOGGER_MSG_EC( "Invalid state %d.", iCurrentState );
   495         }
   494         }
   496         
   495         
   497     TBool createFolder( EFalse );
   496     TBool createFolder( EFalse );
   498     LOG( aMimeType );
   497     LOG( aMimeType );
   499     if ( aMimeType.Compare( KFolderMimeType() ) == 0 )  
   498     if ( aMimeType.Compare( KFolderMimeType() ) == 0 )  
   561 // -----------------------------------------------------------------------------
   560 // -----------------------------------------------------------------------------
   562 void CMmsDataStore::DoReplaceItemL( TSmlDbItemUid aUid, TInt aSize, TSmlDbItemUid aParent, 
   561 void CMmsDataStore::DoReplaceItemL( TSmlDbItemUid aUid, TInt aSize, TSmlDbItemUid aParent, 
   563     TBool /*aFieldChange*/, TRequestStatus& aStatus )
   562     TBool /*aFieldChange*/, TRequestStatus& aStatus )
   564     {
   563     {
   565     LOGGER_ENTERFN("CMmsDataStore::DoReplaceItemL");
   564     LOGGER_ENTERFN("CMmsDataStore::DoReplaceItemL");
   566     LOGGER_WRITE_1("Replacing item %d.", aUid);
   565     LOGGER_MSG_EC("Replacing item %d.", aUid);
   567     LOGGER_WRITE_1("Parent folder: %d.", aParent);
   566     LOGGER_MSG_EC("Parent folder: %d.", aParent);
   568     
   567     
   569     // Store some variables for further use
   568     // Store some variables for further use
   570     iCallerStatus = &aStatus;
   569     iCallerStatus = &aStatus;
   571     *iCallerStatus = KRequestPending;
   570     *iCallerStatus = KRequestPending;
   572     
   571     
   573     // Ensure proper state
   572     // Ensure proper state
   574     if ( iCurrentState != EMmsOpenAndWaiting )
   573     if ( iCurrentState != EMmsOpenAndWaiting )
   575         {
   574         {
   576         LOGGER_WRITE_1("Invalid state %d.", iCurrentState);
   575         LOGGER_MSG_EC("Invalid state %d.", iCurrentState);
   577         }
   576         }
   578 
   577 
   579     // Ensure that we've got enough disk space for the item
   578     // Ensure that we've got enough disk space for the item
   580     if ( iCodecClient->DiskSpaceBelowCriticalLevelL( aSize ) )
   579     if ( iCodecClient->DiskSpaceBelowCriticalLevelL( aSize ) )
   581         {
   580         {
   588     CMsvEntry* entry(NULL);
   587     CMsvEntry* entry(NULL);
   589     TRAPD( err, entry = iMsvSession->GetEntryL( aUid ) );
   588     TRAPD( err, entry = iMsvSession->GetEntryL( aUid ) );
   590     if ( err != KErrNone )
   589     if ( err != KErrNone )
   591         {
   590         {
   592         User::RequestComplete( iCallerStatus, KErrNotFound );
   591         User::RequestComplete( iCallerStatus, KErrNotFound );
   593         LOGGER_WRITE_1("CMsvSession::GetEntryL failed with %d.", err)
   592         LOGGER_MSG_EC("CMsvSession::GetEntryL failed with %d.", err)
   594         return;
   593         return;
   595         }
   594         }
   596 
   595 
   597     TMsvEntry tEntry = entry->Entry();
   596     TMsvEntry tEntry = entry->Entry();
   598     delete entry;
   597     delete entry;
   608    if ( ( updateFolder && aParent != KMsvMyFoldersEntryIdValue )
   607    if ( ( updateFolder && aParent != KMsvMyFoldersEntryIdValue )
   609         || ( !updateFolder && !iMsvApi->ValidFolderL( aParent )
   608         || ( !updateFolder && !iMsvApi->ValidFolderL( aParent )
   610         || ( aParent != tEntry.Parent() ) ) )
   609         || ( aParent != tEntry.Parent() ) ) )
   611         {
   610         {
   612         User::RequestComplete( iCallerStatus, KErrNotSupported );
   611         User::RequestComplete( iCallerStatus, KErrNotSupported );
   613         LOGGER_WRITE_1("Bad parent folder, message entry parent is %d", tEntry.Parent());
   612         LOGGER_MSG_EC("Bad parent folder, message entry parent is %d", tEntry.Parent());
   614         return;    
   613         return;    
   615         }           
   614         }           
   616     
   615     
   617     // Store these for further use
   616     // Store these for further use
   618     iParentId = aParent;
   617     iParentId = aParent;
   683     else if ( iCurrentState == EMmsItemOpenFieldUpdate )
   682     else if ( iCurrentState == EMmsItemOpenFieldUpdate )
   684         {
   683         {
   685         if ( iReadCounter++ == 0 )
   684         if ( iReadCounter++ == 0 )
   686             {
   685             {
   687             TUint8 status = ResolveStatusBits( iUnread );
   686             TUint8 status = ResolveStatusBits( iUnread );
   688             LOGGER_WRITE_1("WriteStatusBits: %d", status);
       
   689             aBuffer.Append( &status, 1 );
   687             aBuffer.Append( &status, 1 );
   690             }
   688             }
   691         else
   689         else
   692             {
   690             {
   693             LOGGER_WRITE("Field update done");
   691             LOGGER_WRITE("Field update done");
   698     else if ( iCurrentState == EMmsItemOpen )
   696     else if ( iCurrentState == EMmsItemOpen )
   699         {
   697         {
   700         if ( iReadCounter++ == 0 )
   698         if ( iReadCounter++ == 0 )
   701             {
   699             {
   702             TUint8 status = ResolveStatusBits( iUnread );
   700             TUint8 status = ResolveStatusBits( iUnread );
   703             LOGGER_WRITE_1("WriteStatusBits: %d", status);
       
   704             aBuffer.Append( &status, 1 );
   701             aBuffer.Append( &status, 1 );
   705             iReadPosition = 0;
   702             iReadPosition = 0;
   706             iLastDataChunk = EFalse;
   703             iLastDataChunk = EFalse;
   707             iReadAllData = EFalse;
   704             iReadAllData = EFalse;
   708             }
   705             }
   718             }           
   715             }           
   719         }
   716         }
   720     
   717     
   721     else
   718     else
   722         {
   719         {
   723         LOGGER_WRITE_1("CMmsDataStore::DoReadItemL: bad state %d", iCurrentState);
   720         LOGGER_MSG_EC("CMmsDataStore::DoReadItemL: bad state %d", iCurrentState);
   724         User::Leave( KErrNotReady );
   721         User::Leave( KErrNotReady );
   725         }   
   722         }   
   726 
   723 
   727     LOGGER_LEAVEFN("CMmsDataStore::DoReadItemL");   
   724     LOGGER_LEAVEFN("CMmsDataStore::DoReadItemL");   
   728     }
   725     }
   732 // Write specified amount of data to the temporary buffer
   729 // Write specified amount of data to the temporary buffer
   733 // -----------------------------------------------------------------------------
   730 // -----------------------------------------------------------------------------
   734 void CMmsDataStore::DoWriteItemL( const TDesC8& aData )
   731 void CMmsDataStore::DoWriteItemL( const TDesC8& aData )
   735     {
   732     {
   736     LOGGER_ENTERFN("CMmsDataStore::DoWriteItemL");
   733     LOGGER_ENTERFN("CMmsDataStore::DoWriteItemL");
   737     LOGGER_WRITE_1("%d",iWriteCounter);
   734     LOGGER_MSG_EC("%d",iWriteCounter);
   738     
   735     
   739     TInt dataLength = aData.Length();
   736     TInt dataLength = aData.Length();
   740     LOGGER_WRITE_1("Data length: %d", dataLength);
   737     LOGGER_MSG_EC("Data length: %d", dataLength);
   741     
   738     
   742     if ( !( dataLength > 0 ) ) // Should never happen...
   739     if ( !( dataLength > 0 ) ) // Should never happen...
   743         {
   740         {
   744         LOGGER_WRITE("Error: no data");
   741         LOGGER_WRITE("Error: no data");
   745         User::Leave( KErrArgument );
   742         User::Leave( KErrArgument );
   792                 iWrittenDataLength += data.Length();
   789                 iWrittenDataLength += data.Length();
   793                 }
   790                 }
   794             else // just status update
   791             else // just status update
   795                 {
   792                 {
   796                 UpdateMmsStatusL( iCurrentId, iUnread );
   793                 UpdateMmsStatusL( iCurrentId, iUnread );
   797                 LOGGER_WRITE_1("Message status updated, iUnread: %d", iUnread);
   794                 LOGGER_MSG_EC("Message status updated: %d", iUnread);
   798                 }    
   795                 }    
   799             }
   796             }
   800         else
   797         else
   801             {
   798             {
   802             TPtrC8 data = aData.Mid(0);    
   799             TPtrC8 data = aData.Mid(0);    
   805             }    
   802             }    
   806         }
   803         }
   807         
   804         
   808     else
   805     else
   809         {
   806         {
   810         LOGGER_WRITE_1("Wrong state %d", iCurrentState);
   807         LOGGER_MSG_EC("Wrong state %d", iCurrentState);
   811         User::Leave( KErrNotReady );
   808         User::Leave( KErrNotReady );
   812         }
   809         }
   813         
   810         
   814     if ( error != KErrNone )
   811     if ( error != KErrNone )
   815         {
   812         {
   816         LOGGER_WRITE_1("iCodecClient->NextDataPart() failed with %d", error);
   813         LOGGER_MSG_EC("iCodecClient->NextDataPart() failed with %d", error);
   817         User::Leave( error );
   814         User::Leave( error );
   818         }  
   815         }  
   819 
   816 
   820     LOGGER_LEAVEFN("CMmsDataStore::DoWriteItemL");  
   817     LOGGER_LEAVEFN("CMmsDataStore::DoWriteItemL");  
   821     }
   818     }
   838         {
   835         {
   839         error = iFolderObjectParser->ImportFolderXml( iDataBuffer->Ptr(0) );
   836         error = iFolderObjectParser->ImportFolderXml( iDataBuffer->Ptr(0) );
   840         if ( error != KErrNone )
   837         if ( error != KErrNone )
   841             {
   838             {
   842             User::RequestComplete( iCallerStatus, error );
   839             User::RequestComplete( iCallerStatus, error );
   843             LOGGER_WRITE_1("ImportFolderXml failed with %d", error);
   840             LOGGER_MSG_EC("ImportFolderXml failed with %d", error);
   844             return;
   841             return;
   845             }
   842             }
   846          
   843          
   847          const TDesC& name = iFolderObjectParser->GetName();
   844          const TDesC& name = iFolderObjectParser->GetName();
   848          if ( name.Length() <= 0 )
   845          if ( name.Length() <= 0 )
   861                 *iCreatedUid = id;
   858                 *iCreatedUid = id;
   862                 iCurrentId = id;
   859                 iCurrentId = id;
   863                 }
   860                 }
   864             else
   861             else
   865                 {
   862                 {
   866                 LOGGER_WRITE_1("iMsvApi->AddFolderL failed with %d", error);
   863                 LOGGER_MSG_EC("iMsvApi->AddFolderL failed with %d", error);
   867                 }    
   864                 }    
   868             }
   865             }
   869          else
   866          else
   870             {
   867             {
   871             error = iMsvApi->UpdateUserFolderL( iCurrentId, name );
   868             error = iMsvApi->UpdateUserFolderL( iCurrentId, name );
   872             if ( error != KErrNone )
   869             if ( error != KErrNone )
   873                 {
   870                 {
   874                 LOGGER_WRITE_1("iMsvApi->UpdateFolderL failed with %d", error);
   871                 LOGGER_MSG_EC("iMsvApi->UpdateFolderL failed with %d", error);
   875                 }
   872                 }
   876             }
   873             }
   877         }
   874         }
   878     else if ( iCurrentState == EMmsItemCreating )
   875     else if ( iCurrentState == EMmsItemCreating )
   879         {
   876         {
   909             }
   906             }
   910         }
   907         }
   911     else
   908     else
   912         {
   909         {
   913         User::RequestComplete( iCallerStatus, KErrNotSupported );
   910         User::RequestComplete( iCallerStatus, KErrNotSupported );
   914         LOGGER_WRITE_1("Bad state: %d", iCurrentState);
   911         LOGGER_MSG_EC("Bad state: %d", iCurrentState);
   915         return;
   912         return;
   916         }
   913         }
   917     
   914     
   918     delete iDataBuffer;
   915     delete iDataBuffer;
   919     iDataBuffer = NULL;
   916     iDataBuffer = NULL;
   944                 iChangeFinder->ItemUpdatedL( snapshotItem );
   941                 iChangeFinder->ItemUpdatedL( snapshotItem );
   945                 }
   942                 }
   946             }
   943             }
   947         else
   944         else
   948             {
   945             {
   949             LOGGER_WRITE_1( "CMsvSession::GetEntry failed with %d", error );
   946             LOGGER_MSG_EC( "CMsvSession::GetEntry failed with %d", error );
   950             }
   947             }
   951         }
   948         }
   952     
   949     
   953     // Send message if parent folder is Outbox
   950     // Send message if parent folder is Outbox
   954     if ( iParentId == KMsvGlobalOutBoxIndexEntryId &&
   951     if ( iParentId == KMsvGlobalOutBoxIndexEntryId &&
   990         {
   987         {
   991         iCurrentState = EMmsOpenAndWaiting;
   988         iCurrentState = EMmsOpenAndWaiting;
   992         }
   989         }
   993     else 
   990     else 
   994         {
   991         {
   995         LOGGER_WRITE_1("Invalid state %d.", iCurrentState);
   992         LOGGER_MSG_EC("Invalid state %d.", iCurrentState);
   996         }
   993         }
   997     
   994     
   998     LOGGER_LEAVEFN("CMmsDataStore::DoCloseItem");
   995     LOGGER_LEAVEFN("CMmsDataStore::DoCloseItem");
   999     }
   996     }
  1000 
   997 
  1005 void CMmsDataStore::DoMoveItemL( TSmlDbItemUid aUid,
  1002 void CMmsDataStore::DoMoveItemL( TSmlDbItemUid aUid,
  1006     TSmlDbItemUid aNewParent, TRequestStatus& aStatus )
  1003     TSmlDbItemUid aNewParent, TRequestStatus& aStatus )
  1007     {
  1004     {
  1008     LOGGER_ENTERFN("CMmsDataStore::DoMoveItemL");
  1005     LOGGER_ENTERFN("CMmsDataStore::DoMoveItemL");
  1009     
  1006     
  1010     LOGGER_WRITE_1("Moving item %d.", aUid);
  1007     LOGGER_MSG_EC("Moving item %d.", aUid);
  1011     
  1008     
  1012     // Store some variables for further use
  1009     // Store some variables for further use
  1013     iCallerStatus = &aStatus;
  1010     iCallerStatus = &aStatus;
  1014     *iCallerStatus = KRequestPending;
  1011     *iCallerStatus = KRequestPending;
  1015 
  1012 
  1016     // Check that we're in proper state
  1013     // Check that we're in proper state
  1017     if ( iCurrentState != EMmsOpenAndWaiting ) 
  1014     if ( iCurrentState != EMmsOpenAndWaiting ) 
  1018         {
  1015         {
  1019         LOGGER_WRITE_1("CMmsDataStore::DoMoveItemL, invalid state %d.", iCurrentState);
  1016         LOGGER_MSG_EC("CMmsDataStore::DoMoveItemL, invalid state %d.", iCurrentState);
  1020         }
  1017         }
  1021 
  1018 
  1022     // Ensure that we have this item in the message store   
  1019     // Ensure that we have this item in the message store   
  1023     if ( !MmsItemExists( aUid ) )
  1020     if ( !MmsItemExists( aUid ) )
  1024         {
  1021         {
  1049 // Removes item from the message store
  1046 // Removes item from the message store
  1050 // -----------------------------------------------------------------------------
  1047 // -----------------------------------------------------------------------------
  1051 void CMmsDataStore::DoDeleteItemL( TSmlDbItemUid aUid, TRequestStatus& aStatus  )
  1048 void CMmsDataStore::DoDeleteItemL( TSmlDbItemUid aUid, TRequestStatus& aStatus  )
  1052     {
  1049     {
  1053     LOGGER_ENTERFN("CMmsDataStore::DoDeleteItemL");
  1050     LOGGER_ENTERFN("CMmsDataStore::DoDeleteItemL");
  1054     LOGGER_WRITE_1("Deleting item %d.", aUid);
  1051     LOGGER_MSG_EC("Deleting item %d.", aUid);
  1055     
  1052     
  1056     // Store some variables for further use
  1053     // Store some variables for further use
  1057     iCallerStatus = &aStatus;
  1054     iCallerStatus = &aStatus;
  1058     *iCallerStatus = KRequestPending;
  1055     *iCallerStatus = KRequestPending;
  1059     
  1056     
  1060     TInt error(KErrNone);
  1057     TInt error(KErrNone);
  1061     
  1058     
  1062     // Check that we're in proper state
  1059     // Check that we're in proper state
  1063     if ( iCurrentState != EMmsOpenAndWaiting ) 
  1060     if ( iCurrentState != EMmsOpenAndWaiting ) 
  1064         {
  1061         {
  1065         LOGGER_WRITE_1("CMmsDataStore::DoDeleteItemL, invalid state %d.", iCurrentState);        
  1062         LOGGER_MSG_EC("CMmsDataStore::DoDeleteItemL, invalid state %d.", iCurrentState);        
  1066         }
  1063         }
  1067         
  1064         
  1068     // Check if this is a user folder
  1065     // Check if this is a user folder
  1069     if ( iMsvApi->FindUserFolderL( aUid ) )
  1066     if ( iMsvApi->FindUserFolderL( aUid ) )
  1070         {
  1067         {
  1071         LOGGER_WRITE("Folder");
  1068         LOGGER_WRITE("Folder");
  1072         error = DeleteAllMessagesInFolderL( aUid );
  1069         error = DeleteAllMessagesInFolderL( aUid );
  1073         if ( error != KErrNone )
  1070         if ( error != KErrNone )
  1074             {
  1071             {
  1075             User::RequestComplete( iCallerStatus, error );    
  1072             User::RequestComplete( iCallerStatus, error );    
  1076             LOGGER_WRITE_1("Deleting MMS messages in folder failed with %d", error); 
  1073             LOGGER_MSG_EC("Deleting MMS messages in folder failed with %d", error); 
  1077             return;
  1074             return;
  1078             }
  1075             }
  1079         error = iMsvApi->DeleteUserFolderL(aUid);  
  1076         error = iMsvApi->DeleteUserFolderL(aUid);  
  1080         if ( error != KErrNone )
  1077         if ( error != KErrNone )
  1081             {
  1078             {
  1082             // Note: folder is not deleted if contains other message items (like MMS)
  1079             // Note: folder is not deleted if contains other message items (like MMS)
  1083             // In this case DeleteUserFolderL returns KErrInUse.    
  1080             // In this case DeleteUserFolderL returns KErrInUse.    
  1084             LOGGER_WRITE_1("Deleting folder failed with %d", error); 
  1081             LOGGER_MSG_EC("Deleting folder failed with %d", error); 
  1085             }       
  1082             }       
  1086         }
  1083         }
  1087     else if ( MmsItemExists( aUid ) )
  1084     else if ( MmsItemExists( aUid ) )
  1088         {
  1085         {
  1089         // Tell CodecClient to delete this message
  1086         // Tell CodecClient to delete this message
  1090         error = iCodecClient->DeleteMM( aUid );
  1087         error = iCodecClient->DeleteMM( aUid );
  1091         if ( error != KErrNone )
  1088         if ( error != KErrNone )
  1092             {
  1089             {
  1093             User::RequestComplete( iCallerStatus, error );    
  1090             User::RequestComplete( iCallerStatus, error );    
  1094             LOGGER_WRITE_1("CMmsCodecClient::DeleteMM failed with %d", error);   
  1091             LOGGER_MSG_EC("CMmsCodecClient::DeleteMM failed with %d", error);   
  1095             return;
  1092             return;
  1096             }
  1093             }
  1097         // Inform ChangeFinder of the removed item
  1094         // Inform ChangeFinder of the removed item
  1098         iChangeFinder->ItemDeletedL( aUid );
  1095         iChangeFinder->ItemDeletedL( aUid );
  1099         }
  1096         }
  1100     else
  1097     else
  1101         {
  1098         {
  1102         User::RequestComplete( iCallerStatus, KErrNotFound ); 
  1099         User::RequestComplete( iCallerStatus, KErrNotFound ); 
  1103         LOGGER_WRITE_1("Item %d is not folder or MMS message", aUid);
  1100         LOGGER_MSG_EC("Item %d is not folder or MMS message", aUid);
  1104         return;
  1101         return;
  1105         }
  1102         }
  1106     
  1103     
  1107     LOGGER_WRITE_1("complete error: %d", error);
  1104     LOGGER_WRITE_1("complete error: %d", error);
  1108     // Signal we're done
  1105     // Signal we're done
  1141     *iCallerStatus = KRequestPending;
  1138     *iCallerStatus = KRequestPending;
  1142     
  1139     
  1143    // Check that we're in proper state
  1140    // Check that we're in proper state
  1144     if ( iCurrentState != EMmsOpenAndWaiting ) 
  1141     if ( iCurrentState != EMmsOpenAndWaiting ) 
  1145         {
  1142         {
  1146         LOGGER_WRITE_1("CMmsDataStore::DoDeleteAllItemsL, invalid state %d.", iCurrentState);
  1143         LOGGER_MSG_EC("CMmsDataStore::DoDeleteAllItemsL, invalid state %d.", iCurrentState);
  1147         }
  1144         }
  1148         
  1145         
  1149     TInt error(KErrNone);
  1146     TInt error(KErrNone);
  1150     TInt result(KErrNone);      
  1147     TInt result(KErrNone);      
  1151     
  1148     
  1186 // Deletes all items in the specified folder in message store
  1183 // Deletes all items in the specified folder in message store
  1187 // -----------------------------------------------------------------------------
  1184 // -----------------------------------------------------------------------------
  1188 TInt CMmsDataStore::DeleteAllMessagesInFolderL( TMsvId aId )
  1185 TInt CMmsDataStore::DeleteAllMessagesInFolderL( TMsvId aId )
  1189     {
  1186     {
  1190     LOGGER_ENTERFN("CMmsDataStore::DeleteAllMessagesInFolderL");
  1187     LOGGER_ENTERFN("CMmsDataStore::DeleteAllMessagesInFolderL");
  1191     LOGGER_WRITE_1("Folder: %d", aId);
  1188     LOGGER_MSG_EC("Folder: %d", aId);
  1192     
  1189     
  1193     TInt error(KErrNone);
  1190     TInt error(KErrNone);
  1194     
  1191     
  1195     // Get the root folder
  1192     // Get the root folder
  1196     CMsvEntry* msvEntry = iMsvSession->GetEntryL(aId);
  1193     CMsvEntry* msvEntry = iMsvSession->GetEntryL(aId);
  1207     
  1204     
  1208     // We are only interested of the MM content
  1205     // We are only interested of the MM content
  1209     for ( TInt index=0; index < messages->Count(); index++ )
  1206     for ( TInt index=0; index < messages->Count(); index++ )
  1210         {
  1207         {
  1211         id = messages->At( index );
  1208         id = messages->At( index );
  1212         LOGGER_WRITE_1("Message item %d:", id);
  1209         LOGGER_MSG_EC("Message item %d:", id);
  1213         
  1210         
  1214         error = iMsvSession->GetEntry( id, service, msg );
  1211         error = iMsvSession->GetEntry( id, service, msg );
  1215         if ( error != KErrNone )
  1212         if ( error != KErrNone )
  1216             {
  1213             {
  1217             LOGGER_WRITE_1("GetEntry failed with %d", error);
  1214             LOGGER_MSG_EC("GetEntry failed with %d", error);
  1218             break;
  1215             break;
  1219             }
  1216             }
  1220         
  1217         
  1221         if ( msg.iMtm == KUidMsgTypeMultimedia )
  1218         if ( msg.iMtm == KUidMsgTypeMultimedia )
  1222             {
  1219             {
  1223             error = iCodecClient->DeleteMM( id );
  1220             error = iCodecClient->DeleteMM( id );
  1224             if ( error != KErrNone )
  1221             if ( error != KErrNone )
  1225                 {
  1222                 {
  1226                 LOGGER_WRITE_1("DeleteMM failed with %d", error);
  1223                 LOGGER_MSG_EC("DeleteMM failed with %d", error);
  1227                 break;
  1224                 break;
  1228                 }
  1225                 }
  1229             // Update Change Finder
  1226             // Update Change Finder
  1230             iChangeFinder->ItemDeletedL( id );
  1227             iChangeFinder->ItemDeletedL( id );
  1231             LOGGER_WRITE("MMS message deleted");    
  1228             LOGGER_WRITE("MMS message deleted");    
  1263     LOGGER_ENTERFN("CMmsDataStore::DoAddedItems");  
  1260     LOGGER_ENTERFN("CMmsDataStore::DoAddedItems");  
  1264     
  1261     
  1265     // Ensure that we're in a proper state
  1262     // Ensure that we're in a proper state
  1266     if ( iCurrentState != EMmsOpenAndWaiting )
  1263     if ( iCurrentState != EMmsOpenAndWaiting )
  1267         {
  1264         {
  1268         LOGGER_WRITE_1("CMmsDataStore::DoAddedItems, invalid state %d.", iCurrentState);
  1265         LOGGER_MSG_EC("CMmsDataStore::DoAddedItems, invalid state %d.", iCurrentState);
  1269         }
  1266         }
  1270     
  1267     
  1271     TInt error(KErrNone);
  1268     TInt error(KErrNone);
  1272 
  1269 
  1273     // Clear new-items array
  1270     // Clear new-items array
  1274     iNewItems->Reset();
  1271     iNewItems->Reset();
  1275 
  1272   
  1276     // Set current snapshot, this will be compared against the old one      
       
  1277     // Search for new items
  1273     // Search for new items
  1278     TRAP( error, iChangeFinder->FindNewItemsL(*iNewItems) )
  1274     TRAP( error, iChangeFinder->FindNewItemsL(*iNewItems) )
  1279     if ( error != KErrNone )
  1275     if ( error != KErrNone )
  1280         {
  1276         {
  1281         LOGGER_WRITE_1("CMmsDataStore::DoAddedItems, iChangeFinder->FindNewItemsL leaved with %d.", error);
  1277         LOGGER_MSG_EC("CMmsDataStore::DoAddedItems, iChangeFinder->FindNewItemsL leaved with %d.", error);
  1282         }
  1278         }
  1283     
  1279     
  1284     LOGGER_WRITE_1("New item count: %d.", iNewItems->ItemCount());
  1280     LOGGER_MSG_EC("New item count: %d.", iNewItems->ItemCount());
  1285     LOGGER_LEAVEFN("CMmsDataStore::DoAddedItems");      
  1281     LOGGER_LEAVEFN("CMmsDataStore::DoAddedItems");      
  1286     
  1282     
  1287     return *iNewItems;
  1283     return *iNewItems;
  1288     }
  1284     }
  1289 
  1285 
  1296     LOGGER_ENTERFN("CMmsDataStore::DoDeletedItemsL");   
  1292     LOGGER_ENTERFN("CMmsDataStore::DoDeletedItemsL");   
  1297     
  1293     
  1298     // Ensure that we're in a proper state
  1294     // Ensure that we're in a proper state
  1299     if ( iCurrentState != EMmsOpenAndWaiting )
  1295     if ( iCurrentState != EMmsOpenAndWaiting )
  1300         {
  1296         {
  1301         LOGGER_WRITE_1("CMmsDataStore::DoDeletedItems, invalid state %d.", iCurrentState);
  1297         LOGGER_MSG_EC("CMmsDataStore::DoDeletedItems, invalid state %d.", iCurrentState);
  1302         }
  1298         }
  1303     
  1299     
  1304     TInt error(KErrNone);
  1300     TInt error(KErrNone);
  1305     
  1301     
  1306     // Clear deleted-items array
  1302     // Clear deleted-items array
  1308     
  1304     
  1309     // Search for deleted items
  1305     // Search for deleted items
  1310     TRAP( error, iChangeFinder->FindDeletedItemsL( *iDeletedItems ) );
  1306     TRAP( error, iChangeFinder->FindDeletedItemsL( *iDeletedItems ) );
  1311     if ( error != KErrNone )
  1307     if ( error != KErrNone )
  1312         {
  1308         {
  1313         LOGGER_WRITE_1("CMmsDataStore::DoDeletedItems, iChangeFinder->FindDeletedItemsL leaved with %d.", error);
  1309         LOGGER_MSG_EC("CMmsDataStore::DoDeletedItems, iChangeFinder->FindDeletedItemsL leaved with %d.", error);
  1314         }           
  1310         }           
  1315     
  1311     
  1316     LOGGER_WRITE_1("Deleted item count: %d.", iDeletedItems->ItemCount());
  1312     LOGGER_MSG_EC("Deleted item count: %d.", iDeletedItems->ItemCount());
  1317     LOGGER_LEAVEFN("CMmsDataStore::DoDeletedItemsL");
  1313     LOGGER_LEAVEFN("CMmsDataStore::DoDeletedItemsL");
  1318     return *iDeletedItems;
  1314     return *iDeletedItems;
  1319     }
  1315     }
  1320 
  1316 
  1321 // -----------------------------------------------------------------------------
  1317 // -----------------------------------------------------------------------------
  1340     LOGGER_ENTERFN("CMmsDataStore::DoModifiedItems");   
  1336     LOGGER_ENTERFN("CMmsDataStore::DoModifiedItems");   
  1341     
  1337     
  1342     // Ensure that we're in a proper state
  1338     // Ensure that we're in a proper state
  1343     if ( iCurrentState != EMmsOpenAndWaiting )
  1339     if ( iCurrentState != EMmsOpenAndWaiting )
  1344         {
  1340         {
  1345         LOGGER_WRITE_1("CMmsDataStore::DoModifiedItems, invalid state %d.", iCurrentState);
  1341         LOGGER_MSG_EC("CMmsDataStore::DoModifiedItems, invalid state %d.", iCurrentState);
  1346         }
  1342         }
  1347     
  1343     
  1348     TInt error(KErrNone);
  1344     TInt error(KErrNone);
  1349     
  1345     
  1350     // Clear updated-items array
  1346     // Clear updated-items array
  1352     
  1348     
  1353     // Search for updated items
  1349     // Search for updated items
  1354     TRAP( error, iChangeFinder->FindChangedItemsL( *iUpdatedItems ) )
  1350     TRAP( error, iChangeFinder->FindChangedItemsL( *iUpdatedItems ) )
  1355     if ( error != KErrNone )
  1351     if ( error != KErrNone )
  1356         {
  1352         {
  1357         LOGGER_WRITE_1("CMmsDataStore::DoModifiedItems, iChangeFinder->FindChangedItemsL leaved with %d.", error);
  1353         LOGGER_MSG_EC("CMmsDataStore::DoModifiedItems, iChangeFinder->FindChangedItemsL leaved with %d.", error);
  1358         }
  1354         }
  1359     
  1355     
  1360     LOGGER_WRITE_1("Modified item count: %d.", iUpdatedItems->ItemCount());
  1356     LOGGER_MSG_EC("Modified item count: %d.", iUpdatedItems->ItemCount());
  1361     LOGGER_LEAVEFN("CMmsDataStore::DoModifiedItems");       
  1357     LOGGER_LEAVEFN("CMmsDataStore::DoModifiedItems");       
  1362     return *iUpdatedItems;
  1358     return *iUpdatedItems;
  1363     }
  1359     }
  1364 
  1360 
  1365 // -----------------------------------------------------------------------------
  1361 // -----------------------------------------------------------------------------
  1371     LOGGER_ENTERFN("CMmsDataStore::DoMovedItems");  
  1367     LOGGER_ENTERFN("CMmsDataStore::DoMovedItems");  
  1372     
  1368     
  1373     // Ensure that we're in a proper state
  1369     // Ensure that we're in a proper state
  1374     if ( iCurrentState != EMmsOpenAndWaiting )
  1370     if ( iCurrentState != EMmsOpenAndWaiting )
  1375         {
  1371         {
  1376         LOGGER_WRITE_1("CMmsDataStore::DoMovedItems, invalid state %d.", iCurrentState);
  1372         LOGGER_MSG_EC("CMmsDataStore::DoMovedItems, invalid state %d.", iCurrentState);
  1377         }
  1373         }
  1378     
  1374     
  1379     TInt error(KErrNone);
  1375     TInt error(KErrNone);
  1380     
  1376     
  1381     // Clear moved-items array
  1377     // Clear moved-items array
  1383     
  1379     
  1384     // Search for moved items
  1380     // Search for moved items
  1385     TRAP( error, iChangeFinder->FindMovedItemsL( *iMovedItems ) );
  1381     TRAP( error, iChangeFinder->FindMovedItemsL( *iMovedItems ) );
  1386     if ( error != KErrNone )
  1382     if ( error != KErrNone )
  1387         {
  1383         {
  1388         LOGGER_WRITE_1("CMmsDataStore::DoMovedItems, iChangeFinder->FindMovedItemsL leaved with %d.", error);
  1384         LOGGER_MSG_EC("CMmsDataStore::DoMovedItems, iChangeFinder->FindMovedItemsL leaved with %d.", error);
  1389         }
  1385         }
  1390     
  1386     
  1391     LOGGER_WRITE_1("Moved item count: %d.", iMovedItems->ItemCount());
  1387     LOGGER_MSG_EC("Moved item count: %d.", iMovedItems->ItemCount());
  1392     LOGGER_LEAVEFN("CMmsDataStore::DoMovedItems");
  1388     LOGGER_LEAVEFN("CMmsDataStore::DoMovedItems");
  1393     return *iMovedItems;    
  1389     return *iMovedItems;    
  1394     }
  1390     }
  1395 
  1391 
  1396 // -----------------------------------------------------------------------------
  1392 // -----------------------------------------------------------------------------
  1406     *iCallerStatus = KRequestPending;
  1402     *iCallerStatus = KRequestPending;
  1407     
  1403     
  1408     // Check that we're in proper state
  1404     // Check that we're in proper state
  1409     if ( iCurrentState != EMmsOpenAndWaiting ) 
  1405     if ( iCurrentState != EMmsOpenAndWaiting ) 
  1410         {
  1406         {
  1411         LOGGER_WRITE_1("CMmsDataStore::DoResetChangeInfoL, invalid state %d.", iCurrentState);
  1407         LOGGER_MSG_EC("CMmsDataStore::DoResetChangeInfoL, invalid state %d.", iCurrentState);
  1412         }   
  1408         }   
  1413             
  1409             
  1414     // Reset change info in ChangeFinder
  1410     // Reset change info in ChangeFinder
  1415     iChangeFinder->ResetL();
  1411     iChangeFinder->ResetL();
  1416     iHasHistory = EFalse;
  1412     iHasHistory = EFalse;
  1434     *iCallerStatus = KRequestPending;
  1430     *iCallerStatus = KRequestPending;
  1435     
  1431     
  1436     // Ensure that we're in a proper state
  1432     // Ensure that we're in a proper state
  1437     if ( iCurrentState != EMmsOpenAndWaiting ) 
  1433     if ( iCurrentState != EMmsOpenAndWaiting ) 
  1438         {
  1434         {
  1439         LOGGER_WRITE_1("CMmsDataStore::DoCommitChangeInfoL, invalid state %d.", iCurrentState);
  1435         LOGGER_MSG_EC("CMmsDataStore::DoCommitChangeInfoL, invalid state %d.", iCurrentState);
  1440         }
  1436         }
  1441 
  1437 
  1442     // Notify ChangeFinder
  1438     // Notify ChangeFinder
  1443     iChangeFinder->CommitChangesL(aItems);
  1439     iChangeFinder->CommitChangesL(aItems);
  1444     iHasHistory = ETrue;
  1440     iHasHistory = ETrue;
  1463     *iCallerStatus = KRequestPending;
  1459     *iCallerStatus = KRequestPending;
  1464     
  1460     
  1465     // Ensure that we're in a proper state
  1461     // Ensure that we're in a proper state
  1466     if ( iCurrentState != EMmsOpenAndWaiting ) 
  1462     if ( iCurrentState != EMmsOpenAndWaiting ) 
  1467         {
  1463         {
  1468         LOGGER_WRITE_1("CMmsDataStore::DoCommitChangeInfoL, invalid state %d.", iCurrentState);
  1464         LOGGER_MSG_EC("CMmsDataStore::DoCommitChangeInfoL, invalid state %d.", iCurrentState);
  1469         }
  1465         }
  1470     
  1466     
  1471     // Notify ChangeFinder
  1467     // Notify ChangeFinder
  1472     iChangeFinder->CommitChangesL();
  1468     iChangeFinder->CommitChangesL();
  1473     iHasHistory = ETrue;
  1469     iHasHistory = ETrue;
  1627         else
  1623         else
  1628             {
  1624             {
  1629             error = iCodecClient->GetNextDataPart( iReadDataChunk, iLastDataChunk );
  1625             error = iCodecClient->GetNextDataPart( iReadDataChunk, iLastDataChunk );
  1630             if ( error != KErrNone )
  1626             if ( error != KErrNone )
  1631                 {
  1627                 {
  1632                 LOGGER_WRITE_1("iCodecClient->GetNextDataPart failed with %d", error);
  1628                 LOGGER_MSG_EC("iCodecClient->GetNextDataPart failed with %d", error);
  1633                 return error;
  1629                 return error;
  1634                 }
  1630                 }
  1635             else
  1631             else
  1636                 {
  1632                 {
  1637                 LOGGER_WRITE_1("iCodecClient->GetNextDataPart succeeded, length %d", iReadDataChunk.Length());
  1633                 LOGGER_MSG_EC("iCodecClient->GetNextDataPart succeeded, length %d", iReadDataChunk.Length());
  1638                 }   
  1634                 }   
  1639             }   
  1635             }   
  1640         }
  1636         }
  1641         
  1637         
  1642     TInt left = iReadDataChunk.Length() - iReadPosition;    
  1638     TInt left = iReadDataChunk.Length() - iReadPosition;    
  1759         if ( folderId != KMsvMyFoldersTemplatesFolderId )
  1755         if ( folderId != KMsvMyFoldersTemplatesFolderId )
  1760             {
  1756             {
  1761             error = DeleteAllMessagesInFolderL(folderId);
  1757             error = DeleteAllMessagesInFolderL(folderId);
  1762             if ( error != KErrNone )
  1758             if ( error != KErrNone )
  1763                 {
  1759                 {
  1764                 LOGGER_WRITE_1("Deleting messages in folder failed with %d", error); 
  1760                 LOGGER_MSG_EC("Deleting messages in folder failed with %d", error); 
  1765                 result = error;
  1761                 result = error;
  1766                 }
  1762                 }
  1767             error = iMsvApi->DeleteUserFolderL( folderId );
  1763             error = iMsvApi->DeleteUserFolderL( folderId );
  1768             if ( error != KErrNone && error != KErrInUse )
  1764             if ( error != KErrNone && error != KErrInUse )
  1769                 {
  1765                 {
  1770                 // Note: folder is not deleted if contains other message items (like MMS)
  1766                 // Note: folder is not deleted if contains other message items (like MMS)
  1771                 // In this case DeleteUserFolderL returns KErrInUse.
  1767                 // In this case DeleteUserFolderL returns KErrInUse.
  1772                 LOGGER_WRITE_1("iMsvApi->DeleteUserFolderL failed with %d", error);
  1768                 LOGGER_MSG_EC("iMsvApi->DeleteUserFolderL failed with %d", error);
  1773                 result = error;
  1769                 result = error;
  1774                 }
  1770                 }
  1775             }
  1771             }
  1776         }
  1772         }
  1777     
  1773