--- a/email/imap4mtm/imapprotocolcontroller/bwins/impapprotocolcontrollerU.DEF Tue Sep 14 12:19:12 2010 +0530
+++ b/email/imap4mtm/imapprotocolcontroller/bwins/impapprotocolcontrollerU.DEF Tue Sep 14 22:54:56 2010 +0530
@@ -32,4 +32,5 @@
?WaitForBackground@CImapProtocolController@@QAEXAAVTRequestStatus@@@Z @ 31 NONAME ; void CImapProtocolController::WaitForBackground(class TRequestStatus &)
?GetAccessPointIdForConnection@CImapProtocolController@@QBEHAAK@Z @ 32 NONAME ; int CImapProtocolController::GetAccessPointIdForConnection(unsigned long &) const
?UpdateFlagL@CImapProtocolController@@QAEXAAVTRequestStatus@@@Z @ 33 NONAME ; void CImapProtocolController::UpdateFlagL(class TRequestStatus &)
+ ?UpdateEntriesFlagL@CImapProtocolController@@QAEXAAVTRequestStatus@@ABVCMsvEntrySelection@@H@Z @ 34 NONAME ; void CImapProtocolController::UpdateEntriesFlagL(class TRequestStatus &, class CMsvEntrySelection const &, int)
--- a/email/imap4mtm/imapprotocolcontroller/eabi/impapprotocolcontrollerU.DEF Tue Sep 14 12:19:12 2010 +0530
+++ b/email/imap4mtm/imapprotocolcontroller/eabi/impapprotocolcontrollerU.DEF Tue Sep 14 22:54:56 2010 +0530
@@ -77,4 +77,5 @@
_ZTVN4Meta13TMetaVarLen16I6RBuf16EE @ 76 NONAME ABSENT
_ZNK23CImapProtocolController29GetAccessPointIdForConnectionERm @ 77 NONAME
_ZN23CImapProtocolController11UpdateFlagLER14TRequestStatus @ 78 NONAME
+ _ZN23CImapProtocolController18UpdateEntriesFlagLER14TRequestStatusRK18CMsvEntrySelectioni @ 79 NONAME
--- a/email/imap4mtm/imapprotocolcontroller/inc/cimapprotocolcontroller.h Tue Sep 14 12:19:12 2010 +0530
+++ b/email/imap4mtm/imapprotocolcontroller/inc/cimapprotocolcontroller.h Tue Sep 14 22:54:56 2010 +0530
@@ -115,6 +115,7 @@
IMPORT_C TImap4CompoundProgress Progress();
IMPORT_C void CancelAndCleanup();
IMPORT_C void UpdateFlagL(TRequestStatus& aStatus);
+ IMPORT_C void UpdateEntriesFlagL(TRequestStatus& aStatus,const CMsvEntrySelection& aSourceSel, TBool aFlagChanged);
// mobility API from MImMobileServer
void PrepareForNewCarrier(TImMobilityAction aAction, TBool aIsSeamless);
--- a/email/imap4mtm/imapprotocolcontroller/inc/cimapupdateflagoperation.h Tue Sep 14 12:19:12 2010 +0530
+++ b/email/imap4mtm/imapprotocolcontroller/inc/cimapupdateflagoperation.h Tue Sep 14 22:54:56 2010 +0530
@@ -43,6 +43,12 @@
CMsvServerEntry& aServerEntry,
CImapSettings& aImapSettings
);
+ static CImapUpdateFlagOperation* NewL(CImapSyncManager& aSyncManager,
+ CMsvServerEntry& aServerEntry,
+ CImapSettings& aImapSettings,
+ const CMsvEntrySelection& aSourceSel,
+ TBool aFlagChanged
+ );
virtual void StartOperation(TRequestStatus& aStatus, CImapSession& aSession);
//////////// virtual void StartOperation(TRequestStatus& aStatus);//
@@ -56,6 +62,7 @@
CImapSettings& aImapSettings
);
void ConstructL();
+ void ConstructL(const CMsvEntrySelection& aSourceSel,TBool aFlagChanged);
TBool DoRunLoopL();
void DoCancel();
@@ -67,6 +74,13 @@
RArray<TUint> iMessageUids;
RArrayMessageFlagInfo iFlagInfoResponseArray;
+
+ CMsvEntrySelection* iSourceSel;
+ TBool iMarkFlag;
+ TBool iEntrySelection;
+ TInt iProgressMsgsToDo;
+ TInt iProgressMsgsDone;
+
};
#endif // __CIMAPUPDATEFLAGOPERATION_H__
--- a/email/imap4mtm/imapprotocolcontroller/src/cimapprotocolcontroller.cpp Tue Sep 14 12:19:12 2010 +0530
+++ b/email/imap4mtm/imapprotocolcontroller/src/cimapprotocolcontroller.cpp Tue Sep 14 22:54:56 2010 +0530
@@ -3510,17 +3510,49 @@
__LOG_TEXT(KDefaultLog, "CImapProtocolController::UpdateFlagL()");
__ASSERT_DEBUG(iImapCompound==NULL, TImapServerPanic::ImapPanic(TImapServerPanic::ECreateCompoundIsNotNull));
ResetProgress();
- if (!CompleteIfBackgroundOpInProgress(aStatus))
- {
- iImapCompound = CImapUpdateFlagOperation::NewL(*iImapSyncManager,
- iEntry,
- *iImapSettings
- );
- iRequestedOp = EUpdateFlag;
- StartPrimaryOperation();
- Queue(aStatus);
- SetActive();
- }
- }
-
+ if (!CompleteIfBackgroundOpInProgress(aStatus))
+ {
+
+ iImapCompound = CImapUpdateFlagOperation::NewL(*iImapSyncManager,
+ iEntry,
+ *iImapSettings
+ );
+
+ iRequestedOp = EUpdateFlag;
+ StartPrimaryOperation();
+ Queue(aStatus);
+ SetActive();
+ }
+
+ }
+
+
+
+/**
+Updates the selection of messages read/unread status from the remote server.
+@param aStatus
+*/
+EXPORT_C void CImapProtocolController::UpdateEntriesFlagL( TRequestStatus& aStatus,const CMsvEntrySelection& aSourceSel ,TBool aFlagChanged)
+
+ {
+ __LOG_TEXT(KDefaultLog, "CImapProtocolController::UpdateEntriesFlagL()");
+ __ASSERT_DEBUG(iImapCompound==NULL, TImapServerPanic::ImapPanic(TImapServerPanic::ECreateCompoundIsNotNull));
+ ResetProgress();
+
+ if (!CompleteIfBackgroundOpInProgress(aStatus))
+ {
+
+ iImapCompound = CImapUpdateFlagOperation::NewL(*iImapSyncManager,
+ iEntry,
+ *iImapSettings,
+ aSourceSel,
+ aFlagChanged);
+ iRequestedOp = EUpdateFlag;
+ StartPrimaryOperation();
+ Queue(aStatus);
+ SetActive();
+ }
+
+ }
+
--- a/email/imap4mtm/imapprotocolcontroller/src/cimapupdateflagoperation.cpp Tue Sep 14 12:19:12 2010 +0530
+++ b/email/imap4mtm/imapprotocolcontroller/src/cimapupdateflagoperation.cpp Tue Sep 14 22:54:56 2010 +0530
@@ -39,8 +39,7 @@
CImapUpdateFlagOperation::~CImapUpdateFlagOperation()
{
-
-
+ delete iSourceSel;
iMessageUids.Reset();
iFlagInfoResponseArray.Reset();
}
@@ -66,6 +65,40 @@
CActiveScheduler::Add(this);
}
+// NewL for Selection
+CImapUpdateFlagOperation* CImapUpdateFlagOperation::NewL(CImapSyncManager& aSyncManager,
+ CMsvServerEntry& aServerEntry,
+ CImapSettings& aImapSettings,
+ const CMsvEntrySelection& aSourceSel , TBool aFlagChanged)
+
+ {
+
+ CImapUpdateFlagOperation* self = new (ELeave) CImapUpdateFlagOperation(aSyncManager,
+ aServerEntry,
+ aImapSettings);
+ CleanupStack::PushL(self);
+ self->ConstructL(aSourceSel,aFlagChanged);
+ CleanupStack::Pop(self);
+ return self;
+ }
+//// ConstructL for Selection
+void CImapUpdateFlagOperation::ConstructL(const CMsvEntrySelection& aSourceSel, TBool aFlagChanged)
+ {
+
+ iSourceSel=new (ELeave) CMsvEntrySelection;
+ CheckSelectionL(aSourceSel, iSourceSel, ETrue, EFalse, EFalse, ETrue);
+
+ // Initialise the progress counters
+ iProgressMsgsToDo=iSourceSel->Count();
+ iProgressMsgsDone=0;
+ iMarkFlag = aFlagChanged;
+ iEntrySelection = ETrue;
+ // Add to the active scheduler
+ CActiveScheduler::Add(this);
+ }
+
+
+
void CImapUpdateFlagOperation::StartOperation(TRequestStatus& aStatus, CImapSession& aSession)
//void CImapUpdateFlagOperation::StartOperation(TRequestStatus& aStatus)
{
@@ -87,39 +120,80 @@
SetCurrentStep();
switch (iCurrentStep)
{
+ case EUpdateFlag:
+ {
+ HBufC8* uidSeq = NULL;
+ if(!iEntrySelection) //Entry iMarkFlag is Flase
+ {
+ TMsvEmailEntry entry = iServerEntry.Entry();
+ TUint id = entry.UID();
+ iMessageUids.AppendL(id);
+ if(entry.Unread())
+ {
+ entry.SetSeenIMAP4Flag(EFalse);
+ }
+ else
+ {
+ entry.SetSeenIMAP4Flag(ETrue);
+ }
+
+
+ User::LeaveIfError(iServerEntry.ChangeEntry(entry));
+
+ uidSeq = CImapSession::CreateSequenceSetLC(iMessageUids);
+
+ // finished with the UID array. Clear it.
+ iMessageUids.Reset();
+ if(entry.SeenIMAP4Flag())
+ {
+ // issue the store command
+ iSession->StoreL(iStatus, uidSeq->Des(), KImapAddFlags, KImapFlagSeen, ETrue, iFlagInfoResponseArray);
+
+ }
+ else
+ {
+ // issue the store command
+ iSession->StoreL(iStatus, uidSeq->Des(), KStoreFlagsClearCommand, KImapFlagSeen, ETrue, iFlagInfoResponseArray);
+ }
+ }
+ else //Selection iMarkFlag is Trure
+ {
+ TMsvEntry *aNewEntry1;
+
+ TInt count = iSourceSel->Count();
+ while (count--)
+ {
+ iServerEntry.GetEntryFromId(iSourceSel->At(count), aNewEntry1);
+ TMsvEmailEntry entry(*aNewEntry1);
+ iMessageUids.AppendL(entry.UID());
+
+ if(iMarkFlag) // True means Unread
+ {
+ entry.SetSeenIMAP4Flag(EFalse);
+ }
+ else
+ {
+ entry.SetSeenIMAP4Flag(ETrue);
+ }
+ SetEntryL((*iSourceSel)[count]);
+ User::LeaveIfError(iServerEntry.ChangeEntry(entry));
+ }// end of while
+
+ uidSeq = CImapSession::CreateSequenceSetLC(iMessageUids);
- case EUpdateFlag:
- {
- TMsvEmailEntry entry = iServerEntry.Entry();
- TUint id = entry.UID();
- iMessageUids.AppendL(id);
- if(entry.Unread())
- {
- entry.SetSeenIMAP4Flag(EFalse);
- }
- else
- {
- entry.SetSeenIMAP4Flag(ETrue);
- }
-
-
- User::LeaveIfError(iServerEntry.ChangeEntry(entry));
-
- HBufC8* uidSeq = CImapSession::CreateSequenceSetLC(iMessageUids);
-
- // finished with the UID array. Clear it.
- iMessageUids.Reset();
- if(entry.SeenIMAP4Flag())
- {
- // issue the store command
- iSession->StoreL(iStatus, uidSeq->Des(), KImapAddFlags, KImapFlagSeen, ETrue, iFlagInfoResponseArray);
-
- }
- else
- {
- // issue the store command
- iSession->StoreL(iStatus, uidSeq->Des(), KStoreFlagsClearCommand, KImapFlagSeen, ETrue, iFlagInfoResponseArray);
- }
+ // finished with the UID array. Clear it.
+ iMessageUids.Reset();
+ if(!iMarkFlag) //read
+ {
+ // issue the store command
+ iSession->StoreL(iStatus, uidSeq->Des(), KImapAddFlags, KImapFlagSeen, ETrue, iFlagInfoResponseArray);
+ }
+ else //Unread
+ {
+ // issue the store command
+ iSession->StoreL(iStatus, uidSeq->Des(), KStoreFlagsClearCommand, KImapFlagSeen, ETrue, iFlagInfoResponseArray);
+ }
+ } //End of else (Selection)
iProgressState = TImap4GenericProgress::EBusy;
CleanupStack::PopAndDestroy(uidSeq);
--- a/email/imap4mtm/imapservermtm/inc/cimap4servermtm.h Tue Sep 14 12:19:12 2010 +0530
+++ b/email/imap4mtm/imapservermtm/inc/cimap4servermtm.h Tue Sep 14 22:54:56 2010 +0530
@@ -119,7 +119,7 @@
TRequestStatus& aStatus );
TBool CommandExpected();
const TDesC8& Progress();
-
+ TInt ChangeEntriesL(const CMsvEntrySelection& aSelection, TInt aMark, TRequestStatus& aStatus);
protected:
IMPORT_C TInt Extension_(TUint aExtensionId, TAny *&a0, TAny *a1);
--- a/email/imap4mtm/imapservermtm/src/cimap4servermtm.cpp Tue Sep 14 12:19:12 2010 +0530
+++ b/email/imap4mtm/imapservermtm/src/cimap4servermtm.cpp Tue Sep 14 22:54:56 2010 +0530
@@ -504,6 +504,65 @@
/**
+ChangeEntriesL update the message read/Unread status in Local and remote,
+using the IMAP COPY command.
+
+@param aSelection The selection of message TMsvIds that are changed.
+@param aMark The selection marked as read or unread.If 1 is Unread 0 for read.
+@param aStatus The request status to be completed when the operation has finished.
+*/
+
+TInt CImap4ServerMtm::ChangeEntriesL( const CMsvEntrySelection& aSelection, TInt aMark, TRequestStatus& aStatus )
+ {
+ __LOG_TEXT(KDefaultLog, "CImap4ServerMtm::ChangeEntriesL()");
+
+ TMsvEntry* aNewEntry1 = new (ELeave) TMsvEntry;
+ CleanupStack::PushL(aNewEntry1);
+
+ TBool flagChanged;
+
+ if(aMark == 0)
+ flagChanged = EFalse; //Selection to update as Read.
+ else
+ flagChanged = ETrue; ////Selection to update as UnRead.
+
+ TInt count = aSelection.Count();
+ while(count--)
+ {
+ iServerEntry->GetEntryFromId(aSelection[count],aNewEntry1);
+ TMsvEmailEntry entry(*aNewEntry1);
+ if(flagChanged)
+ {
+ entry.SetSeenIMAP4Flag(EFalse);
+ }
+ else
+ {
+ entry.SetSeenIMAP4Flag(ETrue);
+ }
+ //Local Updation.
+ User::LeaveIfError(iServerEntry->SetEntry(entry.Id()));
+ User::LeaveIfError(iServerEntry->ChangeEntry(entry));
+ }
+ //if not offline
+ if (iImapProtocolController->Connected())
+ {
+ //to update read/unread flags at remote server
+ iImapProtocolController->UpdateEntriesFlagL(iStatus,aSelection,flagChanged);
+ iState= EMtmStateUpdateFlag;
+ Queue(aStatus);
+ SetActive();
+ }
+ else
+ {
+ Queue(aStatus);
+ User::RequestComplete(iRequest, KErrNone);
+ }
+ CleanupStack::PopAndDestroy(1); //aNewEntry1
+ return KErrNone;
+ }
+
+
+/**
Performs the IMAP specific MTM commands.
@param aSelection A selection of messages. The use is dependant upon
--- a/email/imap4mtm/imapsession/inc/cimapatomparser.h Tue Sep 14 12:19:12 2010 +0530
+++ b/email/imap4mtm/imapsession/inc/cimapatomparser.h Tue Sep 14 22:54:56 2010 +0530
@@ -137,6 +137,7 @@
Log id of owning session
*/
TInt iLogId;
+ TInt iAttachmentLength;
};
#endif // __CIMAPATOMPARSER_H__
--- a/email/imap4mtm/imapsession/src/cimapatomparser.cpp Tue Sep 14 12:19:12 2010 +0530
+++ b/email/imap4mtm/imapsession/src/cimapatomparser.cpp Tue Sep 14 22:54:56 2010 +0530
@@ -125,6 +125,7 @@
// Add to the parsed buffer
void CImapAtomParser::BufferAppendL(const TChar aChar)
{
+ ++iAttachmentLength;
// Check for internal programming error
__ASSERT_DEBUG(iBuffer != NULL, TImapServerPanic::ImapPanic(TImapServerPanic::EAtomParserBufferIsNull));
@@ -337,6 +338,13 @@
// Note that the CRLF will already have been stripped out by CImapSession
// so we are treating a CR on its own as whitespace
{
+ // if white space is there in the attched file's name,it will add to the buffer.
+ if( iAttachmentLength < iLiteralLength)
+ {
+ BufferAppendL(octet);
+ break;
+ }
+
AddAtomL();
// Either go back to looking for an atom, or a LF
@@ -445,6 +453,7 @@
// Skipping...
if (--iLiteralSkip==0)
{
+ iAttachmentLength = 0;
// Is literal 0 bytes long?
if (iLiteralLength==0)
{
--- a/layers.sysdef.xml Tue Sep 14 12:19:12 2010 +0530
+++ b/layers.sysdef.xml Tue Sep 14 22:54:56 2010 +0530
@@ -13,8 +13,18 @@
bldFile="&layer_real_source_path;"
name="messaging"
proFile="messaging.pro"
- qmakeArgs="-r" />
+ qmakeArgs="-r" />
+ <unit unitID="mmssettings" bldFile="&layer_real_source_path;/mmsengine/mmssettings/group" mrp="mmsengine/mmssettings/group/messaging_mmssettings.mrp" name="mmssettings"/>
+ <unit unitID="mmsconf" bldFile="&layer_real_source_path;/mmsengine/mmsconf" mrp="mmsengine/mmsconf/messaging_mmssettings-config.mrp" name="mmsconf"/>
+ <unit unitID="messagingappbase" bldFile="&layer_real_source_path;/messagingappbase/smilparser/GROUP" mrp="messagingappbase/smilparser/GROUP/messaging_gmxml.mrp" name="messagingappbase"/>
+ <unit unitID="pop3andsmtpmtm" bldFile="&layer_real_source_path;/email/pop3andsmtpmtm/group" mrp="email/pop3andsmtpmtm/group/messaging_email.mrp" name="pop3andsmtpmtm"/>
+ <unit unitID="imap4mtm" bldFile="&layer_real_source_path;/email/imap4mtm/group" mrp="email/imap4mtm/group/messaging_email_imap.mrp" name="imap4mtm"/>
+ <unit unitID="obexmtms" bldFile="&layer_real_source_path;/messagingappbase/obexmtms/Group" mrp="messagingappbase/obexmtms/Group/messaging_obex.mrp" name="obexmtms"/>
+ <unit unitID="smsmtm" bldFile="&layer_real_source_path;/mobilemessaging/smsmtm/group" mrp="mobilemessaging/smsmtm/group/messaging_sms.mrp" name="smsmtm"/>
+
+
</module>
+
</layer>
</systemModel>
</SystemDefinition>
--- a/mobilemessaging/smsmtm/clientmtm/inc/tmsvsmsentry.h Tue Sep 14 12:19:12 2010 +0530
+++ b/mobilemessaging/smsmtm/clientmtm/inc/tmsvsmsentry.h Tue Sep 14 22:54:56 2010 +0530
@@ -23,6 +23,7 @@
#define __TMSVSMSENTRY_H__
#include <gsmuelem.h>
+#include <smutset.h>
/**
A specialisation of the message server index class for SMS message entries.
--- a/mobilemessaging/smsmtm/servermtm/group/SMSS.rss Tue Sep 14 12:19:12 2010 +0530
+++ b/mobilemessaging/smsmtm/servermtm/group/SMSS.rss Tue Sep 14 22:54:56 2010 +0530
@@ -64,7 +64,12 @@
//SMS Errors
SEND_ERROR { error = -4814; }, // KErrGsmSMSOperationNotAllowed
- SEND_ERROR { error = -5252; } // KPKIErrKeyStoreEmpty
+ SEND_ERROR { error = -5252; }, // KPKIErrKeyStoreEmpty
+ SEND_ERROR { error = -4533; }, // KErrGsmSMSShortMessageTransferRejected
+ SEND_ERROR { error = -4540; }, // KErrGsmSMSUnidentifiedSubscriber
+ SEND_ERROR { error = -4542; }, // KErrGsmSMSUnknownSubscriber
+ SEND_ERROR { error = -4550; }, // KErrGsmSMSNetworkOutOfOrder
+ SEND_ERROR { error = -4608; } // KErrGsmSMSInvalidMandatoryInformation
};
},
SEND_ERROR_ACTION
--- a/package_definition.xml Tue Sep 14 12:19:12 2010 +0530
+++ b/package_definition.xml Tue Sep 14 22:54:56 2010 +0530
@@ -60,7 +60,7 @@
</component>
</collection>
<collection id="mobilemessaging" name="Mobile Messaging" level="plugin">
- <component id="smsmtm" name="SMS MTM" purpose="optional" class="plugin">
+ <component id="smsmtm" name="SMS MTM" purpose="optional" class="plugin" filter="s60">
<unit bldFile="mobilemessaging/smsmtm/group" mrp="mobilemessaging/smsmtm/group/messaging_sms.mrp"/>
</component>
</collection>
@@ -72,10 +72,10 @@
<component id="msgmedia" filter="s60" name="Message Media">
<unit base="messagingappbase/msgmedia"/>
</component>
- <component id="smilparser" name="SMIL Parser" introduced="7.0s" purpose="optional">
+ <component id="smilparser" name="SMIL Parser" introduced="7.0s" purpose="optional" filter="s60">
<unit bldFile="messagingappbase/smilparser/GROUP" mrp="messagingappbase/smilparser/GROUP/messaging_gmxml.mrp"/>
</component>
- <component id="obexmtms" name="OBEX MTMs" introduced="7.0s" purpose="optional" class="plugin">
+ <component id="obexmtms" name="OBEX MTMs" introduced="7.0s" purpose="optional" class="plugin" filter="s60">
<unit bldFile="messagingappbase/obexmtms/Group" mrp="messagingappbase/obexmtms/Group/messaging_obex.mrp"/>
</component>
</collection>
@@ -116,10 +116,10 @@
<component id="mmscodecclient" filter="s60" name="MMS Codec Client">
<unit bldFile="mmsengine/mmscodecclient/bld"/>
</component>
- <component id="mmssettings" name="MMS Settings" introduced="9.2" purpose="optional">
+ <component id="mmssettings" name="MMS Settings" introduced="9.2" purpose="optional" filter="s60">
<unit bldFile="mmsengine/mmssettings/group" mrp="mmsengine/mmssettings/group/messaging_mmssettings.mrp"/>
</component>
- <component id="mmsconf" name="MMS Configuration" purpose="optional">
+ <component id="mmsconf" name="MMS Configuration" purpose="optional" filter="s60">
<unit bldFile="mmsengine/mmsconf" mrp="mmsengine/mmsconf/messaging_mmssettings-config.mrp"/>
</component>
<component id="mmsengine_build" filter="s60" name="MMS Engine Build">
@@ -157,10 +157,10 @@
</collection>
<collection id="email" name="Email" level="plugin">
<!-- use commonemail instead -->
- <component id="pop3andsmtpmtm" name="POP3 and SMTP MTM" purpose="optional" class="plugin" deprecated="^3">
+ <component id="pop3andsmtpmtm" name="POP3 and SMTP MTM" purpose="optional" class="plugin" deprecated="^3" filter="s60">
<unit bldFile="email/pop3andsmtpmtm/group" mrp="email/pop3andsmtpmtm/group/messaging_email.mrp"/>
</component>
- <component id="imap4mtm" name="IMAP4 MTM" introduced="9.2" purpose="optional" class="plugin" deprecated="^3">
+ <component id="imap4mtm" name="IMAP4 MTM" introduced="9.2" purpose="optional" class="plugin" deprecated="^3" filter="s60">
<unit bldFile="email/imap4mtm/group" mrp="email/imap4mtm/group/messaging_email_imap.mrp"/>
</component>
</collection>