--- a/ipsservices/ipssosplugin/src/ipsplgeventhandler.cpp Mon May 03 12:23:15 2010 +0300
+++ b/ipsservices/ipssosplugin/src/ipsplgeventhandler.cpp Fri May 14 15:41:10 2010 +0300
@@ -105,6 +105,7 @@
iIPSSettingsObservers.ResetAndDestroy();
iIPSSettingsObservers.Close();
iPropertyObservers.Close();
+// <qmail> iConnOpCallbacks, iSettingsApi members removed
iImapFolderIds.Close();
}
@@ -127,11 +128,11 @@
void CIpsPlgEventHandler::ConstructL( )
{
FUNC_LOG;
- // <qmail>
+// <qmail>
// commented out from qmail when extented settings
// cen rep not exist in environment
//iCenRep = CRepository::NewL( KCRUidExtendedSettingsUid );
- // </qmail>
+// </qmail>
iPluginId = iBasePlugin.PluginId();
RegisterPropertyObserverL( this );
}
@@ -142,6 +143,7 @@
{
FUNC_LOG;
iSession = aSession;
+// <qmail> iSettingsApi member removed
// this collects all folderids to array from mailboxes that
// have registered observers, this is need to do here because
@@ -245,7 +247,8 @@
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
-void CIpsPlgEventHandler::NotifyPropertyEventL( TIpsPlgPropertyEvent aEvent )
+void CIpsPlgEventHandler::NotifyPropertyEventL(
+ TIpsPlgPropertyEvent aEvent )
{
FUNC_LOG;
INFO_1("pluginid == 0x%x", iPluginId);
@@ -523,6 +526,7 @@
event.iArg3 = aArg3;
RPointerArray<MFSMailEventObserver> observers;
+ CleanupClosePushL( observers );
if( aEvent == TFSEventNewMailbox ||
aEvent == TFSEventMailboxRenamed ||
@@ -543,14 +547,16 @@
}
for( TInt i = 0; i < observers.Count(); ++i )
{
- observers[i]->EventL(
+ // ignore leave so that other observers get event even if
+ // one leaves
+ TRAP_IGNORE(observers[i]->EventL(
event.iEvent,
event.iAccountId,
event.iArg1,
event.iArg2,
- event.iArg3 );
+ event.iArg3 ));
}
- observers.Close();
+ CleanupStack::PopAndDestroy( &observers );
}
// ----------------------------------------------------------------------------
@@ -640,7 +646,19 @@
SendDelayedEventL( event, mbox,
arg1, arg2 , arg3 );
}
- if ( type == KUidMsvMessageEntry )
+
+ // discard any new mail events if message is marked as deleted in imap
+ const TMsvEmailEntry& emlEntry(tNew);
+ TBool isMarkedAsDeleted = EFalse;
+ if ( mbox.PluginId() == KIpsPlgImap4PluginUid
+ && (EDisconnectedDeleteOperation == emlEntry.DisconnectedOperation()
+ || emlEntry.DeletedIMAP4Flag()) )
+ {
+ isMarkedAsDeleted = ETrue;
+ }
+
+
+ if ( type == KUidMsvMessageEntry && !isMarkedAsDeleted )
{
TMsvId* parent = static_cast<TMsvId*>(aArg2);
// NOTE: assumed that event contains only one new message
@@ -674,6 +692,7 @@
// set entries array pointer
RArray<TFSMailMsgId> array(KEventGranularity);
+ CleanupClosePushL( array );
FillFSMessageArray(
array,
@@ -688,7 +707,7 @@
SendDelayedEventL( event, mbox,
arg1, arg2 , arg3 );
- array.Close();
+ CleanupStack::PopAndDestroy( &array );
}
else if ( type == KUidMsvFolderEntry )
{
@@ -697,6 +716,7 @@
// set entries array pointer
RArray<TFSMailMsgId> array(1);
+ CleanupClosePushL( array );
array.Append( SymId2FsId( tNew ) );
arg1 = &array;
@@ -708,7 +728,7 @@
SendDelayedEventL( event, mbox,
arg1, arg2 , arg3 );
- array.Close();
+ CleanupStack::PopAndDestroy( &array );
if( tNew.iMtm.iUid == KSenduiMtmImap4UidValue )
{
@@ -745,6 +765,7 @@
TFSMailEvent event( TFSMailboxUnavailable );
RArray<TFSMailMsgId> array(KEventGranularity);
+ CleanupClosePushL( array );
FillFSMessageArray(
array,
static_cast<const CMsvEntrySelection*>(aArg1),
@@ -788,7 +809,7 @@
arg2,
arg3 );
- array.Close();
+ CleanupStack::PopAndDestroy( &array );
// set null to prevent later usage in framework side
// causes kern exec 3 panic...
arg1 = arg2 = arg3 = NULL;
@@ -886,9 +907,9 @@
// message in remote folder (inbox)
TFSMailMsgId mbox(iPluginId, tEntry.iServiceId );
RArray<TFSMailMsgId> array( KEventGranularity );
+ CleanupClosePushL( array );
TFSMailMsgId parentId( iPluginId, tEntry.Id() );
-
if ( tEntry.iMtm.iUid == KSenduiMtmImap4UidValue )
{
isFolderId = MatchFolderIdFound( deletedId );
@@ -927,7 +948,7 @@
arg3 );
}
- array.Close();
+ CleanupStack::PopAndDestroy( &array );
}
else if ( tEntry.iMtm.iUid == KSenduiMtmSmtpUidValue )
{
@@ -970,6 +991,7 @@
}
RArray<TFSMailMsgId> array(1);
+ CleanupClosePushL( array );
array.Append( msg );
arg1 = &array;
arg2 = &parent;
@@ -980,7 +1002,7 @@
arg1,
arg2,
arg3 );
- array.Close();
+ CleanupStack::PopAndDestroy( &array );
}
else
{
@@ -1003,6 +1025,8 @@
TAny* arg2=NULL;
TAny* arg3=NULL;
+ TInt errorCode( KErrNone ); // <qmail>
+
TUid uId;
TMsvEntry tChanged;
if ( !IsEventFromIpsSourceL( aArg1, uId, tChanged ) )
@@ -1019,6 +1043,7 @@
TFSMailEvent event = static_cast<TFSMailEvent>( KErrNotFound );
RArray<TFSMailMsgId> array(1);
+ CleanupClosePushL( array );
if ( tChanged.iType == KUidMsvMessageEntry )
{
@@ -1074,7 +1099,18 @@
}
else
{
+ // <qmail> add error code
event = TFSEventMailboxOffline;
+ const CMsvEntrySelection* selection = static_cast<CMsvEntrySelection*>( aArg1 );
+ TFSMailMsgId mailboxId( iPluginId, selection->At(0) );
+
+ if ( !(iBasePlugin.HasOperations( mailboxId )) && iBasePlugin.ActivityTimerL( mailboxId ).IsActive() )
+ {
+ // considering this disconnection event as unexpected
+ errorCode = KErrDisconnected;
+ arg1 = &errorCode;
+ }
+ // </qmail>
}
}
else if( IsAccountNameChangeL( aArg1, aArg2 ) )
@@ -1108,7 +1144,7 @@
SendDelayedEventL( event,
mbox, arg1, arg2, arg3 );
}
- array.Close();
+ CleanupStack::PopAndDestroy( &array );
// set null to prevent later usage in framework side
// causes kern exec 3 panic...
arg1 = arg2 = arg3 = NULL;
@@ -1318,14 +1354,14 @@
}
else
{
- // <qmail>
+// <qmail>
// commented out from qmail when extented settings
// cen rep not exist in environment
/*CIpsPlgSettingsObserver* obs =
CIpsPlgSettingsObserver::NewL( aAccount, *iCenRep, *this );
obs->SetKeyAndActivateL( aSettingKey, observers );
iIPSSettingsObservers.AppendL( obs );*/
- // </qmail>
+// </qmail>
}
observers.Close();
}
@@ -1520,6 +1556,7 @@
TSSMailSyncState CIpsPlgEventHandler::ConvertCompletionCode( TInt aCompletionCode )
{
FUNC_LOG;
+ INFO_1("completioncode == %d", aCompletionCode);
switch ( aCompletionCode )
{
case KErrNone:
@@ -1531,6 +1568,10 @@
case KPop3InvalidLogin:
case KPop3InvalidApopLogin:
return PasswordNotVerified;
+ case -5120: // (DndTimedOut) wrong server name in settings
+ case KErrHostUnreach: // wrong port number
+ return ServerConnectionError;
+ case KErrTimedOut:
default:
return SyncError;
}
@@ -1717,3 +1758,6 @@
// SendDelayedEventL( event, aMailboxId, &state, NULL , NULL );
// }
// </qmail>
+
+// End of File
+