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