--- a/email/imap4mtm/imapprotocolcontroller/src/cimapopfetchbody.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/email/imap4mtm/imapprotocolcontroller/src/cimapopfetchbody.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -167,7 +167,12 @@
void CImapOpFetchBody::FetchBodyL(TRequestStatus& aRequestStatus, const TMsvId aPart, const TImImap4GetPartialMailInfo& aGetPartialMailInfo)
{
__LOG_TEXT(iSession->LogId(), "CImapOpFetchBody::FetchBodyL(): fetching message");
-
+
+ if(IsActive())
+ {
+ Cancel();
+ }
+
iRequestedPart=aPart;
iGetPartialMailInfo=aGetPartialMailInfo;
Queue(aRequestStatus);
@@ -1408,6 +1413,7 @@
{
// Set vCard flag in message
aMessage.SetVCard(ETrue);
+ aMessage.iType=KUidMsvEmailTextEntry;
}
// text/x-vcalendar
else if (aMime.ContentSubType().CompareF(KMIME_VCALENDAR)==0)
@@ -1415,6 +1421,7 @@
// Set vCalendar flag in message
aMessage.SetVCalendar(ETrue);
iIsVCalendar = ETrue;
+ aMessage.iType=KUidMsvEmailTextEntry;
}
// text/calendar
else if (aMime.ContentSubType().CompareF(KMIME_ICALENDAR)==0)
@@ -1422,6 +1429,7 @@
// Set iCalendar flag in message
aMessage.SetICalendar(ETrue);
iIsICalendar = ETrue;
+ aMessage.iType=KUidMsvEmailTextEntry;
}
else
aMessage.iType=KUidMsvEmailTextEntry;
@@ -1502,6 +1510,7 @@
TPtrC8 dispositionName = aBodyStructure->ExtDispositionName();
if (dispositionName.Size() != 0)
{
+ aMime.SetContentDispositionL(dispositionName);
__LOG_FORMAT((iSession->LogId(), " adding disp name: %S", &dispositionName));
aMime.ContentDispositionParams().AppendL(dispositionName);
aMime.ContentDispositionParams().AppendL(KNullDesC8);
--- a/email/imap4mtm/imapsession/inc/cimapfetchbody.h Thu Jun 17 09:57:06 2010 +0100
+++ b/email/imap4mtm/imapsession/inc/cimapfetchbody.h Thu Jul 22 16:32:06 2010 +0100
@@ -182,6 +182,7 @@
TBool iSendFetch;
// When server responses with no body length, iUnexpectedFormat is set to ETrue.
TBool iUnexpectedFormat;
+ TBool iCancelled;
};
#endif // __CIMAPFETCHBODY_H__
--- a/email/imap4mtm/imapsession/src/cimapfetchbody.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/email/imap4mtm/imapsession/src/cimapfetchbody.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -66,7 +66,8 @@
iImapMailStore(aImapMailStore),
iParent(aParent),
iFetchBodyResponse(aFetchBodyResponse),
- iSendFetch(ETrue)
+ iSendFetch(ETrue),
+ iCancelled(EFalse)
{
}
@@ -86,7 +87,7 @@
void CImapFetchBody::Cancel()
{
__LOG_TEXT(iLogId, "CImapFetchBody::Cancel()"); // Overrides CImapCommand::Cancel()
-
+ iCancelled = ETrue;
iImapMailStore.CancelRequest(*this);
CImapCommand::Cancel();
}
@@ -226,6 +227,10 @@
{
iOutStream=&aStream;
+ if(iCancelled)
+ {
+ return;
+ }
#if (defined SYMBIAN_EMAIL_CAPABILITY_SUPPORT)
// check for BINARY capability
const CImapCapabilityInfo& capabilityInfo = iParent.CapabilityInfo();
--- a/email/pop3andsmtpmtm/clientmtms/group/IMCM.mmp Thu Jun 17 09:57:06 2010 +0100
+++ b/email/pop3andsmtpmtm/clientmtms/group/IMCM.mmp Thu Jul 22 16:32:06 2010 +0100
@@ -19,6 +19,7 @@
/**
@file
*/
+#include <platform_paths.hrh>
TARGET imcm.dll
TARGETPATH /system/libs
@@ -47,10 +48,10 @@
LIBRARY centralrepository.lib tzclient.lib numberconversion.lib
SOURCEPATH .
-START RESOURCE IMCM.rss
-TARGETPATH resource/messaging
+START RESOURCE imcm.rss
LANG SC
HEADER
+TARGETPATH resource/messaging
END
#include "../../../../../../mw/messagingmw/messagingfw/msgtests/group/msgopt.mph"
@@ -70,7 +71,7 @@
#endif
-
+OS_LAYER_SYSTEMINCLUDE
--- a/email/pop3andsmtpmtm/clientmtms/group/IMCM.rss Thu Jun 17 09:57:06 2010 +0100
+++ b/email/pop3andsmtpmtm/clientmtms/group/IMCM.rss Thu Jul 22 16:32:06 2010 +0100
@@ -16,6 +16,8 @@
//
#include "imcm.rls"
+#include <imcm.loc>
+#include <imcm_default_charset.loc>
#define PARABREAK 8233
#define TABCHAR 9
@@ -37,12 +39,12 @@
RESOURCE LBUF forward_formatting_string
{
- buffer=STRING_forward_formatting_string1;
+ buffer=qtn_mail_fwd"%S";
}
RESOURCE LBUF reply_formatting_string
{
- buffer=STRING_reply_formatting_string1;
+ buffer=qtn_mail_re"%S";
}
RESOURCE LBUF receipt_formatting_string
@@ -52,17 +54,17 @@
RESOURCE LBUF email_address_formatting_string
{
- buffer=STRING_email_address_formatting_string1;
+ buffer="%S <%S>";//STRING_email_address_formatting_string1;
}
// Headers used in Body for Forwarded/Replyed message
RESOURCE LBUF forward_body_header
{
- buffer=STRING_forward_body_header1
- STRING_forward_body_header2
- STRING_forward_body_header3
- STRING_forward_body_header4;
+ buffer=<PARABREAK><PARABREAK>qtn_mail_forward_separator<PARABREAK>
+ qtn_mail_copy_subject" %S"<PARABREAK>
+ qtn_mail_copy_sender" %S"<PARABREAK>
+ qtn_mail_copy_date" %S"<PARABREAK>;
}
RESOURCE LBUF forward_body_header_toonly
@@ -95,10 +97,10 @@
RESOURCE LBUF reply_body_header
{
- buffer=STRING_reply_body_header1
- STRING_reply_body_header2
- STRING_reply_body_header3
- STRING_reply_body_header4;
+ buffer=<PARABREAK><PARABREAK>qtn_mail_reply_separator<PARABREAK>
+ qtn_mail_copy_subject" %S"<PARABREAK>
+ qtn_mail_copy_sender" %S"<PARABREAK>
+ qtn_mail_copy_date" %S"<PARABREAK>;
}
RESOURCE LBUF reply_body_header_toonly
@@ -174,28 +176,29 @@
}
// List of available character sets in Charconv.h
+// at some point flags should be removed and only qtn_default_charset be used for all builds.
RESOURCE L8BUF default_system_charset
- {
- buffer=STRING_default_system_charset;
- }
+ {
+ buffer = qtn_default_email_charset;
+ }
// If this value is set to 1, 8 bit body text data and character set information will be stored
// when downloaded via IMPS and POPS. The body text will be decoded to the correct character set
// when opened. If this value is set to 0, the body text is decoded and stored when downloading.
RESOURCE INT8 store_8bit_body_text
{
- value = 0;
+ value = 1;
}
// Used for localised date time formatting for email forward and reply body headers
RESOURCE LBUF body_header_datetime_format
{
- buffer=STRING_body_header_datetime_format;
+ buffer="%D%M%Y%/0%1%/1%2%/2%3%/3 %-B%:0%J%:1%T%:3%+B"; //STRING_body_header_datetime_format;
}
RESOURCE LBUF partial_download_footer_message
{
- buffer=STRING_partial_download_footer_message;
+ buffer=qtn_mail_rest_of_mail_not_fetched;
}
// If this value is set to 1,body text data will be stored when downloaded via IMPS and POPS using chunk storage option.
@@ -203,5 +206,5 @@
RESOURCE INT8 store_plain_body_text
{
- value = 1;
+ value = 0;
}
--- a/email/pop3andsmtpmtm/clientmtms/group/bld.inf Thu Jun 17 09:57:06 2010 +0100
+++ b/email/pop3andsmtpmtm/clientmtms/group/bld.inf Thu Jul 22 16:32:06 2010 +0100
@@ -14,6 +14,7 @@
// bld.inf
//
+#include <platform_paths.hrh>
PRJ_EXPORTS
../inc/MIUTHDR.H SYMBIAN_APP_LAYER_PUBLIC_EXPORT_PATH(miuthdr.h)
@@ -64,6 +65,13 @@
#endif
+//IBY exports
+../rom/gtemailmtmResources.iby LANGUAGE_OS_LAYER_IBY_EXPORT_PATH(gtemailmtmResources.iby)
+../rom/gtemailmtm.hby CORE_OS_LAYER_IBY_EXPORT_PATH(gtemailmtm.hby)
+
+// export localised loc file
+../loc/imcm.loc OS_LAYER_LOC_EXPORT_PATH(imcm.loc)
+../loc/imcm_default_charset.loc OS_LAYER_LOC_EXPORT_PATH(imcm_default_charset.loc)
PRJ_MMPFILES
IMCM.mmp
--- a/email/pop3andsmtpmtm/clientmtms/inc/MIUTRSLV.H Thu Jun 17 09:57:06 2010 +0100
+++ b/email/pop3andsmtpmtm/clientmtms/inc/MIUTRSLV.H Thu Jul 22 16:32:06 2010 +0100
@@ -130,6 +130,7 @@
private:
void DoRunL();
void DoComplete(TInt& );
+ void DoCancel();
void CheckCurrentEntryL();
inline TBool CheckContentDetailsL(const TDesC& aContentLocation, const TDesC& aContentId);
@@ -210,6 +211,7 @@
void DoRunL();
void DoComplete(TInt& );
+ void DoCancel();
inline void SetStartParameterL();
private:
CMsvEntry& iCurrentEntry;
--- a/email/pop3andsmtpmtm/clientmtms/inc/cimfinder.h Thu Jun 17 09:57:06 2010 +0100
+++ b/email/pop3andsmtpmtm/clientmtms/inc/cimfinder.h Thu Jul 22 16:32:06 2010 +0100
@@ -57,7 +57,7 @@
private:
void DoRunL();
-
+ void DoCancel();
virtual void AddChildEntriesL() = 0;
virtual TBool IsRequiredEntryType(TUid aEntryType) const = 0;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/email/pop3andsmtpmtm/clientmtms/loc/imcm.loc Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,66 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* This is a localisation file for imcm.dll
+* A .loc file is the one and only place where the logical strings
+* to be localised are defined.
+* >>>
+* The text between >>> and <<< is just to document the syntax and
+* you can remove it if you like.
+*
+*/
+
+
+
+
+// LOCALISATION STRINGS
+
+// d: Added in the beginning of the subject line when replying
+// l: mce_header_field_pane_t1
+#define qtn_mail_re "RE: "
+
+// d: Added in the beginning of the subject line when forwarding
+// l: mce_header_field_pane_t1
+#define qtn_mail_fwd "FWD: "
+
+// d: Text to be inserted into a message when replying
+// d: Inerted in the beginning of the original message
+// l: msg_header_pane_t2
+#define qtn_mail_reply_separator "--- original message ---"
+
+// d: Text to be inserted into a message when forwarding
+// d: Inserted in the beginning of the original message
+// l: msg_header_pane_t2
+#define qtn_mail_forward_separator "--- original message ---"
+
+// d: Text to be inserted into a message when forwarding or replying
+// d: Inserted in the beginning of the original message
+// l: msg_header_pane_t2
+#define qtn_mail_copy_subject "Subject:"
+
+// d: Text to be inserted into a message when forwarding or replying
+// d: Inserted in the beginning of the original message
+// l: msg_header_pane_t2
+#define qtn_mail_copy_sender "Sender:"
+
+// d: Text to be inserted into a message when forwarding or replying
+// d: Inserted in the beginning of the original message
+// l: msg_header_pane_t2
+#define qtn_mail_copy_date "Date:"
+
+// d: Text to be inserted into a message body if part of message body is filtered out
+// l:none
+#define qtn_mail_rest_of_mail_not_fetched "- - - Retrieve total mail selecting Retrieve from Options list. - - -"
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/email/pop3andsmtpmtm/clientmtms/loc/imcm_default_charset.loc Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* !!!!!!!LOCALISATION INSTRUCTIONS, IMPORTANT!!!!!!!
+* These default charsets are used to define correct default charsets for different builds.
+*
+*/
+
+
+
+// d: This is not visible to the user!
+// l: None
+#define qtn_default_email_charset "ISO-8859-1"
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/email/pop3andsmtpmtm/clientmtms/rom/gtemailmtm.hby Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,9 @@
+#ifndef __GTEMAILMTM_HBY__
+#define __GTEMAILMTM_HBY__
+
+//
+// Moved to gtemailmtmResources.iby
+//
+//data=MULTI_LINGUIFY(RSC DATAZ_\resource\messaging\imcm resource\messaging\imcm)
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/email/pop3andsmtpmtm/clientmtms/rom/gtemailmtmResources.iby Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: gtemailmtmResources.iby*
+*/
+
+#ifndef __GTEMAILMTM_RESOURCES_IBY__
+#define __GTEMAILMTM_RESOURCES_IBY__
+
+// Refer to gtemailmtm.hby
+data=DATAZ_\resource\messaging\imcm.rsc resource\messaging\imcm.rsc
+
+#endif
\ No newline at end of file
--- a/email/pop3andsmtpmtm/clientmtms/src/CACHEMAN.CPP Thu Jun 17 09:57:06 2010 +0100
+++ b/email/pop3andsmtpmtm/clientmtms/src/CACHEMAN.CPP Thu Jul 22 16:32:06 2010 +0100
@@ -122,6 +122,12 @@
}
}
+void CImFinder::DoCancel()
+ {
+ CMsgActive::DoCancel();
+ }
+
+
CImFinder::CImFinder(CMsvEntry& aEntry) : CMsgActive(EPriorityStandard), iCurrentEntry(aEntry)
{
}
--- a/email/pop3andsmtpmtm/clientmtms/src/CIMPLAINBODYTEXT.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/email/pop3andsmtpmtm/clientmtms/src/CIMPLAINBODYTEXT.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -468,4 +468,5 @@
void CImPlainBodyText::DoCancel()
{
iPlainTextArray[iIndex]->Cancel();
+ CMsgActive::DoCancel();
}
--- a/email/pop3andsmtpmtm/clientmtms/src/MIUTRSLV.CPP Thu Jun 17 09:57:06 2010 +0100
+++ b/email/pop3andsmtpmtm/clientmtms/src/MIUTRSLV.CPP Thu Jul 22 16:32:06 2010 +0100
@@ -462,6 +462,12 @@
}
}
}
+
+
+void CImMhtmlChildEntrySearcher::DoCancel()
+ {
+ CMsgActive::DoCancel();
+ }
void CImMhtmlChildEntrySearcher::DoComplete(TInt& )
{
@@ -1043,7 +1049,10 @@
}
}
-
+void CImMhtmlFirstPageFinder::DoCancel()
+ {
+ CMsgActive::DoCancel();
+ }
// The following class implements a class for parsing and combining URI's.
--- a/email/pop3andsmtpmtm/servermtmutils/src/IMCVCODC.CPP Thu Jun 17 09:57:06 2010 +0100
+++ b/email/pop3andsmtpmtm/servermtmutils/src/IMCVCODC.CPP Thu Jul 22 16:32:06 2010 +0100
@@ -1469,14 +1469,14 @@
// Intermediate buffer for decoding, prior to converting
- HBufC8* decodeBuf8 = HBufC8::NewLC(aBufOut.MaxLength());
+ HBufC8* decodeBuf8 = HBufC8::NewLC(aBufOut.MaxLength());
decodeBuf8->Des().Copy( aBufIn.Mid(i+1, j -i-1));
// Depending on type of encoding Q or B, decode.
TPtr8 dataPtr8(dataBuf8->Des());
-
+ TPtr8 decodePtr8(decodeBuf8->Des());
switch (iEncodingInfo.EncodingType())
{
case TImHeaderEncodingInfo::EBase64 :
@@ -1484,14 +1484,13 @@
break;
case TImHeaderEncodingInfo::EQP :
// Replace all underscores in text with SPACE.
- iQPCodec.Decode( *decodeBuf8, dataPtr8 );
-
- i=dataPtr8.Length();
+ i=decodePtr8.Length();
while (i--)
{
- if (dataPtr8[i] == KImcvUnderScore)
- dataPtr8[i] = KImcvSpaceChar;
+ if (decodePtr8[i] == KImcvUnderScore)
+ decodePtr8[i] = KImcvSpaceChar;
}
+ iQPCodec.Decode( *decodeBuf8, dataPtr8 );
break;
default:
dataBuf8->Des().Copy(*decodeBuf8);
--- a/inc/convergedmessage.h Thu Jun 17 09:57:06 2010 +0100
+++ b/inc/convergedmessage.h Thu Jul 22 16:32:06 2010 +0100
@@ -64,7 +64,8 @@
Provisioning = 0x01,
VCard = 0x02,
VCal = 0x03,
- Audio = 0x04
+ Audio = 0x04,
+ NokiaService = 0x08
};
/**
--- a/inc/msgbiouids.h Thu Jun 17 09:57:06 2010 +0100
+++ b/inc/msgbiouids.h Thu Jul 22 16:32:06 2010 +0100
@@ -63,6 +63,10 @@
/// UID for the Provisioning Message type for BIO database
const TUid KMsgBioProvisioningMessage = {0x101F84D1};
+const TUid KMsgBioNokiaServiceMessage = {0x102832EA};
+
+const TUid KMsgBioNokiaServiceSentMessage = {0x20022FE6};
+
//// PoC
const TUid KMsgBioUidPoC = {0x101FD869};
--- a/inc/msgcontacthandler.h Thu Jun 17 09:57:06 2010 +0100
+++ b/inc/msgcontacthandler.h Thu Jul 22 16:32:06 2010 +0100
@@ -52,37 +52,57 @@
QString& displayName,
int& countPhoneNumber)
{
- QContactManager * phonebookManager;
+ QContactManager phonebookManager;
+ QVariant address(contactNumber);
+
+ // apply filter on phone number field
QContactDetailFilter phoneFilter;
- phonebookManager = new QContactManager("symbian");
- phoneFilter.setDetailDefinitionName(QContactPhoneNumber::DefinitionName,
- QContactPhoneNumber::FieldNumber);
+ phoneFilter.setDetailDefinitionName(
+ QContactPhoneNumber::DefinitionName,
+ QContactPhoneNumber::FieldNumber);
- QVariant address(contactNumber);
phoneFilter.setValue(address);
phoneFilter.setMatchFlags(QContactFilter::MatchEndsWith);
-
QList<QContact> matchingContacts =
- phonebookManager->contacts(phoneFilter);
-
+ phonebookManager.contacts(phoneFilter);
if (matchingContacts.count() > 0)
{
// Fill the contact details
QContact match = matchingContacts.at(0);
displayName = match.displayLabel();
- QList<QContactPhoneNumber> numbers =
+ QList<QContactPhoneNumber> numbers =
match.details<QContactPhoneNumber> ();
countPhoneNumber = numbers.count();
return match.localId();
}
- else // no matching contacts
+
+ // apply filter on email address field
+ QContactDetailFilter emailFilter;
+ emailFilter.setDetailDefinitionName(
+ QContactEmailAddress::DefinitionName,
+ QContactEmailAddress::FieldEmailAddress);
+
+ emailFilter.setValue(address);
+ emailFilter.setMatchFlags(QContactFilter::MatchExactly);
+ matchingContacts = phonebookManager.contacts(emailFilter);
+ if ( matchingContacts.count() > 0 )
{
- displayName = contactNumber;
- return -1;
+ // Fill the contact details
+ QContact match = matchingContacts.at(0);
+
+ displayName = match.displayLabel();
+ QList<QContactEmailAddress> numbers =
+ match.details<QContactEmailAddress> ();
+ countPhoneNumber = numbers.count();
+ return match.localId();
}
+
+ // no matching contact
+ displayName = contactNumber;
+ return -1;
}
-
+
/**
* This shall resolve contact number with display name
* @param contactNumber number to resolve
@@ -161,17 +181,20 @@
if (versitDocuments.count() > 0)
{
QVersitContactImporter importer;
- QList<QContact> contacts =
- importer.importContacts(versitDocuments);
- // get display-name
- if (contacts.count() > 0)
+ bool import_docs = importer.importDocuments(versitDocuments);
+ if(import_docs)
{
- //resolveSynthesizedDisplayLabel
- QContactManager* contactManager =
+ QList<QContact> contacts = importer.contacts();
+ // get display-name
+ if (contacts.count() > 0)
+ {
+ //resolveSynthesizedDisplayLabel
+ QContactManager* contactManager =
new QContactManager("symbian");
- displayName
+ displayName
= contactManager->synthesizedDisplayLabel(contacts[0]);
- delete contactManager;
+ delete contactManager;
+ }
}
}
}
--- a/inc/unidatamodelplugininterface.h Thu Jun 17 09:57:06 2010 +0100
+++ b/inc/unidatamodelplugininterface.h Thu Jul 22 16:32:06 2010 +0100
@@ -84,6 +84,30 @@
inline const QString& mimetype();
/**
+ * isProtected
+ * @return true if DRM protected object else false.
+ */
+ inline bool isProtected() const;
+
+ /**
+ * setProtected
+ * @param isProtected true if DRM protected object else false.
+ */
+ inline void setProtected(bool isProtected);
+
+ /**
+ * isCorrupted
+ * @return true if object is corrupted else false.
+ */
+ inline bool isCorrupted() const;
+
+ /**
+ * setCorrupted
+ * @param corrupted true if object is corrupted else false.
+ */
+ inline void setCorrupted(bool corrupted);
+
+ /**
* Serialize the data memebers into the stream.
* @param stream data stream to which data is serialized.
*/
@@ -97,8 +121,10 @@
private:
QString mPath;
+ QString mMimeType;
int mSize;
- QString mMimeType;
+ bool mProtected;
+ bool mCorrupt;
};
--- a/inc/unidatamodelplugininterface.inl Thu Jun 17 09:57:06 2010 +0100
+++ b/inc/unidatamodelplugininterface.inl Thu Jul 22 16:32:06 2010 +0100
@@ -18,9 +18,8 @@
// UniMessageInfo::UniMessageInfo
// @see header
//----------------------------------------------------------------
- UniMessageInfo::UniMessageInfo( const QString& filepath,
- const int size,
- const QString& mimetype ) : mPath (filepath), mSize(size), mMimeType(mimetype)
+UniMessageInfo::UniMessageInfo(const QString& filepath, const int size, const QString& mimetype) :
+ mPath(filepath), mMimeType(mimetype), mSize(size), mProtected(false), mCorrupt(false)
{
@@ -89,6 +88,42 @@
}
//----------------------------------------------------------------
+// UniMessageInfo::isProtected
+// @see header
+//----------------------------------------------------------------
+inline bool UniMessageInfo::isProtected() const
+ {
+ return mProtected;
+ }
+
+//----------------------------------------------------------------
+// UniMessageInfo::setProtected
+// @see header
+//----------------------------------------------------------------
+inline void UniMessageInfo::setProtected(bool isProtected)
+ {
+ mProtected = isProtected;
+ }
+
+//----------------------------------------------------------------
+// UniMessageInfo::isCorrupted
+// @see header
+//----------------------------------------------------------------
+inline bool UniMessageInfo::isCorrupted() const
+ {
+ return mCorrupt;
+ }
+
+//----------------------------------------------------------------
+// UniMessageInfo::setCorrupted
+// @see header
+//----------------------------------------------------------------
+inline void UniMessageInfo::setCorrupted(bool corrupted)
+ {
+ mCorrupt = corrupted;
+ }
+
+//----------------------------------------------------------------
// UniMessageInfo::serialize
// @see header
//----------------------------------------------------------------
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/conf/backup_registration.xml Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,5 @@
+<?xml version="1.0" standalone="yes"?>
+<backup_registration version="1.0">
+ <proxy_data_manager sid = "0x10202BE9" />
+ <restore requires_reboot = "no"/>
+</backup_registration>
Binary file messagingapp/conf/messaging_101F87EB.crml has changed
Binary file messagingapp/conf/messaging_101F87EC.crml has changed
Binary file messagingapp/conf/messaging_101F87ED.crml has changed
Binary file messagingapp/conf/messaging_101F87EE.crml has changed
Binary file messagingapp/conf/messaging_101F87EF.crml has changed
Binary file messagingapp/conf/messaging_101F8873.crml has changed
Binary file messagingapp/conf/messaging_101F8F28.crml has changed
Binary file messagingapp/conf/messaging_102071F2.crml has changed
Binary file messagingapp/conf/messaging_102072E2.crml has changed
Binary file messagingapp/conf/messaging_102072E5.crml has changed
Binary file messagingapp/conf/messaging_102824A0.crml has changed
Binary file messagingapp/conf/messaging_1028281E.crml has changed
--- a/messagingapp/conf/messaging_conf.pro Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/conf/messaging_conf.pro Thu Jul 22 16:32:06 2010 +0100
@@ -35,6 +35,7 @@
"messaging_102072E5.crml APP_LAYER_CRML(messaging_102072E5.crml)" \
"messaging_102824A0.crml APP_LAYER_CRML(messaging_102824A0.crml)" \
"messaging_1028281E.crml APP_LAYER_CRML(messaging_1028281E.crml)" \
- "messaging_101F8F28.crml APP_LAYER_CRML(messaging_101F8F28.crml)"
+ "messaging_101F8F28.crml APP_LAYER_CRML(messaging_101F8F28.crml)" \
+ "backup_registration.xml z:/private/2001FE79/backup_registration.xml"
}
--- a/messagingapp/msgappfw/client/bwins/csserverclientapiu.def Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgappfw/client/bwins/csserverclientapiu.def Thu Jul 22 16:32:06 2010 +0100
@@ -24,4 +24,5 @@
?GetConversationIdL@CCSRequestHandler@@QAEHH@Z @ 23 NONAME ; int CCSRequestHandler::GetConversationIdL(int)
?NewL@CCSRequestHandler@@SAPAV1@XZ @ 24 NONAME ; class CCSRequestHandler * CCSRequestHandler::NewL(void)
?GetConversationFromMessageIdL@CCSRequestHandler@@QAEPAVCCsClientConversation@@H@Z @ 25 NONAME ; class CCsClientConversation * CCSRequestHandler::GetConversationFromMessageIdL(int)
+ ?GetConversationFromConversationIdL@CCSRequestHandler@@QAEPAVCCsClientConversation@@H@Z @ 26 NONAME ; class CCsClientConversation * CCSRequestHandler::GetConversationFromConversationIdL(int)
--- a/messagingapp/msgappfw/client/eabi/csserverclientapiu.def Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgappfw/client/eabi/csserverclientapiu.def Thu Jul 22 16:32:06 2010 +0100
@@ -30,4 +30,5 @@
_ZTV17CCSRequestHandler @ 29 NONAME
_ZTV22CCsNotificationHandler @ 30 NONAME
_ZTV29CCsConversationChangeObserver @ 31 NONAME
+ _ZN17CCSRequestHandler34GetConversationFromConversationIdLEi @ 32 NONAME
--- a/messagingapp/msgappfw/client/src/ccsnotificationhandler.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgappfw/client/src/ccsnotificationhandler.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -126,7 +126,11 @@
case EModifyConversationListEvent:
iRequestHandler->HandleModifyConversationList(iNotificationBuffer);
break;
-
+
+ case EPartialDeleteConversationListEvent:
+ iRequestHandler->HandlePartialDeleteConversationList(iNotificationBuffer);
+ break;
+
case EAddConversationEvent:
iRequestHandler->HandleAddConversation(iNotificationBuffer);
break;
--- a/messagingapp/msgappfw/client/src/ccsrequesthandler.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgappfw/client/src/ccsrequesthandler.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -59,13 +59,13 @@
// CCSRequestHandler::NewLC()
// Two-phased constructor.
// -----------------------------------------------------------------------------
-EXPORT_C CCSRequestHandler* CCSRequestHandler::NewLC(/*CVPbkContactManager* aVPbkContactManager*/)
+EXPORT_C CCSRequestHandler* CCSRequestHandler::NewLC()
{
PRINT ( _L("Enter CCSRequestHandler::NewLC") );
CCSRequestHandler* self = new ( ELeave ) CCSRequestHandler();
CleanupStack::PushL( self );
- self->ConstructL(/*aVPbkContactManager*/);
+ self->ConstructL();
PRINT ( _L("End CCSRequestHandler::NewLC") );
@@ -178,6 +178,12 @@
//call panic
}
+ // Speed up the allocation
+ if( listCount > 0 )
+ {
+ clientConversationList.Reserve(listCount);
+ }
+
for (TInt iloop = 0 ; iloop < listCount; iloop++)
{
TRAP(error,
@@ -240,7 +246,12 @@
{
//call panic
}
-
+ // Speed up the allocation
+ if( conversationEntryCount > 0 )
+ {
+ ConversationEntryList.Reserve(conversationEntryCount);
+ }
+
PRINT1 ( _L("Number of conversation entries = %d"), conversationEntryCount );
// conversation entries
@@ -319,8 +330,11 @@
stream.Close();
// Delete and recreate the results buffer
- delete iListResultsBuffer;
- iListResultsBuffer = NULL;
+ if ( iListResultsBuffer)
+ {
+ delete iListResultsBuffer;
+ iListResultsBuffer = NULL;
+ }
// Buffer created for the new size
TRAP(error,
@@ -370,8 +384,11 @@
stream.Close();
// Delete and recreate the results buffer
- delete iConvResultsBuffer;
- iConvResultsBuffer = NULL;
+ if ( iConvResultsBuffer )
+ {
+ delete iConvResultsBuffer;
+ iConvResultsBuffer = NULL;
+ }
// Buffer created for the new size
TRAP(error,
@@ -429,10 +446,14 @@
EXPORT_C void CCSRequestHandler::RemoveConversationListChangeEventL(
MCsConversationListChangeObserver* /*aObserver*/)
{
- iConversationListChangeObserver = NULL;
-
- // De-register from the server
- iNotificationHandler->RemoveConversationListChangeEventL();
+ // Before removing observer, make sure it was added earlier.
+ if( iConversationListChangeObserver )
+ {
+ iConversationListChangeObserver = NULL;
+
+ // De-register from the server
+ iNotificationHandler->RemoveConversationListChangeEventL();
+ }
}
// -----------------------------------------------------------------------------
@@ -466,11 +487,12 @@
{
delete iConversationChangeObserver;
iConversationChangeObserver = NULL;
- }
-
- iNotificationHandler->RemoveConversationChangeEventL(aClientConversation);
+ if(aClientConversation)
+ {
+ iNotificationHandler->RemoveConversationChangeEventL(aClientConversation);
+ }
+ }
}
-
// -----------------------------------------------------------------------------
// CCSRequestHandler::RequestCachingStatusEventL()
// Add caching status Observer
@@ -895,6 +917,50 @@
}
// -----------------------------------------------------------------------------
+// CCSRequestHandler::HandlePartialDeleteConversationList()
+// Process partial delete conversation lsit event received from server
+// -----------------------------------------------------------------------------
+
+void CCSRequestHandler::HandlePartialDeleteConversationList(HBufC8* aResultsBuffer)
+{
+ PRINT( _L("Enter CCSRequestHandler::HandlePartialDeleteConversationList") );
+
+ TInt error = KErrNone;
+
+ // perpare client conversation
+ CCsClientConversation* clientConversation = NULL;
+ RDesReadStream resultStream(aResultsBuffer->Des());
+
+ TRAP(error,
+ resultStream.PushL();
+ clientConversation = CCsClientConversation::NewL();
+ CleanupStack::PushL(clientConversation);
+ clientConversation->InternalizeL(resultStream);
+ CleanupStack::Pop(clientConversation);
+ resultStream.Pop());
+
+ if ( error != KErrNone )
+ {
+ // Ignore this conversation
+ }
+
+ // Cleanup
+ resultStream.Close();
+
+ // Pass the results to the observer
+ if ( iConversationListChangeObserver )
+ {
+ CleanupStack::PushL( clientConversation );
+ iConversationListChangeObserver->
+ PartialDeleteConversationList(*clientConversation);
+ }
+
+ CleanupStack::PopAndDestroy();// clientConversation*/
+
+ PRINT( _L("End CCSRequestHandler::HandlePartialDeleteConversationList") );
+}
+
+// -----------------------------------------------------------------------------
// CCSRequestHandler::HandleModifyConversationList
// Process modify conversation lsit event received from server
// -----------------------------------------------------------------------------
@@ -1198,6 +1264,39 @@
}
// -----------------------------------------------------------------------------
+// CCSRequestHandler::GetConversationFromConversationIdL()
+// -----------------------------------------------------------------------------
+EXPORT_C CCsClientConversation* CCSRequestHandler::GetConversationFromConversationIdL(TInt aConversationId)
+{
+ // Create a buffer to store the results.
+ if(iResultsBuffer)
+ {
+ delete iResultsBuffer;
+ iResultsBuffer = NULL;
+ }
+ iResultsBuffer = HBufC8::NewL(KBigIpcBuffer);
+
+ // Send the request
+ iSession.GetConversationFromConversationIdL(aConversationId, iResultsBuffer->Des());
+
+ // Parse the results
+ RDesReadStream resultStream(iResultsBuffer->Des());
+ resultStream.PushL();
+ CCsClientConversation* clientConversation = CCsClientConversation::NewL();
+ CleanupStack::PushL(clientConversation);
+ clientConversation->InternalizeL(resultStream);
+ CleanupStack::Pop(clientConversation);
+
+ // Cleanup
+ delete iResultsBuffer;
+ iResultsBuffer = NULL;
+ resultStream.Pop();
+ resultStream.Close();
+
+ return clientConversation;
+}
+
+// -----------------------------------------------------------------------------
// CCSRequestHandler::GetConversationFromMessageIdL()
// -----------------------------------------------------------------------------
EXPORT_C CCsClientConversation* CCSRequestHandler::GetConversationFromMessageIdL(TInt aMessageId)
--- a/messagingapp/msgappfw/client/src/rcssession.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgappfw/client/src/rcssession.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -397,6 +397,20 @@
}
// ----------------------------------------------------------------------------
+// RCsSession::GetConversationFromConversationIdL
+// ----------------------------------------------------------------------------
+void RCsSession::GetConversationFromConversationIdL(TInt aConversationId, TPtr8 aResultsBuffer)
+ {
+ PRINT( _L("Enter RCsSession::GetConversationFromConversationIdL") );
+
+ TIpcArgs args(aConversationId, &aResultsBuffer);
+
+ // Initiate the request
+ User::LeaveIfError (SendReceive(EGetConversationFromConversationId, args ) );
+ PRINT( _L("End RCsSession::GetConversationFromConversationIdL") );
+ }
+
+// ----------------------------------------------------------------------------
// RCsSession::GetConversationFromMessageIdL
// ----------------------------------------------------------------------------
void RCsSession::GetConversationFromMessageIdL(TInt aMessageId, TPtr8 aResultsBuffer)
--- a/messagingapp/msgappfw/msghistory/msghistory.pro Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgappfw/msghistory/msghistory.pro Thu Jul 22 16:32:06 2010 +0100
@@ -17,7 +17,6 @@
TARGET = msghistory
DEPENDPATH += . inc src
INCLUDEPATH += .
-INCLUDEPATH += ../../msgutils/s60qconversions/inc
INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
DEFINES += MSGHISTORY_DLL
@@ -51,8 +50,15 @@
src/msghistoryprivate.cpp \
src/msgitem.cpp
-
+defBlock = \
+ "$${LITERAL_HASH}if defined(EABI)" \
+ "DEFFILE ../eabi/msghistory.def" \
+ "$${LITERAL_HASH}else" \
+ "DEFFILE ../bwins/msghistory.def" \
+ "$${LITERAL_HASH}endif"
+
+MMP_RULES += defBlock
LIBS += -lcsserverclientapi \
-lcsutils \
- -ls60qconversions
\ No newline at end of file
+ -lxqutils
--- a/messagingapp/msgappfw/msghistory/src/msghistoryprivate.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgappfw/msghistory/src/msghistoryprivate.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -19,7 +19,7 @@
#include <ccsrequesthandler.h>
#include <ccsconversationentry.h>
#include <ccsclientconversation.h>
-#include <s60qconversions.h>
+#include <xqconversions.h>
//USER INCLUDES
#include "msghistoryprivate.h"
@@ -101,6 +101,9 @@
conversationId = handler->GetConversationIdL(aContactId));
CCsClientConversation* clientConversation = CCsClientConversation::NewL();
clientConversation->SetConversationEntryId(conversationId);
+ // set the contact id, which will be used in case when the
+ // conversation entry id is -1.
+ clientConversation->SetContactId(aContactId);
//set dummy entry
CCsConversationEntry *entry = CCsConversationEntry::NewL();
clientConversation->SetConversationEntryL(entry);
@@ -125,6 +128,9 @@
conversationId = handler->GetConversationIdL(aContactId));
CCsClientConversation* clientConversation = CCsClientConversation::NewL();
clientConversation->SetConversationEntryId(conversationId);
+ // set the contact id, which will be used in case when the
+ // conversation entry id is -1.
+ clientConversation->SetContactId(aContactId);
//set dummy entry
CCsConversationEntry *entry = CCsConversationEntry::NewL();
clientConversation->SetConversationEntryL(entry);
@@ -230,7 +236,7 @@
HBufC* description = entry.Description();
if( description && description->Length())
{
- item.setBody(S60QConversions::s60DescToQString(*description));
+ item.setBody(XQConversions::s60DescToQString(*description));
}
// time stamp
@@ -244,7 +250,7 @@
HBufC* contact = entry.Contact();
if( contact && contact->Length())
{
- item.setPhoneNumber(S60QConversions::s60DescToQString(*contact));
+ item.setPhoneNumber(XQConversions::s60DescToQString(*contact));
}
//sending state
--- a/messagingapp/msgappfw/msghistory/tsrc/test_appengine/src/conversationsengine.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgappfw/msghistory/tsrc/test_appengine/src/conversationsengine.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -26,7 +26,7 @@
#include "debugtraces.h"
#include <msghistory.h>
#include <msgitem.h>
-#include "s60qconversions.h"
+#include <xqconversions.h>
const int ViewableLimit = 160;
//---------------------------------------------------------------
@@ -137,7 +137,7 @@
// description
QString descr = item.body();
- HBufC* description = S60QConversions::qStringToS60Desc(descr);
+ HBufC* description = XQConversions::qStringToS60Desc(descr);
entry->SetDescriptionL(description->Des());
delete description;
@@ -147,7 +147,7 @@
//contact details
QString details = item.phoneNumber();
- HBufC* d_details = S60QConversions::qStringToS60Desc(details);
+ HBufC* d_details = XQConversions::qStringToS60Desc(details);
entry->SetContactL(d_details->Des());
delete d_details;
--- a/messagingapp/msgappfw/msghistory/tsrc/test_appengine/src/conversationsengineutility.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgappfw/msghistory/tsrc/test_appengine/src/conversationsengineutility.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -32,7 +32,7 @@
#include "smilxmlreader.h"
#include "smilliterals.h"
#include "msgmimetypes.h"
-#include "s60qconversions.h"
+#include <xqconversions.h>
// CONSTANTS
#define KForwardSlash '/'
@@ -78,7 +78,7 @@
{
//get smilfile's handle to parse
RFile smilfile;
- HBufC* path = S60QConversions::qStringToS60Desc(ismilfilepath);
+ HBufC* path = XQConversions::qStringToS60Desc(ismilfilepath);
RFs fsSession;
User::LeaveIfError(fsSession.Connect());
@@ -241,7 +241,7 @@
qDebug() << " Exit CNativeMmsUtility::getSmilFileL";
#endif
- return S60QConversions::s60DescToQString(attachment->FilePath());
+ return XQConversions::s60DescToQString(attachment->FilePath());
}
}
@@ -285,7 +285,7 @@
//because media source is relative to it.
QString smildirpath = fileDir(ismilfilepath);
QString mfilename =
- S60QConversions::s60DescToQString(attrvalptr);
+ XQConversions::s60DescToQString(attrvalptr);
filepath = smildirpath.append(mfilename);
}
readFileIntoBuffer(filepath, returnbuf);
@@ -321,7 +321,7 @@
== 0)
{
QString filepath =
- S60QConversions::s60DescToQString(attachment->FilePath());
+ XQConversions::s60DescToQString(attachment->FilePath());
readFileIntoBuffer(filepath, returnbuf);
break;
}
@@ -371,7 +371,7 @@
//because media source is relative to it.
QString smildirpath = fileDir(ismilfilepath);
QString mfilename =
- S60QConversions::s60DescToQString(attrvalptr);
+ XQConversions::s60DescToQString(attrvalptr);
filepath = smildirpath.append(mfilename);
}
// converting directory separators from native to
@@ -409,7 +409,7 @@
CMsvAttachment *attachment = iattachmanager->GetAttachmentInfoL(i);
TPtrC8 mimetype = attachment->MimeType();
QString filepath =
- S60QConversions::s60DescToQString(attachment->FilePath());
+ XQConversions::s60DescToQString(attachment->FilePath());
// converting directory separators from native to
// universal (QT) format
filepath.replace(KBackwardSlash, KForwardSlash);
@@ -476,7 +476,7 @@
CMsvAttachment *attachment = iattachmanager->GetAttachmentInfoL(i);
TPtrC8 mimetype = attachment->MimeType();
QString filepath =
- S60QConversions::s60DescToQString(attachment->FilePath());
+ XQConversions::s60DescToQString(attachment->FilePath());
// converting directory separators from native to
// universal (QT) format
filepath.replace(KBackwardSlash, KForwardSlash);
@@ -577,7 +577,7 @@
qDebug() << " Exit CNativeMmsUtility::getByUrlL";
#endif
- return S60QConversions::s60DescToQString(targetattachment->FilePath());
+ return XQConversions::s60DescToQString(targetattachment->FilePath());
}
else
{
--- a/messagingapp/msgappfw/msghistory/tsrc/test_appengine/src/conversationsmodel.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgappfw/msghistory/tsrc/test_appengine/src/conversationsmodel.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -19,7 +19,7 @@
#include "conversationsenginedefines.h"
#include "conversationmsgstorehandler.h"
#include "convergedmessage.h"
-#include "s60qconversions.h"
+#include <xqconversions.h>
#include "conversationsengineutility.h"
#include <ccsconversationentry.h>
@@ -251,7 +251,7 @@
QString subject("");
if( description && description->Length())
{
- subject = (S60QConversions::s60DescToQString(*description));
+ subject = (XQConversions::s60DescToQString(*description));
item.setData(subject, Subject);
}
@@ -266,7 +266,7 @@
HBufC* contact = entry.Contact();
if( contact && contact->Length())
{
- item.setData(S60QConversions::s60DescToQString(*contact), ConversationAddress);
+ item.setData(XQConversions::s60DescToQString(*contact), ConversationAddress);
}
// message type.
--- a/messagingapp/msgappfw/msghistory/tsrc/test_appengine/src/conversationssummarymodel.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgappfw/msghistory/tsrc/test_appengine/src/conversationssummarymodel.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -18,7 +18,7 @@
#include "conversationssummarymodel.h"
#include "conversationsenginedefines.h"
#include "conversationsengineutility.h"
-#include "s60qconversions.h"
+#include <xqconversions.h>
#include "convergedmessage.h"
#include <ccsclientconversation.h>
@@ -214,7 +214,7 @@
HBufC* body = conEntry->Description();
if( body && body->Length())
{
- QString bodytext(S60QConversions::s60DescToQString(*body));
+ QString bodytext(XQConversions::s60DescToQString(*body));
item.setData(bodytext, BodyText);
item.setData(bodytext, Subject );
}
@@ -235,20 +235,20 @@
//first name
if(firstname && firstname->Length())
{
- displayName = S60QConversions::s60DescToQString(*firstname);
+ displayName = XQConversions::s60DescToQString(*firstname);
item.setData(displayName,FirstName);
}
//last name
HBufC* lastname = conversation.GetLastName();
if( lastname && lastname->Length())
{
- item.setData(S60QConversions::s60DescToQString(*lastname),LastName);
+ item.setData(XQConversions::s60DescToQString(*lastname),LastName);
}
//nick name
HBufC* nickname = conversation.GetNickName();
if (nickname && nickname->Length())
{
- item.setData(S60QConversions::s60DescToQString(*nickname), NickName);
+ item.setData(XQConversions::s60DescToQString(*nickname), NickName);
}
//item.setData(displayName, NickName);
@@ -258,7 +258,7 @@
QString contactNumber("");
if ( contactno && contactno->Length() )
{
- contactNumber = S60QConversions::s60DescToQString(*contactno);
+ contactNumber = XQConversions::s60DescToQString(*contactno);
}
item.setData(contactNumber, ConversationAddress);
--- a/messagingapp/msgappfw/msghistory/tsrc/test_appengine/test_appengine.pro Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgappfw/msghistory/tsrc/test_appengine/test_appengine.pro Thu Jul 22 16:32:06 2010 +0100
@@ -20,7 +20,6 @@
DEPENDPATH += . src
INCLUDEPATH += ../../../inc
-INCLUDEPATH += ../../msgutils/s60qconversions/inc
INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
DEFINES += BUILD_DLL
@@ -64,7 +63,7 @@
LIBS += -lcsserverclientapi \
-lcsutils \
- -ls60qconversions \
+ -lxqutils \
-lconvergedmessageutils \
-lmsgs \
-lInetProtUtil \
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgappfw/msghistory/tsrc/tsrc.pro Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,25 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+TEMPLATE = subdirs
+
+CONFIG += ordered
+
+#Sub .pro files
+SUBDIRS += msghistorytest/msghistorytest.pro
+
+# Platforms
+SYMBIAN_PLATFORMS = DEFAULT
\ No newline at end of file
--- a/messagingapp/msgappfw/plugins/msgplugin/inc/ccsmsghandler.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgappfw/plugins/msgplugin/inc/ccsmsghandler.h Thu Jul 22 16:32:06 2010 +0100
@@ -114,7 +114,13 @@
* Checks if the MTM type supported
*/
TBool IsMtmSupported(long uid);
-
+
+ /**
+ * Read all message Id in iMessageArray
+ * @aFolderId - Folder Id whose message need to be sync.
+ */
+ void UpdateMessageArrayL(const TMsvId& aFolderId);
+
private:
/**
@@ -175,11 +181,6 @@
RPointerArray<HBufC>& addressList);
/**
- * Cleanup
- */
- void CleanupL();
-
- /**
* Extracts the Message type based on the MTM value
* @param aEntry, TMsvEntry
*/
@@ -232,21 +233,6 @@
TMsvEntry iPrevEntry;
/**
- * Root entry
- */
- CMsvEntry* iRootEntry;
-
- /**
- * Mesage count
- */
- TInt iMessageCount;
-
- /**
- * Messages under root entry
- */
- CMsvEntrySelection* iMessages;
-
- /**
* Master array for holding all the messages
*/
RArray<TMsvId>* iMessageArray;
--- a/messagingapp/msgappfw/plugins/msgplugin/src/ccsmsghandler.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgappfw/plugins/msgplugin/src/ccsmsghandler.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -21,6 +21,7 @@
// USER INCLUDES
#include "ccsmsghandler.h"
#include "msgbiouids.h"
+#include "ccsdefs.h"
// SYSTEM INCLUDES
#include <smsclnt.h>
@@ -68,7 +69,12 @@
CCsMsgHandler::~CCsMsgHandler()
{
PRINT ( _L("Enter CCsMsgHandler::~CCsMsgHandler") );
-
+ if(iIdle)
+ {
+ iIdle->Cancel();
+ delete iIdle;
+ iIdle=NULL;
+ }
if(iMsgPluginUtility)
{
delete iMsgPluginUtility;
@@ -107,19 +113,6 @@
iSession = NULL;
}
- if ( iRootEntry )
- {
- delete iRootEntry;
- iRootEntry = NULL;
- }
-
- if ( iMessages )
- {
- iMessages->Reset();
- delete iMessages;
- iMessages = NULL;
- }
-
if(iMessageArray)
{
iMessageArray->Reset();
@@ -146,7 +139,7 @@
iMsgPluginUtility = CCsMsgPluginUtility::NewL();
- iConverstationEntryList = new(ELeave)RPointerArray<CCsConversationEntry>();
+ iConverstationEntryList = new(ELeave) RPointerArray<CCsConversationEntry>(1);
iMtmRegistry = CClientMtmRegistry::NewL( *iSession );
@@ -160,8 +153,6 @@
iMessageArray = new (ELeave)RArray <TMsvId>(KMessageArrayGranularity);
- iMessageCount = 0;
-
PRINT ( _L("End CCsMsgHandler::ConstructL") );
}
@@ -201,12 +192,15 @@
entry.Parent() == KMsvSentEntryIdValue ||
entry.Parent() == KMsvGlobalOutBoxIndexEntryIdValue )
{
+ CleanupResetAndDestroyPushL(addressList);
+
iMsgPluginUtility->CreateContactL(iSession, entry, addressList);
//process entry
ExtractAddressesL(entry, ERead, addressList);
-
- addressList.ResetAndDestroy();
+
+ // Cleanup addressList
+ CleanupStack::PopAndDestroy(&addressList);
}
PRINT ( _L("Exit CCsMsgHandler::ProcessResultsL") );
@@ -348,6 +342,7 @@
if ( aParent == KMsvSentEntryIdValue ||
aParent == KMsvGlobalInBoxIndexEntryIdValue )
{
+ CleanupResetAndDestroyPushL(addressList);
// currently server needs number, so getting it from header
iMsgPluginUtility->CreateContactL(iSession, entry,
addressList);
@@ -356,7 +351,7 @@
// entry created in sent already exists, hence an update
ExtractAddressesL(entry, EUpdate, addressList);
- addressList.ResetAndDestroy();
+ CleanupStack::PopAndDestroy(&addressList);
}
//for drafts and outbox, the entry changes multiple times,
@@ -372,6 +367,7 @@
// as it is going to appear in sent items
if( ECsSendStateSent != iMsgPluginUtility->GetSendState(entry) )
{
+ CleanupResetAndDestroyPushL(addressList);
// currently server needs number, so getting it from header
iMsgPluginUtility->CreateContactL(iSession, entry,
addressList);
@@ -382,7 +378,7 @@
iPrevEntry = entry;
- addressList.ResetAndDestroy();
+ CleanupStack::PopAndDestroy(&addressList);
}
}//end check changed entry
}
@@ -408,13 +404,11 @@
if (aContact.Length()>0)
{
- contact = aContact.AllocL();
- CleanupStack::PushL(contact);
+ contact = aContact.AllocLC();
}
if (aDescription.Length()>0)
{
- sDescription = aDescription.AllocL();
- CleanupStack::PushL(sDescription);
+ sDescription = aDescription.AllocLC();
}
//use utility to create conversation entry
@@ -504,7 +498,7 @@
aEntry.iBioType != KUidMsgSubTypeMmsAudioMsg.iUid ) ||
aEntry.iMtm == KSenduiMtmBtUid )
{
- tmpBuffer = aEntry.iDescription.AllocL();
+ tmpBuffer = aEntry.iDescription.AllocLC();
description.Set( tmpBuffer->Des() );
}
else if ( aEntry.iMtm == KSenduiMtmSmsUid )
@@ -514,7 +508,7 @@
CRichText& body = iSmsMtm->Body();
TInt smsLength = body.DocumentLength();
- tmpBuffer = HBufC::NewL(smsLength);
+ tmpBuffer = HBufC::NewLC(smsLength);
TPtr ptr(tmpBuffer->Des());
body.Extract(ptr, 0);
description.Set( tmpBuffer->Des() );
@@ -522,7 +516,7 @@
else if ( aEntry.iMtm == KSenduiMtmMmsUid ||
aEntry.iMtm == KSenduiMMSNotificationUid)
{
- tmpBuffer = aEntry.iDescription.AllocL();
+ tmpBuffer = aEntry.iDescription.AllocLC();
description.Set( tmpBuffer->Des() );
iMmsMtm->SwitchCurrentEntryL( aEntry.Id() );
@@ -568,8 +562,12 @@
// Unknown
ProcessEntryL(aEvent, KNullDesC, description, aEntry);
}
-
- delete tmpBuffer;
+
+ //Cleanup tmpBuffer
+ if ( tmpBuffer )
+ {
+ CleanupStack::PopAndDestroy();
+ }
PRINT ( _L("Exit CCsMsgHandler::ExtractAddressesL") );
}
@@ -589,108 +587,59 @@
// -----------------------------------------------------------------------------
//
TInt CCsMsgHandler::UploadMsgL()
-{
+ {
+ //Release scheduler for scheduling.
+ User::After(1);
+
switch ( iState )
- {
- case EReadInbox:
{
- iRootEntry = iSession->GetEntryL(KMsvGlobalInBoxIndexEntryId);
-
- // Set sort order
- TMsvSelectionOrdering order;
- order.SetSorting(EMsvSortById);
- iRootEntry->SetSortTypeL(order);
-
- iMessages = iRootEntry->ChildrenL();
- iMessageCount = iRootEntry->Count();
- if(iMessageCount)
+ case EReadInbox:
{
- for(int i = 0; i < iMessageCount; i ++)
- {
- iMessageArray->Append(iMessages->At(i));
- }
+ UpdateMessageArrayL(KMsvGlobalInBoxIndexEntryId);
+ iState = EReadSent;
+ return 1;
}
- iState = EReadSent;
- CleanupL();
-
- return 1;
- }
-
case EReadSent:
- {
- iRootEntry = iSession->GetEntryL(KMsvSentEntryId);
-
- // Set sort order
- TMsvSelectionOrdering order;
- order.SetSorting(EMsvSortById);
- iRootEntry->SetSortTypeL(order);
-
- iMessages = iRootEntry->ChildrenL();
- iMessageCount = iRootEntry->Count();
- if(iMessageCount)
{
- for(int i = 0; i < iMessageCount; i++ )
- {
- iMessageArray->Append(iMessages->At(i));
- }
+ UpdateMessageArrayL(KMsvSentEntryId);
+ iState = EReadOutbox;
+ return 1;
}
- iState = EReadOutbox;
- CleanupL();
-
- return 1;
- }
-
case EReadOutbox:
- {
- iRootEntry = iSession->GetEntryL(KMsvGlobalOutBoxIndexEntryId);
-
- // Set sort order
- TMsvSelectionOrdering order;
- order.SetSorting(EMsvSortById);
- iRootEntry->SetSortTypeL(order);
-
- iMessages = iRootEntry->ChildrenL();
- iMessageCount = iRootEntry->Count();
-
- if(iMessageCount)
{
- for(int i = 0; i < iMessageCount; i ++)
- {
- iMessageArray->Append(iMessages->At(i));
- }
- iMessageCount=0;
+ UpdateMessageArrayL(KMsvGlobalOutBoxIndexEntryId);
+ iState = ESortEntries;
+ return 1;
}
- iState = ESortEntries;
- CleanupL();
-
- return 1;
- }
case ESortEntries:
- {
- //Sort the elements in the array by descending order of TMsvId's
+ {
+ //Sort the elements in the array by descending order of TMsvId's
TLinearOrder<TMsvId> order(CompareOrder);
iMessageArray->Sort(order);
iState = EProcessEntries;
return 1;
- }
-
+ }
case EProcessEntries:
- {
+ {
//Process one entry at a time in sequence
//Process the first element in the array on each call, till the end
if(iMessageArray->Count())
- {
- ProcessResultsL(iSession->GetEntryL(iMessageArray->operator[](0))->Entry());
+ {
+ CMsvEntry* msvEntry= iSession->
+ GetEntryL(iMessageArray->operator[](0));
+ CleanupStack::PushL(msvEntry);
+ ProcessResultsL(msvEntry->Entry());
+ CleanupStack::PopAndDestroy(msvEntry);
iMessageArray->Remove(0);
- }
+ }
else
- {
+ {
+ iMessageArray->Reset();
iMsgObserver->HandleCachingCompleted();
return 0; //DONE
- }
-
+ }
iState = EProcessEntries;
return 1;
}
@@ -722,36 +671,19 @@
iState = EReadInbox;
TCallBack callback = TCallBack(UploadMsg, (TAny*) this);
- iIdle = CIdle::NewL(CActive::EPriorityLow);
+
+ if(iIdle)
+ {
+ delete iIdle;
+ iIdle = NULL;
+ }
+ iIdle = CIdle::NewL(CActive::EPriorityIdle);
iIdle->Start(callback);
PRINT ( _L("End CCsMsgHandler::Start") );
}
// -----------------------------------------------------------------------------
-// CCsMsgHandler::CleanupL()
-// Helper function for state machine cleanup
-// -----------------------------------------------------------------------------
-//
-void CCsMsgHandler::CleanupL()
- {
- if ( iRootEntry )
- {
- delete iRootEntry;
- iRootEntry = NULL;
- }
-
- if ( iMessages )
- {
- iMessages->Reset();
- delete iMessages;
- iMessages = NULL;
- }
-
- iMessageCount = 0;
- }
-
-// -----------------------------------------------------------------------------
// CCsMsgHandler::IsMtmSupported()
//
// -----------------------------------------------------------------------------
@@ -823,14 +755,52 @@
else if (aEntry.iBioType == KMsgBioUidVCalendar.iUid)
{
type = ECsBioMsg_VCal;
- }
- }
- break;
- default:
- type = ECsUnknown;
- break;
+ }
+ else if (aEntry.iBioType == KMsgBioNokiaServiceMessage.iUid) {
+ type = ECsBioMgs_NokiaService;
}
- return (type);
+ }
+ break;
+ default:
+ type = ECsUnknown;
+ break;
+ }
+ return (type);
+}
+// -----------------------------------------------------------------------------
+// void CCsMsgHandler::UpdateMessageArrayL(const TMsvId& aFolderId)
+// Update iMessageArray with the message ID before upload message to csserver.
+// -----------------------------------------------------------------------------
+//
+void CCsMsgHandler::UpdateMessageArrayL(const TMsvId& aFolderId)
+ {
+ CMsvEntry* msvEntry = iSession->GetEntryL(aFolderId);
+ CleanupStack::PushL(msvEntry);
+ // Set sort order
+ TMsvSelectionOrdering order;
+ order.SetSorting(EMsvSortById);
+ msvEntry->SetSortTypeL(order);
+
+ CMsvEntrySelection* messages = msvEntry->ChildrenL();
+ // Cleanup msvEntry
+ CleanupStack::PopAndDestroy(msvEntry);
+ CleanupStack::PushL(messages);
+
+ TInt messageCount = messages->Count();
+
+ // In case of large number of message caching
+ // to avoid multiple reallocation alloc memory
+ // one shot.
+ if( messageCount > KMessageArrayGranularity)
+ iMessageArray->Reserve(messageCount);
+
+ for(int i = 0; i < messageCount; i ++)
+ {
+ TMsvId msgId=messages->At(i);
+ iMessageArray->Append(msgId);
+ }
+ // Cleanup messages
+ CleanupStack::PopAndDestroy(messages);
}
// End of file
--- a/messagingapp/msgappfw/plugins/msgplugin/src/ccsmsgpluginutility.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgappfw/plugins/msgplugin/src/ccsmsgpluginutility.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -72,10 +72,13 @@
CleanupStack::PushL(conversationEntry);
//set the values
- conversationEntry->SetContactL( *aContact );
+ if(aContact)
+ conversationEntry->SetContactL( *aContact );
conversationEntry->SetEntryId( aEnryId );
conversationEntry->SetTimeStampL( aTimeStamp );
+ if (aDescription) {
conversationEntry->SetDescriptionL( *aDescription );
+ }
conversationEntry->SetConversationDir( MapDirection( aDir ) );
conversationEntry->SetSendState( aSendState );
conversationEntry->ChangeAttributes( aMsgAttribs, ECsAttributeNone );
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgappfw/plugins/msgplugin/tsrc/conf/test_plugin.cfg Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,72 @@
+/*
+* ==============================================================================
+* Name : test_plugin.cfg
+* Part of : plugin / test_plugin
+* Description : plugin related test cases
+* Version: : % version:1 %
+*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* ============================================================================
+*/
+
+[Test]
+title 1. CreateCcsPluginL
+create test_plugin testplugin
+testplugin CreateCcsPluginL
+delete testplugin
+[Endtest]
+
+
+[Test]
+title 2. CreateCCsMsgL
+create test_plugin testplugin
+testplugin CreateCCsMsgL
+delete testplugin
+[Endtest]
+
+
+[Test]
+title 3. CacheFromCcsPluginL
+create test_plugin testplugin
+testplugin CacheFromCcsPluginL
+delete testplugin
+[Endtest]
+
+[Test]
+title 4. SmsMsgPluginValidationL
+create test_plugin testplugin
+testplugin SmsMsgPluginValidationL
+delete testplugin
+[Endtest]
+
+
+[Test]
+title 5. SendCcsMessageL
+create test_plugin testplugin
+testplugin SendCcsMessageL
+delete testplugin
+[Endtest]
+
+
+[Test]
+title 6. MmsMsgPluginValidationL
+create test_plugin testplugin
+testplugin MmsMsgPluginValidationL
+delete testplugin
+[Endtest]
+
+[Test]
+title 7. BioMsgPluginValidationL
+create test_plugin testplugin
+testplugin BioMsgPluginValidationL
+delete testplugin
+[Endtest]
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgappfw/plugins/msgplugin/tsrc/group/bld.inf Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: ?Description
+*
+*/
+
+#define BLD_INF_GROUP_0496D339
+
+
+prj_platforms
+
+WINSCW GCCE ARMV5 ARMV6
+
+prj_testmmpfiles
+
+test_plugin.mmp
+
+prj_extensions
+
+
+#if defined(WINSCW)
+#else
+#endif
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgappfw/plugins/msgplugin/tsrc/group/test_plugin.mmp Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,98 @@
+/*TYPE TESTCLASS*//*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: ?Description
+*
+*/
+
+
+// To get the OSEXT_LAYER_SYSTEMINCLUDE-definition
+#include <platform_paths.hrh>
+#include <data_caging_paths_strings.hrh>
+
+
+TARGET test_plugin.dll
+TARGETTYPE dll
+UID 0x1000008D 0x101FB3E4
+
+CAPABILITY ALL -TCB
+
+//TARGETPATH ?target_path
+DEFFILE test_plugin.def
+
+#ifdef SBSV2
+ USERINCLUDE ../inc
+
+ #if defined(__S60_)
+
+ #else // __S60_ not defined
+ SYSTEMINCLUDE /epoc32/include
+ SYSTEMINCLUDE /epoc32/include/internal
+ #endif // __S60_
+
+ SOURCEPATH ../src
+#else // SBSV2 not defined
+ USERINCLUDE ..\inc
+
+ #if defined(__S60_)
+ OSEXT_LAYER_SYSTEMINCLUDE
+ #else // __S60_ not defined
+ SYSTEMINCLUDE \epoc32\include
+ SYSTEMINCLUDE \epoc32\include\internal
+ #endif // __S60_
+
+ SOURCEPATH ..\src
+#endif // SBSV2
+
+SOURCEPATH ../src
+SOURCE test_plugin.cpp
+SOURCE test_pluginblocks.cpp
+SOURCE ..\..\src\proxy.cpp
+SOURCE ..\..\src\ccsmsg.cpp
+SOURCE ..\..\src\ccsmsgpluginutility.cpp
+SOURCE ..\..\src\ccsmsghandler.cpp
+
+USERINCLUDE ..\inc
+USERINCLUDE ..\..\inc
+USERINCLUDE ..\..\..\..\..\conversationserver\csserver\inc
+USERINCLUDE ..\..\..\..\..\conversationserver\csutils\inc
+USERINCLUDE ..\..\..\..\..\..\..\os\buildtools\devlib\devlibhelp\examples\SysLibs\CentRepExample
+USERINCLUDE ..\..\..\..\..\messagingappbase\obexmtms\TObexMTM\INC
+USERINCLUDE ..\..\..\..\..\..\inc
+USERINCLUDE ..\..\..\..\utils\inc
+USERINCLUDE ..\..\..\..\..\..\..\..\mw\messagingmw\messagingfw\msgtest\testutils\sms\inc
+
+
+APP_LAYER_SYSTEMINCLUDE
+
+LIBRARY euser.lib
+LIBRARY stiftestinterface.lib
+LIBRARY stiftestengine.lib
+LIBRARY efsrv.lib
+
+
+LIBRARY eCom.lib
+DEBUGLIBRARY flogger.lib
+
+LIBRARY csutils.lib
+// Msg Server
+LIBRARY Smcm.lib
+LIBRARY gsmu.lib
+LIBRARY etext.lib
+LIBRARY msgs.lib
+LIBRARY sendas2.lib
+
+LANG SC
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgappfw/plugins/msgplugin/tsrc/group/test_plugin.pkg Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,41 @@
+;
+; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+;Header
+#{"TestPlugin"}, (0x101FB3E3), 1, 2, 3, TYPE=SP
+
+;Language - standard language definitions
+&EN
+
+;Vendor ID
+:"Nokia Corporation"
+
+;Localised vendor
+%{"Vendor-EN"}
+
+;Supports Series 60 v 0.9
+[0x101F7961], 0, 0, 0, {"Series60ProductID"}
+
+;rom will not allow to update it if name is testframework, after install need to rename it to testframework.ini
+
+;INI FILE
+"..\init\test_plugin.ini" -"c:\Testframework\testframework.ini"
+
+;CFG FILES
+"..\conf\test_plugin.cfg" -"c:\Testframework\test_plugin.cfg"
+
+
+"\EPOC32\RELEASE\ARMV5\UREL\test_plugin.dll" -"!:\sys\bin\test_plugin.dll"
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgappfw/plugins/msgplugin/tsrc/inc/test_plugin.h Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,244 @@
+/*
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: Main test class header for CS Message Plugin
+#*/
+
+#ifndef TEST_PLUGIN_H_
+#define TEST_PLUGIN_H_
+
+// INCLUDES
+#include <badesca.h>
+#include <StifLogger.h>
+#include <TestScripterInternal.h>
+#include <StifTestModule.h>
+
+// USER INCLUDES
+#include <mcsplugineventobserver.h>
+#include <ccsmsg.h>
+#include <ccsmsghandler.h>
+#include <ccsdefs.h>
+#include <ccsconversationentry.h>
+#include <ccsmsgpluginutility.h>
+#include <smsclnt.h>
+#include <mmsclient.h>
+#include <cmsvmimeheaders.h>
+#include <mmsvattachmentmanager.h>
+#include <CAsyncWaiter.h>
+#include <mtclreg.h>
+#include <biouids.h>
+#include <msgbiouids.h>
+
+
+// Logging path
+_LIT( KTestPluginLogPath, "\\logs\\testframework\\test_plugin\\" );
+// Log file
+_LIT( KTestPluginTestLogFile, "test_plugin.txt" );
+_LIT( KTestPluginTestLogFileWithTitle, "test_plugin_[%S].txt" );
+
+// FORWARD DECLARATIONS
+class CCsMsg;
+class CCsMsgHandler;
+class CCsMsgPluginUtility;
+class MCsMsgObserver;
+class CCsConversationEntry;
+class CCsMsgPluginUtility;
+class CMsvSession;
+class CClientMtmRegistry;
+class CSmsClientMtm;
+class CMmsClientMtm;
+class CMsvMimeHeaders;
+class CAsyncWaiter;
+class CMmsSettings;
+
+/**
+ * Message plugin class
+ **/
+
+NONSHARABLE_CLASS(Ctest_plugin) : public CScriptBase,public MCsPluginEventObserver,public MMsvSessionObserver
+ {
+ private:
+
+ /**
+ * C++ default constructor.
+ */
+ Ctest_plugin(CTestModuleIf& aTestModuleIf );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL();
+
+ // Prohibit copy constructor if not deriving from CBase.
+ // ?classname( const ?classname& );
+ // Prohibit assigment operator if not deriving from CBase.
+ // ?classname& operator=( const ?classname& );
+
+ /**
+ * Frees all resources allocated from test methods.
+ * @since ?Series60_version
+ */
+ void Delete();
+
+ /**
+ * Example test method.
+ * @since ?Series60_version
+ * @param aItem Script line containing parameters.
+ * @return Symbian OS error code.
+ */
+ virtual TInt ExampleL( CStifItemParser& aItem );
+
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static Ctest_plugin* NewL( CTestModuleIf& aTestModuleIf );
+
+ /**
+ * From CScriptBase Runs a script line.
+ * @since ?Series60_version
+ * @param aItem Script line containing method name and parameters
+ * @return Symbian OS error code
+ * */
+ virtual TInt RunMethodL( CStifItemParser& aItem );
+ /**
+ * Destructor.
+ */
+ virtual ~Ctest_plugin();
+
+ private: // Data
+
+ CCsMsg* iPlugin;
+
+ /**
+ * MsvServer session object
+ */
+ CMsvSession* iSession;
+
+ /**
+ * Mtm registry object
+ */
+ CClientMtmRegistry* iMtmRegistry;
+
+ /**
+ * Sms Client mtm object
+ */
+ CSmsClientMtm* iSmsClientMtm;
+
+ /**
+ * MMS Client mtm object
+ */
+ CMmsClientMtm* iMmsClientMtm;
+
+ /**
+ * List contains the CCsConversationEntry objects that needs to be
+ * verified with the list obtained from sms plugin
+ */
+ RPointerArray<CCsConversationEntry> iTestConversationEntryList;
+
+ /**
+ * List obtained from sms plugin
+ */
+ RPointerArray<CCsConversationEntry> iResultConversationEntryList;
+
+
+ public://Mcsplugineventobserver
+ /**
+ * AddConversations.
+ * Handle Conversation event from Plugins
+ * @param aConversationEntryLists List of conversation entries.
+ */
+ void AddConversations(const RPointerArray<CCsConversationEntry>& aConversationEntryLists);
+
+ /**
+ * ModifyConversations.
+ * Update Conversation event from Plugins
+ * @param aConversationEntryLists List of conversation entries.
+ */
+ void ModifyConversations(const RPointerArray<CCsConversationEntry>& aConversationEntryLists);
+
+ /**
+ * DeleteConversations.
+ * Delete Conversation event from Plugins
+ * @param aConversationEntryLists List of conversation entries.
+ */
+ void DeleteConversations(const RPointerArray<CCsConversationEntry>& aConversationEntryLists);
+ /**
+ * CachingCompleted.
+ * Caching complete event from Plugins
+ */
+ void CachingCompleted();
+
+ /**
+ * CachingError.
+ * Caching error event from Plugins
+ * @param aError Caching Error infomation.
+ */
+ void CachingError(const TInt aError) ;
+
+ /**
+ * RefreshConversations
+ * Refresh all data from this plugin.
+ */
+ void RefreshConversations();
+
+ public://from MmsvSessionObserver
+ /**
+ * Handles the MsvServer updates. Implemented for MMsvSessionObserver
+ */
+ void HandleSessionEventL(TMsvSessionEvent aEvent, TAny *aArg1, TAny *aArg2, TAny *aArg3);
+
+ public:
+
+ virtual TInt CreateCCsMsgL( CStifItemParser& aItem );
+ virtual TInt SendCcsMessageL( CStifItemParser& /*aItem*/ );
+ virtual TInt CacheFromCcsPluginL( CStifItemParser& /*aItem*/ );
+ virtual TInt CreateCcsPluginL( CStifItemParser& /*aItem*/ );
+ virtual TInt SmsMsgPluginValidationL( CStifItemParser& aItem );
+ virtual TInt MmsMsgPluginValidationL( CStifItemParser& aItem );
+ virtual TInt BioMsgPluginValidationL( CStifItemParser& aItem );
+
+ TInt Compare(CCsConversationEntry *aResult, CCsConversationEntry *aTest);
+ /**
+ * Cleans messages from all foldes
+ */
+ void CleanAllFoldersL();
+
+ /**
+ * Populates the messages in different folders which are used
+ * to verify the caching logic of ccs plugin
+ */
+ void CreateInitialCacheL();
+
+ /**
+ * Cleans messages from the specified folder
+ * @param aBoxId , folder from where messages has to be deleted
+ * @param aDeleteOne , if set only one message is deleted
+ */
+ void CleanMessagesInFolderL(TMsvId aBoxId ,TBool aDeleteOne = EFalse);
+
+ /**
+ * Creates messages in the different folders and populates
+ * the iTestConversationEntryList
+ * @param aFolderId , the folder in which message is to be created
+ * @param aUnReadFlag , Used while creating message in inbox folder
+ */
+ void CreateMessageL(const TMsvId aFolderId,TBool aUnReadFlag = EFalse);
+ void CreateMmsMessageL(const TMsvId aFolderId,TBool aUnReadFlag = EFalse);
+ void HandleAttachementL(CMsvStore* store,TFileName& sourceFileName );
+ void CreateSmartMessageL(const TMsvId aFolderId,TBool aUnReadFlag = EFalse);
+ };
+
+#endif /* TEST_PLUGIN_H_ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgappfw/plugins/msgplugin/tsrc/init/TestFramework.ini Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,44 @@
+#
+# This is STIFTestFramework initialization file
+# Comment lines start with '#'-character.
+# See STIF TestFramework users guide.doc for instructions
+
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+[Engine_Defaults]
+
+TestReportMode= FullReport # Possible values are: 'Empty', 'Summary', 'Environment',
+ 'TestCases' or 'FullReport'
+
+CreateTestReport= YES # Possible values: YES or NO
+
+TestReportFilePath= C:\LOGS\TestFramework\
+TestReportFileName= TestReport
+
+TestReportFormat= TXT # Possible values: TXT or HTML
+TestReportOutput= FILE # Possible values: FILE or RDEBUG
+TestReportFileCreationMode= OVERWRITE # Possible values: OVERWRITE or APPEND
+
+DeviceResetDllName= StifResetForNokia.dll # e.g. 'StifHWResetStub.dll' for user specific reseting
+
+[End_Defaults]
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+# Module configurations start
+
+[New_Module]
+ModuleName= testscripter
+TestCaseFile= C:\testframework\test_plugin.cfg
+[End_Module]
+
+
+
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+[Logger_Defaults]
+
+[End_Logger_Defaults]
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+# End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgappfw/plugins/msgplugin/tsrc/src/test_plugin.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,149 @@
+/*
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: Test class for CS Message Plugin
+#
+*/
+
+
+// INCLUDE FILES
+#include <Stiftestinterface.h>
+#include "test_plugin.h"
+#include <SettingServerClient.h>
+
+// -----------------------------------------------------------------------------
+// Ctest_plugin::Ctest_plugin
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+
+Ctest_plugin::Ctest_plugin( CTestModuleIf& aTestModuleIf ) : CScriptBase( aTestModuleIf )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// Ctest_plugin::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+
+void Ctest_plugin::ConstructL()
+ {
+ //Read logger settings to check whether test case name is to be
+ //appended to log file name.
+ RSettingServer settingServer;
+ TInt ret = settingServer.Connect();
+ if(ret != KErrNone)
+ {
+ User::Leave(ret);
+ }
+ // Struct to StifLogger settigs.
+ TLoggerSettings loggerSettings;
+ // Parse StifLogger defaults from STIF initialization file.
+ ret = settingServer.GetLoggerSettings(loggerSettings);
+ if(ret != KErrNone)
+ {
+ User::Leave(ret);
+ }
+ // Close Setting server session
+ settingServer.Close();
+
+ TFileName logFileName;
+
+ if(loggerSettings.iAddTestCaseTitle)
+ {
+ TName title;
+ TestModuleIf().GetTestCaseTitleL(title);
+ logFileName.Format(KTestPluginTestLogFileWithTitle, &title);
+ }
+ else
+ {
+ logFileName.Copy(KTestPluginTestLogFile);
+ }
+
+ iLog = CStifLogger::NewL( KTestPluginLogPath,
+ logFileName,
+ CStifLogger::ETxt,
+ CStifLogger::EFile,
+ EFalse );
+
+ iSession = CMsvSession::OpenSyncL( *this);
+ iMtmRegistry = CClientMtmRegistry::NewL( *iSession );
+ iSmsClientMtm = STATIC_CAST( CSmsClientMtm*, iMtmRegistry->NewMtmL( KUidMsgTypeSMS ));
+
+ iMmsClientMtm = STATIC_CAST( CMmsClientMtm*, iMtmRegistry->NewMtmL( KUidMsgTypeMultimedia ));
+ iPlugin = NULL;
+
+ TestModuleIf().SetBehavior( CTestModuleIf::ETestLeaksHandles );
+ }
+
+// -----------------------------------------------------------------------------
+// Ctest_plugin::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+Ctest_plugin* Ctest_plugin::NewL(
+ CTestModuleIf& aTestModuleIf )
+ {
+ Ctest_plugin* self = new (ELeave) Ctest_plugin( aTestModuleIf );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// Ctest_plugin::~Cimcache_test
+// Destructor
+// -----------------------------------------------------------------------------
+//
+Ctest_plugin::~Ctest_plugin()
+ {
+
+ // Delete resources allocated from test methods
+ Delete();
+
+ // Delete logger
+ delete iLog;
+
+ }
+
+// ----------------------------------------------------------------------------
+ // Ctest_plugin::HandleSessionEventL
+ // Implemented for MMsvSessionObserver
+ // ----------------------------------------------------------------------------
+ //
+void Ctest_plugin::HandleSessionEventL(TMsvSessionEvent /*aEvent*/,
+ TAny */*aArg1*/,
+ TAny */*aArg2*/,
+ TAny */*aArg3*/)
+ {
+
+ }
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+
+// -----------------------------------------------------------------------------
+// LibEntryL is a polymorphic Dll entry point.
+// Returns: CScriptBase: New CScriptBase derived object
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CScriptBase* LibEntryL(
+ CTestModuleIf& aTestModuleIf ) // Backpointer to STIF Test Framework
+ {
+ return ( CScriptBase* ) Ctest_plugin::NewL( aTestModuleIf );
+ }
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgappfw/plugins/msgplugin/tsrc/src/test_pluginblocks.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,985 @@
+/*
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: Main test class for CS Message Plugin
+#*/
+
+// [INCLUDE FILES] - do not remove
+#include <e32svr.h>
+#include <msvsearchsortoperation.h>
+#include <msvsearchsortquery.h>
+#include <StifParser.h>
+#include <Stiftestinterface.h>
+#include <TXTRICH.H>
+#include <SMUTHDR.H>
+#include <smut.h>
+#include <msvstd.h>
+#include <rsendas.h>
+#include <rsendasmessage.h>
+#include <ecom\ECom.h>
+#include "test_plugin.h"
+#include "CCsPlugin.h"
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// Ctest_plugin::Delete
+//
+// -----------------------------------------------------------------------------
+//
+void Ctest_plugin::Delete()
+ {
+ iResultConversationEntryList.ResetAndDestroy();
+ iResultConversationEntryList.Close();
+
+ iTestConversationEntryList.ResetAndDestroy();
+ iTestConversationEntryList.Close();
+
+ if( iPlugin )
+ {
+ delete iPlugin;
+ iPlugin = NULL;
+ }
+
+ if (iSession)
+ {
+ delete iSession;
+ iSession = NULL;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// Ctest_plugin::RunMethodL
+//
+// -----------------------------------------------------------------------------
+//
+TInt Ctest_plugin::RunMethodL( CStifItemParser& aItem )
+ {
+ TStifFunctionInfo const KFunctions[] =
+ {
+ // Copy this line for every implemented function.
+ // First string is the function name used in TestScripter script file.
+ // Second is the actual implementation member function.
+
+ ENTRY( "Example", Ctest_plugin::ExampleL ),
+ ENTRY( "CacheFromCcsPluginL", Ctest_plugin::CacheFromCcsPluginL ),
+ ENTRY( "CreateCCsMsgL", Ctest_plugin::CreateCCsMsgL ),
+
+ ENTRY( "CreateCcsPluginL", Ctest_plugin::CreateCcsPluginL ),
+ ENTRY( "SendCcsMessageL", Ctest_plugin::SendCcsMessageL ),
+ ENTRY( "SmsMsgPluginValidationL", Ctest_plugin::SmsMsgPluginValidationL),
+ ENTRY( "MmsMsgPluginValidationL",Ctest_plugin::MmsMsgPluginValidationL),
+ ENTRY( "BioMsgPluginValidationL",Ctest_plugin::BioMsgPluginValidationL)
+
+ };
+
+ const TInt count = sizeof( KFunctions ) / sizeof( TStifFunctionInfo );
+ return RunInternalL( KFunctions, count, aItem );
+ }
+
+// -----------------------------------------------------------------------------
+// Ctestsmsplugin::ExampleL
+// Example test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt Ctest_plugin::ExampleL( CStifItemParser& aItem )
+ {
+
+ // Print to UI
+ _LIT( Ktestplugin, "testplugin" );
+ _LIT( KExample, "In Example" );
+ TestModuleIf().Printf( 0, Ktestplugin, KExample );
+ // Print to log file
+ iLog->Log( KExample );
+
+ TInt i = 0;
+ TPtrC string;
+ _LIT( KParam, "Param[%i]: %S" );
+ while ( aItem.GetNextString ( string ) == KErrNone )
+ {
+ TestModuleIf().Printf( i, Ktestplugin,
+ KParam, i, &string );
+ i++;
+ }
+
+ return KErrNone;
+
+ }
+
+// -----------------------------------------------------------------------------
+// Ctest_plugin::CreateCCsMsgL
+// Example test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt Ctest_plugin::CreateCCsMsgL( CStifItemParser& /*aItem*/ )
+ {
+
+ // Print to UI
+ _LIT( Ktestplugin, "CreateCCsMsgL" );
+ _LIT( KFunction, "In CreateCCsMsgL" );
+ TestModuleIf().Printf( 0, Ktestplugin, KFunction );
+ // Print to log file
+ iLog->Log( KFunction );
+ iPlugin = CCsMsg::NewL(this);
+ iPlugin->GetConversationsL();
+
+ return KErrNone;
+
+ }
+
+// -----------------------------------------------------------------------------
+// Ctest_plugin::CacheFromCcsPluginL
+// Creates the ccs plugin and initiates the caching
+// -----------------------------------------------------------------------------
+//
+TInt Ctest_plugin::CacheFromCcsPluginL( CStifItemParser& /*aItem*/ )
+ {
+ // Print to UI
+ _LIT( Ktestplugin, "CacheFromCcsPluginL" );
+ _LIT( KFunction, "In CacheFromCcsPluginL" );
+ TestModuleIf().Printf( 0, Ktestplugin, KFunction );
+ // Print to log file
+ iLog->Log( KFunction );
+
+ iTestConversationEntryList.ResetAndDestroy();
+ iResultConversationEntryList.ResetAndDestroy();
+
+ iPlugin = CCsMsg::NewL(this);
+ iPlugin->GetConversationsL();
+
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// Ctest_plugin::CreateCcsPluginL
+// Creates ccs plugin.
+// -----------------------------------------------------------------------------
+//
+TInt Ctest_plugin::CreateCcsPluginL( CStifItemParser& /*aItem*/ )
+ {
+ // Print to UI
+ _LIT( Ktestplugin, "CreateCcsPluginL" );
+ _LIT( KFunction, "In CreateCcsPluginL" );
+ TestModuleIf().Printf( 0, Ktestplugin, KFunction );
+ // Print to log file
+ iLog->Log( KFunction );
+
+ iTestConversationEntryList.ResetAndDestroy();
+ iResultConversationEntryList.ResetAndDestroy();
+
+ iPlugin = CCsMsg::NewL(this);
+
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// Ctestsmsplugin::SendCcsMessageL
+// Send ccs message using RSendAs api
+// -----------------------------------------------------------------------------
+//
+TInt Ctest_plugin::SendCcsMessageL( CStifItemParser& /*aItem*/ )
+ {
+ // Print to UI
+ _LIT( Ktestplugin, "SendCcsMessageL" );
+ _LIT( KFunction, "In SendCcsMessageL" );
+ TestModuleIf().Printf( 0, Ktestplugin, KFunction );
+ // Print to log file
+ iLog->Log( KFunction );
+
+ iTestConversationEntryList.ResetAndDestroy();
+ iResultConversationEntryList.ResetAndDestroy();
+
+ RSendAs sendas;
+ CleanupClosePushL(sendas);
+ TInt res = sendas.Connect();
+ User::LeaveIfError(res);
+
+ RSendAsMessage message;
+ CleanupClosePushL(message);
+ TRAP(res, message.CreateL(sendas, KUidMsgTypeSMS));
+ User::LeaveIfError(res);
+
+ TBuf<512> MsgText;
+ MsgText.Copy(_L("Message being sent"));
+ message.SetBodyTextL(MsgText);
+ TBuf<15> RecAdd;
+ RecAdd.Copy(_L("123456789"));
+ message.AddRecipientL(RecAdd,RSendAsMessage::ESendAsRecipientTo );
+
+
+ message.SendMessageAndCloseL();
+ CleanupStack::Pop(1); // RMessage
+ CleanupStack::PopAndDestroy(1); // RSendAs
+
+ return KErrNone;
+ }
+
+
+// -----------------------------------------------------------------------------
+// Ctest_plugin::CreateMmsMessageL
+// Creates messages in the different folders and populates the
+// iTestConversationEntryList
+// -----------------------------------------------------------------------------
+//
+void Ctest_plugin::CreateMmsMessageL(const TMsvId aFolderId,
+ TBool aUnReadFlag)
+ {
+
+ // create a new object to access an existing entry
+ CMsvEntry* msvEntry = CMsvEntry::NewL(*iSession, KMsvGlobalInBoxIndexEntryId, TMsvSelectionOrdering());
+ CleanupStack::PushL(msvEntry);
+
+ TMsvId defaultServiceId = 0;
+ defaultServiceId = iMmsClientMtm->DefaultServiceL();
+
+ _LIT( KMMSBody, " Hi !!!");
+
+ CleanupStack::Pop(msvEntry);
+ iMmsClientMtm->SetCurrentEntryL(msvEntry);
+ iMmsClientMtm->CreateMessageL(defaultServiceId);
+ iMmsClientMtm->SetSubjectL(KMMSBody);
+
+ // set some mms defaults
+ iMmsClientMtm->SetMessageClass(EMmsClassPersonal);
+ iMmsClientMtm->SetExpiryInterval(86400);
+ iMmsClientMtm->SetDeliveryTimeInterval(3600);
+ iMmsClientMtm->SetMessagePriority(EMmsPriorityLow);
+ iMmsClientMtm->SetSenderVisibility(EMmsMaximumSenderVisibility);
+ iMmsClientMtm->SetDeliveryReport(EMmsDeliveryReportYes);
+ iMmsClientMtm->SetReadReply(EMmsReadReplyYes);
+
+ _LIT(KPhoneNumberString,"234567");
+ TBuf<15> phoneNumberString;
+ phoneNumberString.Copy(KPhoneNumberString);
+ _LIT(KPhoneNumberString1,"mine<98450>");
+ _LIT(KResultPhoneNumberString,"98450");
+
+ if (aFolderId == KMsvGlobalInBoxIndexEntryId)
+ {
+ iMmsClientMtm->SetSenderL(KResultPhoneNumberString);
+ }
+
+ iMmsClientMtm->AddAddresseeL(KResultPhoneNumberString);
+
+ CMsvStore* store = msvEntry->EditStoreL();
+ CleanupStack::PushL(store);
+
+ // set body as an attachment
+ CMsvMimeHeaders* mimeHeaders = CMsvMimeHeaders::NewL();
+ CleanupStack::PushL(mimeHeaders);
+ mimeHeaders->SetContentTypeL( _L8("text") );
+ mimeHeaders->SetContentSubTypeL( _L8("plain") );
+ mimeHeaders->SetMimeCharset( KMmsUtf8 );
+ mimeHeaders->SetSuggestedFilenameL( _L("body.txt") );
+
+ MMsvAttachmentManager& attachMan = store->AttachmentManagerL();
+ CMsvAttachment* attachmentInfo = CMsvAttachment::NewL(CMsvAttachment::EMsvFile); // ownership of attachmentInfo will be transferred
+ CleanupStack::PushL(attachmentInfo);
+ attachmentInfo->SetAttachmentNameL( _L("body.txt") );
+ attachmentInfo->SetMimeTypeL( _L8("text/plain") );
+ mimeHeaders->StoreL( *attachmentInfo );
+
+ RFile textFile;
+
+ CMsvOperationActiveSchedulerWait* waiter = CMsvOperationActiveSchedulerWait::NewLC();
+ attachMan.CreateAttachmentL(_L("body.txt"), textFile, attachmentInfo, waiter->iStatus );
+ CleanupStack::Pop(); // waiter
+ CleanupStack::Pop(); // attachmentInfo
+ CleanupStack::PushL(waiter);
+ waiter->Start();
+ CleanupStack::PopAndDestroy(waiter);
+
+ HBufC8* tempBuf = HBufC8::NewLC( 10 );
+ tempBuf->Des().Copy( KMMSBody );
+ textFile.Write( tempBuf->Des() );
+ textFile.Close();
+ CleanupStack::PopAndDestroy(); //tempBuf
+
+ CleanupStack::PopAndDestroy(); //mimeHeaders
+
+ // get the entry of the message
+ TMsvEntry messageEntry = iMmsClientMtm->Entry().Entry();
+
+ // set the description field same as the message subject
+ messageEntry.iDescription.Set( KMMSBody );
+
+ // save the changes done above
+ iMmsClientMtm->Entry().ChangeL(messageEntry);
+
+ TFileName attachmentFile( _L("c:\\pictures\\picture123.txt") );
+ HandleAttachementL(store,attachmentFile );
+
+ // save the changes made to the message store
+ store->CommitL();
+ CleanupStack::PopAndDestroy(store);
+
+ // save the message
+ iMmsClientMtm->SaveMessageL();
+
+ // final fine tuning
+ messageEntry.SetAttachment(ETrue);
+ messageEntry.iDate.HomeTime();
+ messageEntry.SetVisible(ETrue);
+ messageEntry.SetInPreparation(EFalse);
+
+ if( aUnReadFlag )
+ {
+ messageEntry.SetUnread(ETrue);
+ messageEntry.SetNew(ETrue);
+ }
+ else
+ {
+ messageEntry.SetUnread(EFalse);
+ messageEntry.SetNew(EFalse);
+ }
+ messageEntry.SetComplete(ETrue);
+ messageEntry.iServiceId = defaultServiceId;
+ messageEntry.iRelatedId = 0;
+
+ if (aFolderId == KMsvDraftEntryId)
+ messageEntry.SetReadOnly(EFalse);
+ else
+ messageEntry.SetReadOnly(ETrue);
+
+ messageEntry.iMtmData1 = KMmsMessageMRetrieveConf | KMmsMessageMobileTerminated;
+
+ iMmsClientMtm->Entry().ChangeL(messageEntry);
+
+ }
+
+void Ctest_plugin:: HandleAttachementL(CMsvStore* store,TFileName& sourceFileName )
+ {
+
+ // attachment settings
+ MMsvAttachmentManager& attachMan = store->AttachmentManagerL();
+ CMsvAttachment* attachmentInfo = CMsvAttachment::NewL(CMsvAttachment::EMsvFile); // ownership of attachmentInfo will be transferred
+ CleanupStack::PushL(attachmentInfo);
+ attachmentInfo->SetAttachmentNameL( sourceFileName);
+ attachmentInfo->SetMimeTypeL(_L8("text") );
+
+ CMsvMimeHeaders* mimeHeaders = CMsvMimeHeaders::NewL();
+ CleanupStack::PushL(mimeHeaders);
+ mimeHeaders->SetContentTypeL( _L8("text") );
+ mimeHeaders->SetContentSubTypeL( _L8("plain") );
+ mimeHeaders->SetMimeCharset( KMmsUtf8 );
+ mimeHeaders->StoreL( *attachmentInfo );
+ CleanupStack::PopAndDestroy( mimeHeaders );
+
+ CMsvOperationActiveSchedulerWait* waiter = CMsvOperationActiveSchedulerWait::NewLC();
+ TInt err;
+ TRAP(err, attachMan.AddAttachmentL(sourceFileName, attachmentInfo, waiter->iStatus ));
+ if (err == KErrNone)
+ {
+ waiter->Start();
+ CleanupStack::PopAndDestroy(waiter);
+ CleanupStack::Pop(); // attachmentInfo, the ownership is transferred
+ }
+ else
+ {
+ CleanupStack::PopAndDestroy(waiter);
+ CleanupStack::PopAndDestroy(); // attachmentInfo, ownership is not transferred (leave occurs)
+ _LIT( Ktestplugin, "HandleAttachment" );
+ _LIT( KFunction, "In HandleAttachment::Failed" );
+ }
+
+ }
+
+
+// -----------------------------------------------------------------------------
+// Ctest_plugin::CreateSmartMessageL
+// Creates messages in the different folders and populates the
+// iTestConversationEntryList
+// -----------------------------------------------------------------------------
+//
+void Ctest_plugin::CreateSmartMessageL(const TMsvId aFolderId,TBool aUnReadFlag)
+{
+
+ // create a new object to access an existing entry
+ CMsvEntry* msvEntry = CMsvEntry::NewL(*iSession, KMsvGlobalInBoxIndexEntryId, TMsvSelectionOrdering());
+ CleanupStack::PushL(msvEntry);
+
+ TMsvId defaultServiceId = 0;
+ defaultServiceId = iSmsClientMtm->DefaultServiceL();
+
+ // mtm takes ownership of entry context
+ CleanupStack::Pop(msvEntry);
+ iSmsClientMtm->SetCurrentEntryL(msvEntry);
+
+ // create a new message
+ iSmsClientMtm->CreateMessageL(defaultServiceId);
+
+ // Add addressee
+ _LIT(KPhoneNumberString,"234567");
+ TBuf<15> phoneNumberString;
+ phoneNumberString.Copy(KPhoneNumberString);
+
+ _LIT(KPhoneNumberString1,"mine<98450>");
+ _LIT(KResultPhoneNumberString,"98450");
+
+ // set the from field to sms header
+ if (aFolderId == KMsvGlobalInBoxIndexEntryId)
+ {
+ CSmsHeader& smsHeader = iSmsClientMtm->SmsHeader();
+ smsHeader.SetFromAddressL(KResultPhoneNumberString);
+ }
+
+ // set body, the BIO message itself
+ iSmsClientMtm->Body().Reset();
+ iSmsClientMtm->Body().InsertL(0, _L("Business Card\nTester Mike\nThe Company Ltd.\nSoftware Engineer\ntel +358 66 1234567\n"));
+
+ // get the entry of the message
+ TMsvEntry messageEntry = iSmsClientMtm->Entry().Entry();
+
+ // TO-DO: Add support for all BIO messages, currently just insert a business card message ... :
+ // set the message type
+ // parameters.iBIOMessageType ...
+ iSmsClientMtm->BioTypeChangedL(KMsgBioUidVCard);
+ messageEntry.iBioType = KMsgBioUidVCard.iUid;
+
+ if (aFolderId == KMsvGlobalInBoxIndexEntryId)
+ {
+ iMmsClientMtm->SetSenderL(KResultPhoneNumberString);
+ }
+
+ _LIT( KBioBody, " Hi !!!");
+
+ messageEntry.iDescription.Set(KBioBody);
+
+ // set correct MTM type
+ messageEntry.iMtm= KUidBIOMessageTypeMtm;
+
+ // save the changes done above
+ iSmsClientMtm->Entry().ChangeL(messageEntry);
+
+ // save the message
+ iSmsClientMtm->SaveMessageL();
+
+ // final fine tuning
+ messageEntry.SetAttachment(EFalse);
+ messageEntry.iDate.HomeTime();
+ messageEntry.SetVisible(ETrue);
+ messageEntry.SetInPreparation(EFalse);
+
+ if( aUnReadFlag )
+ {
+ messageEntry.SetUnread(ETrue);
+ messageEntry.SetNew(ETrue);
+ }
+ else
+ {
+ messageEntry.SetUnread(EFalse);
+ messageEntry.SetNew(EFalse);
+ }
+
+ messageEntry.SetComplete(ETrue);
+ messageEntry.iServiceId = defaultServiceId;
+ messageEntry.iRelatedId = 0;
+ iSmsClientMtm->Entry().ChangeL(messageEntry);
+
+
+}
+
+// -----------------------------------------------------------------------------
+// Ctest_plugin::CreateMessageL
+// Creates messages in the different folders and populates the
+// iTestConversationEntryList
+// -----------------------------------------------------------------------------
+//
+void Ctest_plugin::CreateMessageL(const TMsvId aFolderId,
+ TBool aUnReadFlag)
+ {
+ CCsConversationEntry *conversationEntry = CCsConversationEntry::NewL();
+ CleanupStack::PushL(conversationEntry);
+
+ //Create entry from this index entry
+ iSmsClientMtm->SwitchCurrentEntryL( aFolderId );
+ iSmsClientMtm->CreateMessageL(KUidMsgTypeSMS.iUid);
+
+ TMsvEntry indexEntry = iSmsClientMtm->Entry().Entry();
+
+ indexEntry.SetInPreparation(ETrue);
+ indexEntry.iMtm = KUidMsgTypeSMS;
+ indexEntry.iType = KUidMsvMessageEntry;
+ indexEntry.iServiceId = iSmsClientMtm->ServiceId();
+ indexEntry.iDate.HomeTime();
+
+ //AddBody
+ _LIT( KSMSBody, " Hi,Hello Phone Owner !!!");
+ TBuf<160> shortDescription;
+ shortDescription.Append(KSMSBody);
+ CRichText& body = iSmsClientMtm->Body();
+ body.Reset();
+ body.InsertL( 0, KSMSBody );
+ indexEntry.iDescription.Set(KSMSBody);
+
+ // Add addressee
+ _LIT(KPhoneNumberString,"234567");
+ TBuf<15> phoneNumberString;
+ phoneNumberString.Copy(KPhoneNumberString);
+
+ _LIT(KPhoneNumberString1,"mine<98450>");
+ _LIT(KResultPhoneNumberString,"98450");
+
+ if( aFolderId == KMsvDraftEntryId )
+ {
+ iSmsClientMtm->AddAddresseeL(KPhoneNumberString,TPtrC());
+ iSmsClientMtm->AddAddresseeL(KPhoneNumberString1,TPtrC());
+
+ CCsConversationEntry *conversationEntry1 = CCsConversationEntry::NewL();
+ conversationEntry->SetContactL(KPhoneNumberString);
+ conversationEntry->SetEntryId( indexEntry.Id());
+ conversationEntry->SetTimeStampL( indexEntry.iDate.Int64());
+ conversationEntry->SetDescriptionL(shortDescription);
+ conversationEntry->ChangeAttributes(ECsAttributeDraft, ECsAttributeNone);
+ conversationEntry->SetConversationDir(ECsDirectionOutgoing);
+ conversationEntry->SetSendState( ECsSendStateUnknown );
+ conversationEntry->SetType( ECsSMS );
+
+ conversationEntry1->SetContactL(KResultPhoneNumberString);
+ conversationEntry1->SetEntryId( indexEntry.Id());
+ conversationEntry1->SetTimeStampL( indexEntry.iDate.Int64());
+ conversationEntry1->SetDescriptionL(shortDescription);
+ conversationEntry1->ChangeAttributes(ECsAttributeDraft, ECsAttributeNone);
+ conversationEntry1->SetConversationDir(ECsDirectionOutgoing);
+ conversationEntry1->SetSendState( ECsSendStateUnknown );
+ conversationEntry1->SetType( ECsSMS );
+
+ CleanupStack::PushL(conversationEntry1);
+ iTestConversationEntryList.AppendL(conversationEntry);
+ iTestConversationEntryList.AppendL(conversationEntry1);
+ CleanupStack::Pop(conversationEntry1);
+ }
+ else if( aFolderId == KMsvGlobalOutBoxIndexEntryId )
+ {
+ iSmsClientMtm->AddAddresseeL(KPhoneNumberString,TPtrC());
+ indexEntry.SetSendingState( KMsvSendStateWaiting );
+
+ conversationEntry->SetContactL(KPhoneNumberString);
+ conversationEntry->SetEntryId( indexEntry.Id());
+ conversationEntry->SetTimeStampL( indexEntry.iDate.Int64());
+ conversationEntry->SetDescriptionL(shortDescription);
+ conversationEntry->SetConversationDir(ECsDirectionOutgoing);
+ conversationEntry->SetSendState( ECsSendStateWaiting );
+ conversationEntry->SetType( ECsSMS );
+
+ iTestConversationEntryList.AppendL(conversationEntry);
+ }
+ else if( aFolderId == KMsvSentEntryId )
+ {
+ CSmsHeader& smsHeader = iSmsClientMtm->SmsHeader();
+ smsHeader.SetFromAddressL(KPhoneNumberString);
+ indexEntry.iDetails.Set( KPhoneNumberString );
+
+ conversationEntry->SetContactL(KPhoneNumberString);
+ conversationEntry->SetEntryId( indexEntry.Id());
+ conversationEntry->SetTimeStampL( indexEntry.iDate.Int64());
+ conversationEntry->SetDescriptionL(shortDescription);
+ conversationEntry->SetConversationDir(ECsDirectionOutgoing);
+ conversationEntry->SetSendState( ECsSendStateUnknown );
+ conversationEntry->SetType( ECsSMS );
+
+ iTestConversationEntryList.AppendL(conversationEntry);
+ }
+ // final fine tuning
+ indexEntry.SetAttachment(EFalse);
+
+ indexEntry.SetVisible(ETrue);
+ indexEntry.SetInPreparation(EFalse);
+
+ if ( aFolderId == KMsvGlobalInBoxIndexEntryId )
+ {
+ CSmsHeader& smsHeader = iSmsClientMtm->SmsHeader();
+ smsHeader.SetFromAddressL(KPhoneNumberString);
+ indexEntry.iDetails.Set( KPhoneNumberString );
+
+ if( aUnReadFlag )
+ {
+ indexEntry.SetUnread(ETrue);
+ conversationEntry->SetSendState( ECsSendStateUnknown );
+ conversationEntry->ChangeAttributes( ECsAttributeUnread, ECsAttributeNone );
+ }
+ else
+ {
+ conversationEntry->SetSendState( ECsSendStateUnknown );
+ conversationEntry->ChangeAttributes( ECsAttributeNone, ECsAttributeUnread );
+ }
+ conversationEntry->SetContactL(KPhoneNumberString);
+ conversationEntry->SetEntryId( indexEntry.Id());
+ conversationEntry->SetTimeStampL( indexEntry.iDate.Int64());
+ conversationEntry->SetDescriptionL(shortDescription);
+ conversationEntry->SetConversationDir(ECsDirectionIncoming);
+ conversationEntry->SetType( ECsSMS );
+
+ iTestConversationEntryList.AppendL(conversationEntry);
+
+ indexEntry.SetNew(ETrue);
+ }
+
+ indexEntry.SetComplete(ETrue);
+ iSmsClientMtm->Entry().ChangeL(indexEntry);
+ iSmsClientMtm->SaveMessageL();
+
+ if ( iTestConversationEntryList.Count() == 0 )
+ {
+ CleanupStack::PopAndDestroy(conversationEntry);
+ }
+ else
+ {
+ CleanupStack::Pop(conversationEntry);
+ }
+
+ }
+
+
+// -----------------------------------------------------------------------------
+// Ctest_plugin::CacheFromCcsPluginValidationL
+// Validates the initial Caching of sms plugin
+// -----------------------------------------------------------------------------
+//
+TInt Ctest_plugin::SmsMsgPluginValidationL( CStifItemParser& /*aItem*/ )
+ {
+ // Print to UI
+ _LIT(Ktestplugin, "CacheFromCcsPluginValidationL" );
+ _LIT( KFunction, "In CacheFromCcsPluginValidationL" );
+ TestModuleIf().Printf( 0, Ktestplugin, KFunction );
+ // Print to log file
+ iLog->Log( KFunction );
+
+ CleanAllFoldersL();
+ CreateInitialCacheL();
+
+ iPlugin = CCsMsg::NewL(this);
+ iPlugin->GetConversationsL();
+
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// Ctest_plugin::MmsPluginValidationL
+// Validates the initial Caching of sms plugin
+// -----------------------------------------------------------------------------
+//
+TInt Ctest_plugin::MmsMsgPluginValidationL( CStifItemParser& /*aItem*/ )
+ {
+ // Print to UI
+ _LIT(Ktestplugin, "MmsPluginValidationL" );
+ _LIT( KFunction, "In MmsPluginValidationL" );
+ TestModuleIf().Printf( 0, Ktestplugin, KFunction );
+ // Print to log file
+ iLog->Log( KFunction );
+
+ CleanAllFoldersL();
+
+ iTestConversationEntryList.ResetAndDestroy();
+ iResultConversationEntryList.ResetAndDestroy();
+
+ CreateMmsMessageL(KMsvGlobalInBoxIndexEntryId);
+ CreateMmsMessageL(KMsvSentEntryId);
+ CreateMmsMessageL(KMsvDraftEntryId);
+ CreateMmsMessageL(KMsvGlobalOutBoxIndexEntryId);;
+
+ iPlugin = CCsMsg::NewL(this);
+ iPlugin->GetConversationsL();
+
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// Ctest_plugin::BioMsgPluginValidationL
+// Validates the initial Caching of sms plugin
+// -----------------------------------------------------------------------------
+//
+TInt Ctest_plugin::BioMsgPluginValidationL( CStifItemParser& /*aItem*/ )
+ {
+ // Print to UI
+ _LIT(Ktestplugin, "BioMsgPluginValidationL" );
+ _LIT( KFunction, "In BioMsgPluginValidationL" );
+ TestModuleIf().Printf( 0, Ktestplugin, KFunction );
+ // Print to log file
+ iLog->Log( KFunction );
+
+ CleanAllFoldersL();
+
+ iTestConversationEntryList.ResetAndDestroy();
+ iResultConversationEntryList.ResetAndDestroy();
+
+ CreateSmartMessageL(KMsvGlobalOutBoxIndexEntryId);
+ CreateSmartMessageL(KMsvSentEntryId);
+ CreateSmartMessageL(KMsvDraftEntryId);
+ CreateSmartMessageL(KMsvGlobalOutBoxIndexEntryId);
+
+ iPlugin = CCsMsg::NewL(this);
+ iPlugin->GetConversationsL();
+
+ return KErrNone;
+
+ }
+
+// -----------------------------------------------------------------------------
+// Ctest_plugin::CleanAllFoldersL
+// Cleans messages from all folders
+// -----------------------------------------------------------------------------
+void Ctest_plugin::CleanAllFoldersL()
+ {
+ CleanMessagesInFolderL(KMsvGlobalInBoxIndexEntryId);
+ CleanMessagesInFolderL(KMsvGlobalOutBoxIndexEntryId);
+ CleanMessagesInFolderL(KMsvDraftEntryId);
+ // CleanMessagesInFolderL(KMsvSentEntryId);
+ }
+// -----------------------------------------------------------------------------
+// Ctest_plugin::CreateInitialCacheL
+// Populates the messages in different folders which are used
+// to verify the caching logic of ccs plugin
+// -----------------------------------------------------------------------------
+void Ctest_plugin::CreateInitialCacheL()
+ {
+
+ iTestConversationEntryList.ResetAndDestroy();
+ iResultConversationEntryList.ResetAndDestroy();
+
+ CreateMessageL(KMsvGlobalInBoxIndexEntryId);
+ CreateMessageL(KMsvSentEntryId);
+ CreateMessageL(KMsvDraftEntryId);
+ CreateMessageL(KMsvGlobalOutBoxIndexEntryId);
+
+ }
+
+// -----------------------------------------------------------------------------
+// Ctest_plugin::CleanMessagesInFolderL
+// Cleans messages from the specified folder
+// -----------------------------------------------------------------------------
+void Ctest_plugin::CleanMessagesInFolderL(TMsvId aBoxId,TBool aDeleteOne)
+ {
+ iLog->Log(_L("In CleanMessagesInFolderL"));
+ TInt count;
+ CMsvEntry* cEntry = NULL;
+ // delete messages from the specified box
+ cEntry = iSession->GetEntryL(KMsvRootIndexEntryId);
+ CleanupStack::PushL(cEntry);
+ cEntry->SetEntryL(aBoxId);
+ // show invisible entries
+ cEntry->SetSortTypeL( TMsvSelectionOrdering( KMsvNoGrouping, EMsvSortByNone, ETrue ) );
+ CMsvEntrySelection* msvEntrySelection = cEntry->ChildrenWithMtmL(KUidMsgTypeSMS);
+ CleanupStack::PushL(msvEntrySelection);
+
+ if( aDeleteOne )
+ {
+ count =1;
+ }
+ else
+ {
+ count = msvEntrySelection->Count();
+ }
+
+ for ( int i = 0; i < count ; i++ )
+ {
+ CMsvEntry* entry = iSession->GetEntryL( msvEntrySelection->At(i) );
+ CleanupStack::PushL( entry );
+ TMsvEntry tEntry = entry->Entry();
+ tEntry.SetReadOnly(EFalse);
+ entry->ChangeL(tEntry);
+ cEntry->DeleteL( msvEntrySelection->At(i) );
+ CleanupStack::PopAndDestroy( entry );
+ }
+
+ CleanupStack::PopAndDestroy(msvEntrySelection);
+ CleanupStack::PopAndDestroy(cEntry);
+ iLog->Log(_L("End of CleanMessagesInFolderL"));
+ }
+
+
+
+
+// -----------------------------------------------------------------------------
+// Ctest_plugin::CachingCompleted.
+// Caching error event from Plugins
+// -----------------------------------------------------------------------------
+//
+void Ctest_plugin::CachingError(const TInt /*aError*/)
+ {
+ Signal(KErrGeneral);
+ }
+
+// -----------------------------------------------------------------------------
+// Ctest_plugin::CachingCompleted.
+// Caching complete event from Plugins
+// -----------------------------------------------------------------------------
+//
+void Ctest_plugin::CachingCompleted()
+ {
+ if( iTestConversationEntryList.Count() == 0 )
+ {
+ Signal(KErrNone);
+ return;
+ }
+ if( iResultConversationEntryList.Count() != iTestConversationEntryList.Count() )
+ {
+ // Delete();
+ Signal(KErrCancel);
+ }
+ else
+ {
+ TInt i;
+ for( i=0; i < iResultConversationEntryList.Count() ; i++ )
+ {
+ if( Compare(iResultConversationEntryList[i],iTestConversationEntryList[i] )!=0 )
+ {
+ break;
+ }
+ }
+ if( i == iResultConversationEntryList.Count() )
+ {
+ iTestConversationEntryList.ResetAndDestroy();
+ iResultConversationEntryList.ResetAndDestroy();
+ Signal(KErrNone);
+ }
+ else
+ {
+ Signal(KErrNotFound);
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// Ctest_plugin::Compare
+// Compares the conversation entry stored conversation entry with
+// the conversation entry returned from sms plugin
+// -----------------------------------------------------------------------------
+TInt Ctest_plugin::Compare(CCsConversationEntry *aResult, CCsConversationEntry *aTest)
+ {
+ TInt comparison = 0;
+
+ if( aResult->Contact()->Des().Compare(aTest->Contact()->Des()) )
+ comparison++;
+
+ if( aResult->EntryId() != aTest->EntryId() )
+ comparison ++;
+
+ if( aResult->TimeStamp() != aTest->TimeStamp() )
+ comparison++;
+
+ if( aResult->ConversationDir() != aTest->ConversationDir() )
+ comparison++;
+
+ if( aResult->GetSendState() != aTest->GetSendState() )
+ comparison++;
+
+ if( aResult->GetType() != aTest->GetType() )
+ comparison++;
+
+ return comparison;
+ }
+
+
+// -----------------------------------------------------------------------------
+// Ctest_plugin::AddConversations.
+// Handle Conversation event from Plugins
+// -----------------------------------------------------------------------------
+//
+void Ctest_plugin::AddConversations(
+ const RPointerArray<CCsConversationEntry>& aConversationEntryLists)
+ {
+ CCsConversationEntry *conversationEntry ;
+
+ for ( TInt i=0; i < aConversationEntryLists.Count(); i++ )
+ {
+ TRAP_IGNORE(
+ conversationEntry = aConversationEntryLists[i]->CloneL();
+ iResultConversationEntryList.AppendL(conversationEntry);
+ );
+ }
+
+ }
+
+// -----------------------------------------------------------------------------
+// Ctest_plugin::ModifyConversations.
+// Update Conversation event from Plugins
+// -----------------------------------------------------------------------------
+//
+void Ctest_plugin::ModifyConversations(
+ const RPointerArray<CCsConversationEntry>& aConversationEntryLists)
+ {
+ if( iTestConversationEntryList.Count() == 0 )
+ {
+ Signal(KErrNone);
+ return;
+ }
+ //Expecting update for one entry at a time
+ TInt i;
+ for( i=0; i < aConversationEntryLists.Count() ; i++ )
+ {
+ if( Compare(aConversationEntryLists[i],iTestConversationEntryList[i] )!=0 )
+ {
+ break;
+ }
+ }
+ if( i == aConversationEntryLists.Count() )
+ {
+ iTestConversationEntryList.ResetAndDestroy();
+ iResultConversationEntryList.ResetAndDestroy();
+ Signal(KErrNone);
+ }
+ else
+ {
+ Signal(KErrNotFound);
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// Ctest_plugin::DeleteConversations.
+// Delete Conversation event from Plugins
+// -----------------------------------------------------------------------------
+//
+
+void Ctest_plugin::DeleteConversations(
+ const RPointerArray<CCsConversationEntry>& aConversationEntryLists)
+ {
+ if( iTestConversationEntryList.Count() == 0 )
+ {
+ Signal(KErrNone);
+ return;
+ }
+ //Expecting update for one entry at a time
+ TInt i;
+ for( i=0; i < aConversationEntryLists.Count() ; i++ )
+ {
+ if( aConversationEntryLists[i]->EntryId() != iTestConversationEntryList[i]->EntryId() )
+ {
+ break;
+ }
+ }
+ if( i == aConversationEntryLists.Count() )
+ {
+ iTestConversationEntryList.ResetAndDestroy();
+ iResultConversationEntryList.ResetAndDestroy();
+ Signal(KErrNone);
+ }
+ else
+ {
+ Signal(KErrNotFound);
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// Ctest_plugin::RefreshConversations
+// Notify server to refresh conversations.
+// -----------------------------------------------------------------------------
+//
+void Ctest_plugin::RefreshConversations()
+ {
+
+ }
--- a/messagingapp/msgappfw/plugins/previewplugin/group/cspreviewplugin.mmp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgappfw/plugins/previewplugin/group/cspreviewplugin.mmp Thu Jul 22 16:32:06 2010 +0100
@@ -63,4 +63,6 @@
LIBRARY fbscli.lib
LIBRARY estor.lib
LIBRARY unidatamodel.lib
-LIBRARY charconv.lib
\ No newline at end of file
+LIBRARY charconv.lib
+LIBRARY centralrepository.lib
+LIBRARY MsgMedia.lib
\ No newline at end of file
--- a/messagingapp/msgappfw/plugins/previewplugin/inc/ccspreviewpluginhandler.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgappfw/plugins/previewplugin/inc/ccspreviewpluginhandler.h Thu Jul 22 16:32:06 2010 +0100
@@ -27,6 +27,7 @@
#include <sqldb.h>
//USER INCLUDES
+#include <ccsdefs.h>
#include "ccspreviewplugin.h"
#include "UniDataModel.h"
@@ -39,6 +40,13 @@
class CCsPreviewPlugin;
class CClientMtmRegistry;
class CMmsClientMtm;
+class CUniDataModel;
+class MMsvAttachmentManager;
+
+enum MmsConformanceCheckErrors
+{
+ EInsertSuccess = 0, EInsertQueryAbort, EInsertNotSupported
+};
/*
* Thumbnail Request Data
@@ -149,6 +157,55 @@
void HandleThumbnailReadyL(MThumbnailData& aThumbnail,
TThumbnailRequestId aId);
+ /**
+ * Validates if message can be forwarded
+ * The validation checks include slide count check,MMS size check and
+ * media conformance checks and this fucntion should be called only for mms
+ * @param aUniDataModel, instance of unidatamodel
+ * @return true if message can be forwarded
+ * false if message cant be forwarded
+ */
+ TBool ValidateMsgForForward(CUniDataModel* aUniDataModel);
+
+ /**
+ * This shall return the particular slide attachments ids
+ * @param aSlideNum slide count
+ * @param aUniDataModel instance of unidatamodel
+ * @return array of attachment id's
+ */
+ RArray<TMsvAttachmentId>* GetSlideAttachmentIds(
+ TInt aSlideNum,
+ CUniDataModel* aUniDataModel);
+
+ /**
+ * This shall return list of attachment id's
+ * @param aUniDataModel instance of unidatamodel
+ * @return array of attachment id's
+ */
+ RArray<TMsvAttachmentId>* GetAttachmentIdList(
+ CUniDataModel* aUniDataModel);
+
+ /**
+ * This shall check the insert mode for the attachment file
+ * @param aFileHandle instance of file handle
+ * @return enum MmsConformanceCheckErrors
+ */
+ TInt CheckModeForInsertL(RFile aFileHandle);
+
+ /**
+ * Finds the message's processing state
+ * @param aMsgId, message id
+ * @return, TInt from TCsPreviewMsgProcessingState enum
+ */
+ TInt msgProcessingState(TMsvId aMsgId);
+
+ /**
+ * Sets message under processing to true
+ * @param aMsgId, message id
+ * @param aState, TInt from TCsPreviewMsgProcessingState enum
+ */
+ void setMsgProcessingState(TMsvId aMsgId, TInt aState);
+
private:
//Data
@@ -198,6 +255,22 @@
* Sqlite DB Handle
*/
RSqlDatabase iSqlDb;
- };
+
+ /**
+ * Max MMS Size
+ */
+ TInt iMaxMmsSize;
+
+ /*
+ * Mms creation mode
+ */
+ TInt iCreationMode;
+
+ /**
+ * Conformance status
+ */
+ TUint32 iConfStatus;
+
+};
#endif // _C_CS_PREVIEW_PLUGIN_HANDLER_H_
--- a/messagingapp/msgappfw/plugins/previewplugin/src/ccspreviewpluginhandler.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgappfw/plugins/previewplugin/src/ccspreviewpluginhandler.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -25,6 +25,13 @@
#include <e32const.h>
#include <SendUiConsts.h>
#include <utf.h>
+#include <centralrepository.h>
+#include <MmsConformance.h>
+#include <mmsconst.h>
+#include <msgmediainfo.h>
+#include <MsgMediaResolver.h>
+#include <fileprotectionresolver.h>
+#include <MmsEngineInternalCRKeys.h>
//CONSTANTS
//DB-file
_LIT(KDbFileName, "c:[2002A542]conversations.db");
@@ -33,16 +40,25 @@
//Size
_LIT(KCacheSizeStmnt,"PRAGMA default_cache_size = 1024");
// Create table query statement
-_LIT(KSqlCreateStmt, "CREATE TABLE IF NOT EXISTS conversation_messages ( message_id INTEGER PRIMARY KEY, msg_parsed INTEGER DEFAULT 0, subject TEXT(100), body_text TEXT(160), preview_path TEXT, msg_property INTEGER, preview_icon BLOB DEFAULT NULL ) " );
+_LIT(KSqlCreateStmt, "CREATE TABLE IF NOT EXISTS conversation_messages ( message_id INTEGER PRIMARY KEY, msg_processingstate INTEGER DEFAULT 0, subject TEXT(100), body_text TEXT(160), preview_path TEXT, msg_property INTEGER, preview_icon BLOB DEFAULT NULL ) " );
+//Create an empty record for the given message id
+_LIT(KSqlBasicInsertStmt, "INSERT OR REPLACE INTO conversation_messages ( message_id ) VALUES( :message_id )");
//Insert without bitmap query
-_LIT(KSqlInsertStmt, "INSERT OR REPLACE INTO conversation_messages (message_id, msg_parsed, subject, body_text, preview_path, msg_property ) VALUES( :message_id, :msg_parsed, :subject, :body_text, :preview_path, :msg_property )");
+_LIT(KSqlInsertStmt, "INSERT OR REPLACE INTO conversation_messages ( message_id, msg_processingstate, subject, body_text, preview_path, msg_property ) VALUES( :message_id, :msg_processingstate, :subject, :body_text, :preview_path, :msg_property )");
+//update processing-state flag of a message
+_LIT(KSqlUpdateProcessingStateStmt, "UPDATE conversation_messages SET msg_processingstate=:msg_processingstate WHERE message_id=:message_id " );
//update with bitmap query
_LIT(KSqlUpdateBitmapStmt, "UPDATE conversation_messages SET preview_icon=:preview_icon WHERE message_id=:message_id " );
-// query to see if msg_parsed is set
-_LIT(KSelectMsgParsedStmt, " SELECT message_id, msg_parsed FROM conversation_messages WHERE message_id=:message_id ");
+// query to see if msg is under process at the moment
+_LIT(KSelectProcessingStateStmt, " SELECT message_id, msg_processingstate FROM conversation_messages WHERE message_id=:message_id ");
// Remove record from conversation_messages table.
_LIT(KRemoveMsgStmnt,"DELETE FROM conversation_messages WHERE message_id=:message_id");
+const TInt KDefaultMaxSize = 300 * 1024;
+//Preview thumbnail size
+const TInt KWidth = 9.5 * 6.7;
+const TInt KHeight = 9.5 * 6.7;
+
// NOTE:- DRAFTS ENTRIES ARE NOT HANDLED IN THE PLUGIN
// ============================== MEMBER FUNCTIONS ============================
@@ -162,6 +178,23 @@
User::LeaveIfError(error);
}
+ //get the max size of mms from the repository
+ TRAP_IGNORE(
+ CRepository* repository = CRepository::NewL(KCRUidMmsEngine);
+ CleanupStack::PushL(repository);
+
+ //Fetch and set max mms composition size
+ TInt maxSize = KDefaultMaxSize;
+ repository->Get( KMmsEngineMaximumSendSize, maxSize );
+ iMaxMmsSize = maxSize;
+
+ //Fetch and set creation mode
+ TInt creationMode = EMmsCreationModeRestricted;
+ repository->Get(KMmsEngineCreationMode, creationMode);
+ iCreationMode = creationMode;
+
+ CleanupStack::PopAndDestroy(repository);
+ );
PRINT ( _L("End CCsPreviewPluginHandler::ConstructL") );
}
@@ -259,28 +292,17 @@
TInt msgId = entry.Id();
- //check if the message is already parsed
- RSqlStatement sqlSelectStmt;
- CleanupClosePushL(sqlSelectStmt);
- sqlSelectStmt.PrepareL(iSqlDb,KSelectMsgParsedStmt);
- TInt messageIdIndex = sqlSelectStmt.ParameterIndex(
- _L(":message_id"));
-
- User::LeaveIfError(sqlSelectStmt.BindInt(messageIdIndex, msgId));
-
- if (sqlSelectStmt.Next() == KSqlAtRow)
+ // check if the msg is already under processing Or processed
+ if( EPreviewMsgNotProcessed != msgProcessingState(msgId) )
{
- TInt parsedColIndex = sqlSelectStmt.ColumnIndex(
- _L("msg_parsed"));
- TInt msgParsed = sqlSelectStmt.ColumnInt(parsedColIndex);
- //if message alresdy parsed, move to next message.
- if (msgParsed)
- {
- CleanupStack::PopAndDestroy(&sqlSelectStmt);
- continue;
- }
+ // skip processing this event for the given message
+ continue;
}
- CleanupStack::PopAndDestroy(&sqlSelectStmt);
+ else
+ {
+ // start processing message, set flag
+ setMsgProcessingState(msgId, EPreviewMsgProcessing);
+ }
// update db with message preview data
RSqlStatement sqlInsertStmt;
@@ -303,6 +325,13 @@
msgProperty |= EPreviewAttachment;
}
+ //check for msg forward
+ //Validate if the mms msg can be forwarded or not
+ if (ValidateMsgForForward(iUniDataModel))
+ {
+ msgProperty |= EPreviewForward;
+ }
+
TPtrC videoPath;
TPtrC imagePath;
@@ -321,6 +350,7 @@
{
CUniObject *obj =
iUniDataModel->SmilModel(). GetObjectByIndex(i, j);
+ CMsgMediaInfo *mediaInfo = obj->MediaInfo();
TPtrC8 mimetype = obj->MimeType();
TMsvAttachmentId attachId = obj->AttachmentId();
@@ -335,31 +365,63 @@
}
//image parsing
- if (!isImageSet && (mimetype.Find(_L8("image"))
+ if (!isVideoSet && !isImageSet && (mimetype.Find(_L8("image"))
!= KErrNotFound))
{
//get thumbnail for this image
- GetThumbNailL(attachId, mimetype, msgId);
isImageSet = ETrue;
- imagePath.Set(obj->MediaInfo()->FullFilePath());
+ imagePath.Set(mediaInfo->FullFilePath());
msgProperty |= EPreviewImage;
+
+ if (EFileProtNoProtection != mediaInfo->Protection())
+ {
+ msgProperty |= EPreviewProtectedImage;
+ }
+ if (mediaInfo->Corrupt())
+ {
+ msgProperty |= EPreviewCorruptedImage;
+ }
+
+ if (!(EPreviewProtectedImage & msgProperty) &&
+ !(EPreviewCorruptedImage & msgProperty))
+ {
+ //Generate thumbnail for non protected,
+ //non corrupted image.
+ GetThumbNailL(attachId, mimetype, msgId);
+ }
}
//audio content
- if (!isAudioSet && (mimetype.Find(_L8("audio"))
+ if (!isVideoSet && !isAudioSet && (mimetype.Find(_L8("audio"))
!= KErrNotFound))
{
isAudioSet = ETrue;
msgProperty |= EPreviewAudio;
+ if (EFileProtNoProtection != mediaInfo->Protection())
+ {
+ msgProperty |= EPreviewProtectedAudio;
+ }
+ if (mediaInfo->Corrupt())
+ {
+ msgProperty |= EPreviewCorruptedAudio;
+ }
}
//video content
- if (!isVideoSet && (mimetype.Find(_L8("video"))
+ if (!( isImageSet || isAudioSet) && !isVideoSet && (mimetype.Find(_L8("video"))
!= KErrNotFound))
{
- videoPath.Set(obj->MediaInfo()->FullFilePath());
+ videoPath.Set(mediaInfo->FullFilePath());
isVideoSet = ETrue;
msgProperty |= EPreviewVideo;
+ if (EFileProtNoProtection != mediaInfo->Protection())
+ {
+ msgProperty |= EPreviewProtectedVideo;
+ }
+ if (mediaInfo->Corrupt())
+ {
+ msgProperty |= EPreviewCorruptedVideo;
+ }
}
}
}
@@ -393,10 +455,9 @@
User::LeaveIfError(sqlInsertStmt.BindInt(msgPropertyIndex,
msgProperty));
- //msg-parsed
- TInt msgParsedIndex = sqlInsertStmt.ParameterIndex(
- _L(":msg_parsed"));
- User::LeaveIfError(sqlInsertStmt.BindInt(msgParsedIndex, 1)); // 1 as true
+ //msg_processingstate
+ TInt msgProcessingStateIndex = sqlInsertStmt.ParameterIndex(_L(":msg_processingstate"));
+ User::LeaveIfError(sqlInsertStmt.BindInt(msgProcessingStateIndex, EPreviewMsgProcessed));
//execute sql stament
User::LeaveIfError(sqlInsertStmt.Exec());
@@ -505,6 +566,180 @@
CleanupStack::PopAndDestroy(2,&sqlInsertStmt);//sqlInsertStmt,previewIconStream
}
+TBool CCsPreviewPluginHandler::ValidateMsgForForward(CUniDataModel* aUniDataModel)
+{
+ TBool retValue = ETrue;
+
+ //1. Check the slide count more than 1
+ if (aUniDataModel->SmilModel().SlideCount() > 1)
+ {
+ retValue = EFalse;
+ return retValue;
+ }
+
+ //2. message sixe check
+ //Fetch and set max mms composition size
+ if (iMmsMtm->MessageSize() > iMaxMmsSize)
+ {
+ retValue = EFalse;
+ return retValue;
+ }
+
+ //3. If there is restricted content then return false
+ RArray<TMsvAttachmentId>* pathList = GetSlideAttachmentIds(
+ 0,
+ aUniDataModel);
+
+ CleanupStack::PushL(pathList);
+
+ for (int i = 0; i < pathList->Count(); i++)
+ {
+ TMsvAttachmentId aId = (*pathList)[i];
+ CMsvStore * store = iMmsMtm->Entry().ReadStoreL();
+ CleanupStack::PushL(store);
+ MMsvAttachmentManager& attachMan = store->AttachmentManagerL();
+ RFile fileHandle = attachMan.GetAttachmentFileL(aId);
+ //close the store
+ CleanupStack::PopAndDestroy(store);
+
+ if (CheckModeForInsertL(fileHandle) != EInsertSuccess)
+ {
+ retValue = EFalse;
+ break;
+ }
+ }
+
+ if (retValue == EFalse)
+ {
+ CleanupStack::PopAndDestroy(pathList);
+ return retValue;
+ }
+
+ CleanupStack::Pop(pathList);
+ delete pathList;
+ pathList = NULL;
+
+ //4. check the same case for all attachments
+ pathList = GetAttachmentIdList(aUniDataModel);
+ CleanupStack::PushL(pathList);
+
+ for (int i = 0; i < pathList->Count(); i++)
+ {
+ TMsvAttachmentId aId = (*pathList)[i];
+ CMsvStore * store = iMmsMtm->Entry().ReadStoreL();
+ CleanupStack::PushL(store);
+ MMsvAttachmentManager& attachMan = store->AttachmentManagerL();
+ RFile fileHandle = attachMan.GetAttachmentFileL(aId);
+ //close the store
+ CleanupStack::PopAndDestroy(store);
+
+ if (CheckModeForInsertL(fileHandle) != EInsertSuccess)
+ {
+ retValue = EFalse;
+ break;
+ }
+ }
+
+ CleanupStack::PopAndDestroy(pathList);
+ return retValue;
+}
+
+RArray<TMsvAttachmentId>*
+CCsPreviewPluginHandler::GetSlideAttachmentIds(TInt aSlideNum,
+ CUniDataModel* aUniDataModel)
+{
+ TInt slideObjectCount =
+ aUniDataModel->SmilModel().SlideObjectCount(aSlideNum);
+
+ RArray<TMsvAttachmentId> *attachmentIdList = new (ELeave) RArray<
+ TMsvAttachmentId> ();
+ for (TInt i = 0; i < slideObjectCount; i++)
+ {
+ CUniObject *obj =
+ aUniDataModel->SmilModel().GetObjectByIndex(aSlideNum, i);
+ attachmentIdList->Append(obj->AttachmentId());
+ }
+ return attachmentIdList;
+}
+
+RArray<TMsvAttachmentId>*
+CCsPreviewPluginHandler::GetAttachmentIdList(CUniDataModel* aUniDataModel)
+{
+ TInt attcount = aUniDataModel->AttachmentList().Count();
+ RArray<TMsvAttachmentId> *attachmentIdList = new (ELeave) RArray<
+ TMsvAttachmentId> ();
+
+ for (TInt i = 0; i < attcount; i++)
+ {
+ CUniObject *obj = aUniDataModel->AttachmentList().GetByIndex(i);
+
+ attachmentIdList->AppendL(obj->AttachmentId());
+ }
+ return attachmentIdList;
+}
+
+TInt CCsPreviewPluginHandler::CheckModeForInsertL(RFile aFileHandle)
+{
+ CleanupClosePushL(aFileHandle);
+
+ CMmsConformance* mmsConformance = CMmsConformance::NewL();
+ mmsConformance->CheckCharacterSet(EFalse);
+
+ CleanupStack::PushL(mmsConformance);
+
+ CMsgMediaResolver* mediaResolver = CMsgMediaResolver::NewL();
+ mediaResolver->SetCharacterSetRecognition(EFalse);
+
+ CleanupStack::PushL(mediaResolver);
+
+ CMsgMediaInfo* info = mediaResolver->CreateMediaInfoL(aFileHandle);
+ mediaResolver->ParseInfoDetailsL(info, aFileHandle);
+
+ TMmsConformance conformance = mmsConformance->MediaConformance(*info);
+ iConfStatus = conformance.iConfStatus;
+
+ CleanupStack::PopAndDestroy(3);
+
+ // In "free" mode user can insert images that are larger by dimensions than allowed by conformance
+ if (iCreationMode != EMmsCreationModeRestricted)
+ {
+ TInt i = EMmsConfNokFreeModeOnly | EMmsConfNokScalingNeeded
+ | EMmsConfNokTooBig;
+ TInt j = ~ (EMmsConfNokFreeModeOnly | EMmsConfNokScalingNeeded
+ | EMmsConfNokTooBig);
+
+ // If user answers yes to Guided mode confirmation query he/she moves to free mode
+ if ( (iConfStatus & i) && ! (iConfStatus & j))
+ {
+ if (iCreationMode == EMmsCreationModeFree || info->Protection()
+ & EFileProtSuperDistributable)
+ {
+ // SuperDistribution not checked here
+ // Mask "FreeModeOnly" and "ScalingNeeded" away in free mode
+ iConfStatus &= ~EMmsConfNokFreeModeOnly;
+ iConfStatus &= ~EMmsConfNokScalingNeeded;
+ }
+ else
+ {
+ delete info;
+ //query not accepted. Stop insertion.
+ return EInsertQueryAbort;
+ }
+ }
+ }
+ else if (iConfStatus & EMmsConfNokDRM || iConfStatus
+ & EMmsConfNokNotEnoughInfo || iConfStatus & EMmsConfNokNotSupported
+ || iConfStatus & EMmsConfNokFreeModeOnly || iConfStatus
+ & EMmsConfNokCorrupt)
+ {
+ delete info;
+ return EInsertNotSupported;
+ }
+
+ delete info;
+ return EInsertSuccess;
+}
+
//-----------------------------------------------------------------------------
// CCsPreviewPluginHandler::CompareByRequestId
// Compare to conversation entry object based on Entry Ids
@@ -562,8 +797,10 @@
{
//Scale the image
iThumbnailManager->SetFlagsL(CThumbnailManager::ECropToAspectRatio);
- // Preferred size is 100x100 (or less)
- iThumbnailManager->SetThumbnailSizeL(TSize(100, 100));
+
+ //TODO replace with hb-param-graphic-size-image-portrait * value of un in pixcels
+ iThumbnailManager->SetThumbnailSizeL(TSize(KWidth, KHeight));
+
//optimize for performace
iThumbnailManager->SetQualityPreferenceL(
CThumbnailManager::EOptimizeForPerformance);
@@ -592,5 +829,70 @@
CleanupStack::PopAndDestroy(4, mimeInfo);//mimeInfo,store,file,source
}
+// -----------------------------------------------------------------------------
+// CCsPreviewPluginHandler::msgProcessingState
+//
+// -----------------------------------------------------------------------------
+//
+TInt CCsPreviewPluginHandler::msgProcessingState(TMsvId aMsgId)
+{
+ TInt retState = EPreviewMsgNotProcessed;
+
+ // sql-statement to check if msg's under processing flag is set or not
+ RSqlStatement sqlSelectStmt;
+ CleanupClosePushL(sqlSelectStmt);
+ sqlSelectStmt.PrepareL(iSqlDb,KSelectProcessingStateStmt);
+
+ TInt msgIdIndex = sqlSelectStmt.ParameterIndex(_L(":message_id"));
+ User::LeaveIfError(sqlSelectStmt.BindInt(msgIdIndex, aMsgId));
+
+ // read the flag
+ TInt msgProcessingStateIndex = sqlSelectStmt.ColumnIndex(_L("msg_processingstate"));
+ if (sqlSelectStmt.Next() == KSqlAtRow)
+ {
+ retState = static_cast<TInt>(sqlSelectStmt.ColumnInt(msgProcessingStateIndex));
+ }
+ else
+ {
+ // this is first event for this msgid, hence record doesn't exist
+ // create an empty record, so that we can set & use flags
+ RSqlStatement sqlBasicInsertStmt;
+ CleanupClosePushL(sqlBasicInsertStmt);
+ sqlBasicInsertStmt.PrepareL(iSqlDb, KSqlBasicInsertStmt);
+ TInt index_msgid = sqlBasicInsertStmt.ParameterIndex(_L(":message_id"));
+ User::LeaveIfError(sqlBasicInsertStmt.BindInt(index_msgid, aMsgId));
+ User::LeaveIfError(sqlBasicInsertStmt.Exec());
+ CleanupStack::PopAndDestroy(&sqlBasicInsertStmt);
+ }
+ // cleanup
+ CleanupStack::PopAndDestroy(&sqlSelectStmt);
+ return retState;
+}
+
+// -----------------------------------------------------------------------------
+// CCsPreviewPluginHandler::setMsgProcessingState
+//
+// -----------------------------------------------------------------------------
+//
+void CCsPreviewPluginHandler::setMsgProcessingState(TMsvId aMsgId, TInt aState)
+{
+ // sql-statment to set/reset msg's under processing flag
+ RSqlStatement sqlUpdateStmt;
+ CleanupClosePushL(sqlUpdateStmt);
+ sqlUpdateStmt.PrepareL(iSqlDb, KSqlUpdateProcessingStateStmt);
+
+ TInt msgIdIndex = sqlUpdateStmt.ParameterIndex(_L(":message_id"));
+ User::LeaveIfError(sqlUpdateStmt.BindInt(msgIdIndex, aMsgId));
+
+ // bind data
+ TInt msgProcessingStateIndex = sqlUpdateStmt.ParameterIndex(_L(":msg_processingstate"));
+ User::LeaveIfError(sqlUpdateStmt.BindInt(msgProcessingStateIndex, aState));
+
+ // execute the statement
+ User::LeaveIfError(sqlUpdateStmt.Exec());
+ // cleanup
+ CleanupStack::PopAndDestroy(&sqlUpdateStmt);
+}
+
// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgappfw/plugins/previewplugin/tsrc/.cproject Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?fileVersion 4.0.0?>
+
+<cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
+<storageModule buildFromInf="true" buildingTestComps="true" cleanLevel="0" concurrentBuildJobs="4" defaultMMPChangedAction="0" extraSBSv2Args="" infBuildComponents="" infFileLocation="group\bld.inf" macrosFile="" makeEngineToUse="make" manageDependencies="true" moduleId="com.nokia.carbide.cdt.builder.carbideCPPBuilder" overrideMakeEngine="false" overrideWorkspaceSettings="false" promptForMMPChangedAction="true" useConcurrentBuilding="true" useDebugMode="false" useIncrementalBuilder="false" useKeepGoing="false" useMMPMacros="true"/>
+<storageModule moduleId="org.eclipse.cdt.core.settings">
+<cconfiguration id="Emulator Debug (WINSCW) [week20]">
+<storageModule buildSystemId="com.nokia.carbide.cdt.builder.CarbideConfigurationDataProvider" id="Emulator Debug (WINSCW) [week20]" moduleId="org.eclipse.cdt.core.settings" name="Emulator Debug (WINSCW) [week20]">
+<externalSettings/>
+<extensions>
+<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="org.eclipse.cdt.core.PE" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="com.nokia.cdt.debug.cw.symbian.SymbianE32" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="com.nokia.carbide.cdt.builder.MakmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.CarbideMakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.SBSv2ErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.MWLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.RCOMPErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.MWCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.MakeDefErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+</extensions>
+</storageModule>
+<storageModule moduleId="CarbideConfigurationDataProvider">
+<ENV_VAR_DATA_ID/>
+<ARGUMENTS_DATA_ID ABLDFREEZEARGSSTORAGE="-r"/>
+<ROM_BUILDER_DATA_ID ROMBUILDWORKINGDIRECTORYSTORAGE="R:\epoc32\rom\"/>
+</storageModule>
+<storageModule filesCache="R:\epoc32\include\data_caging_paths_strings.hrh;R:\sf\app\messaging\messagingapp\msgappfw\plugins\previewplugin\tsrc\group\bld.inf;R:\epoc32\include\platform_paths.hrh;R:\sf\app\messaging\messagingapp\msgappfw\plugins\previewplugin\tsrc\group\test_pluginpreview.mmp;" includesCache="R:/sf/app/messaging/messagingapp/msgappfw/plugins/previewplugin/tsrc/inc[LOCAL];R:/sf/app/messaging/messagingapp/msgappfw/plugins/previewplugin/inc[LOCAL];R:/sf/app/messaging/messagingapp/msgutils/unidatautils/unidatamodel/inc[LOCAL];R:/sf/app/messaging/messagingappbase/obexmtms/TObexMTM/INC[LOCAL];R:/epoc32/include;R:/epoc32/include/mw;R:/epoc32/include/platform/mw;R:/epoc32/include/platform;R:/epoc32/include/app;R:/epoc32/include/platform/app;R:/epoc32/include/platform/loc;R:/epoc32/include/platform/mw/loc;R:/epoc32/include/platform/app/loc;R:/epoc32/include/platform/loc/sc;R:/epoc32/include/platform/mw/loc/sc;R:/epoc32/include/platform/app/loc/sc;R:/epoc32/include/internal;" macrosCache="__DLL__;_UNICODE;__SYMBIAN32__;__SUPPORT_CPP_EXCEPTIONS__;__CW32__;__WINS__;__WINSCW__;_DEBUG;" moduleId="configDataCache" sourcesCache="" timestampCache="1275040763364" useMmpMacrosCache="true"/>
+<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+</cconfiguration>
+</storageModule>
+</cproject>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgappfw/plugins/previewplugin/tsrc/.project Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>test_pluginpreview</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>com.nokia.carbide.cdt.builder.carbideCPPBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.cdt.core.cnature</nature>
+ <nature>org.eclipse.cdt.core.ccnature</nature>
+ <nature>com.nokia.carbide.cdt.builder.carbideCPPBuilderNature</nature>
+ <nature>com.nokia.carbide.cdt.builder.carbideSBSv2BuilderNature</nature>
+ </natures>
+</projectDescription>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgappfw/plugins/previewplugin/tsrc/Makefile Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,90 @@
+# ==============================================================================
+# Generated by qmake (2.01a) (Qt 4.6.2) on: Fri Apr 16 15:48:22 2010
+# This file is generated by qmake and should not be modified by the
+# user.
+# Name : Makefile
+# Description : Wrapper Makefile for calling Symbian build tools
+#
+# ==============================================================================
+
+
+MAKEFILE = Makefile
+QMAKE = r:\epoc32\tools\qt\qmake.exe
+DEL_FILE = del
+DEL_DIR = rmdir
+MOVE = move
+DEBUG_PLATFORMS = winscw armv5
+RELEASE_PLATFORMS = armv5
+MAKE = make
+SBS = sbs
+
+DEFINES = -DSYMBIAN -DUNICODE -DQT_KEYPAD_NAVIGATION -DQT_SOFTKEYS_ENABLED -DQT_USE_MATH_H_FLOATS -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB
+INCPATH = -I"R:/epoc32/include/mw/QtCore" -I"R:/epoc32/include/mw/QtGui" -I"R:/epoc32/include/mw" -I"R:/sf/mw/qt/mkspecs/common/symbian" -I"R:/epoc32/include" -I"R:/epoc32/include/stdapis" -I"R:/epoc32/include/stdapis/sys" -I"R:/epoc32/include/platform/mw" -I"R:/epoc32/include/platform" -I"R:/epoc32/include/platform/loc" -I"R:/epoc32/include/platform/mw/loc" -I"R:/epoc32/include/platform/loc/sc" -I"R:/epoc32/include/platform/mw/loc/sc" -I"R:/epoc32/include/app" -I"R:/epoc32/include/platform/app" -I"R:/epoc32/include/platform/app/loc" -I"R:/epoc32/include/platform/app/loc/sc" -I"R:/sf/app/messaging/messagingapp/msgappfw/plugin/tsrc" -I"R:/epoc32/include/stdapis/stlportv5"
+first: default
+default: debug-winscw
+all: debug release
+
+qmake:
+ $(QMAKE) -spec symbian-sbsv2 -o "bld.inf" "R:/sf/app/messaging/messagingapp/msgappfw/plugin/tsrc/test_plugin.pro"
+
+bld.inf:
+ $(QMAKE)
+
+debug: bld.inf
+ $(SBS) -c winscw_udeb.mwccinc -c armv5_udeb
+release: bld.inf
+ $(SBS) -c armv5_urel
+debug-winscw: bld.inf
+ $(SBS) -c winscw_udeb.mwccinc
+debug-armv5: bld.inf
+ $(SBS) -c armv5_udeb
+release-armv5: bld.inf
+ $(SBS) -c armv5_urel
+
+export: bld.inf
+ $(SBS) export
+
+cleanexport: bld.inf
+ $(SBS) cleanexport
+
+
+
+mocclean: compiler_moc_header_clean compiler_moc_source_clean
+
+mocables: compiler_moc_header_make_all compiler_moc_source_make_all
+FORCE:
+
+-include .make.cache
+
+sis:
+ $(if $(wildcard test_plugin_template.pkg),$(if $(wildcard .make.cache),$(MAKE) -s -f $(MAKEFILE) ok_sis,$(if $(QT_SIS_TARGET),$(MAKE) -s -f $(MAKEFILE) ok_sis,$(MAKE) -s -f $(MAKEFILE) fail_sis_nocache)),$(MAKE) -s -f $(MAKEFILE) fail_sis_nopkg)
+
+ok_sis:
+ createpackage.bat $(QT_SIS_OPTIONS) test_plugin_template.pkg $(QT_SIS_TARGET) $(QT_SIS_CERTIFICATE) $(QT_SIS_KEY) $(QT_SIS_PASSPHRASE)
+
+fail_sis_nopkg:
+ $(error PKG file does not exist, 'SIS' target is only supported for executables or projects with DEPLOYMENT statement)
+
+fail_sis_nocache:
+ $(error Project has to be built or QT_SIS_TARGET environment variable has to be set before calling 'SIS' target)
+
+dodistclean:
+ -@ if EXIST "r:\sf\app\messaging\messagingapp\msgappfw\plugin\tsrc\Makefile" $(DEL_FILE) "r:\sf\app\messaging\messagingapp\msgappfw\plugin\tsrc\Makefile"
+ -@ if EXIST "r:\sf\app\messaging\messagingapp\msgappfw\plugin\tsrc\bld.inf" $(DEL_FILE) "r:\sf\app\messaging\messagingapp\msgappfw\plugin\tsrc\bld.inf"
+
+distclean: clean dodistclean
+
+clean: bld.inf
+ -$(SBS) reallyclean
+
+clean-debug: bld.inf
+ $(SBS) reallyclean -c winscw_udeb -c armv5_udeb
+clean-release: bld.inf
+ $(SBS) reallyclean -c armv5_urel
+clean-debug-winscw: bld.inf
+ $(SBS) reallyclean -c winscw_udeb
+clean-debug-armv5: bld.inf
+ $(SBS) reallyclean -c armv5_udeb
+clean-release-armv5: bld.inf
+ $(SBS) reallyclean -c armv5_urel
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgappfw/plugins/previewplugin/tsrc/conf/test_pluginpreview.cfg Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,43 @@
+/*
+* ==============================================================================
+* Name : test_pluginpreview.cfg
+* Part of : plugin / test_plugin
+* Description : plugin related test cases
+* Version: : % version:1 %
+*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* ============================================================================
+*/
+
+[Test]
+title 1. CreateCCsPreviewPluginL
+create test_pluginpreview testplugin
+testplugin CreateCCsPreviewPluginL
+delete testplugin
+[Endtest]
+
+
+[Test]
+title 2. MmsMsgPluginValidationL
+create test_pluginpreview testplugin
+testplugin MmsMsgPluginValidationL
+delete testplugin
+[Endtest]
+
+
+[Test]
+title 3. SendMmsMessageL
+create test_pluginpreview testplugin
+testplugin SendMmsMessageL
+delete testplugin
+[Endtest]
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgappfw/plugins/previewplugin/tsrc/group/bld.inf Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: ?Description
+*
+*/
+
+#define BLD_INF_GROUP_0496D339
+
+
+prj_platforms
+
+WINSCW GCCE ARMV5 ARMV6
+
+prj_testmmpfiles
+
+test_pluginpreview.mmp
+
+prj_extensions
+
+
+#if defined(WINSCW)
+#else
+#endif
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgappfw/plugins/previewplugin/tsrc/group/test_pluginpreview.mmp Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,119 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: ?Description
+*
+*/
+
+
+// To get the OSEXT_LAYER_SYSTEMINCLUDE-definition
+#include <platform_paths.hrh>
+#include <data_caging_paths_strings.hrh>
+
+
+TARGET test_pluginpreview.dll
+TARGETTYPE dll
+UID 0x1000008D 0x101FB3D3
+
+CAPABILITY ALL -TCB
+
+//TARGETPATH ?target_path
+DEFFILE test_plugin.def
+
+#ifdef SBSV2
+ USERINCLUDE ../inc
+
+ #if defined(__S60_)
+
+ #else // __S60_ not defined
+ SYSTEMINCLUDE /epoc32/include
+ SYSTEMINCLUDE /epoc32/include/internal
+ #endif // __S60_
+
+ SOURCEPATH ../src
+#else // SBSV2 not defined
+ USERINCLUDE ..\inc
+
+ #if defined(__S60_)
+ OSEXT_LAYER_SYSTEMINCLUDE
+ #else // __S60_ not defined
+ SYSTEMINCLUDE \epoc32\include
+ SYSTEMINCLUDE \epoc32\include\internal
+ #endif // __S60_
+
+ SOURCEPATH ..\src
+#endif // SBSV2
+
+SOURCEPATH ../src
+SOURCE test_pluginpreview.cpp
+SOURCE test_pluginpreviewblocks.cpp
+SOURCE ..\..\src\ccspreviewplugin.cpp
+SOURCE ..\..\src\ccspreviewpluginhandler.cpp
+SOURCE ..\..\src\proxy.cpp
+
+USERINCLUDE ..\inc
+USERINCLUDE ..\..\inc
+USERINCLUDE ..\..\..\..\..\msgutils\unidatautils\unidatamodel\inc
+USERINCLUDE ..\..\..\..\..\..\messagingappbase\obexmtms\TObexMTM\INC
+
+APP_LAYER_SYSTEMINCLUDE
+MW_LAYER_SYSTEMINCLUDE
+
+LIBRARY euser.lib
+LIBRARY eCom.lib
+LIBRARY csutils.lib
+LIBRARY efsrv.lib
+
+DEBUGLIBRARY flogger.lib
+
+// Msg Server
+LIBRARY Smcm.lib
+LIBRARY gsmu.lib
+LIBRARY etext.lib
+LIBRARY msgs.lib
+LIBRARY sqldb.lib
+LIBRARY thumbnailmanager.lib
+LIBRARY fbscli.lib
+LIBRARY estor.lib
+LIBRARY unidatamodel.lib
+LIBRARY charconv.lib
+LIBRARY sendas2.lib
+
+SYSTEMINCLUDE \epoc32\include\internal
+
+LIBRARY cone.lib
+LIBRARY ecom.lib
+LIBRARY bafl.lib
+LIBRARY estor.lib
+LIBRARY euser.lib
+LIBRARY flogger.lib
+LIBRARY stiftestinterface.lib
+LIBRARY stiftestengine.lib
+LIBRARY imcm.lib
+LIBRARY msgs.lib
+LIBRARY charconv.lib
+
+// Msg Server
+LIBRARY Smcm.lib
+LIBRARY gsmu.lib
+LIBRARY etext.lib
+LIBRARY msgs.lib
+LIBRARY sqldb.lib
+LIBRARY thumbnailmanager.lib
+LIBRARY fbscli.lib
+LIBRARY estor.lib
+LIBRARY unidatamodel.lib
+LIBRARY charconv.lib
+LIBRARY centralrepository.lib
+LIBRARY MsgMedia.lib
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgappfw/plugins/previewplugin/tsrc/group/test_pluginpreview.pkg Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,41 @@
+;
+; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+;Header
+#{"Testcache"}, (0x101FB3E3), 1, 2, 3, TYPE=SP
+
+;Language - standard language definitions
+&EN
+
+;Vendor ID
+:"Nokia Corporation"
+
+;Localised vendor
+%{"Vendor-EN"}
+
+;Supports Series 60 v 0.9
+[0x101F7961], 0, 0, 0, {"Series60ProductID"}
+
+;rom will not allow to update it if name is testframework, after install need to rename it to testframework.ini
+
+;INI FILE
+"..\init\test_plugin.ini" -"c:\Testframework\testframework.ini"
+
+;CFG FILES
+"..\conf\test_plugin.cfg" -"c:\Testframework\test_plugin.cfg"
+
+
+"\EPOC32\RELEASE\ARMV5\UREL\test_plugin.dll" -"!:\sys\bin\test_plugin.dll"
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgappfw/plugins/previewplugin/tsrc/inc/test_pluginpreview.h Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,232 @@
+
+/*
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: Main test class header for CS Preview Plugin
+#*/
+
+#ifndef TEST_PLUGINPREVIEW_H_
+#define TEST_PLUGINPREVIEW_H_
+
+// INCLUDES
+#include <badesca.h>
+#include <StifLogger.h>
+#include <TestScripterInternal.h>
+#include <StifTestModule.h>
+
+// USER INCLUDE
+#include <UniDataModel.h>
+//#include <thumbnailmanagerobserver.h>
+#include <thumbnailmanager.h>
+#include <mcsplugineventobserver.h>
+#include <mmsvattachmentmanager.h>
+#include <CAsyncWaiter.h>
+#include <cmsvmimeheaders.h>
+#include <mmsclient.h>
+#include <mtclreg.h>
+#include <SendUiConsts.h>
+
+
+#include <ccspreviewplugin.h>
+#include <ccspreviewpluginhandler.h>
+
+// Logging path
+_LIT( KTestPluginLogPath, "\\logs\\testframework\\test_pluginpreview\\" );
+// Log file
+_LIT( KTestPluginTestLogFile, "test_pluginpreview.txt" );
+_LIT( KTestPluginTestLogFileWithTitle, "test_pluginpreview_[%S].txt" );
+
+
+// FORWARD DECLARATION
+class CCsPlugin;
+class CMsvSession;
+class MCsPluginEventObserver;
+class MMsvSessionObserver;
+class CCsConversationEntry;
+class CCsPreviewPlugin;
+class CClientMtmRegistry;
+class CMmsClientMtm;
+class MCsPluginEventObserver;
+class CCsPreviewPluginHandler;
+
+/**
+ * Message plugin class
+ **/
+
+NONSHARABLE_CLASS(Ctest_pluginpreview) : public CScriptBase,public MMsvSessionObserver,public MThumbnailManagerObserver,public MCsPluginEventObserver,public MUniDataModelObserver
+{
+
+ private:
+
+ /**
+ * C++ default constructor.
+ */
+ Ctest_pluginpreview(CTestModuleIf& aTestModuleIf );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL();
+
+ // Prohibit copy constructor if not deriving from CBase.
+ // ?classname( const ?classname& );
+ // Prohibit assigment operator if not deriving from CBase.
+ // ?classname& operator=( const ?classname& );
+
+ /**
+ * Frees all resources allocated from test methods.
+ * @since ?Series60_version
+ */
+ void Delete();
+
+ /**
+ * Example test method.
+ * @since ?Series60_version
+ * @param aItem Script line containing parameters.
+ * @return Symbian OS error code.
+ */
+ virtual TInt ExampleL( CStifItemParser& aItem );
+
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static Ctest_pluginpreview* NewL( CTestModuleIf& aTestModuleIf );
+
+ /**
+ * From CScriptBase Runs a script line.
+ * @since ?Series60_version
+ * @param aItem Script line containing method name and parameters
+ * @return Symbian OS error code
+ * */
+
+ virtual TInt RunMethodL( CStifItemParser& aItem );
+ /**
+ * Destructor.
+ */
+ virtual ~Ctest_pluginpreview();
+
+ private:
+
+ CCsPreviewPlugin* iPlugin;
+
+ /**
+ * MsvServer session object
+ * Own
+ */
+ CMsvSession* iSession;
+
+ /**
+ * Mtm registry object
+ * Own
+ */
+ CClientMtmRegistry* iMtmRegistry;
+
+ /**
+ * Mms client mtm object
+ * Own.
+ */
+ CMmsClientMtm* iMmsMtm;
+ CThumbnailManager* iThumbnailManager;
+
+ public:
+
+ /**
+ * HandleCachingCompleted
+ * Sends the cache completed status to server
+ */
+ void HandleCachingCompleted();
+
+ /**
+ * HandleCachingError
+ * Sends the error occured during the caching to server
+ */
+ void HandleCachingError(const TInt aError);
+
+ public:
+ //MMsvSessionObserver
+ /**
+ * Handles the MsvServer updates. Implemented for MMsvSessionObserver
+ */
+ void HandleSessionEventL(TMsvSessionEvent aEvent, TAny* aArg1,
+ TAny* aArg2, TAny* aArg3);
+
+ public:
+ //MUniDataModelObserver
+ /**
+ */
+ void RestoreReady(TInt aParseResult, TInt aError);
+
+ public://Mcsplugineventobserver
+ /**
+ * AddConversations.
+ * Handle Conversation event from Plugins
+ * @param aConversationEntryLists List of conversation entries.
+ */
+ void AddConversations(const RPointerArray<CCsConversationEntry>& /*aConversationEntryLists*/){}
+
+ /**
+ * ModifyConversations.
+ * Update Conversation event from Plugins
+ * @param aConversationEntryLists List of conversation entries.
+ */
+ void ModifyConversations(const RPointerArray<CCsConversationEntry>& /*aConversationEntryLists*/){}
+
+ /**
+ * DeleteConversations.
+ * Delete Conversation event from Plugins
+ * @param aConversationEntryLists List of conversation entries.
+ */
+ void DeleteConversations(const RPointerArray<CCsConversationEntry>& /*aConversationEntryLists*/){}
+ /**
+ * CachingCompleted.
+ * Caching complete event from Plugins
+ */
+ void CachingCompleted(){}
+
+ /**
+ * CachingError.
+ * Caching error event from Plugins
+ * @param aError Caching Error infomation.
+ */
+ void CachingError(const TInt /*aError*/) {}
+
+ /**
+ * RefreshConversations
+ * Refresh all data from this plugin.
+ */
+ void RefreshConversations(){}
+
+ public:
+ // Callbacks from MThumbnailManagerObserver for getting thumbnails
+ void ThumbnailPreviewReady(MThumbnailData& aThumbnail,
+ TThumbnailRequestId aId);
+
+ void ThumbnailReady(TInt aError, MThumbnailData& aThumbnail,
+ TThumbnailRequestId aId);
+ public:
+
+ virtual TInt CreateCCsPreviewPluginL( CStifItemParser& /*aItem*/ );
+ virtual TInt MmsMsgPluginValidationL( CStifItemParser& /*aItem*/ );
+ virtual TInt SendMmsMessageL( CStifItemParser& /*aItem*/ );
+
+ void CleanAllFoldersL();
+ void CreateMmsMessageL(const TMsvId aFolderId,TBool aUnReadFlag = EFalse);
+ void HandleAttachementL(CMsvStore* store,TFileName& sourceFileName );
+ void CleanMessagesInFolderL(TMsvId aBoxId ,TBool aDeleteOne = EFalse);
+ // void CreateInitialCacheL();
+ };
+
+#endif /* test_pluginpreview_H_ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgappfw/plugins/previewplugin/tsrc/init/TestFramework.ini Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,44 @@
+#
+# This is STIFTestFramework initialization file
+# Comment lines start with '#'-character.
+# See STIF TestFramework users guide.doc for instructions
+
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+[Engine_Defaults]
+
+TestReportMode= FullReport # Possible values are: 'Empty', 'Summary', 'Environment',
+ 'TestCases' or 'FullReport'
+
+CreateTestReport= YES # Possible values: YES or NO
+
+TestReportFilePath= C:\LOGS\TestFramework\
+TestReportFileName= TestReport
+
+TestReportFormat= TXT # Possible values: TXT or HTML
+TestReportOutput= FILE # Possible values: FILE or RDEBUG
+TestReportFileCreationMode= OVERWRITE # Possible values: OVERWRITE or APPEND
+
+DeviceResetDllName= StifResetForNokia.dll # e.g. 'StifHWResetStub.dll' for user specific reseting
+
+[End_Defaults]
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+# Module configurations start
+
+[New_Module]
+ModuleName= testscripter
+TestCaseFile= C:\testframework\test_pluginpreview.cfg
+[End_Module]
+
+
+
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+[Logger_Defaults]
+
+[End_Logger_Defaults]
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+# End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgappfw/plugins/previewplugin/tsrc/src/test_pluginpreview.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,155 @@
+/*
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: Test class for CS Preview Plugin
+#
+*/
+
+
+// INCLUDE FILES
+#include <Stiftestinterface.h>
+#include "test_pluginpreview.h"
+#include <SettingServerClient.h>
+
+// -----------------------------------------------------------------------------
+// Ctest_pluginpreview::Ctest_pluginpreview
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+
+Ctest_pluginpreview::Ctest_pluginpreview( CTestModuleIf& aTestModuleIf ) : CScriptBase( aTestModuleIf )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// Ctest_pluginpreview::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+
+void Ctest_pluginpreview::ConstructL()
+ {
+ //Read logger settings to check whether test case name is to be
+ //appended to log file name.
+ RSettingServer settingServer;
+ TInt ret = settingServer.Connect();
+ if(ret != KErrNone)
+ {
+ User::Leave(ret);
+ }
+ // Struct to StifLogger settigs.
+ TLoggerSettings loggerSettings;
+ // Parse StifLogger defaults from STIF initialization file.
+ ret = settingServer.GetLoggerSettings(loggerSettings);
+ if(ret != KErrNone)
+ {
+ User::Leave(ret);
+ }
+ // Close Setting server session
+ settingServer.Close();
+
+ TFileName logFileName;
+
+ if(loggerSettings.iAddTestCaseTitle)
+ {
+ TName title;
+ TestModuleIf().GetTestCaseTitleL(title);
+ logFileName.Format(KTestPluginTestLogFileWithTitle, &title);
+ }
+ else
+ {
+ logFileName.Copy(KTestPluginTestLogFile);
+ }
+
+ iLog = CStifLogger::NewL( KTestPluginLogPath,
+ logFileName,
+ CStifLogger::ETxt,
+ CStifLogger::EFile,
+ EFalse );
+
+ //create msv session
+ iSession = CMsvSession::OpenSyncL(*this);
+
+ //create mtm registry
+ iMtmRegistry = CClientMtmRegistry::NewL(*iSession);
+
+ //create mms client mtm
+ iMmsMtm = static_cast<CMmsClientMtm*> (iMtmRegistry-> NewMtmL(KSenduiMtmMmsUid));
+
+ //create thumbnail manager
+ // iThumbnailManager = CThumbnailManager::NewL(*this);
+
+
+ TestModuleIf().SetBehavior( CTestModuleIf::ETestLeaksHandles );
+ }
+
+// -----------------------------------------------------------------------------
+// Ctest_pluginpreview::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+Ctest_pluginpreview* Ctest_pluginpreview::NewL( CTestModuleIf& aTestModuleIf )
+ {
+ Ctest_pluginpreview* self = new ( ELeave ) Ctest_pluginpreview( aTestModuleIf );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+
+// -----------------------------------------------------------------------------
+// Ctest_pluginpreview::~Ctest_pluginpreview
+// Destructor
+// -----------------------------------------------------------------------------
+//
+Ctest_pluginpreview::~Ctest_pluginpreview()
+ {
+
+ // Delete resources allocated from test methods
+ Delete();
+
+ // Delete logger
+ delete iLog;
+
+ }
+
+// ----------------------------------------------------------------------------
+ // Ctest_pluginpreview::HandleSessionEventL
+ // Implemented for MMsvSessionObserver
+ // ----------------------------------------------------------------------------
+ //
+void Ctest_pluginpreview::HandleSessionEventL(TMsvSessionEvent /*aEvent*/,
+ TAny */*aArg1*/,
+ TAny */*aArg2*/,
+ TAny */*aArg3*/)
+ {
+
+ }
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+
+// -----------------------------------------------------------------------------
+// LibEntryL is a polymorphic Dll entry point.
+// Returns: CScriptBase: New CScriptBase derived object
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CScriptBase* LibEntryL(
+ CTestModuleIf& aTestModuleIf ) // Backpointer to STIF Test Framework
+ {
+ return ( CScriptBase* ) Ctest_pluginpreview::NewL( aTestModuleIf );
+ }
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgappfw/plugins/previewplugin/tsrc/src/test_pluginpreviewblocks.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,482 @@
+/*
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: Main test class for CS Preview Plugin
+#*/
+
+// [INCLUDE FILES] - do not remove
+#include <e32svr.h>
+#include <msvsearchsortoperation.h>
+#include <msvsearchsortquery.h>
+#include <StifParser.h>
+#include <Stiftestinterface.h>
+#include <TXTRICH.H>
+#include <SMUTHDR.H>
+#include <smut.h>
+#include <msvstd.h>
+#include <rsendas.h>
+#include <rsendasmessage.h>
+#include <ecom\ECom.h>
+#include "test_pluginpreview.h"
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// Ctest_pluginpreview::Delete
+//
+// -----------------------------------------------------------------------------
+//
+void Ctest_pluginpreview::Delete()
+ {
+
+
+ }
+
+// -----------------------------------------------------------------------------
+// Ctest_pluginpreview::RunMethodL
+//
+// -----------------------------------------------------------------------------
+//
+TInt Ctest_pluginpreview::RunMethodL( CStifItemParser& aItem )
+ {
+ TStifFunctionInfo const KFunctions[] =
+ {
+ // Copy this line for every implemented function.
+ // First string is the function name used in TestScripter script file.
+ // Second is the actual implementation member function.
+
+ ENTRY( "Example", Ctest_pluginpreview::ExampleL ),
+ ENTRY( "CreateCCsPreviewPluginL",Ctest_pluginpreview::CreateCCsPreviewPluginL),
+ ENTRY( "MmsMsgPluginValidationL", Ctest_pluginpreview::MmsMsgPluginValidationL),
+ ENTRY( "SendMmsMessageL", Ctest_pluginpreview::SendMmsMessageL)
+
+ };
+
+ const TInt count = sizeof( KFunctions ) / sizeof( TStifFunctionInfo );
+ return RunInternalL( KFunctions, count, aItem );
+ }
+
+// -----------------------------------------------------------------------------
+// Ctestsmsplugin::ExampleL
+// Example test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt Ctest_pluginpreview::ExampleL( CStifItemParser& aItem )
+ {
+
+ // Print to UI
+ _LIT( Ktestplugin, "testpluginpreview" );
+ _LIT( KExample, "In Example" );
+ TestModuleIf().Printf( 0, Ktestplugin, KExample );
+ // Print to log file
+ iLog->Log( KExample );
+
+ TInt i = 0;
+ TPtrC string;
+ _LIT( KParam, "Param[%i]: %S" );
+ while ( aItem.GetNextString ( string ) == KErrNone )
+ {
+ TestModuleIf().Printf( i, Ktestplugin,
+ KParam, i, &string );
+ i++;
+ }
+
+ return KErrNone;
+
+ }
+
+// -----------------------------------------------------------------------------
+// Ctest_pluginpreview::CreateCCsPreviewPluginL
+// Example test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt Ctest_pluginpreview::CreateCCsPreviewPluginL( CStifItemParser& /*aItem*/ )
+ {
+
+ // Print to UI
+ _LIT( Ktestplugin, "CreateCCsPreviewPlugin" );
+ _LIT( KFunction, "In CreateCCsPreviewPlugin" );
+ TestModuleIf().Printf( 0, Ktestplugin, KFunction );
+ // Print to log file
+ iLog->Log( KFunction );
+ iPlugin = CCsPreviewPlugin::NewL(this);
+ iPlugin->GetConversationsL();
+ return KErrNone;
+
+ }
+
+
+// -----------------------------------------------------------------------------
+// Ctest_pluginpreview::ThumbnailPreviewReady()
+// callback
+// -----------------------------------------------------------------------------
+//
+void Ctest_pluginpreview::ThumbnailPreviewReady(MThumbnailData& /*aThumbnail*/, TThumbnailRequestId /*aId*/)
+ {
+
+ }
+
+
+// -----------------------------------------------------------------------------
+// Ctest_pluginpreview::ThumbnailReady()
+//
+// -----------------------------------------------------------------------------
+//
+void Ctest_pluginpreview::ThumbnailReady(TInt aError,MThumbnailData& aThumbnail, TThumbnailRequestId aId)
+ {
+
+ }
+
+
+// -----------------------------------------------------------------------------
+// Ctest_pluginpreview::RestoreReady()
+//
+// -----------------------------------------------------------------------------
+//
+void Ctest_pluginpreview::RestoreReady(TInt /*aParseResult*/, TInt /*aError*/)
+ {
+
+ }
+
+
+// -----------------------------------------------------------------------------
+// Ctest_pluginpreview::HandleCachingError
+// Caching error event from Plugins
+// -----------------------------------------------------------------------------
+//
+
+void Ctest_pluginpreview::HandleCachingError(const TInt /*aError*/)
+ {
+ Signal(KErrGeneral);
+ }
+
+// -----------------------------------------------------------------------------
+// Ctest_pluginpreview::HandleCachingCompleted
+// Caching complete event from Plugins
+// -----------------------------------------------------------------------------
+//
+
+void Ctest_pluginpreview::HandleCachingCompleted()
+ {
+
+
+
+ }
+
+// -----------------------------------------------------------------------------
+// Ctest_pluginpreview::MmsMsgPluginValidationL
+// Validates the initial Caching of sms plugin
+// -----------------------------------------------------------------------------
+//
+TInt Ctest_pluginpreview::MmsMsgPluginValidationL( CStifItemParser& /*aItem*/ )
+ {
+ // Print to UI
+ _LIT(Ktestplugin, "MmsPluginValidationL" );
+ _LIT( KFunction, "In MmsPluginValidationL" );
+ TestModuleIf().Printf( 0, Ktestplugin, KFunction );
+ // Print to log file
+ iLog->Log( KFunction );
+
+ CleanAllFoldersL();
+ CreateMmsMessageL(KMsvGlobalInBoxIndexEntryId);
+ CreateMmsMessageL(KMsvSentEntryId);
+ CreateMmsMessageL(KMsvDraftEntryId);
+ CreateMmsMessageL(KMsvGlobalOutBoxIndexEntryId);;
+
+ iPlugin = CCsPreviewPlugin::NewL(this);
+ iPlugin->GetConversationsL();
+
+ return KErrNone;
+
+ }
+
+
+// -----------------------------------------------------------------------------
+// Ctest_pluginpreview::CleanAllFoldersL
+// Cleans messages from all folders
+// -----------------------------------------------------------------------------
+
+void Ctest_pluginpreview::CleanAllFoldersL()
+ {
+ CleanMessagesInFolderL(KMsvGlobalInBoxIndexEntryId);
+ CleanMessagesInFolderL(KMsvGlobalOutBoxIndexEntryId);
+ CleanMessagesInFolderL(KMsvDraftEntryId);
+ // CleanMessagesInFolderL(KMsvSentEntryId);
+ }
+
+// -----------------------------------------------------------------------------
+// Ctest_pluginpreview::CreateMmsMessageL
+// Creates message
+// -----------------------------------------------------------------------------
+//
+
+void Ctest_pluginpreview::CreateMmsMessageL(const TMsvId aFolderId,TBool aUnReadFlag)
+ {
+
+ // create a new object to access an existing entry
+ CMsvEntry* msvEntry = CMsvEntry::NewL(*iSession, KMsvGlobalInBoxIndexEntryId, TMsvSelectionOrdering());
+ CleanupStack::PushL(msvEntry);
+
+ TMsvId defaultServiceId = 0;
+ defaultServiceId = iMmsMtm->DefaultServiceL();
+
+ _LIT( KMMSBody, " HELLO !!!");
+
+ CleanupStack::Pop(msvEntry);
+ iMmsMtm->SetCurrentEntryL(msvEntry);
+ iMmsMtm->CreateMessageL(defaultServiceId);
+ iMmsMtm->SetSubjectL(KMMSBody);
+
+ // set some mms defaults
+ iMmsMtm->SetMessageClass(EMmsClassPersonal);
+ iMmsMtm->SetExpiryInterval(86400);
+ iMmsMtm->SetDeliveryTimeInterval(3600);
+ iMmsMtm->SetMessagePriority(EMmsPriorityLow);
+ iMmsMtm->SetSenderVisibility(EMmsMaximumSenderVisibility);
+ iMmsMtm->SetDeliveryReport(EMmsDeliveryReportYes);
+ iMmsMtm->SetReadReply(EMmsReadReplyYes);
+
+ _LIT(KPhoneNumberString,"234567");
+ TBuf<15> phoneNumberString;
+ phoneNumberString.Copy(KPhoneNumberString);
+ _LIT(KPhoneNumberString1,"mine<98450>");
+ _LIT(KResultPhoneNumberString,"98450");
+
+ if (aFolderId == KMsvGlobalInBoxIndexEntryId)
+ {
+ iMmsMtm->SetSenderL(KResultPhoneNumberString);
+ }
+
+ iMmsMtm->AddAddresseeL(KResultPhoneNumberString);
+
+ CMsvStore* store = msvEntry->EditStoreL();
+ CleanupStack::PushL(store);
+
+ // set body as an attachment
+ CMsvMimeHeaders* mimeHeaders = CMsvMimeHeaders::NewL();
+ CleanupStack::PushL(mimeHeaders);
+ mimeHeaders->SetContentTypeL( _L8("image/jpg") );
+ mimeHeaders->SetContentSubTypeL( _L8("image/jpg") );
+ mimeHeaders->SetMimeCharset( KMmsUtf8 );
+ mimeHeaders->SetSuggestedFilenameL( _L("body.jpg") );
+
+ MMsvAttachmentManager& attachMan = store->AttachmentManagerL();
+ CMsvAttachment* attachmentInfo = CMsvAttachment::NewL(CMsvAttachment::EMsvFile); // ownership of attachmentInfo will be transferred
+ CleanupStack::PushL(attachmentInfo);
+ attachmentInfo->SetAttachmentNameL( _L("body.txt") );
+ attachmentInfo->SetMimeTypeL( _L8("image/jpg") );
+ mimeHeaders->StoreL( *attachmentInfo );
+
+ RFile textFile;
+
+ CMsvOperationActiveSchedulerWait* waiter = CMsvOperationActiveSchedulerWait::NewLC();
+ attachMan.CreateAttachmentL(_L("body.jpg"), textFile, attachmentInfo, waiter->iStatus );
+ CleanupStack::Pop(); // waiter
+ CleanupStack::Pop(); // attachmentInfo
+ CleanupStack::PushL(waiter);
+ waiter->Start();
+ CleanupStack::PopAndDestroy(waiter);
+
+ HBufC8* tempBuf = HBufC8::NewLC( 10 );
+ tempBuf->Des().Copy( KMMSBody );
+ textFile.Write( tempBuf->Des() );
+ textFile.Close();
+ CleanupStack::PopAndDestroy(); //tempBuf
+
+ CleanupStack::PopAndDestroy(); //mimeHeaders
+
+ // get the entry of the message
+ TMsvEntry messageEntry = iMmsMtm->Entry().Entry();
+
+ // set the description field same as the message subject
+ messageEntry.iDescription.Set( KMMSBody );
+
+ // save the changes done above
+ iMmsMtm->Entry().ChangeL(messageEntry);
+
+ TFileName attachmentFile( _L("c:\\pictures\\picture123.jpg") );
+ HandleAttachementL(store,attachmentFile );
+
+ // save the changes made to the message store
+ store->CommitL();
+ CleanupStack::PopAndDestroy(store);
+
+ // save the message
+ iMmsMtm->SaveMessageL();
+
+ // final fine tuning
+ messageEntry.SetAttachment(ETrue);
+ messageEntry.iDate.HomeTime();
+ messageEntry.SetVisible(ETrue);
+ messageEntry.SetInPreparation(EFalse);
+
+ if( aUnReadFlag )
+ {
+ messageEntry.SetUnread(ETrue);
+ messageEntry.SetNew(ETrue);
+ }
+ else
+ {
+ messageEntry.SetUnread(EFalse);
+ messageEntry.SetNew(EFalse);
+ }
+ messageEntry.SetComplete(ETrue);
+ messageEntry.iServiceId = defaultServiceId;
+ messageEntry.iRelatedId = 0;
+
+ if (aFolderId == KMsvDraftEntryId)
+ messageEntry.SetReadOnly(EFalse);
+ else
+ messageEntry.SetReadOnly(ETrue);
+
+ messageEntry.iMtmData1 = KMmsMessageMRetrieveConf | KMmsMessageMobileTerminated;
+
+ iMmsMtm->Entry().ChangeL(messageEntry);
+
+ }
+
+
+// -----------------------------------------------------------------------------
+// Ctest_pluginpreview::CreateMmsMessageL
+// Creates message
+// -----------------------------------------------------------------------------
+//
+
+void Ctest_pluginpreview:: HandleAttachementL(CMsvStore* store,TFileName& sourceFileName )
+ {
+
+ // attachment settings
+ MMsvAttachmentManager& attachMan = store->AttachmentManagerL();
+ CMsvAttachment* attachmentInfo = CMsvAttachment::NewL(CMsvAttachment::EMsvFile); // ownership of attachmentInfo will be transferred
+ CleanupStack::PushL(attachmentInfo);
+ attachmentInfo->SetAttachmentNameL( sourceFileName);
+ attachmentInfo->SetMimeTypeL(_L8("image/jpg") );
+
+ CMsvMimeHeaders* mimeHeaders = CMsvMimeHeaders::NewL();
+ CleanupStack::PushL(mimeHeaders);
+ mimeHeaders->SetContentTypeL( _L8("image/jpg") );
+ mimeHeaders->SetContentSubTypeL( _L8("image/jpg") );
+ mimeHeaders->SetMimeCharset( KMmsUtf8 );
+ mimeHeaders->StoreL( *attachmentInfo );
+ CleanupStack::PopAndDestroy( mimeHeaders );
+
+ CMsvOperationActiveSchedulerWait* waiter = CMsvOperationActiveSchedulerWait::NewLC();
+ TInt err;
+ TRAP(err, attachMan.AddAttachmentL(sourceFileName, attachmentInfo, waiter->iStatus ));
+ if (err == KErrNone)
+ {
+ waiter->Start();
+ CleanupStack::PopAndDestroy(waiter);
+ CleanupStack::Pop(); // attachmentInfo, the ownership is transferred
+ }
+ else
+ {
+ CleanupStack::PopAndDestroy(waiter);
+ CleanupStack::PopAndDestroy(); // attachmentInfo, ownership is not transferred (leave occurs)
+ _LIT( Ktestplugin, "HandleAttachment" );
+ _LIT( KFunction, "In HandleAttachment::Failed" );
+ }
+
+ }
+
+// -----------------------------------------------------------------------------
+// Ctestsmsplugin::SendMmsMessageL
+// Send ccs message using RSendAs api
+// -----------------------------------------------------------------------------
+//
+
+TInt Ctest_pluginpreview::SendMmsMessageL( CStifItemParser& /*aItem*/ )
+ {
+ // Print to UI
+ _LIT( Ktestplugin, "SendCcsMessageL" );
+ _LIT( KFunction, "In SendCcsMessageL" );
+ TestModuleIf().Printf( 0, Ktestplugin, KFunction );
+ // Print to log file
+ iLog->Log( KFunction );
+
+ RSendAs sendas;
+ CleanupClosePushL(sendas);
+ TInt res = sendas.Connect();
+ User::LeaveIfError(res);
+
+ RSendAsMessage message;
+ CleanupClosePushL(message);
+ TRAP(res, message.CreateL(sendas,KUidMsgTypeMultimedia));
+ User::LeaveIfError(res);
+
+ // TBuf<512> MsgText;
+ //MsgText.Copy(_L("Message being sent"));
+ //message.SetBodyTextL(MsgText);
+ TBuf<15> RecAdd;
+ RecAdd.Copy(_L("123456789"));
+ message.AddRecipientL(RecAdd,RSendAsMessage::ESendAsRecipientTo );
+
+ message.SendMessageAndCloseL();
+ CleanupStack::Pop(1); // RMessage
+ CleanupStack::PopAndDestroy(1); // RSendAs
+
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// Ctest_pluginpreview::CleanMessagesInFolderL
+// Cleans messages from the specified folder
+// -----------------------------------------------------------------------------
+
+void Ctest_pluginpreview::CleanMessagesInFolderL(TMsvId aBoxId,TBool aDeleteOne)
+ {
+
+ iLog->Log(_L("In CleanMessagesInFolderL"));
+ TInt count;
+ CMsvEntry* cEntry = NULL;
+ // delete messages from the specified box
+ cEntry = iSession->GetEntryL(KMsvRootIndexEntryId);
+ CleanupStack::PushL(cEntry);
+ cEntry->SetEntryL(aBoxId);
+ // show invisible entries
+ cEntry->SetSortTypeL( TMsvSelectionOrdering( KMsvNoGrouping, EMsvSortByNone, ETrue ) );
+ CMsvEntrySelection* msvEntrySelection = cEntry->ChildrenWithMtmL(KUidMsgTypeSMS);
+ CleanupStack::PushL(msvEntrySelection);
+
+ if( aDeleteOne )
+ {
+ count =1;
+ }
+ else
+ {
+ count = msvEntrySelection->Count();
+ }
+
+ for ( int i = 0; i < count ; i++ )
+ {
+ CMsvEntry* entry = iSession->GetEntryL( msvEntrySelection->At(i) );
+ CleanupStack::PushL( entry );
+ TMsvEntry tEntry = entry->Entry();
+ tEntry.SetReadOnly(EFalse);
+ entry->ChangeL(tEntry);
+ cEntry->DeleteL( msvEntrySelection->At(i) );
+ CleanupStack::PopAndDestroy( entry );
+ }
+
+ CleanupStack::PopAndDestroy(msvEntrySelection);
+ CleanupStack::PopAndDestroy(cEntry);
+ iLog->Log(_L("End of CleanMessagesInFolderL"));
+
+ }
+
+
+
Binary file messagingapp/msgappfw/server/backup_registration.xml has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgappfw/server/inc/ccsbackuphandler.h Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,41 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+
+#include <babackup.h>
+#include <f32file.h>
+
+class CCsServer;
+
+class CCsBackUpHandler: public CBase, public MBackupObserver
+{
+public:
+ static CCsBackUpHandler* NewL(CCsServer& aServer);
+ ~CCsBackUpHandler();
+ // from MBackupObserver
+ virtual void ChangeFileLockL(const TDesC& aFileAffected, TFileLockFlags aFlags);
+
+private:
+ void ConstructL();
+ CCsBackUpHandler(CCsServer& aServer);
+ void CloseConversationsDbL();
+ void OpenConversationsDbL();
+
+private:
+ CBaBackupSessionWrapper* iBackup;
+ TFileName iFileName;
+ CCsServer& iServer;
+};
+
--- a/messagingapp/msgappfw/server/inc/ccscontactsmanager.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgappfw/server/inc/ccscontactsmanager.h Thu Jul 22 16:32:06 2010 +0100
@@ -19,6 +19,7 @@
// SYSTEM INCLUDES
#include <QObject>
+#include <qtcontacts.h>
#include "qtcontactsglobal.h"
// USER INCLUDES
#include "mcscontactsmanagerobserver.h"
--- a/messagingapp/msgappfw/server/inc/ccsconversation.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgappfw/server/inc/ccsconversation.h Thu Jul 22 16:32:06 2010 +0100
@@ -139,7 +139,7 @@
*/
void AddContactDetailsL(
TInt32 aContactId,
- const TDesC& aDisplayName);
+ const HBufC* aDisplayName);
/**
* AddContactDetailsL
--- a/messagingapp/msgappfw/server/inc/ccsconversationcache.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgappfw/server/inc/ccsconversationcache.h Thu Jul 22 16:32:06 2010 +0100
@@ -148,8 +148,9 @@
*
* @param aConversationId Conversation Id.
* @param aDeleted ETrue if conversation is being deleted else EFalse
+ * @param aCount = 0, count of messages in sending-state/not-deleted
*/
- void MarkConversationAsDeleted(TInt aConversationId, TBool aDeleted);
+ void MarkConversationAsDeleted(TInt aConversationId, TBool aDeleted, TInt aCount = 0);
/**
* IsDeleted
@@ -188,6 +189,8 @@
*/
TInt GetConversationIdFromAddressL(TDesC& aContactAddress);
+ CCsClientConversation* GetConversationFromConversationIdL(TInt aConversationId);
+
/**
* Get conversation from message-id
* @param aMessageId Message id
--- a/messagingapp/msgappfw/server/inc/ccsconversationdeletehandler.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgappfw/server/inc/ccsconversationdeletehandler.h Thu Jul 22 16:32:06 2010 +0100
@@ -106,6 +106,13 @@
* Conversation Id currently being deleted.
*/
TInt iConversationId;
+
+ /**
+ * Number of Messages in Sending state that are not deleted
+ */
+ TInt iSendStateMsgs;
+
+
};
#endif // __C_CS_CONVERSATION_DELETE_HANDLER_H__
--- a/messagingapp/msgappfw/server/inc/ccsconversationevent.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgappfw/server/inc/ccsconversationevent.h Thu Jul 22 16:32:06 2010 +0100
@@ -115,6 +115,12 @@
*/
TBool IsDeleteConversationListEventSet() const;
+ /**
+ * Is partial delete conversation event set in this object
+ * @ retrun TBool
+ */
+ TBool IsPartialDeleteConversationListEventSet() const;
+
/**
* Is new conversation event set in this object
*
--- a/messagingapp/msgappfw/server/inc/ccsserver.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgappfw/server/inc/ccsserver.h Thu Jul 22 16:32:06 2010 +0100
@@ -30,6 +30,7 @@
class CCsSession;
class CCsContactsManager;
class CCsClientConversation;
+class CCsBackUpHandler;
// CLASS DECLARATION
/**
@@ -131,7 +132,18 @@
{
}
;
-
+
+ /**
+ * Reload the plugins, once they are unloaded after a
+ * backup/ restore
+ */
+ void LoadPlugins();
+
+ /**
+ * Unload the plugins, for backup/ restore
+ */
+ void DeletePlugins();
+
public:
/**
@@ -183,6 +195,11 @@
* Caching status
*/
TUint8 iCsCachingStatus;
+
+ /**
+ * The backup handler class
+ */
+ CCsBackUpHandler* iBackUpHandler;
};
#endif // __C_CS_SERVER_H
--- a/messagingapp/msgappfw/server/inc/ccssession.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgappfw/server/inc/ccssession.h Thu Jul 22 16:32:06 2010 +0100
@@ -92,6 +92,13 @@
void HandleModifyConversationListEventL(
CCsClientConversation* aClientConversation);
+ /**
+ * HandlePartialDeleteConversationListEvent
+ * Handles the partial delete conversation event from cache
+ */
+ void HandlePartialDeleteConversationListEvent(
+ CCsClientConversation* aClientConversation);
+
/**
* HandleNewConversationEventL
* Handles the new conversation event received from cache
@@ -329,6 +336,8 @@
* @param aMessage RMessage instance
*/
void GetConversationIdfromAddressL(const RMessage2& aMessage);
+
+ void GetConversationFromConversationIdL(const RMessage2& aMessage);
/**
* GetConversationFromMessageIdL
@@ -358,7 +367,7 @@
* Buf for doing IPC
* Own
*/
- HBufC8* des;
+ HBufC8* iDes;
/**
* iEventList
--- a/messagingapp/msgappfw/server/rom/csserver.iby Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgappfw/server/rom/csserver.iby Thu Jul 22 16:32:06 2010 +0100
@@ -21,9 +21,6 @@
data=DATAZ_\system\install\csserver_stub.sis system\install\csserver_stub.sis
file=ABI_DIR\BUILD_DIR\csserver.exe PROGRAMS_DIR\csserver.exe
-
-data=DATAZ_\RESOURCE_FILES_DIR\cscontacts.rsc RESOURCE_FILES_DIR\cscontacts.rsc
-
-
+data=EPOCROOT##epoc32\data\Z\private\2002A542\backup_registration.xml private\2002A542\backup_registration.xml
#endif // __CSSERVER_IBY__
--- a/messagingapp/msgappfw/server/server.pro Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgappfw/server/server.pro Thu Jul 22 16:32:06 2010 +0100
@@ -23,10 +23,8 @@
INCLUDEPATH += ./inc \
./../utils/inc \
- ./../../msgutils/s60qconversions/inc \
./../../../mmsengine/inc
-INCLUDEPATH += /ext/mw/qtextensions/qtmobileextensions/include
INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
SYMBIAN_PLATFORMS = WINSCW ARMV5
@@ -34,9 +32,9 @@
symbian {
TARGET.UID3 = 0x2002A542
TARGET.CAPABILITY = CAP_SERVER
- TARGET.EPOCSTACKSIZE = 0x8000
+ TARGET.EPOCSTACKSIZE = 0x14000
VENDORID = VID_DEFAULT
- TARGET.EPOCHEAPSIZE = 0x100000 0x500000
+ TARGET.EPOCHEAPSIZE = 0x100000 0x1000000
VERSION = 1.0
}
@@ -51,7 +49,8 @@
ccsconversationevent.h \
ccsconversationcontact.h \
ccsconversationdeletehandler.h \
- ccsconversationmarkreadhandler.h
+ ccsconversationmarkreadhandler.h \
+ ccsbackuphandler.h
SOURCES += ccsstartup.cpp \
ccsserver.cpp \
@@ -65,14 +64,16 @@
ccsconversationevent.cpp \
ccsconversationcontact.cpp \
ccsconversationdeletehandler.cpp \
- ccsconversationmarkreadhandler.cpp
+ ccsconversationmarkreadhandler.cpp \
+ ccsbackuphandler.cpp
# Build.inf rules
BLD_INF_RULES.prj_exports += \
"$${LITERAL_HASH}include <platform_paths.hrh>" \
"$${LITERAL_HASH}include <data_caging_paths.hrh>" \
"rom/csserver.iby CORE_APP_LAYER_IBY_EXPORT_PATH(csserver.iby)" \
- "stub_sis/csserver_stub.sis /epoc32/data/z/system/install/csserver_stub.sis"
+ "stub_sis/csserver_stub.sis /epoc32/data/z/system/install/csserver_stub.sis" \
+ "backup_registration.xml z:/private/2002A542/backup_registration.xml"
LIBS += -leuser \
-lcone \
@@ -88,6 +89,6 @@
-lcentralrepository \
-limcm \
-lQtContacts \
- -ls60qconversions
+ -lxqutils
-
\ No newline at end of file
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgappfw/server/src/ccsbackuphandler.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,123 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+#include "ccsbackuphandler.h"
+#include <e32base.h>
+#include <e32property.h>
+#include <connect/sbdefs.h>
+#include "ccsserver.h"
+#include "ccsdebug.h"
+
+_LIT(KDbFileNamePath,"c:\\private\\10281e17\\[2002A542]conversations.db");
+
+
+// ========================== Member Functions ===============================
+
+// ----------------------------------------------------------------------------
+// CCsBackUpHandler::NewL
+// ----------------------------------------------------------------------------
+CCsBackUpHandler* CCsBackUpHandler::NewL(CCsServer& aServer)
+{
+ PRINT ( _L("Enter CCsBackUpHandler::NewL") );
+ CCsBackUpHandler* self = new (ELeave) CCsBackUpHandler(aServer);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ PRINT ( _L("Exit CCsBackUpHandler::NewL") );
+ return (self);
+
+}
+
+// ----------------------------------------------------------------------------
+// CCsBackUpHandler::CCsBackUpHandler
+// ----------------------------------------------------------------------------
+CCsBackUpHandler::CCsBackUpHandler(CCsServer& aServer): iServer(aServer)
+{
+}
+
+// ----------------------------------------------------------------------------
+// CCsBackUpHandler::~CCsBackUpHandler
+// destructor
+// ----------------------------------------------------------------------------
+CCsBackUpHandler::~CCsBackUpHandler()
+{
+ // Unregister ourselves with backup server
+ if (iBackup)
+ {
+ iBackup->DeregisterFile(iFileName);
+ delete iBackup;
+ }
+}
+
+// ----------------------------------------------------------------------------
+// CCsBackUpHandler::ConstructL
+// The 2-phase constructor
+// ----------------------------------------------------------------------------
+void CCsBackUpHandler::ConstructL()
+{
+ PRINT ( _L("Enter CCsBackUpHandler::ConstructL") );
+ iFileName = KDbFileNamePath;
+ // Create backup session
+ iBackup = CBaBackupSessionWrapper::NewL();
+ // Register with the backup server
+ iBackup->RegisterFileL(iFileName, *this);
+ PRINT ( _L("Exit CCsBackUpHandler::ConstructL 2") );
+ PRINT1 ( _L("KDbFileNamePath: %S"), &iFileName);
+}
+
+// ----------------------------------------------------------------------------
+// CCsBackUpHandler::ChangeFileLockL
+// Call back from the backup engine observer when a backup/restore is taking place
+// ----------------------------------------------------------------------------
+void CCsBackUpHandler::ChangeFileLockL(const TDesC& aFileAffected, TFileLockFlags aFlags)
+{
+ PRINT1 ( _L("ChangeFileLockL: %d"), aFlags);
+ PRINT1 ( _L("ChangeFileLockL affected file : %S"), &aFileAffected);
+ switch (aFlags) {
+ case ETakeLock:
+ {
+ OpenConversationsDbL();
+ break;
+ }
+ case EReleaseLockNoAccess:
+ case EReleaseLockReadOnly:
+ {
+ CloseConversationsDbL();
+ break;
+ }
+ default:
+ {
+ __ASSERT_DEBUG(EFalse,User::Invariant());
+ break;
+ }
+ }
+}
+
+// ----------------------------------------------------------------------------
+// CCsBackUpHandler::CloseConversationsDbL
+// Unloads the plugins, so that the DB handle is closed
+// ----------------------------------------------------------------------------
+void CCsBackUpHandler::CloseConversationsDbL()
+{
+ iServer.DeletePlugins();
+}
+
+// ----------------------------------------------------------------------------
+// CCsBackUpHandler::OpenConversationsDbL
+// Loads the plugins, so that the DB handle is again opened
+// ----------------------------------------------------------------------------
+void CCsBackUpHandler::OpenConversationsDbL()
+{
+ iServer.LoadPlugins();
+}
--- a/messagingapp/msgappfw/server/src/ccscontactsmanager.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgappfw/server/src/ccscontactsmanager.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -16,7 +16,6 @@
*/
// System includes
-#include "qtcontacts.h"
#include <QList>
// User includes
#include "ccscontactsmanager.h"
--- a/messagingapp/msgappfw/server/src/ccscontactsresolver.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgappfw/server/src/ccscontactsresolver.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -16,7 +16,7 @@
*/
// SYSTEM INCLUDES
-#include "qtcontacts.h"
+#include "qtcontacts.h"
#include "qcontactdetailfilter.h"
#include <QList>
@@ -50,21 +50,37 @@
const QString &address,
CCsContactDetail &contactDetail)
{
+ // apply filter on phone number field
QContactDetailFilter phoneFilter;
phoneFilter.setDetailDefinitionName(
- QContactPhoneNumber::DefinitionName,
+ QContactPhoneNumber::DefinitionName,
QContactPhoneNumber::FieldNumber);
-
+
phoneFilter.setValue(address);
phoneFilter.setMatchFlags(QContactFilter::MatchEndsWith);
-
QList<QContact> matchingContacts = mPhonebookManager->contacts(phoneFilter);
+ if ( matchingContacts.count() > 0 ) {
+ QContact match = matchingContacts.at(0);
+ // Fill the contact details
+ contactDetail.contactId = match.localId();
+ contactDetail.displayName = match.displayLabel();
+ return true;
+ }
- if ( matchingContacts.count() > 0 ) {
+ // apply filter on email address field
+ QContactDetailFilter emailFilter;
+ emailFilter.setDetailDefinitionName(
+ QContactEmailAddress::DefinitionName,
+ QContactEmailAddress::FieldEmailAddress);
+
+ emailFilter.setValue(address);
+ emailFilter.setMatchFlags(QContactFilter::MatchExactly);
+ matchingContacts = mPhonebookManager->contacts(emailFilter);
+ if ( matchingContacts.count() > 0 ) {
QContact match = matchingContacts.at(0);
- // Fill the contact details
+ // Fill the contact details
contactDetail.contactId = match.localId();
- contactDetail.displayName = match.displayLabel();
+ contactDetail.displayName = match.displayLabel();
return true;
}
return false;
@@ -76,14 +92,14 @@
// ----------------------------------------------------------------------------
void CCsContactsResolver::resolveContactId(
const quint32 &contactId,
- CCsContactDetail &contactDetail)
+ CCsContactDetail &contactDetail)
{
// Fetch back the persisted contact
QContact contact = mPhonebookManager->contact(contactId);
- contactDetail.contactId = contact.localId();
-
+ contactDetail.contactId = contact.localId();
+
contactDetail.displayName = contact.displayLabel();
-
+
QList<QContactPhoneNumber> numbers = contact.details<QContactPhoneNumber>();
int numberCount = numbers.count();
@@ -91,7 +107,16 @@
{
QString phoneNumber= numbers.at(a).number();
contactDetail.addressList.append(phoneNumber);
- }
+ }
+
+ QList<QContactEmailAddress> emailAddresses = contact.details<QContactEmailAddress>();
+ int emailCount = emailAddresses.count();
+
+ for ( int a=0; a<emailCount ;++a)
+ {
+ QString emailAddr= emailAddresses.at(a).emailAddress();
+ contactDetail.addressList.append(emailAddr);
+ }
}
// EOF
--- a/messagingapp/msgappfw/server/src/ccsconversation.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgappfw/server/src/ccsconversation.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -253,9 +253,12 @@
void
CCsConversation::AddContactDetailsL(
TInt32 aContactId,
- const TDesC& aDisplayName)
+ const HBufC* aDisplayName)
{
- iContact->SetDisplayNameL(aDisplayName);
+ if(aDisplayName)
+ {
+ iContact->SetDisplayNameL(*aDisplayName);
+ }
iContact->SetContactId (aContactId);
}
--- a/messagingapp/msgappfw/server/src/ccsconversationcache.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgappfw/server/src/ccsconversationcache.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -25,7 +25,7 @@
#include <ccsdefs.h>
#include <telconfigcrkeys.h> // KCRUidTelephonyConfiguration
#include <centralrepository.h>
-
+#include <xqconversions.h>
// USER INCLUDE FILES
#include "ccsconversationcache.h"
#include "ccsconversationcachehelper.h"
@@ -35,7 +35,6 @@
#include "ccscontactsresolver.h"
#include "ccsconversationevent.h"
#include "ccsserver.h"
-#include "s60qconversions.h"
#include "ccsdebug.h"
// ============================== MEMBER FUNCTIONS ============================
@@ -406,6 +405,20 @@
CleanupStack::PopAndDestroy(clientConv);
}
+ // send all CV entry delete events, required in case CV is open
+ // Notify client of conversation change
+ TInt totalEntryCount = conversation->GetEntryCount();
+ for (TInt entryCounter = totalEntryCount - 1; entryCounter >= 0;
+ entryCounter--)
+ {
+ CCsConversationEntry* entryInConversation =
+ conversation->GetEntryL(entryCounter);
+ CCsClientConversation * clientConv =
+ CreateClientConvLC(conversation, entryInConversation);
+ NotifyL(clientConv, KConversationEventDelete);
+ CleanupStack::PopAndDestroy(clientConv);
+ }
+
iConversationList->Remove(aIndex);
entryList.ResetAndDestroy();
@@ -437,7 +450,7 @@
// CCsConversationCache::MarkConversationAsDeleted
// ----------------------------------------------------------------------------
void CCsConversationCache::MarkConversationAsDeleted(TInt aConversationId,
- TBool aDeleted)
+ TBool aDeleted, TInt aCount)
{
TInt conversationCount = iConversationList->Count();
@@ -450,6 +463,14 @@
if (id == aConversationId)
{
conversation->MarkDeleted(aDeleted);
+ if( aCount )
+ {
+ CCsClientConversation* clientConversation =
+ CreateClientConvLC(conversation,
+ conversation->GetLatestEntryL());
+ NotifyL(clientConversation, KConversationListEventPartialDelete);
+ CleanupStack::PopAndDestroy();// clientConversation
+ }
break;
}
}
@@ -513,7 +534,7 @@
{
QString phoneNumber = phoneNumberList.at(i);
HBufC* phoneNumber_s60 =
- S60QConversions::qStringToS60Desc(phoneNumber);
+ XQConversions::qStringToS60Desc(phoneNumber);
TInt cIndex = FindConversation(*phoneNumber_s60);
if (cIndex != KErrNotFound)
{
@@ -553,7 +574,7 @@
{
QString phoneNumber = phoneNumberList.at(i);
HBufC* phoneNumber_s60 =
- S60QConversions::qStringToS60Desc(phoneNumber);
+ XQConversions::qStringToS60Desc(phoneNumber);
TInt cIndex = FindConversation(*phoneNumber_s60);
if ( cIndex != KErrNotFound )
@@ -640,6 +661,29 @@
}
// ----------------------------------------------------------------------------
+// CCsConversationCache::GetConversationFromConversationId
+// ----------------------------------------------------------------------------
+CCsClientConversation* CCsConversationCache::GetConversationFromConversationIdL(TInt aConversationId)
+ {
+
+ CCsClientConversation* clientConv = NULL;
+
+ for ( TInt loop = 0; loop < iConversationList->Count(); ++loop )
+ {
+ CCsConversation* conversation =
+ static_cast<CCsConversation*>((*iConversationList)[loop]);
+
+ if (aConversationId == conversation->GetConversationId())
+ {
+ clientConv = CreateClientConvLC(conversation, conversation->GetLatestEntryL());
+ CleanupStack::Pop();
+ break;
+ }
+ }
+ return clientConv;
+ }
+
+// ----------------------------------------------------------------------------
// CCsConversationCache::GetConversationFromMessageIdL
// ---------------------------------------------------------------------------
CCsClientConversation* CCsConversationCache::GetConversationFromMessageIdL(TInt aMessageId)
--- a/messagingapp/msgappfw/server/src/ccsconversationcachehelper.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgappfw/server/src/ccsconversationcachehelper.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -29,7 +29,7 @@
#include "ccsconversationevent.h"
#include "ccscontactsmanager.h"
#include "ccscontactsresolver.h"
-#include "s60qconversions.h"
+#include <xqconversions.h>
#include "ccsdebug.h"
// ============================== MEMBER FUNCTIONS ============================
@@ -331,7 +331,7 @@
if (Contact)
{
QString contactAddress =
- S60QConversions::s60DescToQString(Contact->Des());
+ XQConversions::s60DescToQString(Contact->Des());
iConversationCache->ContactsManager()->resolver()->resolveContact(contactAddress,
contactDetail);
@@ -345,7 +345,7 @@
HBufC* displayName = NULL;
if(!contactDetail.displayName.isEmpty())
{
- displayName=S60QConversions::qStringToS60Desc(contactDetail.displayName);
+ displayName=XQConversions::qStringToS60Desc(contactDetail.displayName);
}
TRAPD(error, AddNewConversationL( aConverastionEvent->
ClientConversation()->GetConversationEntry(),
@@ -539,10 +539,11 @@
if (conversation->GetEntryCount() == 0
&& !conversation->IsSpecialConversation())
{
- conversationList->Remove(loop);
- delete conversation;
- //reset the counters
- loop -= 1;
+
+ conversationList->Remove(loop);
+ delete conversation;
+ //reset the counters
+ loop -= 1;
}
// Stop searching
@@ -572,8 +573,9 @@
conversation->AddEntryL(aConversationEntry);
// fill firstname and lastname and contact Id
- conversation->AddContactDetailsL(aContactId,
- *aDisplayName);
+ if(aDisplayName)
+ conversation->AddContactDetailsL(aContactId,
+ aDisplayName);
// fill the phone number
if (aConversationEntry->Contact())
@@ -598,6 +600,9 @@
}
iConversationCache->NotifyL(clientConv, KConversationListEventNew);
+ // send the new conversation event as well, so that if there are nay listeners for the cv
+ // then they will get the notification.
+ iConversationCache->NotifyL(clientConv, KConversationEventNew);
CleanupStack::PopAndDestroy(clientConv);
CleanupStack::Pop(conversation);
--- a/messagingapp/msgappfw/server/src/ccsconversationcontact.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgappfw/server/src/ccsconversationcontact.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -100,8 +100,6 @@
CCsConversationContact::SetDisplayNameL(
const TDesC& aDisplayName)
{
- if( &aDisplayName )
- {
TRAPD(error, iDisplayName = aDisplayName.AllocL());
if(error != KErrNone)
{
@@ -110,7 +108,7 @@
PRINT1 ( _L("CCsConversationContact::SetFirstNameL - Error:%d"),
error );
}
- }
+
}
// ----------------------------------------------------------------------------
--- a/messagingapp/msgappfw/server/src/ccsconversationdeletehandler.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgappfw/server/src/ccsconversationdeletehandler.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -39,7 +39,9 @@
// Constructor
// ----------------------------------------------------------------------------
CCsConversationDeleteHandler::CCsConversationDeleteHandler():
- CActive(CActive::EPriorityLow)
+ CActive(CActive::EPriorityLow),
+ iState(EIdle),
+ iConversationEntryList(NULL)
{
CActiveScheduler::Add( this );
}
@@ -50,9 +52,6 @@
void CCsConversationDeleteHandler::ConstructL(CCsConversationCache* aCache)
{
iCache = aCache;
- iState = EIdle;
-
- iConversationEntryList = new (ELeave)RPointerArray<CCsConversationEntry> ();
iSession = CMsvSession::OpenSyncL(*this);
}
@@ -61,6 +60,15 @@
// ----------------------------------------------------------------------------
CCsConversationDeleteHandler::~CCsConversationDeleteHandler()
{
+ // Make sure Aync request cancel.
+ Cancel();
+
+ if(iSession)
+ {
+ delete iSession;
+ iSession = NULL;
+ }
+
if (iConversationEntryList)
{
iConversationEntryList->ResetAndDestroy();
@@ -68,13 +76,7 @@
delete iConversationEntryList;
iConversationEntryList = NULL;
}
-
- if (iSession)
- {
- delete iSession;
- iSession = NULL;
- }
- }
+}
// ----------------------------------------------------------------------------
// Delete set of messages
@@ -96,12 +98,16 @@
CCsClientConversation* clientConversation = CCsClientConversation::NewL();
clientConversation->SetConversationEntryId(iConversationId);
CleanupStack::PushL(clientConversation);
-
+
+ // Create entry list
+ iConversationEntryList = new (ELeave)RPointerArray<CCsConversationEntry> ();
+
// Get conversationlist for given client conversation
iCache->GetConversationsL (clientConversation, iConversationEntryList);
iCache->MarkConversationAsDeleted(iConversationId, ETrue);
iDeletedCount = 0;
+ iSendStateMsgs = 0;
// Cleanup
CleanupStack::PopAndDestroy(clientConversation);
@@ -124,6 +130,10 @@
{
iSession->RemoveEntry(id);
}
+ else
+ {
+ iSendStateMsgs++;
+ }
}
// ----------------------------------------------------------------------------
@@ -163,10 +173,7 @@
break;
case EDeleteComplete:
- // Mark delete complete.
- iCache->MarkConversationAsDeleted(iConversationId, EFalse);
- // Done with the processing , cleanup the AO since this is the last
- //call to the delete handler.
+ iCache->MarkConversationAsDeleted(iConversationId, EFalse, iSendStateMsgs );
delete this;
break;
}
--- a/messagingapp/msgappfw/server/src/ccsconversationevent.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgappfw/server/src/ccsconversationevent.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -31,6 +31,8 @@
// Default constructor
// ----------------------------------------------------------------------------
CCsConversationEvent::CCsConversationEvent()
+ :iClientConversation(NULL),
+ iEvent(KConversationEventNone)
{
}
@@ -40,8 +42,6 @@
// ----------------------------------------------------------------------------
void CCsConversationEvent::ConstructL()
{
- iClientConversation = NULL;
- iEvent = KConversationEventNone;
}
// ----------------------------------------------------------------------------
@@ -164,6 +164,13 @@
}
// ----------------------------------------------------------------------------
+// CCsConversationEvent::IsPartialDeleteConversationListEventSet
+// ----------------------------------------------------------------------------
+TBool CCsConversationEvent::IsPartialDeleteConversationListEventSet() const
+ {
+ return iEvent & KConversationListEventPartialDelete;
+ }
+// ----------------------------------------------------------------------------
// CCsNotifyConversationEvent::IsNewConversationEventSet
// ----------------------------------------------------------------------------
TBool CCsConversationEvent::IsNewConversationEventSet() const
--- a/messagingapp/msgappfw/server/src/ccsconversationmarkreadhandler.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgappfw/server/src/ccsconversationmarkreadhandler.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -177,7 +177,7 @@
}
}
-TInt CCsConversationMarkReadHandler::RunError(TInt aError)
+TInt CCsConversationMarkReadHandler::RunError(TInt /*aError*/)
{
// RunL left so stop processing the AO and clean it.
delete this;
--- a/messagingapp/msgappfw/server/src/ccsserver.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgappfw/server/src/ccsserver.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -29,7 +29,7 @@
#include "ccsconversationevent.h"
#include "ccsconversationcache.h"
#include "ccscontactsmanager.h"
-
+#include "ccsbackuphandler.h"
//Costant Declaration
// ============================== MEMBER FUNCTIONS ============================
@@ -66,6 +66,33 @@
}
// ----------------------------------------------------------------------------
+// CCsServer::DeletePlugins
+// Unload the plugins for backup/restore
+// ----------------------------------------------------------------------------
+void CCsServer::DeletePlugins()
+{
+ if (iConversationPlugin) {
+ delete iConversationPlugin;
+ iConversationPlugin = NULL;
+ }
+}
+
+// ----------------------------------------------------------------------------
+// CCsServer::LoadPlugins
+// Load the plugins after a backup/restore
+// ----------------------------------------------------------------------------
+
+void CCsServer::LoadPlugins()
+{
+ iConversationPlugin = CCsPluginInterface::NewL();
+ // Create the plugin for the required entries
+ iConversationPlugin->InstantiatePluginL(this);
+ //fetch all initial set of messages
+ iConversationPlugin->GetConversationsL();
+ RefreshConversations();
+}
+
+// ----------------------------------------------------------------------------
// CCsServer::ConstructL
// Second phase constructor
// ----------------------------------------------------------------------------
@@ -88,7 +115,9 @@
iConversationCache = CCsConversationCache::NewL(iContactsManager, this);
iCsCachingStatus = KCachingStatusUnknown;
-
+
+ iBackUpHandler = CCsBackUpHandler::NewL(*this);
+
PRINT ( _L("End CCsServer::ConstructL") );
}
@@ -121,6 +150,11 @@
iContactsManager = NULL;
}
+ if(iBackUpHandler)
+ {
+ delete iBackUpHandler;
+ iBackUpHandler = NULL;
+ }
REComSession::FinalClose();
PRINT ( _L("End CCsServer::~CCsServer") );
--- a/messagingapp/msgappfw/server/src/ccssession.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgappfw/server/src/ccssession.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -58,7 +58,16 @@
// Construtor
// ----------------------------------------------------------------------------
CCsSession::CCsSession(CCsServer* aServer) :
- iServer(aServer)
+ iServer(aServer),
+ iDes(NULL),
+ iMonitoredConversation(NULL),
+ iBufferOverflow(EFalse),
+ iGetConversationBufferOverflow( EFalse),
+ iNotifyHandling(EFalse),
+ iConversationListChangeObserver(EFalse),
+ iConversationChangeObserver(EFalse),
+ iCachingChangeObserver(EFalse),
+ iReqCnt(1) //Let's start the event ID from 1
{
}
@@ -70,21 +79,10 @@
{
PRINT ( _L("Enter CCsSession::ConstructL") );
- iBufferOverflow = EFalse;
- iGetConversationBufferOverflow = EFalse;
- des = NULL;
-
- iNotifyHandling = EFalse;
- iConversationListChangeObserver = EFalse;
- iConversationChangeObserver = EFalse;
- iCachingChangeObserver = EFalse;
- iMonitoredConversation = NULL;
// initialize the event List
iEventList = new (ELeave) RPointerArray<CCsConversationEvent> ();
- iReqCnt = 1; //Let's start the event ID from 1
-
PRINT ( _L("End CCsSession::ConstructL") );
}
@@ -96,14 +94,14 @@
{
PRINT ( _L("Enter CCsSession::~CCsSession") );
- if (des)
- {
- delete des;
- des = NULL;
- }
-
- if (iEventList)
- {
+ if ( iDes )
+ {
+ delete iDes;
+ iDes = NULL;
+ }
+
+ if ( iEventList )
+ {
iEventList->ResetAndDestroy();
iEventList->Close();
delete iEventList;
@@ -133,6 +131,12 @@
// Check the error status returned
if (errStatus != KErrNone)
{
+ // Free memory.
+ if(iDes)
+ {
+ delete iDes;
+ iDes=NULL;
+ }
aMessage.Complete(errStatus);
}
}
@@ -228,6 +232,11 @@
PRINT ( _L("Received function EGetConversationIdFromAddress") )
GetConversationIdfromAddressL(aMessage);
break;
+
+ case EGetConversationFromConversationId:
+ PRINT ( _L("Received function EGetConversationFromConversationId") )
+ GetConversationFromConversationIdL(aMessage);
+ break;
case EGetConversationFromMessageId:
PRINT ( _L("Received function EGetConversationFromMessageId") )
@@ -249,6 +258,11 @@
// ----------------------------------------------------------------------------
void CCsSession::ServiceError(const RMessage2& aMessage, TInt aError)
{
+ if(iDes)
+ {
+ delete iDes;
+ iDes=NULL;
+ }
aMessage.Complete(aError);
}
@@ -267,14 +281,13 @@
{
RPointerArray<CCsClientConversation>* ClientConversationList =
new (ELeave) RPointerArray<CCsClientConversation> ();
-
+ CleanupResetAndDestroyPushL(ClientConversationList);
// get cache pointer
CCsConversationCache* cache = iServer->ConversationCacheInterface();
// Call cache function to get recent conversation entry list
// with dispaly name for all stored conversation entry ID
cache->GetConversationListL(ClientConversationList);
- CleanupStack::PushL(ClientConversationList);
//write all list data into stream
// create a new buffer for writing into stream
@@ -309,24 +322,19 @@
// --------------------------------------------------------------
// Create a heap descriptor from the buffer
- des = HBufC8::NewLC(buf->Size());
- CleanupStack::Pop(des);
- TPtr8 ptr(des->Des());
+ iDes = HBufC8::NewL(buf->Size());
+ TPtr8 ptr(iDes->Des());
buf->Read(0, ptr, buf->Size());
- // cleanup
+ // Cleanup
CleanupStack::PopAndDestroy(2, buf); // writestream, buf
- CleanupStack::Pop(ClientConversationList);
-
- // destroy objects inside list
- ClientConversationList->ResetAndDestroy();
- ClientConversationList->Close();
- delete ClientConversationList;
- ClientConversationList = NULL;
- }
+
+ // Cleanup ClientConversationList
+ CleanupStack::PopAndDestroy(ClientConversationList);
+ }
TInt rcevdBufferSize = aMessage.GetDesMaxLength(1);
- TInt reqdBufferSize = des->Size();
+ TInt reqdBufferSize = iDes->Size();
PRINT1 ( _L("Received buffer size = %d"), rcevdBufferSize );
PRINT1 ( _L("Required buffer size = %d"), reqdBufferSize );
@@ -349,13 +357,13 @@
PRINT ( _L("Adequate buffer received") );
PRINT ( _L("Packing the results in response") )
- aMessage.Write(1, *des);
+ aMessage.Write(1, *iDes);
aMessage.Complete(EGetConversationListOperationComplete);
iBufferOverflow = EFalse;
- delete des;
- des = NULL;
- }
-
+ delete iDes;
+ iDes = NULL;
+ }
+
PRINT_TIMESTAMP ("End CCsSession::GetConversationListL");
PRINT ( _L("End CCsSession::GetConversationListL") );
}
@@ -375,7 +383,7 @@
{
RPointerArray<CCsClientConversation>* ClientConversationList =
new (ELeave) RPointerArray<CCsClientConversation> ();
-
+ CleanupResetAndDestroyPushL(ClientConversationList);
// get cache pointer
CCsConversationCache* cache = iServer->ConversationCacheInterface();
@@ -383,8 +391,6 @@
// with dispaly name for all stored conversation entry ID
cache->GetConversationUnreadListL(ClientConversationList);
- CleanupStack::PushL(ClientConversationList);
-
//write all list data into stream
// create a new buffer for writing into stream
CBufFlat* buf = CBufFlat::NewL(KBigBuffer);
@@ -417,24 +423,18 @@
// --------------------------------------------------------------
// Create a heap descriptor from the buffer
- des = HBufC8::NewLC(buf->Size());
- CleanupStack::Pop(des);
- TPtr8 ptr(des->Des());
+ iDes = HBufC8::NewL(buf->Size());
+ TPtr8 ptr(iDes->Des());
buf->Read(0, ptr, buf->Size());
// cleanup
CleanupStack::PopAndDestroy(2, buf); // writestream, buf
- CleanupStack::Pop(ClientConversationList);
+ CleanupStack::PopAndDestroy(ClientConversationList);
- // destroy objects inside list
- ClientConversationList->ResetAndDestroy();
- ClientConversationList->Close();
- delete ClientConversationList;
- ClientConversationList = NULL;
}
TInt rcevdBufferSize = aMessage.GetDesMaxLength(1);
- TInt reqdBufferSize = des->Size();
+ TInt reqdBufferSize = iDes->Size();
PRINT1 ( _L("Received buffer size = %d"), rcevdBufferSize );
PRINT1 ( _L("Required buffer size = %d"), reqdBufferSize );
@@ -458,11 +458,11 @@
TPckgC<TInt> overflowPackage(EFalse);
aMessage.WriteL(0, overflowPackage);
- aMessage.Write(1, *des);
+ aMessage.Write(1, *iDes);
aMessage.Complete(KErrNone);
iBufferOverflow = EFalse;
- delete des;
- des = NULL;
+ delete iDes;
+ iDes = NULL;
}
PRINT_TIMESTAMP ("End CCsSession::GetConversationUnreadListL");
@@ -502,9 +502,9 @@
CleanupStack::PopAndDestroy(2, buffer);//stream, buffer
CleanupStack::PushL(ClientConversation);
- RPointerArray<CCsConversationEntry>* conversationEntryList =
- new (ELeave) RPointerArray<CCsConversationEntry> ();
- CleanupStack::PushL(conversationEntryList);
+ RPointerArray<CCsConversationEntry>* conversationEntryList=
+ new (ELeave) RPointerArray<CCsConversationEntry>(10);
+ CleanupResetAndDestroyPushL(conversationEntryList);
// get conversationlist for given ClientConversation
cache->GetConversationsL(ClientConversation, conversationEntryList);
@@ -535,24 +535,19 @@
// --------------------------------------------------------------
// Create a heap descriptor from the buffer
- des = HBufC8::NewLC(buf->Size());
- CleanupStack::Pop(des);
- TPtr8 ptr(des->Des());
+ iDes = HBufC8::NewL(buf->Size());
+ TPtr8 ptr(iDes->Des());
buf->Read(0, ptr, buf->Size());
CleanupStack::PopAndDestroy(2, buf); // writestream, buf
- CleanupStack::Pop(conversationEntryList);
-
+
// Cleanup
- conversationEntryList->ResetAndDestroy();
- conversationEntryList->Close();
- delete conversationEntryList;
- conversationEntryList = NULL;
+ CleanupStack::PopAndDestroy(conversationEntryList);
CleanupStack::PopAndDestroy(ClientConversation);
}
TInt rcevdBufferSize = aMessage.GetDesMaxLength(1);
- TInt reqdBufferSize = des->Size();
+ TInt reqdBufferSize = iDes->Size();
PRINT1 ( _L("Received buffer size = %d"), rcevdBufferSize );
PRINT1 ( _L("Required buffer size = %d"), reqdBufferSize );
@@ -574,12 +569,12 @@
PRINT ( _L("Adequate buffer received") );
PRINT ( _L("Packing the results in response") )
- aMessage.Write(1, *des);
+ aMessage.Write(1, *iDes);
aMessage.Complete(EGetConversationOperationComplete);
iGetConversationBufferOverflow = EFalse;
- delete des;
- des = NULL;
- }
+ delete iDes;
+ iDes = NULL;
+ }
PRINT ( _L("End CCsSession::GetConversationsL") );
}
@@ -701,6 +696,57 @@
}
// ----------------------------------------------------------------------------
+// CCsSession::HandlePartialDeleteConversationListEventL
+// Notify client about partial delete conversation event
+// ----------------------------------------------------------------------------
+
+void CCsSession::HandlePartialDeleteConversationListEvent(
+ CCsClientConversation* aClientConversation)
+{
+ PRINT ( _L("Enter CCsSession::HandlePartialDeleteConversationListEvent") );
+
+ if (!iConversationListChangeObserver)
+ return;
+
+ if (! (iNotifyHandling))
+ {
+ //append in notify list
+ CCsConversationEvent* conversationEvent = CCsConversationEvent::NewL();
+ conversationEvent->SetClientConversationL(*aClientConversation);
+ CleanupStack::PushL(conversationEvent);
+ conversationEvent->SetEvent(KConversationListEventPartialDelete);
+ iEventList->AppendL(conversationEvent);
+ CleanupStack::Pop(conversationEvent);
+ }
+ else
+ {
+ // create a new buffer for writing into stream
+ CBufFlat* buf = CBufFlat::NewL(KBigBuffer);
+ CleanupStack::PushL(buf);
+
+ RBufWriteStream writeStream(*buf);
+ writeStream.PushL();
+
+ //externalize ClientConversation
+ aClientConversation->ExternalizeL(writeStream);
+
+ // Results are already packed in the stream
+ writeStream.CommitL();
+
+ // --------------------------------------------------------------
+ // Create a heap descriptor from the buffer
+ HBufC8* notifyDes = HBufC8::NewLC(buf->Size());
+ TPtr8 ptr(notifyDes->Des());
+ buf->Read(0, ptr, buf->Size());
+
+ iAsyncReqRMessage.Write(1, *notifyDes);
+ iAsyncReqRMessage.Complete(EPartialDeleteConversationListEvent);
+ CleanupStack::PopAndDestroy(3, buf); // notifyDes, writestream, buf
+ iNotifyHandling = EFalse;
+ }
+}
+
+// ----------------------------------------------------------------------------
// CCsSession::HandleModifyConversationListEventL
// Notify client about update conversation event
// ----------------------------------------------------------------------------
@@ -865,8 +911,7 @@
// --------------------------------------------------------------
// Create a heap descriptor from the buffer
- HBufC8* des = HBufC8::NewLC(buf->Size());
- CleanupStack::Pop(des);
+ HBufC8* des = HBufC8::NewL(buf->Size());
TPtr8 ptr(des->Des());
buf->Read(0, ptr, buf->Size());
@@ -904,8 +949,7 @@
// --------------------------------------------------------------
// Create a heap descriptor from the buffer
- HBufC8* des = HBufC8::NewLC(buf->Size());
- CleanupStack::Pop(des);
+ HBufC8* des = HBufC8::NewL(buf->Size());
TPtr8 ptr(des->Des());
buf->Read(0, ptr, buf->Size());
@@ -1043,50 +1087,58 @@
if (!iConversationChangeObserver)
return;
- if (aClientConversation->GetConversationEntryId()
- != iMonitoredConversation->GetConversationEntryId())
- return;
-
- if (! (iNotifyHandling))
+ //this is check to send notif to clients for a new message
+ //1. if the client is subscribed with contact id ==> then send
+ //2. if the client is subscribed with conv id ---> then send
+ // else dont send
+
+ if ((aClientConversation->GetContactId() ==
+ iMonitoredConversation->GetContactId() &&
+ aClientConversation->GetContactId() != -1)
+ ||(aClientConversation->GetConversationEntryId() ==
+ iMonitoredConversation->GetConversationEntryId()))
{
- //append in notify list
- CCsConversationEvent* conversationEvent = CCsConversationEvent::NewL();
- CleanupStack::PushL(conversationEvent);
- conversationEvent->SetClientConversationL(*aClientConversation);
- conversationEvent->SetEvent(KConversationEventNew);
- iEventList->AppendL(conversationEvent);
- CleanupStack::Pop(conversationEvent);
- }
- else
- {
- // create a new buffer for writing into stream
- CBufFlat* buf = CBufFlat::NewL(KBigBuffer);
- CleanupStack::PushL(buf);
- RBufWriteStream writeStream(*buf);
- writeStream.PushL();
-
- //externalize ClientConversation
- aClientConversation->ExternalizeL(writeStream);
-
- // Results are already packed in the stream
- writeStream.CommitL();
- // --------------------------------------------------------------
-
- // Create a heap descriptor from the buffer
- HBufC8* des = HBufC8::NewLC(buf->Size());
- CleanupStack::Pop(des);
- TPtr8 ptr(des->Des());
- buf->Read(0, ptr, buf->Size());
-
- CleanupStack::PopAndDestroy(2, buf); // writestream, buf
-
- iAsyncReqRMessage.Write(1, *des);
- iAsyncReqRMessage.Complete(EAddConversationEvent);
- delete des;
- iNotifyHandling = EFalse;
+ if (! (iNotifyHandling))
+ {
+ //append in notify list
+ CCsConversationEvent* conversationEvent = CCsConversationEvent::NewL();
+ CleanupStack::PushL(conversationEvent);
+ conversationEvent->SetClientConversationL(*aClientConversation);
+ conversationEvent->SetEvent(KConversationEventNew);
+ iEventList->AppendL(conversationEvent);
+ CleanupStack::Pop(conversationEvent);
+ }
+ else
+ {
+ // create a new buffer for writing into stream
+ CBufFlat* buf = CBufFlat::NewL(KBigBuffer);
+ CleanupStack::PushL(buf);
+
+ RBufWriteStream writeStream(*buf);
+ writeStream.PushL();
+
+ //externalize ClientConversation
+ aClientConversation->ExternalizeL(writeStream);
+
+ // Results are already packed in the stream
+ writeStream.CommitL();
+ // --------------------------------------------------------------
+
+ // Create a heap descriptor from the buffer
+ HBufC8* des = HBufC8::NewLC(buf->Size());
+ CleanupStack::Pop(des);
+ TPtr8 ptr(des->Des());
+ buf->Read(0, ptr, buf->Size());
+
+ CleanupStack::PopAndDestroy(2, buf); // writestream, buf
+
+ iAsyncReqRMessage.Write(1, *des);
+ iAsyncReqRMessage.Complete(EAddConversationEvent);
+ delete des;
+ iNotifyHandling = EFalse;
+ }
}
-
PRINT ( _L("End CCsSession::HandleNewConversationEventL") );
}
@@ -1103,8 +1155,11 @@
if (!iConversationChangeObserver)
return;
- if (aClientConversation->GetConversationEntryId()
- != iMonitoredConversation->GetConversationEntryId())
+ if ((aClientConversation->GetContactId()
+ != iMonitoredConversation->GetContactId()) &&
+ (aClientConversation->GetConversationEntryId()
+ != iMonitoredConversation->GetConversationEntryId())
+ )
return;
if (! (iNotifyHandling))
@@ -1134,8 +1189,8 @@
// --------------------------------------------------------------
// Create a heap descriptor from the buffer
- HBufC8* des = HBufC8::NewLC(buf->Size());
- CleanupStack::Pop(des);
+ HBufC8* des = HBufC8::NewL(buf->Size());
+
TPtr8 ptr(des->Des());
buf->Read(0, ptr, buf->Size());
@@ -1163,50 +1218,57 @@
if (!iConversationChangeObserver)
return;
- if (aClientConversation->GetConversationEntryId()
- != iMonitoredConversation->GetConversationEntryId())
- return;
-
- if (! (iNotifyHandling))
- {
- //append in notify list
- CCsConversationEvent* conversationEvent = CCsConversationEvent::NewL();
- CleanupStack::PushL(conversationEvent);
- conversationEvent->SetClientConversationL(*aClientConversation);
- conversationEvent->SetEvent(KConversationEventUpdate);
- iEventList->AppendL(conversationEvent);
- CleanupStack::Pop(conversationEvent);
- }
- else
+ //this is check to send notif to clients for a new message
+ //1. if the client is subscribed with contact id ==> then send
+ //2. if the client is subscribed with conv id ---> then send
+ // else dont send
+
+ if ((aClientConversation->GetContactId() ==
+ iMonitoredConversation->GetContactId() &&
+ aClientConversation->GetContactId() != -1)
+ ||(aClientConversation->GetConversationEntryId() ==
+ iMonitoredConversation->GetConversationEntryId()))
{
- // create a new buffer for writing into stream
- CBufFlat* buf = CBufFlat::NewL(KBigBuffer);
- CleanupStack::PushL(buf);
-
- RBufWriteStream writeStream(*buf);
- writeStream.PushL();
-
- //externalize ClientConversation
- aClientConversation->ExternalizeL(writeStream);
-
- // Results are already packed in the stream
- writeStream.CommitL();
- // --------------------------------------------------------------
-
- // Create a heap descriptor from the buffer
- HBufC8* des = HBufC8::NewLC(buf->Size());
- CleanupStack::Pop(des);
- TPtr8 ptr(des->Des());
- buf->Read(0, ptr, buf->Size());
-
- CleanupStack::PopAndDestroy(2, buf); // writestream, buf
-
- iAsyncReqRMessage.Write(1, *des);
- iAsyncReqRMessage.Complete(EModifyConversationEvent);
- delete des;
- iNotifyHandling = EFalse;
+
+ if (! (iNotifyHandling))
+ {
+ //append in notify list
+ CCsConversationEvent* conversationEvent = CCsConversationEvent::NewL();
+ CleanupStack::PushL(conversationEvent);
+ conversationEvent->SetClientConversationL(*aClientConversation);
+ conversationEvent->SetEvent(KConversationEventUpdate);
+ iEventList->AppendL(conversationEvent);
+ CleanupStack::Pop(conversationEvent);
+ }
+ else
+ {
+ // create a new buffer for writing into stream
+ CBufFlat* buf = CBufFlat::NewL(KBigBuffer);
+ CleanupStack::PushL(buf);
+
+ RBufWriteStream writeStream(*buf);
+ writeStream.PushL();
+
+ //externalize ClientConversation
+ aClientConversation->ExternalizeL(writeStream);
+
+ // Results are already packed in the stream
+ writeStream.CommitL();
+ // --------------------------------------------------------------
+
+ // Create a heap descriptor from the buffer
+ HBufC8* des = HBufC8::NewL(buf->Size());
+ TPtr8 ptr(des->Des());
+ buf->Read(0, ptr, buf->Size());
+
+ CleanupStack::PopAndDestroy(2, buf); // writestream, buf
+
+ iAsyncReqRMessage.Write(1, *des);
+ iAsyncReqRMessage.Complete(EModifyConversationEvent);
+ delete des;
+ iNotifyHandling = EFalse;
+ }
}
-
PRINT ( _L("End CCsSession::HandleModifyConversationEventL") );
}
@@ -1228,6 +1290,10 @@
{
iAsyncReqRMessage.Complete(EModifyConversationListEvent);
}
+ else if(aConversationEvent->IsPartialDeleteConversationListEventSet())
+ {
+ iAsyncReqRMessage.Complete(EPartialDeleteConversationListEvent);
+ }
else if (aConversationEvent->IsNewConversationEventSet())
{
iAsyncReqRMessage.Complete(EAddConversationEvent);
@@ -1269,6 +1335,10 @@
{
HandleDeleteConversationListEventL(aConversation);
}
+ else if(aEvent & KConversationListEventPartialDelete)
+ {
+ HandlePartialDeleteConversationListEvent(aConversation);
+ }
else if (aEvent & KConversationEventNew)
{
HandleNewConversationEventL(aConversation);
@@ -1383,8 +1453,7 @@
writeStream.CommitL();
// Create a heap descriptor from the buffer
- HBufC8* des = HBufC8::NewLC(buf->Size());
- CleanupStack::Pop(des);
+ HBufC8* des = HBufC8::NewL(buf->Size());
TPtr8 ptr(des->Des());
buf->Read(0, ptr, buf->Size());
@@ -1395,6 +1464,57 @@
delete des;
}
+void CCsSession::GetConversationFromConversationIdL(const RMessage2& aMessage)
+{
+ // create a new buffer for writing into stream
+ CBufFlat* buf = CBufFlat::NewL(KBigBuffer);
+ CleanupStack::PushL(buf);
+
+ RBufWriteStream writeStream(*buf);
+ writeStream.PushL();
+
+ // Get the conversation id
+ TInt conversationId = aMessage.Int0();
+ CCsConversationCache* cache = iServer->ConversationCacheInterface();
+ CCsClientConversation* clientConv = cache->GetConversationFromConversationIdL(conversationId);
+
+ // if no conversation exists for given message-id,
+ // create a dummy conversation and complete response
+ if(clientConv == NULL)
+ {
+ //create dummy conversation
+ clientConv = CCsClientConversation::NewL();
+ CleanupStack::PushL(clientConv);
+ clientConv->SetConversationEntryId(-1);
+ CCsConversationEntry* entry = CCsConversationEntry::NewL();
+ CleanupStack::PushL(entry);
+ entry->SetEntryId(-1);
+ clientConv->SetConversationEntryL(entry); // clone
+ CleanupStack::PopAndDestroy(entry);
+ }
+ else
+ {
+ CleanupStack::PushL(clientConv);
+ }
+
+ // Externalize
+ clientConv->ExternalizeL(writeStream);
+
+ // Results are already packed in the stream
+ writeStream.CommitL();
+
+ // Create a heap descriptor from the buffer
+ HBufC8* des = HBufC8::NewL(buf->Size());
+ TPtr8 ptr(des->Des());
+ buf->Read(0, ptr, buf->Size());
+
+ CleanupStack::PopAndDestroy(3, buf); // clientConv, writestream, buf
+
+ aMessage.Write(1, *des);
+ aMessage.Complete(EGetConversationFromConversationIdComplete);
+ delete des;
+}
+
// ----------------------------------------------------------------------------
// GetConversationFromMessageIdL
// ----------------------------------------------------------------------------
@@ -1438,8 +1558,7 @@
writeStream.CommitL();
// Create a heap descriptor from the buffer
- HBufC8* des = HBufC8::NewLC(buf->Size());
- CleanupStack::Pop(des);
+ HBufC8* des = HBufC8::NewL(buf->Size());
TPtr8 ptr(des->Des());
buf->Read(0, ptr, buf->Size());
@@ -1481,8 +1600,7 @@
writeStream.CommitL();
// Create a heap descriptor from the buffer
- HBufC8* des = HBufC8::NewLC(buf->Size());
- CleanupStack::Pop(des);
+ HBufC8* des = HBufC8::NewL(buf->Size());
TPtr8 ptr(des->Des());
buf->Read(0, ptr, buf->Size());
--- a/messagingapp/msgappfw/sis/conversation_server.pkg Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgappfw/sis/conversation_server.pkg Thu Jul 22 16:32:06 2010 +0100
@@ -20,7 +20,6 @@
; Conversation Server
"\epoc32\release\armv5\urel\csserver.exe" - "!:\sys\bin\csserver.exe"
-"\epoc32\data\z\resource\cscontacts.rsc" - "!:\resource\cscontacts.rsc"
"\epoc32\release\armv5\urel\csserverclientapi.dll" - "!:\sys\bin\csserverclientapi.dll"
"\epoc32\release\armv5\urel\csutils.dll" - "!:\sys\bin\csutils.dll"
--- a/messagingapp/msgappfw/sis/messaging_armv5_udeb.pkg Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgappfw/sis/messaging_armv5_udeb.pkg Thu Jul 22 16:32:06 2010 +0100
@@ -49,6 +49,5 @@
; Conversation Server
"\epoc32\release\armv5\udeb\csserver.exe" - "!:\sys\bin\csserver.exe"
-"\epoc32\data\z\resource\cscontacts.rsc" - "!:\resource\cscontacts.rsc"
"\epoc32\release\armv5\udeb\csserverclientapi.dll" - "!:\sys\bin\csserverclientapi.dll"
"\epoc32\release\armv5\udeb\csutils.dll" - "!:\sys\bin\csutils.dll"
--- a/messagingapp/msgappfw/sis/messaging_armv5_urel.pkg Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgappfw/sis/messaging_armv5_urel.pkg Thu Jul 22 16:32:06 2010 +0100
@@ -18,7 +18,6 @@
; Conversation Server
"\epoc32\release\armv5\urel\csserver.exe" - "!:\sys\bin\csserver.exe"
-"\epoc32\data\z\resource\cscontacts.rsc" - "!:\resource\cscontacts.rsc"
"\epoc32\release\armv5\urel\csserverclientapi.dll" - "!:\sys\bin\csserverclientapi.dll"
"\epoc32\release\armv5\urel\csutils.dll" - "!:\sys\bin\csutils.dll"
--- a/messagingapp/msgappfw/utils/src/ccsconversationentry.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgappfw/utils/src/ccsconversationentry.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -135,12 +135,9 @@
// Sets the Conversation contact of this object
// ----------------------------------------------------------------------------
EXPORT_C void CCsConversationEntry::SetContactL(const TDesC& aContact)
- {
- if((&aContact))
- {
- iContact = aContact.AllocL();
- }
- }
+{
+ iContact = aContact.AllocL();
+}
// ----------------------------------------------------------------------------
// CCsConversationEntry::ConversationDir
@@ -211,17 +208,15 @@
// Sets the Conversation description of this object
// ----------------------------------------------------------------------------
EXPORT_C void CCsConversationEntry::SetDescriptionL(const TDesC& aDescription)
- {
- if((&aDescription))
- {
- TInt descrLength = aDescription.Length();
- if ( descrLength > KMaxDescrSize )
- descrLength = KMaxDescrSize;
-
- iDescription = HBufC::NewL(descrLength);
- iDescription->Des().Copy(aDescription.Left(descrLength));
- }
- }
+{
+
+ TInt descrLength = aDescription.Length();
+ if (descrLength > KMaxDescrSize)
+ descrLength = KMaxDescrSize;
+ iDescription = HBufC::NewL(descrLength);
+ iDescription->Des().Copy(aDescription.Left(descrLength));
+
+}
// ----------------------------------------------------------------------------
// CCsConversationEntry::ChangeAttributes
@@ -255,13 +250,16 @@
CCsConversationEntry* cloneObject = CCsConversationEntry::NewL();
CleanupStack::PushL(cloneObject);
- cloneObject->SetContactL(*iContact);
+ if (iContact)
+ cloneObject->SetContactL(*iContact);
+
cloneObject->SetConversationDir(iConversationDir);
cloneObject->SetType(iConversationType);
cloneObject->SetEntryId(iEntryID);
cloneObject->SetSendState(iConversationStatus);
cloneObject->ChangeAttributes(iConversationAttrib, ECsAttributeNone);
- cloneObject->SetDescriptionL(*iDescription);
+ if(iDescription)
+ cloneObject->SetDescriptionL(*iDescription);
cloneObject->SetTimeStampL(iTimeStamp);
CleanupStack::Pop(cloneObject);
--- a/messagingapp/msgappfw/utils/src/ccsdebug.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgappfw/utils/src/ccsdebug.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -69,19 +69,14 @@
dbgArr = static_cast<CCsDebugArr*>( Dll::Tls() );
}
- if ( dbgArr->IsEmpty() )
- {
- delete dbgArr;
- Dll::SetTls( NULL );
- }
- else
+ if ( dbgArr && !(dbgArr->IsEmpty()) )
{
CCsDebug* dbg = dbgArr->Pop();
dbg->UnMark(str);
delete dbg;
}
- if ( !dbgArr && dbgArr->IsEmpty() )
+ if ( dbgArr && dbgArr->IsEmpty() )
{
delete dbgArr;
Dll::SetTls( NULL );
--- a/messagingapp/msgnotifications/msgerrornotifier/inc/msgerrornotifiersvc.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgnotifications/msgerrornotifier/inc/msgerrornotifiersvc.h Thu Jul 22 16:32:06 2010 +0100
@@ -21,6 +21,9 @@
#include <xqserviceprovider.h>
#include <qvariant.h>
+//Forward Declaration
+class XQSystemToneService;
+
class MsgErrorNotifierSvc: public XQServiceProvider
{
@@ -46,6 +49,12 @@
*/
void displayErrorNote(QVariantList displayParams);
+private:
+
+ /**
+ * Object to handle audio alerts
+ */
+ XQSystemToneService* mSts;
};
#endif /* MSGERRORNOTIFIERSVC_H_ */
--- a/messagingapp/msgnotifications/msgerrornotifier/msgerrornotifier.pro Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgnotifications/msgerrornotifier/msgerrornotifier.pro Thu Jul 22 16:32:06 2010 +0100
@@ -25,7 +25,8 @@
src/msgerrornotifiersvc.cpp
LIBS += -lxqservice \
- -lxqserviceutil
+ -lxqserviceutil \
+ -lxqsystemtoneservice
SERVICE.FILE = service_conf.xml
SERVICE.OPTIONS = embeddable
@@ -33,6 +34,7 @@
symbian:TARGET.UID3 = 0x2001FE74
+TRANSLATIONS = messaging.ts
BLD_INF_RULES.prj_exports += "$${LITERAL_HASH}include <platform_paths.hrh>" \
".\rom\msgerrornotifier.iby CORE_APP_LAYER_IBY_EXPORT_PATH(msgerrornotifier.iby)"
--- a/messagingapp/msgnotifications/msgerrornotifier/src/main.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgnotifications/msgerrornotifier/src/main.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -14,14 +14,30 @@
* Description:
*
*/
+#include <QTranslator>
+#include <QLocale>
+#include <QFile>
+#include <hbapplication.h>
#include "msgerrornotifier.h"
-#include <hbapplication.h>
+#define LOC_TITLE hbTrId("")
int main(int argc, char *argv[])
{
- HbApplication a(argc, argv);
+ HbApplication app(argc, argv);
+ QString locale = QLocale::system().name();
+ QString path = "z:/resource/qt/translations/";
+ QTranslator translator;
+ QTranslator translator_comm;
+ translator.load(path + QString("messaging_") + locale);
+ translator_comm.load(path + QString("common_") + locale);
+ //translator.load( "messaging_en_GB", ":/translations" );
+ app.installTranslator(&translator);
+ app.installTranslator(&translator_comm);
+
+ app.setApplicationName(LOC_TITLE);
+
MsgErrorNotifier w;
- return a.exec();
+ return app.exec();
}
--- a/messagingapp/msgnotifications/msgerrornotifier/src/msgerrornotifiersvc.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgnotifications/msgerrornotifier/src/msgerrornotifiersvc.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -26,17 +26,19 @@
#include <xqappmgr.h>
#include <ccsdefs.h>
#include <qaction.h>
+#include <xqsystemtoneservice.h>
#define LOC_VIEW hbTrId("txt_messaging_button_view")
#define LOC_CANCEL hbTrId("txt_common_button_cancel")
#define LOC_SEND_FAILURE hbTrId("txt_messaging_list_message_sending_failed")
-
+#define LOC_MMS_RETRIEVAL_FAILED hbTrId("txt_messaging_dialog_mms_retrieval_failed")
//---------------------------------------------------------
// Constructor
//---------------------------------------------------------
MsgErrorNotifierSvc::MsgErrorNotifierSvc(QObject* parent) :
XQServiceProvider(QLatin1String("messaging.com.nokia.symbian.MsgErrorNotifier"), parent)
{
+ mSts = new XQSystemToneService();
publishAll();
}
@@ -45,7 +47,11 @@
//---------------------------------------------------------
MsgErrorNotifierSvc::~MsgErrorNotifierSvc()
{
-
+ if(mSts)
+ {
+ delete mSts;
+ mSts = NULL;
+ }
}
//---------------------------------------------------------
@@ -67,7 +73,7 @@
int msgType = third.toInt();
if (msgType == ECsMmsNotification)
{
- errorNote.append("Message Retrieval Failed!");//TODO: use logical str name
+ errorNote.append(LOC_MMS_RETRIEVAL_FAILED);
}
else
{
@@ -84,15 +90,18 @@
messageBox.setAction(actionView,HbDeviceMessageBox::AcceptButtonRole);
QAction* actionQuit = new QAction(LOC_CANCEL,this);
- actionQuit->setMenuRole(QAction::QuitRole);
- messageBox.setAction(actionView,HbDeviceMessageBox::RejectButtonRole);
+ messageBox.setAction(actionQuit,HbDeviceMessageBox::RejectButtonRole);
setCurrentRequestAsync();
+ //Play audio alert when error notification is shown
+ mSts->playTone(XQSystemToneService::MessageSendFailureTone);
+
+ // launch Messagebox
const QAction* result = messageBox.exec();
-
- // TODO: use XQAiwrequest
- if (result->menuRole() != QAction::QuitRole) {
+
+ // if accepted launch view else quit
+ if (messageBox.isAcceptAction(result)) {
QList<QVariant> args;
QString serviceName("com.nokia.services.hbserviceprovider");
QString operation("open(qint64)");
--- a/messagingapp/msgnotifications/msgindicatorplugin/msgindicatorplugin.pro Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgnotifications/msgindicatorplugin/msgindicatorplugin.pro Thu Jul 22 16:32:06 2010 +0100
@@ -24,7 +24,7 @@
DEPENDPATH += .
INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
INCLUDEPATH += ../../../inc
-INCLUDEPATH += ../../msgutils/s60qconversions/inc
+
HEADERS += inc/msgindicatorplugin.h \
@@ -53,5 +53,5 @@
LIBS += -lxqservice \
-lcsserverclientapi \
- -ls60qconversions \
- -lcsutils
+ -lcsutils \
+ -lxqutils
--- a/messagingapp/msgnotifications/msgindicatorplugin/src/msgindicator.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgnotifications/msgindicatorplugin/src/msgindicator.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -41,7 +41,8 @@
#define LOC_FAILED_MULTIPLE_MESSAGES hbTrId("Failed Messages")
#define LOC_OUTGOING_SINGLE_MESSAGE hbTrId("Outgoing Message")
#define LOC_OUTGOING_MULTIPLE_MESSAGES hbTrId("Outgoing Messages")
-
+#define STATUS_MONO_NEW_MESSAGE QString("qtg_status_new_message")
+#define LOC_BUSINESSCARD hbTrId("Business card")
/**
* The number of indicators.
*/
@@ -170,7 +171,7 @@
case MonoDecorationNameRole:
{
if (NewIndicatorPlugin == mIndicatorType) {
- return IndicatorInfo[mIndicatorType].icon;
+ return STATUS_MONO_NEW_MESSAGE;
}
else {
// Don't show status-bar icons for indications other
@@ -319,6 +320,9 @@
QFileInfo fname(secondaryText);
secondaryText = fname.fileName();
}
+ else if(ECsBioMsg_VCard == info.mMessageType) {
+ secondaryText = LOC_BUSINESSCARD;
+ }
}
else {
info.mConversationId = -100;
--- a/messagingapp/msgnotifications/msgindicatorplugin/src/msgindicator_p.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgnotifications/msgindicatorplugin/src/msgindicator_p.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -22,7 +22,7 @@
#include "msgindicator_p.h"
#include "msgindicator.h"
#include "debugtraces.h"
-#include "s60qconversions.h"
+#include <xqconversions.h>
#define LOC_RECEIVED_FILES hbTrId("Received Files")
@@ -98,7 +98,7 @@
// Only take the description from convEntry when there is one entry.
// description will contain the name list when there are more entries.
QString descText;
- descText = S60QConversions::s60DescToQString(*description);
+ descText = XQConversions::s60DescToQString(*description);
descText.replace(QChar::ParagraphSeparator, QChar::LineSeparator);
descText.replace('\r', QChar::LineSeparator);
indicatorData.mDescription = descText;
@@ -116,10 +116,10 @@
HBufC* number = convEntry->Contact();
if (displayName) {
- nameList.append(S60QConversions::s60DescToQString(*displayName));
+ nameList.append(XQConversions::s60DescToQString(*displayName));
}
else if (number) {
- nameList.append(S60QConversions::s60DescToQString(*number));
+ nameList.append(XQConversions::s60DescToQString(*number));
}
}
}
--- a/messagingapp/msgnotifications/msgnotificationdialogplugin/msgnotificationdialogplugin.pro Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgnotifications/msgnotificationdialogplugin/msgnotificationdialogplugin.pro Thu Jul 22 16:32:06 2010 +0100
@@ -32,8 +32,6 @@
SOURCES += src/msgnotificationdialogplugin.cpp
SOURCES += src/msgnotificationdialogwidget.cpp
-RESOURCES += msgnotificationdialogplugin.qrc
-
symbian: {
TARGET.EPOCALLOWDLLDATA = 1
TARGET.CAPABILITY = CAP_GENERAL_DLL
--- a/messagingapp/msgnotifications/msgnotificationdialogplugin/msgnotificationdialogplugin.qrc Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
-<RCC>
- <qresource prefix="/" >
- <file alias="sms.svg" >resources/sms.svg</file>
- <file alias="mms.svg" >resources/mms.svg</file>
- <file alias="ringingtone.svg" >resources/ringingtone.svg</file>
- </qresource>
-</RCC>
--- a/messagingapp/msgnotifications/msgnotificationdialogplugin/resources/mms.svg Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,100 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
-<svg width="60" height="80" viewBox="0 0 60 80">
-<linearGradient id="_16" gradientUnits="userSpaceOnUse" x1="29.07" y1="41.3" x2="44.55" y2="71.79">
-<stop stop-color="#A2C2DD" offset="0.1"/>
-<stop stop-color="#6C83BB" offset="0.71"/>
-<stop stop-color="#003D6D" offset="0.99"/>
-</linearGradient>
-<path fill="url(#_16)" d="M49.016,37.091c0.002-0.243,0.18-14.048,0.18-14.048s-13.2-2.759-13.444-2.81 c-0.146-0.191-3.754-4.769-3.754-4.769s-3.308,3.02-3.552,3.242c-0.341-0.071-12.516-2.615-12.516-2.615L13,16.895 c0,0,0.193,4.464,0.236,5.455c-0.487-0.268-1.092-0.601-1.092-0.601c-2.808-1.516-5.711-3.083-6.703-6.004l-0.094-0.277 L3.418,15.76L2.31,16.677c0,0,7.204,21.364,7.46,22.125c-0.023,0.003-0.091,0.011-0.091,0.011 c-2.993,0.54-5.909,3.611-6.502,6.846c-0.072,0.392-0.108,0.774-0.108,1.143c0,1.214,0.385,2.272,1.114,3.005 c0.866,0.87,2.125,1.209,3.544,0.955c1.581-0.285,3.172-1.313,4.425-2.76c0.089,1.518,0.754,12.864,0.754,12.864l34.567,9.214 l2.23-2.29l1.248-28.238C50.952,39.552,49.156,37.27,49.016,37.091z M12.067,34.596c0.014,0.248,0.062,1.048,0.062,1.048 l-0.681,0.132L8.188,26.1l0.466-0.02c2.116-0.089,3.901,0.234,5.307,0.96l0.18,0.093l0.232,5.357 C14.373,32.492,12.286,34.396,12.067,34.596z"/>
-<linearGradient id="_17" gradientUnits="userSpaceOnUse" x1="31.15" y1="21.14" x2="31.15" y2="52.27">
-<stop stop-color="#A2C2DD" offset="0.1"/>
-<stop stop-color="#6C83BB" offset="0.71"/>
-<stop stop-color="#003D6D" offset="0.99"/>
-</linearGradient>
-<polygon fill="url(#_17)" points="50.598,39.666 48.663,37.21 48.841,23.327 46.32,24.611 46.262,34.159 31.949,15.976 11.708,34.45 29.276,59.111 "/>
-<linearGradient id="_18" gradientUnits="userSpaceOnUse" x1="9.88" y1="14.78" x2="50.13" y2="25.08">
-<stop stop-color="#FFFFFF" offset="0.15"/>
-<stop stop-color="#A2C2DD" offset="1"/>
-</linearGradient>
-<polygon fill="url(#_18)" points="46.32,24.611 48.841,23.327 15.934,16.451 13.534,17.135 "/>
-<linearGradient id="_19" gradientUnits="userSpaceOnUse" x1="44.2" y1="53.45" x2="25.56" y2="27.32">
-<stop stop-color="#FFFFFF" offset="0.05"/>
-<stop stop-color="#A2C2DD" offset="1"/>
-</linearGradient>
-<polygon fill="url(#_19)" points="44.98,52.053 15.814,42.759 14.786,18.917 45.296,25.875 "/>
-<linearGradient id="_20" gradientUnits="userSpaceOnUse" x1="42.72" y1="62.47" x2="25.68" y2="41.62">
-<stop stop-color="#FFFFFF" offset="0"/>
-<stop stop-color="#A2C2DD" offset="0.35"/>
-<stop stop-color="#6C83BB" offset="0.7"/>
-<stop stop-color="#003D6D" offset="1"/>
-</linearGradient>
-<path fill="url(#_20)" d="M15.698,39.176c2.905,1.69,8.717,4.592,8.717,4.592l10.229,1.852 c6.33-1.096,9.934,2.101,9.934,2.101L44.57,55.99l-28.473-9.07L15.698,39.176z"/>
-<path fill="#FFFFFF" d="M14.698,25.884l12.66,3.574c0,0,0.498-4.445,0.514-4.448c-1.134-3.994-5.332-3.909-6.059-2.261 c-2.441-2.681-4.211,0.478-4.211,0.478l-3.105-0.808L14.698,25.884z"/>
-<linearGradient id="_21" gradientUnits="userSpaceOnUse" x1="69.49" y1="77.01" x2="12.49" y2="17.68">
-<stop stop-color="#FFFFFF" offset="0.15"/>
-<stop stop-color="#A2C2DD" offset="1"/>
-</linearGradient>
-<path fill="url(#_21)" d="M13.36,17.158l1.343,31.076L46.004,58.2l0.346-33.523L13.36,17.158z M44.502,55.311l-28.479-9.062 l-0.954-26.913l29.71,6.763L44.502,55.311z"/>
-<path fill="#115B7E" d="M37.396,41.982c0,0-14.091-2.843-16.311-2.398l3.277,2.841C26.026,43.034,34,44.227,34,44.227 L37.396,41.982z"/>
-<polygon fill="#BFDAE1" points="26.558,40.739 28.2,40.902 31.15,43.898 29.417,43.736 "/>
-<path fill="#298595" d="M24.368,42.408l-3.275-2.861c-0.738,4.539,6.156,6.268,8.631,6.871c5.781,1.275,7.03-1.984,7.668-4.45 C35.027,45.823,25.01,42.932,24.368,42.408z"/>
-<path fill="#CFECFF" d="M21.09,39.568l3.275,2.907c9.263,3.502,11.865,1.424,13.027-0.507 C34.404,41.021,23.302,39.122,21.09,39.568z M24.622,42.031l-2.455-2.148c1.853-0.195,12.074,1.387,14.62,2.193 C35.422,43.964,31.639,44.707,24.622,42.031z"/>
-<linearGradient id="_22" gradientUnits="userSpaceOnUse" x1="28.28" y1="32.08" x2="17.62" y2="31.3">
-<stop stop-color="#2B98A0" offset="0"/>
-<stop stop-color="#0A4A60" offset="1"/>
-</linearGradient>
-<polygon fill="url(#_22)" points="28.434,41.582 28.821,22.619 20.849,36.979 "/>
-<polygon fill="#2F8E9A" points="29.49,42.729 28.971,26.357 34.188,42.412 "/>
-<linearGradient id="_23" gradientUnits="userSpaceOnUse" x1="48.98" y1="41.75" x2="48.98" y2="77.75">
-<stop stop-color="#DEE9F3" offset="0"/>
-<stop stop-color="#235487" offset="1"/>
-</linearGradient>
-<polygon fill="url(#_23)" points="47.365,69.689 49.359,67.643 50.598,39.666 47.848,41.723 "/>
-<linearGradient id="_24" gradientUnits="userSpaceOnUse" x1="14.35" y1="22.25" x2="34.6" y2="43.5">
-<stop stop-color="#FFFFFF" offset="0"/>
-<stop stop-color="#A2C2DD" offset="0.35"/>
-<stop stop-color="#6C83BB" offset="0.7"/>
-<stop stop-color="#003D6D" offset="1"/>
-</linearGradient>
-<polygon fill="url(#_24)" points="47.848,41.723 33.469,50.964 28.481,49.768 11.708,34.447 27.026,51.219 32.658,52.456 "/>
-<linearGradient id="_25" gradientUnits="userSpaceOnUse" x1="41.79" y1="6.95" x2="19.04" y2="90.7">
-<stop stop-color="#FFFFFF" offset="0.15"/>
-<stop stop-color="#A2C2DD" offset="1"/>
-</linearGradient>
-<polygon fill="url(#_25)" points="47.848,41.723 32.441,52.41 26.95,50.989 11.708,34.45 13.241,60.593 47.365,69.689 "/>
-<linearGradient id="_26" gradientUnits="userSpaceOnUse" x1="5.62" y1="67.79" x2="25.37" y2="51.04">
-<stop stop-color="#FFFFFF" offset="0"/>
-<stop stop-color="#A2C2DD" offset="0.53"/>
-<stop stop-color="#6C83BB" offset="0.87"/>
-<stop stop-color="#003D6D" offset="1"/>
-</linearGradient>
-<polygon fill="url(#_26)" points="13.255,60.582 25.621,49.561 26.919,50.98 "/>
-<linearGradient id="_27" gradientUnits="userSpaceOnUse" x1="49.93" y1="73.86" x2="35.68" y2="54.87">
-<stop stop-color="#FFFFFF" offset="0"/>
-<stop stop-color="#A2C2DD" offset="0.53"/>
-<stop stop-color="#6C83BB" offset="0.87"/>
-<stop stop-color="#003D6D" offset="1"/>
-</linearGradient>
-<polygon fill="url(#_27)" points="47.384,69.659 34.361,51.236 32.441,52.41 "/>
-<linearGradient id="_28" gradientUnits="userSpaceOnUse" x1="20.65" y1="0.35" x2="1.28" y2="57.72">
-<stop stop-color="#E6EEF4" offset="0"/>
-<stop stop-color="#A3740A" offset="0.44"/>
-<stop stop-color="#474105" offset="0.94"/>
-</linearGradient>
-<path fill="url(#_28)" d="M18.344,27.406C16.046,22.166,7.092,21.7,5.107,15.857c0-0.001-0.916,0.818-0.916,0.818 l7.613,22.598l2.155,2.863l-6.151-18.26l9.799,4.177c0,0,0.716,10.753,0.708,10.754l0.507-0.613 C19.839,34.412,19.658,29.728,18.344,27.406z"/>
-<polygon fill="#6D5607" points="2.719,16.793 4.183,16.679 5.106,15.858 3.566,16.091 "/>
-<path fill="#6D5607" d="M17.695,28.032c-3.77-6.2-10.994-4.212-13.51-11.337l-1.467,0.099l7.516,22.292l1.569,0.189L7.505,26.499 c9.891-1.063,10.806,6.229,9.826,12.022l0.992,0.286C19.276,35.021,19.036,30.337,17.695,28.032z"/>
-<radialGradient id="_29" gradientUnits="userSpaceOnUse" cx="8.12" cy="44.13" r="4.15">
-<stop stop-color="#E6EEF4" offset="0"/>
-<stop stop-color="#A3740A" offset="0.44"/>
-<stop stop-color="#474105" offset="0.94"/>
-</radialGradient>
-<path fill="url(#_29)" d="M13.886,43.857c-0.572,3.104-3.355,6.041-6.22,6.56c-2.86,0.513-4.717-1.59-4.144-4.694 c0.57-3.104,3.355-6.048,6.22-6.563C12.602,38.646,14.459,40.745,13.886,43.857z"/>
-<linearGradient id="_30" gradientUnits="userSpaceOnUse" x1="11" y1="25.7" x2="6.63" y2="3.59">
-<stop stop-color="#A2C2DD" offset="0.1"/>
-<stop stop-color="#6C83BB" offset="0.71"/>
-<stop stop-color="#003D6D" offset="0.99"/>
-</linearGradient>
-<path fill="url(#_30)" d="M14.016,32.378l-0.2-5.026c-2.068-1.156-5.16-0.934-5.16-0.934l3.136,9.274l-0.083-1.242 L14.016,32.378z M9.186,26.812c0,0,2.604-0.188,4.347,0.787l0.168,4.58l-2.042,1.868L9.186,26.812z"/>
-</svg>
\ No newline at end of file
--- a/messagingapp/msgnotifications/msgnotificationdialogplugin/resources/ringingtone.svg Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
-<svg width="84" height="58" viewBox="0 0 84 58">
-<linearGradient id="_63" gradientUnits="userSpaceOnUse" x1="58.89" y1="32.29" x2="47.46" y2="54.8">
-<stop stop-color="#A2C2DD" offset="0.1"/>
-<stop stop-color="#6C83BB" offset="0.71"/>
-<stop stop-color="#003D6D" offset="0.99"/>
-</linearGradient>
-<path fill="url(#_63)" d="M50.352,2.42l-0.033,0.031h-0.021c-5.285,0.285-9.418,11.98-9.418,26.625 c0,14.652,3.979,26.092,9.34,26.643h4.996c2.131,0,4.117-1.807,5.758-5.184c0.346-0.199,11.242-6.574,11.441-6.697 c0.359,0.002,3.687,0.006,4.562,0.006c1.478,0,3.543-0.817,5.007-4.725c0.941-2.527,1.467-5.91,1.467-9.523 c0-6.525-1.715-13.109-5.547-13.109c0,0-4.617-0.059-5.055-0.064C72.563,16.205,60.8,7.319,60.8,7.319 c-1.607-3.166-3.521-4.902-5.59-4.902C55.211,2.416,50.352,2.42,50.352,2.42z M71.582,42.778l-0.012-0.005 c0,0,0.014-0.013,0.016-0.013C71.584,42.768,71.584,42.773,71.582,42.778z"/>
-<linearGradient id="_64" gradientUnits="userSpaceOnUse" x1="23.27" y1="39.8" x2="29.04" y2="51.16">
-<stop stop-color="#A2C2DD" offset="0.1"/>
-<stop stop-color="#6C83BB" offset="0.71"/>
-<stop stop-color="#003D6D" offset="0.99"/>
-</linearGradient>
-<path fill="url(#_64)" d="M17.562,28.336c0,0,0.029,15.633,0.029,17.166c-2.504-0.234-5.418,1.236-6.758,3.471 c-0.734,1.229-0.873,2.525-0.377,3.566c0.467,1,1.451,1.66,2.746,1.858c2.557,0.392,5.662-1.121,7.057-3.444 c0.439-0.729,0.66-1.488,0.66-2.215c0-0.105,0-9.92,0.004-10.86c0.828-0.254,8.742-2.697,10.209-3.144 c0.006,1.358,0.025,6.089,0.029,7.347c-2.527-0.289-5.496,1.203-6.854,3.457c-0.732,1.223-0.877,2.526-0.385,3.564 c0.469,1.005,1.449,1.662,2.742,1.859c2.564,0.397,5.672-1.117,7.061-3.445c0.475-0.791,0.705-1.629,0.654-2.426 c0.027,0.082,0.031-21.328,0.031-21.328L17.562,28.336z M20.912,33.031l0.037-1.875l10.15-3l0.037,1.969L20.912,33.031z"/>
-<linearGradient id="_65" gradientUnits="userSpaceOnUse" x1="8.43" y1="17.5" x2="13.41" y2="27.31">
-<stop stop-color="#A2C2DD" offset="0.1"/>
-<stop stop-color="#6C83BB" offset="0.71"/>
-<stop stop-color="#003D6D" offset="0.99"/>
-</linearGradient>
-<path fill="url(#_65)" d="M10.357,4.115c0,0,0.059,15.676,0.066,17.59c-0.09-0.043-0.285-0.129-0.285-0.129 c-2.498-0.621-5.703,0.594-7.293,2.768c-0.832,1.143-1.09,2.414-0.699,3.486c0.375,1.03,1.277,1.771,2.543,2.088 c2.496,0.621,5.699-0.594,7.291-2.764c0.529-0.719,0.822-1.512,0.861-2.299v-0.014l0.035,0.047c0,0,0.02-9.523,0.027-11.434 c1.617,0.777,2.738,1.641,3.152,2.742c0.164,0.43,0.235,0.906,0.246,1.426c0.05,2.549-1.719,5.125-1.719,5.125l1.664,1.191 l0.383-0.674c5.229-8.719-1.746-13.855-1.746-13.855c-1.194-1.27-2.147-2.294-2.209-4.645l-0.016-0.697L10.357,4.115z"/>
-<linearGradient id="_66" gradientUnits="userSpaceOnUse" x1="74.45" y1="14.49" x2="80.52" y2="55.82">
-<stop stop-color="#FFFFFF" offset="0"/>
-<stop stop-color="#A2C2DD" offset="0.35"/>
-<stop stop-color="#6C83BB" offset="0.7"/>
-<stop stop-color="#003D6D" offset="1"/>
-</linearGradient>
-<path fill="url(#_66)" d="M76.977,43.148c-3.813,0,1.066-0.009-4.766-0.009c4.779-16.506-0.037-26.047-0.037-26.047 s0.111,0.068,5.729,0.094C84.465,17.188,84.563,43.148,76.977,43.148z"/>
-<linearGradient id="_67" gradientUnits="userSpaceOnUse" x1="50.98" y1="-8.01" x2="61.11" y2="70.44">
-<stop stop-color="#FFFFFF" offset="0"/>
-<stop stop-color="#A2C2DD" offset="0.35"/>
-<stop stop-color="#6C83BB" offset="0.7"/>
-<stop stop-color="#003D6D" offset="1"/>
-</linearGradient>
-<path fill="url(#_67)" d="M50.219,55.023h4.611c0.057,0,0.311,0,0.385,0c4.922,0,8.918-11.62,8.918-25.95 c0-14.334-3.992-25.958-8.918-25.958c-0.049,0-0.098,0.02-0.146,0.023C55.033,3.134,55,3.115,54.963,3.115h-4.615 C49.453,3.115,49.32,55.028,50.219,55.023z"/>
-<linearGradient id="_68" gradientUnits="userSpaceOnUse" x1="44.01" y1="3.76" x2="54.2" y2="43.53">
-<stop stop-color="#FFFFFF" offset="0.05"/>
-<stop stop-color="#A2C2DD" offset="1"/>
-</linearGradient>
-<ellipse fill="url(#_68)" cx="50.498" cy="29.072" rx="8.92" ry="25.951"/>
-<linearGradient id="_69" gradientUnits="userSpaceOnUse" x1="17.85" y1="19.4" x2="53.78" y2="29.8">
-<stop stop-color="#FFFFFF" offset="0"/>
-<stop stop-color="#A2C2DD" offset="0.35"/>
-<stop stop-color="#6C83BB" offset="0.7"/>
-<stop stop-color="#003D6D" offset="1"/>
-</linearGradient>
-<ellipse fill="url(#_69)" cx="50.25" cy="28.776" rx="7.582" ry="22.063"/>
-<linearGradient id="_70" gradientUnits="userSpaceOnUse" x1="48.39" y1="29.87" x2="64.59" y2="29.87">
-<stop stop-color="#FFFFFF" offset="0"/>
-<stop stop-color="#A2C2DD" offset="0.35"/>
-<stop stop-color="#6C83BB" offset="0.7"/>
-<stop stop-color="#003D6D" offset="1"/>
-</linearGradient>
-<path fill="url(#_70)" d="M57.133,19.283c-10.832,2.801-10.906,17.543-0.467,21.167 C57.445,36.153,58.727,28.428,57.133,19.283z"/>
-<linearGradient id="_71" gradientUnits="userSpaceOnUse" x1="60.77" y1="1.82" x2="67.04" y2="35.32">
-<stop stop-color="#FFFFFF" offset="0.05"/>
-<stop stop-color="#A2C2DD" offset="1"/>
-</linearGradient>
-<path fill="url(#_71)" d="M72.174,43.172c-4.053,2.31-5.025,3.236-11.775,6.889c7.934-22.026,0-42.171,0-42.171 l12.182,9.205C72.578,17.094,77.602,29.258,72.174,43.172z"/>
-<path fill="#58A015" d="M11.131,23.658l-0.07-18.859l0.924-0.02c0.064,2.68,1.224,3.856,2.394,5.106 c2.654,2.84,5.955,5.496,1.652,13.033l-0.537-0.385c3.109-5.91,1.119-8.543-3.293-10.238c0,0-0.027,10.623-0.027,12.594 C11.732,23.776,11.131,23.658,11.131,23.658z"/>
-<path fill="#A15EB6" d="M33.701,45.18c-0.008-2.008,0.004-20.498,0.004-20.498l-15.441,4.191l0.031,18.166 c0,0,1.158-0.227,1.928,1.471c0-1.998,0-11.146,0-11.146l11.604-3.578l0.039,9.86C31.857,43.646,32.838,43.371,33.701,45.18z M20.223,34.066v-3.474l11.604-3.217v3.279L20.223,34.066z"/>
-<radialGradient id="_72" gradientUnits="userSpaceOnUse" cx="7.81" cy="25.18" r="3.46">
-<stop stop-color="#DCE8E4" offset="0"/>
-<stop stop-color="#43910A" offset="1"/>
-</radialGradient>
-<path fill="url(#_72)" d="M11.424,26.74c-1.414,1.928-4.344,3.047-6.555,2.499c-2.207-0.549-2.855-2.556-1.445-4.482 c1.41-1.927,4.344-3.051,6.549-2.5C12.178,22.803,12.834,24.817,11.424,26.74z"/>
-<radialGradient id="_73" gradientUnits="userSpaceOnUse" cx="15.45" cy="48.88" r="3.31">
-<stop stop-color="#DEDEED" offset="0"/>
-<stop stop-color="#9646AC" offset="1"/>
-</radialGradient>
-<path fill="url(#_73)" d="M19.658,50.596c-1.242,2.066-4.082,3.459-6.355,3.115c-2.273-0.348-3.107-2.301-1.871-4.375 c1.238-2.066,4.086-3.461,6.359-3.117C20.059,46.569,20.896,48.528,19.658,50.596z"/>
-<radialGradient id="_74" gradientUnits="userSpaceOnUse" cx="30.34" cy="45.16" r="3.27">
-<stop stop-color="#DEDEED" offset="0"/>
-<stop stop-color="#9646AC" offset="1"/>
-</radialGradient>
-<path fill="url(#_74)" d="M33.123,47.162c-1.238,2.066-4.086,3.463-6.359,3.114c-2.266-0.349-3.105-2.306-1.859-4.375 c1.232-2.063,4.078-3.464,6.355-3.116C33.529,43.133,34.365,45.094,33.123,47.162z"/>
-</svg>
\ No newline at end of file
--- a/messagingapp/msgnotifications/msgnotificationdialogplugin/resources/sms.svg Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" baseProfile="tiny" height="40px" version="1.1" viewBox="0 0 30 40" width="30px" x="0px" y="0px">
-<g>
-<path d="M27.458,17.31l-0.81-0.416l0.81-0.418c0.624-0.317,0.62-1.024,0.405-1.392l-0.881-1.512 c-0.251-0.43-0.877-0.683-1.406-0.336l-0.748,0.484l0.051-0.892c0.025-0.453-0.309-1.056-0.998-1.056h-1.764 c-0.57,0-1.031,0.48-0.998,1.056l0.051,0.892l-0.748-0.484c-0.402-0.263-1.08-0.22-1.406,0.336l-0.879,1.512 c-0.219,0.376-0.126,0.735-0.049,0.916H6C4.346,16,3,17.345,3,19v12c0,1.621,1.293,2.944,2.901,2.997v2.695 c0,1.407,1.723,2.251,2.869,1.029l3.063-3.723h11.165C24.654,33.999,26,32.653,26,31V20.706c0.185,0.031,0.699-0.003,0.982-0.487 l0.881-1.516C28.278,17.989,27.701,17.435,27.458,17.31z" fill-opacity="0.2" stroke-opacity="0.2"/>
-<path d="M27,15.588l-0.882-1.512c0,1.023-6.239,1.58-6.239,0L19,15.588l7.118,4.126L27,18.199l-2.536-1.305 L27,15.588z" fill-opacity="0.5" stroke-opacity="0.5"/>
-<path d="M4,26.718V31c0,1.101,0.9,2,2,2h0.901v3.692c0,0.517,0.646,0.86,1.098,0.394L11.362,33H23c1.1,0,2-0.899,2-2 v-4.282c0-0.004-0.001-0.007-0.001-0.011L4,26.718z" fill-opacity="0.5" stroke-opacity="0.5"/>
-<linearGradient gradientTransform="matrix(1 0 0 1 -1530 0)" gradientUnits="userSpaceOnUse" id="SVGID_1_" x1="1544.5" x2="1544.5" y1="13.4609" y2="38.8497">
-<stop offset="0" style="stop-color:#FFE23D"/>
-<stop offset="0.2239" style="stop-color:#FAD337"/>
-<stop offset="0.6537" style="stop-color:#EFAB26"/>
-<stop offset="1" style="stop-color:#E48717"/>
-</linearGradient>
-<path d="M23,16H6c-1.1,0-2,0.9-2,2v12c0,1.101,0.9,2,2,2h0.901v3.692c0,0.438,0.599,0.907,1.098,0.394 L11.362,32H23c1.1,0,2-0.899,2-2V18C25,16.9,24.1,16,23,16z" fill="url(#SVGID_1_)"/>
-<rect fill="#A55B11" height="1" width="10" x="9.5" y="20.5"/>
-<rect fill="#A55B11" height="1" width="10" x="9.5" y="23.5"/>
-<rect fill="#A55B11" height="1" width="6.25" x="9.5" y="26.5"/>
-<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_2_" x1="14.7773" x2="14.7773" y1="17" y2="32.9845">
-<stop offset="0" style="stop-color:#FFE23D"/>
-<stop offset="0.2239" style="stop-color:#FAD337"/>
-<stop offset="0.6537" style="stop-color:#EFAB26"/>
-<stop offset="1" style="stop-color:#E48717"/>
-</linearGradient>
-<path d="M25,18c0-0.572-0.243-1.089-0.631-1.454l-0.706,0.705C23.869,17.435,24,17.702,24,18 v11.999c0,0.554-0.5,1.002-1,1.002H10.891l-2.989,3.627v-3.627H6c-0.263,0-0.499-0.107-0.678-0.274 c0.009,0.009,0.013,0.021,0.022,0.03l-0.79,0.616C4.92,31.757,5.432,32,6,32h0.901v3.692c0.005,0.61,0.755,0.782,1.098,0.394 L11.362,32H23c1.172,0,2-0.947,2-2V18z" fill="url(#SVGID_2_)" fill-opacity="0.2" stroke-opacity="0.2"/>
-<path d="M7.901,34.628v-3.627l-1,0.999v3.692c0,0.262,0.164,0.494,0.411,0.583L7.901,34.628z" fill="#FFFFFF" fill-opacity="0.2" stroke-opacity="0.2"/>
-<path d="M5.345,30.757c-0.212-0.184-0.347-0.455-0.347-0.758V18c0-0.552,0.449-1.001,1.002-1.001h17 c0.254,0,0.457,0.069,0.663,0.252l0.706-0.705C24.011,16.208,23.528,16,23,16H6c-1.1,0-2,0.9-2,2v12 c0,0.532,0.211,1.017,0.552,1.376L5.345,30.757z" fill="#FFFFFF" fill-opacity="0.4" stroke-opacity="0.4"/>
-<path d="M7.901,31.001H6c-0.263,0-0.499-0.107-0.678-0.274c0.009,0.009,0.013,0.021,0.022,0.03l-0.79,0.616 C4.92,31.757,5.432,32,6,32h0.901L7.901,31.001z" fill-opacity="0.2" stroke-opacity="0.2"/>
-<path d="M25,18c0-0.572-0.243-1.089-0.631-1.454l-0.706,0.705C23.869,17.435,24,17.702,24,18v11.999 c0,0.585-0.562,1.002-1,1.002H10.891l-2.989,3.627l-0.589,1.647c0.067,0.024,0.422,0.105,0.687-0.189L11.362,32H23 c0.984,0,2-0.775,2-2V18z" fill-opacity="0.2" stroke-opacity="0.2"/>
-<path d="M25,16.619L24.25,16h-5.518c0.014,0.009,1.713,0.894,1.713,0.894l-1.675,0.86 c-0.317,0.205-0.271,0.577-0.204,0.694l0.879,1.515c0.352,0.402,0.623,0.224,0.705,0.171l1.574-1.017l-0.105,1.856 c0.021,0.438,0.361,0.527,0.498,0.527h1.764c0.4,0,0.508-0.391,0.498-0.527l-0.104-1.856L25,19.587V16.619z" fill-opacity="0.3" stroke-opacity="0.3"/>
-<polygon fill="#EA2227" points="27,17.199 26.118,18.714 23.722,17.162 23.881,20 22.117,20 22.277,17.162 19.879,18.714 19,17.199 21.537,15.895 19,14.588 19.879,13.076 22.277,14.625 22.117,11.771 23.881,11.771 23.722,14.625 26.118,13.076 27,14.588 24.464,15.895 "/>
-<rect fill="none" height="40" width="30"/>
-</g>
-</svg>
--- a/messagingapp/msgnotifications/msgnotificationdialogplugin/src/msgnotificationdialogwidget.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgnotifications/msgnotificationdialogplugin/src/msgnotificationdialogwidget.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -39,7 +39,7 @@
const QString BT_ICON("qtg_large_bluetooth");
const QString SMS_ICON("qtg_large_new_message");
const QString MMS_ICON("qtg_large_new_message");
-const QString RINGTONE_ICON("qtg_large_tone");
+const QString RINGTONE_ICON("qtg_large_new_message");
const QString VCARD_ICON("qtg_large_new_message");
// ----------------------------------------------------------------------------
// ServiceRequestSenderTask::ServiceRequestSenderTask
--- a/messagingapp/msgnotifications/msgnotifier/inc/msgnotifier_p.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgnotifications/msgnotifier/inc/msgnotifier_p.h Thu Jul 22 16:32:06 2010 +0100
@@ -27,6 +27,7 @@
class MsgStoreHandler;
class XQSettingsManager;
class XQPublishAndSubscribeUtils;
+class XQSystemToneService;
/**
* @class MsgNotifierPrivate
@@ -65,6 +66,16 @@
*/
void DeleteConversationList(
const CCsClientConversation& aClientConversation);
+
+ /**
+ * PartialDeleteConversationList
+ * This is for handling partial delete of conversation event
+ * Asynchronous
+ * @param aClientConversation CCsClientConversation - The conversation object
+ */
+ void PartialDeleteConversationList(
+ const CCsClientConversation& aClientConversation);
+
/**
* ModifyConversationList
@@ -162,6 +173,11 @@
* Owned.
*/
XQPublishAndSubscribeUtils* mPSUtils;
+
+ /**
+ * Object to handle audio alert when new message is received
+ */
+ XQSystemToneService* mSts;
};
#endif // MSGNOTIFIER_PRIVATE_H
--- a/messagingapp/msgnotifications/msgnotifier/inc/msgstorehandler.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgnotifications/msgnotifier/inc/msgstorehandler.h Thu Jul 22 16:32:06 2010 +0100
@@ -140,12 +140,8 @@
/**
* List of messages in Fialed states
*/
- CMsvEntrySelection* iFailedMessages;
-
- /**
- * List of messages for which failed note shown
- */
- CMsvEntrySelection* iFailedNotes;
+ CMsvEntrySelection* iFailedMessages;
+
};
#endif // MSG_STORE_HANDLER_H
--- a/messagingapp/msgnotifications/msgnotifier/msgnotifier.pro Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgnotifications/msgnotifier/msgnotifier.pro Thu Jul 22 16:32:06 2010 +0100
@@ -21,7 +21,6 @@
DEPENDPATH += . src
HEADERS += $$PUBLIC_HEADERS
INCLUDEPATH += . inc ../../../inc
-INCLUDEPATH +=../../msgutils/s60qconversions/inc
INCLUDEPATH += ../../msgsettings/msginit/inc
INCLUDEPATH += ../inc
INCLUDEPATH += $$APP_LAYER_INCLUDEPATH
@@ -42,6 +41,7 @@
QT -= gui
CONFIG += NO_ICON hb
+TRANSLATIONS = messaging.ts
# Input
SOURCES += src/main.cpp \
src/msgnotifier.cpp \
@@ -53,13 +53,11 @@
inc/msgstorehandler.h
LIBS += -lcsserverclientapi \
- -ls60qconversions \
-lcsutils \
-lmsginit \
-lmsgs \
-letext \
-lsmcm \
- -ls60qconversions \
-lmmsmessage \
-lmmsserversettings \
-lmmscli \
@@ -68,5 +66,9 @@
-lQtVersit \
-lunidatamodelloader \
-lxqsettingsmanager \
- -apgrfx.lib
+ -apgrfx.lib \
+ -lxqutils \
+ -lws32 \
+ -lapgrfx \
+ -lxqsystemtoneservice
--- a/messagingapp/msgnotifications/msgnotifier/src/main.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgnotifications/msgnotifier/src/main.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -17,6 +17,8 @@
//SYSTEM INCLUDES
#include <QCoreApplication>
+#include <QTranslator>
+#include <QLocale>
#include <QFile>
#include <QDateTime>
#include <QPointer>
@@ -70,7 +72,15 @@
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
-
+ QString locale = QLocale::system().name();
+ QString path = "z:/resource/qt/translations/";
+ QTranslator translator;
+ QTranslator translator_comm;
+ translator.load(path + QString("messaging_") + locale);
+ translator_comm.load(path + QString("common_") + locale);
+ app.installTranslator(&translator);
+ app.installTranslator(&translator_comm);
+
#ifdef _DEBUG_TRACES_
//Debug Logs
QFile ofile;
--- a/messagingapp/msgnotifications/msgnotifier/src/msgnotifier_p.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgnotifications/msgnotifier/src/msgnotifier_p.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -24,20 +24,20 @@
#include <xqservicerequest.h>
#include <QString>
#include <w32std.h>
-#include <APGTASK.H>
+#include <apgtask.h>
#include <XQSettingsManager>
#include <xqpublishandsubscribeutils.h>
+#include <xqsystemtoneservice.h>
+#include <xqconversions.h>
//USER INCLUDES
#include "msgnotifier.h"
#include "msgnotifier_p.h"
-#include "s60qconversions.h"
#include "msgstorehandler.h"
#include "msginfodefs.h"
#include "conversationidpsconsts.h"
#include "debugtraces.h"
-
// ----------------------------------------------------------------------------
// MsgNotifierPrivate::MsgNotifierPrivate
// @see MsgNotifierPrivate.h
@@ -80,6 +80,12 @@
delete mSettingsManager;
}
+ if(mSts)
+ {
+ delete mSts;
+ mSts = NULL;
+ }
+
QDEBUG_WRITE("MsgNotifierPrivate::~MsgNotifierPrivate : Exit")
}
@@ -115,6 +121,8 @@
QDEBUG_WRITE_FORMAT("MsgNotifierPrivate::initL "
"writing ret value",success)
+ mSts = new XQSystemToneService();
+
QDEBUG_WRITE("MsgNotifierPrivate::initL : Exit")
}
@@ -205,17 +213,20 @@
if(displayName)
{
notifData.mDisplayName =
- S60QConversions::s60DescToQString(*displayName);
+ XQConversions::s60DescToQString(*displayName);
}
if(number)
{
- notifData.mContactNum = S60QConversions::s60DescToQString(*number);
+ notifData.mContactNum = XQConversions::s60DescToQString(*number);
}
if(descrp)
{
- notifData.mDescription = S60QConversions::s60DescToQString(*descrp);
+ notifData.mDescription = XQConversions::s60DescToQString(*descrp);
}
+ //Play new message alert tone.
+ mSts->playTone(XQSystemToneService::SmsAlertTone);
+
// check whether opened cv id and received
// cv id are same and show notification
if( showNotification(notifData.mConversationId ))
@@ -289,39 +300,44 @@
// @see MsgNotifierPrivate.h
// ----------------------------------------------------------------------------
void MsgNotifierPrivate::displayFailedNote(MsgInfo info)
-{
- // TODO: use XQAiwRequest
- QDEBUG_WRITE("[MsgNotifierPrivate::handleFailedState] : entered")
- // change to com.nokia.symbian.messaging (servicename), IMsgErrorNotifier
- // as the service name.
- XQServiceRequest snd("messaging.com.nokia.symbian.MsgErrorNotifier",
- "displayErrorNote(QVariantList)", false);
+ {
+ QDEBUG_WRITE("MsgNotifierPrivate::displayFailedNote start.")
+
+ // check whether opened cv id and received
+ // cv id are same then dont show failed note
+ if (!showNotification(info.mConversationId))
+ {
+ return;
+ }
- QVariantList args;
+ //Even if name string is empty we shall add name into args
+ QString nameString;
+
info.mDisplayName.removeDuplicates();
info.mDisplayName.sort();
-
- QString nameString;
-
+
nameString.append(info.mDisplayName.at(0));
- for(int i = 1; i < info.mDisplayName.count(); ++i){
+ for (int i = 1; i < info.mDisplayName.count(); ++i)
+ {
nameString.append(", ");
nameString.append(info.mDisplayName.at(i));
- }
-
- //Even if name string is empty we shall add name into args
- QVariant nameV(nameString);
- args << nameV;
+ }
- QDEBUG_WRITE("[MsgNotifierPrivate::handleFailedState] : name and contactnumber")
-
+ // create request arguments
+ QVariantList args;
+ args << QVariant(nameString);
args << info.mConversationId;
args << info.mMessageType;
+
+ // TODO: use XQAiwRequest
+ XQServiceRequest snd("messaging.com.nokia.symbian.MsgErrorNotifier",
+ "displayErrorNote(QVariantList)", false);
+
snd << args;
snd.send();
- QDEBUG_WRITE("[MsgNotifierPrivate::handleFailedState] : left")
-
-}
+
+ QDEBUG_WRITE("MsgNotifierPrivate::displayFailedNote end.")
+ }
// ----------------------------------------------------------------------------
// MsgNotifierPrivate::showNotification
@@ -363,4 +379,11 @@
wsSession.Close();
return showNotification;
}
+// ----------------------------------------------------------------------------
+// MsgNotifierPrivate::PartialDeleteConversationList
+// @see mcsconversationclientchangeobserver.h
+// ----------------------------------------------------------------------------
+void MsgNotifierPrivate::PartialDeleteConversationList(
+ const CCsClientConversation& aClientConversation){/*empty implementation*/}
+
//EOF
--- a/messagingapp/msgnotifications/msgnotifier/src/msgstorehandler.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgnotifications/msgnotifier/src/msgstorehandler.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -16,7 +16,7 @@
*/
#include "msgstorehandler.h"
-#include "s60qconversions.h"
+#include <xqconversions.h>
#include "msgnotifier_p.h"
#include <ccsrequesthandler.h>
#include <ccsconversationentry.h>
@@ -63,10 +63,6 @@
iFailedMessages = NULL;
}
- if (iFailedNotes) {
- delete iFailedNotes;
- iFailedNotes = NULL;
- }
}
// ---------------------------------------------------------
@@ -80,7 +76,6 @@
iMsvEntry->AddObserverL(*this);
iFailedMessages = new (ELeave) CMsvEntrySelection;
- iFailedNotes = new (ELeave) CMsvEntrySelection;
}
// ---------------------------------------------------------
@@ -108,8 +103,7 @@
}
//Handling for outbox entries
- if( parent == KMsvGlobalOutBoxIndexEntryIdValue )
- {
+ if (parent == KMsvGlobalOutBoxIndexEntryIdValue) {
CMsvEntry* rootEntry = iMsvSession->GetEntryL(KMsvGlobalOutBoxIndexEntryId);
for (TInt i = 0; i < selection->Count(); ++i) {
@@ -120,45 +114,55 @@
TInt index = iFailedMessages->Find(entry.Id());
if (sendingState == KMsvSendStateFailed && KErrNotFound == index) {
+
iFailedMessages->AppendL(entry.Id());
- iFailedNotes->AppendL(entry.Id());
+ MsgInfo aInfo;
+ ProcessIndicatorDataL(entry.Id(), aInfo);
+ iNotifier->displayFailedNote(aInfo);
}
else if (sendingState != KMsvSendStateFailed && KErrNotFound != index) {
iFailedMessages->Delete(index);
iFailedMessages->Compress();
}
- if (iFailedNotes->Count()) {
- MsgInfo aInfo;
- ProcessIndicatorDataL(iFailedNotes->At(0), aInfo);
- iNotifier->displayFailedNote(aInfo);
- iFailedNotes->Delete(0);
- iFailedNotes->Compress();
- }
+
}
}//end for
}
- else
- {
+ else {
TMsvEntry entry;
TMsvId service;
- TInt error= KErrNone;
- for (TInt i = 0; i < selection->Count(); ++i)
- {
+ TInt error = KErrNone;
+ for (TInt i = 0; i < selection->Count(); ++i) {
error = iMsvSession->GetEntry(selection->At(i), service, entry);
- if (error == KErrNone && entry.iMtm == KUidMsgMMSNotification && MmsNotificationStatus(
- entry) == EMsgStatusFailed)
- {
- MsgInfo aInfo;
-
- //Fill aInfo with appropriate data
- aInfo.mMessageType = ECsMmsNotification;
+ if (error == KErrNone && entry.iMtm == KUidMsgMMSNotification &&
+ MmsNotificationStatus(entry) == EMsgStatusFailed) {
+
+ TInt index = iFailedMessages->Find(entry.Id());
+
+ if (KErrNotFound == index) {
+ iFailedMessages->AppendL(entry.Id());
+ MsgInfo aInfo;
+ //Fill aInfo with appropriate data
+ aInfo.mMessageType = ECsMmsNotification;
+ ProcessIndicatorDataL(entry.Id(), aInfo);
+ iNotifier->displayFailedNote(aInfo);
- ProcessIndicatorDataL(entry.Id(),aInfo);
- iNotifier->displayFailedNote(aInfo);
+ }// end of if
}
- }
+ else if (error == KErrNone && entry.iMtm == KUidMsgMMSNotification
+ && MmsNotificationStatus(entry) == EMsgStatusRetrieving) {
+
+ TInt index = iFailedMessages->Find(entry.Id());
+ if (KErrNotFound != index) {
+ iFailedMessages->Delete(index);
+ iFailedMessages->Compress();
+ }// end of KErrNotFound != index if block
+
+ } // end of 2nd if
+ } // for loop
}
+
}
// ---------------------------------------------------------
@@ -269,12 +273,12 @@
HBufC* displayName = conversation->GetDisplayName();
if (displayName) {
- indicatorData.mDisplayName.append(S60QConversions::s60DescToQString(*displayName));
+ indicatorData.mDisplayName.append(XQConversions::s60DescToQString(*displayName));
}
else {
HBufC* number = convEntry->Contact();
if (number)
- indicatorData.mDisplayName.append(S60QConversions::s60DescToQString(*number));
+ indicatorData.mDisplayName.append(XQConversions::s60DescToQString(*number));
}
delete conversation;
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgnotifications/msgnotifier/tsrc/mmstestbed/inc/mmsreadfile.h Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,471 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ */
+
+#ifndef MMSREADFILE_H
+#define MMSREADFILE_H
+
+// INCLUDES
+#include <e32base.h>
+#include <badesca.h>
+#include <f32file.h>
+#include <msvstd.h>
+
+// forward references
+class CMmsAttaStructure;
+class CMmsHeaders;
+class CEikonEnv;
+class CMmsClientMtm;
+
+// Out-of-range value for any MMS header with assigned number
+// Used in coverage tests to get coverage for "default" branches
+// in "case" statements.
+const TInt KMmsTestIllegalValue = 255;
+
+//
+// TEST KEY WORDS
+// Extended to include all MMS headers to allow generation of arbitrary PDUs
+// Content type header cannot be separately defined,
+// it will always be "multipat/mixed" or "multipart/related"
+_LIT8( KTestEndOfFile, "EOF" );
+_LIT8( KTestNewMessage, "MESSAGE BEGIN" );
+//------------------------------------------------
+_LIT8( KTestMessageType, "MESSAGE-TYPE" ); //X-Mms-Message-Type
+_LIT8( KTestDate, "DATE" ); // Date
+_LIT8( KTestFrom, "FROM" ); // From
+_LIT8( KTestTo, "TO" ); // To
+_LIT8( KTestCc, "CC" ); // Cc
+_LIT8( KTestBcc, "BCC" ); // Bcc
+_LIT8( KTestSubject, "SUBJECT" ); // Subject
+_LIT8( KTestExpiryRel, "EXPIRY-REL" ); // X-Mms-Expiry, relative
+_LIT8( KTestExpiryAbs, "EXPIRY-ABS" ); // X-Mms-Expiry, absolute
+_LIT8( KTestDeliveryTimeRel, "DELIVERY-TIME-REL" ); // X-Mms-Delivery-Time, relative
+_LIT8( KTestDeliveryTimeAbs, "DELIVERY-TIME-ABS" ); // X-Mms-Delivery-Time, absolute
+_LIT8( KTestPriority, "PRIORITY" ); // X-Mms-Priority
+_LIT8( KTestSenderVisibility, "SENDER-VISIBILITY" ); // X-Mms-Sender-Visibility
+_LIT8( KTestDeliveryReport, "DELIVERY-REPORT" ); // X-Mms-Delivery-Report
+_LIT8( KTestReadReply, "READ-REPLY" ); // X-Mms-Read-Report
+// ---------------------------------------------------
+_LIT8( KTestNewAttachment, "ATTACHMENT" );
+_LIT8( KTestAttachmentType, "ATTACHMENTTYPE" );
+_LIT8( KTestAttachmentName, "ATTACHMENTNAME" );
+_LIT8( KTestAttachmentContLoc, "ATTACHMENTCONTLOC" );
+_LIT8( KTestAttachmentCharset, "ATTACHMENTCHARSET" );
+_LIT8( KTestAttachmentCid, "ATTACHMENTCID" );
+_LIT8( KTestAttachmentRoot, "ATTACHMENTROOT" );
+// content-type and x-type parameters for attachments
+// should appear in name-value pairs.
+// Test program is not responsible for verifying illegal scripts
+_LIT8( KTestAttContTypeParamName, "ContTypeParamName" );
+_LIT8( KTestAttContTypeParamValue, "ContTypeParamValue" );
+_LIT8( KTestAttXTypeParamName, "X-TypeParamName" );
+_LIT8( KTestAttXTypeParamValue, "X-TypeParamValue" );
+// -----------------------------------------------------
+_LIT8( KTestMessageClass, "MESSAGE-CLASS" ); // X-Mms-Message-Class
+_LIT8( KTestDelivRepSendAllow, "DELIV-REP-SEND-ALLOW" ); // X-Mms-Report-Allowed
+_LIT8( KTestAcceptAdvertis, "ACCEPT-ADVERTISEMENTS" );
+_LIT8( KTestRetryCount, "RETRY-COUNT" );
+_LIT8( KTestRetryInterval, "RETRY-INTERVAL" );
+// -------------------------------------------------
+_LIT8( KTestAlias, "ALIAS" );
+_LIT8( KTestFromAlias, "FROMALIAS" );
+_LIT8( KTestToAlias, "TOALIAS" );
+_LIT8( KTestCcAlias, "CCALIAS" );
+_LIT8( KTestBccAlias, "BCCALIAS" );
+// -------------------------------------------------
+// more Message headers to allow testing all possible PDUs and
+// MMS 1.1 headers
+_LIT8( KTestReplyCharging, "REPLY-CHARGING" ); // X-Mms-Reply-Charging
+_LIT8( KTestReplyChargAbs, "REPLY-CHARG-DEADLINE-ABS" ); // X-Mms-Reply-Charging, absolute
+_LIT8( KTestReplyChargRel, "REPLY-CHARG-DEADLINE-REL" ); // X-Mms-Reply-Charging, relative
+_LIT8( KTestReplyChargSize, "REPLY-CHARG-SIZE" ); // X-Mms-Reply-Charging-Size (octets)
+_LIT8( KTestReplyChargID, "REPLY-CHARGING-ID" ); // X-Mms-Reply-Charging-ID
+_LIT8( KTestTID, "TID" );
+_LIT8( KTestContentLocation, "CONTLOC" ); // X-Mms-Content-Location
+// The following three must appear as triplets.
+// index must be first, address and date may appear in any order
+_LIT8( KTestPreviouslySentIndex, "PREVIOUSINDEX" ); // forwarded count for X-Mms-PreviouslySent headers
+_LIT8( KTestPreviouslySentBy, "PREV-SENT-BY" ); // X-Mms-Previously-Sent-By
+_LIT8( KTestPreviouslySentDate, "PREV-SENT-DATE" ); // X-Mms-Previously-Sent-Date
+//---
+_LIT8( KTestMessageId, "MESSAGE-ID" ); // Message-ID
+_LIT8( KTestMessageSize, "MESSAGE-SIZE" ); // X-Mms-Message-Size (octets)
+_LIT8( KTestVersion, "MMS-VERSION" ); // X-MMS-Version (hex:, 10 = 1.0, 11 = 1.1 etc. )
+_LIT8( KTestReadStatus, "READ-STATUS" ); // X-Mms-Read-Status
+_LIT8( KTestResponseStatus, "RESPONSE-STATUS" ); // X-Mms-Response-Status
+_LIT8( KTestResponseText, "RESPONSE-TEXT" ); // X-Mms-Response-Text
+_LIT8( KTestRetrieveStatus, "RETRIEVE-STATUS" ); // X-Mms-Retrieve-Status
+_LIT8( KTestRetrieveText, "RETRIEVE-TEXT" ); // X-Mms-Retrieve-Text
+_LIT8( KTestStatus, "STATUS" ); // X-Mms-Status
+// -------------------------------------------------
+// MMS 1.2 headers
+_LIT8( KTestAttribute, "ATTRIBUTE" ); // X-Mms-Attribute
+// The value should be one of the following:
+// BCC, CC, CONTENT, CONTENT-TYPE, DATE, DELIVERY-REPORT, DELIVERY-TIME-ABS,
+// EXPIRY-ABS, FROM, MESSAGE-CLASS, MESSAGE-ID, MESSAGE-SIZE, PRIORITY,
+// READ-REPLY, SUBJECT, TO, REPLY-CHARGING, REPLY-CHARGING-ID,
+// REPLY-CHARG-DEADLINE-ABS, REPLY-CHARG-SIZE, PREV-SENT-BY,
+// PREV-SENT-DATE, ADDITIONAL-HEADERS
+_LIT8( KTestDistributionIndicator, "DISTRIBUTION-INDICATOR" ); // X-Mms-Distribution-Indicator
+_LIT8( KTestLimit, "LIMIT" ); // X-Mms-Limit
+_LIT8( KTestMessageQuota, "MESSAGE-QUOTA" ); // X-Mms-Mbox-Quota, message number
+_LIT8( KTestSizeQuota, "SIZE-QUOTA" ); // X-Mms-Mbox-Quota, size quota
+_LIT8( KTestMessageTotal, "MESSAGE-TOTAL" ); // X-Mms-Mbox-Totals, message number
+_LIT8( KTestSizeTotal, "SIZE-TOTAL" ); // X-Mms-Mbox-Totals, total size
+_LIT8( KTestMessageCount, "MESSAGE-COUNT" ); // X-Mms-Message-Count
+_LIT8( KTestAddKeyword, "ADD-KEYWORD" ); // X-Mms-MM-Flags
+_LIT8( KTestRemoveKeyword, "REMOVE-KEYWORD" ); // X-Mms-MM-Flags
+_LIT8( KTestFilterKeyword, "FILTER-KEYWORD" ); // X-Mms-MM-FLags
+_LIT8( KTestMMState, "MESSAGE-STATE" ); // X-Mms-MM-State
+_LIT8( KTestQuota, "QUOTA" ); // X-Mms-Quotas
+_LIT8( KTestStart, "START" ); // X-Mms-Start
+_LIT8( KTestStore, "STORE" ); // X-Mms-Store
+_LIT8( KTestStored, "STORED" ); // X-Mms-Stored
+_LIT8( KTestStoreStatus, "STORE-STATUS" ); // X-Mms-Store-Status
+_LIT8( KTestStoreStatusText, "STORE-STATUS-TEXT" ); // X-Mms-Store-Status-Text
+_LIT8( KTestTotals, "TOTALS" ); // X-Mms-Totals
+// Delete confirmation header structure
+// This consists of index, content location, response status and response status text.
+// All three values are not always necessary for each index, but at least content-location
+// and response status should be present.
+// The index retains its value until a new index is encountered.
+_LIT8( KTestDeleteInfoIndex, "DELETESTATUSINDEX" ); // index for next delete info fields
+// This header must precede content-location, response-status and response-text fields
+// in a delete confirmation. Index retains its value until a new index is encountered.
+
+// Element descriptor header not implemented
+
+// Application id headers
+// These will officially be supported in MMS encapsulation version 1.3
+// Java has non-standard support even earlier
+
+_LIT8( KTestApplicId, "APPLIC-ID" ); // X-Mms-Applic-ID
+_LIT8( KTestReplyApplicId, "REPLY-APPLIC-ID" ); // X-Mms-Reply-Applic-ID
+_LIT8( KTestApplicInfo, "AUX-APPLIC-INFO" ); // X-Mms-Aux-Applic-Info
+
+// Since Encapsulation 1.3
+_LIT8( KTestContentClass, "CONTENT-CLASS" ); // X-Mms-Content-Class
+_LIT8( KTestDrmContent, "DRM-CONTENT" ); // X-Mms-DRM-Content
+_LIT8( KTestAdaptationAllowed, "ADAPTATION-ALLOWED" ); // X-Mms-Adaptation-Allowed
+_LIT8( KTestRecommendedRetrievalMode, "REC-RETRIEVAL-MODE" ); // X-Mms-Recommended-Retrieval-Mode
+_LIT8( KTestRecRetrievalModeText, "REC-RETR-MODE-TEXT" ); // X-Mms-Recommended-Retrieval-Mode-Text
+_LIT8( KTestReplaceId, "REPLACE-ID" ); // X-Mms-Replace-ID
+_LIT8( KTestStatusText, "STATUS-TEXT" ); // X-Mms-Status-Text
+_LIT8( KTestCancelId, "CANCEL-ID" ); // X-Mms-Cancel-ID
+_LIT8( KTestCancelStatus, "CANCEL-STATUS" ); // X-Mms-Cancel-Status
+
+// DATA TYPES
+#define aSet 1
+#define aReset 0
+#define PartCount 100
+#define MaxAttaCount 10
+#define DefaultBufLen 256
+#define MaxRecipients 5
+
+// status returned by ReadRow
+enum TTestReadStatus
+ {
+ ETestUnknown,
+ ETestNewMessage,
+ ETestNewAttachment,
+ ETestEof, // End of file
+ ETestMessageType,
+ ETestDate,
+ ETestFrom,
+ ETestTo,
+ ETestCc,
+ ETestBcc,
+ ETestAlias,
+ ETestFromAlias,
+ ETestToAlias,
+ ETestCcAlias,
+ ETestBccAlias,
+ ETestSubject,
+ ETestExpiryRel,
+ ETestExpiryAbs,
+ ETestDeliveryTimeRel,
+ ETestDeliveryTimeAbs,
+ ETestPriority,
+ ETestSenderVisibility,
+ ETestDeliveryReport,
+ ETestReadReply,
+ ETestAttachmentType,
+// ETestAttachmentName,
+ ETestAttachmentCharset,
+ ETestAttachmentCid,
+ ETestAttachmentRoot,
+ ETestSettings,
+ ETestMessageClass,
+ ETestDelivReportSendAllow,
+ ETestSingleMessageClass,
+ ETestReplyCharging,
+ ETestReplyChargAbs,
+ ETestReplyChargRel,
+ ETestReplyChargSize,
+ ETestReplyChargID,
+ ETestTID,
+ ETestContentLocation,
+ ETestPreviouslySentIndex,
+ ETestPreviouslySentBy,
+ ETestPreviouslySentDate,
+ ETestMessageId,
+ ETestMessageSize,
+ ETestVersion,
+ ETestReadStatus,
+ ETestResponseStatus,
+ ETestResponseText,
+ ETestRetrieveStatus,
+ ETestRetrieveText,
+ ETestStatus,
+ ETestAttribute,
+ ETestDistributionIndicator,
+ ETestLimit,
+ ETestMessageQuota,
+ ETestSizeQuota,
+ ETestMessageTotal,
+ ETestSizeTotal,
+ ETestMessageCount,
+ ETestAddKeyword,
+ ETestRemoveKeyword,
+ ETestFilterKeyword,
+ ETestMMState,
+ ETestQuota,
+ ETestStart,
+ ETestStore,
+ ETestStored,
+ ETestStoreStatus,
+ ETestStoreStatusText,
+ ETestTotals,
+ ETestDeleteInfoIndex,
+ ETestApplicId,
+ ETestReplyApplicId,
+ ETestApplicInfo,
+ ETestContentClass,
+ ETestDrmContent,
+ ETestAdaptationAllowed,
+ ETestRecommendedRetrievalMode,
+ ETestRecRetrievalModeText,
+ ETestReplaceId,
+ ETestStatusText,
+ ETestCancelId,
+ ETestCancelStatus,
+ ETestAttaRecommendedName,
+ ETestAttachmentContLoc,
+ ETestAttContTypeParamName,
+ ETestAttContTypeParamValue,
+ ETestAttXTypeParamName,
+ ETestAttXTypeParamValue
+
+ };
+
+// VALUE KEYWORDS
+_LIT( KPersonal, "Personal" );
+_LIT( KAdvertisement, "Advertisement" );
+_LIT( KInformational, "Informational" );
+_LIT( KAuto, "Auto" );
+_LIT( KLow, "Low" );
+_LIT( KNormal, "Normal" );
+_LIT( KHigh, "High" );
+_LIT( KHide, "Hide" );
+_LIT( KShow, "Show" );
+_LIT( KYes, "Yes" );
+_LIT( KNo, "No" );
+_LIT( KOn, "On" );
+_LIT( KOff, "Off" );
+_LIT( KDeferred, "Deferred" );
+_LIT( KExpired, "Expired" );
+_LIT( KRetrieved, "Retrieved" );
+_LIT( KRejected, "Rejected" );
+_LIT( KUnrecognized, "Unrecognized" );
+_LIT( KIndeterminate, "Indeterminate" );
+_LIT( KForwarded, "Forwarded" );
+_LIT( KUnreachable, "Unreachable" );
+_LIT( KDraft, "Draft");
+_LIT( KSent, "Sent" );
+_LIT( KNew, "New" );
+// X-Mms-Message-Type
+_LIT( KSendReq, "SendReq" );
+_LIT( KSendConf, "SendConf" );
+_LIT( KNotifInd, "NotifInd" );
+_LIT( KNotifResp, "NotifResp" );
+_LIT( KRetrConf, "RetrConf" );
+_LIT( KAckInd, "AckInd" );
+_LIT( KDelInd, "DelInd" );
+_LIT( KReadReqInd, "ReadReqInd" );
+_LIT( KReadOrigInd, "ReadOrigInd" );
+_LIT( KForwardRec, "ForwardReq" );
+_LIT( KForwardConf, "ForwardConf" );
+_LIT( KMBoxStoreReq, "MBoxStoreReq" );
+_LIT( KMBoxStoreConf, "MBoxStoreConf" );
+_LIT( KMBoxViewReq, "MBoxViewReq" );
+_LIT( KMBoxViewConf, "MBoxViewConf" );
+_LIT( KMBoxUploadReq, "MBoxUploadReq" );
+_LIT( KMBoxUploadConf, "MBoxUploadConf" );
+_LIT( KMBoxDeleteReq, "MBoxDeleteReq" );
+_LIT( KMBoxDeleteConf, "MBoxDeleteConf" );
+_LIT( KMBoxDescr, "MBoxDescr" );
+_LIT( KDeleteReq, "DeleteReq" );
+_LIT( KDeleteConf, "DeleteConf" );
+_LIT( KCancelReq, "CancelReq" );
+_LIT( KCancelResp, "CancelConf" );
+// X-Mms-Read-Status
+_LIT( KRead, "Read" );
+_LIT( KDelNotRead, "DeletedNotRead" );
+// X-Mms-Reply-Charging
+_LIT( KRequested, "Requested" );
+_LIT( KReqTextOnly, "ReqTextOnly" );
+_LIT( KAccepted, "Accepted" );
+_LIT( KAccTextOnly, "AccTextOnly" );
+// X-Mms-Cancel-Status (only receival of request, not actual cancellation)
+_LIT( KCancelSuccessful, "CancelSuccess" );
+_LIT( KCancelCorrupted, "CancelCorrupted" );
+// X-Mms-Content-Class
+_LIT( KText, "Text" );
+_LIT( KImageBasic, "ImageBasic" );
+_LIT( KImageRich, "ImageRich" );
+_LIT( KVideoBasic, "VideoBasic" );
+_LIT( KVideoRich, "VideoRich" );
+_LIT( KMegaPixel, "MegaPixel" );
+_LIT( KContentBasic, "ContentBasic" );
+_LIT( KContentRich, "ContentRich" );
+// X-Mms-Recommended-Retrieval-Mode
+_LIT( KManual, "Manual" );
+
+//X-Mms-ResponseStatus
+// legacy values
+_LIT( KOk, "OK" );
+_LIT( KErrUnspecified, "Unspecified" );
+_LIT( KErrServiceDenied, "ServiceDenied" );
+_LIT( KErrMessageFormatCorrupt, "FormatCorrupt" );
+_LIT( KErrAddressUnresolved, "AddressUnresolved" );
+_LIT( KErrMessageNotFound, "MessageNotFound" );
+_LIT( KErrNetworkProblem, "NetworkProblem" );
+_LIT( KErrContentNotAccepted, "ContentNotAccepted" );
+_LIT( KErrUnsupportedMessage, "UnsupportedMessage" );
+// values since 1.1 (and 1.2)
+_LIT( KErrTransient, "TransientFailure" );
+_LIT( KErrTransientAddressUnresolved, "TransientAddressUnresolved" );
+_LIT( KErrTransientNotFound, "TransientMessageNotFound" );
+_LIT( KErrTransientNetworkproblem, "TransientNetworkProblem" );
+_LIT( KErrTransientPartialSuccess, "PartialSuccess" );
+_LIT( KErrPermanent, "PermanentFailure" );
+_LIT( KErrPermanentServiceDenied, "PermanentServiceDenied" );
+_LIT( KErrPermanentMessageFormatCorrupt, "PermanentFormatCorrupt" );
+_LIT( KErrPermanentAddressUnresolved, "PermanentAddressUnresolved" );
+_LIT( KErrPermanentNotFound, "PermanentMessageNotFound" );
+_LIT( KErrPermanentContentNotAccepted, "PermanentContentNotAccepted" );
+_LIT( KErrReplyChargingLimitNotMet, "ReplyChargingLimitNotMet" );
+_LIT( KErrReplyChargingRequestNotAccepted, "ReplyChargingRequestNotAccepted" );
+_LIT( KErrReplyChargingForwardingDenied, "ReplyChargingForwardingDenied" );
+_LIT( KErrReplyChargingNotSupported, "ReplyChargingNotSupported" );
+_LIT( KErrAddressHidingNotSupported, "AddressHidingNotSupported" );
+_LIT( KErrPermanentLackOfPrepaid, "PermanentLackOfPrepaid" );
+//X-Mms-RetrieveStatus (one extra value)
+_LIT( KErrRetrieveContentUnsupported, "PermanentContentUnsupported" );
+//X-Mms-Store-Status (one extra value)
+_LIT( KErrMMBoxFull, "MMBoxFull" );
+
+_LIT8( KTestContent, "Content" ); // For attribute list only
+_LIT8( KTestAdditionalHeaders, "ADDITIONAL-HEADERS" ); // For attribute list only
+_LIT8( KTestDeliveryTime, "DELIVERY-TIME"); // for attribute list only
+_LIT8( KTestExpiry, "EXPIRY"); // for attribute list only
+_LIT8( KTestReplyCharg, "REPLY-CHARG-DEADLINE" ); // for attribute list only
+_LIT8( KTestContentType, "CONTENT-TYPE" ); // for attribute list only
+
+/**
+* CMmsReadFile
+*/
+NONSHARABLE_CLASS( CMmsReadFile ):public CBase
+ {
+ public: // Constructors and destructor
+
+ static CMmsReadFile* NewL(RFs& aFs, RFileReadStream& aReadStream ); // Two-phased constructor.
+ virtual ~CMmsReadFile(); // Destructor
+
+ public: // New functions
+
+ TInt CompleteTestL(TInt aMessageCounter, CMmsHeaders& aMmsHeaders);
+ TTestReadStatus ReadRowL();
+ void CreateMessageL( CMmsClientMtm* aMmsClient, CMmsHeaders* aMmsHeaders );
+ TInt FindAlias(TPtrC alias);
+ void SetAttaStructure( TBool aOldAttaStructure = EFalse );
+
+ protected: // Functions from base classes
+
+ private:
+
+ CMmsReadFile(); // C++ default constructor.
+ // By default constructor is private.
+ void ConstructL( RFs& aFs, RFileReadStream& aReadStream );
+ void Reset();
+
+ public: // data
+ TInt iMessageType;
+
+
+ private: // Data
+
+ RFs iFs;
+ RFileReadStream* iReader;
+ TBuf<DefaultBufLen> iValueBuffer;
+ CDesCArray* iAliasArray; // aliases
+ HBufC8* iByteBuffer;
+ TTime iDate;
+ CArrayPtrFlat<CMmsAttaStructure>* iAttaStructures;
+ TInt iAttaCount;
+ TInt iAttaRoot;
+ TInt iAliasCount;
+ TInt iNextMessageType;
+ TParse iParse;
+ TFileName iFilename;
+
+ protected: // Data
+ private: // Data
+
+ // CArrayFixFlat <TestMessage>* iMessages;
+
+ public: // Friend classes
+ protected: // Friend classes
+ private: // Friend classes
+
+ };
+
+
+NONSHARABLE_CLASS( CMmsAttaStructure ):public CBase
+ {
+ public: // Constructors and destructor
+ static CMmsAttaStructure* NewL(); // Two-phased constructor.
+ virtual ~CMmsAttaStructure(); // Destructor
+ private:
+ CMmsAttaStructure(); // C++ default constructor.
+ // By default constructor is private.
+ void ConstructL();
+
+ public: // Data
+ HBufC8* iAtta;
+ HBufC8* iAttaName; // content location
+ HBufC8* iAttaType;
+ HBufC8* iAttaCid;
+ TInt iAttaCharset;
+ HBufC* iAttaRecommendedName; // recommended filename
+ CDesC8ArrayFlat* iContentTypeParams; // zero or more "parameter"
+ CDesC8ArrayFlat* iXTypeParams; // zero or more X-Type "parameters"
+
+ };
+
+
+#endif // MMSREADFILE_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgnotifications/msgnotifier/tsrc/mmstestbed/inc/mmstestbed.h Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,151 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ */
+
+#ifndef MMSTESTBED_H
+#define MMSTESTBED_H
+
+#ifdef BUILD_MMSTESTBED_DLL
+#define MMSTESTBED_EXPORT Q_DECL_EXPORT
+#else
+#define MMSTESTBED_EXPORT Q_DECL_IMPORT
+#endif
+
+#include <QObject>
+#include <QString>
+
+#include <msvids.h> //for consts like KMsvNullIndexEntryIdValue
+#include <MSVAPI.H>
+#include <MTCLREG.H>
+#include <mmsclient.h>
+//#include <mmsservercommon.h>
+
+class CTestUiTimer;
+class CMsvSession;
+class CMmsClientMtm;
+class CMmsSettings;
+class CMmsHeaders;
+class CLogEvent;
+class CLogViewEvent;
+class CLogFilter;
+class CLogClient;
+
+class MMSTESTBED_EXPORT MmsTestBed : public QObject, public MMsvSessionObserver
+ {
+ Q_OBJECT
+
+public:
+ /**
+ *
+ */
+ MmsTestBed();
+ ~MmsTestBed();
+ void setConnectionLocal(bool value);
+ void fromOutboxToMmsc();
+ void fromMmscToInbox();
+ /**
+ * cleanup MMS service
+ */
+ void cleanupAndCreateNewService();
+ void deleteNotifications();
+ void restoreFactorySettings();
+ void setFetchingState( TMmsReceivingMode aState );
+ void sendFromFile();
+ void sendOneByOne();
+ void sendNotifications();
+ void copyDrafts();
+ void garbageCollection(TUint32 aReason = 0x00000001); //0x00000001 == KMmsReasonBoot
+ void messageVariation();
+ void cancelSendScheduling();
+ void scheduledSend(TMsvId aBoxId, TInt aDelay = 5);
+ void deleteSendSchedule();
+ void cancelFetchScheduling();
+ void fetchForced(TInt aDelay = 5);
+ void deleteFetchSchedule();
+ void doAFetchCycle();
+ void createEntry(TMsvEntry& aNewEntry, CMsvEntry& aClientEntry);
+ void cleanOutbox();
+ void cleanInbox();
+ void cleanSent();
+ void cleanDrafts();
+ void cleanAll();
+ void reply();
+ void replyToAll();
+ void forward();
+ void sendReadReport(); // send a read report
+ int fromOutboxToMmscWithMemoryFailure(); // returns memory failure count
+ int fromMmscToInboxWithMemoryFailure(); // returns memory failure count
+ void sendViaClient();
+ void scheduledFetch(TInt aDelay = 5);
+ void fetchForcedImmediate();
+ void getEventType();
+ void addEventType();
+ void deleteEventType();
+ void cleanLog();
+ void setOnline(bool value);
+ void generateDeliveryReport( CMmsHeaders* aMmsHeaders );
+ void sendDeliveryReport();
+
+signals:
+ void entryCreatedInDraft(long int id);
+ void entryMovedToOutbox(long int id);
+ void entryMovedToSent(long int id);
+ void entryCreatedInInbox(long int id);
+
+protected:
+ /**
+ * From MMsvSessionObserver
+ */
+ void HandleSessionEventL(TMsvSessionEvent aEvent, TAny* aArg1,
+ TAny* aArg2, TAny* aArg3);
+
+private:
+ void findDefaultL();
+ void createMmsService();
+ void cleanup();
+ void deleteEntry(TMsvId aEntryId, CMsvEntry& aClientEntry);
+ void testFile(TFileName& aFilePath, TInt aCommand = 0, TMsvId aBox = KMsvGlobalOutBoxIndexEntryId);
+ void addMMBoxDescriptions();
+ void encodeMessageFromDrafts();
+ TMsvId findMMSFolder();
+ bool checkLogClient();
+ int getLogEntries();
+
+private:
+ //data
+ CTestUiTimer* iTimer;
+ CMsvOperationActiveSchedulerWait* iWait;
+ CMsvSession* iSession;
+ CClientMtmRegistry* iClientMtmRegistry;
+ CMmsClientMtm* iMmsClient;
+ CMmsSettings* iSettings;
+ CMmsHeaders* iMmsHeaders;
+ TMsvId iServiceId;
+ TMsvId iDefaultServiceId;
+ TMsvSessionEvent iEvent;
+ RFs iFs;
+ TFileName iFilename;
+ TFileName iCurrentFile;
+ TFileName iCurrentPath;
+ TParse iParse; // parse buffer as member to save stack space
+ CBufFlat* iEncodeBuffer;
+ CMsvEntrySelection* iMsvEntrySelection;
+ CLogEvent* iLogEvent;
+ CLogClient* iLogClient;
+ CLogViewEvent* iLogView;
+ CLogFilter* iLogFilter;
+ };
+
+#endif // MMSTESTBED_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgnotifications/msgnotifier/tsrc/mmstestbed/inc/mmstestbed.hrh Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,131 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ */
+
+#include <bldvariant.hrh>
+
+
+#ifndef MMSTESTBED_HRH
+#define MMSTESTBED_HRH
+
+enum
+{
+ EAppMainOk = 1,
+ EAppMainCancel,
+ //
+ EMenufrmCmdCascadeTest,
+ ECleanup,
+ ECleanOutbox,
+ ESaveSettings,
+ ELoadSettings,
+ ECleanInbox,
+ EShowIn,
+ EShowOut,
+ EOutToMMSC,
+ EMMSCToIn,
+ ESendScheduled,
+ EReceiveScheduled,
+ EShowSent,
+ ECleanSent,
+ EStartMyNotifier,
+ EGetEventType,
+ EAddEventType,
+ EDeleteEventType,
+ EViewLog,
+ ECleanLog,
+ EShowWapAccessPoints,
+ ESelectWapAccessPoint,
+ EShowConnectionMode,
+ EShowIAP,
+ EConnectToIAP,
+ EDeleteSendSchedule,
+ EDeleteReceiveSchedule,
+ EDeleteNotifications,
+ ERestoreFactorySettings,
+ ECreateFromFile,
+ EShowNotifications,
+ ESendDeliveryReport,
+ EShowDrafts,
+ ECleanDrafts,
+ ECleanAll,
+ EFetchingDeferred,
+ EFetchingOn,
+ ESendFromFile,
+ ESwitchToLocal,
+ ESwitchToGlobal,
+ EDecodeLoggingOn,
+ EDecodeLoggingOff,
+ EBinaryDumpOn,
+ EBinaryDumpOff,
+ ESendNotification,
+ ECreateToInbox,
+ ECreateToSentItems,
+ ESendFromDrafts,
+ EFindMMSFolder,
+ ESendOneByOne,
+ ECreateToDrafts,
+ ESendViaClient,
+ ESendMemFail,
+ EFetchMemFail,
+ EReceiveForced,
+ ECreateHeadersFromFile,
+ ESwitchToOffline,
+ ESwitchToOnline,
+ ECopyDrafts,
+ ECreateNotification,
+ EReply,
+ EReplyToAll,
+ EForward,
+ EFetchingManual,
+ EFirstBoot,
+ ENoFirstBoot,
+ EFindNetworkStatus,
+ ESendReadReport,
+ ECreateMMBoxViewConf,
+ EGetMMBoxView,
+ ECleanMMBox,
+ EShowMMBox
+};
+
+#define ETestLabel1 1
+#define ETestLabel2 2
+#define ETestLabel3 3
+#define ETestLabel4 4
+
+#define EServiceList 2
+
+
+enum TTestBedDlgCtrlIds
+ {
+ ETestEditField = 1
+ };
+
+enum TEditServiceControls
+ {
+ EFolderLabel = 1,
+ EEditUri
+// EEditServiceFolder,
+// ENameLabel,
+// EEditServiceName,
+// ENumberLabel,
+// EEditServiceNumber
+ };
+
+enum
+ {
+ EFsViewDialogId = 1
+ };
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgnotifications/msgnotifier/tsrc/mmstestbed/inc/mmsteststaticutils.h Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,203 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ */
+
+#ifndef MMSTESTSTATICUTILS_H
+#define MMSTESTSTATICUTILS_H
+
+#include <e32std.h>
+#include <msvstd.h>
+#include <badesca.h>
+
+#include "mmsconst.h"
+
+class RFs;
+class CMsvSession;
+class CMmsEncode;
+class CMmsHeaders;
+
+#ifdef __WINS__
+_LIT( KRootPath, "c:\\" );
+#else
+// This is removable disk.
+// drive letter should not be hard coded, must be investigated further
+// We use c: for a while for the tests (to be cahnged later)
+_LIT( KRootPath, "c:\\" );
+//_LIT( KRootPath, "e:\\" );
+#endif
+
+// directory where mmbox descriptions are created
+_LIT( KMmsMMBoxDescriptionDirectory, "C:\\mmsmmboxdescriptions\\");
+// directory where created headers are dumped
+_LIT( KMmsDumpDirectory, "C:\\mmsdump\\");
+// content type of MMS PDUs
+_LIT8( KMmsMimeType, "application/vnd.wap.mms-message" );
+
+_LIT( KWild, "*" );
+
+
+/**
+ * joined array structure
+ *
+ */
+NONSHARABLE_CLASS( TMmsJoinedArrays ): public MDesCArray
+ {
+public:
+ TMmsJoinedArrays(CDesCArray* const & aArray1, CDesCArray* const & aArray2);
+ TInt MdcaCount() const;
+ TPtrC16 MdcaPoint(TInt aIndex) const;
+private:
+ CDesCArray* const & iArray1;
+ CDesCArray* const & iArray2;
+ };
+
+/**
+ * static utility functions
+ *
+ */
+class TMmsTestUtils
+ {
+
+public:
+
+ /**
+ *
+ */
+ TMmsTestUtils();
+
+ /**
+ * read phone number for sending messages
+ *
+ * @param aFileName full path for filename
+ * @param aFs file system handle
+ * @return allocated pointer containing the name
+ * The caller must delete the pointer when no longer needed
+ */
+ static HBufC* ReadContactFromFileL( TDesC& aFileName, RFs& aFs );
+
+ static void DecodeLoggingOnL();
+ static void DecodeLoggingOffL();
+ static void BinaryDumpOnL();
+ static void BinaryDumpOffL();
+
+ /**
+ * Clean all temporary directories used in local mode.
+ * Does not delete the directories, only the contents
+ *
+ * @param aFs file system handle
+ */
+ static void CleanDirectoryL( RFs& aFs );
+
+ /**
+ * Dump a binary message
+ *
+ * @param aBuffer buffer containing the binary message
+ * @param aFilename full path of the directory whenre the dump goes
+ * @param aParse reference to parser (to save stack space)
+ * @param aFs file system handle
+ */
+ static void Dump(
+ CBufFlat& aBuffer, TFileName& aFilename, TParse& aParse, RFs& aFs );
+
+ /**
+ * Delete all MMS messages and notifications from a given folder
+ *
+ * @param aBoxId folder id
+ * @param aSession Messaging server session
+ */
+ static void CleanBoxL(TMsvId aBoxId, CMsvSession& aSession);
+
+ /**
+ * turn on logging messages sent to email addresses
+ */
+ static void EmailLoggingOnL();
+
+ /**
+ * turn off logging messages sent to email addresses
+ */
+ static void EmailLoggingOffL();
+
+ /**
+ * load list of children into selection and return count
+ *
+ * @param aBoxId folder id
+ * @param aMsvEntrySelection reference to a pointer that will contain the list of child ids
+ * caller is responsible of deleting the pointer afterwards.
+ * Pointer may be NULL at entry, and a new pointer will be allocated
+ * @param aSession messge server session
+ * @param aMessageType child MTM type, default is multimedia message
+ * @return number of entries in selection
+ */
+ static TInt CountChildrenL(
+ TMsvId aBoxId,
+ CMsvEntrySelection*& aMsvEntrySelection,
+ CMsvSession& aSession,
+ TUid aMessageType = KUidMsgTypeMultimedia);
+
+ /**
+ * Create a folder entry
+ *
+ * @param aSession messge server session
+ * @param aParentFolder the parent folder
+ * @param aFolderName name of the folder
+ * @param aFolderId will contain the if of the new folder if creation was successful
+ */
+ static void CreateFolderEntryL(
+ CMsvSession& aSession,
+ TMsvId aParentFolder,
+ const TDesC& aFolderName,
+ TMsvId& aFolderId );
+
+ /**
+ * Create an MMS notification from data in buffer
+ * @param aNotificationFolder mms notification folder (target folder)
+ * @param aServiceId id of MMS service
+ * @param aEncodeBuffer buffer that contains the data
+ * @param aSession message server session
+ * @return id of the created notification
+ */
+ static TMsvId CreateNotificationEntryL(
+ TMsvId aNotificationFolder,
+ TMsvId aServiceId,
+ CBufFlat* aEncodeBuffer,
+ CMsvSession& aSession );
+
+ /**
+ * Encode an MMS notification into buffer
+ * @param aUrl url of the notification for local messages a filepath
+ * @param aSize size of the message
+ * @param aMmsHeaders MMS headers structure for creating the notification
+ * @param aMmsEncoder reference to CMmsEncode class
+ * @param aEncodeBuffer flat buffer that will contain the encoded notification
+ */
+ static void FormNotification(
+ TDesC8& aUrl,
+ TInt aSize,
+ CMmsHeaders& aMmsHeaders,
+ CMmsEncode& aMmsEncoder,
+ CBufFlat* aEncodeBuffer );
+
+
+ static TBool IsDrive(const TDesC& aFileName);
+ static TBool IsDir(const TDesC& aFileName, RFs& aFs);
+ static TBool IsFile(const TDesC& aFileName, RFs& aFs);
+
+
+private:
+
+ };
+
+
+#endif // MMSTESTSTATICUTILS_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgnotifications/msgnotifier/tsrc/mmstestbed/inc/mmstestuitimer.h Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ */
+
+#ifndef C_TESTUITIMER_H
+#define C_TESTUITIMER_H
+
+
+#include <e32base.h>
+
+#define KPeriod 10000 // period of timer
+
+/**
+ * timer for test programs
+ */
+NONSHARABLE_CLASS( CTestUiTimer ): public CTimer
+ {
+public:
+
+ static CTestUiTimer* NewL();
+ virtual ~CTestUiTimer();
+
+ void RunL();
+ void DoCancel();
+ void ConstructL();
+ void IssueRequest();
+ void TimeoutOperation(CActive* aObject, TTimeIntervalSeconds aTimeoutInSeconds);
+
+private:
+ CTestUiTimer();
+
+public:
+ TTimeIntervalMicroSeconds32 period;
+
+private: // data
+ CActive* iObject;
+ };
+
+#endif // C_TESTUITIMER_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgnotifications/msgnotifier/tsrc/mmstestbed/mmstestbed.pro Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,84 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+QT += testlib
+QT -= gui
+
+TEMPLATE = lib
+
+TARGET = mmstestbed
+
+INCLUDEPATH += .
+INCLUDEPATH += inc
+INCLUDEPATH += ../../inc
+
+INCLUDEPATH += ../../../../../mmsengine/inc
+INCLUDEPATH += ../../../../../mmsengine/mmsserver/inc
+INCLUDEPATH += ../../../../../mmsengine/mmsmessage/inc
+INCLUDEPATH += ../../../../../mmsengine/mmscodec/inc
+INCLUDEPATH += ../../../../../inc
+INCLUDEPATH += ../../../../../mmsengine/mmsengine/inc
+INCLUDEPATH += ../../../../../../../mmsengine/inc
+INCLUDEPATH += ../../../../../../../mmsengine/mmscodec/inc
+INCLUDEPATH += ../../../../../../../mmsengine/mmshttptransport/inc
+INCLUDEPATH += ../../../../../../../mmsengine/mmsmessage/inc
+INCLUDEPATH += ../../../../../../../mmsengine/mmsconninit/inc
+#INCLUDEPATH += ../../../mmsengine/mmscodec/inc
+INCLUDEPATH += ../../../../../../../mmsengine/mmsserver/inc
+INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+
+DEFINES += BUILD_MMSTESTBED_DLL
+
+SOURCES += src/mmstestbed.cpp \
+ src/mmsteststaticutils.cpp \
+ src/mmsreadfile.cpp \
+ src/mmstestuitimer.cpp
+
+HEADERS += inc/mmstestbed.h \
+ inc/mmsteststaticutils.h \
+ inc/mmsreadfile.h \
+ inc/mmstestuitimer.h \
+ inc/mmstestbed.hrh
+
+SYMBIAN_PLATFORMS = WINSCW ARMV5
+
+symbian {
+ TARGET.CAPABILITY = CAP_GENERAL_DLL
+ TARGET.EPOCSTACKSIZE = 0x8000
+ TARGET.EPOCHEAPSIZE = 0x1000 0x1F00000
+ TARGET.EPOCALLOWDLLDATA = 1
+ }
+
+# Build.inf rules
+BLD_INF_RULES.prj_exports += \
+ "$${LITERAL_HASH}include <platform_paths.hrh>"
+
+LIBS += -lmsgs \
+ -lmmsmessage \
+ -lmmsconninit \
+ -lmmscodec \
+ -lmmsserversettings \
+ -lcentralrepository \
+ -lapparc \
+ -lbafl \
+ -lefsrv \
+ -lesock \
+ -lestor \
+ -leuser \
+ -llogcli \
+ -llogwrap \
+ -lapgrfx \
+ -lapmime
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgnotifications/msgnotifier/tsrc/mmstestbed/src/mmsreadfile.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,1799 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ */
+
+// INCLUDE FILES
+#include <e32base.h>
+#include <badesca.h>
+#include <e32def.h>
+#include <s32file.h>
+#include <msvids.h>
+#include <mtmdef.h>
+//#include <eikenv.h>
+#include <apgcli.h>
+#include <CMsvMimeHeaders.h>
+#include <AknNoteWrappers.h>
+
+#include <mmsservercommon.h>
+#include "mmsconst.h"
+#include "mmsclient.h"
+#include "mmsheaders.h"
+#include "mmsreadfile.h"
+#include "mmsmmboxviewheaders.h"
+#include "mmsmmboxmessageheaders.h"
+#include "mmsmmboxflags.h"
+#include "mmssettings.h"
+
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES
+
+// CONSTANTS
+const TInt KMmsGranularity = 8;
+_LIT( K1970, "19700000:000000.000000" ); // 1-Jan 1970 0:00:00
+
+
+// MACROS
+
+// LOCAL CONSTANTS AND MACROS
+
+// MODULE DATA STRUCTURES
+
+// LOCAL FUNCTION PROTOTYPES
+
+// ==================== LOCAL FUNCTIONS ====================
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//
+CMmsReadFile::CMmsReadFile()
+ {
+ // all member variables in a class derived from CBase
+ // are automatically set to 0.
+ }
+
+
+//
+void CMmsReadFile::ConstructL(RFs& aFs, RFileReadStream& aReadStream )
+ {
+ // iRowBuffer = HBufC8::NewMaxL( 500 ); // Max row length!!!!
+ iFs = aFs;
+ iReader = &aReadStream;
+ iByteBuffer = HBufC8::NewL( DefaultBufLen );
+ iAliasArray = new ( ELeave ) CDesCArrayFlat( KMmsGranularity );
+ iAttaStructures = new ( ELeave ) CArrayPtrFlat<CMmsAttaStructure>( KMmsGranularity );
+ Reset();
+ }
+
+// Two-phased constructor.
+CMmsReadFile* CMmsReadFile::NewL(RFs& aFs, RFileReadStream& aReadStream )
+ {
+ CMmsReadFile* self = new ( ELeave ) CMmsReadFile();
+ CleanupStack::PushL( self );
+ self->ConstructL( aFs, aReadStream );
+ CleanupStack::Pop();
+ return self;
+ }
+
+
+// Destructor
+CMmsReadFile::~CMmsReadFile()
+ {
+ Reset(); // resets and destroys all array data
+ if (iAliasArray != NULL) iAliasArray->Reset();
+ delete iByteBuffer;
+ delete iAliasArray;
+ delete iAttaStructures;
+ }
+
+void CMmsReadFile::Reset()
+ {
+ // reset all arrays
+ if (iAttaStructures != NULL) iAttaStructures->ResetAndDestroy();
+ iAttaCount = 0;
+ iAttaRoot = 0;
+ }
+
+// ---------------------------------------------------------
+// CMmsReadFile()::CompleteTest
+// ---------------------------------------------------------
+//
+TInt CMmsReadFile::CompleteTestL( TInt aMessageCounter, CMmsHeaders& aMmsHeaders )
+{
+ Reset(); // new message
+
+ TUint32 val;
+ TUint limit = 1000000;
+ TUint sizeLimit = 1000 * 1024; //max message size 1000 kB!
+ TUint allLimit = 999999;
+ TInt error;
+ TRadix radix = EDecimal;
+ TLex16 lex;
+ TTestReadStatus readStatus = ETestUnknown;
+ CMmsAttaStructure* oneAtta = NULL;
+ TInt index;
+ TTime y1970( K1970 );
+ TTimeIntervalMicroSeconds interval;
+ TTime date;
+ TInt order = 0;
+ TInt16 shortInteger = 0;
+
+ //iso luuppi, joka kiertää ja lukee kunnes EOF tule vastaan
+ //Big Loop, which passes around and read until the EOF
+
+ iMessageType = iNextMessageType;
+ while(readStatus != ETestEof)
+ {
+ readStatus = ReadRowL();
+ if ( readStatus == ETestEof )
+ {
+ return(-1);
+ }
+ if ( readStatus == ETestUnknown )
+ {
+ // A line containing only comments, or an unknown tag
+ // As using the scripts to test settings is no longer supported,
+ // any old keywords used to test CMmsSettings class are ignored
+ continue;
+ }
+ if( readStatus == ETestNewMessage )
+ {
+ iNextMessageType = readStatus;
+ if(aMessageCounter++)
+ {
+ return(NULL);
+ }
+ else
+ {
+ iMessageType = iNextMessageType;
+ continue;
+ }
+ }
+ if ( iMessageType == ETestNewMessage)
+ {
+ switch(readStatus)
+ {
+ case ETestFrom:
+ aMmsHeaders.SetSenderL( iValueBuffer );
+ break;
+ case ETestFromAlias:
+ index = FindAlias(iValueBuffer);
+ if(index >= 0)
+ {
+ aMmsHeaders.SetSenderL( iAliasArray->MdcaPoint(index).Mid(iAliasArray->MdcaPoint(index).Locate('=') + 1 ) );
+ }
+ break;
+ case ETestTo:
+ aMmsHeaders.AddTypedAddresseeL( iValueBuffer, EMsvRecipientTo );
+ break;
+ case ETestToAlias:
+ index = FindAlias(iValueBuffer);
+ if(index >= 0)
+ {
+ aMmsHeaders.AddTypedAddresseeL( iAliasArray->MdcaPoint(index).Mid(iAliasArray->MdcaPoint(index).Locate('=') + 1 ), EMmsTo );
+ }
+ break;
+ case ETestCc:
+ aMmsHeaders.AddTypedAddresseeL( iValueBuffer, EMsvRecipientCc );
+ break;
+ case ETestCcAlias:
+ index = FindAlias(iValueBuffer);
+ if(index >= 0)
+ {
+ aMmsHeaders.AddTypedAddresseeL( iAliasArray->MdcaPoint(index).Mid(iAliasArray->MdcaPoint(index).Locate('=') + 1 ), EMmsCc );
+ }
+ break;
+ case ETestBcc:
+ aMmsHeaders.AddTypedAddresseeL( iValueBuffer, EMsvRecipientBcc );
+ break;
+ case ETestBccAlias:
+ index = FindAlias(iValueBuffer);
+ if(index >= 0)
+ {
+ aMmsHeaders.AddTypedAddresseeL( iAliasArray->MdcaPoint(index).Mid(iAliasArray->MdcaPoint(index).Locate('=') + 1 ), EMmsBcc );
+ }
+ break;
+ case ETestSubject:
+ aMmsHeaders.SetSubjectL( iValueBuffer );
+ break;
+ case ETestExpiryRel:
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,radix,limit);
+ if (error == KErrNone)
+ {
+ aMmsHeaders.SetExpiryInterval( val );
+ }
+ break;
+ case ETestExpiryAbs:
+ error = iDate.Set(iValueBuffer);
+ interval = iDate.MicroSecondsFrom( y1970 );
+ // expiry date in seconds from 1.1.1970.
+ aMmsHeaders.SetExpiryDate( (interval.Int64())/1000000 );
+ break;
+ case ETestDeliveryTimeRel:
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,radix,limit);
+ if (error == KErrNone)
+ {
+ aMmsHeaders.SetDeliveryTimeInterval( val );
+ }
+ break;
+ case ETestDeliveryTimeAbs:
+ error = iDate.Set(iValueBuffer);
+ interval = iDate.MicroSecondsFrom( y1970 );
+ aMmsHeaders.SetDeliveryDate( (interval.Int64())/1000000 );
+ break;
+ case ETestDate:
+ error = iDate.Set(iValueBuffer);
+ interval = iDate.MicroSecondsFrom( y1970 );
+ aMmsHeaders.SetDate( (interval.Int64())/1000000 );
+ case ETestPriority:
+ val = 0;
+ if ((iValueBuffer.CompareF(KLow)) == 0)
+ {
+ val = EMmsPriorityLow;
+ }
+ else if ((iValueBuffer.CompareF(KNormal)) == 0)
+ {
+ val = EMmsPriorityNormal;
+ }
+ else if ((iValueBuffer.CompareF(KHigh)) == 0)
+ {
+ val = EMmsPriorityHigh;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetMessagePriority( val );
+ break;
+ case ETestSenderVisibility:
+ val = 0;
+ if ((iValueBuffer.CompareF(KHide)) == 0)
+ {
+ val = EMmsSenderVisibilityHide;
+ }
+ else if ((iValueBuffer.CompareF(KShow)) == 0)
+ {
+ val = EMmsSenderVisibilityShow;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetSenderVisibility( val );
+ break;
+ case ETestDeliveryReport:
+ val = 0;
+ if ((iValueBuffer.CompareF(KYes)) == 0)
+ {
+ val = EMmsYes;
+ }
+ else if ((iValueBuffer.CompareF(KNo)) == 0)
+ {
+ val = EMmsNo;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetDeliveryReport( val );
+ break;
+ case ETestDelivReportSendAllow:
+ val = 0;
+ if ((iValueBuffer.CompareF(KYes)) == 0)
+ {
+ val = EMmsYes;
+ }
+ else if ((iValueBuffer.CompareF(KNo)) == 0)
+ {
+ val = EMmsNo;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetReportAllowed( val );
+ break;
+
+ case ETestReadReply:
+ val = 0;
+ if ((iValueBuffer.CompareF(KYes)) == 0)
+ {
+ val = EMmsYes;
+ }
+ else if ((iValueBuffer.CompareF(KNo)) == 0)
+ {
+ val = EMmsNo;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetReadReply( val );
+ break;
+ case ETestNewAttachment:
+ oneAtta = CMmsAttaStructure::NewL();
+ iAttaStructures->AppendL(oneAtta);
+ oneAtta->iAtta->Des().Copy( iValueBuffer );
+ iAttaCount++;
+ break;
+ case ETestAttachmentType:
+ if (oneAtta != NULL)
+ {
+ oneAtta->iAttaType->Des().Copy( iValueBuffer );
+ }
+ break;
+ case ETestAttachmentContLoc:
+ if (oneAtta != NULL)
+ {
+ oneAtta->iAttaName->Des().Copy( iValueBuffer );
+ }
+ break;
+ case ETestAttaRecommendedName:
+ if (oneAtta != NULL)
+ {
+ oneAtta->iAttaRecommendedName->Des().Copy( iValueBuffer );
+ }
+ break;
+ case ETestAttachmentCharset:
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,radix,limit);
+ if (error == KErrNone)
+ {
+ if (oneAtta != NULL)
+ {
+ oneAtta->iAttaCharset = val;
+ }
+ }
+ break;
+ case ETestAttachmentCid:
+ if (oneAtta != NULL)
+ {
+ oneAtta->iAttaCid->Des().Copy(iValueBuffer);
+ }
+ break;
+ case ETestAttContTypeParamName:
+ iByteBuffer->Des().Copy( iValueBuffer );
+ if (oneAtta != NULL)
+ {
+ oneAtta->iContentTypeParams->AppendL(iByteBuffer->Des());
+ }
+ break;
+ case ETestAttContTypeParamValue:
+ iByteBuffer->Des().Copy( iValueBuffer );
+ if (oneAtta != NULL)
+ {
+ oneAtta->iContentTypeParams->AppendL(iByteBuffer->Des());
+ }
+ break;
+ case ETestAttXTypeParamName:
+ iByteBuffer->Des().Copy( iValueBuffer );
+ if (oneAtta != NULL)
+ {
+ oneAtta->iXTypeParams->AppendL(iByteBuffer->Des());
+ }
+ break;
+ case ETestAttXTypeParamValue:
+ iByteBuffer->Des().Copy( iValueBuffer );
+ if (oneAtta != NULL)
+ {
+ oneAtta->iXTypeParams->AppendL(iByteBuffer->Des());
+ }
+ break;
+ case ETestAttachmentRoot:
+ iAttaRoot = iAttaCount;
+ break;
+ case ETestAlias:
+ // all aliases are global even if they appear
+ // in the middle of a message
+ iAliasArray->AppendL( iValueBuffer );
+ iAliasCount++;
+ break;
+ case ETestMessageClass: // should be handled!
+ val = EMmsClassPersonal;
+ if ((iValueBuffer.CompareF(KPersonal)) == 0)
+ {
+ val = EMmsClassPersonal;
+ }
+ else if ((iValueBuffer.CompareF(KAdvertisement)) == 0)
+ {
+ val = EMmsClassAdvertisement;
+ }
+ else if ((iValueBuffer.CompareF(KInformational)) == 0)
+ {
+ val = EMmsClassInformational;
+ }
+ else if ((iValueBuffer.CompareF(KAuto)) == 0)
+ {
+ val = EMmsClassAuto;
+ }
+ else
+ {
+ val = (TMmsMessageClass)KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetMessageClass( val );
+ break;
+ case ETestReplyCharging:
+ val = 0;
+ if ((iValueBuffer.CompareF(KRequested)) == 0)
+ {
+ val = KMmsReplyChargingRequested;
+ }
+ else if ((iValueBuffer.CompareF(KReqTextOnly)) == 0)
+ {
+ val = KMmsReplyChargingRequestedTextOnly;
+ }
+ else if ((iValueBuffer.CompareF(KAccepted)) == 0)
+ {
+ val = KMmsReplyChargingAccepted;
+ }
+ else if ((iValueBuffer.CompareF(KAccTextOnly)) == 0)
+ {
+ val = KMmsReplyChargingAcceptedTextOnly;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetReplyCharging( val );
+ break;
+ case ETestReplyChargAbs:
+ error = date.Set(iValueBuffer);
+ if ( error == KErrNone )
+ {
+ interval = date.MicroSecondsFrom( y1970 );
+ aMmsHeaders.SetReplyChargingDate( (interval.Int64())/1000000 );
+ }
+ break;
+ case ETestReplyChargRel:
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,radix,limit);
+ if (error == KErrNone)
+ {
+ aMmsHeaders.SetReplyChargingInterval( val );
+ }
+ break;
+ case ETestReplyChargSize:
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,radix,sizeLimit);
+ if (error == KErrNone)
+ {
+ aMmsHeaders.SetReplyChargingSize( val );
+ }
+ break;
+ case ETestReplyChargID:
+ iByteBuffer->Des().Copy( iValueBuffer );
+ aMmsHeaders.SetReplyChargingIdL( iByteBuffer->Des() );
+ break;
+ case ETestTID:
+ iByteBuffer->Des().Copy( iValueBuffer );
+ aMmsHeaders.SetTidL( iByteBuffer->Des() );
+ break;
+ case ETestContentLocation:
+ iByteBuffer->Des().Copy( iValueBuffer );
+ if ( aMmsHeaders.MessageType() == KMmsMessageTypeMboxViewReq ||
+ aMmsHeaders.MessageType() == KMmsMessageTypeMboxViewConf ||
+ aMmsHeaders.MessageType() == KMmsMessageTypeMBoxDeleteReq )
+ {
+ aMmsHeaders.MMBoxMessageHeadersL().ContentLocationList().AppendL( iByteBuffer->Des() );
+ }
+ else if ( aMmsHeaders.MessageType() == KMmsMessageTypeMBoxDeleteConf )
+ {
+ aMmsHeaders.InsertDeleteContentLocationL( order, iByteBuffer->Des() );
+ }
+ else
+ {
+ aMmsHeaders.SetContentLocationL( iByteBuffer->Des() );
+ }
+ break;
+ case ETestPreviouslySentIndex:
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,radix,limit);
+ order = val;
+ break;
+ case ETestPreviouslySentBy:
+ aMmsHeaders.InsertPreviouslySentByL( order, iValueBuffer );
+ break;
+ case ETestPreviouslySentDate:
+ error = date.Set(iValueBuffer);
+ if ( error == KErrNone )
+ {
+ interval = date.MicroSecondsFrom( y1970 );
+ aMmsHeaders.InsertPreviouslySentDateL( order, (interval.Int64())/1000000 );
+ }
+ break;
+ case ETestMessageId:
+ iByteBuffer->Des().Copy( iValueBuffer );
+ aMmsHeaders.SetMessageIdL( iByteBuffer->Des() );
+ break;
+ case ETestMessageSize:
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,radix,sizeLimit);
+ if (error == KErrNone)
+ {
+ aMmsHeaders.SetMessageSize( val );
+ }
+ break;
+ case ETestVersion:
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,EHex,limit);
+ shortInteger = TInt16( val );
+ if (error == KErrNone)
+ {
+ aMmsHeaders.SetMmsVersion( shortInteger );
+ }
+ break;
+ case ETestReadStatus:
+ val = 0;
+ if ((iValueBuffer.CompareF(KRead)) == 0)
+ {
+ val = KMmsReadStatusRead;
+ }
+ else if ((iValueBuffer.CompareF(KDelNotRead)) == 0)
+ {
+ val = KMmsReadStatusDeletedWithoutBeingRead;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetReadStatus( val );
+ break;
+ case ETestResponseStatus:
+ val = 0;
+ if ((iValueBuffer.CompareF(KOk)) == 0)
+ {
+ val = KMmsStatusOk;
+ }
+ else if ((iValueBuffer.CompareF(KErrUnspecified)) == 0)
+ {
+ val = KMmsErrorUnspecified;
+ }
+ else if ((iValueBuffer.CompareF(KErrServiceDenied)) == 0)
+ {
+ val = KMmsErrorServiceDenied;
+ }
+ else if ((iValueBuffer.CompareF(KErrMessageFormatCorrupt)) == 0)
+ {
+ val = KMmsErrorMessageFormatCorrupt;
+ }
+ else if ((iValueBuffer.CompareF(KErrAddressUnresolved)) == 0)
+ {
+ val = KMmsErrorSendingAddressUnresolved;
+ }
+ else if ((iValueBuffer.CompareF(KErrMessageNotFound)) == 0)
+ {
+ val = KMmsErrorMessageNotFound;
+ }
+ else if ((iValueBuffer.CompareF(KErrNetworkProblem)) == 0)
+ {
+ val = KMmsErrorNetworkProblem;
+ }
+ else if ((iValueBuffer.CompareF(KErrContentNotAccepted)) == 0)
+ {
+ val = KMmsErrorNoContentAccepted;
+ }
+ else if ((iValueBuffer.CompareF(KErrUnsupportedMessage)) == 0)
+ {
+ val = KMmsErrorUnsupportedMessage;
+ }
+ else if ((iValueBuffer.CompareF(KErrTransient)) == 0)
+ {
+ val = KMmsErrorTransientFailure;
+ }
+ else if ((iValueBuffer.CompareF(KErrTransientAddressUnresolved)) == 0)
+ {
+ val = KMmsErrorTransientSendingAddressUnresolved;
+ }
+ else if ((iValueBuffer.CompareF(KErrTransientNotFound)) == 0)
+ {
+ val = KMmsErrorTransientMessageNotFound;
+ }
+ else if ((iValueBuffer.CompareF(KErrTransientNetworkproblem)) == 0)
+ {
+ val = KMmsErrorTransientNetworkProblem;
+ }
+ else if ((iValueBuffer.CompareF(KErrPermanent)) == 0)
+ {
+ val = KMmsErrorPermanentFailure;
+ }
+ else if ((iValueBuffer.CompareF(KErrPermanentServiceDenied)) == 0)
+ {
+ val = KMmsErrorPermanentServiceDenied;
+ }
+ else if ((iValueBuffer.CompareF(KErrPermanentMessageFormatCorrupt)) == 0)
+ {
+ val = KMmsErrorPermanentMessageFormatCorrupt;
+ }
+ else if ((iValueBuffer.CompareF(KErrPermanentAddressUnresolved)) == 0)
+ {
+ val = KMmsErrorPermanentSendingAddressUnresolved;
+ }
+ else if ((iValueBuffer.CompareF(KErrPermanentNotFound)) == 0)
+ {
+ val = KMmsErrorPermanentMessageNotFound;
+ }
+ else if ((iValueBuffer.CompareF(KErrPermanentContentNotAccepted)) == 0)
+ {
+ val = KMmsErrorPermanentContentNotAccepted;
+ }
+ else if ((iValueBuffer.CompareF(KErrReplyChargingLimitNotMet)) == 0)
+ {
+ val = KMmsErrorPermanentReplyChargingLimitationsNotMet;
+ }
+ else if ((iValueBuffer.CompareF(KErrReplyChargingRequestNotAccepted)) == 0)
+ {
+ val = KMmsErrorPermanentReplyChargingRequestNotAccepted;
+ }
+ else if ((iValueBuffer.CompareF(KErrReplyChargingForwardingDenied)) == 0)
+ {
+ val = KMmsErrorPermanentReplyChargingForwardingDenied;
+ }
+ else if ((iValueBuffer.CompareF(KErrReplyChargingNotSupported)) == 0)
+ {
+ val = KMmsErrorPermanentReplyChargingNotSupported;
+ }
+ else if ((iValueBuffer.CompareF(KErrTransientPartialSuccess)) == 0)
+ {
+ val = KMmsErrorTransientPartialSuccess;
+ }
+ else if ((iValueBuffer.CompareF(KErrAddressHidingNotSupported)) == 0)
+ {
+ val = KMmsErrorPermanentAddressHidingNotSupported;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ if ( aMmsHeaders.MessageType() == KMmsMessageTypeMBoxDeleteConf )
+ {
+ aMmsHeaders.InsertDeleteStatusL( order, val );
+ }
+ else
+ {
+ aMmsHeaders.SetResponseStatus( val );
+ }
+ break;
+ case ETestResponseText:
+ if ( aMmsHeaders.MessageType() == KMmsMessageTypeMBoxDeleteConf )
+ {
+ aMmsHeaders.InsertDeleteResponseTextL( order, iValueBuffer );
+ }
+ else
+ {
+ aMmsHeaders.SetResponseTextL( iValueBuffer );
+ }
+ break;
+ case ETestRetrieveStatus:
+ val = 0;
+ if ((iValueBuffer.CompareF(KOk)) == 0)
+ {
+ val = KMmsStatusOk;
+ }
+ else if ((iValueBuffer.CompareF(KErrTransient)) == 0)
+ {
+ val = KMmsErrorTransientFailure;
+ }
+ else if ((iValueBuffer.CompareF(KErrTransientNotFound)) == 0)
+ {
+ val = KMmsErrorReceiveTransientMessageNotFound;
+ }
+ else if ((iValueBuffer.CompareF(KErrTransientNetworkproblem)) == 0)
+ {
+ val = KMmsErrorReceiveTransientNetworkProblem;
+ }
+ else if ((iValueBuffer.CompareF(KErrPermanent)) == 0)
+ {
+ val = KMmsErrorPermanentFailure;
+ }
+ else if ((iValueBuffer.CompareF(KErrPermanentServiceDenied)) == 0)
+ {
+ val = KMmsErrorPermanentServiceDenied;
+ }
+ else if ((iValueBuffer.CompareF(KErrPermanentNotFound)) == 0)
+ {
+ val = KMmsErrorReceivePermanentMessageNotFound;
+ }
+ else if ((iValueBuffer.CompareF(KErrRetrieveContentUnsupported)) == 0)
+ {
+ val = KMmsErrorReceivePermanentContentUnsupported;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetResponseStatus( val );
+ break;
+ case ETestRetrieveText:
+ aMmsHeaders.SetResponseTextL( iValueBuffer );
+ break;
+ case ETestStatus:
+ val = 0;
+ if ((iValueBuffer.CompareF(KDeferred)) == 0)
+ {
+ val = KMmsMessageStatusDeferred;
+ }
+ else if ((iValueBuffer.CompareF(KExpired)) == 0)
+ {
+ val = KMmsMessageStatusExpired;
+ }
+ else if ((iValueBuffer.CompareF(KRetrieved)) == 0)
+ {
+ val = KMmsMessageStatusRetrieved;
+ }
+ else if ((iValueBuffer.CompareF(KRejected)) == 0)
+ {
+ val = KMmsMessageStatusRejected;
+ }
+ else if ((iValueBuffer.CompareF(KUnrecognized)) == 0)
+ {
+ val = KMmsMessageStatusUnrecognized;
+ }
+ else if ((iValueBuffer.CompareF(KIndeterminate)) == 0)
+ {
+ val = KMmsMessageStatusIndeterminate;
+ }
+ else if ((iValueBuffer.CompareF(KForwarded)) == 0)
+ {
+ val = KMmsMessageStatusForwarded;
+ }
+ else if ((iValueBuffer.CompareF(KUnreachable)) == 0)
+ {
+ val = KMmsMessageStatusUnreachable;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetStatus( val );
+ break;
+ case ETestMessageType:
+ val = 0;
+ if ((iValueBuffer.CompareF(KSendReq)) == 0)
+ {
+ val = KMmsMessageTypeMSendReq;
+ }
+ else if ((iValueBuffer.CompareF(KSendConf)) == 0)
+ {
+ val = KMmsMessageTypeMSendConf;
+ }
+ else if ((iValueBuffer.CompareF(KNotifInd)) == 0)
+ {
+ val = KMmsMessageTypeMNotificationInd;
+ }
+ else if ((iValueBuffer.CompareF(KNotifResp)) == 0)
+ {
+ val = KMmsMessageTypeMNotifyRespInd;
+ }
+ else if ((iValueBuffer.CompareF(KRetrConf)) == 0)
+ {
+ val = KMmsMessageTypeMRetrieveConf;
+ }
+ else if ((iValueBuffer.CompareF(KAckInd)) == 0)
+ {
+ val = KMmsMessageTypeAcknowledgeInd;
+ }
+ else if ((iValueBuffer.CompareF(KDelInd)) == 0)
+ {
+ val = KMmsMessageTypeDeliveryInd;
+ }
+ else if ((iValueBuffer.CompareF(KReadReqInd)) == 0)
+ {
+ val = KMmsMessageTypeReadRecInd;
+ }
+ else if ((iValueBuffer.CompareF(KReadOrigInd)) == 0)
+ {
+ val = KMmsMessageTypeReadOrigInd;
+ }
+ else if ((iValueBuffer.CompareF(KForwardRec)) == 0)
+ {
+ val = KMmsMessageTypeForwardReq;
+ }
+ else if ((iValueBuffer.CompareF(KForwardConf)) == 0)
+ {
+ val = KMmsMessageTypeForwardConf;
+ }
+ else if ((iValueBuffer.CompareF(KMBoxStoreReq)) == 0)
+ {
+ val = KMmsMessageTypeMboxStoreReq;
+ }
+ else if ((iValueBuffer.CompareF(KMBoxStoreConf)) == 0)
+ {
+ val = KMmsMessageTypeMboxStoreConf;
+ }
+ else if ((iValueBuffer.CompareF(KMBoxViewReq)) == 0)
+ {
+ val = KMmsMessageTypeMboxViewReq;
+ }
+ else if ((iValueBuffer.CompareF(KMBoxViewConf)) == 0)
+ {
+ val = KMmsMessageTypeMboxViewConf;
+ }
+ else if ((iValueBuffer.CompareF(KMBoxUploadReq)) == 0)
+ {
+ val = KMmsMessageTypeMBoxUploadReq;
+ }
+ else if ((iValueBuffer.CompareF(KMBoxUploadConf)) == 0)
+ {
+ val = KMmsMessageTypeMBoxUploadConf;
+ }
+ else if ((iValueBuffer.CompareF(KMBoxDeleteReq)) == 0)
+ {
+ val = KMmsMessageTypeMBoxDeleteReq;
+ }
+ else if ((iValueBuffer.CompareF(KMBoxDeleteConf)) == 0)
+ {
+ val = KMmsMessageTypeMBoxDeleteConf;
+ }
+ else if ((iValueBuffer.CompareF(KMBoxDescr)) == 0)
+ {
+ val = KMmsMessageTypeMBoxDescr;
+ }
+ else if ((iValueBuffer.CompareF(KDeleteReq)) == 0)
+ {
+ val = KMmsMessageTypeDeleteReq;
+ }
+ else if ((iValueBuffer.CompareF(KDeleteConf)) == 0)
+ {
+ val = KMmsMessageTypeDeleteConf;
+ }
+ else if ((iValueBuffer.CompareF(KCancelReq)) == 0)
+ {
+ val = KMmsMessageTypeCancelReq;
+ }
+ else if ((iValueBuffer.CompareF(KCancelResp)) == 0)
+ {
+ val = KMmsMessageTypeCancelConf;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetMessageType( val );
+ break;
+ case ETestAttribute:
+ val = 0;
+ iByteBuffer->Des().Copy( iValueBuffer );
+ if ((iByteBuffer->Des().CompareF(KTestBcc)) == 0)
+ {
+ val = KMmsAssignedBcc;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestCc)) == 0)
+ {
+ val = KMmsAssignedCc;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestContent)) == 0)
+ {
+ val = KMmsAssignedContent;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestContentType)) == 0)
+ {
+ val = KMmsAssignedContentType;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestDate)) == 0)
+ {
+ val = KMmsAssignedDate;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestDeliveryReport)) == 0)
+ {
+ val = KMmsAssignedDeliveryReport;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestDeliveryTime)) == 0)
+ {
+ val = KMmsAssignedDeliveryTime;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestExpiry)) == 0)
+ {
+ val = KMmsAssignedExpiry;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestFrom)) == 0)
+ {
+ val = KMmsAssignedFrom;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestMessageClass)) == 0)
+ {
+ val = KMmsAssignedMessageClass;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestMessageId)) == 0)
+ {
+ val = KMmsAssignedMessageId;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestMessageSize)) == 0)
+ {
+ val = KMmsAssignedMessageSize;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestPriority)) == 0)
+ {
+ val = KMmsAssignedPriority;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestReadReply)) == 0)
+ {
+ val = KMmsAssignedReadReply;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestSubject)) == 0)
+ {
+ val = KMmsAssignedSubject;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestTo)) == 0)
+ {
+ val = KMmsAssignedTo;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestReplyCharging)) == 0)
+ {
+ val = KMmsAssignedReplyCharging;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestReplyChargID)) == 0)
+ {
+ val = KMmsAssignedReplyChargingID;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestReplyCharg)) == 0)
+ {
+ val = KMmsAssignedReplyChargingDeadline;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestReplyChargSize)) == 0)
+ {
+ val = KMmsAssignedReplyChargingSize;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestPreviouslySentBy)) == 0)
+ {
+ val = KMmsAssignedPreviouslySentBy;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestPreviouslySentDate)) == 0)
+ {
+ val = KMmsAssignedPreviouslySentDate;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestAdditionalHeaders)) == 0)
+ {
+ val = KMmsAssignedAdditionalHeaders;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.MMBoxViewHeadersL().AttributeArray().InsertInOrder(val);
+ break;
+ case ETestDistributionIndicator:
+ val = 0;
+ if ((iValueBuffer.CompareF(KYes)) == 0)
+ {
+ val = KMmsYes;
+ }
+ else if ((iValueBuffer.CompareF(KNo)) == 0)
+ {
+ val = KMmsNo;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetDistributionIndicator( val );
+ break;
+ case ETestLimit:
+ aMmsHeaders.MMBoxViewHeadersL().SetMmsLimit(KMaxTUint32);
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,radix,limit);
+ if ( val > allLimit )
+ {
+ val = KMaxTUint32; // this is too hard to type, more than 999999 means "all"
+ }
+ if( error == KErrNone )
+ {
+ aMmsHeaders.MMBoxViewHeadersL().SetMmsLimit(val);
+ }
+ break;
+ case ETestMessageQuota:
+ aMmsHeaders.MMBoxViewHeadersL().SetMMBoxQuotaNumber(KMaxTUint32);
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,radix,limit);
+ if ( val > allLimit )
+ {
+ val = KMaxTUint32; // this is too hard to type, more than 999999 means "all"
+ }
+ if (error == KErrNone)
+ {
+ aMmsHeaders.MMBoxViewHeadersL().SetMMBoxQuotaNumber(val);
+ }
+ break;
+ case ETestSizeQuota:
+ aMmsHeaders.MMBoxViewHeadersL().SetMMBoxQuotaSize(KMaxTUint32);
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,radix,limit);
+ if ( val > allLimit )
+ {
+ val = KMaxTUint32; // this is too hard to type, more than 999999 means "all"
+ }
+ if (error == KErrNone)
+ {
+ aMmsHeaders.MMBoxViewHeadersL().SetMMBoxQuotaSize(val);
+ }
+ break;
+ case ETestMessageTotal:
+ aMmsHeaders.MMBoxViewHeadersL().SetMMBoxTotalNumber(KMaxTUint32);
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,radix,limit);
+ if ( val > allLimit )
+ {
+ val = KMaxTUint32; // this is too hard to type, more than 999999 means "all"
+ }
+ if (error == KErrNone)
+ {
+ aMmsHeaders.MMBoxViewHeadersL().SetMMBoxTotalNumber(val);
+ }
+ break;
+ case ETestSizeTotal:
+ aMmsHeaders.MMBoxViewHeadersL().SetMMBoxTotalSize(KMaxTUint32);
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,radix,limit);
+ if ( val > allLimit )
+ {
+ val = KMaxTUint32; // this is too hard to type, more than 999999 means "all"
+ }
+ if (error == KErrNone)
+ {
+ aMmsHeaders.MMBoxViewHeadersL().SetMMBoxTotalSize(val);
+ }
+ break;
+ case ETestMessageCount:
+ aMmsHeaders.MMBoxViewHeadersL().SetMmsMessageCount(KMaxTUint32);
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,radix,limit);
+ if ( val > allLimit )
+ {
+ val = KMaxTUint32; // this is too hard to type, more than 999999 means "all"
+ }
+ if (error == KErrNone)
+ {
+ aMmsHeaders.MMBoxViewHeadersL().SetMmsMessageCount(val);
+ }
+ break;
+ case ETestAddKeyword:
+ aMmsHeaders.MMBoxMessageHeadersL().AppendKeywordItemL(KMmsAddToken, iValueBuffer);
+ break;
+ case ETestRemoveKeyword:
+ aMmsHeaders.MMBoxMessageHeadersL().AppendKeywordItemL(KMmsRemoveToken, iValueBuffer);
+ break;
+ case ETestFilterKeyword:
+ aMmsHeaders.MMBoxMessageHeadersL().AppendKeywordItemL(KMmsFilterToken, iValueBuffer);
+ break;
+ case ETestMMState:
+ val = 0;
+ if ((iValueBuffer.CompareF(KDraft)) == 0)
+ {
+ val = KMmsDraft;
+ }
+ else if ((iValueBuffer.CompareF(KSent)) == 0)
+ {
+ val = KMmsSent;
+ }
+ else if ((iValueBuffer.CompareF(KNew)) == 0)
+ {
+ val = KMmsNew;
+ }
+ else if ((iValueBuffer.CompareF(KRetrieved)) == 0)
+ {
+ val = KMmsRetrieved;
+ }
+ else if ((iValueBuffer.CompareF(KForwarded)) == 0)
+ {
+ val = KMmsForwarded;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ if ( aMmsHeaders.MessageType() == KMmsMessageTypeMboxViewReq ||
+ aMmsHeaders.MessageType() == KMmsMessageTypeMboxViewConf )
+ {
+ aMmsHeaders.MMBoxViewHeadersL().MMStateArray().InsertInOrder( val );
+ }
+ else
+ {
+ aMmsHeaders.MMBoxMessageHeadersL().SetMMState( val );
+ }
+ break;
+ case ETestQuota:
+ val = 0;
+ if ((iValueBuffer.CompareF(KYes)) == 0)
+ {
+ val = KMmsYes;
+ }
+ else if ((iValueBuffer.CompareF(KNo)) == 0)
+ {
+ val = KMmsNo;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.MMBoxViewHeadersL().SetMmsQuotas( val );
+ break;
+ case ETestStart:
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,radix,limit);
+ if (error == KErrNone)
+ {
+ aMmsHeaders.MMBoxViewHeadersL().SetMmsStart(val);
+ }
+ break;
+ case ETestStore:
+ val = 0;
+ if ((iValueBuffer.CompareF(KYes)) == 0)
+ {
+ val = KMmsYes;
+ }
+ else if ((iValueBuffer.CompareF(KNo)) == 0)
+ {
+ val = KMmsNo;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.MMBoxMessageHeadersL().SetMmsStore( val );
+ break;
+ case ETestStored:
+ val = 0;
+ if ((iValueBuffer.CompareF(KYes)) == 0)
+ {
+ val = KMmsYes;
+ }
+ else if ((iValueBuffer.CompareF(KNo)) == 0)
+ {
+ val = KMmsNo;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.MMBoxMessageHeadersL().SetMmsStored( val );
+ break;
+ case ETestStoreStatus:
+ val = 0;
+ if ((iValueBuffer.CompareF(KOk)) == 0)
+ {
+ val = KMmsStatusOk;
+ }
+ else if ((iValueBuffer.CompareF(KErrTransient)) == 0)
+ {
+ val = KMmsErrorTransientFailure;
+ }
+ else if ((iValueBuffer.CompareF(KErrTransientNetworkproblem)) == 0)
+ {
+ val = KMmsErrorStoreStatusTransientNetworkProblem;
+ }
+ else if ((iValueBuffer.CompareF(KErrPermanent)) == 0)
+ {
+ val = KMmsErrorPermanentFailure;
+ }
+ else if ((iValueBuffer.CompareF(KErrPermanentServiceDenied)) == 0)
+ {
+ val = KMmsErrorPermanentServiceDenied;
+ }
+ else if ((iValueBuffer.CompareF(KErrPermanentMessageFormatCorrupt)) == 0)
+ {
+ val = KMmsErrorPermanentMessageFormatCorrupt;
+ }
+ else if ((iValueBuffer.CompareF(KErrPermanentNotFound)) == 0)
+ {
+ val = KMmsErrorStoreStatusPermanentMessageNotFound;
+ }
+ else if ((iValueBuffer.CompareF(KErrMMBoxFull)) == 0)
+ {
+ val = KMmsErrorStoreStatusPermanentMmboxFull;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.MMBoxMessageHeadersL().SetMmsStoreStatus( val );
+ break;
+ case ETestStoreStatusText:
+ aMmsHeaders.MMBoxMessageHeadersL().SetMmsStoreStatusTextL( iValueBuffer );
+ break;
+ case ETestTotals:
+ val = 0;
+ if ((iValueBuffer.CompareF(KYes)) == 0)
+ {
+ val = KMmsYes;
+ }
+ else if ((iValueBuffer.CompareF(KNo)) == 0)
+ {
+ val = KMmsNo;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.MMBoxViewHeadersL().SetMmsTotals( val );
+ break;
+
+ case ETestDeleteInfoIndex:
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,radix,limit);
+ order = val;
+ break;
+
+ case ETestApplicId:
+ aMmsHeaders.SetApplicIdL( iValueBuffer );
+ break;
+ case ETestReplyApplicId:
+ aMmsHeaders.SetReplyApplicIdL( iValueBuffer );
+ break;
+ case ETestApplicInfo:
+ iByteBuffer->Des().Copy( iValueBuffer );
+ aMmsHeaders.SetAuxApplicInfoL( iByteBuffer->Des() );
+ break;
+ case ETestContentClass:
+ val = 0;
+ if ((iValueBuffer.CompareF(KText)) == 0)
+ {
+ val = KMmsContentClassText;
+ }
+ else if ((iValueBuffer.CompareF(KImageBasic)) == 0)
+ {
+ val = KMmsContentClassImageBasic;
+ }
+ else if ((iValueBuffer.CompareF(KImageRich)) == 0)
+ {
+ val = KMmsContentClassImageRich;
+ }
+ else if ((iValueBuffer.CompareF(KVideoBasic)) == 0)
+ {
+ val = KMmsContentClassVideoBasic;
+ }
+ else if ((iValueBuffer.CompareF(KVideoRich)) == 0)
+ {
+ val = KMmsContentClassVideoRich;
+ }
+ else if ((iValueBuffer.CompareF(KMegaPixel)) == 0)
+ {
+ val = KMmsContentClassMegaPixel;
+ }
+ else if ((iValueBuffer.CompareF(KContentBasic)) == 0)
+ {
+ val = KMmsContentClassContentBasic;
+ }
+ else if ((iValueBuffer.CompareF(KContentRich)) == 0)
+ {
+ val = KMmsContentClassContentRich;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetContentClass( val );
+ break;
+ case ETestDrmContent:
+ val = 0;
+ if ((iValueBuffer.CompareF(KYes)) == 0)
+ {
+ val = KMmsYes;
+ }
+ else if ((iValueBuffer.CompareF(KNo)) == 0)
+ {
+ val = KMmsNo;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetDrmContent( val );
+ break;
+ case ETestAdaptationAllowed:
+ val = 0;
+ if ((iValueBuffer.CompareF(KYes)) == 0)
+ {
+ val = KMmsYes;
+ }
+ else if ((iValueBuffer.CompareF(KNo)) == 0)
+ {
+ val = KMmsNo;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetAdaptationAllowed( val );
+ break;
+ case ETestRecommendedRetrievalMode:
+ val = 0;
+ if ((iValueBuffer.CompareF(KManual)) == 0)
+ {
+ val = KMmsRecommendedRetrievalModeManual;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetRecommendedRetrievalMode( val );
+ break;
+ case ETestRecRetrievalModeText:
+ aMmsHeaders.SetRecommendedRetrievalModeTextL( iValueBuffer );
+ break;
+ case ETestReplaceId:
+ iByteBuffer->Des().Copy( iValueBuffer );
+ aMmsHeaders.SetReplaceCancelIdL( iByteBuffer->Des() );
+ break;
+ case ETestStatusText:
+ aMmsHeaders.SetResponseTextL( iValueBuffer );
+ break;
+ case ETestCancelId:
+ iByteBuffer->Des().Copy( iValueBuffer );
+ aMmsHeaders.SetReplaceCancelIdL( iByteBuffer->Des() );
+ break;
+ case ETestCancelStatus:
+ val = 0;
+ if ((iValueBuffer.CompareF(KCancelSuccessful)) == 0)
+ {
+ val = KMmsCancelRequestSuccessfullyReceived;
+ }
+ else if ((iValueBuffer.CompareF(KCancelCorrupted)) == 0)
+ {
+ val = KMmsCancelRequestCorrupted;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetCancelStatus( val );
+ break;
+ default:
+ break;
+ }
+ }
+ else
+ {
+ switch(readStatus)
+ {
+ case ETestAlias:
+ iAliasArray->AppendL( iValueBuffer );
+ iAliasCount++;
+ break;
+
+ default:
+ break;
+ }
+
+ }
+ }
+ return(-1);
+}
+
+// ---------------------------------------------------------
+// CMmsReadFile()::ReadRowL
+// ---------------------------------------------------------
+//
+TTestReadStatus CMmsReadFile::ReadRowL()
+ {
+
+ TBuf8<DefaultBufLen> RowBuffer;
+ TBuf8<32> KeyBuffer;
+
+ // READ ONE ROW AND DROP CR+LF FROM THE END OF LINE
+ TChar delim( 10 );
+ iReader->ReadL( RowBuffer, delim);
+ TInt length = RowBuffer.Length();
+ if ( RowBuffer.Length() < 2 )
+ {
+ return ETestEof;
+ }
+ RowBuffer.Delete(length - 2,2);
+
+ // DROP POSSIBLE COMMENT OUT
+ TInt pos = RowBuffer.Locate( ';' );
+ if ( pos >= 0 ) RowBuffer.Delete( pos, length-pos-2 );
+
+ if ( RowBuffer.Length() == 0 )
+ {
+ // the line contained only comment
+ return ETestUnknown;
+ }
+
+ // First split the row (:)
+ pos = RowBuffer.Locate( ':' );
+ if (pos > 0)
+ {
+ TPtrC8 p = RowBuffer.Mid( pos+1 );
+ length = p.Length();
+ iValueBuffer.Zero();
+ for (TInt i=0; i < length; ++i)
+ {
+ iValueBuffer.Append(p[i]);
+ }
+ iValueBuffer.Trim();
+ TPtrC8 pp = RowBuffer.Left(pos);
+ KeyBuffer.CopyUC(pp);
+ KeyBuffer.Trim();
+ }
+ // TRY TO FIND CORRECT TAG
+ if ((KeyBuffer.CompareF(KTestNewMessage)) == 0) return(ETestNewMessage);
+ if ((KeyBuffer.CompareF(KTestMessageType)) == 0) return ETestMessageType;
+ if ((KeyBuffer.CompareF(KTestDate)) == 0) return ETestDate;
+ if ((KeyBuffer.CompareF(KTestFrom)) == 0) return ETestFrom;
+ if ((KeyBuffer.CompareF(KTestTo)) == 0) return ETestTo;
+ if ((KeyBuffer.CompareF(KTestCc)) == 0) return ETestCc;
+ if ((KeyBuffer.CompareF(KTestBcc)) == 0) return ETestBcc;
+ if ((KeyBuffer.CompareF(KTestSubject)) == 0) return ETestSubject;
+ if ((KeyBuffer.CompareF(KTestExpiryRel)) == 0) return ETestExpiryRel;
+ if ((KeyBuffer.CompareF(KTestExpiryAbs)) == 0) return ETestExpiryAbs;
+ if ((KeyBuffer.CompareF(KTestDeliveryTimeRel)) == 0) return ETestDeliveryTimeRel;
+ if ((KeyBuffer.CompareF(KTestDeliveryTimeAbs)) == 0) return ETestDeliveryTimeAbs;
+ if ((KeyBuffer.CompareF(KTestPriority)) == 0) return ETestPriority;
+ if ((KeyBuffer.CompareF(KTestSenderVisibility)) == 0) return ETestSenderVisibility;
+ if ((KeyBuffer.CompareF(KTestDeliveryReport)) == 0) return ETestDeliveryReport;
+ if ((KeyBuffer.CompareF(KTestReadReply)) == 0) return ETestReadReply;
+ if ((KeyBuffer.CompareF(KTestNewAttachment)) == 0) return ETestNewAttachment;
+ if ((KeyBuffer.CompareF(KTestAttachmentName)) == 0) return ETestAttaRecommendedName;
+ if ((KeyBuffer.CompareF(KTestAttachmentContLoc)) == 0) return ETestAttachmentContLoc;
+ if ((KeyBuffer.CompareF(KTestAttachmentType)) == 0) return ETestAttachmentType;
+ if ((KeyBuffer.CompareF(KTestAttachmentCharset)) == 0) return ETestAttachmentCharset;
+ if ((KeyBuffer.CompareF(KTestAttachmentCid)) == 0) return ETestAttachmentCid;
+ if ((KeyBuffer.CompareF(KTestAttachmentRoot)) == 0) return ETestAttachmentRoot;
+ if ((KeyBuffer.CompareF(KTestEndOfFile)) == 0) return ETestEof;
+ if ((KeyBuffer.CompareF(KTestMessageClass)) == 0) return ETestMessageClass;
+ if ((KeyBuffer.CompareF(KTestDelivRepSendAllow)) == 0) return ETestDelivReportSendAllow;
+ if ((KeyBuffer.CompareF(KTestAlias)) == 0 ) return ETestAlias;
+ if ((KeyBuffer.CompareF(KTestFromAlias)) == 0 ) return ETestFromAlias;
+ if ((KeyBuffer.CompareF(KTestToAlias)) == 0 ) return ETestToAlias;
+ if ((KeyBuffer.CompareF(KTestCcAlias)) == 0 ) return ETestCcAlias;
+ if ((KeyBuffer.CompareF(KTestBccAlias)) == 0 ) return ETestBccAlias;
+ if ((KeyBuffer.CompareF(KTestReplyCharging)) == 0 ) return ETestReplyCharging;
+ if ((KeyBuffer.CompareF(KTestReplyChargAbs)) == 0 ) return ETestReplyChargAbs;
+ if ((KeyBuffer.CompareF(KTestReplyChargRel)) == 0 ) return ETestReplyChargRel;
+ if ((KeyBuffer.CompareF(KTestReplyChargSize)) == 0 ) return ETestReplyChargSize;
+ if ((KeyBuffer.CompareF(KTestReplyChargID)) == 0 ) return ETestReplyChargID;
+ if ((KeyBuffer.CompareF(KTestTID)) == 0 ) return ETestTID;
+ if ((KeyBuffer.CompareF(KTestContentLocation)) == 0 ) return ETestContentLocation;
+ if ((KeyBuffer.CompareF(KTestPreviouslySentIndex)) == 0 ) return ETestPreviouslySentIndex;
+ if ((KeyBuffer.CompareF(KTestPreviouslySentBy)) == 0 ) return ETestPreviouslySentBy;
+ if ((KeyBuffer.CompareF(KTestPreviouslySentDate)) == 0 ) return ETestPreviouslySentDate;
+ if ((KeyBuffer.CompareF(KTestMessageId)) == 0 ) return ETestMessageId;
+ if ((KeyBuffer.CompareF(KTestMessageSize)) == 0 ) return ETestMessageSize;
+ if ((KeyBuffer.CompareF(KTestVersion)) == 0 ) return ETestVersion;
+ if ((KeyBuffer.CompareF(KTestReadStatus)) == 0 ) return ETestReadStatus;
+ if ((KeyBuffer.CompareF(KTestResponseStatus)) == 0 ) return ETestResponseStatus;
+ if ((KeyBuffer.CompareF(KTestResponseText)) == 0 ) return ETestResponseText;
+ if ((KeyBuffer.CompareF(KTestRetrieveStatus)) == 0 ) return ETestRetrieveStatus;
+ if ((KeyBuffer.CompareF(KTestRetrieveText)) == 0 ) return ETestRetrieveText;
+ if ((KeyBuffer.CompareF(KTestStatus)) == 0 ) return ETestStatus;
+ if ((KeyBuffer.CompareF(KTestAttribute)) == 0 ) return ETestAttribute;
+ if ((KeyBuffer.CompareF(KTestDistributionIndicator)) == 0 ) return ETestDistributionIndicator;
+ if ((KeyBuffer.CompareF(KTestLimit)) == 0 ) return ETestLimit;
+ if ((KeyBuffer.CompareF(KTestMessageQuota)) == 0 ) return ETestMessageQuota;
+ if ((KeyBuffer.CompareF(KTestSizeQuota)) == 0 ) return ETestSizeQuota;
+ if ((KeyBuffer.CompareF(KTestMessageTotal)) == 0 ) return ETestMessageTotal;
+ if ((KeyBuffer.CompareF(KTestSizeTotal)) == 0 ) return ETestSizeTotal;
+ if ((KeyBuffer.CompareF(KTestMessageCount)) == 0 ) return ETestMessageCount;
+ if ((KeyBuffer.CompareF(KTestAddKeyword)) == 0 ) return ETestAddKeyword;
+ if ((KeyBuffer.CompareF(KTestRemoveKeyword)) == 0 ) return ETestRemoveKeyword;
+ if ((KeyBuffer.CompareF(KTestFilterKeyword)) == 0 ) return ETestFilterKeyword;
+ if ((KeyBuffer.CompareF(KTestMMState)) == 0 ) return ETestMMState;
+ if ((KeyBuffer.CompareF(KTestQuota)) == 0 ) return ETestQuota;
+ if ((KeyBuffer.CompareF(KTestStart)) == 0 ) return ETestStart;
+ if ((KeyBuffer.CompareF(KTestStore)) == 0 ) return ETestStore;
+ if ((KeyBuffer.CompareF(KTestStored)) == 0 ) return ETestStored;
+ if ((KeyBuffer.CompareF(KTestStoreStatus)) == 0 ) return ETestStoreStatus;
+ if ((KeyBuffer.CompareF(KTestStoreStatusText)) == 0 ) return ETestStoreStatusText;
+ if ((KeyBuffer.CompareF(KTestTotals)) == 0 ) return ETestTotals;
+ if ((KeyBuffer.CompareF(KTestDeleteInfoIndex)) == 0 ) return ETestDeleteInfoIndex;
+ if ((KeyBuffer.CompareF(KTestApplicId)) == 0 ) return ETestApplicId;
+ if ((KeyBuffer.CompareF(KTestReplyApplicId)) == 0 ) return ETestReplyApplicId;
+ if ((KeyBuffer.CompareF(KTestApplicInfo)) == 0 ) return ETestApplicInfo;
+ if ((KeyBuffer.CompareF(KTestContentClass)) == 0 ) return ETestContentClass;
+ if ((KeyBuffer.CompareF(KTestDrmContent)) == 0 ) return ETestDrmContent;
+ if ((KeyBuffer.CompareF(KTestAdaptationAllowed)) == 0 ) return ETestAdaptationAllowed;
+ if ((KeyBuffer.CompareF(KTestRecommendedRetrievalMode)) == 0 ) return ETestRecommendedRetrievalMode;
+ if ((KeyBuffer.CompareF(KTestRecRetrievalModeText)) == 0 ) return ETestRecRetrievalModeText;
+ if ((KeyBuffer.CompareF(KTestReplaceId)) == 0 ) return ETestReplaceId;
+ if ((KeyBuffer.CompareF(KTestStatusText)) == 0 ) return ETestStatusText;
+ if ((KeyBuffer.CompareF(KTestCancelId)) == 0 ) return ETestCancelId;
+ if ((KeyBuffer.CompareF(KTestCancelStatus)) == 0 ) return ETestCancelStatus;
+ if ((KeyBuffer.CompareF(KTestAttContTypeParamName)) == 0 ) return ETestAttContTypeParamName;
+ if ((KeyBuffer.CompareF(KTestAttContTypeParamValue)) == 0 ) return ETestAttContTypeParamValue;
+ if ((KeyBuffer.CompareF(KTestAttXTypeParamName)) == 0 ) return ETestAttXTypeParamName;
+ if ((KeyBuffer.CompareF(KTestAttXTypeParamValue)) == 0 ) return ETestAttXTypeParamValue;
+ return ETestUnknown;
+ }
+
+// ---------------------------------------------------------
+// CMmsReadFile()::CreateMessageL
+// program build a message from given parts
+// ---------------------------------------------------------
+//
+void CMmsReadFile::CreateMessageL( CMmsClientMtm* aMmsClient, CMmsHeaders* aMmsHeaders )
+ {
+
+ // Reset inactivity timer to keem viewServer from crashing
+ User::ResetInactivityTime();
+
+ TInt i;
+ TInt error = KErrNone;
+ RFile attaFile;
+ _LIT8(KLeftAngle, "<");
+ _LIT8(KRightAngle, ">");
+ // we can't use "seconds from" as it only returns a
+ // 32 bit signed integer. If fails in 2038.
+ // "microseconds from" returns a 64 bit signed integer
+
+ CMsvStore* store = aMmsClient->Entry().EditStoreL();
+ CleanupStack::PushL(store);
+ aMmsHeaders->StoreL(*store);
+ store->CommitL();
+ CleanupStack::PopAndDestroy( store );
+ store = NULL;
+
+ aMmsClient->LoadMessageL(); // read store is needed to do this
+
+ store = aMmsClient->Entry().EditStoreL();
+ CleanupStack::PushL(store);
+ CMsvAttachment* attaInfo = NULL;
+ TMsvAttachmentId attaId = 0;
+
+ for ( i=0; i < iAttaStructures->Count(); ++i)
+ {
+ attaId = KMsvNullIndexEntryId;
+ iFilename.Copy(iAttaStructures->At(i)->iAtta->Des());
+
+ error = attaFile.Open( iFs, iFilename, EFileShareReadersOnly | EFileRead );
+ User::LeaveIfError( error );
+
+ CleanupClosePushL(attaFile);
+
+ CMsvMimeHeaders* mimeHeaders = CMsvMimeHeaders::NewL();
+ CleanupStack::PushL( mimeHeaders );
+ TPtrC8 contentType = iAttaStructures->At(i)->iAttaType->Des();
+
+ TDataRecognitionResult result;
+ result.Reset(); // make sure that it is cleared
+
+ if(iAttaStructures->At(i)->iAttaCid->Length())
+ {
+ TPtr8 attaCID = iAttaStructures->At(i)->iAttaCid->Des();
+ if (attaCID.Find(KLeftAngle) == 0 &&
+ attaCID.Find(KRightAngle) == attaCID.Length()-1 )
+ {
+ // remove angle brackets from cid
+ attaCID = attaCID.Mid(1,attaCID.Length()-2);
+ }
+ mimeHeaders->SetContentIdL(attaCID);
+ }
+
+ if (iAttaStructures->At(i)->iAttaCharset)
+ {
+ mimeHeaders->SetMimeCharset(iAttaStructures->At(i)->iAttaCharset);
+ }
+
+ if (iAttaStructures->At(i)->iAttaName->Length())
+ {
+ iFilename.Copy(iAttaStructures->At(i)->iAttaName->Des());
+ }
+ iParse.Set( iFilename, NULL, NULL );
+ iFilename.Copy( iParse.NameAndExt() );
+
+ mimeHeaders->SetContentLocationL( iFilename );
+
+ // if Mime type has not been set, use RapaRecognizer
+ if ( iAttaStructures->At(i)->iAttaType->Length() == 0 && iFilename.Length() > 0)
+ {
+ // TO BE IMPLEMENTED
+
+ RApaLsSession lsSession;
+
+ if ( lsSession.Connect() == KErrNone )
+ {
+ CleanupClosePushL( lsSession );
+
+ iFilename.Copy(iAttaStructures->At(i)->iAtta->Des());
+ if ( lsSession.RecognizeData( iFilename, TPtrC8(), result ) == KErrNone )
+ {
+ // Check confidence level. Recognization must be at least
+ // "EProbable". We don't accept the result if it is "EPossible"
+ // or "EUnlikely" or "ENotRecognized"!
+
+ if ( result.iConfidence < CApaDataRecognizerType::EProbable )
+ {
+ result.Reset(); // clear buffer and try again with longer buffer
+ }
+
+ TPtrC8 mimeBuf8 = result.iDataType.Des8();
+
+ if ( mimeBuf8.Length() == 0 )
+ {
+ // Open file buffer and try again..
+
+ TInt bufSize = 0;
+ (void)lsSession.GetMaxDataBufSize( bufSize ); // ignore errors
+ if ( bufSize <= 0 )
+ {
+ bufSize = 30;
+ }
+ HBufC8* buf = HBufC8::NewLC( bufSize );
+ TPtr8 des = buf->Des();
+
+ RFile file;
+ TInt err=file.Open( iFs, iFilename, EFileShareReadersOnly );
+ if ( err == KErrNone )
+ {
+ err = file.Read( des );
+ file.Close();
+ if ( err == KErrNone )
+ {
+ if ( ( lsSession.RecognizeData( iFilename, des, result ) ) == KErrNone )
+ {
+ mimeBuf8.Set( result.iDataType.Des8() );
+ }
+ }
+
+ }
+ CleanupStack::PopAndDestroy(); // buf
+ }
+ if ( mimeBuf8.Length() > 0 &&
+ result.iConfidence >= CApaDataRecognizerType::EProbable )
+ {
+ contentType.Set( result.iDataType.Des8() );
+ }
+ }
+ CleanupStack::PopAndDestroy(1); // lssession
+ }
+ }
+
+ if ( contentType.Length() > 0 )
+ {
+ TInt position = contentType.Find( KMmsSlash8 );
+ if ( position >= 0 )
+ {
+ mimeHeaders->SetContentTypeL( contentType.Left( position ) );
+ }
+ if ( position < contentType.Length() - 1 )
+ {
+ mimeHeaders->SetContentSubTypeL( contentType.Mid( position + 1 ) );
+ }
+// CreateAttachment2L sets the content type to attaInfo
+// attaInfo->SetMimeTypeL( contentType );
+ }
+
+ if (iAttaStructures->At(i)->iAttaRecommendedName->Length())
+ {
+ iFilename.Copy(iAttaStructures->At(i)->iAttaRecommendedName->Des());
+ iParse.Set( iFilename, NULL, NULL );
+ iFilename.Copy( iParse.NameAndExt() );
+ mimeHeaders->SetSuggestedFilenameL( iFilename );
+ }
+
+ TInt j = 0;
+ for ( j = 0; j < iAttaStructures->At(i)->iContentTypeParams->MdcaCount(); ++j )
+ {
+ mimeHeaders->ContentTypeParams().AppendL( iAttaStructures->At(i)->iContentTypeParams->MdcaPoint( j ) );
+ }
+ for ( j = 0; j < iAttaStructures->At(i)->iXTypeParams->MdcaCount(); ++j )
+ {
+ mimeHeaders->XTypeParams().AppendL( iAttaStructures->At(i)->iXTypeParams->MdcaPoint( j ) );
+ }
+
+ attaInfo = CMsvAttachment::NewL(CMsvAttachment::EMsvFile);
+ // attaInfo does not go onto cleaunpstack because ownership will
+ // be transferred to attachment manager.
+
+ aMmsClient->CreateAttachment2L(
+ *store,
+ attaFile,
+ contentType,
+ *mimeHeaders,
+ attaInfo,
+ attaId);
+ attaInfo = NULL; // ownership transferred
+
+ CleanupStack::PopAndDestroy(); // mimeHeaders
+ CleanupStack::PopAndDestroy(); // attaFile.Close()
+
+ if ( iAttaRoot > 0 && iAttaRoot == ( i + 1 ) )
+ {
+ aMmsClient->SetMessageRootL( attaId );
+ }
+ }
+
+ store->CommitL();
+ CleanupStack::PopAndDestroy(); // store
+
+ // This frees all memory and resets all values
+ Reset();
+ // Reset inactivity timer to keem viewServer from crashing
+ User::ResetInactivityTime();
+ }
+
+
+// ---------------------------------------------------------
+// CMmsReadFile()::FindAlias
+// program build a message from given parts
+// ---------------------------------------------------------
+//
+TInt CMmsReadFile::FindAlias( TPtrC aAlias )
+ {
+ TBuf<DefaultBufLen> abuf;
+ for( TInt i=0; i < iAliasCount; ++i )
+ {
+ abuf.Copy( iAliasArray->MdcaPoint(i) );
+ abuf.SetLength( abuf.Locate('=') );
+ if( ( abuf.CompareF( aAlias ) ) == 0 ) return( i );
+ }
+ return( -1 );
+ }
+
+
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//
+CMmsAttaStructure::CMmsAttaStructure()
+ {
+ iAtta = NULL;
+ iAttaType = NULL;
+ iAttaName = NULL;
+ iAttaCid = NULL;
+ iAttaRecommendedName = NULL;
+ }
+
+
+//
+void CMmsAttaStructure::ConstructL()
+ {
+ iAtta = HBufC8::NewL(DefaultBufLen);
+ iAttaType = HBufC8::NewL(DefaultBufLen);
+ iAttaName = HBufC8::NewL(DefaultBufLen);
+ iAttaCid = HBufC8::NewL(DefaultBufLen);
+ iAttaRecommendedName = HBufC::NewL(DefaultBufLen);
+ iAttaCharset = 0;
+ iXTypeParams = new(ELeave) CDesC8ArrayFlat(4);
+ iContentTypeParams = new(ELeave) CDesC8ArrayFlat(4);
+
+ }
+
+// Two-phased constructor.
+CMmsAttaStructure* CMmsAttaStructure::NewL()
+ {
+ CMmsAttaStructure* self = new ( ELeave ) CMmsAttaStructure;
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+// Destructor
+CMmsAttaStructure::~CMmsAttaStructure()
+ {
+ delete iAtta;
+ delete iAttaName;
+ delete iAttaType;
+ delete iAttaCid;
+ delete iAttaRecommendedName;
+ if ( iContentTypeParams )
+ {
+ iContentTypeParams->Reset();
+ }
+ delete iContentTypeParams;
+ if ( iXTypeParams )
+ {
+ iXTypeParams->Reset();
+ }
+ delete iXTypeParams;
+ }
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgnotifications/msgnotifier/tsrc/mmstestbed/src/mmstestbed.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,2357 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ */
+
+#include <mtmdef.h>
+#include <CoreApplicationUIsSDKCRKeys.h>
+#include <mmsheaders.h>
+#include <mmscmds.h>
+#include <mmsencode.h>
+#include <mmscliententry.h>
+#include <logwrap.h>
+#include <logcli.h>
+#include <logview.h>
+#include "mmssettings.h" //use mmssettings.h instead of cmmssettings.h
+#include "mmstestbed.h"
+#include "mmsreadfile.h"
+#include "mmstestuitimer.h"
+#include "mmsteststaticutils.h"
+#include "mmstestbed.hrh"
+
+//constants
+_LIT( KMmsSender, "0601234567" );
+
+MmsTestBed::MmsTestBed()
+ {
+ //start the timer
+ iTimer = CTestUiTimer::NewL();
+ iTimer->Cancel();
+
+ iWait = CMsvOperationActiveSchedulerWait::NewLC();
+ // don't leave iWait on cleanup stack
+ CleanupStack::Pop();
+
+ //open msvsession
+ iSession = CMsvSession::OpenSyncL(*this);
+ //create client registry
+ iClientMtmRegistry = CClientMtmRegistry::NewL(*iSession);
+ //create client mtm
+ iMmsClient = (CMmsClientMtm *) iClientMtmRegistry->NewMtmL(
+ KUidMsgTypeMultimedia);
+
+ User::LeaveIfError( iFs.Connect() );
+ iFs.SetSessionPath( KRootPath );
+ iSettings = CMmsSettings::NewL();
+ iMmsHeaders = CMmsHeaders::NewL(iSettings->MmsVersion());
+ findDefaultL();
+ iServiceId = iDefaultServiceId;
+
+ //validate the settings
+ iSettings->ValidateSettings();
+
+ iLogEvent = CLogEvent::NewL();
+ iLogEvent->SetEventType(KLogMmsEventTypeUid);
+ iLogClient = NULL; // we test soon if this is available
+ iLogView = NULL; // needs log client
+ if ( checkLogClient() )
+ {
+ // first we generate a general view of all events
+ // we'll set the filter when we update the view
+ iLogView = CLogViewEvent::NewL( *iLogClient );
+ }
+ iLogFilter = CLogFilter::NewL();
+ // we try to filter MMS events
+ iLogFilter->SetEventType(KLogMmsEventTypeUid);
+ }
+
+MmsTestBed::~MmsTestBed()
+ {
+ delete iLogView;
+ delete iLogFilter;
+ delete iLogClient;
+ delete iLogEvent;
+ delete iSettings;
+ delete iMmsHeaders;
+ if(iTimer)
+ {
+ iTimer->Cancel();
+ delete iTimer;
+ }
+ //delete iMsvEntrySelection;
+ delete iMmsClient;
+ delete iClientMtmRegistry;
+ //delete iClientMtmRegistry;
+ delete iSession;
+ delete iWait;
+ }
+
+void MmsTestBed::setConnectionLocal(bool value)
+ {
+ //value = true for global off, local on
+ //value = false for global on, local off
+ iSettings->LoadSettingsL();
+ iSettings->SetLocalMode( value );
+ iSettings->SaveSettingsL();
+ }
+
+void MmsTestBed::fromOutboxToMmsc()
+ {
+ CMsvEntry* cEntry = NULL;
+
+ // Get List of services
+ cEntry = iSession->GetEntryL(KMsvGlobalOutBoxIndexEntryIdValue);
+ CleanupStack::PushL(cEntry);
+ // Get all mms messages of outbox
+ CMsvEntrySelection* selection = cEntry->ChildrenWithMtmL(
+ KUidMsgTypeMultimedia);
+ CleanupStack::PushL(selection);
+
+ // Change state to "KMsvSendStateUnknown" in case the entry has been suspended earlier
+ for (TInt i = 0; i < selection->Count(); ++i)
+ {
+ cEntry->SetEntryL(selection->At(i));
+ TMsvEntry entry = cEntry->Entry();
+ entry.SetReadOnly(EFalse);
+ entry.SetSendingState(KMsvSendStateUnknown);
+ cEntry->ChangeL(entry);
+ }
+
+ selection->InsertL(0, iServiceId);
+
+ CMsvOperation * op = NULL;
+ TCommandParameters parameters; // initialized to zero
+ TCommandParametersBuf paramPack(parameters);
+
+ op = iSession->TransferCommandL(*selection, EMmsSend, paramPack,
+ iWait->iStatus);
+
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending)
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ if (iWait->iStatus.Int() != KErrNone)
+ {
+ //DEBUG(_L("Testbed tried to send, return status %d"), iWait->iStatus.Int());
+ }
+
+ iTimer->Cancel();
+
+ CleanupStack::PopAndDestroy(); // op
+ CleanupStack::PopAndDestroy(); // selection
+ CleanupStack::PopAndDestroy(); //cEntry
+ }
+
+void MmsTestBed::fromMmscToInbox()
+ {
+ CMsvEntrySelection* msvEntrySelection = new CMsvEntrySelection;
+ CleanupStack::PushL(msvEntrySelection);
+
+ // if we have a selected service, insert it into selection
+ if (iServiceId != KMsvNullIndexEntryId)
+ {
+ msvEntrySelection->InsertL(0, iServiceId);
+ }
+
+ CMsvOperation * op = NULL;
+ TCommandParameters parameters; // initialized to zero
+ TCommandParametersBuf paramPack(parameters);
+
+ op = iMmsClient->InvokeAsyncFunctionL(EMmsReceive, *msvEntrySelection,
+ paramPack, iWait->iStatus);
+
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending)
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ if (iWait->iStatus.Int() != KErrNone)
+ {
+ //DEBUG(_L("Testbed tried to receive, return status %d"),iWait->iStatus.Int());
+ }
+
+ iTimer->Cancel();
+ CleanupStack::PopAndDestroy(); // op
+ CleanupStack::PopAndDestroy(); //msvEntrySelection
+ }
+
+void MmsTestBed::findDefaultL()
+ {
+ iSettings->LoadSettingsL();
+ iDefaultServiceId = iSettings->Service();
+ }
+
+void MmsTestBed::HandleSessionEventL(TMsvSessionEvent aEvent, TAny* aArg1,
+ TAny* aArg2, TAny* /*aArg3*/)
+ {
+ iEvent = aEvent;
+ if (aEvent == EMsvGeneralError)
+ {
+ return;
+ }
+ TMsvId parentId = KMsvNullIndexEntryId;
+ if (aArg2 != NULL)
+ {
+ parentId = *(TMsvId*) aArg2;
+ }
+
+ CMsvEntrySelection* selection = (CMsvEntrySelection*) aArg1;
+ TMsvEntry tEntry;
+ TMsvId service;
+ TInt error = KErrNone;
+ error = iSession->GetEntry(selection->At(0), service, tEntry);
+
+ CMsvEntry* cEntry = NULL;
+ switch (aEvent)
+ {
+ case EMsvEntriesCreated:
+ {
+ if (parentId == KMsvGlobalInBoxIndexEntryIdValue)
+ {
+ // emit signal for new entry into INBOX
+ emit entryCreatedInInbox(tEntry.Id());
+ }
+ else if (parentId == KMsvDraftEntryIdValue)
+ {
+ // emit signal for new entry into Draft
+ emit entryCreatedInDraft(tEntry.Id());
+ }
+ else if (parentId == iServiceId)
+ {
+ // emit signal for new Entry into SERVICE
+ }
+ else
+ {
+ // do nothing
+ }
+ }
+ break;
+ case EMsvEntriesChanged:
+ {
+ TMsvId id;
+ CMsvEntrySelection* selection = (CMsvEntrySelection*) aArg1;
+ if (selection == NULL)
+ {
+ // no selection, cannot handle
+ return;
+ }
+ id = selection->At(0);
+ //DEBUG Entry changed"));
+ if (parentId == KMsvGlobalInBoxIndexEntryIdValue)
+ {
+/*
+ cEntry = iSession->GetEntryL( parentId );
+ CleanupStack::PushL( cEntry );
+ TRAPD (error, cEntry->SetEntryL( id ));
+ if ( error != KErrNone )
+ {
+ CleanupStack::PopAndDestroy(); // cEntry
+ return;
+ }
+ TMsvEntry tEntry = cEntry->Entry();
+ if ( tEntry.Visible() )
+ {
+ // generate fake delivery report
+ CMsvStore* store = cEntry->ReadStoreL();
+ CleanupStack::PushL( store );
+ CMmsHeaders* mmsHeaders = CMmsHeaders::NewL( iSettings->MmsVersion() );
+ CleanupStack::PushL( mmsHeaders );
+ mmsHeaders->RestoreL( *store );
+ iEncodeBuffer->ResizeL( 0 );
+ generateDeliveryReport( mmsHeaders );
+ CleanupStack::PopAndDestroy( 2 ); // mmsHeaders, store
+ }
+ CleanupStack::PopAndDestroy(); // cEntry
+*/
+ }
+ }
+ break;
+ case EMsvEntriesDeleted:
+ {
+ //emit signal for entry deleted
+ }
+ break;
+ case EMsvEntriesMoved:
+ {
+ if (parentId == KMsvGlobalOutBoxIndexEntryIdValue)
+ {
+ // entry moved to outbox
+ emit entryMovedToOutbox(tEntry.Id());
+ }
+ else if (parentId == KMsvSentEntryIdValue)
+ {
+ // entry moved to sent folder
+ emit entryMovedToSent(tEntry.Id());
+ }
+ else
+ {
+ // do nothing
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+void MmsTestBed::createMmsService()
+ {
+ CMmsSettings * settings = CMmsSettings::NewL();
+ CleanupStack::PushL( settings );
+ settings->CreateNewServiceL( *iSession );
+ CleanupStack::PopAndDestroy(); // settings
+ return;
+ }
+
+void MmsTestBed::cleanup()
+ {
+ TMsvId entryToBeKilled;
+ // Get access to root index
+ CMsvEntry* cEntry = iSession->GetEntryL(KMsvRootIndexEntryId);
+ CleanupStack::PushL(cEntry);
+
+ entryToBeKilled = iSettings->Service();
+ cEntry->SetSortTypeL( TMsvSelectionOrdering( KMsvNoGrouping, EMsvSortByNone, ETrue ) );
+ while (entryToBeKilled != KMsvNullIndexEntryId)
+ {
+ // delete child of root entry
+ deleteEntry(entryToBeKilled, *cEntry);
+ entryToBeKilled = iSettings->Service();
+ }
+
+ CleanupStack::PopAndDestroy(); // cEntry
+ // We deleted everything!
+ iDefaultServiceId = KMsvNullIndexEntryId;
+ iServiceId = KMsvNullIndexEntryId;
+ }
+
+void MmsTestBed::deleteEntry(TMsvId aEntryId, CMsvEntry& aClientEntry)
+ {
+ aClientEntry.DeleteL(aEntryId);
+ }
+
+void MmsTestBed::cleanupAndCreateNewService()
+ {
+ cleanup();
+ // all old service entries have been destroyed, create a new one
+ createMmsService();
+ }
+
+void MmsTestBed::testFile(TFileName& aFilePath, TInt aCommand /* = 0 */, TMsvId aBox /* = KMsvGlobalOutBoxIndexEntryId */ )
+ {
+ // update settings in mmsclient
+ iMmsClient->RestoreSettingsL();
+ iSettings->CopyL( iMmsClient->MmsSettings() );
+
+ RFileReadStream readStream;
+ readStream.PushL();
+// TMsvId id = KMsvNullIndexEntryId;
+ CBufFlat* encodeBuffer = NULL;
+ CMmsEncode* encoder = NULL;
+
+ // Open the file
+ TInt err = readStream.Open(iFs, aFilePath, EFileShareReadersOnly );
+ if (err != KErrNone) User::Leave( err );
+
+ TInt retCode = 0;
+ CMmsReadFile* readFile = NULL;
+ readFile = CMmsReadFile::NewL( iFs, readStream );
+ CleanupStack::PushL( readFile );
+
+ TInt messageCounter = 0;
+ CMsvEntry* cEntry = NULL;
+
+ while(!retCode)
+ {
+ // READ MESSAGE TO BUFFERS
+ iMmsHeaders->Reset(iSettings);
+ // put in some message type just for fun (testing...)
+ iMmsHeaders->SetMessageType( KMmsMessageTypeForwardReq );
+ retCode = readFile->CompleteTestL( messageCounter++, *iMmsHeaders );
+ if(readFile->iMessageType == ETestNewMessage)
+ {
+ // CREATE MESSAGE ENTRY
+ switch ( aCommand )
+ {
+ case ECreateToInbox:
+ case ECreateNotification:
+ cEntry = iSession->GetEntryL(KMsvGlobalInBoxIndexEntryId);
+ break;
+ case ECreateToSentItems:
+ cEntry = iSession->GetEntryL(KMsvSentEntryId);
+ break;
+ case ECreateToDrafts:
+ cEntry = iSession->GetEntryL(KMsvDraftEntryId);
+ break;
+ case ECreateHeadersFromFile:
+ // here we just encode headers, no message entry
+ // the entry is fake.
+ break;
+ case ECreateMMBoxViewConf:
+ if ( iMmsHeaders->MessageType() == KMmsMessageTypeMboxViewConf )
+ {
+ // entry is not created for the description items
+ // they become attachments
+ cEntry = iSession->GetEntryL(KMsvDraftEntryId);
+ }
+ break;
+ default:
+ cEntry = iSession->GetEntryL(aBox);
+ break;
+ }
+
+ // if we are just playing with headers we have no entry
+ if ( aCommand != ECreateHeadersFromFile && aCommand != ECreateMMBoxViewConf )
+ {
+ CleanupStack::PushL(cEntry);
+ iMmsClient->SwitchCurrentEntryL(cEntry->EntryId());
+
+ // CREATE MESSAGE
+ iMmsClient->CreateMessageL(iServiceId);
+ }
+ else if ( aCommand == ECreateMMBoxViewConf )
+ {
+ if ( iMmsHeaders->MessageType() == KMmsMessageTypeMboxViewConf )
+ {
+ CleanupStack::PushL(cEntry);
+ iMmsClient->SwitchCurrentEntryL(cEntry->EntryId());
+
+ // CREATE MESSAGE
+ iMmsClient->CreateMessageL(iServiceId);
+ }
+ else
+ {
+ encodeBuffer = CBufFlat::NewL( 4 * 1024 ); // should be plenty
+ CleanupStack::PushL( encodeBuffer );
+ encoder = CMmsEncode::NewL( iFs );
+ CleanupStack::PushL( encoder );
+
+ // encode headers to a binary file
+ encoder->EncodeHeadersL( *iMmsHeaders, *encodeBuffer );
+
+ iFilename = KMmsMMBoxDescriptionDirectory;
+ TMmsTestUtils::Dump( *encodeBuffer, iFilename, iParse, iFs );
+
+ CleanupStack::PopAndDestroy( 2 ); // encodeBuffer, encoder
+ encodeBuffer = NULL;
+ encoder = NULL;
+ }
+ }
+ else
+ {
+ encodeBuffer = CBufFlat::NewL( 4 * 1024 ); // should be plenty
+ CleanupStack::PushL( encodeBuffer );
+ encoder = CMmsEncode::NewL( iFs );
+ CleanupStack::PushL( encoder );
+
+ // encode headers to a binary file
+ encoder->EncodeHeadersL( *iMmsHeaders, *encodeBuffer );
+
+ iFilename = KMmsDumpDirectory;
+ TMmsTestUtils::Dump( *encodeBuffer, iFilename, iParse, iFs );
+
+ CleanupStack::PopAndDestroy( 2 ); // encodeBuffer, encoder
+ encodeBuffer = NULL;
+ encoder = NULL;
+ }
+ }
+
+ if ( aCommand != ECreateHeadersFromFile &&
+ ( aCommand != ECreateMMBoxViewConf || iMmsHeaders->MessageType() == KMmsMessageTypeMboxViewConf ) )
+ {
+ if(readFile->iMessageType == ETestSettings)
+ {
+ TMsvId ServiceId = iMmsClient->DefaultServiceL();
+ iMmsClient->RestoreSettingsL();
+ iSettings->CopyL( iMmsClient->MmsSettings() );
+ }
+
+ TMemoryInfoV1Buf memory;
+ UserHal::MemoryInfo( memory );
+ TInt available = memory().iFreeRamInBytes;
+// TMmsLogger::Log(_L("Free memory before CreateMessageL %d"), available );
+
+ TRAP (err, readFile->CreateMessageL(iMmsClient, iMmsHeaders));
+
+ available = memory().iFreeRamInBytes;
+// TMmsLogger::Log(_L("Free memory after CreateMessageL %d"), available );
+
+ if(readFile->iMessageType == ETestNewMessage)
+ {
+ TMsvEntry tEntry = iMmsClient->Entry().Entry();
+ TMsvId id = tEntry.Id();
+ if ( err == KErrNone )
+ {
+ // SAVE MESSAGE
+ iMmsClient->SaveMessageL();
+
+ // If we are creating a MMBox View confirmation,
+ // we add all binary files from KMmsMMBoxDirectory
+ // as attachments.
+
+ if ( iMmsHeaders->MessageType() == KMmsMessageTypeMboxViewConf )
+ {
+ addMMBoxDescriptions();
+ }
+
+ // reload the entry in case mms client put something into it
+ // MESSAGE MUST BE SET VISIBLE
+ tEntry = iMmsClient->Entry().Entry();
+ if ( iMmsClient->MessageClass() == EMmsClassAdvertisement )
+ {
+ tEntry.iMtmData1 |= KMmsMessageAdvertisement;
+ }
+ else if ( iMmsClient->MessageClass() == EMmsClassInformational )
+ {
+ tEntry.iMtmData1 |= KMmsMessageInformational;
+ }
+ tEntry.iMtmData1 &= ~KMmsMessageMobileTerminated;
+
+ // Test: Set all as editor oriented - except notifications!
+ if ( aCommand == ECreateNotification )
+ {
+ tEntry.iMtm = KUidMsgMMSNotification;
+ }
+ else
+ {
+ tEntry.iMtmData1 |= KMmsMessageEditorOriented;
+ }
+ if ( aCommand == ECreateToInbox )
+ {
+ tEntry.iMtmData1 |= KMmsMessageMobileTerminated;
+ tEntry.SetReadOnly( ETrue );
+ tEntry.SetNew( ETrue );
+ tEntry.SetUnread( ETrue );
+ }
+ else if ( aCommand == ECreateToSentItems )
+ {
+ tEntry.SetReadOnly( ETrue );
+ }
+ tEntry.SetVisible( ETrue );
+ tEntry.SetInPreparation( EFalse );
+ TTime now;
+ now.UniversalTime();
+ tEntry.iDate = now;
+ TMsvId entryId = tEntry.Id();
+ iMmsClient->Entry().ChangeL( tEntry );
+ if ( iMmsHeaders->MessageType() == KMmsMessageTypeMboxViewConf )
+ {
+ // Encode to the directory that is used to fetch MMBox view
+ iFilename.Copy( KMmsMMBoxDirectory );
+ encodeMessageFromDrafts();
+ cEntry->SetEntryL( KMsvDraftEntryId );
+ cEntry->DeleteL( entryId );
+ }
+ }
+ else
+ {
+ //TMmsLogger::Log(_L("CreateMessageL left with error %d"), err );
+ iSession->RemoveEntry(id);
+ err = KErrNone; // clear error
+ }
+ CleanupStack::PopAndDestroy(); // cEntry
+ cEntry = NULL;
+ }
+ if(readFile->iMessageType == ETestSettings)
+ {
+ iMmsClient->SetSettingsL( *iSettings );
+ iMmsClient->StoreSettingsL();
+ }
+ }
+ }
+
+ CleanupStack::PopAndDestroy(); //readFile
+
+ readStream.Close();
+ readStream.Pop();
+
+ /*
+ iMmsClient->SwitchCurrentEntryL(id);
+ */
+ }
+
+void MmsTestBed::addMMBoxDescriptions()
+ {
+ // add the contents of KMmsMMBoxDescriptionDirectory as attachments
+ CDir* fileList = NULL;
+ TInt i = 0; // general counter
+ TInt error = KErrNone;
+ iCurrentPath = KMmsMMBoxDescriptionDirectory;
+
+ iFs.SetSessionPath(iCurrentPath);
+
+ TFindFile finder( iFs );
+ error = finder.FindWildByPath( KWild, NULL, fileList );
+ CleanupStack::PushL( fileList );
+ TInt fileCounter = 0;
+
+ if ( error == KErrNone )
+ {
+ fileCounter = fileList->Count();
+ }
+
+ TEntry entry;
+
+ if ( error == KErrNone )
+ {
+ for ( i = 0; i < fileCounter; ++i )
+ {
+ // Reset inactivity timer to keep viewServer from crashing
+ User::ResetInactivityTime();
+ entry = (*fileList)[i]; // name is entry.iName
+ iFilename.Copy( iCurrentPath );
+ iFilename.Append( entry.iName );
+ TPtrC ptr;
+ ptr.Set( iFilename );
+ iWait->iStatus = KErrNone;
+ iMmsClient->AddAttachmentL( ptr, KMmsMimeType, 0, iWait->iStatus );
+
+ iWait->Start();
+ // The descriptions are cleared after being used
+ iFs.Delete( ptr);
+ }
+ }
+
+ iMmsClient->SaveMessageL(); // just in case somthing must be updated
+ CleanupStack::PopAndDestroy(); // fileList
+ fileList = NULL;
+ }
+
+void MmsTestBed::encodeMessageFromDrafts()
+ {
+ CMmsEncode* encoder = CMmsEncode::NewL( iFs );
+ CleanupStack::PushL( encoder );
+ // encode a message iMmsClientPoints to
+ iMmsClient->LoadMessageL();
+ CMsvStore* store = iMmsClient->Entry().ReadStoreL();
+ CleanupStack::PushL( store );
+ iMmsHeaders->RestoreL( *store );
+ CleanupStack::PopAndDestroy(); // store
+ store = NULL;
+ iWait->iStatus = KErrNone;
+
+// caller sets the directory
+// iFilename = KMmsMessageDumpDirectory;
+
+ CMmsClientEntry* entryWrapper = CMmsClientEntry::NewL( iFs, iMmsClient->Entry(), iServiceId );
+ CleanupStack::PushL( entryWrapper );
+ iEncodeBuffer->ResizeL(0);
+ encoder->StartL( *entryWrapper, *iMmsHeaders, *iEncodeBuffer, iWait->iStatus );
+ iWait->Start();
+ if ( iWait->iStatus == KErrNone )
+ {
+ TMmsTestUtils::Dump( *iEncodeBuffer, iFilename, iParse, iFs );
+ }
+ iEncodeBuffer->ResizeL(0);
+ CleanupStack::PopAndDestroy(); // entryWrapper
+ CleanupStack::PopAndDestroy(); // encoder
+ }
+
+void MmsTestBed::deleteNotifications()
+ {
+ TMsvId mmsFolderId = KMsvNullIndexEntryId;
+ mmsFolderId = findMMSFolder();
+
+ CMsvEntry* cEntry = NULL;
+ // delete all messages from the specified box
+ cEntry = iSession->GetEntryL(KMsvRootIndexEntryId);
+ CleanupStack::PushL(cEntry);
+
+ if ( mmsFolderId != KMsvNullIndexEntryId )
+ {
+ cEntry->SetEntryL(mmsFolderId);
+
+ // show invisible entries
+ cEntry->SetSortTypeL( TMsvSelectionOrdering( KMsvNoGrouping, EMsvSortByNone, ETrue ) );
+ CMsvEntrySelection* msvEntrySelection = cEntry->ChildrenWithMtmL(KUidMsgTypeMultimedia);
+ CleanupStack::PushL(msvEntrySelection);
+
+ TCommandParameters parameters; // initialized to zero
+ TCommandParametersBuf paramPack( parameters );
+
+ if (msvEntrySelection->Count() > 0)
+ {
+ CMsvOperation* op = iSession->TransferCommandL(
+ *msvEntrySelection,
+ EMmsDeleteEntries,
+ paramPack,
+ iWait->iStatus);
+ CleanupStack::PushL(op);
+ iWait->Start();
+ CleanupStack::PopAndDestroy(); // op
+ }
+
+ // These cannot be deleted unless we have the a server mtm
+ // corresponding to this mtm type.
+ cEntry->SetSortTypeL( TMsvSelectionOrdering( KMsvNoGrouping, EMsvSortByNone, ETrue ) );
+ CleanupStack::PopAndDestroy(); //msvEntrySelection
+ msvEntrySelection = cEntry->ChildrenWithMtmL( KUidMsgMMSNotification );
+ CleanupStack::PushL(msvEntrySelection);
+
+ if (msvEntrySelection->Count() > 0)
+ {
+ CMsvOperation* op = iSession->TransferCommandL(
+ *msvEntrySelection,
+ EMmsDeleteEntries,
+ paramPack,
+ iWait->iStatus);
+ CleanupStack::PushL(op);
+ iWait->Start();
+ CleanupStack::PopAndDestroy(); // op
+ }
+
+ CleanupStack::PopAndDestroy(); //msvEntrySelection
+
+ CleanupStack::PopAndDestroy(); //cEntry
+ }
+ }
+
+TMsvId MmsTestBed::findMMSFolder()
+ {
+ return iSettings->NotificationFolder();
+ }
+
+void MmsTestBed::restoreFactorySettings()
+ {
+ iMmsClient->RestoreSettingsL();
+ iSettings->CopyL( iMmsClient->MmsSettings() );
+ // do not reset access point
+ TInt accessPoint = iSettings->AccessPoint( 0 );
+ iSettings->RestoreFactorySettingsL( iMmsClient->Session(), EMmsFactorySettingsLevelDeep );
+ TInt count = iSettings->AccessPointCount();
+ TInt i = 0;
+ for ( i = count - 1; i >= 0; --i )
+ {
+ iSettings->DeleteAccessPointL( i );
+ }
+ // restore the original access point
+ if ( accessPoint > 0 )
+ {
+ // a negative access point is an error (most likely "KErrNotFound")
+ iSettings->AddAccessPointL( accessPoint, 0 );
+ }
+ iMmsClient->SetSettingsL( *iSettings );
+ iMmsClient->StoreSettingsL();
+ }
+
+void MmsTestBed::setFetchingState( TMmsReceivingMode aState )
+ {
+ iMmsClient->RestoreSettingsL();
+ iSettings->CopyL( iMmsClient->MmsSettings() );
+
+ iSettings->SetReceivingModeHome( aState );
+
+ iMmsClient->SetSettingsL( *iSettings );
+ iMmsClient->StoreSettingsL();
+ }
+
+void MmsTestBed::sendFromFile()
+ {
+ CMsvOperation * op = NULL;
+
+ CMsvEntry* cEntry = iSession->GetEntryL(KMsvGlobalOutBoxIndexEntryId);
+ CleanupStack::PushL( cEntry );
+
+ CMsvEntrySelection* selection = NULL;
+ selection = cEntry->ChildrenWithMtmL(KUidMsgTypeMultimedia);
+ CleanupStack::PopAndDestroy(); // cEntry
+ CleanupStack::PushL( selection );
+
+ TRAPD (error, op = iMmsClient->SendL(*selection, iWait->iStatus));
+ if ( error != KErrNone )
+ {
+ CleanupStack::PopAndDestroy(); // selection
+ delete op;
+ return;
+ }
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ if ( iWait->iStatus.Int() != KErrNone )
+ {
+ //TMmsLogger::Log(_L("Testbed tried to send, return status %d"), iWait->iStatus.Int());
+ }
+
+ iTimer->Cancel();
+ CleanupStack::PopAndDestroy(2); // op, selection
+ }
+
+void MmsTestBed::sendOneByOne()
+ {
+ CMsvEntry* cEntry = iSession->GetEntryL(KMsvGlobalOutBoxIndexEntryId);
+ CleanupStack::PushL( cEntry );
+
+ CMsvEntrySelection* selection = NULL;
+ selection = cEntry->ChildrenWithMtmL(KUidMsgTypeMultimedia);
+ CleanupStack::PushL( selection );
+
+ CMsvEntrySelection* shortSelection = new (ELeave) CMsvEntrySelection;
+ CleanupStack::PushL( shortSelection );
+
+ TInt i;
+
+ for ( i = 0; i < selection->Count(); ++i )
+ {
+ shortSelection->Reset();
+ shortSelection->AppendL( selection->At( i ) );
+
+ CMsvOperation * op = NULL;
+
+ TTime now;
+ now.UniversalTime();
+
+ TRAPD (error, op = iMmsClient->SendL(*shortSelection, iWait->iStatus, now ));
+ if ( error != KErrNone )
+ {
+ delete op;
+ CleanupStack::PopAndDestroy( 3 ); // entry, selection, shortSelection
+ return;
+ }
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ if ( iWait->iStatus.Int() != KErrNone )
+ {
+ //TMmsLogger::Log(_L("Testbed tried to send, return status %d"), iWait->iStatus.Int());
+ }
+
+ iTimer->Cancel();
+ CleanupStack::PopAndDestroy(); // op
+
+ }
+ CleanupStack::PopAndDestroy( 3 ); // entry, selection, shortSelection
+ }
+
+void MmsTestBed::sendNotifications()
+ {
+ // Only send one notification!!
+
+ TInt error = KErrNone;
+
+ if (! TMmsTestUtils::IsFile(iCurrentFile, iFs) )
+ {
+ //Not a file
+ return;
+ }
+ TMsvId mmsFolder = findMMSFolder();
+
+ TEntry entry;
+
+
+ // now I think we have a filename
+ TEntry orgEntry;
+ TUint size = 0;
+ error = iFs.Entry( iCurrentFile, orgEntry );
+ size = orgEntry.iSize;
+
+ //TMmsLogger::Log(_L("- notification %S "), &iCurrentFile);
+ if ( size == 0 )
+ {
+ //empty file
+ //TMmsLogger::Log(_L("- empty file"));
+ return;
+ }
+
+ if ( iEncodeBuffer == NULL )
+ {
+ iEncodeBuffer = CBufFlat::NewL( size );
+ }
+ else
+ {
+ iEncodeBuffer->ResizeL( 0 );
+ iEncodeBuffer->ResizeL( size );
+ }
+
+ RFile inFile;
+ error = inFile.Open( iFs, iCurrentFile, EFileShareReadersOnly );
+ TPtr8 ptr = iEncodeBuffer->Ptr( 0 );
+ if ( error == KErrNone )
+ {
+ error = inFile.Read( ptr, size );
+ inFile.Close();
+ }
+ else
+ {
+ //Error
+ //TMmsLogger::Log(_L("- can't read file"));
+ return;
+ }
+
+ TUint8 byte;
+ TUint position = 0;
+ TUint32 uintvar = 0;
+
+ if ( size > 2 )
+ {
+ iEncodeBuffer->Read( 1, &byte, 1 );
+ if ( byte == 6 ) // PUSH PDU
+ {
+ // try to find out length of header
+ position = 2;
+ iEncodeBuffer->Read( position, &byte, 1);
+
+ while ( byte & 0x80 && position < size )
+ {
+ uintvar += ( byte & 0x7f );
+ uintvar <<= 7;
+ position++;
+ iEncodeBuffer->Read( position, &byte, 1 );
+ }
+
+ // add last byte without shift
+ uintvar += byte;
+ position++;
+ }
+ }
+
+ position += uintvar;
+
+ if ( position < size )
+ {
+ ptr = iEncodeBuffer->Ptr( position );
+ size = ptr.Length();
+ }
+
+ if ( size == 0 )
+ {
+ //no MMS stuff
+ //TMmsLogger::Log(_L("- no MMS stuff"));
+ return;
+ }
+
+ TMsvId entryId = TMmsTestUtils::CreateNotificationEntryL( mmsFolder, iServiceId, iEncodeBuffer, *iSession );
+
+ // Now we have streamed our data into this entry.
+ // Now we have an entry that says: local service, MMS MTM
+ CMsvEntrySelection* selection = new (ELeave) CMsvEntrySelection;
+ CleanupStack::PushL( selection );
+ if ( entryId != KMsvNullIndexEntryId )
+ {
+ selection->AppendL( entryId );
+ }
+ else
+ {
+ selection->AppendL( iDefaultServiceId );
+ }
+
+ TWatcherParameters parameters; // initialized to zero
+ parameters.iWatcherId = RThread().Id();
+ parameters.iDataPointer = &ptr;
+ TWatcherParametersBuf paramPack( parameters );
+
+ CMsvOperation * op = NULL;
+
+ op = iSession->TransferCommandL(
+ *selection, EMmsDecodePushedMessage, paramPack, iWait->iStatus );
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ iTimer->Cancel();
+ User::After(1000000);
+
+ CleanupStack::PopAndDestroy(); // op
+ CleanupStack::PopAndDestroy(); // selection
+ }
+
+void MmsTestBed::copyDrafts()
+ {
+ CMsvEntry* cEntry = NULL;
+// Copies contents of sent folder to drafts for retrying sending.
+
+ cEntry = iSession->GetEntryL(KMsvSentEntryId);
+ CleanupStack::PushL(cEntry);
+ // Get all mms messages in drafts
+ CMsvEntrySelection* selection = cEntry->ChildrenWithMtmL( KUidMsgTypeMultimedia );
+ CleanupStack::PushL( selection );
+
+ TMsvLocalOperationProgress progress;
+ cEntry->CopyL( *selection, KMsvDraftEntryId, progress );
+
+ TInt i = 0;
+ for ( i = 0; i < selection->Count(); ++i )
+ {
+ cEntry->SetEntryL( selection->At( i ) );
+ TMsvEntry entry = cEntry->Entry();
+ entry.SetReadOnly( EFalse );
+ cEntry->ChangeL( entry );
+ }
+
+ CleanupStack::PopAndDestroy(2); // selection, cEntry
+ }
+
+void MmsTestBed::garbageCollection(TUint32 aReason)
+ {
+ CMsvEntrySelection* selection = new (ELeave) CMsvEntrySelection;
+ CleanupStack::PushL( selection );
+ selection->InsertL(0, iDefaultServiceId);
+
+ CMsvOperation * op = NULL;
+
+ TMMSGarbageCollectionParameters parameters; // initialized to zero
+ parameters.iReasonFlags = aReason;
+ TMMSGarbageCollectionParametersBuf paramPack( parameters );
+ op = iSession->TransferCommandL(
+ *selection, EMmsGarbageCollection, paramPack, iWait->iStatus );
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ iTimer->Cancel();
+
+ CleanupStack::PopAndDestroy(); // op
+ CleanupStack::PopAndDestroy(); // selection
+ }
+
+void MmsTestBed::messageVariation()
+ {
+ CMsvEntrySelection* selection = new (ELeave) CMsvEntrySelection;
+ CleanupStack::PushL( selection );
+ selection->InsertL(0, iDefaultServiceId);
+
+ CMsvOperation * op = NULL;
+
+ op = iSession->TransferCommandL(
+ *selection, EMmsMessageGeneration, TPtrC8(), iWait->iStatus );
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ iTimer->Cancel();
+
+ CleanupStack::PopAndDestroy(); // op
+ CleanupStack::PopAndDestroy(); // selection
+ }
+
+void MmsTestBed::cancelSendScheduling()
+ {
+ CMsvEntry* cEntry = NULL;
+ setFetchingState( EMmsReceivingPostpone );
+ testFile( iCurrentFile );
+ scheduledSend(KMsvGlobalOutBoxIndexEntryIdValue, 10000); // long delay so that we have time to cancel
+ deleteSendSchedule();
+
+ cEntry = iSession->GetEntryL(KMsvRootIndexEntryId);
+ CleanupStack::PushL(cEntry);
+ cEntry->SetEntryL(KMsvGlobalOutBoxIndexEntryIdValue);
+ if (iMsvEntrySelection != NULL)
+ {
+ delete iMsvEntrySelection;
+ iMsvEntrySelection = NULL;
+ }
+ iMsvEntrySelection = cEntry->ChildrenWithMtmL(KUidMsgTypeMultimedia);
+ CleanupStack::PopAndDestroy();
+ }
+
+void MmsTestBed::scheduledSend(TMsvId aBoxId, TInt aDelay /* = 5 */)
+ {
+ CMsvEntry* cEntry = NULL;
+ TCommandParameters parameters;
+ parameters.iInitialDelay = aDelay;
+ TCommandParametersBuf paramPack( parameters );
+
+ cEntry = iSession->GetEntryL(aBoxId);
+ CleanupStack::PushL(cEntry);
+ // Get all mms messages of outbox
+ CMsvEntrySelection* selection = cEntry->ChildrenWithMtmL( KUidMsgTypeMultimedia );
+ CleanupStack::PushL( selection );
+// selection->InsertL(0, iDefaultServiceId);
+
+ CMsvOperation * op = NULL;
+ op = iMmsClient->InvokeAsyncFunctionL(
+ EMmsScheduledSend,
+ *selection,
+ paramPack,
+ iWait->iStatus);
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ iTimer->Cancel();
+
+ CleanupStack::PopAndDestroy(); // op
+ CleanupStack::PopAndDestroy(2); // cEntry, selection
+ }
+
+void MmsTestBed::deleteSendSchedule()
+ {
+ CMsvEntry* cEntry = NULL;
+
+ TCommandParameters parameters; // initialized to zero
+ TCommandParametersBuf paramPack( parameters );
+
+ cEntry = iSession->GetEntryL(KMsvGlobalOutBoxIndexEntryIdValue);
+ CleanupStack::PushL(cEntry);
+ // Get all mms messages of outbox
+ CMsvEntrySelection* selection = cEntry->ChildrenWithMtmL( KUidMsgTypeMultimedia );
+ CleanupStack::PushL( selection );
+ selection->InsertL(0, iDefaultServiceId);
+
+ CMsvOperation * op = NULL;
+ op = iMmsClient->InvokeAsyncFunctionL(
+ EMmsDeleteSchedule,
+ *selection,
+ paramPack,
+ iWait->iStatus);
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ iTimer->Cancel();
+
+ CleanupStack::PopAndDestroy(); // op
+ CleanupStack::PopAndDestroy(2); // cEntry, selection
+ }
+
+void MmsTestBed::cancelFetchScheduling()
+ {
+ TMsvId mmsFolder = findMMSFolder();
+ CMsvEntry* cEntry = NULL;
+ setFetchingState( EMmsReceivingPostpone );
+ testFile( iCurrentFile );
+ fromOutboxToMmsc(); // immediate send (EMmsSend)
+
+ // Wait until notification has arrived - may take a while in global mode
+ TInt i = 0;
+ while ( TMmsTestUtils::CountChildrenL( mmsFolder, iMsvEntrySelection, *iSession ) == 0
+ && i < 2000 )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ i++;
+ if ( (i/100) * 100 == i )
+ {
+ //TMmsLogger::Log(_L("%d:th wait cycle"), i );
+ }
+ CActiveScheduler::Start();
+ }
+ iTimer->Cancel();
+
+ fetchForced( 10000 ); // delay to allow cancelling
+ deleteFetchSchedule();
+
+ cEntry = iSession->GetEntryL(KMsvRootIndexEntryId);
+ CleanupStack::PushL(cEntry);
+ cEntry->SetEntryL(mmsFolder);
+ if (iMsvEntrySelection != NULL)
+ {
+ delete iMsvEntrySelection;
+ iMsvEntrySelection = NULL;
+ }
+ iMsvEntrySelection = cEntry->ChildrenWithMtmL(KUidMsgTypeMultimedia);
+ CleanupStack::PopAndDestroy(); // cEntry
+ }
+
+void MmsTestBed::fetchForced(TInt aDelay /* = 5 */)
+ {
+ TCommandParameters parameters;
+ parameters.iInitialDelay = aDelay;
+ TCommandParametersBuf paramPack( parameters );
+
+ CMsvEntrySelection* selection = new CMsvEntrySelection;
+ CleanupStack::PushL( selection );
+ // if we have a selected service, insert it into selection
+ if (iServiceId != KMsvNullIndexEntryId)
+ {
+ selection->InsertL(0, iServiceId);
+ }
+ else
+ {
+ selection->InsertL(0, iDefaultServiceId);
+ }
+
+
+ CMsvOperation * op = NULL;
+ op = iMmsClient->InvokeAsyncFunctionL(
+ EMmsScheduledReceiveForced,
+ *selection,
+ paramPack,
+ iWait->iStatus);
+
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ iTimer->Cancel();
+
+ CleanupStack::PopAndDestroy(); // op
+ CleanupStack::PopAndDestroy(); // selection
+ }
+
+void MmsTestBed::deleteFetchSchedule()
+ {
+ CMsvEntry* cEntry = NULL;
+
+ TCommandParameters parameters; // initialized to zero
+ TCommandParametersBuf paramPack( parameters );
+
+ TMsvId mmsFolderId = KMsvNullIndexEntryId;
+ mmsFolderId = findMMSFolder();
+ cEntry = iSession->GetEntryL( mmsFolderId );
+ CleanupStack::PushL(cEntry);
+ // Get all notifications
+ CMsvEntrySelection* selection = cEntry->ChildrenWithMtmL( KUidMsgTypeMultimedia );
+ CleanupStack::PushL( selection );
+ selection->InsertL(0, iDefaultServiceId);
+
+ CMsvOperation * op = NULL;
+ op = iMmsClient->InvokeAsyncFunctionL(
+ EMmsDeleteSchedule,
+ *selection,
+ paramPack,
+ iWait->iStatus);
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ iTimer->Cancel();
+
+ CleanupStack::PopAndDestroy(); // op
+ CleanupStack::PopAndDestroy(2); // cEntry, selection
+ }
+
+void MmsTestBed::doAFetchCycle()
+ {
+ // Sends a message from iCurrentFile and lets it come back
+ TMsvId mmsFolder = findMMSFolder();
+ testFile( iCurrentFile );
+ fromOutboxToMmsc(); // immediate send (EMmsSend)
+ // fetching will start automatically
+
+ TInt i = 0;
+ while ( TMmsTestUtils::CountChildrenL( KMsvGlobalInBoxIndexEntryId, iMsvEntrySelection, *iSession ) == 0
+ && i < 2000
+ && TMmsTestUtils::CountChildrenL( mmsFolder, iMsvEntrySelection, *iSession ) > 0 )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ i++;
+ if ( (i/100) * 100 == i )
+ {
+ //TMmsLogger::Log(_L("%d:th wait cycle"), i );
+ }
+ CActiveScheduler::Start();
+ }
+ iTimer->Cancel();
+ }
+
+bool MmsTestBed::checkLogClient()
+ {
+ if ( iLogClient == NULL )
+ {
+ TRAP_IGNORE( iLogClient = CLogClient::NewL( iFs ) );
+ }
+ return ( iLogClient != NULL );
+ }
+
+int MmsTestBed::getLogEntries()
+ {
+ TInt count = 0;
+ if ( !iLogView )
+ {
+ return 0;
+ }
+
+ if ( iLogView->SetFilterL( *iLogFilter, iWait->iStatus ) )
+ {
+ // should complete with KErrNone
+ iWait->Start();
+ if ( iWait->iStatus.Int() == KErrNone )
+ {
+ count = iLogView->CountL();
+ }
+ }
+ return count;
+ }
+
+void MmsTestBed::createEntry(TMsvEntry& aNewEntry, CMsvEntry& aClientEntry)
+ {
+ CMsvOperation* opert = aClientEntry.CreateL(aNewEntry, iWait->iStatus);
+ iWait->Start();
+ if (!opert->iStatus.Int()==KErrNone)
+ {
+ // what should we do? panic?
+ }
+
+ TPckgBuf<TMsvLocalOperationProgress> package;
+ package.Copy(opert->ProgressL());
+ *(TMsvId*)&aNewEntry = package().iId;
+
+ delete opert; opert=NULL;
+ }
+
+void MmsTestBed::cleanOutbox()
+ {
+ TMmsTestUtils::CleanBoxL(KMsvGlobalOutBoxIndexEntryId, *iSession);
+ }
+
+void MmsTestBed::cleanInbox()
+ {
+ TMmsTestUtils::CleanBoxL(KMsvGlobalInBoxIndexEntryId, *iSession);
+ }
+
+void MmsTestBed::cleanSent()
+ {
+ TMmsTestUtils::CleanBoxL(KMsvSentEntryId, *iSession);
+ }
+
+void MmsTestBed::cleanDrafts()
+ {
+ TMmsTestUtils::CleanBoxL(KMsvDraftEntryId, *iSession);
+ }
+
+void MmsTestBed::cleanAll()
+ {
+ cleanInbox();
+ cleanOutbox();
+ cleanSent();
+ cleanDrafts();
+ TMmsTestUtils::CleanBoxL( iSettings->MMBoxFolder(), *iSession );
+ deleteNotifications();
+ }
+
+void MmsTestBed::reply()
+ {
+ // The first message from inbox is replied to
+ CMsvEntry* cEntry = iSession->GetEntryL(KMsvGlobalInBoxIndexEntryId);
+ CleanupStack::PushL(cEntry);
+ delete iMsvEntrySelection;
+ iMsvEntrySelection = NULL;
+ iMsvEntrySelection = cEntry->ChildrenWithMtmL( KUidMsgTypeMultimedia );
+ if ( iMsvEntrySelection->Count() > 0 )
+ {
+ TMsvId originalEntry = iMsvEntrySelection->At(0);
+ iMmsClient->SwitchCurrentEntryL( originalEntry );
+ TMsvPartList partList = KMsvMessagePartOriginator | KMsvMessagePartDescription;
+ CMsvOperation * op = NULL;
+ op = iMmsClient->ReplyL( KMsvGlobalOutBoxIndexEntryId, partList, iWait->iStatus);
+ CleanupStack::PushL(op);
+ iWait->Start();
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ iTimer->Cancel();
+ if ( iWait->iStatus.Int() != KErrNone )
+ {
+ //TMmsLogger::Log(_L("Create reply, return status %d"), iWait->iStatus.Int());
+ }
+ else
+ {
+ TMsvId newEntry = KMsvNullIndexEntryId;
+ TPckgBuf<TMsvId> package;
+ package.Copy(op->ProgressL());
+ newEntry = package();
+ if ( newEntry != KMsvNullIndexEntryId )
+ {
+ cEntry->SetEntryL( newEntry );
+ TMsvEntry entry = cEntry->Entry();
+ entry.SetInPreparation( EFalse );
+ entry.SetVisible( ETrue );
+ cEntry->ChangeL(entry);
+ }
+ }
+ CleanupStack::PopAndDestroy(); // op
+ }
+ CleanupStack::PopAndDestroy(); // cEntry
+ }
+
+void MmsTestBed::replyToAll()
+ {
+ // The first message from inbox is replied to
+ CMsvEntry* cEntry = iSession->GetEntryL(KMsvGlobalInBoxIndexEntryId);
+ CleanupStack::PushL(cEntry);
+ delete iMsvEntrySelection;
+ iMsvEntrySelection = NULL;
+ iMsvEntrySelection = cEntry->ChildrenWithMtmL(KUidMsgTypeMultimedia);
+
+ if ( iMsvEntrySelection->Count() > 0 )
+ {
+ TMsvId originalEntry = iMsvEntrySelection->At(0);
+ iMmsClient->SwitchCurrentEntryL( originalEntry );
+ TMsvPartList partList = KMsvMessagePartOriginator | KMsvMessagePartDescription |
+ KMsvMessagePartRecipient;
+ CMsvOperation * op = NULL;
+ op = iMmsClient->ReplyL( KMsvGlobalOutBoxIndexEntryId, partList, iWait->iStatus);
+ CleanupStack::PushL(op);
+ iWait->Start();
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ iTimer->Cancel();
+ if ( iWait->iStatus.Int() != KErrNone )
+ {
+ //TMmsLogger::Log(_L("Create reply to all, return status %d"), iWait->iStatus.Int());
+ }
+ else
+ {
+ TMsvId newEntry = KMsvNullIndexEntryId;
+ TPckgBuf<TMsvId> package;
+ package.Copy(op->ProgressL());
+ newEntry = package();
+ if ( newEntry != KMsvNullIndexEntryId )
+ {
+ cEntry->SetEntryL( newEntry );
+ TMsvEntry entry = cEntry->Entry();
+ entry.SetInPreparation( EFalse );
+ entry.SetVisible( ETrue );
+ cEntry->ChangeL(entry);
+ }
+ }
+ CleanupStack::PopAndDestroy(); // op
+ }
+ CleanupStack::PopAndDestroy(); // cEntry
+ }
+
+void MmsTestBed::forward()
+ {
+ // The first message from inbox is forwarded
+ CMsvEntry* cEntry = iSession->GetEntryL(KMsvGlobalInBoxIndexEntryId);
+ CleanupStack::PushL(cEntry);
+ delete iMsvEntrySelection;
+ iMsvEntrySelection = NULL;
+ iMsvEntrySelection = cEntry->ChildrenWithMtmL(KUidMsgTypeMultimedia);
+
+ if ( iMsvEntrySelection->Count() > 0 )
+ {
+ TMsvId originalEntry = iMsvEntrySelection->At(0);
+ iMmsClient->SwitchCurrentEntryL( originalEntry );
+ TMsvPartList partList = KMsvMessagePartOriginator | KMsvMessagePartDescription |
+ KMsvMessagePartRecipient | KMsvMessagePartAttachments;
+ CMsvOperation * op = NULL;
+ op = iMmsClient->ForwardL( KMsvGlobalOutBoxIndexEntryId, partList, iWait->iStatus);
+ CleanupStack::PushL(op);
+ iWait->Start();
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ iTimer->Cancel();
+ if ( iWait->iStatus.Int() != KErrNone )
+ {
+ //TMmsLogger::Log(_L("Create forward, return status %d"), iWait->iStatus.Int());
+ }
+ else
+ {
+ TMsvId newEntry = KMsvNullIndexEntryId;
+ TPckgBuf<TMsvId> package;
+ package.Copy(op->ProgressL());
+ newEntry = package();
+ if ( newEntry != KMsvNullIndexEntryId )
+ {
+ iMmsClient->SwitchCurrentEntryL( newEntry );
+ // Add a sender: 0601234567
+ iMmsClient->LoadMessageL();
+ iMmsClient->SetSenderL( KMmsSender );
+ iMmsClient->SaveMessageL();
+ cEntry->SetEntryL( newEntry );
+ TMsvEntry entry = cEntry->Entry();
+ entry.SetInPreparation( EFalse );
+ entry.SetVisible( ETrue );
+ cEntry->ChangeL(entry);
+ }
+ }
+ CleanupStack::PopAndDestroy(); // op
+ }
+ CleanupStack::PopAndDestroy(); // cEntry
+ }
+
+void MmsTestBed::sendReadReport()
+ {
+ // TURN READ REPORTS ON (until available from menu)
+ iSettings->LoadSettingsL();
+ iSettings->SetReadReplyReportSendingAllowed( ETrue );
+ iSettings->SaveSettingsL();
+ iMmsClient->RestoreSettingsL();
+
+
+ // Read report is sent for the first message in inbox
+ CMsvEntry* cEntry = iSession->GetEntryL( KMsvGlobalInBoxIndexEntryId );
+ CleanupStack::PushL(cEntry);
+ delete iMsvEntrySelection;
+ iMsvEntrySelection = NULL;
+ iMsvEntrySelection = cEntry->ChildrenWithMtmL( KUidMsgTypeMultimedia );
+
+ if ( iMsvEntrySelection->Count() == 0 )
+ {
+ return;
+ }
+ TMsvId originalEntry = iMsvEntrySelection->At( 0 );
+
+ // new test using Client MTM
+ CMsvOperation * op = NULL;
+ op = iMmsClient->SendReadReportL( originalEntry, iWait->iStatus, EMmsReadStatusRead );
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ if ( iWait->iStatus.Int() != KErrNone )
+ {
+ //TMmsLogger::Log(_L("Testbed tried to send read report, return status %d"), iWait->iStatus.Int());
+ }
+
+ iTimer->Cancel();
+
+ CleanupStack::PopAndDestroy( op );
+ op = NULL;
+
+ // Try sending the read report to current entry
+
+ iMmsClient->SwitchCurrentEntryL( originalEntry );
+ op = iMmsClient->SendReadReportL( originalEntry, iWait->iStatus, EMmsReadStatusRead );
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ if ( iWait->iStatus.Int() != KErrNone )
+ {
+ //TMmsLogger::Log(_L("Testbed tried to send read report, return status %d"), iWait->iStatus.Int());
+ }
+
+ iTimer->Cancel();
+ CleanupStack::PopAndDestroy( op );
+ op = NULL;
+
+/*
+ cEntry->SetEntryL( originalEntry );
+ iMmsHeaders->Reset();
+ CMsvStore* store = cEntry->ReadStoreL();
+ CleanupStack::PushL( store );
+ iMmsHeaders->RestoreL( *store );
+ CleanupStack::PopAndDestroy( store );
+ store = NULL;
+ HBufC8* messageId = HBufC8::NewL( iMmsHeaders->MessageId().Length() );
+ CleanupStack::PushL( messageId );
+ messageId->Des().Copy( iMmsHeaders->MessageId() );
+
+ iMmsClient->SwitchCurrentEntryL( originalEntry );
+ iMmsClient->LoadMessageL();
+
+ iMmsHeaders->Reset();
+ iMmsHeaders->SetMessageType( KMmsMessageTypeReadRecInd );
+ // Message id cannot be accessed via MMS Client MTM!
+
+ iMmsHeaders->SetMessageIdL( messageId->Des() );
+ CleanupStack::PopAndDestroy( messageId );
+
+ iMmsHeaders->AddTypedAddresseeL( iMmsClient->Sender(), EMsvRecipientTo );
+ // sender must be insert-address-token because we don't know our number
+ TTime now;
+ now.UniversalTime();
+
+ _LIT( K1970, "19700000:000000.000000" ); // 1-Jan 1970 0:00:00
+
+ TTime y1970( K1970 );
+ TTimeIntervalMicroSeconds interval;
+ // we can't use "seconds from" as it only returns a
+ // 32 bit signed integer. If fails in 2038.
+ // "microseconds from" returns a 64 bit signed integer
+ interval = now.MicroSecondsFrom( y1970 );
+ // date in iMmsHeaders() in seconds from 1.1.1970.
+ iMmsHeaders->SetDate( (interval.Int64() ) / KMmsMillion );
+ iMmsHeaders->SetReadStatus( KMmsReadStatusRead );
+
+ TMsvId mmsFolderId = KMsvNullIndexEntryId;
+ mmsFolderId = FindMMSFolderL();
+
+ cEntry->SetEntryL( mmsFolderId );
+
+ TMsvEntry entry;
+ entry.iType = KUidMsvMessageEntry;
+ entry.iMtm = KUidMsgTypeMultimedia;
+ entry.SetVisible( ETrue );
+ entry.SetInPreparation( EFalse );
+ entry.iServiceId = KMsvLocalServiceIndexEntryId;
+ entry.iRelatedId = iDefaultServiceId;
+ entry.iMtmData1 = KMmsMessageReadRecInd;
+ cEntry->CreateL( entry );
+ TMsvId entryId = entry.Id();
+
+ cEntry->SetEntryL( entryId );
+
+ store = cEntry->EditStoreL();
+ CleanupStack::PushL( store );
+ iMmsHeaders->StoreL( *store );
+ store->CommitL();
+ CleanupStack::PopAndDestroy( store );
+ store = NULL;
+
+ CMsvEntrySelection* selection = new ( ELeave ) CMsvEntrySelection;
+ CleanupStack::PushL( selection );
+ selection->InsertL(0, entryId);
+
+ CMsvOperation * op = NULL;
+ TCommandParameters parameters; // initialized to zero
+ TCommandParametersBuf paramPack( parameters );
+
+ op = iSession->TransferCommandL(*selection,EMmsScheduledReadReport,paramPack,iWait->iStatus);
+
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ if ( iWait->iStatus.Int() != KErrNone )
+ {
+ //TMmsLogger::Log(_L("Testbed tried to send read report, return status %d"), iWait->iStatus.Int());
+ }
+
+ iTimer->Cancel();
+
+ CleanupStack::PopAndDestroy( op );
+ CleanupStack::PopAndDestroy( selection );
+*/
+ CleanupStack::PopAndDestroy( cEntry );
+ }
+
+int MmsTestBed::fromOutboxToMmscWithMemoryFailure()
+ {
+ TInt error = KErrNone;
+ TInt messageCount = 0;
+ TInt failureCount = 0;
+ do {
+ CMsvEntry* cEntry = NULL;
+
+ // Get List of services
+ cEntry = iSession->GetEntryL(KMsvGlobalOutBoxIndexEntryIdValue);
+ CleanupStack::PushL(cEntry);
+ // Get all mms messages of outbox
+ CMsvEntrySelection* selection = cEntry->ChildrenWithMtmL( KUidMsgTypeMultimedia );
+ CleanupStack::PushL( selection );
+ failureCount++;
+ // These are failures that fail in Message server.
+ if ( failureCount >= 63 && failureCount <= 64 )
+ {
+ failureCount = 65;
+ }
+ cEntry->SetEntryL( iServiceId );
+ TMsvEntry entry = cEntry->Entry();
+ entry.iMtmData3 &= 0x0000000FF;
+ entry.iMtmData3 |= failureCount << 8;
+ cEntry->ChangeL( entry );
+
+ selection->InsertL(0, iServiceId);
+
+ CMsvOperation * op = NULL;
+ TCommandParameters parameters; // initialized to zero
+ TCommandParametersBuf paramPack( parameters );
+
+ TRAP (error, op = iSession->TransferCommandL(*selection,EMmsSend,paramPack,iWait->iStatus));
+
+ if ( error == KErrNone )
+ {
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ if ( iWait->iStatus.Int() != KErrNone )
+ {
+ error = iWait->iStatus.Int();
+ if ( iWait->iStatus.Int() != KErrNoMemory )
+ {
+ //TMmsLogger::Log(_L("Testbed tried to send, return status %d"), iWait->iStatus.Int());
+ }
+ }
+
+ CleanupStack::PopAndDestroy(); // op
+ }
+ iTimer->Cancel();
+ CleanupStack::PopAndDestroy(); // selection
+ CleanupStack::PopAndDestroy(); // cEntry
+ selection = NULL;
+ cEntry = NULL;
+ cEntry = iSession->GetEntryL( KMsvGlobalOutBoxIndexEntryIdValue );
+ CleanupStack::PushL(cEntry);
+ selection = cEntry->ChildrenWithMtmL( KUidMsgTypeMultimedia );
+ messageCount = selection->Count();
+ delete selection;
+ selection = 0;
+ CleanupStack::PopAndDestroy(); //cEntry
+ }
+ while ( error == KErrNoMemory || messageCount > 0 );
+ return failureCount;
+ }
+
+int MmsTestBed::fromMmscToInboxWithMemoryFailure()
+ {
+ TInt error = KErrNone;
+ TInt failureCount = 0;
+ TInt messageCount = 0;
+ TMsvId mmsFolderId = KMsvNullIndexEntryId;
+ mmsFolderId = findMMSFolder();
+
+ do {
+ // Inbox must be cleaned if failure makes message to be fetched more than once.
+ // should not happen, but this test is quite stressful, and perfect result
+ // cannot be guaranteed.
+ // What is expected:
+ // 1. Program does not crash
+ // 2. After sufficient number of retries the message is fetched and notification deleted.
+ TMmsTestUtils::CleanBoxL(KMsvGlobalInBoxIndexEntryId, *iSession);
+ CMsvEntry* cEntry = NULL;
+ CMsvEntrySelection* msvEntrySelection = new CMsvEntrySelection;
+ CleanupStack::PushL(msvEntrySelection);
+
+ cEntry = iSession->GetEntryL(iServiceId);
+ CleanupStack::PushL(cEntry);
+
+ failureCount++;
+ // These are failures that fail in Message server.
+ if ( failureCount >= 63 && failureCount <= 64 )
+ {
+ failureCount = 65;
+ }
+ cEntry->SetEntryL( iServiceId );
+
+ TMsvEntry entry = cEntry->Entry();
+ entry.iMtmData3 &= 0x0000000FF;
+ entry.iMtmData3 |= failureCount << 8;
+ cEntry->ChangeL( entry );
+
+ // if we have a selected service, insert it into selection
+ if (iServiceId != KMsvNullIndexEntryId)
+ {
+ msvEntrySelection->InsertL(0, iServiceId);
+ }
+
+ CMsvOperation * op = NULL;
+ TCommandParameters parameters; // initialized to zero
+ TCommandParametersBuf paramPack( parameters );
+
+ TRAP (error, op = iMmsClient->InvokeAsyncFunctionL(
+ EMmsReceiveForced,
+ *msvEntrySelection,
+ paramPack,
+ iWait->iStatus) );
+
+ if ( error == KErrNone )
+ {
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ if ( iWait->iStatus.Int() != KErrNone )
+ {
+ error = iWait->iStatus.Int();
+ if ( iWait->iStatus.Int() != KErrNoMemory )
+ {
+ //TMmsLogger::Log(_L("Testbed tried to receive, return status %d"), iWait->iStatus.Int());
+ }
+ }
+
+ CleanupStack::PopAndDestroy(); // op
+ }
+
+ iTimer->Cancel();
+ CleanupStack::PopAndDestroy(); // msvEntrySelection
+ CleanupStack::PopAndDestroy(); // cEntry
+ msvEntrySelection = NULL;
+ cEntry = NULL;
+ cEntry = iSession->GetEntryL( mmsFolderId );
+ CleanupStack::PushL(cEntry);
+ msvEntrySelection = cEntry->ChildrenWithMtmL( KUidMsgTypeMultimedia );
+ messageCount = msvEntrySelection->Count();
+ delete msvEntrySelection;
+ msvEntrySelection = 0;
+ CleanupStack::PopAndDestroy(); //cEntry
+ }
+ while ( error == KErrNoMemory || messageCount > 0 );
+ if ( error != KErrNoMemory && error != KErrNone )
+ {
+ //TMmsLogger::Log(_L("Memory failure loop ended with %d"), error);
+ }
+ return failureCount;
+ }
+
+void MmsTestBed::sendViaClient()
+ {
+ CMsvEntry* cEntry = NULL;
+
+ cEntry = iSession->GetEntryL(KMsvDraftEntryId);
+ CleanupStack::PushL(cEntry);
+ // Get all mms messages in drafts
+ CMsvEntrySelection* selection = cEntry->ChildrenWithMtmL( KUidMsgTypeMultimedia );
+ CleanupStack::PushL( selection );
+
+ CMsvOperation * op = NULL;
+ TTime now;
+ now.UniversalTime();
+ op = iMmsClient->SendL( *selection, iWait->iStatus, now );
+
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ iTimer->Cancel();
+ CleanupStack::PopAndDestroy(); // op
+ CleanupStack::PopAndDestroy(2); // cEntry, selection
+ }
+
+void MmsTestBed::scheduledFetch(TInt aDelay /* = 5 */)
+ {
+ TCommandParameters parameters;
+ parameters.iInitialDelay = aDelay;
+ TCommandParametersBuf paramPack( parameters );
+
+ CMsvEntrySelection* selection = new CMsvEntrySelection;
+ CleanupStack::PushL( selection );
+ // if we have a selected service, insert it into selection
+ if (iServiceId != KMsvNullIndexEntryId)
+ {
+ selection->InsertL(0, iServiceId);
+ }
+ else
+ {
+ selection->InsertL(0, iDefaultServiceId);
+ }
+
+ CMsvOperation * op = NULL;
+ op = iMmsClient->InvokeAsyncFunctionL(
+ EMmsScheduledReceive,
+ *selection,
+ paramPack,
+ iWait->iStatus);
+
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ iTimer->Cancel();
+ CleanupStack::PopAndDestroy(); // op
+ CleanupStack::PopAndDestroy(); // selection
+ }
+
+void MmsTestBed::fetchForcedImmediate()
+ {
+ TCommandParameters parameters;
+ TCommandParametersBuf paramPack( parameters );
+
+ CMsvEntrySelection* selection = new CMsvEntrySelection;
+ CleanupStack::PushL( selection );
+ // if we have a selected service, insert it into selection
+ if (iServiceId != KMsvNullIndexEntryId)
+ {
+ selection->InsertL(0, iServiceId);
+ }
+ else
+ {
+ selection->InsertL(0, iDefaultServiceId);
+ }
+
+
+ CMsvOperation * op = NULL;
+ op = iMmsClient->InvokeAsyncFunctionL(
+ EMmsReceiveForced,
+ *selection,
+ paramPack,
+ iWait->iStatus);
+
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ iTimer->Cancel();
+ CleanupStack::PopAndDestroy(); // op
+ CleanupStack::PopAndDestroy(); // selection
+ }
+
+void MmsTestBed::getEventType()
+ {
+ if ( !checkLogClient() )
+ {
+ return; // not available
+ }
+
+ CLogEventType* eventType = CLogEventType::NewL();
+ CleanupStack::PushL( eventType );
+ eventType->SetUid(iLogEvent->EventType());
+ iLogClient->GetEventType( *eventType, iWait->iStatus );
+
+ iWait->Start();
+ CleanupStack::PopAndDestroy(); // eventType
+ }
+
+void MmsTestBed::addEventType()
+ {
+ if ( !checkLogClient() )
+ {
+ return; // not available
+ }
+
+ CLogEventType* eventType = CLogEventType::NewL();
+ CleanupStack::PushL( eventType );
+ eventType->SetUid(iLogEvent->EventType());
+ eventType->SetDescription(_L("Multimedia Message") );
+ eventType->SetLoggingEnabled( ETrue );
+
+// iWait->iStatus = KRequestPending;
+ iLogClient->AddEventType( *eventType, iWait->iStatus );
+ iWait->Start();
+ CleanupStack::PopAndDestroy(); // eventType
+ }
+
+void MmsTestBed::deleteEventType()
+ {
+ if ( !checkLogClient() )
+ {
+ return; // not available
+ }
+// iWait->iStatus = KRequestPending;
+ iLogClient->DeleteEventType( iLogEvent->EventType(), iWait->iStatus );
+ iWait->Start();
+ }
+
+void MmsTestBed::cleanLog()
+ {
+ TInt count = 0;
+
+ count = getLogEntries();
+
+ TInt i;
+ for ( i = 0; i < count; ++i )
+ {
+ // when a view is created, it will be positioned on the first event
+// iWait->iStatus = KRequestPending;
+ iLogClient->DeleteEvent(iLogView->Event().Id(), iWait->iStatus);
+ iWait->Start();
+
+ if ( iLogView->NextL( iWait->iStatus ) )
+ {
+ // should complete with KErrNone
+ iWait->Start();
+ if ( iWait->iStatus.Int() != KErrNone )
+ {
+ // could not get next event!
+ break;
+ }
+ }
+ else
+ {
+ break; // no more events!
+ }
+ }
+ }
+
+void MmsTestBed::setOnline(bool value)
+ {
+ //value = true for online mode
+ //value = false for offline mode
+ CRepository* repository = NULL;
+ TInt retval = KErrNone;
+ TRAP( retval, repository = CRepository::NewL( KCRUidCoreApplicationUIs ) );
+ if( retval == KErrNone )
+ {
+ repository->Set( KCoreAppUIsNetworkConnectionAllowed, value );
+ delete repository;
+ }
+ }
+
+void MmsTestBed::generateDeliveryReport( CMmsHeaders* aMmsHeaders )
+ {
+ iEncodeBuffer->ResizeL( 1024 );
+
+ TInt position = 0;
+
+ // encode message type
+ iEncodeBuffer->Write( position, &KMmsAssignedMessageType, 1 );
+ position++;
+ iEncodeBuffer->Write( position, &KMmsMessageTypeDeliveryInd, 1 );
+ position++;
+
+ // version
+ iEncodeBuffer->Write( position, &KMmsAssignedMmsVersion, 1 );
+ position++;
+
+ TUint8 version = aMmsHeaders->MmsVersion() | 0x80; // current version as short integer
+ iEncodeBuffer->Write( position, &version, 1 );
+ position++;
+
+ // message id from the headers
+ // At least once MMSC did not send us the message id!
+ // if message id is missing, we cannot match the entry!
+ // This only a fake. Real delivery reports should always
+ // contain the message id.
+ if ( aMmsHeaders->MessageId().Length() > 0 )
+ {
+ iEncodeBuffer->Write( position, &KMmsAssignedMessageId, 1 );
+ position++;
+ iEncodeBuffer->Write( position, &(aMmsHeaders->MessageId()[0]), aMmsHeaders->MessageId().Length() );
+ position += aMmsHeaders->MessageId().Length();
+ iEncodeBuffer->Write( position, &KMmsNull, 1 );
+ position++;
+ }
+
+ // To is taken from the headers
+ iEncodeBuffer->Write( position, &KMmsAssignedTo, 1 );
+ position++;
+
+ TPtrC recipient;
+ if ( aMmsHeaders->ToRecipients().MdcaCount() > 0 &&
+ aMmsHeaders->ToRecipients()[0].Length() > 0 )
+ {
+ recipient.Set( aMmsHeaders->ToRecipients()[0] );
+ }
+ else if( aMmsHeaders->CcRecipients().MdcaCount() > 0 &&
+ aMmsHeaders->CcRecipients()[0].Length() > 0 )
+ {
+ recipient.Set( aMmsHeaders->CcRecipients()[0] );
+ }
+ else if( aMmsHeaders->BccRecipients().MdcaCount() > 0 &&
+ aMmsHeaders->BccRecipients()[0].Length() > 0 )
+ {
+ recipient.Set( aMmsHeaders->BccRecipients()[0] );
+ }
+ else
+ {
+ recipient.Set( _L("Jasso-Kissa@jii.fi") );
+ }
+
+ TMmsAddressType addressType = EMmsAddressTypeUnknown;
+
+ if ( recipient.Find( KMiuMau ) != KErrNotFound )
+ {
+ addressType = EMmsAddressTypeEmail;
+ }
+ else
+ {
+ addressType = EMmsAddressTypeMobile;
+ }
+
+ TUint8 character;
+ TInt i;
+ if ( addressType == EMmsAddressTypeEmail )
+ {
+ // email address - ASCII ONLY - THIS IS JUST A TEST!
+
+ for ( i = 0; i < recipient.Length(); ++i )
+ {
+ character = TUint8( recipient[i] & 0xff );
+ iEncodeBuffer->Write( position, &character, 1 );
+ position++;
+ }
+ iEncodeBuffer->Write( position, &KMmsNull, 1 );
+ position++;
+
+ }
+ else
+ {
+ // must be a phone number
+ // We expect for now that the format is correct as is
+ // All legal characters present in a phone number are ASCII
+
+ TInt i;
+ for ( i = 0; i < recipient.Length(); ++i )
+ {
+ character = TUint8( recipient[i] & 0xff );
+ iEncodeBuffer->Write( position, &character, 1 );
+ position++;
+ }
+ iEncodeBuffer->Write( position, KMmsPlmn, KMmsPlmnLength );
+ position += KMmsPlmnLength;
+ iEncodeBuffer->Write( position, &KMmsNull, 1 );
+ position++;
+ }
+
+ // date
+ iEncodeBuffer->Write( position, &KMmsAssignedDate, 1 );
+ position++;
+
+ TLocale locale;
+ locale.Refresh();
+ TInt64 UtcDate;
+ TTimeIntervalSeconds universalTimeOffset( locale.UniversalTimeOffset() );
+
+ TTime now;
+ now.UniversalTime();
+ UtcDate = ( now.MicroSecondsFrom( TTime( KMmsYear1970String ) ).Int64() ) / 1000000 ;
+
+ UtcDate -= universalTimeOffset.Int();
+
+ if ( locale.QueryHomeHasDaylightSavingOn() )
+ {
+ TTimeIntervalSeconds daylightSaving( 60 * 60 );
+ UtcDate -= daylightSaving.Int();
+ }
+
+ TUint8 len; // number of bytes we will need
+ len = 0;
+ TUint8 array[8];
+
+ TInt64 temp = UtcDate;
+
+ for (i = 7; i >= 0; --i)
+ {
+ array[i] = TInt8( ( I64INT( temp ) ) & 0xFF );
+ I64LSR( temp, 8 );
+ }
+
+ len = 8;
+ i = 0;
+ while( ( array[i]== 0 ) && ( i < 8 ) )
+ {
+ i++;
+ len--;
+ }
+
+ // a zero should be coded as short integer.
+ // However, if there is a valid reason to code a zero as a long integer,
+ // we allow it. The caller should know what he is doing.
+ if ( len == 0 )
+ {
+ len = 1;
+ }
+ // write short length
+ iEncodeBuffer->Write( position, &len, 1 );
+ position++;
+ // write as many bytes as were non-zero
+ iEncodeBuffer->Write( position, &(array[8 - len] ), len );
+ position+= len;
+ // status
+ iEncodeBuffer->Write( position, &KMmsAssignedStatus, 1 );
+ position++;
+ iEncodeBuffer->Write( position, &KMmsMessageStatusRetrieved, 1 );
+ position++;
+ // DONE!!!
+ iEncodeBuffer->ResizeL( position );
+ return;
+ }
+
+void MmsTestBed::sendDeliveryReport()
+ {
+ if ( iEncodeBuffer->Size() == 0 )
+ {
+ //No delivery report
+ return;
+ }
+
+
+ TMsvId mmsFolder = findMMSFolder();
+ CMsvEntrySelection* selection = new (ELeave) CMsvEntrySelection;
+ CleanupStack::PushL( selection );
+
+ TMsvId entryId = TMmsTestUtils::CreateNotificationEntryL( mmsFolder, iServiceId, iEncodeBuffer, *iSession );
+ TPtr8 ptr = iEncodeBuffer->Ptr( 0 );
+
+ // Now we have streamed our data into this entry.
+ // Now we have an entry that says: local service, MMS MTM
+
+ if ( entryId != KMsvNullIndexEntryId )
+ {
+ selection->AppendL( entryId );
+ }
+ else
+ {
+ selection->AppendL( iDefaultServiceId );
+ }
+
+ TWatcherParameters parameters; // initialized to zero
+ parameters.iWatcherId = RThread().Id();
+ parameters.iDataPointer = &ptr;
+ TWatcherParametersBuf paramPack( parameters );
+
+ CMsvOperation * op = NULL;
+
+// iWait->iStatus = KRequestPending;
+ op = iSession->TransferCommandL(
+ *selection, EMmsDecodePushedMessage, paramPack, iWait->iStatus );
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ iTimer->Cancel();
+
+ CleanupStack::PopAndDestroy(); // op
+ CleanupStack::PopAndDestroy(); // selection
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgnotifications/msgnotifier/tsrc/mmstestbed/src/mmsteststaticutils.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,528 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ */
+
+#include <f32file.h>
+#include <centralrepository.h>
+#include <apparc.h>
+#include <msvapi.h>
+#include <msvids.h>
+
+#include "mmsteststaticutils.h"
+#include "mmsconst.h"
+#include <MmsEnginePrivateCRKeys.h>
+#include "mmssettings.h"
+#include <mmsheaders.h>
+#include "mmsservercommon.h"
+#include <mmsencode.h>
+
+
+// ---------------------------------------------------------
+//
+// ---------------------------------------------------------
+//
+TMmsJoinedArrays::TMmsJoinedArrays(CDesCArray* const & aArray1, CDesCArray* const & aArray2)
+: iArray1(aArray1), iArray2(aArray2)
+ {
+ }
+
+TInt TMmsJoinedArrays::MdcaCount() const
+ {
+ TInt count=0;
+ if (iArray1)
+ count += iArray1->MdcaCount();
+ if (iArray2)
+ count += iArray2->MdcaCount();
+ return count;
+ }
+
+TPtrC16 TMmsJoinedArrays::MdcaPoint(TInt aIndex) const
+ {
+ if (iArray1)
+ {
+ if (aIndex < iArray1->MdcaCount())
+ return iArray1->MdcaPoint(aIndex);
+ else
+ aIndex -= iArray1->MdcaCount();
+ }
+ return iArray2->MdcaPoint(aIndex);
+ }
+
+
+// ---------------------------------------------------------
+//
+// ---------------------------------------------------------
+//
+TMmsTestUtils::TMmsTestUtils()
+ {
+
+ }
+
+// ---------------------------------------------------------
+//
+// ---------------------------------------------------------
+//
+HBufC* TMmsTestUtils::ReadContactFromFileL( TDesC& aFileName, RFs& aFs )
+ {
+ RFile file;
+ TInt error = KErrNone;
+
+ TInt textBufferSize = 256;
+ HBufC* textBuffer = HBufC::NewL( textBufferSize );
+ TPtr textPtr = textBuffer->Des();
+ TFileText textFile;
+
+ error = file.Open( aFs, aFileName,
+ EFileRead|EFileShareReadersOnly );
+
+ if ( error == KErrNone )
+ {
+ textFile.Set( file );
+ error = textFile.Seek( ESeekStart );
+ }
+
+ if ( error == KErrNone )
+ {
+ error = textFile.Read( textPtr );
+ }
+
+ file.Close();
+
+ if ( textBuffer->Des().Find( &KMmsByteOrderMark, 1 ) == 0 )
+ {
+ textBuffer->Des().Copy( textBuffer->Des().Mid( 1 ) );
+ }
+
+ return textBuffer;
+ }
+
+//----------------------------------------------------------------------------------------
+// turn on detailed logging while decoding a message
+//----------------------------------------------------------------------------------------
+//
+void TMmsTestUtils::DecodeLoggingOnL()
+ {
+ // CenRep for decodelogging
+ CRepository* repository = NULL;
+ TInt retval = KErrNone;
+ TRAP( retval, repository = CRepository::NewL( KUidMmsServerMtm ) );
+ if( retval == KErrNone )
+ {
+ // Best effort - if cannot access repository, no can do
+ TInt temp = 1;
+ repository->Set( KMmsEngineDecodeLog, temp );
+ delete repository;
+ }
+ }
+
+//----------------------------------------------------------------------------------------
+// turn off detailed logging while decoding a message
+//----------------------------------------------------------------------------------------
+//
+void TMmsTestUtils::DecodeLoggingOffL()
+ {
+ // CenRep for decodelogging
+ CRepository* repository = NULL;
+ TInt retval = KErrNone;
+ TRAP( retval, repository = CRepository::NewL( KUidMmsServerMtm ) );
+ if( retval == KErrNone )
+ {
+ // Best effort - if cannot access repository, no can do
+ TInt temp = 0;
+ repository->Set( KMmsEngineDecodeLog, temp );
+ delete repository;
+ }
+
+ }
+
+//----------------------------------------------------------------------------------------
+// turn on binary dump of incoming messages
+//----------------------------------------------------------------------------------------
+//
+void TMmsTestUtils::BinaryDumpOnL()
+ {
+ // CenRep for binarydump setting
+ CRepository* repository = NULL;
+ TInt retval = KErrNone;
+ TRAP( retval, repository = CRepository::NewL( KUidMmsServerMtm ) );
+ if( retval == KErrNone )
+ {
+ // Best effort - if cannot access repository, no can do
+ TInt temp = 1;
+ repository->Set( KMmsEngineBinaryDump, temp );
+ delete repository;
+ }
+
+ }
+
+//----------------------------------------------------------------------------------------
+// turn off binary dump of incoming messages
+//----------------------------------------------------------------------------------------
+//
+void TMmsTestUtils::BinaryDumpOffL()
+ {
+ // CenRep for binarydump setting
+ CRepository* repository = NULL;
+ TInt retval = KErrNone;
+ TRAP( retval, repository = CRepository::NewL( KUidMmsServerMtm ) );
+ if( retval == KErrNone )
+ {
+ // Best effort - if cannot access repository, no can do
+ TInt temp = 0;
+ repository->Set( KMmsEngineBinaryDump, temp );
+ delete repository;
+ }
+ }
+
+// ---------------------------------------------------------
+//
+// ---------------------------------------------------------
+//
+void TMmsTestUtils::CleanDirectoryL( RFs& aFs )
+ {
+ // Delete the files in the directory
+ CFileMan* fileMan = CFileMan::NewL( aFs );
+ CleanupStack::PushL( fileMan );
+ fileMan->RmDir( KMmsDefaultLocalModeDir );
+ fileMan->RmDir( KMmsMMBoxDirectory );
+ fileMan->RmDir( KMmsMMBoxDescriptionDirectory );
+ CleanupStack::PopAndDestroy(); // fileManager
+ // we don't want to throw these away!
+ aFs.MkDirAll( KMmsDefaultLocalModeDir );
+ aFs.MkDirAll( KMmsMMBoxDirectory );
+ aFs.MkDirAll( KMmsMMBoxDescriptionDirectory );
+ }
+
+// ---------------------------------------------------------
+//
+// ---------------------------------------------------------
+//
+void TMmsTestUtils::Dump( CBufFlat& aBuffer, TFileName& aFilename, TParse& aParse, RFs& aFs )
+ {
+ TInt error = KErrNone;
+ aFs.MkDirAll( aFilename );
+ TUint att;
+ if ( aFs.Att( aFilename, att ) == KErrNone )
+ {
+ _LIT( KRelated, "dump.mms");
+ aParse.Set( aFilename, &KRelated, NULL );
+ aFilename = aParse.FullName();
+ error = CApaApplication::GenerateFileName( aFs, aFilename );
+ if ( error == KErrNone )
+ {
+ RFile file;
+ error = file.Create( aFs, aFilename, EFileWrite | EFileShareExclusive );
+ // for message id generation
+ aParse.Set( aFilename, NULL, NULL );
+ if ( error == KErrNone )
+ {
+ // the data is supposed to be in the encode buffer
+ TPtr8 ptr = aBuffer.Ptr( 0 );
+ file.Write( ptr );
+ file.Flush();
+ }
+
+ // done - close files
+ file.Close();
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+//
+// ---------------------------------------------------------
+//
+void TMmsTestUtils::CleanBoxL(TMsvId aBoxId, CMsvSession& aSession)
+ {
+ CMsvEntry* cEntry = NULL;
+ // delete all messages from the specified box
+ cEntry = aSession.GetEntryL(KMsvRootIndexEntryId);
+ CleanupStack::PushL(cEntry);
+ cEntry->SetEntryL(aBoxId);
+ // show invisible entries
+ cEntry->SetSortTypeL( TMsvSelectionOrdering( KMsvNoGrouping, EMsvSortByNone, ETrue ) );
+ CMsvEntrySelection* msvEntrySelection = cEntry->ChildrenWithMtmL(KUidMsgTypeMultimedia);
+ CleanupStack::PushL(msvEntrySelection);
+
+ CMsvEntrySelection* selection = NULL;
+ cEntry->SetSortTypeL( TMsvSelectionOrdering( KMsvNoGrouping, EMsvSortByNone, ETrue ) );
+ selection = cEntry->ChildrenWithMtmL(KUidMsgMMSNotification);
+ CleanupStack::PushL( selection );
+ if ( selection->Count() > 0 )
+ {
+ msvEntrySelection->AppendL( selection->Back( 0 ), selection->Count() );
+ }
+ CleanupStack::PopAndDestroy(); // selection
+
+ int i;
+ for (i = 0; i < msvEntrySelection->Count(); ++i)
+ {
+ CMsvEntry* entry = aSession.GetEntryL( msvEntrySelection->At(i) );
+ CleanupStack::PushL( entry );
+ TMsvEntry tEntry = entry->Entry();
+ tEntry.SetReadOnly(EFalse);
+ entry->ChangeL(tEntry);
+ cEntry->DeleteL( msvEntrySelection->At(i) );
+ CleanupStack::PopAndDestroy( entry );
+ }
+
+ CleanupStack::PopAndDestroy(msvEntrySelection);
+ CleanupStack::PopAndDestroy(cEntry);
+ }
+
+//----------------------------------------------------------------------------------------
+// turn on logging email recipients
+//----------------------------------------------------------------------------------------
+void TMmsTestUtils::EmailLoggingOnL()
+ {
+ // CenRep for binarydump setting
+ CRepository* repository = NULL;
+ TInt retval = KErrNone;
+ TRAP( retval, repository = CRepository::NewL( KUidMmsServerMtm ) ); // ***
+ if( retval == KErrNone )
+ {
+ TInt temp = 1;
+ repository->Set( KMmsEngineLogEmailRecipients, temp );
+ delete repository;
+ }
+
+ }
+
+//----------------------------------------------------------------------------------------
+// turn off logging email recipients
+//----------------------------------------------------------------------------------------
+void TMmsTestUtils::EmailLoggingOffL()
+ {
+ // CenRep for binarydump setting
+ CRepository* repository = NULL;
+ TInt retval = KErrNone;
+ TRAP( retval, repository = CRepository::NewL( KUidMmsServerMtm ) ); // ***
+ if( retval == KErrNone )
+ {
+ TInt temp = 0;
+ repository->Set( KMmsEngineLogEmailRecipients, temp );
+ delete repository;
+ }
+
+ }
+
+//----------------------------------------------------------------------------------------
+//
+//----------------------------------------------------------------------------------------
+TInt TMmsTestUtils::CountChildrenL(TMsvId aBoxId, CMsvEntrySelection*& aMsvEntrySelection, CMsvSession& aSession, TUid aMessageType )
+ {
+ CMsvEntry* cEntry = aSession.GetEntryL(KMsvRootIndexEntryId);
+ CleanupStack::PushL(cEntry);
+ cEntry->SetEntryL(aBoxId);
+ if (aMsvEntrySelection != NULL)
+ {
+ delete aMsvEntrySelection;
+ aMsvEntrySelection = NULL;
+ }
+ aMsvEntrySelection = cEntry->ChildrenWithMtmL(aMessageType);
+ CleanupStack::PopAndDestroy(); // cEntry
+ return aMsvEntrySelection->Count();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CreateFolderEntryL
+//
+// -----------------------------------------------------------------------------
+//
+void TMmsTestUtils::CreateFolderEntryL(
+ CMsvSession& aSession,
+ TMsvId aParentFolder,
+ const TDesC& aFolderName,
+ TMsvId& aFolderId )
+ {
+ aFolderId = KMsvNullIndexEntryId;
+ CMsvEntry* cEntry = aSession.GetEntryL( aParentFolder );
+ CleanupStack::PushL( cEntry );
+
+ // Create a new folder.
+
+ TMsvEntry entry;
+ entry.iType = KUidMsvFolderEntry;
+ entry.iMtm = KUidMsvLocalServiceMtm;
+ entry.iDetails.Set( aFolderName );
+ entry.SetVisible( EFalse );
+ entry.SetInPreparation( EFalse );
+ entry.iServiceId = KMsvLocalServiceIndexEntryId;
+ cEntry->CreateL( entry );
+ aFolderId = entry.Id();
+ CleanupStack::PopAndDestroy( cEntry );
+
+ }
+
+
+//----------------------------------------------------------------------------------------
+//
+//----------------------------------------------------------------------------------------
+TMsvId TMmsTestUtils::CreateNotificationEntryL(
+ TMsvId aNotificationFolder,
+ TMsvId aServiceId,
+ CBufFlat* aEncodeBuffer,
+ CMsvSession& aSession )
+ {
+ TMsvId entryId = KMsvNullIndexEntryId;
+ if ( aNotificationFolder == KMsvNullIndexEntryId )
+ {
+ // no folder no entry
+ return entryId;
+ }
+
+ CMsvEntry* cEntry = aSession.GetEntryL( aNotificationFolder );
+ CleanupStack::PushL(cEntry);
+
+ TMsvEntry entry;
+ entry.iType = KUidMsvMessageEntry;
+ entry.iMtm = KUidMsgTypeMultimedia;
+ entry.SetVisible( ETrue );
+ // If we want to put data here, InPreparation must be set to true first
+ entry.SetInPreparation( EFalse );
+ entry.iServiceId = KMsvLocalServiceIndexEntryId;
+ entry.iRelatedId = aServiceId;
+ entry.iMtmData2 = KMmsNotificationBinary;
+ cEntry->CreateL( entry );
+ entryId = entry.Id();
+
+ //
+ // Stream
+ // 1) length of the data as 32 bit integer
+ // 2) pushed message data
+ // into created entry's stream
+ //
+ cEntry->SetEntryL( entryId );
+ CMsvStore* store = cEntry->EditStoreL();
+ CleanupStack::PushL( store ); // ***
+ RMsvWriteStream outs;
+ outs.AssignLC( *store, KUidBinaryNotificationStream ); // ***
+ TPtrC8 ptr = aEncodeBuffer->Ptr( 0 );
+ outs.WriteUint32L( ptr.Length() );
+ outs.WriteL( ptr );
+ outs.CommitL();
+ outs.Close();
+ store->CommitL();
+
+ CleanupStack::PopAndDestroy( &outs ); // close outs
+ CleanupStack::PopAndDestroy( store );
+ CleanupStack::PopAndDestroy( cEntry );
+
+ return entryId;
+
+ }
+
+//----------------------------------------------------------------------------------------
+//
+//----------------------------------------------------------------------------------------
+void TMmsTestUtils::FormNotification(
+ TDesC8& aUrl,
+ TInt aSize,
+ CMmsHeaders& aMmsHeaders,
+ CMmsEncode& aMmsEncoder,
+ CBufFlat* aEncodeBuffer )
+ {
+ // for test purposes aUrl will contain the filename.
+
+ // Reset sets the default encapsulation version
+ // The default version has been set from MmsSettings in NewL
+ aMmsHeaders.Reset();
+
+ // construct the notification into iMmsHeaders, and call encode
+
+ aMmsHeaders.SetMessageType( KMmsMessageTypeMNotificationInd );
+
+ TTime currentTime;
+ currentTime.UniversalTime();
+ currentTime.Int64();
+
+ TPtrC8 tid;
+ TBufC8<KMMSMAXTIDLENGTH> target;
+ TInt random = 0;
+
+ // we don't generate a true random TID: We generate the
+ // TID from the URL so that if we generate a notification
+ // twice from the same file, we get the same TID and the
+ // same URL. This way we can test the pruning function in
+ // server MTM
+
+ TInt i;
+ for ( i = 0; i < aUrl.Length(); ++i )
+ {
+ random += aUrl[ i ];
+ }
+
+ target.Des().Num( random );
+ tid.Set( target.Des() );
+ aMmsHeaders.SetTidL( tid );
+
+ aMmsHeaders.SetMessageClass( EMmsClassPersonal );
+ aMmsHeaders.SetMessageSize( aSize );
+ const TInt KTenHours = 10 * 60 * 60; // 10 hours relative expiry
+ aMmsHeaders.SetExpiryInterval( KTenHours );
+ aMmsHeaders.SetContentLocationL( aUrl );
+
+ aMmsEncoder.EncodeHeadersL( aMmsHeaders, *aEncodeBuffer );
+
+ }
+
+
+//----------------------------------------------------------------------------------------
+//
+//----------------------------------------------------------------------------------------
+TBool TMmsTestUtils::IsFile(const TDesC& aFileName, RFs& aFs)
+ {
+ //Is the name a file?
+ if (IsDrive(aFileName))
+ return EFalse;
+ return !(IsDir(aFileName, aFs));
+ }
+
+//----------------------------------------------------------------------------------------
+//
+//----------------------------------------------------------------------------------------
+TBool TMmsTestUtils::IsDir(const TDesC& aFileName, RFs& aFs)
+ {
+ //Is the name a directory?
+ TEntry entry;
+ TInt err = aFs.Entry(aFileName, entry);
+ if (err)
+ return EFalse;
+ else
+ return entry.IsDir();
+ }
+
+//----------------------------------------------------------------------------------------
+//
+//----------------------------------------------------------------------------------------
+TBool TMmsTestUtils::IsDrive(const TDesC& aFileName)
+ {
+ //horrible little function to figure if the path is just a drive
+ TBool retVal = EFalse;
+ if (aFileName.Length()==3) //eg "c:\"
+ {
+ if ((aFileName[1] == ':') && (aFileName[2] == '\\'))
+ retVal=ETrue;
+ }
+ else if (aFileName.Length()==2) //eg "c:"
+ {
+ if (aFileName[1] == ':')
+ retVal=ETrue;
+ }
+ return retVal;
+ }
+
+// end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgnotifications/msgnotifier/tsrc/mmstestbed/src/mmstestuitimer.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,121 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ */
+
+#include "mmstestuitimer.h"
+
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+CTestUiTimer::CTestUiTimer(): CTimer( 5 )
+ {
+ period = KPeriod;
+ }
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CTestUiTimer::ConstructL()
+ {
+ CTimer::ConstructL();
+ CActiveScheduler::Add(this);
+ }
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+CTestUiTimer* CTestUiTimer::NewL()
+ {
+ CTestUiTimer* self = new(ELeave) CTestUiTimer();
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+CTestUiTimer::~CTestUiTimer()
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CTestUiTimer::IssueRequest()
+ {
+ // No operation to cancel if this function is called
+ iObject = NULL;
+ After(period);
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CTestUiTimer::TimeoutOperation( CActive* aObject, TTimeIntervalSeconds aTimeoutInSeconds )
+ {
+ iObject = aObject;
+ TTimeIntervalMicroSeconds32 timeout = aTimeoutInSeconds.Int() * 1000000;
+ After( timeout );
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CTestUiTimer::DoCancel()
+ {
+ CTimer::DoCancel();
+ if ( iObject )
+ {
+ iObject->Cancel();
+ iObject = NULL;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CTestUiTimer::RunL()
+ {
+ if ( iObject )
+ {
+ // If we timeout while holding an active object, we cancel it
+ iObject->Cancel();
+ iObject = NULL;
+ }
+ else
+ {
+ CActiveScheduler::Stop();
+ }
+ }
+
+// ======== GLOBAL FUNCTIONS ========
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgnotifications/msgnotifier/tsrc/testmmsgplugin/group/testmmsplugin.pro Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,110 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+QT += testlib
+QT -= gui
+
+TEMPLATE = lib
+TARGET = test-mms-plugin
+
+INCLUDEPATH += ../inc
+INCLUDEPATH += ../../../inc
+#INCLUDEPATH += ../../../../inc
+
+INCLUDEPATH += ../../../../../../../../inc
+INCLUDEPATH += ../../../../../../inc
+INCLUDEPATH += ../../../../../msgutils/unieditorutils/unieditorplugins/unieditormmsplugin/inc
+INCLUDEPATH += ../../../../../msgutils/unidatautils/unidatamodel/inc
+INCLUDEPATH += ../../../../../msgutils/unieditorutils/editorgenutils/inc
+INCLUDEPATH += ../../../../../msgutils/s60qconversions/inc
+INCLUDEPATH += ../../../../../../../../mmsengine/mmsmessage/inc
+INCLUDEPATH += ../../../../../../../../mmsengine/inc
+INCLUDEPATH += ../../mmstestbed/inc
+INCLUDEPATH +=
+INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+
+DEFINES += BUILD_TEST_DLL
+
+CONFIG += hb plugin
+
+SOURCES += \
+ ../src/testmmsplugin.cpp \
+ ../../../../../msgutils/unieditorutils/unieditorplugins/unieditormmsplugin/src/unieditormmsplugin.cpp \
+ ../../../../../msgutils/unieditorutils/unieditorplugins/unieditormmsplugin/src/unieditormmsplugin_p.cpp
+
+
+# Input
+HEADERS += \
+ ../inc/testmmsplugin.h \
+ ../../../../../msgutils/unieditorutils/unieditorplugins/unieditormmsplugin/inc/unieditormmsplugin.h \
+ ../../../../../msgutils/unieditorutils/unieditorplugins/unieditormmsplugin/inc/unieditormmsplugin_p.h
+
+
+SYMBIAN_PLATFORMS = WINSCW ARMV5
+ symbian {
+ TARGET.CAPABILITY = CAP_GENERAL_DLL
+ TARGET.EPOCSTACKSIZE = 0x8000
+ TARGET.EPOCHEAPSIZE = 0x1000 0x1F00000
+ TARGET.EPOCALLOWDLLDATA = 1
+ }
+
+ LIBS += -leuser \
+ -lconvergedmessageutils \
+ -ls60qconversions \
+ -lMsgMedia \
+ -leikctl \
+ -leditorgenutils \
+ -lcone \
+ -leikcoctl \
+ -leikcore \
+ -leikdlg \
+ -lmsgs \
+ -letext \
+ -lmmsserversettings \
+ -lgsmu \
+ -lmmsgenutils \
+ -lefsrv \
+ -lestor \
+ -lsmcm \
+ -lCommonEngine \
+ -lbafl \
+ -lCdlEngine \
+ -lFeatMgr \
+ -lapmime \
+ -lapgrfx \
+ -lcharconv \
+ -lInetProtUtil \
+ -lsmildtd \
+ -lxmldom \
+ -lxmlparser \
+ -lcone \
+ -lQtCore \
+ -letel \
+ -lmmsmessage \
+ -lcommdb \
+ -lcommsdat \
+ -letelmm \
+ -lunidatamodelloader \
+ -lunidatamodel \
+ -lavkon \
+ -leikcoctl \
+ -leikctl \
+ -lform \
+ -luiklaf\
+ -lxqutils\
+ -lmmstestbed
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgnotifications/msgnotifier/tsrc/testmmsgplugin/inc/testmmsplugin.h Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,88 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: - Main test class for Msgnotification -indicator plugin,
+ * -notification dialog plugin
+ */
+
+#ifndef TEST_MMS_PLUGIN_H
+#define TEST_MMS_PLUGIN_H
+
+#ifdef BUILD_TEST_DLL
+#define TEST_EXPORT Q_DECL_EXPORT
+#else
+#define TEST_EXPORT Q_DECL_IMPORT
+#endif
+
+#include <QObject>
+#include <e32const.h>
+
+class UniEditorMmsPlugin;
+class ConvergedMessage;
+class MmsTestBed;
+class QSignalSpy;
+
+class TEST_EXPORT TestMmsPlugin: public QObject
+ {
+ Q_OBJECT
+
+private slots:
+
+ /**
+ * Called by framework,its called before the 1st test function is executed.
+ */
+
+ void initTestCase();
+
+ /**
+ * Called by framework,its called before each test function is executed.
+ */
+
+ void init();
+
+ /**
+ * Test Sending MMS
+ */
+
+ void testSendMMS();
+
+ /**
+ * Test receiving MMS
+ */
+
+ void testMmsReceived();
+
+ /**
+ * Called by framework,its called after each test function is executed.
+ */
+
+ void cleanup();
+
+ /**
+ * Called by framework,its called after the last test function is executed.
+ */
+
+ void cleanupTestCase();
+
+private:
+
+ QSignalSpy *spy_draft;
+ QSignalSpy *spy_outbox;
+ QSignalSpy *spy_sent;
+
+ UniEditorMmsPlugin* msgPlugin;
+ int mmsId;
+ MmsTestBed* mmstestbed;
+
+ };
+#endif //TEST_MMS_PLUGIN_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgnotifications/msgnotifier/tsrc/testmmsgplugin/inc/testmmsplugin.ini Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,12 @@
+//this file is used to provide predefined set of input data.
+
+const char TEST_MSG_RECIEPIENT[] = "+919000";
+const char TEST_MSG_FROM2[] = "999";
+const char TEST_MSG_SUBJECT[] = "Message Subject";
+const char TEST_SERVICE_NAME_MMS[] = "messaging.mserver.testservice.MMS";
+const char TEST_SENDER[] = "+918888";
+const char TEST_ATTACHMENT[] = "c:\\sample.txt";
+const char TEST_ATTACHMENT4[] = "c:\\SmileyFace.gif";
+const char TEST_ATTACHMENT5[] = "c:\\sample.txt";
+const char TEST_CC[] = "DummyCCAddress";
+const char TEST_BCC[] = "DummyBCCAddress";
\ No newline at end of file
Binary file messagingapp/msgnotifications/msgnotifier/tsrc/testmmsgplugin/mms.rsc has changed
Binary file messagingapp/msgnotifications/msgnotifier/tsrc/testmmsgplugin/not.rsc has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgnotifications/msgnotifier/tsrc/testmmsgplugin/plugin_commonU.def Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,31 @@
+; ==============================================================================
+; Generated by qmake (2.01a) (Qt 4.6.3) on: 2010-06-21T15:39:25
+; This file is generated by qmake and should not be modified by the
+; user.
+; Name : plugin_commonU.def
+; Part of : test-mms-plugin
+; Description : Fixes common plugin symbols to known ordinals
+; Version :
+;
+; ==============================================================================
+
+
+EXPORTS
+ qt_plugin_query_verification_data @ 1 NONAME
+ qt_plugin_instance @ 2 NONAME
+ ?qt_metacast@TestMmsPlugin@@UAEPAXPBD@Z @ 3 NONAME ; void * TestMmsPlugin::qt_metacast(char const *)
+ ?init@TestMmsPlugin@@AAEXXZ @ 4 NONAME ; void TestMmsPlugin::init(void)
+ ?staticMetaObject@TestMmsPlugin@@2UQMetaObject@@B @ 5 NONAME ; struct QMetaObject const TestMmsPlugin::staticMetaObject
+ ?tr@TestMmsPlugin@@SA?AVQString@@PBD0H@Z @ 6 NONAME ; class QString TestMmsPlugin::tr(char const *, char const *, int)
+ ?initTestCase@TestMmsPlugin@@AAEXXZ @ 7 NONAME ; void TestMmsPlugin::initTestCase(void)
+ ?cleanup@TestMmsPlugin@@AAEXXZ @ 8 NONAME ; void TestMmsPlugin::cleanup(void)
+ ?trUtf8@TestMmsPlugin@@SA?AVQString@@PBD0H@Z @ 9 NONAME ; class QString TestMmsPlugin::trUtf8(char const *, char const *, int)
+ ?qt_metacall@TestMmsPlugin@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 10 NONAME ; int TestMmsPlugin::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?testMmsReceived@TestMmsPlugin@@AAEXXZ @ 11 NONAME ; void TestMmsPlugin::testMmsReceived(void)
+ ?testSendMMS@TestMmsPlugin@@AAEXXZ @ 12 NONAME ; void TestMmsPlugin::testSendMMS(void)
+ ?trUtf8@TestMmsPlugin@@SA?AVQString@@PBD0@Z @ 13 NONAME ; class QString TestMmsPlugin::trUtf8(char const *, char const *)
+ ?tr@TestMmsPlugin@@SA?AVQString@@PBD0@Z @ 14 NONAME ; class QString TestMmsPlugin::tr(char const *, char const *)
+ ?metaObject@TestMmsPlugin@@UBEPBUQMetaObject@@XZ @ 15 NONAME ; struct QMetaObject const * TestMmsPlugin::metaObject(void) const
+ ?getStaticMetaObject@TestMmsPlugin@@SAABUQMetaObject@@XZ @ 16 NONAME ; struct QMetaObject const & TestMmsPlugin::getStaticMetaObject(void)
+ ?cleanupTestCase@TestMmsPlugin@@AAEXXZ @ 17 NONAME ; void TestMmsPlugin::cleanupTestCase(void)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgnotifications/msgnotifier/tsrc/testmmsgplugin/src/testmmsplugin.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,183 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: - Main test class for Msgnotification -indicator plugin,
+ * -notification dialog plugin
+ */
+
+#include "testmmsplugin.h"
+#include <QtTest/QtTest>
+#include "debugtraces.h"
+#include <QTimer>
+#include <QSignalSpy>
+#include "convergedmessage.h"
+#include "convergedmessageid.h"
+#include "unieditormmsplugin.h"
+#include "mmstestbed.h"
+#include "testmmsplugin.ini"
+#include <QSignalSpy>
+
+
+//---------------------------------------------------------------
+// TestMmsPlugin::initTestCase
+//---------------------------------------------------------------
+
+void TestMmsPlugin::initTestCase()
+{
+ qRegisterMetaType<long int> ("long int");
+ msgPlugin = new UniEditorMmsPlugin();
+ QVERIFY(msgPlugin != 0);
+ mmsId = -1;
+ mmstestbed = new MmsTestBed;
+ QVERIFY(mmstestbed != 0);
+ if(!mmstestbed)
+ {
+ QSKIP("Mmstestbed creation failed", SkipAll);
+ }
+
+ spy_draft = new QSignalSpy(mmstestbed,SIGNAL(entryCreatedInDraft(long int)));
+ spy_outbox = new QSignalSpy(mmstestbed,SIGNAL(entryMovedToOutbox(long int)));
+ spy_sent = new QSignalSpy(mmstestbed,SIGNAL(entryMovedToSent(long int)));
+
+}
+
+//---------------------------------------------------------------
+// TestMmsPlugin::init
+//---------------------------------------------------------------
+
+void TestMmsPlugin::init()
+{
+}
+
+//---------------------------------------------------------------
+// TestMmsPlugin::testSendMMS
+//---------------------------------------------------------------
+
+void TestMmsPlugin::testSendMMS()
+{
+
+ qRegisterMetaType<long int> ("long int");
+ QString service = TEST_SERVICE_NAME_MMS;
+
+ QString subject = TEST_MSG_SUBJECT;
+ qint64 timeStamp = QDateTime::currentDateTime().toTime_t();
+
+ QString sender(TEST_SENDER);
+ ConvergedMessageAddress address(sender);
+ ConvergedMessageAttachmentList attachmentList;
+
+ QString attachment2Path = TEST_ATTACHMENT4;
+ ConvergedMessageAttachment* attachment2 =
+ new ConvergedMessageAttachment(attachment2Path, ConvergedMessageAttachment::EAttachment);
+
+ QString attachmentPath = TEST_ATTACHMENT5;
+ ConvergedMessageAttachment* attachment =
+ new ConvergedMessageAttachment(attachmentPath, ConvergedMessageAttachment::EAttachment);
+
+ attachmentList.append(attachment);
+ attachmentList.append(attachment2);
+ ConvergedMessage msg;
+ msg.setMessageType(ConvergedMessage::Mms);
+ msg.setSubject(subject);
+ msg.setTimeStamp(timeStamp);
+ msg.addToRecipient(address);
+ msg.addAttachments(attachmentList);
+ msg.setPriority(ConvergedMessage::Normal);
+ //Adding alias
+ ConvergedMessageAddress address1;
+ address1.setAlias(QString(TEST_MSG_RECIEPIENT));
+ msg.addToRecipient(address1);
+
+ //Adding CC Address
+ QString ccAddress(TEST_CC);
+ ConvergedMessageAddress ccAdd(ccAddress);
+ msg.addCcRecipient(ccAdd);
+
+ //Adding BCC Address
+ QString bccAddress(TEST_BCC);
+ ConvergedMessageAddress bccAdd(bccAddress);
+ msg.addBccRecipient(bccAdd);
+
+ mmstestbed->cleanAll();
+ mmstestbed->setConnectionLocal(true);
+ long int id = msgPlugin->convertTo(&msg);
+
+ QVERIFY(id != 0);
+ msgPlugin->send(id);
+ QTest::qWait(5000);
+ long int idRec;
+
+ if( 1 == spy_draft->count())
+ {
+ void * temp = const_cast<void*>(spy_draft->at(0).at(0).data());
+ idRec = *reinterpret_cast< long int(*)>(temp);
+ QDEBUG_WRITE("passed: spy_draft.count");
+ }
+ else
+ {
+ QFAIL("testSendReceiveMMS: Failed to create message in Draft");
+ mmstestbed->setConnectionLocal(false);
+ return;
+ }
+ if( 1 == spy_outbox->count())
+ {
+ mmstestbed->fromOutboxToMmsc();
+ QDEBUG_WRITE("passed: spy_outbox.count");
+ }
+ else
+ {
+ QFAIL("testSendReceiveMMS: Failed to move message to Outbox");
+ mmstestbed->setConnectionLocal(false);
+ return;
+ }
+
+ if( 1 == spy_sent->count())
+ {
+ void * temp = const_cast<void*>(spy_sent->at(0).at(0).data());
+ long int sentmsgid = *reinterpret_cast< long int(*)>(temp);
+ QCOMPARE(sentmsgid, idRec);
+ mmstestbed->fromMmscToInbox();
+ QDEBUG_WRITE("passed: spy_sent.count");
+ }
+ else
+ {
+ QFAIL("testSendReceiveMMS: Failed to move message to Sent folder");
+ mmstestbed->setConnectionLocal(false);
+ return;
+ }
+}
+
+//---------------------------------------------------------------
+// TestMmsPlugin::testMmsReceived
+//---------------------------------------------------------------
+void TestMmsPlugin::testMmsReceived()
+{
+ QTest::qWait(5000);
+}
+
+//---------------------------------------------------------------
+// TestMmsPlugin::cleanup
+//---------------------------------------------------------------
+void TestMmsPlugin::cleanup()
+{
+}
+
+//---------------------------------------------------------------
+// TestMmsPlugin::cleanupTestCase
+//---------------------------------------------------------------
+void TestMmsPlugin::cleanupTestCase()
+{
+ delete msgPlugin;
+ delete mmstestbed;
+}
+
--- a/messagingapp/msgservices/msgserviceapp/inc/msgsendinterface.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgservices/msgserviceapp/inc/msgsendinterface.h Thu Jul 22 16:32:06 2010 +0100
@@ -60,6 +60,15 @@
void send(const QString phoneNumber, const QString alias,
const QString bodyText);
+ /**
+ * Send message.
+ * @param addressList list of phone numbers and displaynames.
+ * key is the phone number and value is the display name.
+ * @param bodyText body text.
+ */
+ void send(const QVariantMap addressList,
+ const QString bodyText = QString());
+
private:
/**
--- a/messagingapp/msgservices/msgserviceapp/inc/msgserviceviewmanager.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgservices/msgserviceapp/inc/msgserviceviewmanager.h Thu Jul 22 16:32:06 2010 +0100
@@ -65,7 +65,16 @@
void send(const QString phoneNumber,
const QString alias,
const QString bodyText);
-
+
+ /**
+ * Send message.
+ * @param addressList list of phone numbers and displaynames.
+ * key is the phone number and value is the display name.
+ * @param bodyText body text.
+ */
+ void send(const QVariantMap addressList,
+ const QString bodyText = QString());
+
/**
* Send message.
* @param data data to be sent.
@@ -94,7 +103,7 @@
* Handle sms and mms messge
* @param msgId message id
*/
- void handleSmsMmsMsg(int msgId);
+ void handleSmsMmsMsg(int msgId,int msgType);
/**
* Handle ringtone message
--- a/messagingapp/msgservices/msgserviceapp/inc/msgstorehandler.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgservices/msgserviceapp/inc/msgstorehandler.h Thu Jul 22 16:32:06 2010 +0100
@@ -58,6 +58,13 @@
*/
void deleteMessage(int msgId);
+ /**
+ * is draft message.
+ * @param msgId id of the message to be checked.
+ * @return true if it is a draft message,else false
+ */
+ bool isDraftMessage(int msgId);
+
private:
/**
* Does all initilaizations
--- a/messagingapp/msgservices/msgserviceapp/msgserviceapp.pro Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgservices/msgserviceapp/msgserviceapp.pro Thu Jul 22 16:32:06 2010 +0100
@@ -21,7 +21,6 @@
INCLUDEPATH += inc
INCLUDEPATH += ../../../inc
-INCLUDEPATH += ../../msgutils/s60qconversions/inc
INCLUDEPATH += ../../smartmessaging/ringbc/inc
INCLUDEPATH += ../../msgutils/unidatamodelloader/inc
INCLUDEPATH += ../../msgui/inc
@@ -55,7 +54,6 @@
LIBS += -lxqservice \
-lxqserviceutil \
- -ls60qconversions \
-lconvergedmessageutils \
-lmsgs \
-lringbc \
--- a/messagingapp/msgservices/msgserviceapp/service_conf.xml Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgservices/msgserviceapp/service_conf.xml Thu Jul 22 16:32:06 2010 +0100
@@ -10,6 +10,7 @@
<customproperty key="aiw_action_text_file">messaging</customproperty>
<customproperty key="aiw_action_text">txt_messaging_list_attach_to_new_message</customproperty>
<customproperty key="aiw_action_icon">qtg_large_message</customproperty>
+ <customproperty key="blocked_mime_types">video/*</customproperty>
</interface>
<interface>
<name>com.nokia.symbian.IMessageSend</name>
--- a/messagingapp/msgservices/msgserviceapp/src/main.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgservices/msgserviceapp/src/main.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -15,7 +15,7 @@
*
*/
-#include <HbApplication.h>
+#include <hbapplication.h>
#include <QTranslator>
#include <QLocale>
#include <QFile>
--- a/messagingapp/msgservices/msgserviceapp/src/msgsendinterface.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgservices/msgserviceapp/src/msgsendinterface.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -61,5 +61,14 @@
mViewManager->send(phoneNumber, alias, bodyText);
}
+//----------------------------------------------------------------------------
+// MsgSendInterface::send
+// @see header
+//----------------------------------------------------------------------------
+void MsgSendInterface::send(const QVariantMap addressList,
+ const QString bodyText)
+ {
+ mViewManager->send(addressList,bodyText);
+ }
//EOF
--- a/messagingapp/msgservices/msgserviceapp/src/msgserviceviewmanager.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgservices/msgserviceapp/src/msgserviceviewmanager.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -20,7 +20,7 @@
#include <HbMainWindow>
#include <HbAction>
#include <HbApplication>
-#include <HbMessageBox.h>
+#include <hbmessagebox.h>
#include <xqserviceutil.h>
#include <xqappmgr.h>
@@ -36,11 +36,8 @@
#include "unidatamodelplugininterface.h"
// LOCALIZATION
-#define LOC_BUTTON_DELETE hbTrId("txt_common_button_delete")
-#define LOC_BUTTON_CANCEL hbTrId("txt_common_button_cancel")
#define LOC_DELETE_MESSAGE hbTrId("txt_messaging_dialog_delete_message")
#define LOC_DLG_SAVE_RINGTONE hbTrId("txt_conversations_dialog_save_ringing_tone")
-#define LOC_BUTTON_SAVE hbTrId("txt_common_menu_save")
//----------------------------------------------------------------------------
// MsgViewInterface::MsgViewInterface
@@ -215,6 +212,43 @@
// MsgServiceViewManager::send
// @see header
//----------------------------------------------------------------------------
+void MsgServiceViewManager::send(const QVariantMap addressList,
+ const QString bodyText)
+ {
+ QStringList phoneNumList = addressList.keys();
+
+ ConvergedMessageAddressList addrList;
+
+ int count = phoneNumList.count();
+ for( int i = 0; i < count; ++ i )
+ {
+ QString phNum = phoneNumList[i];
+ ConvergedMessageAddress* address = new ConvergedMessageAddress(phNum,
+ addressList.value(phNum).toString());
+ addrList.append(address);
+ }
+
+ ConvergedMessage message;
+ message.addToRecipients(addrList);
+ message.setBodyText(bodyText);
+
+ QVariantList param;
+ QByteArray dataArray;
+ QDataStream messageStream(&dataArray,
+ QIODevice::WriteOnly | QIODevice::Append);
+ message.serialize(messageStream);
+ param << dataArray;
+
+ // switch to editor
+ switchToUniEditor(param);
+
+ XQServiceUtil::toBackground(false);
+ }
+
+//----------------------------------------------------------------------------
+// MsgServiceViewManager::send
+// @see header
+//----------------------------------------------------------------------------
void MsgServiceViewManager::send(QVariant data)
{
ConvergedMessage message;
@@ -310,7 +344,7 @@
case ConvergedMessage::Mms:
case ConvergedMessage::MmsNotification:
{
- handleSmsMmsMsg(msgId);
+ handleSmsMmsMsg(msgId,msgType);
break;
}
case ConvergedMessage::BioMsg:
@@ -332,9 +366,8 @@
{
// for un supported message show delete option
HbMessageBox::question(LOC_DELETE_MESSAGE,
- this,SLOT(onDialogDeleteMsg(HbAction*)),
- LOC_BUTTON_DELETE,
- LOC_BUTTON_CANCEL);
+ this,SLOT(onDialogDeleteMsg(HbAction*)),
+ HbMessageBox::Delete | HbMessageBox::Cancel);
break;
}
}
@@ -344,22 +377,64 @@
// MsgServiceViewManager::handleSmsMmsMsg
// @see header
// ----------------------------------------------------------------------------
-void MsgServiceViewManager::handleSmsMmsMsg(int msgId)
+void MsgServiceViewManager::handleSmsMmsMsg(int msgId,int msgType)
+{
+ if(mStoreHandler->isDraftMessage(msgId))
{
- if (!mUniViewer) {
- mUniViewer = new UnifiedViewer(msgId);
- mUniViewer->setNavigationAction(mBackAction);
- mMainWindow->addView(mUniViewer);
- connect(mUniViewer, SIGNAL(switchView(const QVariantList&)), this,
- SLOT(switchView(const QVariantList&)));
+ ConvergedMessageId convergedMsgId = ConvergedMessageId(msgId);
+ ConvergedMessage message;
+ message.setMessageType((ConvergedMessage::MessageType) msgType);
+ message.setMessageId(convergedMsgId);
+
+ // Launch uni-editor view
+ QByteArray dataArray;
+ QDataStream messageStream(&dataArray, QIODevice::WriteOnly | QIODevice::Append);
+ message.serialize(messageStream);
+
+ QVariantList params;
+ params << MsgBaseView::UNIEDITOR; // target view
+ params << MsgBaseView::SERVICE; // source view
+
+ params << dataArray;
+
+ // except first 2 parameters pass other parameters
+ QVariantList editorData;
+ for(int a = 2; a < params.length(); ++a)
+ {
+ editorData << params.at(a);
+ }
+ // construct
+ if (!mUniEditor) {
+ mUniEditor = new MsgUnifiedEditorView();
+ mMainWindow->addView(mUniEditor);
+ mUniEditor->setNavigationAction(mBackAction);
+ connect(mUniEditor, SIGNAL(switchView(const QVariantList&)), this,
+ SLOT(switchView(const QVariantList&)));
+ }
+
+ // check if additional data for unieditor's consumption is available
+ mUniEditor->openDraftsMessage(editorData);
+
+ mMainWindow->setCurrentView(mUniEditor);
+ mCurrentView = MsgBaseView::UNIEDITOR;
}
- mUniViewer->populateContent(msgId, true, 1);
+ else
+ {
+ if (!mUniViewer) {
+ mUniViewer = new UnifiedViewer(msgId);
+ mUniViewer->setNavigationAction(mBackAction);
+ mMainWindow->addView(mUniViewer);
+ connect(mUniViewer, SIGNAL(switchView(const QVariantList&)), this,
+ SLOT(switchView(const QVariantList&)));
+ }
+ mUniViewer->populateContent(msgId, true, 1);
- mMainWindow->setCurrentView(mUniViewer);
-
- // set current view as viewer
- mCurrentView = MsgBaseView::UNIVIEWER;
+ mMainWindow->setCurrentView(mUniViewer);
+
+ // set current view as viewer
+ mCurrentView = MsgBaseView::UNIVIEWER;
}
+}
// ----------------------------------------------------------------------------
// MsgServiceViewManager::handleRingtoneMsg
@@ -369,7 +444,8 @@
{
mMessageId = msgId;
HbMessageBox::question(LOC_DLG_SAVE_RINGTONE, this,
- SLOT(onDialogSaveTone(HbAction*)), LOC_BUTTON_SAVE, LOC_BUTTON_CANCEL);
+ SLOT(onDialogSaveTone(HbAction*)),
+ HbMessageBox::Save | HbMessageBox::Cancel);
}
// ----------------------------------------------------------------------------
--- a/messagingapp/msgservices/msgserviceapp/src/msgstorehandler.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgservices/msgserviceapp/src/msgstorehandler.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -20,7 +20,7 @@
#include <SendUiConsts.h>
#include "msgstorehandler.h"
-#include "MsgBioUids.h"
+#include "msgbiouids.h"
#include "convergedmessage.h"
//----------------------------------------------------------------------------
@@ -155,4 +155,27 @@
{
iMsvSession->RemoveEntry(msgId);
}
+
+//----------------------------------------------------------------------------
+// MsgStoreHandler::isDraftMessage
+// @see header
+//----------------------------------------------------------------------------
+bool MsgStoreHandler::isDraftMessage(int msgId)
+{
+ bool draftmsg = false;
+ CMsvEntry* cEntry = NULL;
+ TRAPD(err, cEntry = iMsvSession->GetEntryL(msgId));
+ if ( err == KErrNone)
+ {
+ TMsvEntry msvEntry = cEntry->Entry();
+ TMsvId parent = msvEntry.Parent();
+ if(parent == KMsvDraftEntryIdValue)
+ {
+ draftmsg = true;
+ }
+ }
+
+ delete cEntry;
+ return draftmsg;
+}
// End of file
--- a/messagingapp/msgsettings/msginit/msginit.pro Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgsettings/msginit/msginit.pro Thu Jul 22 16:32:06 2010 +0100
@@ -48,6 +48,15 @@
}
+defBlock = \
+ "$${LITERAL_HASH}if defined(EABI)" \
+ "DEFFILE ../eabi/msginit.def" \
+ "$${LITERAL_HASH}else" \
+ "DEFFILE ../bwins/msginit.def" \
+ "$${LITERAL_HASH}endif"
+
+MMP_RULES += defBlock
+
HEADERS += inc/startupmonitor.h \
inc/simscnumberdetector.h \
inc/msgsimnumberdetector.h
--- a/messagingapp/msgsettings/msginit/src/simscnumberdetector.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgsettings/msginit/src/simscnumberdetector.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -256,6 +256,13 @@
}
aServiceSettings->SetSmsBearer((CSmsSettings::TMobileSmsBearer) readedSetting);
+ // Check if we need to store SMSC time stamp OR device Time stamp
+ if (iCenRepSession->Get(KSmumShowSMSCTimeStamp, readedSetting) != KErrNone)
+ {
+ readedSetting = 0;
+ }
+ aServiceSettings->SetUseServiceCenterTimeStampForDate(readedSetting);
+
// Reply via same centre
if (iCenRepSession->Get(KSmumRemoveReplyViaSameCentre, readedSetting)
!= KErrNone)
@@ -308,22 +315,15 @@
{
if ( HasSIMChanged() || HasNoSmscSettings() )
{
- QDEBUG_WRITE("CMsgSimOperation::StartL Reading sim settings")
+ QDEBUG_WRITE("CMsgSimOperation::StartL Reading sim settings start")
- CMsvOperationWait* wait = CMsvOperationWait::NewLC();
+ CMsvOperationActiveSchedulerWait* wait = CMsvOperationActiveSchedulerWait::NewLC();
iSimOperation = iSmsClientMtm->ReadSimParamsL(wait->iStatus);
wait->Start();
-
- QDEBUG_WRITE("CMsgSimOperation::StartL Before CActiveScheduler::Start")
-
- CActiveScheduler::Start();
-
- QDEBUG_WRITE("CMsgSimOperation::StartL After CActiveScheduler::Start")
-
- TInt err = wait->iStatus.Int();
+ TInt err = wait->iStatus.Int();
StartRunL(err);
CleanupStack::PopAndDestroy();
-
+ QDEBUG_WRITE("CMsgSimOperation::StartL Reading sim settings end")
}
}
CompleteClientRequest(0);
@@ -510,8 +510,7 @@
TInt status = KErrNone;
TInt value = 0;
-
- status = RProperty::Get(KPSUidStartup, KPSSimStatus, value);
+ status = RProperty::Get(KPSUidStartup, KPSSimStatus, value);
if (status == KErrNone && value != ESimNotPresent)
{
@@ -519,14 +518,9 @@
return ETrue;
}
- else
- {
- QDEBUG_WRITE("CMsgSimOperation::IsSIMPresent returned False")
-
- return EFalse;
- }
-
-
+
+ QDEBUG_WRITE("CMsgSimOperation::IsSIMPresent returned False")
+ return EFalse;
}
TBool CMsgSimOperation::HasSIMChanged()
--- a/messagingapp/msgsettings/settingsview/inc/msgsettingengine.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgsettings/settingsview/inc/msgsettingengine.h Thu Jul 22 16:32:06 2010 +0100
@@ -18,7 +18,7 @@
#ifndef MSGSETTINGENGINE_H_
#define MSGSETTINGENGINE_H_
-#include <QObject.h>
+#include <qobject.h>
//FORWARD DECLARATION
class SmsSettingsPrivate;
@@ -46,7 +46,7 @@
*/
enum MmsRetrieval
{
- AlwaysAutomatic, AutomInHomeNetwork, Maual, Off, No
+ AlwaysAutomatic, AutomInHomeNetwork, Manual, Off, No
};
public:
--- a/messagingapp/msgsettings/settingsview/inc/msgsettingsview.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgsettings/settingsview/inc/msgsettingsview.h Thu Jul 22 16:32:06 2010 +0100
@@ -53,12 +53,13 @@
void onNewSMSCCenterClicked(int index);
void onSmsCenterEditViewClosed();
-private:
+private:
+ //Sms Center View
+ MsgSMSCenterView* mSMSCenterView;
+
//Settings Form
MsgSettingsForm* mSettingsForm;
- //Sms Center View
- MsgSMSCenterView* mSMSCenterView;
HbMainWindow* mMainWindow;
};
#endif // MSGSETTINGSVIEW_H
--- a/messagingapp/msgsettings/settingsview/rom/settingsview.iby Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgsettings/settingsview/rom/settingsview.iby Thu Jul 22 16:32:06 2010 +0100
@@ -21,5 +21,6 @@
REM DLL
file=ABI_DIR\UREL\settingsview.dll SHARED_LIB_DIR\settingsview.dll
+data=ZSYSTEM\install\settingsview_stub.sis System\Install\settingsview_stub.sis
#endif
--- a/messagingapp/msgsettings/settingsview/settingsview.pro Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgsettings/settingsview/settingsview.pro Thu Jul 22 16:32:06 2010 +0100
@@ -10,7 +10,6 @@
INCLUDEPATH += .
INCLUDEPATH += ../../../inc
INCLUDEPATH += ../../msgui/inc
-INCLUDEPATH += ../../msgutils/s60qconversions/inc
INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
CONFIG += hb
@@ -51,10 +50,19 @@
TARGET.CAPABILITY = All -TCB
+defBlock = \
+ "$${LITERAL_HASH}if defined(EABI)" \
+ "DEFFILE ../eabi/settingsview.def" \
+ "$${LITERAL_HASH}else" \
+ "DEFFILE ../bwins/settingsview.def" \
+ "$${LITERAL_HASH}endif"
+
+MMP_RULES += defBlock
+
LIBS += -lSmcm \
-lmsgs \
- -ls60qconversions \
-lcommdb \
-lmmsserversettings \
- -lmmsgenericsettings
+ -lmmsgenericsettings \
+ -lxqutils
\ No newline at end of file
--- a/messagingapp/msgsettings/settingsview/src/mmssettingsprivate.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgsettings/settingsview/src/mmssettingsprivate.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -149,26 +149,42 @@
mMmsClient->RestoreSettingsL();
mMmsSetting->CopyL( mMmsClient->MmsSettings() );
- //do your operation
- TMmsReceivingMode receveMode = EMmsReceivingAutomatic;
-
- if (aRetrieval == MsgSettingEngine::Maual)
- receveMode = EMmsReceivingManual;
- else if (aRetrieval == MsgSettingEngine::Off)
- receveMode = EMmsReceivingPostpone;
- else if (aRetrieval == MsgSettingEngine::No)
- receveMode = EMmsReceivingReject;
-
- if (aRetrieval == MsgSettingEngine::AlwaysAutomatic)
- {
- mMmsSetting->SetReceivingModeForeign(receveMode);
- }
- else
- {
- mMmsSetting->SetReceivingModeForeign(EMmsReceivingManual);
- }
-
- mMmsSetting->SetReceivingModeHome(receveMode);
+ switch ( aRetrieval )
+ {
+ case MsgSettingEngine::AutomInHomeNetwork:
+ {
+ mMmsSetting->SetReceivingModeHome( EMmsReceivingAutomatic );
+ mMmsSetting->SetReceivingModeForeign( EMmsReceivingManual );
+ break;
+ }
+ case MsgSettingEngine::AlwaysAutomatic:
+ {
+ mMmsSetting->SetReceivingModeHome( EMmsReceivingAutomatic );
+ mMmsSetting->SetReceivingModeForeign( EMmsReceivingAutomatic );
+ break;
+ }
+ case MsgSettingEngine::Manual:
+ {
+ mMmsSetting->SetReceivingModeHome( EMmsReceivingManual );
+ mMmsSetting->SetReceivingModeForeign( EMmsReceivingManual );
+ break;
+ }
+ case MsgSettingEngine::Off:
+ {
+ mMmsSetting->SetReceivingModeHome( EMmsReceivingPostpone );
+ mMmsSetting->SetReceivingModeForeign( EMmsReceivingPostpone );
+ break;
+ }
+ case MsgSettingEngine::No:
+ {
+ mMmsSetting->SetReceivingModeHome( EMmsReceivingReject );
+ mMmsSetting->SetReceivingModeForeign( EMmsReceivingReject );
+ break;
+ }
+ default:
+ break;
+ }
+
//save the settings
mMmsClient->SetSettingsL( *mMmsSetting );
@@ -229,21 +245,36 @@
mMmsAccount->LoadSettingsL(*mMmsSetting);
- TMmsReceivingMode receveMode = mMmsSetting->ReceivingModeHome();
+ TMmsReceivingMode receveModeHome = mMmsSetting->ReceivingModeHome();
+ TMmsReceivingMode receveModeForeign = mMmsSetting->ReceivingModeForeign();
+
- if (receveMode == EMmsReceivingManual)
- aRetrieval = MsgSettingEngine::Maual;
- else if (receveMode == EMmsReceivingPostpone)
- aRetrieval = MsgSettingEngine::Off;
- else if (receveMode == EMmsReceivingReject)
- aRetrieval = MsgSettingEngine::No;
-
- receveMode = mMmsSetting->ReceivingModeForeign();
- if (receveMode == EMmsReceivingAutomatic)
- {
- aRetrieval = MsgSettingEngine::AlwaysAutomatic;
- }
-
+ // if default value is not acceptable, choose next by keeping costs low
+ if ( receveModeHome == EMmsReceivingAutomatic &&
+ receveModeForeign == EMmsReceivingAutomatic )
+ {
+ aRetrieval = MsgSettingEngine::AlwaysAutomatic;
+ }
+ else if ( receveModeHome == EMmsReceivingManual &&
+ receveModeForeign == EMmsReceivingManual )
+ {
+ aRetrieval = MsgSettingEngine::Manual;
+ }
+ else if ( receveModeHome == EMmsReceivingReject &&
+ receveModeForeign == EMmsReceivingReject )
+ {
+ aRetrieval = MsgSettingEngine::No;
+ }
+ else if ( receveModeHome == EMmsReceivingPostpone &&
+ receveModeForeign == EMmsReceivingPostpone )
+ {
+ aRetrieval = MsgSettingEngine::Off;
+ }
+ // Should always be automatic@home & manaul@roam
+ else
+ {
+ aRetrieval = MsgSettingEngine::AutomInHomeNetwork;
+ }
aAnonymousStatus = mMmsSetting->AcceptAnonymousMessages();
aMmsAdvertsStatus = mMmsSetting->AcceptAdvertisementMessages();
--- a/messagingapp/msgsettings/settingsview/src/msgsettingengine.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgsettings/settingsview/src/msgsettingengine.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -22,7 +22,7 @@
#include "msgsettingengine.h"
#include "smssettingsprivate.h"
#include "mmssettingprivate.h"
-#include "s60qconversions.h"
+#include <xqconversions.h>
//Constructor
MsgSettingEngine::MsgSettingEngine()
@@ -237,7 +237,7 @@
for (int i = 0; i < accessPoints.Count(); i++)
{
HBufC* name = static_cast<HBufC *> (accessPoints[i]);
- QString qName = S60QConversions::s60DescToQString(name->Des());
+ QString qName = XQConversions::s60DescToQString(name->Des());
nameList.append(qName);
#ifdef _DEBUG_TRACES_
qDebug() << "\n " << qName;
@@ -292,7 +292,7 @@
for (int i = 0; i < accessPoints.Count(); i++)
{
HBufC* name = accessPoints[i];
- QString qName = S60QConversions::s60DescToQString(name->Des());
+ QString qName = XQConversions::s60DescToQString(name->Des());
nameList.append(qName);
#ifdef _DEBUG_TRACES_
qDebug() << "\n qName";
@@ -341,8 +341,8 @@
<< centreName << " " << centreNumber;
#endif
- HBufC* d_addr = S60QConversions::qStringToS60Desc(centreNumber);
- HBufC* d_name = S60QConversions::qStringToS60Desc(centreName);
+ HBufC* d_addr = XQConversions::qStringToS60Desc(centreNumber);
+ HBufC* d_name = XQConversions::qStringToS60Desc(centreName);
dptr_smsSettings->editSMSServiceCentre(d_addr, d_name, index);
delete d_addr;
@@ -368,8 +368,8 @@
#endif
- HBufC* d_addr = S60QConversions::qStringToS60Desc(centreNumber);
- HBufC* d_name = S60QConversions::qStringToS60Desc(centreName);
+ HBufC* d_addr = XQConversions::qStringToS60Desc(centreNumber);
+ HBufC* d_name = XQConversions::qStringToS60Desc(centreName);
dptr_smsSettings->addSmsMessageCenter(d_addr, d_name);
delete d_addr;
@@ -409,8 +409,8 @@
dptr_smsSettings->smsCenterNameAndNumber(index, &d_addr, &d_name);
- centreNumber = S60QConversions::s60DescToQString(d_addr->Des());
- centreName = S60QConversions::s60DescToQString(d_name->Des());
+ centreNumber = XQConversions::s60DescToQString(d_addr->Des());
+ centreName = XQConversions::s60DescToQString(d_name->Des());
#ifdef _DEBUG_TRACES_
qDebug() << "Exit smsCenterNameAndNumber " << centreNumber << " "
--- a/messagingapp/msgsettings/settingsview/src/msgsettingsform.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgsettings/settingsview/src/msgsettingsform.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -45,7 +45,7 @@
#define LOC_ADD_NEW hbTrId("txt_messaging_button_add_new")
#define LOC_ALWAYS_AUTOMATIC hbTrId("txt_messaging_setlabel_val_always_automatic")
#define LOC_AUTO_HOME_NETWORK hbTrId("txt_messaging_setlabel_val_auto_home_network")
-#define LOC_MANUAL hbTrId("txt_messaging_setlabel_val_mannual")
+#define LOC_MANUAL hbTrId("txt_messaging_setlabel_val_manual")
#define LOC_MMS_YES hbTrId("txt_messaging_setlabel_allow_anonymous_mms_val_yes")
#define LOC_MMS_NO hbTrId("txt_messaging_setlabel_allow_anonymous_mms_val_no")
--- a/messagingapp/msgsettings/settingsview/src/msgsmscentersettingsform.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgsettings/settingsview/src/msgsmscentersettingsform.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -34,8 +34,6 @@
#define LOC_SMS_CENTRE_NUMBER hbTrId("txt_messaging_setlabel_message_centre_number")
#define LOC_SMS_CENTRE_DELETE hbTrId("txt_messaging_button_delete_message_centre")
#define LOC_MESSAGE_CENTER_SAVED hbTrId("txt_messaging_setlabel_message_centre_saved")
-#define LOC_BUTTON_DELETE hbTrId("txt_common_button_delete")
-#define LOC_BUTTON_CANCEL hbTrId("txt_common_button_cancel")
MsgSMSCenterSettingsForm::MsgSMSCenterSettingsForm(int view,
QGraphicsItem *parent) :
@@ -191,7 +189,9 @@
void MsgSMSCenterSettingsForm::onPressedCustomButton()
{
- HbMessageBox::question(LOC_SMS_CENTRE_DELETE, this, SLOT(onDialogDeleteMsgCentre(HbAction*)), LOC_BUTTON_DELETE, LOC_BUTTON_CANCEL);
+ HbMessageBox::question(LOC_SMS_CENTRE_DELETE, this,
+ SLOT(onDialogDeleteMsgCentre(HbAction*)),
+ HbMessageBox::Delete | HbMessageBox::Cancel);
}
void MsgSMSCenterSettingsForm::onDialogDeleteMsgCentre(HbAction* action)
--- a/messagingapp/msgsettings/settingsview/stub_sis/settingsview_stub.pkg Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgsettings/settingsview/stub_sis/settingsview_stub.pkg Thu Jul 22 16:32:06 2010 +0100
@@ -23,4 +23,7 @@
%{"Nokia"}
; Unique Vendor name
-:"Nokia"
\ No newline at end of file
+:"Nokia"
+
+;Files
+""-"z:\sys\bin\settingsview.dll"
Binary file messagingapp/msgsettings/settingsview/stub_sis/settingsview_stub.sis has changed
--- a/messagingapp/msgui/appengine/appengine.pro Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/appengine/appengine.pro Thu Jul 22 16:32:06 2010 +0100
@@ -20,10 +20,10 @@
DEPENDPATH += . src
INCLUDEPATH += ../../../inc
+INCLUDEPATH += ../msguiutils/inc
INCLUDEPATH += ../../msgutils/unieditorutils/editorgenutils/inc
-INCLUDEPATH += ../../msgutils/s60qconversions/inc
INCLUDEPATH += ../../smartmessaging/ringbc/inc
-INCLUDEPATH += /ext/mw/qtextensions/qtmobileextensions/include
+
INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
DEFINES += BUILD_DLL
@@ -46,6 +46,15 @@
"$${LITERAL_HASH}include <platform_paths.hrh>" \
"rom/appengine.iby CORE_APP_LAYER_IBY_EXPORT_PATH(appengine.iby)"
+defBlock = \
+ "$${LITERAL_HASH}if defined(EABI)" \
+ "DEFFILE ../eabi/appengine.def" \
+ "$${LITERAL_HASH}else" \
+ "DEFFILE ../bwins/appengine.def" \
+ "$${LITERAL_HASH}endif"
+
+MMP_RULES += defBlock
+
# Input
HEADERS += inc/conversationsengine.h \
inc/conversationmsgstorehandler.h \
@@ -69,7 +78,6 @@
LIBS += -lcsserverclientapi \
-lcsutils \
- -ls60qconversions \
-lconvergedmessageutils \
-lmsgs \
-lInetProtUtil \
@@ -88,6 +96,8 @@
-lsqldb \
-lestor \
-lFeatMgr \
- -lringbc
+ -lfbscli \
+ -lringbc \
+ -lmsguiutils
--- a/messagingapp/msgui/appengine/inc/conversationlistchangehandler.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/appengine/inc/conversationlistchangehandler.h Thu Jul 22 16:32:06 2010 +0100
@@ -110,7 +110,14 @@
void ModifyConversationList(
const CCsClientConversation& aClientConversation);
-
+
+ /**
+ * PartialDeleteConversationList
+ * This is for handling the partial delete of conversation event from server
+ * @param aClientConversation CCsClientConversation& - reference to client conversation
+ */
+ void PartialDeleteConversationList(
+ const CCsClientConversation& aClientConversation);
/**
* RefreshConversationList
* This is for handling refresh asynchronusly from the server.
@@ -129,7 +136,18 @@
* Handles Conversation List received from server and updates into model
*/
void HandleConversationListL();
-
+
+ /**
+ * CompareByConvTimeStamp
+ * Helper method to compare conversations by timestamp
+ *
+ * @param aObj1 CCsConversation object
+ * @param aObj2 CCsConversation object
+ * @return value based of timestamp comparison
+ */
+ static TInt CompareByConvTimeStamp(const CCsClientConversation& aObj1,
+ const CCsClientConversation& aObj2);
+
private:
// data
--- a/messagingapp/msgui/appengine/inc/conversationmsgstorehandler.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/appengine/inc/conversationmsgstorehandler.h Thu Jul 22 16:32:06 2010 +0100
@@ -184,6 +184,11 @@
* KErrGeneral for other cases
*/
TInt DownloadMessageL(TMsvId aId);
+
+ /**
+ * Returns the Bio Type of a message
+ */
+ int getMsgSubType(int msgId);
private:
--- a/messagingapp/msgui/appengine/inc/conversationsengine.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/appengine/inc/conversationsengine.h Thu Jul 22 16:32:06 2010 +0100
@@ -161,11 +161,23 @@
void emitConversationModelUpdated();
/**
+ * Updates the new conversation id for list view
+ */
+ void emitOpenConversationViewIdUpdate(int newConversationId);
+
+ void disableRegisterationForCVEvents();
+
+ /**
* Emits conversationListModelPopulated signal
*/
void emitConversationListModelPopulated();
/**
+ * Emits conversationListModelEntryDeleted
+ */
+ void emitConversationListModelEntryDeleted( int conversationId );
+
+ /**
* Starts fetching remaing conversations
*/
void fetchMoreConversations();
@@ -210,6 +222,12 @@
*/
RSqlDatabase& getDBHandle(TBool& isOpen);
+ /**
+ * Get the biotype of a message
+ * @param messageId
+ */
+ int getMsgSubType(int messageId);
+
private:
/**
@@ -237,6 +255,17 @@
*/
void conversationListModelPopulated();
+ /**
+ * Signal to indicate the completion of conversation delete
+ * operation.
+ */
+ void conversationListEntryDeleted( int conversationId );
+
+ /**
+ * Signal to specify the CV model empty now
+ */
+ void conversationViewEmpty();
+
private:
/**
--- a/messagingapp/msgui/appengine/inc/conversationsengine_p.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/appengine/inc/conversationsengine_p.h Thu Jul 22 16:32:06 2010 +0100
@@ -119,6 +119,18 @@
void registerForConversationUpdatesL();
/**
+ * Remove the CV notifs temporary for some time
+ * does not destroy the model as such
+ */
+ void deRegisterCVUpdatesTemporary();
+
+ /**
+ * Register again after temporary de-register
+ * just need to set the new conversation id
+ */
+ void registerAgainForConversationUpdatesL(int newConversationId);
+
+ /**
* Fetch ConversationId from contactId
* @param contactId , contactId
* @return conversationId
@@ -133,6 +145,12 @@
TInt getConversationIdFromAddressL(TDesC& contactAddress);
/**
+ * Get the latest conversation from the conversation cache by Id
+ * @param aConversationId for conversation is required
+ */
+ CCsClientConversation* getConversationFromConversationIdL(TInt aConversationId);
+
+ /**
* Starts fetching remaing conversations
*/
void fetchMoreConversations();
--- a/messagingapp/msgui/appengine/inc/conversationsenginedefines.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/appengine/inc/conversationsenginedefines.h Thu Jul 22 16:32:06 2010 +0100
@@ -42,7 +42,8 @@
MessageLocation,
MessageStore,
ConversationAlias,
- NotificationStatus
+ NotificationStatus,
+ PreviewIcon
};
#endif /* CONVERSATIONS_ENGINE_DEFINES_H */
--- a/messagingapp/msgui/appengine/inc/conversationsmodel.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/appengine/inc/conversationsmodel.h Thu Jul 22 16:32:06 2010 +0100
@@ -23,6 +23,8 @@
#include <QStandardItemModel>
#include <ccsdefs.h>
#include <sqldb.h>
+#include <QCache>
+#include <HbIcon>
// FORWARD DECLARATIONS
class CCsConversationEntry;
@@ -83,6 +85,29 @@
*/
RSqlDatabase& getDBHandle(TBool& isOpen);
+ /*
+ * Clears the pixmap cache & model
+ */
+ void clearModel();
+
+ void emitConversationViewEmpty();
+
+signals:
+
+ /*
+ * Signal emitted to retrieve the pixmap icon
+ */
+ void retrievePreviewIcon(int msgId, QString& filepath) const;
+
+ void conversationViewEmpty();
+
+private slots:
+
+ /*
+ * Slot which handles retrievePreviewIcon signal
+ */
+ void updatePreviewIcon(int msgId, QString& filePath);
+
private:
/**
@@ -123,6 +148,31 @@
void handleBioMessages(QStandardItem& item,
const CCsConversationEntry& entry);
+ /**
+ * Populates preview icon into the previewicon cache
+ * @param pixmap, QPixmap
+ * @param filePath, filepath to be used if icon is not in Db
+ * @param msgId, key to pixmap in previewicon cache
+ * @param inDb, indicates if icon was available in Db (or) not
+ */
+ void setPreviewIcon(QPixmap& pixmap, QString& filePath, int msgId,
+ bool inDb);
+
+ /**
+ * Get the preview icon item if available in pixmap cache / create
+ * and return the preview icon
+ * @param msgId, key to pixmap in previewicon cache
+ * @param filePath, filepath to be used if icon is not in cache
+ */
+ HbIcon* getPreviewIconItem(int msgId, QString& filepath) const;
+
+ /**
+ * Check if a MMS is forwardable or not
+ * @param messageId, message id
+ * @return true/false
+ */
+ bool validateMsgForForward(qint32 messageId);
+
private:
/**
@@ -158,6 +208,11 @@
* DB open.
*/
TBool iSqlDbOpen;
+
+ /*
+ * preview-icon cache
+ */
+ QCache<int, HbIcon> previewIconCache;
};
#endif // CONVERSATIONS_MODEL_H
--- a/messagingapp/msgui/appengine/inc/conversationssummarymodel.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/appengine/inc/conversationssummarymodel.h Thu Jul 22 16:32:06 2010 +0100
@@ -66,9 +66,10 @@
* Add a new row to the conversation summary model.
* Overwrite the row if the message already exists.
* @param conversation, CCsClientConversation
+ * @param caching, initial caching flag
*
*/
- void addRow(const CCsClientConversation& conversation);
+ void addRow(const CCsClientConversation& conversation, bool caching = false);
/**
* Delete a row from conversation summary model.
--- a/messagingapp/msgui/appengine/src/conversationchangehandler.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/appengine/src/conversationchangehandler.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -104,7 +104,6 @@
const CCsConversationEntry& aConvEntry)
{
mConversationsModel->addRow(aConvEntry, true);
- ConversationsEngine::instance()->emitConversationModelUpdated();
}
// ---------------------------------------------------------------------------
@@ -115,7 +114,13 @@
const CCsConversationEntry& aConvEntry)
{
mConversationsModel->deleteRow(aConvEntry.EntryId());
- ConversationsEngine::instance()->emitConversationModelUpdated();
+
+ //check if the CV model row count has become zero
+ // then needs to emit signal
+ if (mConversationsModel->rowCount() == 0)
+ {
+ mConversationsModel->emitConversationViewEmpty();
+ }
}
//-----------------------------------------------------------------------
--- a/messagingapp/msgui/appengine/src/conversationlistchangehandler.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/appengine/src/conversationlistchangehandler.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -99,7 +99,8 @@
for (TInt i = 0; i < aClientConversationList.Count(); ++i)
{
CCsClientConversation *entry = aClientConversationList[i]->CloneL();
- mClientConversationList.AppendL(entry);
+ mClientConversationList.InsertInOrderAllowRepeats( entry,
+ ConversationsListChangeHandler::CompareByConvTimeStamp );
}
if (aClientConversationList.Count() > 0)
@@ -137,6 +138,17 @@
}
//-----------------------------------------------------------------------
+// This is for handling partial delete conversation event asynchronusly from the server
+//-----------------------------------------------------------------------
+//
+
+void ConversationsListChangeHandler::PartialDeleteConversationList(
+ const CCsClientConversation& aClientConversation)
+{
+ ConversationsEngine::instance()->emitConversationListModelEntryDeleted( aClientConversation.GetConversationEntryId() );
+}
+
+//-----------------------------------------------------------------------
// This is for handling modify conversation event asynchronusly from the server
//-----------------------------------------------------------------------
//
@@ -180,7 +192,7 @@
if (mCurrentIndex < mClientConversationList.Count())
{
mConvSummaryModel->addRow(
- * (mClientConversationList[mCurrentIndex]));
+ * (mClientConversationList[mCurrentIndex]),true);
mCurrentIndex++;
}
else
@@ -213,4 +225,24 @@
}
+// ----------------------------------------------------------------------------
+// ConversationsListChangeHandler::CompareByConvTimeStamp
+// ---------------------------------------------------------------------------
+TInt ConversationsListChangeHandler::CompareByConvTimeStamp(const CCsClientConversation& aObj1,
+ const CCsClientConversation& aObj2)
+ {
+ TInt64 timestamp1 = aObj1.GetConversationEntry()->TimeStamp();
+ TInt64 timestamp2 = aObj2.GetConversationEntry()->TimeStamp();
+
+ if (timestamp1 == timestamp2)
+ {
+ return 0;
+ }
+ else if (timestamp1 < timestamp2)
+ {
+ return 1;
+ }
+ return -1;
+ }
+
// EOF
--- a/messagingapp/msgui/appengine/src/conversationmsgstorehandler.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/appengine/src/conversationmsgstorehandler.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -26,7 +26,7 @@
#include "conversationmsgstorehandler.h"
#include "draftsmodel.h"
#include "MuiuOperationWait.h"
-#include "MsgBioUids.h"
+#include "msgbiouids.h"
#include "UniEditorGenUtils.h"
// SYSTEM INCLUDES
@@ -952,6 +952,9 @@
{
case KSenduiMtmSmsUidValue:
msgType = ConvergedMessage::Sms;
+ if (entry.iBioType == KMsgBioNokiaServiceSentMessage.iUid) {
+ msgSubType = ConvergedMessage::NokiaService;
+ }
break;
case KSenduiMtmBtUidValue:
msgType = ConvergedMessage::BT;
@@ -982,12 +985,29 @@
else if (entry.iBioType == KMsgBioUidVCalendar.iUid)
{
msgSubType = ConvergedMessage::VCal;
- }
+ }
+ else if (entry.iBioType == KMsgBioNokiaServiceSentMessage.iUid) {
+ msgSubType = ConvergedMessage::NokiaService;
+ }
}
- break;
- default:
- msgType = ConvergedMessage::None;
- break;
- }
+ break;
+ default:
+ msgType = ConvergedMessage::None;
+ break;
}
+}
+
+int ConversationMsgStoreHandler::getMsgSubType(int msgId)
+{
+ int msgType = ConvergedMessage::None;
+ int msgSubType = ConvergedMessage::None;
+ CMsvEntry* cEntry = NULL;
+ TRAPD(err, cEntry = iMsvSession->GetEntryL(msgId));
+ if (err == KErrNone) {
+ TMsvEntry entry = cEntry->Entry();
+ extractMsgType(entry, msgType, msgSubType);
+ }
+ return msgSubType;
+}
+
// End of file
--- a/messagingapp/msgui/appengine/src/conversationsengine.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/appengine/src/conversationsengine.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -16,6 +16,9 @@
*/
#include "conversationsengine.h"
+#include <ccsconversationentry.h>
+#include <ccsclientconversation.h>
+
#include "conversationsenginedefines.h"
#include "convergedmessage.h"
#include "conversationmsgstorehandler.h"
@@ -24,7 +27,7 @@
#include "draftsmodel.h"
#include "conversationsengine_p.h"
#include "debugtraces.h"
-#include "s60qconversions.h"
+#include <xqconversions.h>
//---------------------------------------------------------------
// ConversationsEngine::instance
@@ -52,6 +55,12 @@
d_ptr = new ConversationsEnginePrivate(mConversationMsgStoreHandler,
mConversationsSummaryModel,
mConversationsModel);
+
+ connect (mConversationsModel,
+ SIGNAL(conversationViewEmpty()),
+ this,
+ SIGNAL(conversationViewEmpty()));
+
}
//---------------------------------------------------------------
@@ -212,7 +221,27 @@
{
displayName = indexList[0].data(DisplayName).toString();
address = indexList[0].data(ConversationAddress).toString();
- }
+ }
+ else
+ {
+ int error;
+ CCsClientConversation* clientConv = NULL;
+ TRAP(error, clientConv = d_ptr->getConversationFromConversationIdL(conversationId));
+
+ HBufC *name = clientConv->GetDisplayName();
+ if (name && name->Length())
+ {
+ displayName = XQConversions::s60DescToQString(*name);
+ }
+
+ HBufC *addr = clientConv->GetConversationEntry()->Contact();
+ if (addr && addr->Length())
+ {
+ address = XQConversions::s60DescToQString(*addr);
+ }
+
+ delete clientConv;
+ }
}
//---------------------------------------------------------------
@@ -224,7 +253,7 @@
qint64 conversationId = -1;
int error;
- HBufC* number = S60QConversions::qStringToS60Desc(address);
+ HBufC* number = XQConversions::qStringToS60Desc(address);
TRAP(error,conversationId =
d_ptr->getConversationIdFromAddressL(*number));
@@ -284,6 +313,35 @@
}
//---------------------------------------------------------------
+// ConversationsEngine::emitConversationListModelEntryDeleted
+// @see header
+//---------------------------------------------------------------
+void ConversationsEngine::emitConversationListModelEntryDeleted( int conversationId )
+{
+ emit conversationListEntryDeleted( conversationId );
+}
+
+//---------------------------------------------------------------
+// ConversationsEngine::emitOpenConversationViewIdUpdate
+// @see header
+//---------------------------------------------------------------
+void ConversationsEngine::emitOpenConversationViewIdUpdate(
+ int newConversationId)
+{
+ //also register for subscription now
+ d_ptr->registerAgainForConversationUpdatesL(newConversationId);
+}
+
+//---------------------------------------------------------------
+// ConversationsEngine::disableRegisterationForCVEvents
+// @see header
+//---------------------------------------------------------------
+void ConversationsEngine::disableRegisterationForCVEvents()
+{
+ d_ptr->deRegisterCVUpdatesTemporary();
+}
+
+//---------------------------------------------------------------
// ConversationsEngine::fetchMoreConversations
// @see header
//---------------------------------------------------------------
@@ -344,5 +402,16 @@
return mConversationsModel->getDBHandle(isOpen);
}
+
+//---------------------------------------------------------------
+// ConversationsEngine::getMsgSubType()
+// @see header
+//---------------------------------------------------------------
+int ConversationsEngine::getMsgSubType(int messageId)
+{
+ return mConversationMsgStoreHandler->getMsgSubType(messageId);
+}
+
+
//EOF
--- a/messagingapp/msgui/appengine/src/conversationsengine_p.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/appengine/src/conversationsengine_p.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -51,13 +51,10 @@
//---------------------------------------------------------------
ConversationsEnginePrivate::~ConversationsEnginePrivate()
{
- delete mConvChangeHandler;
-
- delete mConvListChangeHandler;
-
+
if( mClientConv )
{
- if(mServer)
+ if(mServer && mConvChangeHandler)
{
TRAP_IGNORE(mServer->RemoveConversationChangeEventL(
mConvChangeHandler,mClientConv));
@@ -65,7 +62,7 @@
delete mClientConv;
mClientConv = NULL;
}
- if(mServer)
+ if(mServer && mConvListChangeHandler)
{
TRAP_IGNORE(mServer->RemoveConversationListChangeEventL(
mConvListChangeHandler));
@@ -74,6 +71,11 @@
delete mServer;
mServer = NULL;
}
+
+ delete mConvChangeHandler;
+
+ delete mConvListChangeHandler;
+
}
//---------------------------------------------------------------
@@ -219,6 +221,14 @@
return convId;
}
+//---------------------------------------------------------------
+// ConversationsEnginePrivate::getConversationFromConversationId
+// @see header
+//---------------------------------------------------------------
+CCsClientConversation* ConversationsEnginePrivate::getConversationFromConversationIdL(TInt aConversationId)
+{
+ return mServer->GetConversationFromConversationIdL(aConversationId);
+}
//---------------------------------------------------------------
// ConversationsEnginePrivate::clearConversationsL
@@ -230,15 +240,17 @@
mConvChangeHandler->Cancel();
//Clear conversations model before populating with new data
- mConversationsModel->clear();
+ mConversationsModel->clearModel();
// Delete old CCsClientConversation object
// Remove the old Conversation change observer
if(mClientConv)
- {
- mServer->RemoveConversationChangeEventL (mConvChangeHandler ,mClientConv);
+ {
+ int error = KErrNone;
+ TRAP(error, mServer->RemoveConversationChangeEventL (mConvChangeHandler ,mClientConv));
delete mClientConv;
mClientConv = NULL;
+ User::LeaveIfError(error);
}
QCRITICAL_WRITE("ConversationsEnginePrivate::clearConversationsL end.");
@@ -258,6 +270,30 @@
}
//---------------------------------------------------------------
+// ConversationsEnginePrivate::deRegisterCVUpdatesTemporary
+// @see header
+//---------------------------------------------------------------
+void ConversationsEnginePrivate::deRegisterCVUpdatesTemporary()
+{
+ mServer->RemoveConversationChangeEventL (mConvChangeHandler ,mClientConv);
+}
+
+//---------------------------------------------------------------
+// ConversationsEnginePrivate::registerAgainForConversationUpdatesL
+// @see header
+//---------------------------------------------------------------
+void ConversationsEnginePrivate::registerAgainForConversationUpdatesL(
+ int newConversationId)
+{
+ //Add the Conversation Change for new conversationId
+ if(mClientConv)
+ {
+ mClientConv->SetConversationEntryId(newConversationId);
+ mServer->RequestConversationChangeEventL (mConvChangeHandler ,mClientConv);
+ }
+}
+
+//---------------------------------------------------------------
// ConversationsEnginePrivate::ConversationList
// @see header
//---------------------------------------------------------------
--- a/messagingapp/msgui/appengine/src/conversationsengineutility.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/appengine/src/conversationsengineutility.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -19,7 +19,7 @@
#include <qversitreader.h>
#include <qtcontacts.h>
#include <qmobilityglobal.h>
-#include <senduiconsts.h>
+#include <SendUiConsts.h>
#include "conversationsengineutility.h"
#include "convergedmessage.h"
@@ -47,6 +47,7 @@
case ECsProvisioning:
case ECsBioMsg_VCard:
case ECsBioMsg_VCal:
+ case ECsBioMgs_NokiaService:
mMessageType = ConvergedMessage::BioMsg;
break;
case ECsBlueTooth:
@@ -112,6 +113,9 @@
case ECsAudio:
messageSubType = ConvergedMessage::Audio;
break;
+ case ECsBioMgs_NokiaService:
+ messageSubType = ConvergedMessage::NokiaService;
+ break;
default:
messageSubType = ConvergedMessage::None;
break;
--- a/messagingapp/msgui/appengine/src/conversationsmodel.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/appengine/src/conversationsmodel.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -19,26 +19,39 @@
#include "conversationsenginedefines.h"
#include "conversationmsgstorehandler.h"
#include "convergedmessage.h"
-#include "s60qconversions.h"
+#include <xqconversions.h>
#include "conversationsengineutility.h"
#include "unidatamodelloader.h"
#include "unidatamodelplugininterface.h"
#include "ringbc.h"
#include "msgcontacthandler.h"
+#include "mmsconformancecheck.h"
#include <ccsconversationentry.h>
+#include <fileprotectionresolver.h>
#include "debugtraces.h"
#include <QFile>
#include <QFileInfo>
#include <s32mem.h>
+#include <s32strm.h>
+#include <fbs.h>
#include <ccsdefs.h>
//CONSTANTS
_LIT(KDbFileName, "c:[2002A542]conversations.db");
+
// preview sql query
-_LIT(KSelectConvMsgsStmt, "SELECT message_id, subject, body_text, preview_path, msg_property FROM conversation_messages WHERE message_id=:message_id ");
+_LIT(KSelectConvMsgsStmt, "SELECT message_id, msg_processingstate, subject, body_text, preview_path, msg_property, preview_icon FROM conversation_messages WHERE message_id=:message_id ");
+
+//selecet preview-icon query
+_LIT(KSelectPreviewIconStmt,"SELECT message_id, preview_icon FROM conversation_messages WHERE message_id = :message_id ");
+// preview-cache max cost (items)
+const int CACHE_COST = 50;
+//Preview thumbnail size
+const int KWidth = 9.5 * 6.7;
+const int KHeight = 9.5 * 6.7;
//---------------------------------------------------------------
// ConversationsModel::ConversationsModel
// Constructor
@@ -52,6 +65,11 @@
{
iSqlDbOpen = ETrue;
}
+ previewIconCache.setMaxCost(CACHE_COST);
+
+ int err = connect(this, SIGNAL(retrievePreviewIcon(int, QString&)), this,
+ SLOT(updatePreviewIcon(int, QString&)));
+ QCRITICAL_WRITE_FORMAT("Error from connect()", err)
iDataModelPluginLoader = new UniDataModelLoader;
iMmsDataPlugin = iDataModelPluginLoader->getDataModelPlugin(ConvergedMessage::Mms);
iBioMsgPlugin = iDataModelPluginLoader->getDataModelPlugin(ConvergedMessage::BioMsg);
@@ -66,6 +84,9 @@
//Close SQL-DB
iSqlDb.Close();
+ //clear preview-cache
+ previewIconCache.clear();
+
if (iDataModelPluginLoader) {
delete iDataModelPluginLoader;
iDataModelPluginLoader = NULL;
@@ -146,6 +167,13 @@
value = item->data(SendingState);
break;
}
+ case PreviewIcon:
+ {
+ QString filepath(item->data(Attachments).toString());
+ int msgId = item->data(ConvergedMsgId).toInt();
+ HbIcon *icon = getPreviewIconItem(msgId, filepath);
+ return *icon;
+ }
case MessagePriority:
{
value = item->data(MessagePriority);
@@ -178,7 +206,7 @@
}
case DisplayName: // Fall through start
value = item->data(DisplayName);
- break;
+ break;
case Avatar: // Fall througn end
value = item->data(Avatar);
break;
@@ -272,10 +300,10 @@
HBufC* description = entry.Description();
QString subject("");
if (description && description->Length()) {
- subject = (S60QConversions::s60DescToQString(*description));
+ subject = (XQConversions::s60DescToQString(*description));
}
- // time stamp
+ // time stamp
TTime unixEpoch(KUnixEpoch);
TTimeIntervalSeconds seconds;
TTime timeStamp(entry.TimeStamp());
@@ -285,7 +313,7 @@
//contact details
HBufC* contact = entry.Contact();
if (contact && contact->Length()) {
- item.setData(S60QConversions::s60DescToQString(*contact), ConversationAddress);
+ item.setData(XQConversions::s60DescToQString(*contact), ConversationAddress);
}
// message type.
@@ -322,7 +350,7 @@
item.setData(ConvergedMessage::Outbox, MessageLocation);
}
- //message specific handling
+ //message specific handling
if (msgType == ConvergedMessage::Mms) {
QCRITICAL_WRITE("ConversationsModel::populateItem MMS start.")
handleMMS(item, entry);
@@ -347,6 +375,22 @@
}
//---------------------------------------------------------------
+// ConversationsModel::validateMsgForForward
+// @see header file
+//---------------------------------------------------------------
+bool ConversationsModel::validateMsgForForward(qint32 messageId)
+{
+ bool retValue = true;
+ //Validate if the mms msg can be forwarded or not
+ MmsConformanceCheck* mmsConformanceCheck = new MmsConformanceCheck;
+ retValue = mmsConformanceCheck->validateMsgForForward(messageId);
+
+ delete mmsConformanceCheck;
+ return retValue;
+}
+
+
+//---------------------------------------------------------------
// ConversationsModel::handleMMS
// @see header
//---------------------------------------------------------------
@@ -357,7 +401,7 @@
bool isEntryInDb = false;
TInt err = KErrNone;
-
+
//check if db is open and query db
if (iSqlDbOpen)
{
@@ -368,51 +412,100 @@
if (KErrNone == err)
{
TInt msgIdIndex = sqlSelectStmt.ParameterIndex(_L(":message_id"));
+ TInt msgProcessingStateIndex = sqlSelectStmt.ColumnIndex(_L("msg_processingstate"));
TInt subjectIndex = sqlSelectStmt.ColumnIndex(_L("subject"));
TInt bodyIndex = sqlSelectStmt.ColumnIndex(_L("body_text"));
TInt previewPathIndex = sqlSelectStmt.ColumnIndex(
_L("preview_path"));
TInt msgpropertyIndex = sqlSelectStmt.ColumnIndex(
- _L("msg_property"));
+ _L("msg_property"));
+ TInt previewIconIndex = sqlSelectStmt.ColumnIndex(
+ _L("preview_icon"));
err = sqlSelectStmt.BindInt(msgIdIndex, msgId);
-
+
// populate item
if ((KErrNone == err) && (sqlSelectStmt.Next() == KSqlAtRow))
{
- RBuf subjectBuffer;
- subjectBuffer.Create(sqlSelectStmt.ColumnSize(subjectIndex));
- sqlSelectStmt.ColumnText(subjectIndex, subjectBuffer);
+ int msgProcessingState = 0;
+ msgProcessingState = sqlSelectStmt.ColumnInt(
+ msgProcessingStateIndex);
+ if (msgProcessingState == EPreviewMsgProcessed)
+ {
+ // use entry to populate model only when,
+ // entry is present in DB and its processing is over.
+ RBuf subjectBuffer;
+ subjectBuffer.Create(sqlSelectStmt.ColumnSize(
+ subjectIndex));
+ sqlSelectStmt.ColumnText(subjectIndex, subjectBuffer);
+
+ item.setData(XQConversions::s60DescToQString(
+ subjectBuffer), Subject);
+ subjectBuffer.Close();
- item.setData(
- S60QConversions::s60DescToQString(subjectBuffer),
- Subject);
- subjectBuffer.Close();
+ RBuf bodyBuffer;
+ bodyBuffer.Create(sqlSelectStmt.ColumnSize(bodyIndex));
+ sqlSelectStmt.ColumnText(bodyIndex, bodyBuffer);
+
+ item.setData(
+ XQConversions::s60DescToQString(bodyBuffer),
+ BodyText);
+ bodyBuffer.Close();
- RBuf bodyBuffer;
- bodyBuffer.Create(sqlSelectStmt.ColumnSize(bodyIndex));
- sqlSelectStmt.ColumnText(bodyIndex, bodyBuffer);
+ RBuf previewPathBuffer;
+ previewPathBuffer.Create(sqlSelectStmt.ColumnSize(
+ previewPathIndex));
+ sqlSelectStmt.ColumnText(previewPathIndex,
+ previewPathBuffer);
- item.setData(S60QConversions::s60DescToQString(bodyBuffer),
- BodyText);
- bodyBuffer.Close();
+ //Rightnow set inside attachments
+ QString attachmentPath(XQConversions::s60DescToQString(
+ previewPathBuffer));
+
+ item.setData(attachmentPath, Attachments);
+ previewPathBuffer.Close();
- RBuf previewPathBuffer;
- previewPathBuffer.Create(sqlSelectStmt.ColumnSize(
- previewPathIndex));
- sqlSelectStmt.ColumnText(previewPathIndex, previewPathBuffer);
+ int msgProperty = 0;
+ msgProperty = sqlSelectStmt.ColumnInt(msgpropertyIndex);
+ item.setData(msgProperty, MessageProperty);
+
+ RSqlColumnReadStream stream;
+ //Get data from binary column BLOB
+ TInt err = stream.ColumnBinary(sqlSelectStmt,
+ previewIconIndex);
+
+ QCRITICAL_WRITE_FORMAT("Error from ColumnBinary()", err)
+
+ if (err == KErrNone)
+ {
+ CFbsBitmap *bitmap = new CFbsBitmap;
+ TRAPD(err,bitmap->InternalizeL(stream));
+ QCRITICAL_WRITE_FORMAT("Error from bitmap InternalizeL()", err)
- //Rightnow set inside attachments
- item.setData(S60QConversions::s60DescToQString(
- previewPathBuffer), Attachments);
- previewPathBuffer.Close();
+ //convert bitmap to pixmap
+ if (err == KErrNone)
+ {
+ TSize size = bitmap->SizeInPixels();
+ int bytesPerLine = bitmap->ScanLineLength(
+ size.iWidth, bitmap->DisplayMode());
+ const uchar* dataPtr =
+ (const uchar*) bitmap->DataAddress();
- int msgProperty = 0;
- msgProperty = sqlSelectStmt.ColumnInt(msgpropertyIndex);
- item.setData(msgProperty, MessageProperty);
+ QPixmap pixmap = QPixmap::fromImage(QImage(
+ dataPtr, size.iWidth, size.iHeight,
+ bytesPerLine, QImage::Format_RGB16));
+
+ setPreviewIcon(pixmap, attachmentPath, msgId,
+ true);
- //set flag to disable fallback option
- isEntryInDb = true;
+ }
+ //remove bitmap
+ delete bitmap;
+ }
+
+ //set flag to disable fallback option
+ isEntryInDb = true;
+ }
}
}
sqlSelectStmt.Close();
@@ -422,7 +515,12 @@
//populate from data plugins
if (!isEntryInDb || err != KErrNone)
{
- iMmsDataPlugin->setMessageId(entry.EntryId());
+ int error = iMmsDataPlugin->setMessageId(entry.EntryId());
+ if(error != KErrNone)
+ {
+ // skip all
+ return;
+ }
int msgProperty = 0;
if (iMmsDataPlugin->attachmentCount() > 0)
@@ -430,6 +528,11 @@
msgProperty |= EPreviewAttachment;
}
+ if(validateMsgForForward(entry.EntryId()))
+ {
+ msgProperty |= EPreviewForward;
+ }
+
//subject
item.setData(iMmsDataPlugin->subject(), Subject);
@@ -457,24 +560,48 @@
isBodyTextSet = true;
file.close();
}
- if (!isImageSet && objectList[index]->mimetype().contains(
+ if (!isVideoSet && !isImageSet && objectList[index]->mimetype().contains(
"image"))
{
isImageSet = true;
msgProperty |= EPreviewImage;
+ if (objectList[index]->isProtected())
+ {
+ msgProperty |= EPreviewProtectedImage;
+ }
+ if (objectList[index]->isCorrupted())
+ {
+ msgProperty |= EPreviewCorruptedImage;
+ }
imagePath = objectList[index]->path();
}
- if (!isAudioSet && objectList[index]->mimetype().contains(
+ if (!isVideoSet && !isAudioSet && objectList[index]->mimetype().contains(
"audio"))
{
msgProperty |= EPreviewAudio;
+ if (objectList[index]->isProtected())
+ {
+ msgProperty |= EPreviewProtectedAudio;
+ }
+ if (objectList[index]->isCorrupted())
+ {
+ msgProperty |= EPreviewCorruptedAudio;
+ }
isAudioSet = true;
}
- if (!isVideoSet && objectList[index]->mimetype().contains(
+ if (!( isImageSet || isAudioSet) && !isVideoSet && objectList[index]->mimetype().contains(
"video"))
{
isVideoSet = true;
msgProperty |= EPreviewVideo;
+ if (objectList[index]->isProtected())
+ {
+ msgProperty |= EPreviewProtectedVideo;
+ }
+ if (objectList[index]->isCorrupted())
+ {
+ msgProperty |= EPreviewCorruptedVideo;
+ }
videoPath = objectList[index]->path();
}
}
@@ -483,14 +610,28 @@
delete slide;
}
}
+ QPixmap pixmap;
//populate item with the attachment list
+ //TODO: This code is not required bcoz video icon is show and not preview
if (isVideoSet)
{
item.setData(videoPath, Attachments);
+ // Store thumbnail only for non protected, non corrupted content.
+ if (!(EPreviewProtectedVideo & msgProperty) &&
+ !(EPreviewCorruptedVideo & msgProperty))
+ {
+ setPreviewIcon(pixmap, videoPath, msgId, false);
+ }
}
else if (isImageSet)
{
item.setData(imagePath, Attachments);
+ // Store thumbnail only for non protected, non corrupted content.
+ if (!(EPreviewProtectedImage & msgProperty) &&
+ !(EPreviewCorruptedImage & msgProperty))
+ {
+ setPreviewIcon(pixmap, imagePath, msgId, false);
+ }
}
//populate msgProperty
item.setData(msgProperty, MessageProperty);
@@ -520,28 +661,28 @@
{
return;
}
-
+
// fetch relevent info to show in CV
// msg size
QString estimatedMsgSizeStr = QString("%1").arg(0);
estimatedMsgSizeStr.append(" Kb");
- TRAP_IGNORE(estimatedMsgSizeStr =
+ TRAP_IGNORE(estimatedMsgSizeStr =
mMsgStoreHandler->NotificationMsgSizeL());
-
+
// msg class type
QString classInfoStr = mMsgStoreHandler->NotificationClass();
-
+
// notification expiry date
//TODO: Need to do localization of digits used to show expiry time
TTime expiryTime;
QString expiryTimeStr;
mMsgStoreHandler->NotificationExpiryDate(expiryTime, expiryTimeStr);
-
+
// notification state e.g. waiting, retrieving etc
QString statusStr;
int status;
mMsgStoreHandler->NotificationStatus(status, statusStr);
-
+
// create data for bodytext role
QString dataText;
dataText.append("Size: "); // TODO: use logical str name
@@ -580,7 +721,7 @@
{
//TODO, needs to be revisited again, once BT team provides the solution for
//BT received as Biomsg issue.
- QString description = S60QConversions::s60DescToQString(*(entry.Description()));
+ QString description = XQConversions::s60DescToQString(*(entry.Description()));
if (description.contains(".vcf") || description.contains(".ics")) // "vCard"
{
@@ -591,8 +732,8 @@
QString displayName = MsgContactHandler::getVCardDisplayName(
description);
item.setData(displayName, BodyText);
- }
- else
+ }
+ else
{
if (description.contains(".vcs")) // "vCalendar"
{
@@ -626,10 +767,11 @@
QString attachmentPath = attList[0]->path();
//get display-name and set as bodytext
- QString displayName =
+ QString displayName =
MsgContactHandler::getVCardDisplayName(
attachmentPath);
item.setData(displayName, BodyText);
+ item.setData(attachmentPath, Attachments);
// clear attachement list : its allocated at data model
while (!attList.isEmpty()) {
@@ -659,7 +801,7 @@
HBufC* description = entry.Description();
QString subject("");
if (description && description->Length()) {
- subject = (S60QConversions::s60DescToQString(*description));
+ subject = (XQConversions::s60DescToQString(*description));
item.setData(subject, BodyText);
}
}
@@ -674,4 +816,164 @@
isOpen = iSqlDbOpen;
return iSqlDb;
}
+
+//---------------------------------------------------------------
+// ConversationsModel::setPreviewIcon()
+// @see header
+//---------------------------------------------------------------
+void ConversationsModel::setPreviewIcon(QPixmap& pixmap, QString& filePath,
+ int msgId, bool inDb)
+{
+
+ //Since the population happens in reverse this check is needed so that
+ //most recent items have their icons present in cache
+ if (previewIconCache.totalCost() >= previewIconCache.maxCost())
+ return;
+
+ // if not found in db, set from file path
+ if (!inDb)
+ {
+ QPixmap pixmap(filePath);
+ QPixmap scaledPixmap = pixmap.scaled(KWidth, KHeight, Qt::IgnoreAspectRatio);
+ HbIcon *previewIcon = new HbIcon(scaledPixmap);
+
+ previewIconCache.insert(msgId, previewIcon);
+
+ }
+ else
+ {
+ HbIcon *previewIcon = new HbIcon(pixmap);
+ previewIconCache.insert(msgId, previewIcon);
+ }
+}
+
+//---------------------------------------------------------------
+// ConversationsModel::getPreviewIconItem()
+// @see header
+//---------------------------------------------------------------
+HbIcon* ConversationsModel::getPreviewIconItem(int msgId,
+ QString& filepath) const
+{
+ QCRITICAL_WRITE("ConversationsModel::getPreviewIconItem start.")
+
+ //Initialize icon from the Cache will be NULL if Item not present
+ HbIcon* previewIcon = previewIconCache[msgId];
+ if (!previewIcon)
+ {
+ //This is done in this way as non-const function call cant be done here
+ emit retrievePreviewIcon(msgId, filepath);
+
+ previewIcon = previewIconCache[msgId];
+ }
+
+ QCRITICAL_WRITE("ConversationsModel::getPreviewIconItem start.")
+
+ return previewIcon;
+}
+
+//---------------------------------------------------------------
+// ConversationsModel::updatePreviewIcon()
+// @see header
+//---------------------------------------------------------------
+void ConversationsModel::updatePreviewIcon(int msgId, QString& filePath)
+{
+ QCRITICAL_WRITE("ConversationsModel::updatePreviewIcon start.")
+
+ //sql query to get preview-icon from DB
+ bool imagePreviewed = false;
+ QPixmap pixmap;
+
+ if (iSqlDbOpen)
+ {
+ RSqlStatement sqlSelectPreviewIconStmt;
+ TInt err = sqlSelectPreviewIconStmt.Prepare(iSqlDb,
+ KSelectPreviewIconStmt);
+
+ QCRITICAL_WRITE_FORMAT("Error from Prepare()", err)
+
+ if (err == KErrNone)
+ {
+ //msg_id
+ TInt msgIdIndex = sqlSelectPreviewIconStmt.ParameterIndex(
+ _L(":message_id"));
+ sqlSelectPreviewIconStmt.BindInt(msgIdIndex, msgId);
+
+ // get preview-icon from DB
+ err = sqlSelectPreviewIconStmt.Next();
+ QCRITICAL_WRITE_FORMAT("Error from Next()", err)
+
+ if (err == KSqlAtRow)
+ {
+ TInt previewIconIndex = sqlSelectPreviewIconStmt.ColumnIndex(
+ _L("preview_icon"));
+
+ RSqlColumnReadStream stream;
+
+ //Get data from binary column BLOB
+ err = stream.ColumnBinary(sqlSelectPreviewIconStmt,
+ previewIconIndex);
+
+ QCRITICAL_WRITE_FORMAT("Error from ColumnBinary()", err)
+
+ if (err == KErrNone)
+ {
+ CFbsBitmap *bitmap = new CFbsBitmap;
+ TRAPD(err,bitmap->InternalizeL(stream));
+ QCRITICAL_WRITE_FORMAT("Error from bitmap InternalizeL()", err)
+
+ //convert bitmap to pixmap
+ if (err == KErrNone)
+ {
+ TSize size = bitmap->SizeInPixels();
+ int bytesPerLine = bitmap->ScanLineLength(size.iWidth,
+ bitmap->DisplayMode());
+ const uchar* dataPtr =
+ (const uchar*) bitmap->DataAddress();
+
+ pixmap = QPixmap::fromImage(QImage(dataPtr,
+ size.iWidth, size.iHeight, bytesPerLine,
+ QImage::Format_RGB16));
+
+ imagePreviewed = true;
+
+ QCRITICAL_WRITE("Bitmap Conversion completed")
+ }
+ //remove bitmap
+ delete bitmap;
+ }
+ //close stream
+ stream.Close();
+ }
+ }
+ sqlSelectPreviewIconStmt.Close();
+ }
+
+ // if not found in db, set from file path
+ if (!imagePreviewed)
+ {
+ QPixmap orgPixmap(filePath);
+ pixmap = orgPixmap.scaled(63.65, 63.65, Qt::IgnoreAspectRatio);
+ }
+ HbIcon * previewIcon = new HbIcon(pixmap);
+
+ previewIconCache.insert(msgId, previewIcon);
+
+ QCRITICAL_WRITE("ConversationsModel::updatePreviewIcon end.")
+
+}
+
+//---------------------------------------------------------------
+// ConversationsModel::clearModel()
+// @see header
+//---------------------------------------------------------------
+void ConversationsModel::clearModel()
+{
+ clear();
+ previewIconCache.clear();
+}
+
+void ConversationsModel:: emitConversationViewEmpty()
+{
+ emit conversationViewEmpty();
+}
//EOF
--- a/messagingapp/msgui/appengine/src/conversationssummarymodel.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/appengine/src/conversationssummarymodel.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -18,12 +18,14 @@
#include "conversationssummarymodel.h"
#include "conversationsenginedefines.h"
#include "conversationsengineutility.h"
-#include "s60qconversions.h"
+#include <xqconversions.h>
#include "convergedmessage.h"
#include "unidatamodelloader.h"
#include "unidatamodelplugininterface.h"
#include "ringbc.h"
#include "msgcontacthandler.h"
+#include "debugtraces.h"
+
#include <ccsclientconversation.h>
#include <ccsconversationentry.h>
#include <QFile>
@@ -36,6 +38,8 @@
ConversationsSummaryModel::ConversationsSummaryModel(QObject* parent)
:QStandardItemModel(parent)
{
+ QStandardItemModel::setSortRole(TimeStamp);
+ QStandardItemModel::sort(0, Qt::DescendingOrder);
}
//---------------------------------------------------------------
@@ -154,7 +158,7 @@
// @see header
//---------------------------------------------------------------
void ConversationsSummaryModel::addRow(
- const CCsClientConversation& conversation)
+ const CCsClientConversation& conversation, bool caching)
{
int convId = conversation.GetConversationEntryId();
@@ -176,7 +180,12 @@
QModelIndex index = indexList[0];
QStandardItem* item = this->item(index.row(), 0);
populateItem(*item,conversation);
- }
+ }
+ // no need to sort if it is initial caching, as sorting is already done
+ if (!caching)
+ {
+ QStandardItemModel::sort(0, Qt::DescendingOrder);
+ }
}
//---------------------------------------------------------------
@@ -204,6 +213,8 @@
void ConversationsSummaryModel::populateItem(QStandardItem& item,
const CCsClientConversation& conversation)
{
+ QCRITICAL_WRITE("ConversationsSummaryModel::populateItem start.");
+
//get entry
CCsConversationEntry* conEntry = conversation.GetConversationEntry();
//error scenario
@@ -240,7 +251,7 @@
HBufC* body = conEntry->Description();
if( body && body->Length())
{
- QString bodytext(S60QConversions::s60DescToQString(*body));
+ QString bodytext(XQConversions::s60DescToQString(*body));
item.setData(bodytext, BodyText);
item.setData(bodytext, Subject );
}
@@ -263,7 +274,7 @@
//display name
if(disName && disName->Length())
{
- displayName = S60QConversions::s60DescToQString(*disName);
+ displayName = XQConversions::s60DescToQString(*disName);
item.setData(displayName,DisplayName);
}
@@ -272,7 +283,7 @@
QString contactNumber("");
if ( contactno && contactno->Length() )
{
- contactNumber = S60QConversions::s60DescToQString(*contactno);
+ contactNumber = XQConversions::s60DescToQString(*contactno);
}
item.setData(contactNumber, ConversationAddress);
@@ -281,7 +292,9 @@
item.setData(contactId, ContactId);
// unread status
- item.setData(conEntry->IsAttributeSet(ECsAttributeUnread),UnReadStatus);
+ item.setData(conEntry->IsAttributeSet(ECsAttributeUnread),UnReadStatus);
+
+ QCRITICAL_WRITE("ConversationsSummaryModel::populateItem start.");
}
@@ -294,7 +307,7 @@
{
//TODO, needs to be revisited again, once BT team provides the solution for
//BT received as Biomsg issue.
- QString description = S60QConversions::s60DescToQString(*(entry.Description()));
+ QString description = XQConversions::s60DescToQString(*(entry.Description()));
if (description.contains(".vcf") || description.contains(".ics")) // "vCard"
{
@@ -369,12 +382,30 @@
}
}
}
- else {
+
+ else if(ConvergedMessage::NokiaService == msgSubType){
+ // This is a bio message so lets parse it and see if it has a associated attachment ..
+ if (bioMsgPlugin->attachmentCount() > 0) {
+ // TODO : need to confirm if we need to read from attachment
+ }
+ else {// description
+ HBufC* description = entry.Description();
+ QString subject("");
+ if (description && description->Length()) {
+ subject = (XQConversions::s60DescToQString(*description));
+ item.setData(subject, BodyText);
+ }
+
+ }
+
+ }
+
+ else {
// description
HBufC* description = entry.Description();
QString subject("");
if (description && description->Length()) {
- subject = (S60QConversions::s60DescToQString(*description));
+ subject = (XQConversions::s60DescToQString(*description));
item.setData(subject, BodyText);
}
}
--- a/messagingapp/msgui/appengine/src/draftsmodel.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/appengine/src/draftsmodel.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -18,7 +18,6 @@
#include "draftsmodel.h"
#include "conversationsenginedefines.h"
#include "conversationsengineutility.h"
-#include "s60qconversions.h"
#include "conversationsengineutility.h"
#include <ccsclientconversation.h>
@@ -26,7 +25,7 @@
#include <msvstd.h>
#include <QDateTime>
#include <hbicon.h>
-
+#include <xqconversions.h>
//CONSTANTS
const QString DATE_FORMAT("dd/MM"); //Date format.
const QString TIME_FORMAT("hh:mm"); //Time format.
@@ -223,7 +222,7 @@
item.setData(ConversationsEngineUtility::messageType(entry.iMtm.iUid), MessageType);
// description
- QString Description(S60QConversions::s60DescToQString(entry.iDescription));
+ QString Description(XQConversions::s60DescToQString(entry.iDescription));
item.setData(Description, Subject);
// time stamp
@@ -234,7 +233,7 @@
item.setData(seconds.Int(), TimeStamp);
// contact details
- QString contact(S60QConversions::s60DescToQString(entry.iDetails));
+ QString contact(XQConversions::s60DescToQString(entry.iDetails));
item.setData(contact, DisplayName);
// Attachments
--- a/messagingapp/msgui/appengine/tsrc/bwins/testconversationengineu.def Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,93 +0,0 @@
-EXPORTS
- ?trUtf8@TConversationEngine@@SA?AVQString@@PBD0H@Z @ 1 NONAME ; class QString TConversationEngine::trUtf8(char const *, char const *, int)
- ?tr@TConversationEngine@@SA?AVQString@@PBD0H@Z @ 2 NONAME ; class QString TConversationEngine::tr(char const *, char const *, int)
- ?fetchMoreConversations@ConversationsEngine@@QAEXXZ @ 3 NONAME ; void ConversationsEngine::fetchMoreConversations(void)
- ?NotifyNewConversationClientAndUpdateCLV@TConversationEngine@@AAEXXZ @ 4 NONAME ; void TConversationEngine::NotifyNewConversationClientAndUpdateCLV(void)
- ?FetchMoreConversations@TConversationEngine@@AAEXXZ @ 5 NONAME ; void TConversationEngine::FetchMoreConversations(void)
- ?tr@TConversationEngine@@SA?AVQString@@PBD0@Z @ 6 NONAME ; class QString TConversationEngine::tr(char const *, char const *)
- ?FetchConversationsAndUpdateCV@TConversationEngine@@AAEXXZ @ 7 NONAME ; void TConversationEngine::FetchConversationsAndUpdateCV(void)
- ?deleteConversations@ConversationsEngine@@QAE_N_J@Z @ 8 NONAME ; bool ConversationsEngine::deleteConversations(long long)
- ?staticMetaObject@TConversationEngine@@2UQMetaObject@@B @ 9 NONAME ; struct QMetaObject const TConversationEngine::staticMetaObject
- ?DeleteConversationL@CCSRequestHandler@@QAEXH@Z @ 10 NONAME ; void CCSRequestHandler::DeleteConversationL(int)
- ?trUtf8@ConversationsEngine@@SA?AVQString@@PBD0@Z @ 11 NONAME ; class QString ConversationsEngine::trUtf8(char const *, char const *)
- ?emitConversationListModelPopulated@ConversationsEngine@@QAEXXZ @ 12 NONAME ; void ConversationsEngine::emitConversationListModelPopulated(void)
- ?GetConversationsFromServer@TConversationEngine@@AAEXXZ @ 13 NONAME ; void TConversationEngine::GetConversationsFromServer(void)
- ?trUtf8@ConversationsEngine@@SA?AVQString@@PBD0H@Z @ 14 NONAME ; class QString ConversationsEngine::trUtf8(char const *, char const *, int)
- ?tr@ConversationsEngine@@SA?AVQString@@PBD0H@Z @ 15 NONAME ; class QString ConversationsEngine::tr(char const *, char const *, int)
- ?qt_metacast@TConversationEngine@@UAEPAXPBD@Z @ 16 NONAME ; void * TConversationEngine::qt_metacast(char const *)
- ?GetMessagingHistoryL@CCSRequestHandler@@QAEXH@Z @ 17 NONAME ; void CCSRequestHandler::GetMessagingHistoryL(int)
- ?downloadOperationSupported@ConversationsEngine@@QAE_NH@Z @ 18 NONAME ; bool ConversationsEngine::downloadOperationSupported(int)
- ?RemoveConversationListChangeEventL@CCSRequestHandler@@QAEXPAVMCsConversationListChangeObserver@@@Z @ 19 NONAME ; void CCSRequestHandler::RemoveConversationListChangeEventL(class MCsConversationListChangeObserver *)
- ?GetConversationIdL@CCSRequestHandler@@QAEHH@Z @ 20 NONAME ; int CCSRequestHandler::GetConversationIdL(int)
- ?getConversationsModel@ConversationsEngine@@QAEPAVQStandardItemModel@@XZ @ 21 NONAME ; class QStandardItemModel * ConversationsEngine::getConversationsModel(void)
- ?getStaticMetaObject@TConversationEngine@@SAABUQMetaObject@@XZ @ 22 NONAME ; struct QMetaObject const & TConversationEngine::getStaticMetaObject(void)
- ?markConversationRead@ConversationsEngine@@QAE_N_J@Z @ 23 NONAME ; bool ConversationsEngine::markConversationRead(long long)
- ?getCurrentConversationId@ConversationsEngine@@QAE_JXZ @ 24 NONAME ; long long ConversationsEngine::getCurrentConversationId(void)
- ?ClearConversations@TConversationEngine@@AAEXXZ @ 25 NONAME ; void TConversationEngine::ClearConversations(void)
- ?GetConversationIDFromContatcID@TConversationEngine@@AAEXXZ @ 26 NONAME ; void TConversationEngine::GetConversationIDFromContatcID(void)
- ?CheckCurrentConversationID@TConversationEngine@@AAEXXZ @ 27 NONAME ; void TConversationEngine::CheckCurrentConversationID(void)
- ?getConversationsSummaryModel@ConversationsEngine@@QAEPAVQStandardItemModel@@XZ @ 28 NONAME ; class QStandardItemModel * ConversationsEngine::getConversationsSummaryModel(void)
- ?RequestConversationListChangeEventL@CCSRequestHandler@@QAEXPAVMCsConversationListChangeObserver@@@Z @ 29 NONAME ; void CCSRequestHandler::RequestConversationListChangeEventL(class MCsConversationListChangeObserver *)
- ?conversationListModelPopulated@ConversationsEngine@@IAEXXZ @ 30 NONAME ; void ConversationsEngine::conversationListModelPopulated(void)
- ?ShutdownServerL@CCSRequestHandler@@QAEXXZ @ 31 NONAME ; void CCSRequestHandler::ShutdownServerL(void)
- ?GetTotalUnreadCountL@CCSRequestHandler@@QAEKXZ @ 32 NONAME ; unsigned long CCSRequestHandler::GetTotalUnreadCountL(void)
- ??0ConversationsEngine@@AAE@PAVQObject@@@Z @ 33 NONAME ; ConversationsEngine::ConversationsEngine(class QObject *)
- ?getContactDetails@ConversationsEngine@@QAEX_JAAVQString@@1@Z @ 34 NONAME ; void ConversationsEngine::getContactDetails(long long, class QString &, class QString &)
- ?RemoveCachingStatusEventL@CCSRequestHandler@@QAEXPAVMCsCachingStatusObserver@@@Z @ 35 NONAME ; void CCSRequestHandler::RemoveCachingStatusEventL(class MCsCachingStatusObserver *)
- ?tr@ConversationsEngine@@SA?AVQString@@PBD0@Z @ 36 NONAME ; class QString ConversationsEngine::tr(char const *, char const *)
- ?GetConversationListL@CCSRequestHandler@@QAEXXZ @ 37 NONAME ; void CCSRequestHandler::GetConversationListL(void)
- ?getConversations@ConversationsEngine@@QAE_N_J@Z @ 38 NONAME ; bool ConversationsEngine::getConversations(long long)
- ?metaObject@TConversationEngine@@UBEPBUQMetaObject@@XZ @ 39 NONAME ; struct QMetaObject const * TConversationEngine::metaObject(void) const
- ?GetCachingStatusL@CCSRequestHandler@@QAEEXZ @ 40 NONAME ; unsigned char CCSRequestHandler::GetCachingStatusL(void)
- ?RequestCachingStatusEventL@CCSRequestHandler@@QAEXPAVMCsCachingStatusObserver@@@Z @ 41 NONAME ; void CCSRequestHandler::RequestCachingStatusEventL(class MCsCachingStatusObserver *)
- ?initTestCase@TConversationEngine@@AAEXXZ @ 42 NONAME ; void TConversationEngine::initTestCase(void)
- ?GetConversationIDFromAddress@TConversationEngine@@AAEXXZ @ 43 NONAME ; void TConversationEngine::GetConversationIDFromAddress(void)
- ?ClearMessagingHistoryL@CCSRequestHandler@@QAEXH@Z @ 44 NONAME ; void CCSRequestHandler::ClearMessagingHistoryL(int)
- ?GetConversationsL@CCSRequestHandler@@QAEXPAVCCsClientConversation@@@Z @ 45 NONAME ; void CCSRequestHandler::GetConversationsL(class CCsClientConversation *)
- ?NotifyModifyConversationClientAndUpdateCLV@TConversationEngine@@AAEXXZ @ 46 NONAME ; void TConversationEngine::NotifyModifyConversationClientAndUpdateCLV(void)
- ?emitConversationModelPopulated@ConversationsEngine@@QAEXXZ @ 47 NONAME ; void ConversationsEngine::emitConversationModelPopulated(void)
- ?qt_metacall@ConversationsEngine@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 48 NONAME ; int ConversationsEngine::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?NotifyNewConversationEntryAndUpdateCV@TConversationEngine@@AAEXXZ @ 49 NONAME ; void TConversationEngine::NotifyNewConversationEntryAndUpdateCV(void)
- ?deleteAllDraftMessages@ConversationsEngine@@QAEXXZ @ 50 NONAME ; void ConversationsEngine::deleteAllDraftMessages(void)
- ?getConversationIdFromAddress@ConversationsEngine@@QAE_JVQString@@@Z @ 51 NONAME ; long long ConversationsEngine::getConversationIdFromAddress(class QString)
- ?metaObject@ConversationsEngine@@UBEPBUQMetaObject@@XZ @ 52 NONAME ; struct QMetaObject const * ConversationsEngine::metaObject(void) const
- ??1ConversationsEngine@@UAE@XZ @ 53 NONAME ; ConversationsEngine::~ConversationsEngine(void)
- ?GetConversationIdFromAddressL@CCSRequestHandler@@QAEHAAVTDesC16@@@Z @ 54 NONAME ; int CCSRequestHandler::GetConversationIdFromAddressL(class TDesC16 &)
- ?markAsReadAndGetType@ConversationsEngine@@QAEXHAAH0@Z @ 55 NONAME ; void ConversationsEngine::markAsReadAndGetType(int, int &, int &)
- ?qt_metacast@ConversationsEngine@@UAEPAXPBD@Z @ 56 NONAME ; void * ConversationsEngine::qt_metacast(char const *)
- ?getDraftsModel@ConversationsEngine@@QAEPAVQStandardItemModel@@XZ @ 57 NONAME ; class QStandardItemModel * ConversationsEngine::getDraftsModel(void)
- ?MarkMessagingHistoryReadL@CCSRequestHandler@@QAEXH@Z @ 58 NONAME ; void CCSRequestHandler::MarkMessagingHistoryReadL(int)
- ?conversationModelUpdated@ConversationsEngine@@IAEXXZ @ 59 NONAME ; void ConversationsEngine::conversationModelUpdated(void)
- ?NewLC@CCSRequestHandler@@SAPAV1@XZ @ 60 NONAME ; class CCSRequestHandler * CCSRequestHandler::NewLC(void)
- ?getStaticMetaObject@ConversationsEngine@@SAABUQMetaObject@@XZ @ 61 NONAME ; struct QMetaObject const & ConversationsEngine::getStaticMetaObject(void)
- ?DeleteConversationAndUpdateCV@TConversationEngine@@AAEXXZ @ 62 NONAME ; void TConversationEngine::DeleteConversationAndUpdateCV(void)
- ?markMessagesRead@ConversationsEngine@@QAE_NAAV?$QList@H@@@Z @ 63 NONAME ; bool ConversationsEngine::markMessagesRead(class QList<int> &)
- ?cleanupTestCase@TConversationEngine@@AAEXXZ @ 64 NONAME ; void TConversationEngine::cleanupTestCase(void)
- ?conversationModelPopulated@ConversationsEngine@@IAEXXZ @ 65 NONAME ; void ConversationsEngine::conversationModelPopulated(void)
- ?downloadMessage@ConversationsEngine@@QAEHH@Z @ 66 NONAME ; int ConversationsEngine::downloadMessage(int)
- ?MarkConversationReadL@CCSRequestHandler@@QAEXH@Z @ 67 NONAME ; void CCSRequestHandler::MarkConversationReadL(int)
- ?trUtf8@TConversationEngine@@SA?AVQString@@PBD0@Z @ 68 NONAME ; class QString TConversationEngine::trUtf8(char const *, char const *)
- ?qt_metacall@TConversationEngine@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 69 NONAME ; int TConversationEngine::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?GetDraftsModelFromConversationEngine@TConversationEngine@@AAEXXZ @ 70 NONAME ; void TConversationEngine::GetDraftsModelFromConversationEngine(void)
- ?MarkConversationReadAndUpdateCV@TConversationEngine@@AAEXXZ @ 71 NONAME ; void TConversationEngine::MarkConversationReadAndUpdateCV(void)
- ?init@TConversationEngine@@AAEXXZ @ 72 NONAME ; void TConversationEngine::init(void)
- ?RemoveConversationChangeEventL@CCSRequestHandler@@QAEXPAVMCsConversationChangeObserver@@PAVCCsClientConversation@@@Z @ 73 NONAME ; void CCSRequestHandler::RemoveConversationChangeEventL(class MCsConversationChangeObserver *, class CCsClientConversation *)
- ?cleanup@TConversationEngine@@AAEXXZ @ 74 NONAME ; void TConversationEngine::cleanup(void)
- ??_EConversationsEngine@@UAE@I@Z @ 75 NONAME ; ConversationsEngine::~ConversationsEngine(unsigned int)
- ?GetContactDetailsFromConversationID@TConversationEngine@@AAEXXZ @ 76 NONAME ; void TConversationEngine::GetContactDetailsFromConversationID(void)
- ?RemoveResultsEventL@CCSRequestHandler@@QAEXPAVMCsResultsObserver@@@Z @ 77 NONAME ; void CCSRequestHandler::RemoveResultsEventL(class MCsResultsObserver *)
- ?NotifyDeleteConversationClientAndUpdateCLV@TConversationEngine@@AAEXXZ @ 78 NONAME ; void TConversationEngine::NotifyDeleteConversationClientAndUpdateCLV(void)
- ?instance@ConversationsEngine@@SAPAV1@XZ @ 79 NONAME ; class ConversationsEngine * ConversationsEngine::instance(void)
- ?GetConversationUnreadListL@CCSRequestHandler@@QAEXPAV?$RPointerArray@VCCsClientConversation@@@@@Z @ 80 NONAME ; void CCSRequestHandler::GetConversationUnreadListL(class RPointerArray<class CCsClientConversation> *)
- ?RequestResultsEventL@CCSRequestHandler@@QAEXPAVMCsResultsObserver@@@Z @ 81 NONAME ; void CCSRequestHandler::RequestResultsEventL(class MCsResultsObserver *)
- ?resendMessage@ConversationsEngine@@QAE_NH@Z @ 82 NONAME ; bool ConversationsEngine::resendMessage(int)
- ?emitConversationModelUpdated@ConversationsEngine@@QAEXXZ @ 83 NONAME ; void ConversationsEngine::emitConversationModelUpdated(void)
- ?clearConversations@ConversationsEngine@@QAE_NXZ @ 84 NONAME ; bool ConversationsEngine::clearConversations(void)
- ?Version@CCSRequestHandler@@QBE?AVTVersion@@XZ @ 85 NONAME ; class TVersion CCSRequestHandler::Version(void) const
- ?NotifyConversationClientListAndUpdateCLV@TConversationEngine@@AAEXXZ @ 86 NONAME ; void TConversationEngine::NotifyConversationClientListAndUpdateCLV(void)
- ?RequestConversationChangeEventL@CCSRequestHandler@@QAEXPAVMCsConversationChangeObserver@@PAVCCsClientConversation@@@Z @ 87 NONAME ; void CCSRequestHandler::RequestConversationChangeEventL(class MCsConversationChangeObserver *, class CCsClientConversation *)
- ?getConversationIdFromContactId@ConversationsEngine@@QAE_JH@Z @ 88 NONAME ; long long ConversationsEngine::getConversationIdFromContactId(int)
- ?staticMetaObject@ConversationsEngine@@2UQMetaObject@@B @ 89 NONAME ; struct QMetaObject const ConversationsEngine::staticMetaObject
- ?deleteMessages@ConversationsEngine@@QAEXAAV?$QList@H@@@Z @ 90 NONAME ; void ConversationsEngine::deleteMessages(class QList<int> &)
- ?NewL@CCSRequestHandler@@SAPAV1@XZ @ 91 NONAME ; class CCSRequestHandler * CCSRequestHandler::NewL(void)
-
--- a/messagingapp/msgui/appengine/tsrc/eabi/testconversationengineu.def Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,91 +0,0 @@
-EXPORTS
- _ZN17CCSRequestHandler15ShutdownServerLEv @ 1 NONAME
- _ZN17CCSRequestHandler17GetCachingStatusLEv @ 2 NONAME
- _ZN17CCSRequestHandler17GetConversationsLEP21CCsClientConversation @ 3 NONAME
- _ZN17CCSRequestHandler18GetConversationIdLEi @ 4 NONAME
- _ZN17CCSRequestHandler19DeleteConversationLEi @ 5 NONAME
- _ZN17CCSRequestHandler19RemoveResultsEventLEP18MCsResultsObserver @ 6 NONAME
- _ZN17CCSRequestHandler20GetConversationListLEv @ 7 NONAME
- _ZN17CCSRequestHandler20GetMessagingHistoryLEi @ 8 NONAME
- _ZN17CCSRequestHandler20GetTotalUnreadCountLEv @ 9 NONAME
- _ZN17CCSRequestHandler20RequestResultsEventLEP18MCsResultsObserver @ 10 NONAME
- _ZN17CCSRequestHandler21MarkConversationReadLEi @ 11 NONAME
- _ZN17CCSRequestHandler22ClearMessagingHistoryLEi @ 12 NONAME
- _ZN17CCSRequestHandler25MarkMessagingHistoryReadLEi @ 13 NONAME
- _ZN17CCSRequestHandler25RemoveCachingStatusEventLEP24MCsCachingStatusObserver @ 14 NONAME
- _ZN17CCSRequestHandler26GetConversationUnreadListLEP13RPointerArrayI21CCsClientConversationE @ 15 NONAME
- _ZN17CCSRequestHandler26RequestCachingStatusEventLEP24MCsCachingStatusObserver @ 16 NONAME
- _ZN17CCSRequestHandler29GetConversationIdFromAddressLER7TDesC16 @ 17 NONAME
- _ZN17CCSRequestHandler30RemoveConversationChangeEventLEP29MCsConversationChangeObserverP21CCsClientConversation @ 18 NONAME
- _ZN17CCSRequestHandler31RequestConversationChangeEventLEP29MCsConversationChangeObserverP21CCsClientConversation @ 19 NONAME
- _ZN17CCSRequestHandler34RemoveConversationListChangeEventLEP33MCsConversationListChangeObserver @ 20 NONAME
- _ZN17CCSRequestHandler35RequestConversationListChangeEventLEP33MCsConversationListChangeObserver @ 21 NONAME
- _ZN17CCSRequestHandler4NewLEv @ 22 NONAME
- _ZN17CCSRequestHandler5NewLCEv @ 23 NONAME
- _ZN19ConversationsEngine11qt_metacallEN11QMetaObject4CallEiPPv @ 24 NONAME
- _ZN19ConversationsEngine11qt_metacastEPKc @ 25 NONAME
- _ZN19ConversationsEngine13resendMessageEi @ 26 NONAME
- _ZN19ConversationsEngine14deleteMessagesER5QListIiE @ 27 NONAME
- _ZN19ConversationsEngine14getDraftsModelEv @ 28 NONAME
- _ZN19ConversationsEngine15downloadMessageEi @ 29 NONAME
- _ZN19ConversationsEngine16getConversationsEx @ 30 NONAME
- _ZN19ConversationsEngine16markMessagesReadER5QListIiE @ 31 NONAME
- _ZN19ConversationsEngine16staticMetaObjectE @ 32 NONAME DATA 16
- _ZN19ConversationsEngine17getContactDetailsExR7QStringS1_ @ 33 NONAME
- _ZN19ConversationsEngine18clearConversationsEv @ 34 NONAME
- _ZN19ConversationsEngine19deleteConversationsEx @ 35 NONAME
- _ZN19ConversationsEngine19getStaticMetaObjectEv @ 36 NONAME
- _ZN19ConversationsEngine20markAsReadAndGetTypeEiRiS0_ @ 37 NONAME
- _ZN19ConversationsEngine20markConversationReadEx @ 38 NONAME
- _ZN19ConversationsEngine21getConversationsModelEv @ 39 NONAME
- _ZN19ConversationsEngine22deleteAllDraftMessagesEv @ 40 NONAME
- _ZN19ConversationsEngine22fetchMoreConversationsEv @ 41 NONAME
- _ZN19ConversationsEngine24conversationModelUpdatedEv @ 42 NONAME
- _ZN19ConversationsEngine24getCurrentConversationIdEv @ 43 NONAME
- _ZN19ConversationsEngine26conversationModelPopulatedEv @ 44 NONAME
- _ZN19ConversationsEngine26downloadOperationSupportedEi @ 45 NONAME
- _ZN19ConversationsEngine28emitConversationModelUpdatedEv @ 46 NONAME
- _ZN19ConversationsEngine28getConversationIdFromAddressE7QString @ 47 NONAME
- _ZN19ConversationsEngine28getConversationsSummaryModelEv @ 48 NONAME
- _ZN19ConversationsEngine30conversationListModelPopulatedEv @ 49 NONAME
- _ZN19ConversationsEngine30emitConversationModelPopulatedEv @ 50 NONAME
- _ZN19ConversationsEngine30getConversationIdFromContactIdEi @ 51 NONAME
- _ZN19ConversationsEngine34emitConversationListModelPopulatedEv @ 52 NONAME
- _ZN19ConversationsEngine8instanceEv @ 53 NONAME
- _ZN19ConversationsEngineC1EP7QObject @ 54 NONAME
- _ZN19ConversationsEngineC2EP7QObject @ 55 NONAME
- _ZN19ConversationsEngineD0Ev @ 56 NONAME
- _ZN19ConversationsEngineD1Ev @ 57 NONAME
- _ZN19ConversationsEngineD2Ev @ 58 NONAME
- _ZN19TConversationEngine11qt_metacallEN11QMetaObject4CallEiPPv @ 59 NONAME
- _ZN19TConversationEngine11qt_metacastEPKc @ 60 NONAME
- _ZN19TConversationEngine12initTestCaseEv @ 61 NONAME
- _ZN19TConversationEngine15cleanupTestCaseEv @ 62 NONAME
- _ZN19TConversationEngine16staticMetaObjectE @ 63 NONAME DATA 16
- _ZN19TConversationEngine18ClearConversationsEv @ 64 NONAME
- _ZN19TConversationEngine19getStaticMetaObjectEv @ 65 NONAME
- _ZN19TConversationEngine22FetchMoreConversationsEv @ 66 NONAME
- _ZN19TConversationEngine26CheckCurrentConversationIDEv @ 67 NONAME
- _ZN19TConversationEngine26GetConversationsFromServerEv @ 68 NONAME
- _ZN19TConversationEngine28GetConversationIDFromAddressEv @ 69 NONAME
- _ZN19TConversationEngine29DeleteConversationAndUpdateCVEv @ 70 NONAME
- _ZN19TConversationEngine29FetchConversationsAndUpdateCVEv @ 71 NONAME
- _ZN19TConversationEngine30GetConversationIDFromContatcIDEv @ 72 NONAME
- _ZN19TConversationEngine31MarkConversationReadAndUpdateCVEv @ 73 NONAME
- _ZN19TConversationEngine35GetContactDetailsFromConversationIDEv @ 74 NONAME
- _ZN19TConversationEngine36GetDraftsModelFromConversationEngineEv @ 75 NONAME
- _ZN19TConversationEngine37NotifyNewConversationEntryAndUpdateCVEv @ 76 NONAME
- _ZN19TConversationEngine39NotifyNewConversationClientAndUpdateCLVEv @ 77 NONAME
- _ZN19TConversationEngine40NotifyConversationClientListAndUpdateCLVEv @ 78 NONAME
- _ZN19TConversationEngine42NotifyDeleteConversationClientAndUpdateCLVEv @ 79 NONAME
- _ZN19TConversationEngine42NotifyModifyConversationClientAndUpdateCLVEv @ 80 NONAME
- _ZN19TConversationEngine4initEv @ 81 NONAME
- _ZN19TConversationEngine7cleanupEv @ 82 NONAME
- _ZNK17CCSRequestHandler7VersionEv @ 83 NONAME
- _ZNK19ConversationsEngine10metaObjectEv @ 84 NONAME
- _ZNK19TConversationEngine10metaObjectEv @ 85 NONAME
- _ZTI19ConversationsEngine @ 86 NONAME
- _ZTI19TConversationEngine @ 87 NONAME
- _ZTV19ConversationsEngine @ 88 NONAME
- _ZTV19TConversationEngine @ 89 NONAME
-
--- a/messagingapp/msgui/appengine/tsrc/testconversationengine/inc/testconversationengine.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/appengine/tsrc/testconversationengine/inc/testconversationengine.h Thu Jul 22 16:32:06 2010 +0100
@@ -20,7 +20,7 @@
#ifdef BUILD_TEST_DLL
#define TEST_EXPORT Q_DECL_EXPORT
#else
-#define TEST_EXPORT Q_DECL_IMPORT
+#define TEST_EXPORT
#endif
// INCLUDES
--- a/messagingapp/msgui/appengine/tsrc/testconversationengine/src/testccsrequesthandler.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/appengine/tsrc/testconversationengine/src/testccsrequesthandler.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -53,12 +53,12 @@
// CCSRequestHandler::NewLC()
// Two-phased constructor.
// -----------------------------------------------------------------------------
-EXPORT_C CCSRequestHandler* CCSRequestHandler::NewLC(/*CVPbkContactManager* aVPbkContactManager*/)
+EXPORT_C CCSRequestHandler* CCSRequestHandler::NewLC()
{
CCSRequestHandler* self = new ( ELeave ) CCSRequestHandler();
CleanupStack::PushL( self );
- self->ConstructL(/*aVPbkContactManager*/);
+ self->ConstructL();
return self;
}
--- a/messagingapp/msgui/appengine/tsrc/testconversationengine/src/testconversationengine.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/appengine/tsrc/testconversationengine/src/testconversationengine.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -23,7 +23,7 @@
#include "testconversationupdatehandler.h"
#include <ccsclientconversation.h>
#include <ccsconversationentry.h>
-#include <s60qconversions.h>
+#include <xqconversions.h>
#include <conversationsenginedefines.h>
@@ -103,6 +103,8 @@
UpdateConvEntry(TestConversationEngineStub::Instance()->
GetConversationID());
+ ConversationsEngine::instance()->emitConversationModelUpdated();
+
//conversation engine should have emitted signal
QCOMPARE( convModify.count(), 1 );
}
@@ -125,6 +127,8 @@
// update the conversation view with deleted entry
TestConversationEngineStub::Instance()->UpdateDeletedConvEntry();
+ ConversationsEngine::instance()->emitConversationModelUpdated();
+
//conversation engine should have emitted signal
QCOMPARE( convDelete.count(), 1 );
}
@@ -191,11 +195,11 @@
//check the bunch of converation client details
QCOMPARE(fname,
- S60QConversions::s60DescToQString(
+ XQConversions::s60DescToQString(
*(clientConv->GetDisplayName())));
QCOMPARE(address,
- S60QConversions::s60DescToQString(
+ XQConversions::s60DescToQString(
*(clientConv->GetConversationEntry()->Contact())));
}
}
@@ -320,3 +324,16 @@
//delete the stub data
delete TestConversationEngineStub::Instance();
}
+
+
+//main entry point
+int main(int argc, char *argv[])
+ {
+ int ret = -1;
+ QCoreApplication app(argc, argv);
+ QObject* tc = new TConversationEngine();
+ ret = QTest::qExec(tc, argc, argv);
+ delete tc;
+ return ret;
+ }
+
--- a/messagingapp/msgui/appengine/tsrc/testconversationengine/src/testconversationupdatehandler.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/appengine/tsrc/testconversationengine/src/testconversationupdatehandler.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -20,7 +20,7 @@
#include "conversationsengine.h"
#include <conversationsenginedefines.h>
#include <QStandardItemModel>
-#include <s60qconversions.h>
+#include <xqconversions.h>
#include <ccsdefs.h>
#include <ccsclientconversation.h>
@@ -66,7 +66,7 @@
//as this is common for all the conversation entries
QModelIndexList indexList = convModel->match(convModel->index(0, 0),
ConversationAddress,
- S60QConversions::s60DescToQString(TestConversationEngineStub::Instance()->GetContactID()),
+ XQConversions::s60DescToQString(TestConversationEngineStub::Instance()->GetContactID()),
-1, // One match
Qt::MatchExactly);
entryCount = indexList.count();
@@ -86,7 +86,7 @@
//compare the message description
QCOMPARE(convModel->data(indexList[loop], BodyText).toString(),
- S60QConversions::s60DescToQString(
+ XQConversions::s60DescToQString(
TestConversationEngineStub::Instance()->
GetDescription()));
@@ -144,7 +144,7 @@
TDesC* dispName = clientConv->GetDisplayName();
QCOMPARE(convModel->data(indexList[0], DisplayName).toString(),
- S60QConversions::s60DescToQString(*dispName));
+ XQConversions::s60DescToQString(*dispName));
int contactId = clientConv->GetContactId();
QCOMPARE(convModel->data(indexList[0], ContactId).toInt(), contactId);
--- a/messagingapp/msgui/appengine/tsrc/testconversationengine/testconversationengine.pro Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/appengine/tsrc/testconversationengine/testconversationengine.pro Thu Jul 22 16:32:06 2010 +0100
@@ -14,10 +14,11 @@
# Description:
#
QT += testlib
+QT -= gui
CONFIG += hb
CONFIG += symbian_test
-TEMPLATE = lib
+TEMPLATE = app
TARGET = testconversationengine
DEPENDPATH += . inc
DEPENDPATH += . src
@@ -29,15 +30,12 @@
INCLUDEPATH += ../../../../../inc
INCLUDEPATH += ../../../appengine/inc
INCLUDEPATH += ../../../../msgappfw/client/inc
-INCLUDEPATH += ../../../../msgutils/s60qconversions/inc
INCLUDEPATH += ../../../../smartmessaging/ringbc/inc
-INCLUDEPATH += /ext/mw/qtextensions/qtmobileextensions/include
INCLUDEPATH += ../../../../msgutils/unieditorutils/editorgenutils/inc
+
INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
-
-DEFINES += BUILD_TEST_DLL
-DEFINES += BUILD_DLL
+DEFINES += BUILD_DLL
HEADERS += \
testconversationengine.h \
@@ -72,17 +70,17 @@
src/draftsmodel.cpp
SYMBIAN_PLATFORMS = WINSCW ARMV5
-symbian {
- TARGET.CAPABILITY = CAP_GENERAL_DLL
+symbian*:{
+ TARGET.CAPABILITY = CAP_APPLICATION
+ TARGET.UID3 = 0x2001FE76
TARGET.EPOCSTACKSIZE = 0x8000
TARGET.EPOCHEAPSIZE = 0x1000 0x1F00000
- TARGET.EPOCALLOWDLLDATA = 1
}
LIBS += -euser \
-ecom \
-lcsutils \
- -ls60qconversions \
+ -lxqutils \
-lconvergedmessageutils \
-lmsgs \
-lInetProtUtil \
@@ -98,5 +96,8 @@
-lmmscli \
-lcommonengine \
-lmmsserversettings \
+ -lsqldb \
+ -lestor \
-lFeatMgr \
+ -lfbscli \
-lringbc
--- a/messagingapp/msgui/bwins/appengineu.def Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/bwins/appengineu.def Thu Jul 22 16:32:06 2010 +0100
@@ -1,41 +1,45 @@
EXPORTS
?fetchMoreConversations@ConversationsEngine@@QAEXXZ @ 1 NONAME ; void ConversationsEngine::fetchMoreConversations(void)
- ?getConversationIdFromAddress@ConversationsEngine@@QAE_JVQString@@@Z @ 2 NONAME ; long long ConversationsEngine::getConversationIdFromAddress(class QString)
- ?deleteAllDraftMessages@ConversationsEngine@@QAEXXZ @ 3 NONAME ; void ConversationsEngine::deleteAllDraftMessages(void)
- ?metaObject@ConversationsEngine@@UBEPBUQMetaObject@@XZ @ 4 NONAME ; struct QMetaObject const * ConversationsEngine::metaObject(void) const
- ??1ConversationsEngine@@UAE@XZ @ 5 NONAME ; ConversationsEngine::~ConversationsEngine(void)
- ?markAsReadAndGetType@ConversationsEngine@@QAEXHAAH0@Z @ 6 NONAME ; void ConversationsEngine::markAsReadAndGetType(int, int &, int &)
- ?deleteConversations@ConversationsEngine@@QAE_N_J@Z @ 7 NONAME ; bool ConversationsEngine::deleteConversations(long long)
- ?trUtf8@ConversationsEngine@@SA?AVQString@@PBD0@Z @ 8 NONAME ; class QString ConversationsEngine::trUtf8(char const *, char const *)
- ?qt_metacast@ConversationsEngine@@UAEPAXPBD@Z @ 9 NONAME ; void * ConversationsEngine::qt_metacast(char const *)
- ?emitConversationListModelPopulated@ConversationsEngine@@QAEXXZ @ 10 NONAME ; void ConversationsEngine::emitConversationListModelPopulated(void)
- ?getDraftsModel@ConversationsEngine@@QAEPAVQStandardItemModel@@XZ @ 11 NONAME ; class QStandardItemModel * ConversationsEngine::getDraftsModel(void)
- ?trUtf8@ConversationsEngine@@SA?AVQString@@PBD0H@Z @ 12 NONAME ; class QString ConversationsEngine::trUtf8(char const *, char const *, int)
- ?tr@ConversationsEngine@@SA?AVQString@@PBD0H@Z @ 13 NONAME ; class QString ConversationsEngine::tr(char const *, char const *, int)
- ?conversationModelUpdated@ConversationsEngine@@IAEXXZ @ 14 NONAME ; void ConversationsEngine::conversationModelUpdated(void)
- ?getStaticMetaObject@ConversationsEngine@@SAABUQMetaObject@@XZ @ 15 NONAME ; struct QMetaObject const & ConversationsEngine::getStaticMetaObject(void)
- ?downloadOperationSupported@ConversationsEngine@@QAE_NH@Z @ 16 NONAME ; bool ConversationsEngine::downloadOperationSupported(int)
- ?markMessagesRead@ConversationsEngine@@QAE_NAAV?$QList@H@@@Z @ 17 NONAME ; bool ConversationsEngine::markMessagesRead(class QList<int> &)
- ?conversationModelPopulated@ConversationsEngine@@IAEXXZ @ 18 NONAME ; void ConversationsEngine::conversationModelPopulated(void)
- ?downloadMessage@ConversationsEngine@@QAEHH@Z @ 19 NONAME ; int ConversationsEngine::downloadMessage(int)
- ?getConversationsModel@ConversationsEngine@@QAEPAVQStandardItemModel@@XZ @ 20 NONAME ; class QStandardItemModel * ConversationsEngine::getConversationsModel(void)
- ?getCurrentConversationId@ConversationsEngine@@QAE_JXZ @ 21 NONAME ; long long ConversationsEngine::getCurrentConversationId(void)
- ?markConversationRead@ConversationsEngine@@QAE_N_J@Z @ 22 NONAME ; bool ConversationsEngine::markConversationRead(long long)
- ??_EConversationsEngine@@UAE@I@Z @ 23 NONAME ; ConversationsEngine::~ConversationsEngine(unsigned int)
- ?getConversationsSummaryModel@ConversationsEngine@@QAEPAVQStandardItemModel@@XZ @ 24 NONAME ; class QStandardItemModel * ConversationsEngine::getConversationsSummaryModel(void)
- ?conversationListModelPopulated@ConversationsEngine@@IAEXXZ @ 25 NONAME ; void ConversationsEngine::conversationListModelPopulated(void)
- ??0ConversationsEngine@@AAE@PAVQObject@@@Z @ 26 NONAME ; ConversationsEngine::ConversationsEngine(class QObject *)
- ?getContactDetails@ConversationsEngine@@QAEX_JAAVQString@@1@Z @ 27 NONAME ; void ConversationsEngine::getContactDetails(long long, class QString &, class QString &)
- ?instance@ConversationsEngine@@SAPAV1@XZ @ 28 NONAME ; class ConversationsEngine * ConversationsEngine::instance(void)
- ?tr@ConversationsEngine@@SA?AVQString@@PBD0@Z @ 29 NONAME ; class QString ConversationsEngine::tr(char const *, char const *)
- ?resendMessage@ConversationsEngine@@QAE_NH@Z @ 30 NONAME ; bool ConversationsEngine::resendMessage(int)
- ?emitConversationModelUpdated@ConversationsEngine@@QAEXXZ @ 31 NONAME ; void ConversationsEngine::emitConversationModelUpdated(void)
- ?getConversations@ConversationsEngine@@QAE_N_J@Z @ 32 NONAME ; bool ConversationsEngine::getConversations(long long)
- ?clearConversations@ConversationsEngine@@QAE_NXZ @ 33 NONAME ; bool ConversationsEngine::clearConversations(void)
- ?getDBHandle@ConversationsEngine@@QAEAAVRSqlDatabase@@AAH@Z @ 34 NONAME ; class RSqlDatabase & ConversationsEngine::getDBHandle(int &)
- ?getConversationIdFromContactId@ConversationsEngine@@QAE_JH@Z @ 35 NONAME ; long long ConversationsEngine::getConversationIdFromContactId(int)
- ?staticMetaObject@ConversationsEngine@@2UQMetaObject@@B @ 36 NONAME ; struct QMetaObject const ConversationsEngine::staticMetaObject
- ?deleteMessages@ConversationsEngine@@QAEXAAV?$QList@H@@@Z @ 37 NONAME ; void ConversationsEngine::deleteMessages(class QList<int> &)
- ?emitConversationModelPopulated@ConversationsEngine@@QAEXXZ @ 38 NONAME ; void ConversationsEngine::emitConversationModelPopulated(void)
- ?qt_metacall@ConversationsEngine@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 39 NONAME ; int ConversationsEngine::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?disableRegisterationForCVEvents@ConversationsEngine@@QAEXXZ @ 2 NONAME ; void ConversationsEngine::disableRegisterationForCVEvents(void)
+ ?getConversationIdFromAddress@ConversationsEngine@@QAE_JVQString@@@Z @ 3 NONAME ; long long ConversationsEngine::getConversationIdFromAddress(class QString)
+ ?deleteAllDraftMessages@ConversationsEngine@@QAEXXZ @ 4 NONAME ; void ConversationsEngine::deleteAllDraftMessages(void)
+ ?metaObject@ConversationsEngine@@UBEPBUQMetaObject@@XZ @ 5 NONAME ; struct QMetaObject const * ConversationsEngine::metaObject(void) const
+ ??1ConversationsEngine@@UAE@XZ @ 6 NONAME ; ConversationsEngine::~ConversationsEngine(void)
+ ?markAsReadAndGetType@ConversationsEngine@@QAEXHAAH0@Z @ 7 NONAME ; void ConversationsEngine::markAsReadAndGetType(int, int &, int &)
+ ?deleteConversations@ConversationsEngine@@QAE_N_J@Z @ 8 NONAME ; bool ConversationsEngine::deleteConversations(long long)
+ ?trUtf8@ConversationsEngine@@SA?AVQString@@PBD0@Z @ 9 NONAME ; class QString ConversationsEngine::trUtf8(char const *, char const *)
+ ?qt_metacast@ConversationsEngine@@UAEPAXPBD@Z @ 10 NONAME ; void * ConversationsEngine::qt_metacast(char const *)
+ ?emitConversationListModelPopulated@ConversationsEngine@@QAEXXZ @ 11 NONAME ; void ConversationsEngine::emitConversationListModelPopulated(void)
+ ?getDraftsModel@ConversationsEngine@@QAEPAVQStandardItemModel@@XZ @ 12 NONAME ; class QStandardItemModel * ConversationsEngine::getDraftsModel(void)
+ ?emitOpenConversationViewIdUpdate@ConversationsEngine@@QAEXH@Z @ 13 NONAME ; void ConversationsEngine::emitOpenConversationViewIdUpdate(int)
+ ?trUtf8@ConversationsEngine@@SA?AVQString@@PBD0H@Z @ 14 NONAME ; class QString ConversationsEngine::trUtf8(char const *, char const *, int)
+ ?tr@ConversationsEngine@@SA?AVQString@@PBD0H@Z @ 15 NONAME ; class QString ConversationsEngine::tr(char const *, char const *, int)
+ ?conversationModelUpdated@ConversationsEngine@@IAEXXZ @ 16 NONAME ; void ConversationsEngine::conversationModelUpdated(void)
+ ?getStaticMetaObject@ConversationsEngine@@SAABUQMetaObject@@XZ @ 17 NONAME ; struct QMetaObject const & ConversationsEngine::getStaticMetaObject(void)
+ ?downloadOperationSupported@ConversationsEngine@@QAE_NH@Z @ 18 NONAME ; bool ConversationsEngine::downloadOperationSupported(int)
+ ?markMessagesRead@ConversationsEngine@@QAE_NAAV?$QList@H@@@Z @ 19 NONAME ; bool ConversationsEngine::markMessagesRead(class QList<int> &)
+ ?conversationModelPopulated@ConversationsEngine@@IAEXXZ @ 20 NONAME ; void ConversationsEngine::conversationModelPopulated(void)
+ ?downloadMessage@ConversationsEngine@@QAEHH@Z @ 21 NONAME ; int ConversationsEngine::downloadMessage(int)
+ ?getConversationsModel@ConversationsEngine@@QAEPAVQStandardItemModel@@XZ @ 22 NONAME ; class QStandardItemModel * ConversationsEngine::getConversationsModel(void)
+ ?markConversationRead@ConversationsEngine@@QAE_N_J@Z @ 23 NONAME ; bool ConversationsEngine::markConversationRead(long long)
+ ?getCurrentConversationId@ConversationsEngine@@QAE_JXZ @ 24 NONAME ; long long ConversationsEngine::getCurrentConversationId(void)
+ ??_EConversationsEngine@@UAE@I@Z @ 25 NONAME ; ConversationsEngine::~ConversationsEngine(unsigned int)
+ ?getConversationsSummaryModel@ConversationsEngine@@QAEPAVQStandardItemModel@@XZ @ 26 NONAME ; class QStandardItemModel * ConversationsEngine::getConversationsSummaryModel(void)
+ ?conversationListModelPopulated@ConversationsEngine@@IAEXXZ @ 27 NONAME ; void ConversationsEngine::conversationListModelPopulated(void)
+ ??0ConversationsEngine@@AAE@PAVQObject@@@Z @ 28 NONAME ; ConversationsEngine::ConversationsEngine(class QObject *)
+ ?getContactDetails@ConversationsEngine@@QAEX_JAAVQString@@1@Z @ 29 NONAME ; void ConversationsEngine::getContactDetails(long long, class QString &, class QString &)
+ ?instance@ConversationsEngine@@SAPAV1@XZ @ 30 NONAME ; class ConversationsEngine * ConversationsEngine::instance(void)
+ ?tr@ConversationsEngine@@SA?AVQString@@PBD0@Z @ 31 NONAME ; class QString ConversationsEngine::tr(char const *, char const *)
+ ?resendMessage@ConversationsEngine@@QAE_NH@Z @ 32 NONAME ; bool ConversationsEngine::resendMessage(int)
+ ?emitConversationModelUpdated@ConversationsEngine@@QAEXXZ @ 33 NONAME ; void ConversationsEngine::emitConversationModelUpdated(void)
+ ?getConversations@ConversationsEngine@@QAE_N_J@Z @ 34 NONAME ; bool ConversationsEngine::getConversations(long long)
+ ?clearConversations@ConversationsEngine@@QAE_NXZ @ 35 NONAME ; bool ConversationsEngine::clearConversations(void)
+ ?getDBHandle@ConversationsEngine@@QAEAAVRSqlDatabase@@AAH@Z @ 36 NONAME ; class RSqlDatabase & ConversationsEngine::getDBHandle(int &)
+ ?getMsgSubType@ConversationsEngine@@QAEHH@Z @ 37 NONAME ; int ConversationsEngine::getMsgSubType(int)
+ ?getConversationIdFromContactId@ConversationsEngine@@QAE_JH@Z @ 38 NONAME ; long long ConversationsEngine::getConversationIdFromContactId(int)
+ ?staticMetaObject@ConversationsEngine@@2UQMetaObject@@B @ 39 NONAME ; struct QMetaObject const ConversationsEngine::staticMetaObject
+ ?deleteMessages@ConversationsEngine@@QAEXAAV?$QList@H@@@Z @ 40 NONAME ; void ConversationsEngine::deleteMessages(class QList<int> &)
+ ?emitConversationModelPopulated@ConversationsEngine@@QAEXXZ @ 41 NONAME ; void ConversationsEngine::emitConversationModelPopulated(void)
+ ?conversationViewEmpty@ConversationsEngine@@IAEXXZ @ 42 NONAME ; void ConversationsEngine::conversationViewEmpty(void)
+ ?qt_metacall@ConversationsEngine@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 43 NONAME ; int ConversationsEngine::qt_metacall(enum QMetaObject::Call, int, void * *)
--- a/messagingapp/msgui/bwins/conversationviewu.def Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/bwins/conversationviewu.def Thu Jul 22 16:32:06 2010 +0100
@@ -1,7 +1,7 @@
EXPORTS
?qt_metacast@MsgConversationBaseView@@UAEPAXPBD@Z @ 1 NONAME ; void * MsgConversationBaseView::qt_metacast(char const *)
?metaObject@MsgConversationBaseView@@UBEPBUQMetaObject@@XZ @ 2 NONAME ; struct QMetaObject const * MsgConversationBaseView::metaObject(void) const
- ?saveContentToDrafts@MsgConversationBaseView@@QAEXXZ @ 3 NONAME ; void MsgConversationBaseView::saveContentToDrafts(void)
+ ?handleConversationIdChange@MsgConversationBaseView@@AAEX_J@Z @ 3 NONAME ; void MsgConversationBaseView::handleConversationIdChange(long long)
?closeConversationView@MsgConversationBaseView@@QAEXXZ @ 4 NONAME ; void MsgConversationBaseView::closeConversationView(void)
?trUtf8@MsgConversationBaseView@@SA?AVQString@@PBD0H@Z @ 5 NONAME ; class QString MsgConversationBaseView::trUtf8(char const *, char const *, int)
?handleError@MsgConversationBaseView@@AAEXHABVQString@@@Z @ 6 NONAME ; void MsgConversationBaseView::handleError(int, class QString const &)
@@ -10,19 +10,20 @@
??0MsgConversationBaseView@@QAE@PAVQGraphicsItem@@@Z @ 9 NONAME ; MsgConversationBaseView::MsgConversationBaseView(class QGraphicsItem *)
?handleOk@MsgConversationBaseView@@AAEXABVQVariant@@@Z @ 10 NONAME ; void MsgConversationBaseView::handleOk(class QVariant const &)
?trUtf8@MsgConversationBaseView@@SA?AVQString@@PBD0@Z @ 11 NONAME ; class QString MsgConversationBaseView::trUtf8(char const *, char const *)
- ?setPSCVId@MsgConversationBaseView@@QAEX_N@Z @ 12 NONAME ; void MsgConversationBaseView::setPSCVId(bool)
- ?doDelayedConstruction@MsgConversationBaseView@@AAEXXZ @ 13 NONAME ; void MsgConversationBaseView::doDelayedConstruction(void)
- ?openConversation@MsgConversationBaseView@@QAEX_J@Z @ 14 NONAME ; void MsgConversationBaseView::openConversation(long long)
- ?conversationId@MsgConversationBaseView@@QAE_JXZ @ 15 NONAME ; long long MsgConversationBaseView::conversationId(void)
- ?staticMetaObject@MsgConversationBaseView@@2UQMetaObject@@B @ 16 NONAME ; struct QMetaObject const MsgConversationBaseView::staticMetaObject
- ?conversationViewClosed@MsgConversationBaseView@@IAEXXZ @ 17 NONAME ; void MsgConversationBaseView::conversationViewClosed(void)
- ?initView@MsgConversationBaseView@@AAEXXZ @ 18 NONAME ; void MsgConversationBaseView::initView(void)
- ?markMessagesAsRead@MsgConversationBaseView@@QAEXXZ @ 19 NONAME ; void MsgConversationBaseView::markMessagesAsRead(void)
- ?tr@MsgConversationBaseView@@SA?AVQString@@PBD0@Z @ 20 NONAME ; class QString MsgConversationBaseView::tr(char const *, char const *)
- ?qt_metacall@MsgConversationBaseView@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 21 NONAME ; int MsgConversationBaseView::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?getStaticMetaObject@MsgConversationBaseView@@SAABUQMetaObject@@XZ @ 22 NONAME ; struct QMetaObject const & MsgConversationBaseView::getStaticMetaObject(void)
- ??1MsgConversationBaseView@@UAE@XZ @ 23 NONAME ; MsgConversationBaseView::~MsgConversationBaseView(void)
- ?handleViewReady@MsgConversationBaseView@@AAEXXZ @ 24 NONAME ; void MsgConversationBaseView::handleViewReady(void)
- ??_EMsgConversationBaseView@@UAE@I@Z @ 25 NONAME ; MsgConversationBaseView::~MsgConversationBaseView(unsigned int)
- ?clearContent@MsgConversationBaseView@@QAEXXZ @ 26 NONAME ; void MsgConversationBaseView::clearContent(void)
+ ?saveContentToDrafts@MsgConversationBaseView@@QAEHXZ @ 12 NONAME ; int MsgConversationBaseView::saveContentToDrafts(void)
+ ?setPSCVId@MsgConversationBaseView@@QAEX_N@Z @ 13 NONAME ; void MsgConversationBaseView::setPSCVId(bool)
+ ?doDelayedConstruction@MsgConversationBaseView@@AAEXXZ @ 14 NONAME ; void MsgConversationBaseView::doDelayedConstruction(void)
+ ?openConversation@MsgConversationBaseView@@QAEX_J@Z @ 15 NONAME ; void MsgConversationBaseView::openConversation(long long)
+ ?conversationId@MsgConversationBaseView@@QAE_JXZ @ 16 NONAME ; long long MsgConversationBaseView::conversationId(void)
+ ?staticMetaObject@MsgConversationBaseView@@2UQMetaObject@@B @ 17 NONAME ; struct QMetaObject const MsgConversationBaseView::staticMetaObject
+ ?conversationViewClosed@MsgConversationBaseView@@IAEXXZ @ 18 NONAME ; void MsgConversationBaseView::conversationViewClosed(void)
+ ?initView@MsgConversationBaseView@@AAEXXZ @ 19 NONAME ; void MsgConversationBaseView::initView(void)
+ ?markMessagesAsRead@MsgConversationBaseView@@QAEXXZ @ 20 NONAME ; void MsgConversationBaseView::markMessagesAsRead(void)
+ ?tr@MsgConversationBaseView@@SA?AVQString@@PBD0@Z @ 21 NONAME ; class QString MsgConversationBaseView::tr(char const *, char const *)
+ ?qt_metacall@MsgConversationBaseView@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 22 NONAME ; int MsgConversationBaseView::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?getStaticMetaObject@MsgConversationBaseView@@SAABUQMetaObject@@XZ @ 23 NONAME ; struct QMetaObject const & MsgConversationBaseView::getStaticMetaObject(void)
+ ??1MsgConversationBaseView@@UAE@XZ @ 24 NONAME ; MsgConversationBaseView::~MsgConversationBaseView(void)
+ ?handleViewReady@MsgConversationBaseView@@AAEXXZ @ 25 NONAME ; void MsgConversationBaseView::handleViewReady(void)
+ ??_EMsgConversationBaseView@@UAE@I@Z @ 26 NONAME ; MsgConversationBaseView::~MsgConversationBaseView(unsigned int)
+ ?clearContent@MsgConversationBaseView@@QAEXXZ @ 27 NONAME ; void MsgConversationBaseView::clearContent(void)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/bwins/msgaudiofetcheru.def Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,20 @@
+EXPORTS
+ ?metaObject@MsgAudioFetcherView@@UBEPBUQMetaObject@@XZ @ 1 NONAME ; struct QMetaObject const * MsgAudioFetcherView::metaObject(void) const
+ ?enableToolBar@MsgAudioFetcherView@@AAEX_N@Z @ 2 NONAME ; void MsgAudioFetcherView::enableToolBar(bool)
+ ??1MsgAudioFetcherView@@UAE@XZ @ 3 NONAME ; MsgAudioFetcherView::~MsgAudioFetcherView(void)
+ ?staticMetaObject@MsgAudioFetcherView@@2UQMetaObject@@B @ 4 NONAME ; struct QMetaObject const MsgAudioFetcherView::staticMetaObject
+ ??_EMsgAudioFetcherView@@UAE@I@Z @ 5 NONAME ; MsgAudioFetcherView::~MsgAudioFetcherView(unsigned int)
+ ?trUtf8@MsgAudioFetcherView@@SA?AVQString@@PBD0@Z @ 6 NONAME ; class QString MsgAudioFetcherView::trUtf8(char const *, char const *)
+ ?removeToolBarAction@MsgAudioFetcherView@@AAEXXZ @ 7 NONAME ; void MsgAudioFetcherView::removeToolBarAction(void)
+ ?qt_metacall@MsgAudioFetcherView@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 8 NONAME ; int MsgAudioFetcherView::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?initMainWidget@MsgAudioFetcherView@@AAEXXZ @ 9 NONAME ; void MsgAudioFetcherView::initMainWidget(void)
+ ?trUtf8@MsgAudioFetcherView@@SA?AVQString@@PBD0H@Z @ 10 NONAME ; class QString MsgAudioFetcherView::trUtf8(char const *, char const *, int)
+ ?tr@MsgAudioFetcherView@@SA?AVQString@@PBD0H@Z @ 11 NONAME ; class QString MsgAudioFetcherView::tr(char const *, char const *, int)
+ ?on_rightAction_triggered@MsgAudioFetcherView@@AAEXXZ @ 12 NONAME ; void MsgAudioFetcherView::on_rightAction_triggered(void)
+ ??0MsgAudioFetcherView@@QAE@ABV?$QList@VQVariant@@@@@Z @ 13 NONAME ; MsgAudioFetcherView::MsgAudioFetcherView(class QList<class QVariant> const &)
+ ?initToolBar@MsgAudioFetcherView@@AAEXXZ @ 14 NONAME ; void MsgAudioFetcherView::initToolBar(void)
+ ?tr@MsgAudioFetcherView@@SA?AVQString@@PBD0@Z @ 15 NONAME ; class QString MsgAudioFetcherView::tr(char const *, char const *)
+ ?qt_metacast@MsgAudioFetcherView@@UAEPAXPBD@Z @ 16 NONAME ; void * MsgAudioFetcherView::qt_metacast(char const *)
+ ?getStaticMetaObject@MsgAudioFetcherView@@SAABUQMetaObject@@XZ @ 17 NONAME ; struct QMetaObject const & MsgAudioFetcherView::getStaticMetaObject(void)
+ ?on_leftAction_triggered@MsgAudioFetcherView@@AAEXXZ @ 18 NONAME ; void MsgAudioFetcherView::on_leftAction_triggered(void)
+
--- a/messagingapp/msgui/bwins/msgsettingsu.def Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-EXPORTS
- ?createMmsView@SettingsViewer@@QAEXXZ @ 1 NONAME ; void SettingsViewer::createMmsView(void)
- ??0SettingsViewer@@QAE@PAVQGraphicsItem@@@Z @ 2 NONAME ; SettingsViewer::SettingsViewer(class QGraphicsItem *)
- ?openMmsSettings@SettingsViewer@@QAEXXZ @ 3 NONAME ; void SettingsViewer::openMmsSettings(void)
- ??1SettingsViewer@@UAE@XZ @ 4 NONAME ; SettingsViewer::~SettingsViewer(void)
- ?staticMetaObject@SettingsViewer@@2UQMetaObject@@B @ 5 NONAME ; struct QMetaObject const SettingsViewer::staticMetaObject
- ??_ESettingsViewer@@UAE@I@Z @ 6 NONAME ; SettingsViewer::~SettingsViewer(unsigned int)
- ?qt_metacast@SettingsViewer@@UAEPAXPBD@Z @ 7 NONAME ; void * SettingsViewer::qt_metacast(char const *)
- ?initView@SettingsViewer@@QAEXXZ @ 8 NONAME ; void SettingsViewer::initView(void)
- ?softkeyClicked@SettingsViewer@@QAEXXZ @ 9 NONAME ; void SettingsViewer::softkeyClicked(void)
- ?changeAccessPoint@SettingsViewer@@QAEXH@Z @ 10 NONAME ; void SettingsViewer::changeAccessPoint(int)
- ?trUtf8@SettingsViewer@@SA?AVQString@@PBD0@Z @ 11 NONAME ; class QString SettingsViewer::trUtf8(char const *, char const *)
- ?trUtf8@SettingsViewer@@SA?AVQString@@PBD0H@Z @ 12 NONAME ; class QString SettingsViewer::trUtf8(char const *, char const *, int)
- ?metaObject@SettingsViewer@@UBEPBUQMetaObject@@XZ @ 13 NONAME ; struct QMetaObject const * SettingsViewer::metaObject(void) const
- ?openSmsSettings@SettingsViewer@@QAEXXZ @ 14 NONAME ; void SettingsViewer::openSmsSettings(void)
- ?tr@SettingsViewer@@SA?AVQString@@PBD0H@Z @ 15 NONAME ; class QString SettingsViewer::tr(char const *, char const *, int)
- ?iAPSelector@SettingsViewer@@QAEXPAVQStringList@@@Z @ 16 NONAME ; void SettingsViewer::iAPSelector(class QStringList *)
- ?closeSettings@SettingsViewer@@QAEXXZ @ 17 NONAME ; void SettingsViewer::closeSettings(void)
- ?qt_metacall@SettingsViewer@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 18 NONAME ; int SettingsViewer::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?changeService@SettingsViewer@@QAEXXZ @ 19 NONAME ; void SettingsViewer::changeService(void)
- ?createSmsView@SettingsViewer@@QAEXXZ @ 20 NONAME ; void SettingsViewer::createSmsView(void)
- ?settingsViewerClosed@SettingsViewer@@IAEXXZ @ 21 NONAME ; void SettingsViewer::settingsViewerClosed(void)
- ?tr@SettingsViewer@@SA?AVQString@@PBD0@Z @ 22 NONAME ; class QString SettingsViewer::tr(char const *, char const *)
- ?getStaticMetaObject@SettingsViewer@@SAABUQMetaObject@@XZ @ 23 NONAME ; struct QMetaObject const & SettingsViewer::getStaticMetaObject(void)
- ?settingListClosed@SettingsViewer@@QAEXXZ @ 24 NONAME ; void SettingsViewer::settingListClosed(void)
-
--- a/messagingapp/msgui/bwins/msguiutilsu.def Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/bwins/msguiutilsu.def Thu Jul 22 16:32:06 2010 +0100
@@ -1,43 +1,46 @@
EXPORTS
?checkEmailOverSms@MsgSendUtil@@AAE_NAAVConvergedMessage@@AA_N@Z @ 1 NONAME ; bool MsgSendUtil::checkEmailOverSms(class ConvergedMessage &, bool &)
- ??1MmsConformanceCheck@@UAE@XZ @ 2 NONAME ; MmsConformanceCheck::~MmsConformanceCheck(void)
- ?mediaDurationL@MsgMediaUtil@@AAEHABVTDesC16@@@Z @ 3 NONAME ; int MsgMediaUtil::mediaDurationL(class TDesC16 const &)
- ??0MsgMediaUtil@@QAE@XZ @ 4 NONAME ; MsgMediaUtil::MsgMediaUtil(void)
- ?trUtf8@MmsConformanceCheck@@SA?AVQString@@PBD0@Z @ 5 NONAME ; class QString MmsConformanceCheck::trUtf8(char const *, char const *)
- ?qt_metacast@MsgSendUtil@@UAEPAXPBD@Z @ 6 NONAME ; void * MsgSendUtil::qt_metacast(char const *)
- ?validateService@MsgSendUtil@@AAE_NPAVUniEditorPluginInterface@@_N@Z @ 7 NONAME ; bool MsgSendUtil::validateService(class UniEditorPluginInterface *, bool)
- ?showPopup@MmsConformanceCheck@@AAEXABVQString@@@Z @ 8 NONAME ; void MmsConformanceCheck::showPopup(class QString const &)
- ??0MsgSendUtil@@QAE@PAVQObject@@@Z @ 9 NONAME ; MsgSendUtil::MsgSendUtil(class QObject *)
- ?metaObject@MsgSendUtil@@UBEPBUQMetaObject@@XZ @ 10 NONAME ; struct QMetaObject const * MsgSendUtil::metaObject(void) const
- ?longestEmailAddressSize@MsgSendUtil@@AAEHV?$QList@PAVConvergedMessageAddress@@@@@Z @ 11 NONAME ; int MsgSendUtil::longestEmailAddressSize(class QList<class ConvergedMessageAddress *>)
- ?getStaticMetaObject@MmsConformanceCheck@@SAABUQMetaObject@@XZ @ 12 NONAME ; struct QMetaObject const & MmsConformanceCheck::getStaticMetaObject(void)
- ??_EMsgSendUtil@@UAE@I@Z @ 13 NONAME ; MsgSendUtil::~MsgSendUtil(unsigned int)
- ?staticMetaObject@MsgSendUtil@@2UQMetaObject@@B @ 14 NONAME ; struct QMetaObject const MsgSendUtil::staticMetaObject
- ??0MmsConformanceCheck@@QAE@XZ @ 15 NONAME ; MmsConformanceCheck::MmsConformanceCheck(void)
- ?metaObject@MmsConformanceCheck@@UBEPBUQMetaObject@@XZ @ 16 NONAME ; struct QMetaObject const * MmsConformanceCheck::metaObject(void) const
- ?trUtf8@MsgSendUtil@@SA?AVQString@@PBD0@Z @ 17 NONAME ; class QString MsgSendUtil::trUtf8(char const *, char const *)
- ?getStaticMetaObject@MsgSendUtil@@SAABUQMetaObject@@XZ @ 18 NONAME ; struct QMetaObject const & MsgSendUtil::getStaticMetaObject(void)
- ?qt_metacall@MmsConformanceCheck@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 19 NONAME ; int MmsConformanceCheck::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?getSmsMsgSize@MsgSendUtil@@AAEHAAVConvergedMessage@@@Z @ 20 NONAME ; int MsgSendUtil::getSmsMsgSize(class ConvergedMessage &)
- ?tr@MsgSendUtil@@SA?AVQString@@PBD0H@Z @ 21 NONAME ; class QString MsgSendUtil::tr(char const *, char const *, int)
- ?validateMsgForForward@MmsConformanceCheck@@QAE_NH@Z @ 22 NONAME ; bool MmsConformanceCheck::validateMsgForForward(int)
- ?checkMaxMsgSizeLimit@MsgSendUtil@@AAE_NAAVConvergedMessage@@@Z @ 23 NONAME ; bool MsgSendUtil::checkMaxMsgSizeLimit(class ConvergedMessage &)
- ?trUtf8@MmsConformanceCheck@@SA?AVQString@@PBD0H@Z @ 24 NONAME ; class QString MmsConformanceCheck::trUtf8(char const *, char const *, int)
- ?tr@MmsConformanceCheck@@SA?AVQString@@PBD0H@Z @ 25 NONAME ; class QString MmsConformanceCheck::tr(char const *, char const *, int)
- ??1MsgMediaUtil@@QAE@XZ @ 26 NONAME ; MsgMediaUtil::~MsgMediaUtil(void)
- ?send@MsgSendUtil@@QAEHAAVConvergedMessage@@@Z @ 27 NONAME ; int MsgSendUtil::send(class ConvergedMessage &)
- ?trUtf8@MsgSendUtil@@SA?AVQString@@PBD0H@Z @ 28 NONAME ; class QString MsgSendUtil::trUtf8(char const *, char const *, int)
- ?checkMaxRecipientCount@MsgSendUtil@@AAE_NAAVConvergedMessage@@@Z @ 29 NONAME ; bool MsgSendUtil::checkMaxRecipientCount(class ConvergedMessage &)
- ?getMmsMsgSize@MsgSendUtil@@AAEHAAVConvergedMessage@@@Z @ 30 NONAME ; int MsgSendUtil::getMmsMsgSize(class ConvergedMessage &)
- ?onDialogInsertMedia@MmsConformanceCheck@@AAEXPAVHbAction@@@Z @ 31 NONAME ; void MmsConformanceCheck::onDialogInsertMedia(class HbAction *)
- ?checkModeForInsert@MmsConformanceCheck@@QAEHABVQString@@_N@Z @ 32 NONAME ; int MmsConformanceCheck::checkModeForInsert(class QString const &, bool)
- ?qt_metacast@MmsConformanceCheck@@UAEPAXPBD@Z @ 33 NONAME ; void * MmsConformanceCheck::qt_metacast(char const *)
- ?tr@MmsConformanceCheck@@SA?AVQString@@PBD0@Z @ 34 NONAME ; class QString MmsConformanceCheck::tr(char const *, char const *)
- ?staticMetaObject@MmsConformanceCheck@@2UQMetaObject@@B @ 35 NONAME ; struct QMetaObject const MmsConformanceCheck::staticMetaObject
- ?saveToDrafts@MsgSendUtil@@QAEJAAVConvergedMessage@@@Z @ 36 NONAME ; long MsgSendUtil::saveToDrafts(class ConvergedMessage &)
- ?tr@MsgSendUtil@@SA?AVQString@@PBD0@Z @ 37 NONAME ; class QString MsgSendUtil::tr(char const *, char const *)
- ?mediaDuration@MsgMediaUtil@@QAE?AVQString@@ABV2@@Z @ 38 NONAME ; class QString MsgMediaUtil::mediaDuration(class QString const &)
- ??_EMmsConformanceCheck@@UAE@I@Z @ 39 NONAME ; MmsConformanceCheck::~MmsConformanceCheck(unsigned int)
- ??1MsgSendUtil@@UAE@XZ @ 40 NONAME ; MsgSendUtil::~MsgSendUtil(void)
- ?qt_metacall@MsgSendUtil@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 41 NONAME ; int MsgSendUtil::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?deleteVCardFromTemp@MsgContactsUtil@@CAXABVQString@@@Z @ 2 NONAME ; void MsgContactsUtil::deleteVCardFromTemp(class QString const &)
+ ??1MmsConformanceCheck@@UAE@XZ @ 3 NONAME ; MmsConformanceCheck::~MmsConformanceCheck(void)
+ ?mediaDurationL@MsgMediaUtil@@AAEHABVTDesC16@@@Z @ 4 NONAME ; int MsgMediaUtil::mediaDurationL(class TDesC16 const &)
+ ??0MsgMediaUtil@@QAE@XZ @ 5 NONAME ; MsgMediaUtil::MsgMediaUtil(void)
+ ?trUtf8@MmsConformanceCheck@@SA?AVQString@@PBD0@Z @ 6 NONAME ; class QString MmsConformanceCheck::trUtf8(char const *, char const *)
+ ?qt_metacast@MsgSendUtil@@UAEPAXPBD@Z @ 7 NONAME ; void * MsgSendUtil::qt_metacast(char const *)
+ ?validateService@MsgSendUtil@@AAE_NPAVUniEditorPluginInterface@@_N@Z @ 8 NONAME ; bool MsgSendUtil::validateService(class UniEditorPluginInterface *, bool)
+ ?showPopup@MmsConformanceCheck@@AAEXABVQString@@@Z @ 9 NONAME ; void MmsConformanceCheck::showPopup(class QString const &)
+ ??0MsgSendUtil@@QAE@PAVQObject@@@Z @ 10 NONAME ; MsgSendUtil::MsgSendUtil(class QObject *)
+ ?metaObject@MsgSendUtil@@UBEPBUQMetaObject@@XZ @ 11 NONAME ; struct QMetaObject const * MsgSendUtil::metaObject(void) const
+ ?longestEmailAddressSize@MsgSendUtil@@AAEHV?$QList@PAVConvergedMessageAddress@@@@@Z @ 12 NONAME ; int MsgSendUtil::longestEmailAddressSize(class QList<class ConvergedMessageAddress *>)
+ ?getStaticMetaObject@MmsConformanceCheck@@SAABUQMetaObject@@XZ @ 13 NONAME ; struct QMetaObject const & MmsConformanceCheck::getStaticMetaObject(void)
+ ??_EMsgSendUtil@@UAE@I@Z @ 14 NONAME ; MsgSendUtil::~MsgSendUtil(unsigned int)
+ ?staticMetaObject@MsgSendUtil@@2UQMetaObject@@B @ 15 NONAME ; struct QMetaObject const MsgSendUtil::staticMetaObject
+ ??0MmsConformanceCheck@@QAE@XZ @ 16 NONAME ; MmsConformanceCheck::MmsConformanceCheck(void)
+ ?metaObject@MmsConformanceCheck@@UBEPBUQMetaObject@@XZ @ 17 NONAME ; struct QMetaObject const * MmsConformanceCheck::metaObject(void) const
+ ?trUtf8@MsgSendUtil@@SA?AVQString@@PBD0@Z @ 18 NONAME ; class QString MsgSendUtil::trUtf8(char const *, char const *)
+ ?getStaticMetaObject@MsgSendUtil@@SAABUQMetaObject@@XZ @ 19 NONAME ; struct QMetaObject const & MsgSendUtil::getStaticMetaObject(void)
+ ?qt_metacall@MmsConformanceCheck@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 20 NONAME ; int MmsConformanceCheck::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?getSmsMsgSize@MsgSendUtil@@AAEHAAVConvergedMessage@@@Z @ 21 NONAME ; int MsgSendUtil::getSmsMsgSize(class ConvergedMessage &)
+ ?tr@MsgSendUtil@@SA?AVQString@@PBD0H@Z @ 22 NONAME ; class QString MsgSendUtil::tr(char const *, char const *, int)
+ ?validateMsgForForward@MmsConformanceCheck@@QAE_NH@Z @ 23 NONAME ; bool MmsConformanceCheck::validateMsgForForward(int)
+ ?checkMaxMsgSizeLimit@MsgSendUtil@@AAE_NAAVConvergedMessage@@@Z @ 24 NONAME ; bool MsgSendUtil::checkMaxMsgSizeLimit(class ConvergedMessage &)
+ ?trUtf8@MmsConformanceCheck@@SA?AVQString@@PBD0H@Z @ 25 NONAME ; class QString MmsConformanceCheck::trUtf8(char const *, char const *, int)
+ ?tr@MmsConformanceCheck@@SA?AVQString@@PBD0H@Z @ 26 NONAME ; class QString MmsConformanceCheck::tr(char const *, char const *, int)
+ ??1MsgMediaUtil@@QAE@XZ @ 27 NONAME ; MsgMediaUtil::~MsgMediaUtil(void)
+ ?send@MsgSendUtil@@QAEHAAVConvergedMessage@@@Z @ 28 NONAME ; int MsgSendUtil::send(class ConvergedMessage &)
+ ?trUtf8@MsgSendUtil@@SA?AVQString@@PBD0H@Z @ 29 NONAME ; class QString MsgSendUtil::trUtf8(char const *, char const *, int)
+ ?checkMaxRecipientCount@MsgSendUtil@@AAE_NAAVConvergedMessage@@@Z @ 30 NONAME ; bool MsgSendUtil::checkMaxRecipientCount(class ConvergedMessage &)
+ ?copyVCardToTemp@MsgContactsUtil@@CA?AVQString@@ABV2@@Z @ 31 NONAME ; class QString MsgContactsUtil::copyVCardToTemp(class QString const &)
+ ?getMmsMsgSize@MsgSendUtil@@AAEHAAVConvergedMessage@@@Z @ 32 NONAME ; int MsgSendUtil::getMmsMsgSize(class ConvergedMessage &)
+ ?onDialogInsertMedia@MmsConformanceCheck@@AAEXPAVHbAction@@@Z @ 33 NONAME ; void MmsConformanceCheck::onDialogInsertMedia(class HbAction *)
+ ?checkModeForInsert@MmsConformanceCheck@@QAEHABVQString@@_N@Z @ 34 NONAME ; int MmsConformanceCheck::checkModeForInsert(class QString const &, bool)
+ ?qt_metacast@MmsConformanceCheck@@UAEPAXPBD@Z @ 35 NONAME ; void * MmsConformanceCheck::qt_metacast(char const *)
+ ?tr@MmsConformanceCheck@@SA?AVQString@@PBD0@Z @ 36 NONAME ; class QString MmsConformanceCheck::tr(char const *, char const *)
+ ?staticMetaObject@MmsConformanceCheck@@2UQMetaObject@@B @ 37 NONAME ; struct QMetaObject const MmsConformanceCheck::staticMetaObject
+ ?tr@MsgSendUtil@@SA?AVQString@@PBD0@Z @ 38 NONAME ; class QString MsgSendUtil::tr(char const *, char const *)
+ ?saveToDrafts@MsgSendUtil@@QAEJAAVConvergedMessage@@@Z @ 39 NONAME ; long MsgSendUtil::saveToDrafts(class ConvergedMessage &)
+ ?launchVCardViewer@MsgContactsUtil@@SA_NABVQString@@@Z @ 40 NONAME ; bool MsgContactsUtil::launchVCardViewer(class QString const &)
+ ?mediaDuration@MsgMediaUtil@@QAE?AVQString@@ABV2@@Z @ 41 NONAME ; class QString MsgMediaUtil::mediaDuration(class QString const &)
+ ??_EMmsConformanceCheck@@UAE@I@Z @ 42 NONAME ; MmsConformanceCheck::~MmsConformanceCheck(unsigned int)
+ ??1MsgSendUtil@@UAE@XZ @ 43 NONAME ; MsgSendUtil::~MsgSendUtil(void)
+ ?qt_metacall@MsgSendUtil@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 44 NONAME ; int MsgSendUtil::qt_metacall(enum QMetaObject::Call, int, void * *)
--- a/messagingapp/msgui/bwins/unifiededitoru.def Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/bwins/unifiededitoru.def Thu Jul 22 16:32:06 2010 +0100
@@ -8,56 +8,56 @@
?fetchImages@MsgUnifiedEditorView@@AAEXXZ @ 7 NONAME ; void MsgUnifiedEditorView::fetchImages(void)
?packMessage@MsgUnifiedEditorView@@AAEXAAVConvergedMessage@@_N@Z @ 8 NONAME ; void MsgUnifiedEditorView::packMessage(class ConvergedMessage &, bool)
?handleViewExtnActivated@MsgUnifiedEditorView@@AAEXPAVHbListWidgetItem@@@Z @ 9 NONAME ; void MsgUnifiedEditorView::handleViewExtnActivated(class HbListWidgetItem *)
- ?sendingOptions@MsgUnifiedEditorView@@AAEXXZ @ 10 NONAME ; void MsgUnifiedEditorView::sendingOptions(void)
- ?saveContentToDrafts@MsgUnifiedEditorView@@QAEXXZ @ 11 NONAME ; void MsgUnifiedEditorView::saveContentToDrafts(void)
- ?addAttachment@MsgUnifiedEditorView@@AAEHABVQString@@@Z @ 12 NONAME ; int MsgUnifiedEditorView::addAttachment(class QString const &)
- ?doDelayedConstruction@MsgUnifiedEditorView@@AAEXXZ @ 13 NONAME ; void MsgUnifiedEditorView::doDelayedConstruction(void)
- ?onContentChanged@MsgUnifiedEditorView@@AAEXXZ @ 14 NONAME ; void MsgUnifiedEditorView::onContentChanged(void)
- ?staticMetaObject@MsgUnifiedEditorView@@2UQMetaObject@@B @ 15 NONAME ; struct QMetaObject const MsgUnifiedEditorView::staticMetaObject
- ?activateInputBlocker@MsgUnifiedEditorView@@AAEXXZ @ 16 NONAME ; void MsgUnifiedEditorView::activateInputBlocker(void)
- ?resizeEvent@MsgUnifiedEditorView@@MAEXPAVQGraphicsSceneResizeEvent@@@Z @ 17 NONAME ; void MsgUnifiedEditorView::resizeEvent(class QGraphicsSceneResizeEvent *)
- ?ScaleImageL@CUniImageProcessor@@QAEXPAVCFbsBitmap@@0H@Z @ 18 NONAME ; void CUniImageProcessor::ScaleImageL(class CFbsBitmap *, class CFbsBitmap *, int)
- ?onDialogSmsSettings@MsgUnifiedEditorView@@AAEXPAVHbAction@@@Z @ 19 NONAME ; void MsgUnifiedEditorView::onDialogSmsSettings(class HbAction *)
- ?populateContent@MsgUnifiedEditorView@@QAEXABV?$QList@VQVariant@@@@@Z @ 20 NONAME ; void MsgUnifiedEditorView::populateContent(class QList<class QVariant> const &)
- ?onDialogMmsSettings@MsgUnifiedEditorView@@AAEXPAVHbAction@@@Z @ 21 NONAME ; void MsgUnifiedEditorView::onDialogMmsSettings(class HbAction *)
- ?addCcBcc@MsgUnifiedEditorView@@AAEXXZ @ 22 NONAME ; void MsgUnifiedEditorView::addCcBcc(void)
- ?ProcessImageL@CUniImageProcessor@@QAEXAAVRFile@@0AAVTSize@@ABVTDesC8@@HH@Z @ 23 NONAME ; void CUniImageProcessor::ProcessImageL(class RFile &, class RFile &, class TSize &, class TDesC8 const &, int, int)
- ?generateFileName@MsgUnifiedEditorView@@AAE?AVQString@@AAV2@@Z @ 24 NONAME ; class QString MsgUnifiedEditorView::generateFileName(class QString &)
- ?metaObject@MsgUnifiedEditorView@@UBEPBUQMetaObject@@XZ @ 25 NONAME ; struct QMetaObject const * MsgUnifiedEditorView::metaObject(void) const
- ?createVCards@MsgUnifiedEditorView@@AAEHABVQVariant@@AAVQStringList@@@Z @ 26 NONAME ; int MsgUnifiedEditorView::createVCards(class QVariant const &, class QStringList &)
- ?audiosFetched@MsgUnifiedEditorView@@AAEXABVQVariant@@@Z @ 27 NONAME ; void MsgUnifiedEditorView::audiosFetched(class QVariant const &)
- ?addSubject@MsgUnifiedEditorView@@AAEXXZ @ 28 NONAME ; void MsgUnifiedEditorView::addSubject(void)
- ?createTempFolder@MsgUnifiedEditorView@@AAE_NXZ @ 29 NONAME ; bool MsgUnifiedEditorView::createTempFolder(void)
- ?imagesFetched@MsgUnifiedEditorView@@AAEXABVQVariant@@@Z @ 30 NONAME ; void MsgUnifiedEditorView::imagesFetched(class QVariant const &)
- ?setFocus@MsgUnifiedEditorView@@AAEXPAVMsgUnifiedEditorBaseWidget@@@Z @ 31 NONAME ; void MsgUnifiedEditorView::setFocus(class MsgUnifiedEditorBaseWidget *)
- ?vkbClosed@MsgUnifiedEditorView@@AAEXXZ @ 32 NONAME ; void MsgUnifiedEditorView::vkbClosed(void)
- ?serviceRequestError@MsgUnifiedEditorView@@AAEXHABVQString@@@Z @ 33 NONAME ; void MsgUnifiedEditorView::serviceRequestError(int, class QString const &)
- ?qt_metacast@MsgUnifiedEditorView@@UAEPAXPBD@Z @ 34 NONAME ; void * MsgUnifiedEditorView::qt_metacast(char const *)
- ?removeTempFolder@MsgUnifiedEditorView@@AAEXXZ @ 35 NONAME ; void MsgUnifiedEditorView::removeTempFolder(void)
- ?vkbOpened@MsgUnifiedEditorView@@AAEXXZ @ 36 NONAME ; void MsgUnifiedEditorView::vkbOpened(void)
- ?ScaleImageL@CUniImageProcessor@@QAEXAAVRFile@@AAPAVCFbsBitmap@@1AAVTSize@@H@Z @ 37 NONAME ; void CUniImageProcessor::ScaleImageL(class RFile &, class CFbsBitmap * &, class CFbsBitmap * &, class TSize &, int)
- ?addMenu@MsgUnifiedEditorView@@AAEXXZ @ 38 NONAME ; void MsgUnifiedEditorView::addMenu(void)
- ?initView@MsgUnifiedEditorView@@AAEXXZ @ 39 NONAME ; void MsgUnifiedEditorView::initView(void)
- ??_EMsgUnifiedEditorView@@UAE@I@Z @ 40 NONAME ; MsgUnifiedEditorView::~MsgUnifiedEditorView(unsigned int)
- ??1MsgUnifiedEditorView@@UAE@XZ @ 41 NONAME ; MsgUnifiedEditorView::~MsgUnifiedEditorView(void)
- ?setAttachOptionEnabled@MsgUnifiedEditorView@@AAEXW4TBE_AttachOption@1@_N@Z @ 42 NONAME ; void MsgUnifiedEditorView::setAttachOptionEnabled(enum MsgUnifiedEditorView::TBE_AttachOption, bool)
- ?hideChrome@MsgUnifiedEditorView@@AAEX_N@Z @ 43 NONAME ; void MsgUnifiedEditorView::hideChrome(bool)
- ?trUtf8@MsgUnifiedEditorView@@SA?AVQString@@PBD0@Z @ 44 NONAME ; class QString MsgUnifiedEditorView::trUtf8(char const *, char const *)
- ?tr@MsgUnifiedEditorView@@SA?AVQString@@PBD0@Z @ 45 NONAME ; class QString MsgUnifiedEditorView::tr(char const *, char const *)
- ?ScaleImageL@CUniImageProcessor@@QAEXPAVCFbsBitmap@@AAVRFile@@ABVTSize@@ABVTDesC8@@H@Z @ 46 NONAME ; void CUniImageProcessor::ScaleImageL(class CFbsBitmap *, class RFile &, class TSize const &, class TDesC8 const &, int)
- ?getStaticMetaObject@MsgUnifiedEditorView@@SAABUQMetaObject@@XZ @ 47 NONAME ; struct QMetaObject const & MsgUnifiedEditorView::getStaticMetaObject(void)
- ?tr@MsgUnifiedEditorView@@SA?AVQString@@PBD0H@Z @ 48 NONAME ; class QString MsgUnifiedEditorView::tr(char const *, char const *, int)
- ?populateContentIntoEditor@MsgUnifiedEditorView@@AAEXABVConvergedMessage@@@Z @ 49 NONAME ; void MsgUnifiedEditorView::populateContentIntoEditor(class ConvergedMessage const &)
- ?send@MsgUnifiedEditorView@@AAEXXZ @ 50 NONAME ; void MsgUnifiedEditorView::send(void)
- ?Reset@CUniImageProcessor@@QAEXXZ @ 51 NONAME ; void CUniImageProcessor::Reset(void)
- ?openDraftsMessage@MsgUnifiedEditorView@@QAEXABV?$QList@VQVariant@@@@@Z @ 52 NONAME ; void MsgUnifiedEditorView::openDraftsMessage(class QList<class QVariant> const &)
- ?addToolBar@MsgUnifiedEditorView@@AAEXXZ @ 53 NONAME ; void MsgUnifiedEditorView::addToolBar(void)
- ?contactsFetched@MsgUnifiedEditorView@@AAEXABVQVariant@@@Z @ 54 NONAME ; void MsgUnifiedEditorView::contactsFetched(class QVariant const &)
- ?removeAttachmentContainer@MsgUnifiedEditorView@@AAEXXZ @ 55 NONAME ; void MsgUnifiedEditorView::removeAttachmentContainer(void)
- ?trUtf8@MsgUnifiedEditorView@@SA?AVQString@@PBD0H@Z @ 56 NONAME ; class QString MsgUnifiedEditorView::trUtf8(char const *, char const *, int)
- ?onDialogDeleteMsg@MsgUnifiedEditorView@@AAEXPAVHbAction@@@Z @ 57 NONAME ; void MsgUnifiedEditorView::onDialogDeleteMsg(class HbAction *)
- ??0MsgUnifiedEditorView@@QAE@PAVQGraphicsItem@@@Z @ 58 NONAME ; MsgUnifiedEditorView::MsgUnifiedEditorView(class QGraphicsItem *)
- ?fetchContacts@MsgUnifiedEditorView@@AAEXXZ @ 59 NONAME ; void MsgUnifiedEditorView::fetchContacts(void)
+ ?addAttachment@MsgUnifiedEditorView@@AAEHABVQString@@@Z @ 10 NONAME ; int MsgUnifiedEditorView::addAttachment(class QString const &)
+ ?doDelayedConstruction@MsgUnifiedEditorView@@AAEXXZ @ 11 NONAME ; void MsgUnifiedEditorView::doDelayedConstruction(void)
+ ?onContentChanged@MsgUnifiedEditorView@@AAEXXZ @ 12 NONAME ; void MsgUnifiedEditorView::onContentChanged(void)
+ ?staticMetaObject@MsgUnifiedEditorView@@2UQMetaObject@@B @ 13 NONAME ; struct QMetaObject const MsgUnifiedEditorView::staticMetaObject
+ ?activateInputBlocker@MsgUnifiedEditorView@@AAEXXZ @ 14 NONAME ; void MsgUnifiedEditorView::activateInputBlocker(void)
+ ?resizeEvent@MsgUnifiedEditorView@@MAEXPAVQGraphicsSceneResizeEvent@@@Z @ 15 NONAME ; void MsgUnifiedEditorView::resizeEvent(class QGraphicsSceneResizeEvent *)
+ ?ScaleImageL@CUniImageProcessor@@QAEXPAVCFbsBitmap@@0H@Z @ 16 NONAME ; void CUniImageProcessor::ScaleImageL(class CFbsBitmap *, class CFbsBitmap *, int)
+ ?onDialogSmsSettings@MsgUnifiedEditorView@@AAEXPAVHbAction@@@Z @ 17 NONAME ; void MsgUnifiedEditorView::onDialogSmsSettings(class HbAction *)
+ ?populateContent@MsgUnifiedEditorView@@QAEXABV?$QList@VQVariant@@@@@Z @ 18 NONAME ; void MsgUnifiedEditorView::populateContent(class QList<class QVariant> const &)
+ ?onDialogMmsSettings@MsgUnifiedEditorView@@AAEXPAVHbAction@@@Z @ 19 NONAME ; void MsgUnifiedEditorView::onDialogMmsSettings(class HbAction *)
+ ?addCcBcc@MsgUnifiedEditorView@@AAEXXZ @ 20 NONAME ; void MsgUnifiedEditorView::addCcBcc(void)
+ ?saveContentToDrafts@MsgUnifiedEditorView@@QAEHXZ @ 21 NONAME ; int MsgUnifiedEditorView::saveContentToDrafts(void)
+ ?ProcessImageL@CUniImageProcessor@@QAEXAAVRFile@@0AAVTSize@@ABVTDesC8@@HH@Z @ 22 NONAME ; void CUniImageProcessor::ProcessImageL(class RFile &, class RFile &, class TSize &, class TDesC8 const &, int, int)
+ ?generateFileName@MsgUnifiedEditorView@@AAE?AVQString@@AAV2@@Z @ 23 NONAME ; class QString MsgUnifiedEditorView::generateFileName(class QString &)
+ ?metaObject@MsgUnifiedEditorView@@UBEPBUQMetaObject@@XZ @ 24 NONAME ; struct QMetaObject const * MsgUnifiedEditorView::metaObject(void) const
+ ?createVCards@MsgUnifiedEditorView@@AAEHABVQVariant@@AAVQStringList@@@Z @ 25 NONAME ; int MsgUnifiedEditorView::createVCards(class QVariant const &, class QStringList &)
+ ?addSubject@MsgUnifiedEditorView@@AAEXXZ @ 26 NONAME ; void MsgUnifiedEditorView::addSubject(void)
+ ?createTempFolder@MsgUnifiedEditorView@@AAE_NXZ @ 27 NONAME ; bool MsgUnifiedEditorView::createTempFolder(void)
+ ?imagesFetched@MsgUnifiedEditorView@@AAEXABVQVariant@@@Z @ 28 NONAME ; void MsgUnifiedEditorView::imagesFetched(class QVariant const &)
+ ?setFocus@MsgUnifiedEditorView@@AAEXPAVMsgUnifiedEditorBaseWidget@@@Z @ 29 NONAME ; void MsgUnifiedEditorView::setFocus(class MsgUnifiedEditorBaseWidget *)
+ ?vkbClosed@MsgUnifiedEditorView@@AAEXXZ @ 30 NONAME ; void MsgUnifiedEditorView::vkbClosed(void)
+ ?serviceRequestError@MsgUnifiedEditorView@@AAEXHABVQString@@@Z @ 31 NONAME ; void MsgUnifiedEditorView::serviceRequestError(int, class QString const &)
+ ?qt_metacast@MsgUnifiedEditorView@@UAEPAXPBD@Z @ 32 NONAME ; void * MsgUnifiedEditorView::qt_metacast(char const *)
+ ?removeTempFolder@MsgUnifiedEditorView@@AAEXXZ @ 33 NONAME ; void MsgUnifiedEditorView::removeTempFolder(void)
+ ?vkbOpened@MsgUnifiedEditorView@@AAEXXZ @ 34 NONAME ; void MsgUnifiedEditorView::vkbOpened(void)
+ ?ScaleImageL@CUniImageProcessor@@QAEXAAVRFile@@AAPAVCFbsBitmap@@1AAVTSize@@H@Z @ 35 NONAME ; void CUniImageProcessor::ScaleImageL(class RFile &, class CFbsBitmap * &, class CFbsBitmap * &, class TSize &, int)
+ ?addMenu@MsgUnifiedEditorView@@AAEXXZ @ 36 NONAME ; void MsgUnifiedEditorView::addMenu(void)
+ ?enableSendButton@MsgUnifiedEditorView@@AAEX_N@Z @ 37 NONAME ; void MsgUnifiedEditorView::enableSendButton(bool)
+ ?initView@MsgUnifiedEditorView@@AAEXXZ @ 38 NONAME ; void MsgUnifiedEditorView::initView(void)
+ ??_EMsgUnifiedEditorView@@UAE@I@Z @ 39 NONAME ; MsgUnifiedEditorView::~MsgUnifiedEditorView(unsigned int)
+ ??1MsgUnifiedEditorView@@UAE@XZ @ 40 NONAME ; MsgUnifiedEditorView::~MsgUnifiedEditorView(void)
+ ?setAttachOptionEnabled@MsgUnifiedEditorView@@AAEXW4TBE_AttachOption@1@_N@Z @ 41 NONAME ; void MsgUnifiedEditorView::setAttachOptionEnabled(enum MsgUnifiedEditorView::TBE_AttachOption, bool)
+ ?hideChrome@MsgUnifiedEditorView@@AAEX_N@Z @ 42 NONAME ; void MsgUnifiedEditorView::hideChrome(bool)
+ ?trUtf8@MsgUnifiedEditorView@@SA?AVQString@@PBD0@Z @ 43 NONAME ; class QString MsgUnifiedEditorView::trUtf8(char const *, char const *)
+ ?tr@MsgUnifiedEditorView@@SA?AVQString@@PBD0@Z @ 44 NONAME ; class QString MsgUnifiedEditorView::tr(char const *, char const *)
+ ?ScaleImageL@CUniImageProcessor@@QAEXPAVCFbsBitmap@@AAVRFile@@ABVTSize@@ABVTDesC8@@H@Z @ 45 NONAME ; void CUniImageProcessor::ScaleImageL(class CFbsBitmap *, class RFile &, class TSize const &, class TDesC8 const &, int)
+ ?getStaticMetaObject@MsgUnifiedEditorView@@SAABUQMetaObject@@XZ @ 46 NONAME ; struct QMetaObject const & MsgUnifiedEditorView::getStaticMetaObject(void)
+ ?tr@MsgUnifiedEditorView@@SA?AVQString@@PBD0H@Z @ 47 NONAME ; class QString MsgUnifiedEditorView::tr(char const *, char const *, int)
+ ?send@MsgUnifiedEditorView@@AAEXXZ @ 48 NONAME ; void MsgUnifiedEditorView::send(void)
+ ?Reset@CUniImageProcessor@@QAEXXZ @ 49 NONAME ; void CUniImageProcessor::Reset(void)
+ ?populateContentIntoEditor@MsgUnifiedEditorView@@AAEXABVConvergedMessage@@_N@Z @ 50 NONAME ; void MsgUnifiedEditorView::populateContentIntoEditor(class ConvergedMessage const &, bool)
+ ?openDraftsMessage@MsgUnifiedEditorView@@QAEXABV?$QList@VQVariant@@@@@Z @ 51 NONAME ; void MsgUnifiedEditorView::openDraftsMessage(class QList<class QVariant> const &)
+ ?addToolBar@MsgUnifiedEditorView@@AAEXXZ @ 52 NONAME ; void MsgUnifiedEditorView::addToolBar(void)
+ ?contactsFetched@MsgUnifiedEditorView@@AAEXABVQVariant@@@Z @ 53 NONAME ; void MsgUnifiedEditorView::contactsFetched(class QVariant const &)
+ ?removeAttachmentContainer@MsgUnifiedEditorView@@AAEXXZ @ 54 NONAME ; void MsgUnifiedEditorView::removeAttachmentContainer(void)
+ ?trUtf8@MsgUnifiedEditorView@@SA?AVQString@@PBD0H@Z @ 55 NONAME ; class QString MsgUnifiedEditorView::trUtf8(char const *, char const *, int)
+ ?onDialogDeleteMsg@MsgUnifiedEditorView@@AAEXPAVHbAction@@@Z @ 56 NONAME ; void MsgUnifiedEditorView::onDialogDeleteMsg(class HbAction *)
+ ??0MsgUnifiedEditorView@@QAE@PAVQGraphicsItem@@@Z @ 57 NONAME ; MsgUnifiedEditorView::MsgUnifiedEditorView(class QGraphicsItem *)
+ ?fetchContacts@MsgUnifiedEditorView@@AAEXXZ @ 58 NONAME ; void MsgUnifiedEditorView::fetchContacts(void)
+ ?formatAddresses@MsgUnifiedEditorView@@AAEXAAV?$QList@PAVConvergedMessageAddress@@@@@Z @ 59 NONAME ; void MsgUnifiedEditorView::formatAddresses(class QList<class ConvergedMessageAddress *> &)
?deleteMessage@MsgUnifiedEditorView@@AAEXXZ @ 60 NONAME ; void MsgUnifiedEditorView::deleteMessage(void)
?addAttachments@MsgUnifiedEditorView@@AAEXVQStringList@@@Z @ 61 NONAME ; void MsgUnifiedEditorView::addAttachments(class QStringList)
?deactivateInputBlocker@MsgUnifiedEditorView@@AAEXXZ @ 62 NONAME ; void MsgUnifiedEditorView::deactivateInputBlocker(void)
--- a/messagingapp/msgui/bwins/unifiedvieweru.def Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/bwins/unifiedvieweru.def Thu Jul 22 16:32:06 2010 +0100
@@ -5,19 +5,18 @@
?metaObject@UnifiedViewer@@UBEPBUQMetaObject@@XZ @ 4 NONAME ; struct QMetaObject const * UnifiedViewer::metaObject(void) const
?sendMessage@UnifiedViewer@@AAEXABVQString@@0@Z @ 5 NONAME ; void UnifiedViewer::sendMessage(class QString const &, class QString const &)
?resizeEvent@UnifiedViewer@@MAEXPAVQGraphicsSceneResizeEvent@@@Z @ 6 NONAME ; void UnifiedViewer::resizeEvent(class QGraphicsSceneResizeEvent *)
- ??0UnifiedViewer@@QAE@HPAVQGraphicsItem@@@Z @ 7 NONAME ; UnifiedViewer::UnifiedViewer(int, class QGraphicsItem *)
- ?handleFwdAction@UnifiedViewer@@QAEXXZ @ 8 NONAME ; void UnifiedViewer::handleFwdAction(void)
- ?qt_metacast@UnifiedViewer@@UAEPAXPBD@Z @ 9 NONAME ; void * UnifiedViewer::qt_metacast(char const *)
- ?createToolBar@UnifiedViewer@@AAEXXZ @ 10 NONAME ; void UnifiedViewer::createToolBar(void)
- ??1UnifiedViewer@@UAE@XZ @ 11 NONAME ; UnifiedViewer::~UnifiedViewer(void)
+ ?handleFwdAction@UnifiedViewer@@QAEXXZ @ 7 NONAME ; void UnifiedViewer::handleFwdAction(void)
+ ?qt_metacast@UnifiedViewer@@UAEPAXPBD@Z @ 8 NONAME ; void * UnifiedViewer::qt_metacast(char const *)
+ ?createToolBar@UnifiedViewer@@AAEXXZ @ 9 NONAME ; void UnifiedViewer::createToolBar(void)
+ ??1UnifiedViewer@@UAE@XZ @ 10 NONAME ; UnifiedViewer::~UnifiedViewer(void)
+ ?onDialogDeleteMsg@UnifiedViewer@@AAEXPAVHbAction@@@Z @ 11 NONAME ; void UnifiedViewer::onDialogDeleteMsg(class HbAction *)
??_EUnifiedViewer@@UAE@I@Z @ 12 NONAME ; UnifiedViewer::~UnifiedViewer(unsigned int)
?qt_metacall@UnifiedViewer@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 13 NONAME ; int UnifiedViewer::qt_metacall(enum QMetaObject::Call, int, void * *)
?tr@UnifiedViewer@@SA?AVQString@@PBD0@Z @ 14 NONAME ; class QString UnifiedViewer::tr(char const *, char const *)
- ?validateMsgForForward@UnifiedViewer@@AAE_NXZ @ 15 NONAME ; bool UnifiedViewer::validateMsgForForward(void)
- ?getStaticMetaObject@UnifiedViewer@@SAABUQMetaObject@@XZ @ 16 NONAME ; struct QMetaObject const & UnifiedViewer::getStaticMetaObject(void)
+ ?getStaticMetaObject@UnifiedViewer@@SAABUQMetaObject@@XZ @ 15 NONAME ; struct QMetaObject const & UnifiedViewer::getStaticMetaObject(void)
+ ??0UnifiedViewer@@QAE@HHPAVQGraphicsItem@@@Z @ 16 NONAME ; UnifiedViewer::UnifiedViewer(int, int, class QGraphicsItem *)
?staticMetaObject@UnifiedViewer@@2UQMetaObject@@B @ 17 NONAME ; struct QMetaObject const UnifiedViewer::staticMetaObject
?trUtf8@UnifiedViewer@@SA?AVQString@@PBD0H@Z @ 18 NONAME ; class QString UnifiedViewer::trUtf8(char const *, char const *, int)
?clearContent@UnifiedViewer@@QAEXXZ @ 19 NONAME ; void UnifiedViewer::clearContent(void)
?tr@UnifiedViewer@@SA?AVQString@@PBD0H@Z @ 20 NONAME ; class QString UnifiedViewer::tr(char const *, char const *, int)
- ?onDialogDeleteMsg@UnifiedViewer@@AAEXPAVHbAction@@@Z @ 21 NONAME ; void UnifiedViewer::onDialogDeleteMsg(class HbAction *)
--- a/messagingapp/msgui/conversationview/conversationview.pro Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/conversationview/conversationview.pro Thu Jul 22 16:32:06 2010 +0100
@@ -21,22 +21,21 @@
inc \
../inc \
src
-
+
INCLUDEPATH += .
INCLUDEPATH += ../../../inc
+INCLUDEPATH += ../msgaudiofetcher/inc
INCLUDEPATH += ../msguiutils/inc
-INCLUDEPATH += ../../msgutils/s60qconversions/inc
INCLUDEPATH += ../../msgutils/unieditorutils/editorgenutils/inc
INCLUDEPATH += ../appengine/inc
INCLUDEPATH += ../../smartmessaging/ringbc/inc
INCLUDEPATH += ../../msgsettings/settingsview/inc
+INCLUDEPATH += ../../msgutils/unidatamodel/univcaldataplugin/inc
INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
-INCLUDEPATH += /ext/mw/qthighway/inc
-INCLUDEPATH += /ext/mw/qtextensions/qtmobileextensions/include
-INCLUDEPATH += ../../msgutils/unidatamodel/univcaldataplugin/inc
CONFIG += hb
+HB += hbfeedback
QT += sql
TARGET.UID3 = 0x20024322
@@ -73,10 +72,17 @@
RESOURCES += conversationview.qrc
+defBlock = \
+ "$${LITERAL_HASH}if defined(EABI)" \
+ "DEFFILE ../eabi/conversationview.def" \
+ "$${LITERAL_HASH}else" \
+ "DEFFILE ../bwins/conversationview.def" \
+ "$${LITERAL_HASH}endif"
+
+MMP_RULES += defBlock
# Libs
LIBS += -lappengine \
- -ls60qconversions \
-lconvergedmessageutils \
-lapgrfx \
-lefsrv \
@@ -95,9 +101,8 @@
-lgsmu \
-lsmcm \
-leditorgenutils \
- -lthumbnailmanagerqt \
- -lfbscli \
- -lestor \
- -lsqldb \
- -lxqsettingsmanager
+ -lthumbnailmanagerqt \
+ -lxqsettingsmanager \
+ -lxqutils \
+ -lmsgaudiofetcher
--- a/messagingapp/msgui/conversationview/inc/msgcontactcardwidget.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/conversationview/inc/msgcontactcardwidget.h Thu Jul 22 16:32:06 2010 +0100
@@ -25,14 +25,13 @@
class HbIconItem;
class HbTextItem;
class HbIcon;
-class QGraphicsSceneMouseEvent;
-//class HbGestureSceneFilter;
class ThumbnailManager;
#include "convergedmessageaddress.h"
/**
- * This class is a custom layout widget for Contact Card layout.
+ * @class MsgContactCardWidget
+ * @brief This class is a custom layout widget for Contact Card layout.
*/
class MsgContactCardWidget: public HbWidget
{
@@ -85,27 +84,21 @@
*/
void clearContent();
- /**
- * for tactile feed back.
- * Depricated
- */
- // HbFeedback::InstantEffect overrideFeedback(Hb::InstantInteraction interaction) const;
+signals:
/**
- * To connect/disconnect clicked signal
+ *
*/
- void connectSignals(bool yes);
+ void conversationIdChanged(qint64 convId);
protected:
- /**
- * reimplemented from base class.
- */
- virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
/**
- * reimplemented from base class.
+ * Event handler for gesture events.
+ * Reimplemented from HbWidgetBase.
+ * @see HbWidgetBase
*/
- virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
+ virtual void gestureEvent(QGestureEvent *event);
private:
@@ -113,27 +106,28 @@
* Initialization function.
*/
void init();
-
+
/** Helper method to get contact id against phone number.
* @param value phone number.
*/
int resolveContactId(const QString& value);
/**
- * Helper method to set back ground.
+ * Handles pressed state.
*/
- void setBackGround(const QString& bg);
+ void setPressed(bool pressed);
private slots:
- /**
- * show longpress menu for attachment object
- */
- void handleLongPress(QPointF position);
/**
- * Helper method to initialize gesture.
+ * show longp tap.
*/
- void initGesture();
+ void handleLongTap(const QPointF &position);
+
+ /**
+ * handles short tap.
+ */
+ void handleShortTap(const QPointF &position);
/**
* Slot for handling valid returns from the framework.
@@ -170,26 +164,29 @@
* Called after service request is completed.
*/
void onServiceRequestCompleted();
-
+
/**
* Slot hit when the thumbnail is ready.
*/
void thumbnailReady(const QPixmap& pixmap, void *data, int id, int error);
-signals:
/**
- * Emitted when contact card is short tapped.
+ * Ignore gesture events.
*/
- void clicked();
+ void ignoreSignals(bool yes);
+
+ /**
+ * Slot to regrab gesture after some delay (300 ms) to avoid multiple gesture
+ * events back to back.
+ */
+ void regrabGesture();
private:
- // Data
-
/**
- * To supress short tap if long tap triggered.
+ * Bool variable on which gesture events are accepted/ignored.
*/
- bool mMenuShown;
+ bool mIgnoreEvents;
/**
* Contact Number for the conversation
@@ -220,11 +217,6 @@
HbTextItem *mAddressTextItem;
/**
- * gesture filter for long press.
- */
- // HbGestureSceneFilter* mGestureFilter;
-
- /**
* ThumbnailManager
* Own.
*/
--- a/messagingapp/msgui/conversationview/inc/msgconversationbaseview.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/conversationview/inc/msgconversationbaseview.h Thu Jul 22 16:32:06 2010 +0100
@@ -1,20 +1,19 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:Conversation Base view.
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
-*/
-
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:Conversation Base view.
+ *
+ */
#ifndef MSG_CONVERSATION_VIEW_INTERFACE_H
#define MSG_CONVERSATION_VIEW_INTERFACE_H
@@ -36,16 +35,16 @@
class XQSettingsManager;
class XQPublishAndSubscribeUtils;
-class CONVERSATION_VIEW_EXPORT MsgConversationBaseView : public MsgBaseView
- {
- Q_OBJECT
+class CONVERSATION_VIEW_EXPORT MsgConversationBaseView: public MsgBaseView
+{
+Q_OBJECT
public:
/**
* Constructor
*/
- MsgConversationBaseView(QGraphicsItem* parent=0);
+ MsgConversationBaseView(QGraphicsItem* parent = 0);
/**
* Destructor
@@ -70,53 +69,55 @@
/**
* saveContentToDrafts
* Saves the editors content in cv to drafts
+ * @return valid message id if save is success
+ * else invalid message id ( i.e. -1 )
*/
- void saveContentToDrafts();
-
+ int saveContentToDrafts();
+
/**
* conversationId
* Get the conversationId
*/
- qint64 conversationId();
+ qint64 conversationId();
-public slots:
+public slots:
/**
* Close the conversation view
* This slot is triggered when user presses back(seconday sofykey)
*/
void closeConversationView();
-
+
/**
* Mark messages as read
* Slot is triiggered when replying started
*/
void markMessagesAsRead();
-
+
/**
* Publish the conversation id based on the flag.
* @param setId if true previous conversation id
* will be published else -1 will be published.
*/
void setPSCVId(bool setId);
-
+
private slots:
- /**
- * Slot for delayed construction
- */
+ /**
+ * Slot for delayed construction
+ */
void doDelayedConstruction();
-
- /**
- * Hides chrome when itu-t is up
- */
+
+ /**
+ * Hides chrome when itu-t is up
+ */
void hideChrome(bool hide);
-
- /**
+
+ /**
* Slot for handling valid returns from the framework.
*
* @param result const QVariant&
*/
void handleOk(const QVariant& result);
-
+
/**
* Slot for handling errors. Error ids are provided as
* 32-bit integers.
@@ -126,58 +127,61 @@
/**
* Slot for handling the timer expiry event fired from view reay indication
- */
+ */
void handleViewReady();
-
- signals:
- /**
- * Signal emitted when the conversation view is closed.
- */
- void conversationViewClosed();
-
-private :
+
+ /**
+ *
+ */
+ void handleConversationIdChange(qint64 convId);
+
+signals:
+ /**
+ * Signal emitted when the conversation view is closed.
+ */
+ void conversationViewClosed();
+
+private:
/**
* Create and initialise the view
*/
void initView();
-
+
private:
-
- /**
+
+ /**
* Conversation ID
*/
qint64 mConversationId;
-
+
/**
* MsgConversationView, main view class
* Owned
*/
- MsgConversationView *mConversationView;
-
+ MsgConversationView *mConversationView;
+
/**
* Contact card widget.
*/
MsgContactCardWidget* mContactCard;
-
+
/**
* Main layout.
*/
QGraphicsLinearLayout* mMainLayout;
-
- /**
+
+ /**
* Object of XQSettingsKey.
- */
+ */
XQSettingsKey mCVIdkey;
/**
* mSettingsManager
* Instance of the XQSettingsManager
* Own.
- */
- XQSettingsManager* mSettingsManager;
-
- };
+ */
+ XQSettingsManager* mSettingsManager;
+};
#endif // MSG_CONVERSATION_VIEW_INTERFACE_H
-
// EOF
--- a/messagingapp/msgui/conversationview/inc/msgconversationview.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/conversationview/inc/msgconversationview.h Thu Jul 22 16:32:06 2010 +0100
@@ -66,9 +66,10 @@
/**
* Save the content inside editor to drafts
- * @return true if save is success else false.
+ * @return valid message id if save is success
+ * else invalid message id ( i.e. -1 )
*/
- bool saveContentToDrafts();
+ int saveContentToDrafts();
private slots:
@@ -102,6 +103,17 @@
*/
void onDialogSaveTone(HbAction* action);
+ /**
+ * This slot is called when the orientation is changed
+ * @param newOrientation orientation
+ */
+ void onOrientationChanged(Qt::Orientation newOrientation);
+
+ /**
+ * This slot is called when the orientation is about to bechanged
+ */
+ void onOrientationAboutToBeChanged();
+
private:
/**
@@ -115,6 +127,11 @@
void setupMenu();
/**
+ * Triggers model to fetch more conversations.
+ */
+ void fetchMoreConversations();
+
+ /**
* Populates ConvergedMessage for sending.
* @param ConvergedMessage to be populated
* @see ConvergedMessage::MessageType
@@ -181,15 +198,6 @@
* @see ConvergedMessage::MessageType
*/
void addDownloadItemToContextMenu(MsgConversationViewItem* item, HbMenu* contextMenu);
-
- /**
- * Validates if message can be forwarded
- * @param messageType
- * @param messageId
- * @return true if message can be forwarded
- * false if message cant be forwarded
- */
- bool validateMsgForForward(int &messageType,qint32 &messageId);
/**
* Launches the BT message display service.
@@ -203,6 +211,11 @@
* data
*/
void refreshView();
+
+ /**
+ * This slot is called when the view is successfully added to main window
+ */
+ void onViewReady();
private slots:
@@ -210,6 +223,8 @@
* Utility method to scroll the list to show the bottom most item
*/
void scrollToBottom();
+
+ void onConversationViewEmpty();
/**
* Handler for long tap of a list item.
@@ -257,11 +272,6 @@
*/
void contactsFetched(const QVariant& value);
- /*
- * Get audio files from audio-fetcher and launch editor
- */
- void audiosFetched(const QVariant& result );
-
/**
* slot to receive fetched contacts for vcard addition
*/
@@ -328,10 +338,11 @@
*/
void replyStarted();
- /**
- * This signal is emitted when vkb is open.
- */
- void hideChrome(bool);
+ /**
+ * This signal is emitted when vkb is open/closed.
+ * @param state True if keypad is opened else false.
+ */
+ void vkbOpened(bool state);
private slots:
/**
@@ -410,21 +421,31 @@
*/
QGraphicsLinearLayout *mMainLayout;
- /**
- * Flag to track if item has been long pressed.
- * TODO: Remove it, once unique longpress and click event signal released in week16
- */
- bool mItemLongPressed;
/*
* Instance of VKB
*/
HbStaticVkbHost* mVkbHost;
/**
+ * variable holding the visible model index
+ */
+ QModelIndex mVisibleIndex;
+
+ /**
* Flag to check it vkb is open.
*/
bool mVkbopened;
-
+
+ /**
+ * Flag is set when model is populated.
+ * @see signal conversationModelPopulated()
+ */
+ bool mModelPopulated;
+
+ /**
+ * Flag is set when
+ */
+ bool mViewReady;
};
#endif // MSG_CONVERSATION_VIEW_H
--- a/messagingapp/msgui/conversationview/inc/msgconversationviewitem.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/conversationview/inc/msgconversationviewitem.h Thu Jul 22 16:32:06 2010 +0100
@@ -94,13 +94,28 @@
/*
* Update item with sms content
*/
- void updateSmsTypeItem(const QModelIndex& index,int messageSubType = ConvergedMessage::None);
-
+ void updateSmsTypeItem(const QModelIndex& index, int messageSubType =
+ ConvergedMessage::None);
+
/*
* Update item with mms type content
*/
- void updateMmsTypeItem(const QModelIndex& index, int messageType,int messageSubType);
+ void updateMmsTypeItem(const QModelIndex& index, int messageType,
+ int messageSubType);
+
+ /*
+ * Initializes the msgconverstionviewitem
+ */
+ void init();
+private slots:
+
+ /*
+ * Handler for orientation changed
+ * @param orientation Qt::Orientation
+ */
+ void orientationchanged(Qt::Orientation orientation);
+
protected:
/**
@@ -125,10 +140,17 @@
MsgConversationWidget *mConversation;
/**
+ * Graphics Item to hold message incoming state.
+ * Applicable for notification
+ * Owned
+ */
+ HbIconItem *mIncomingMsgStateIconItem;
+
+ /**
* Graphics Item to hold message sending state.
* Owned
*/
- HbIconItem *mMessageStateIconItem;
+ HbIconItem *mOutgoingMsgStateIconItem;
};
#endif // MSG_CONVERSATION_VIEW_ITEM_H
--- a/messagingapp/msgui/conversationview/inc/msgconversationwidget.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/conversationview/inc/msgconversationwidget.h Thu Jul 22 16:32:06 2010 +0100
@@ -20,6 +20,7 @@
// SYSTEM INCLUDES
#include <hbwidget.h>
+#include <HbIcon>
// FORWORD DECLARATIONS
class HbFrameItem;
@@ -86,10 +87,10 @@
void setBodyText(const QString &bodyText);
/**
- * Set preview icon path for this widget
- * @param QString
+ * Set preview icon for this widget
+ * @param HbIcon, preview-icon
*/
- void setPreviewIconPath(const QString& filePath,int msgId);
+ void setPreviewIcon(HbIcon& icon);
/**
* Set priority property
@@ -277,11 +278,26 @@
*/
void resetProperties();
- /**
- * Function to repolish the widget
+ /**
+ * Function to repolish widget.
*/
void repolishWidget();
+protected:
+
+ /*
+ * @see HbWidget
+ */
+ virtual void polish(HbStyleParameters ¶ms);
+
+private slots:
+
+ /*
+ * Handler for orientation changed
+ * @param orientation Qt::Orientation
+ */
+ void orientationchanged(Qt::Orientation orientation);
+
private:
/**
--- a/messagingapp/msgui/conversationview/resources/layouts/msgcontactcardwidget.css Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/conversationview/resources/layouts/msgcontactcardwidget.css Thu Jul 22 16:32:06 2010 +0100
@@ -35,12 +35,3 @@
text-line-count-min:1;
text-line-count-max:1;
}
-
-MsgContactCardWidget::backgroundFrame
-{
- zvalue:-1;
- left:0un;
- top:0un;
- right:0un;
- bottom:0un;
-}
--- a/messagingapp/msgui/conversationview/resources/layouts/msgcontactcardwidget.widgetml Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/conversationview/resources/layouts/msgcontactcardwidget.widgetml Thu Jul 22 16:32:06 2010 +0100
@@ -10,6 +10,5 @@
<meshitem src="addressText" srcEdge="LEFT" dst="avatar" dstEdge="RIGHT"/>
<meshitem src="addressText" srcEdge="RIGHT" dst="presence" dstEdge="LEFT"/>
<meshitem src="addressText" srcEdge="CENTERV" dst="" dstEdge="CENTERV"/>
-
</layout>
</hbwidget>
\ No newline at end of file
--- a/messagingapp/msgui/conversationview/resources/layouts/msgcontactcardwidget_color.css Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/conversationview/resources/layouts/msgcontactcardwidget_color.css Thu Jul 22 16:32:06 2010 +0100
@@ -1,5 +1,10 @@
-MsgContactCardWidget::addressText
+MsgContactCardWidget[state="normal"]::addressText
{
color:var(qtc_groupbox_normal);
}
+
+MsgContactCardWidget[state="pressed"]::addressText
+{
+ color:var(qtc_groupbox_pressed);
+}
--- a/messagingapp/msgui/conversationview/resources/layouts/msgconversationviewitem.css Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/conversationview/resources/layouts/msgconversationviewitem.css Thu Jul 22 16:32:06 2010 +0100
@@ -1,28 +1,20 @@
-MsgConversationViewItem[isIncoming="true"]
+MsgConversationViewItem
{
- layout:layout-incoming;
+ layout:layout-conversation;
pref-height:-1;
pref-width:-1;
size-policy-vertical:minimum-expanding;
}
-MsgConversationViewItem[isIncoming="false"]
+MsgConversationViewItem::msgconvwidget
{
- layout:layout-outgoing;
- pref-height:-1;
- pref-width:-1;
- size-policy-vertical:minimum-expanding;
-}
-
-MsgConversationViewItem[isIncoming="true"]::msgconvwidget
-{
- left:-var(hb-param-margin-gene-left);
+ left:-var(hb-param-margin-gene-middle-horizontal);
top:0.0un;
right:var(hb-param-margin-gene-middle-horizontal);
bottom:0.0un;
}
-MsgConversationViewItem[isIncoming="true"]::msgStateIcon
+MsgConversationViewItem::msgStateIconIncoming
{
right:var(hb-param-margin-gene-right);
size-policy:fixed fixed;
@@ -31,15 +23,7 @@
pref-width:var(hb-param-graphic-size-primary-small);
}
-MsgConversationViewItem[isIncoming="false"]::msgconvwidget
-{
- top:0.0un;
- right:var(hb-param-margin-gene-right);
- bottom:0.0un;
- left:-var(hb-param-margin-gene-middle-horizontal);
-}
-
-MsgConversationViewItem[isIncoming="false"]::msgStateIcon
+MsgConversationViewItem::msgStateIconOutgoing
{
left:-var(hb-param-margin-gene-left);
size-policy:fixed fixed;
--- a/messagingapp/msgui/conversationview/resources/layouts/msgconversationviewitem.widgetml Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/conversationview/resources/layouts/msgconversationviewitem.widgetml Thu Jul 22 16:32:06 2010 +0100
@@ -1,24 +1,14 @@
<hbwidget version="0.1">
- <layout name="layout-incoming" type="mesh">
- <meshitem src="msgStateIcon" srcEdge="RIGHT" dst="" dstEdge="RIGHT"/>
- <meshitem src="msgStateIcon" srcEdge="CENTERV" dst="" dstEdge="CENTERV"/>
+ <layout name="layout-conversation" type="mesh">
+ <meshitem src="msgStateIconIncoming" srcEdge="RIGHT" dst="" dstEdge="RIGHT"/>
+ <meshitem src="msgStateIconIncoming" srcEdge="CENTERV" dst="" dstEdge="CENTERV"/>
+
+ <meshitem src="msgStateIconOutgoing" srcEdge="LEFT" dst="" dstEdge="LEFT"/>
+ <meshitem src="msgStateIconOutgoing" srcEdge="CENTERV" dst="" dstEdge="CENTERV"/>
- <meshitem src="msgconvwidget" srcEdge="RIGHT" dst="msgStateIcon" dstEdge="LEFT" />
+ <meshitem src="msgconvwidget" srcEdge="RIGHT" dst="msgStateIconIncoming" dstEdge="LEFT" />
<meshitem src="msgconvwidget" srcEdge="TOP" dst="" dstEdge="TOP" />
- <meshitem src="msgconvwidget" srcEdge="LEFT" dst="" dstEdge="LEFT" />
+ <meshitem src="msgconvwidget" srcEdge="LEFT" dst="msgStateIconOutgoing" dstEdge="RIGHT"/>
<meshitem src="msgconvwidget" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" />
</layout>
-
- <layout name="layout-outgoing" type="mesh">
-
- <meshitem src="msgStateIcon" srcEdge="LEFT" dst="" dstEdge="LEFT"/>
- <meshitem src="msgStateIcon" srcEdge="CENTERV" dst="" dstEdge="CENTERV"/>
-
- <meshitem src="msgconvwidget" srcEdge="LEFT" dst="msgStateIcon" dstEdge="RIGHT"/>
- <meshitem src="msgconvwidget" srcEdge="TOP" dst="" dstEdge="TOP" />
- <meshitem src="msgconvwidget" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
- <meshitem src="msgconvwidget" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" />
-
- </layout>
-
</hbwidget>
--- a/messagingapp/msgui/conversationview/resources/layouts/msgconversationwidget.css Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/conversationview/resources/layouts/msgconversationwidget.css Thu Jul 22 16:32:06 2010 +0100
@@ -9,27 +9,12 @@
MsgConversationWidget:portrait
{
- layout:layout-mms-portrait;
-}
-
-MsgConversationWidget[hasImage="true"]:landscape
-{
- layout:layout-mms-image-landscape;
+ layout:layout-msg-portrait;
}
-MsgConversationWidget[hasImage="false"]:landscape
-{
- layout:layout-mms-landscape;
-}
-
-MsgConversationWidget[hasImage="false"][hasAudio="true"][hasVideo="false"]:portrait
+MsgConversationWidget:landscape
{
- layout:layout-mms-audio-text-portrait;
-}
-
-MsgConversationWidget[hasImage="false"][hasAudio="true"][hasVideo="false"]:landscape
-{
- layout:layout-mms-audio-text-landscape;
+ layout:layout-msg-landscape;
}
/********************* UNREAD INDICATOR / NEW ITEM ICON ************************/
@@ -64,19 +49,23 @@
bottom:var(hb-param-margin-gene-middle-vertical);
text-height:var(hb-param-text-height-secondary);
font-variant:primary;
- text-align:left;
text-line-count-min:1;
- text-line-count-max:100;
+ text-line-count-max:30;
+}
+
+MsgConversationWidget[isMMS="true"]::bodyText
+{
+ top:-var(hb-param-margin-gene-middle-vertical);
}
MsgConversationWidget[hasImage="true"]::bodyText:landscape
{
- left:-var(hb-param-margin-gene-middle-horizontal);
+ left:-var(hb-param-margin-gene-middle-horizontal);
}
-MsgConversationWidget[hasImage="false"][hasAudio="true"]::bodyText:landscape
+MsgConversationWidget[hasAudio="true"]::bodyText:landscape
{
- left:-var(hb-param-margin-gene-middle-horizontal);
+ left:-var(hb-param-margin-gene-middle-horizontal);
}
/********************************** SUBJECT ***********************************/
@@ -96,7 +85,7 @@
MsgConversationWidget[isMMS="false"]::subject
{
- text-line-count-max:100;
+ text-line-count-max:30;
text-height:var(hb-param-text-height-secondary);
}
@@ -137,30 +126,20 @@
/******************************** IMAGE / PREVIEW *****************************/
-MsgConversationWidget[hasImage="true"]::preview:portrait
+MsgConversationWidget::preview
{
left:-var(hb-param-margin-gene-left);
- right:1.0un;
- bottom:var(hb-param-margin-gene-middle-vertical);
- aspect-ratio:keep;
- /*max-width:var(bubble_width);*/
- max-width:41.36un;
- max-height:31.02un;
- /*max-height:var(bubble_height);*/
- min-width:16un;
- min-height:12un;
+ size-policy:fixed fixed;
+ aspect-ratio:ignore;
}
-MsgConversationWidget[hasImage="true"]::preview:landscape
+MsgConversationWidget::preview:landscape
{
left:-var(hb-param-margin-gene-left);
top:-var(hb-param-margin-gene-top);
bottom:var(hb-param-margin-gene-bottom);
- aspect-ratio:keep;
- max-width:41.36un;
- max-height:31.02un;
- min-width:16un;
- min-height:12un;
+ size-policy:fixed fixed;
+ aspect-ratio:ignore;
}
/****************************** TIMESTAMP TEXT ********************************/
@@ -182,7 +161,7 @@
left:-var(hb-param-margin-gene-middle-horizontal);
}
-MsgConversationWidget[hasImage="false"][hasAudio="true"]::timeStamp:landscape
+MsgConversationWidget[hasAudio="true"]::timeStamp:landscape
{
left:-var(hb-param-margin-gene-middle-horizontal);
}
@@ -192,23 +171,17 @@
MsgConversationWidget::playIcon
{
zvalue:1;
+ left:-var(hb-param-margin-gene-middle-horizontal);
aspect-ratio:ignore;
size-policy:fixed fixed;
- pref-width:var(hb-param-graphic-size-primary-medium);
- pref-height:var(hb-param-graphic-size-primary-medium);
+ pref-width:var(hb-param-graphic-size-primary-small);
+ pref-height:var(hb-param-graphic-size-primary-small);
}
-/******************************** AUDIO ICON **********************************/
-
-MsgConversationWidget[hasAudio="true"]::audioIcon
+MsgConversationWidget::playIcon:landscape
{
top:-var(hb-param-margin-gene-top);
- left:-var(hb-param-margin-gene-left);
- bottom:var(hb-param-margin-gene-middle-vertical);
- aspect-ratio:ignore;
- size-policy:fixed fixed;
- pref-width:var(hb-param-graphic-size-primary-large);
- pref-height:var(hb-param-graphic-size-primary-large);
}
+
/* EOF */
\ No newline at end of file
--- a/messagingapp/msgui/conversationview/resources/layouts/msgconversationwidget.widgetml Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/conversationview/resources/layouts/msgconversationwidget.widgetml Thu Jul 22 16:32:06 2010 +0100
@@ -1,9 +1,8 @@
<hbwidget version="0.1">
- <layout name="layout-mms-portrait" type="mesh">
+ <layout name="layout-msg-portrait" type="mesh">
- <meshitem src="subject" srcEdge="TOP" dst="" dstEdge="TOP" />
- <meshitem src="subject" srcEdge="BOTTOM" dst="preview" dstEdge="TOP" />
+ <meshitem src="subject" srcEdge="TOP" dst="" dstEdge="TOP" />
<meshitem src="subject" srcEdge="LEFT" dst="" dstEdge="LEFT" />
<meshitem src="subject" srcEdge="RIGHT" dst="priority" dstEdge="LEFT" spacer="rightSpacer" />
@@ -13,14 +12,14 @@
<meshitem src="attachment" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
<meshitem src="attachment" srcEdge="CENTERV" dst="subject" dstEdge="CENTERV" />
- <meshitem src="preview" srcEdge="BOTTOM" dst="bodyText" dstEdge="TOP" />
- <meshitem src="preview" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
+ <meshitem src="preview" srcEdge="TOP" dst="subject" dstEdge="BOTTOM" />
<meshitem src="preview" srcEdge="LEFT" dst="" dstEdge="LEFT" />
+ <meshitem src="bodyText" srcEdge="TOP" dst="preview" dstEdge="BOTTOM" />
<meshitem src="bodyText" srcEdge="LEFT" dst="" dstEdge="LEFT" />
<meshitem src="bodyText" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
- <meshitem src="bodyText" srcEdge="BOTTOM" dst="timeStamp" dstEdge="TOP" />
+ <meshitem src="timeStamp" srcEdge="TOP" dst="bodyText" dstEdge="BOTTOM" />
<meshitem src="timeStamp" srcEdge="LEFT" dst="" dstEdge="LEFT" />
<meshitem src="timeStamp" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
<meshitem src="timeStamp" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" />
@@ -34,19 +33,18 @@
<meshitem src="bubble" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" />
<meshitem src="bubble" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
- <meshitem src="playIcon" srcEdge="CENTERV" dst="preview" dstEdge="CENTERV" />
- <meshitem src="playIcon" srcEdge="CENTERH" dst="preview" dstEdge="CENTERH" />
+ <meshitem src="playIcon" srcEdge="TOP" dst="subject" dstEdge="BOTTOM"/>
+ <meshitem src="playIcon" srcEdge="LEFT" dst="preview" dstEdge="RIGHT" />
</layout>
- <layout name="layout-mms-image-landscape" type="mesh">
+ <layout name="layout-msg-landscape" type="mesh">
<meshitem src="preview" srcEdge="TOP" dst="" dstEdge="TOP" />
<meshitem src="preview" srcEdge="LEFT" dst="" dstEdge="LEFT" />
- <meshitem src="subject" srcEdge="TOP" dst="" dstEdge="TOP" />
- <meshitem src="subject" srcEdge="BOTTOM" dst="bodyText" dstEdge="TOP" />
- <meshitem src="subject" srcEdge="LEFT" dst="preview" dstEdge="RIGHT" />
+ <meshitem src="subject" srcEdge="TOP" dst="" dstEdge="TOP" />
+ <meshitem src="subject" srcEdge="LEFT" dst="playIcon" dstEdge="RIGHT" />
<meshitem src="subject" srcEdge="RIGHT" dst="priority" dstEdge="LEFT" />
<meshitem src="priority" srcEdge="RIGHT" dst="attachment" dstEdge="LEFT" />
@@ -55,11 +53,12 @@
<meshitem src="attachment" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
<meshitem src="attachment" srcEdge="CENTERV" dst="subject" dstEdge="CENTERV" />
- <meshitem src="bodyText" srcEdge="LEFT" dst="preview" dstEdge="RIGHT" />
+ <meshitem src="bodyText" srcEdge="TOP" dst="subject" dstEdge="BOTTOM" />
+ <meshitem src="bodyText" srcEdge="LEFT" dst="playIcon" dstEdge="RIGHT" />
<meshitem src="bodyText" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
- <meshitem src="bodyText" srcEdge="BOTTOM" dst="timeStamp" dstEdge="TOP" />
-
- <meshitem src="timeStamp" srcEdge="LEFT" dst="preview" dstEdge="RIGHT" />
+
+ <meshitem src="timeStamp" srcEdge="TOP" dst="bodyText" dstEdge="BOTTOM" />
+ <meshitem src="timeStamp" srcEdge="LEFT" dst="playIcon" dstEdge="RIGHT" />
<meshitem src="timeStamp" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
<meshitem src="timeStamp" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM"/>
@@ -72,110 +71,9 @@
<meshitem src="bubble" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" />
<meshitem src="bubble" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
- <meshitem src="playIcon" srcEdge="CENTERV" dst="preview" dstEdge="CENTERV" />
- <meshitem src="playIcon" srcEdge="CENTERH" dst="preview" dstEdge="CENTERH" />
-
- </layout>
-
- <layout name="layout-mms-landscape" type="mesh">
-
- <meshitem src="subject" srcEdge="TOP" dst="" dstEdge="TOP" />
- <meshitem src="subject" srcEdge="BOTTOM" dst="bodyText" dstEdge="TOP" />
- <meshitem src="subject" srcEdge="LEFT" dst="" dstEdge="LEFT" />
- <meshitem src="subject" srcEdge="RIGHT" dst="priority" dstEdge="LEFT" />
-
- <meshitem src="priority" srcEdge="RIGHT" dst="attachment" dstEdge="LEFT" />
- <meshitem src="priority" srcEdge="CENTERV" dst="subject" dstEdge="CENTERV" />
-
- <meshitem src="attachment" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
- <meshitem src="attachment" srcEdge="CENTERV" dst="subject" dstEdge="CENTERV" />
-
- <meshitem src="bodyText" srcEdge="LEFT" dst="" dstEdge="LEFT" />
- <meshitem src="bodyText" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
- <meshitem src="bodyText" srcEdge="BOTTOM" dst="timeStamp" dstEdge="TOP" />
-
- <meshitem src="timeStamp" srcEdge="LEFT" dst="" dstEdge="LEFT" />
- <meshitem src="timeStamp" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
- <meshitem src="timeStamp" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" />
-
- <meshitem src="newItemIcon" srcEdge="LEFT" dst="" dstEdge="LEFT"/>
- <meshitem src="newItemIcon" srcEdge="TOP" dst="" dstEdge="TOP"/>
- <meshitem src="newItemIcon" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM"/>
-
- <meshitem src="bubble" srcEdge="TOP" dst="" dstEdge="TOP" />
- <meshitem src="bubble" srcEdge="LEFT" dst="" dstEdge="LEFT" />
- <meshitem src="bubble" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" />
- <meshitem src="bubble" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
+ <meshitem src="playIcon" srcEdge="TOP" dst="" dstEdge="TOP" />
+ <meshitem src="playIcon" srcEdge="LEFT" dst="preview" dstEdge="RIGHT" />
</layout>
- <layout name="layout-mms-audio-text-portrait" type="mesh">
-
- <meshitem src="subject" srcEdge="TOP" dst="" dstEdge="TOP" />
- <meshitem src="subject" srcEdge="BOTTOM" dst="audioIcon" dstEdge="TOP" />
- <meshitem src="subject" srcEdge="LEFT" dst="" dstEdge="LEFT" />
- <meshitem src="subject" srcEdge="RIGHT" dst="priority" dstEdge="LEFT" />
-
- <meshitem src="priority" srcEdge="RIGHT" dst="attachment" dstEdge="LEFT" />
- <meshitem src="priority" srcEdge="CENTERV" dst="subject" dstEdge="CENTERV" />
-
- <meshitem src="attachment" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
- <meshitem src="attachment" srcEdge="CENTERV" dst="subject" dstEdge="CENTERV" />
-
- <meshitem src="audioIcon" srcEdge="BOTTOM" dst="bodyText" dstEdge="TOP" />
- <meshitem src="audioIcon" srcEdge="CENTERH" dst="" dstEdge="CENTERH" />
-
- <meshitem src="bodyText" srcEdge="LEFT" dst="" dstEdge="LEFT" />
- <meshitem src="bodyText" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
- <meshitem src="bodyText" srcEdge="BOTTOM" dst="timeStamp" dstEdge="TOP" />
-
- <meshitem src="timeStamp" srcEdge="LEFT" dst="" dstEdge="LEFT" />
- <meshitem src="timeStamp" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
- <meshitem src="timeStamp" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" />
-
- <meshitem src="newItemIcon" srcEdge="LEFT" dst="" dstEdge="LEFT"/>
- <meshitem src="newItemIcon" srcEdge="TOP" dst="" dstEdge="TOP"/>
- <meshitem src="newItemIcon" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM"/>
-
- <meshitem src="bubble" srcEdge="TOP" dst="" dstEdge="TOP" />
- <meshitem src="bubble" srcEdge="LEFT" dst="" dstEdge="LEFT" />
- <meshitem src="bubble" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" />
- <meshitem src="bubble" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
-
- </layout>
-
- <layout name="layout-mms-audio-text-landscape" type="mesh">
-
- <meshitem src="audioIcon" srcEdge="TOP" dst="" dstEdge="TOP" />
- <meshitem src="audioIcon" srcEdge="LEFT" dst="" dstEdge="LEFT" />
-
- <meshitem src="subject" srcEdge="TOP" dst="" dstEdge="TOP" />
- <meshitem src="subject" srcEdge="BOTTOM" dst="bodyText" dstEdge="TOP" />
- <meshitem src="subject" srcEdge="LEFT" dst="audioIcon" dstEdge="RIGHT" />
- <meshitem src="subject" srcEdge="RIGHT" dst="priority" dstEdge="LEFT" />
-
- <meshitem src="priority" srcEdge="RIGHT" dst="attachment" dstEdge="LEFT" />
- <meshitem src="priority" srcEdge="CENTERV" dst="subject" dstEdge="CENTERV" />
-
- <meshitem src="attachment" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
- <meshitem src="attachment" srcEdge="CENTERV" dst="subject" dstEdge="CENTERV" />
-
- <meshitem src="bodyText" srcEdge="LEFT" dst="audioIcon" dstEdge="RIGHT" />
- <meshitem src="bodyText" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
- <meshitem src="bodyText" srcEdge="BOTTOM" dst="timeStamp" dstEdge="TOP" />
-
- <meshitem src="timeStamp" srcEdge="LEFT" dst="audioIcon" dstEdge="RIGHT" />
- <meshitem src="timeStamp" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
- <meshitem src="timeStamp" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" />
-
- <meshitem src="newItemIcon" srcEdge="LEFT" dst="" dstEdge="LEFT"/>
- <meshitem src="newItemIcon" srcEdge="TOP" dst="" dstEdge="TOP"/>
- <meshitem src="newItemIcon" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM"/>
-
- <meshitem src="bubble" srcEdge="TOP" dst="" dstEdge="TOP" />
- <meshitem src="bubble" srcEdge="LEFT" dst="" dstEdge="LEFT" />
- <meshitem src="bubble" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" />
- <meshitem src="bubble" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
-
- </layout>
</hbwidget>
--- a/messagingapp/msgui/conversationview/src/msgcontactcardwidget.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/conversationview/src/msgcontactcardwidget.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -21,27 +21,24 @@
#include <HbStyle>
#include <HbIconItem>
#include <HbTextItem>
-#include <HbFrameDrawer>
-//#include <HbGesture>
-//#include <HbGestureSceneFilter>
-#include <HbWidgetFeedback>
+#include <HbTapGesture>
+#include <HbInstantFeedback>
#include <HbFrameItem>
#include <qcontactphonenumber.h>
#include <qcontactavatar.h>
#include <xqaiwrequest.h>
#include <xqappmgr.h>
-#include <XQServiceRequest.h>
+#include <xqservicerequest.h>
#include <cntservicescontact.h>
#include <QGraphicsSceneMouseEvent>
#include <HbMenu>
-#include <HbMainWindow>
#include <thumbnailmanager_qt.h>
+#include <QTimer>
#include <ccsdefs.h>
// USER INCLUDES
#include "conversationsenginedefines.h"
-#include "debugtraces.h"
#include "conversationsengine.h"
#include "convergedmessage.h"
#include "msgcontacthandler.h"
@@ -49,13 +46,12 @@
// LOCAL CONSTANTS
const QString DEFAULT_AVATAR_ICON("qtg_large_avatar");
const QString BT_ICON("qtg_large_bluetooth");
-const QString BACKGROUND_FRAME_NORMAL("qtg_fr_groupbox");
-const QString GROUPBOX_BG_FRAME_PRESSED("qtg_fr_groupbox_pressed");
-
+const QString BG_FRAME_NORMAL("qtg_fr_groupbox_normal");
+const QString BG_FRAME_PRESSED("qtg_fr_groupbox_pressed");
// LOCALIZATION CONSTANTS
#define LOC_RECEIVED_FILES hbTrId("txt_messaging_title_received_files")
-#define LOC_MENU_CONTACT_INFO hbTrId("txt_messaging_menu_open_contact_info")
+#define LOC_MENU_CONTACT_INFO hbTrId("txt_messaging_menu_contact_info")
#define LOC_COMMON_MENU_CALL hbTrId("txt_common_menu_call_verb")
#define LOC_SAVETO_CONTACTS hbTrId("txt_messaging_menu_save_to_contacts")
@@ -66,14 +62,10 @@
// @see header
//---------------------------------------------------------------
MsgContactCardWidget::MsgContactCardWidget(QGraphicsItem *parent) :
- HbWidget(parent), mMenuShown(false), mAvatarIconItem(NULL), mPresenceIconItem(NULL),
- mAddressTextItem(NULL),mThumbnailManager(NULL)
+ HbWidget(parent), mIgnoreEvents(false), mAvatarIconItem(NULL), mPresenceIconItem(NULL),
+ mAddressTextItem(NULL), mThumbnailManager(NULL)
{
init();
- setBackGround(BACKGROUND_FRAME_NORMAL);
- connectSignals(true);
-
- connect(this->mainWindow(), SIGNAL(viewReady()), this, SLOT(initGesture()));
}
//---------------------------------------------------------------
@@ -82,9 +74,6 @@
//---------------------------------------------------------------
MsgContactCardWidget::~MsgContactCardWidget()
{
- /* if (mGestureFilter) {
- removeSceneEventFilter(mGestureFilter);
- }*/
}
//---------------------------------------------------------------
@@ -93,6 +82,12 @@
//---------------------------------------------------------------
void MsgContactCardWidget::init()
{
+ this->setProperty("state", "normal");
+ this->grabGesture(Qt::TapGesture);
+
+ HbFrameItem *frameItem = new HbFrameItem(BG_FRAME_NORMAL, HbFrameDrawer::NinePieces, this);
+ this->setBackgroundItem(frameItem);
+
mAvatarIconItem = new HbIconItem(this);
HbStyle::setItemName(mAvatarIconItem, "avatar");
@@ -146,10 +141,18 @@
ConvergedMessageAddressList MsgContactCardWidget::address()
{
ConvergedMessageAddressList addresses;
- QModelIndex index = ConversationsEngine::instance()->getConversationsModel()->index(0, 0);
+ QStandardItemModel* msgModel = ConversationsEngine::instance()->getConversationsModel();
+ const int rowCnt = msgModel->rowCount();
+ QModelIndex index = msgModel->index(rowCnt-1, 0);
ConvergedMessageAddress* address = new ConvergedMessageAddress(
index.data(ConversationAddress).toString());
- address->setAlias(mAddress);
+ QString displayname;
+ QString addr;
+ ConversationsEngine::instance()->getContactDetails(
+ ConversationsEngine::instance()->getCurrentConversationId(),
+ displayname,
+ addr);
+ address->setAlias(displayname);
addresses.append(address);
return addresses;
}
@@ -194,16 +197,13 @@
setAddress(contactName);
// Set Avatar
- QList<QContact> contactList =
- MsgContactHandler::findContactList(mContactNumber);
-
+ QList<QContact> contactList = MsgContactHandler::findContactList(mContactNumber);
+
if (!contactList.isEmpty()) {
- QList<QContactAvatar> avatarDetails =
- contactList.at(0).details<QContactAvatar> ();
-
+ QList<QContactAvatar> avatarDetails = contactList.at(0).details<QContactAvatar> ();
+
if (!avatarDetails.isEmpty()) {
- mThumbnailManager->getThumbnail(
- avatarDetails.at(0).imageUrl().toString());
+ mThumbnailManager->getThumbnail(avatarDetails.at(0).imageUrl().toString());
}
}
@@ -223,113 +223,129 @@
}
//---------------------------------------------------------------
-// MsgContactCardWidget::initGesture
+// MsgContactCardWidget::gestureEvent
// @see header file
//---------------------------------------------------------------
-void MsgContactCardWidget::initGesture()
+void MsgContactCardWidget::gestureEvent(QGestureEvent *event)
{
- // Create gesture filter
- /* QGraphicsScene* sc = this->scene();
- mGestureFilter = new HbGestureSceneFilter(Qt::LeftButton, this);
-
- // Add gestures for longpress
- HbGesture* gestureLongpressed = new HbGesture(HbGesture::longpress, 5);
-
- mGestureFilter->addGesture(gestureLongpressed);
-
- connect(gestureLongpressed, SIGNAL(longPress(QPointF)), this, SLOT(handleLongPress(QPointF)));
-
- //install gesture filter.
- this->installSceneEventFilter(mGestureFilter);
-
- disconnect(this->mainWindow(), SIGNAL(viewReady()), this, SLOT(initGesture()));*/
+ HbTapGesture *tapGesture = qobject_cast<HbTapGesture*> (event->gesture(Qt::TapGesture));
+ if (tapGesture) {
+ switch (tapGesture->state()) {
+ case Qt::GestureStarted:
+ {
+ // Trigger haptic feedback.
+ HbInstantFeedback::play(HbFeedback::Basic);
+ setPressed(true);
+ break;
+ }
+ case Qt::GestureUpdated:
+ {
+ if (HbTapGesture::TapAndHold == tapGesture->tapStyleHint()) {
+ // Handle longtap.
+ setPressed(false);
+ handleLongTap(tapGesture->scenePosition());
+ }
+ break;
+ }
+ case Qt::GestureFinished:
+ {
+ HbInstantFeedback::play(HbFeedback::Basic);
+ if (HbTapGesture::Tap == tapGesture->tapStyleHint()) {
+ // Handle short tap.
+ setPressed(false);
+ handleShortTap(tapGesture->scenePosition());
+ }
+ break;
+ }
+ case Qt::GestureCanceled:
+ {
+ HbInstantFeedback::play(HbFeedback::Basic);
+ setPressed(false);
+ break;
+ }
+ }
+ }
+ else {
+ HbWidget::gestureEvent(event);
+ }
}
//---------------------------------------------------------------
-// MsgContactCardWidget::mousePressEvent
+// MsgContactCardWidget::setPressed
// @see header file
//---------------------------------------------------------------
-void MsgContactCardWidget::mousePressEvent(QGraphicsSceneMouseEvent *event)
+void MsgContactCardWidget::setPressed(bool pressed)
{
- mMenuShown = false;
-
- HbWidgetFeedback::triggered(this, Hb::InstantPressed);
-
- setBackGround(GROUPBOX_BG_FRAME_PRESSED);
-
- event->accept();
+ HbFrameItem *frameItem = static_cast<HbFrameItem *> (this->backgroundItem());
+ if (pressed) {
+ this->setProperty("state", "pressed");
+ frameItem->frameDrawer().setFrameGraphicsName(BG_FRAME_PRESSED);
+ }
+ else {
+ this->setProperty("state", "normal");
+ frameItem->frameDrawer().setFrameGraphicsName(BG_FRAME_NORMAL);
+ }
}
//---------------------------------------------------------------
-// MsgContactCardWidget::mouseReleaseEvent
+// MsgContactCardWidget::handleLongTap
// @see header file
//---------------------------------------------------------------
-void MsgContactCardWidget::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
+void MsgContactCardWidget::handleLongTap(const QPointF &position)
{
- setBackGround(BACKGROUND_FRAME_NORMAL);
-
- if (this->rect().contains(event->pos()) && !mMenuShown) {
- HbWidgetFeedback::triggered(this, Hb::InstantClicked);
- emit clicked();
+ // Check if events need to be ignored/accepted
+ if (mIgnoreEvents) {
+ return;
}
- event->accept();
-}
-
-//---------------------------------------------------------------
-// MsgContactCardWidget::setBackGround
-// @see header file
-//---------------------------------------------------------------
-void MsgContactCardWidget::setBackGround(const QString& bg)
-{
- HbFrameItem* backGround = new HbFrameItem(this);
- backGround->frameDrawer().setFrameGraphicsName(bg);
- backGround->frameDrawer().setFrameType(HbFrameDrawer::NinePieces);
- this->setBackgroundItem(backGround);
- this->repolish();
-}
-
-//---------------------------------------------------------------
-// MsgContactCardWidget::handleLongPress
-// @see header file
-//---------------------------------------------------------------
-void MsgContactCardWidget::handleLongPress(QPointF position)
-{
if (KBluetoothMsgsConversationId != ConversationsEngine::instance()->getCurrentConversationId()) {
HbMenu* contextMenu = new HbMenu();
contextMenu->setDismissPolicy(HbPopup::TapAnywhere);
contextMenu->setAttribute(Qt::WA_DeleteOnClose, true);
- contextMenu->setPreferredPos(position);
-
- contextMenu->addAction(LOC_MENU_CONTACT_INFO, this, SLOT(openContactInfo()));
- contextMenu->addAction(LOC_COMMON_MENU_CALL, this, SLOT(call()));
+ contextMenu->setPreferredPos(position);
//If contact doesn't exist in phonebook then add another menu item "Save to Contacts"
int contactId = resolveContactId(mContactNumber);
if (contactId < 0) {
contextMenu->addAction(LOC_SAVETO_CONTACTS, this, SLOT(addToContacts()));
}
+ else{
+ contextMenu->addAction(LOC_MENU_CONTACT_INFO, this, SLOT(openContactInfo()));
+ }
+ contextMenu->addAction(LOC_COMMON_MENU_CALL, this, SLOT(call()));
contextMenu->show();
-
- mMenuShown = true;
}
}
//---------------------------------------------------------------
-// MsgContactCardWidget::overrideFeedback
-// @see header file
+// MsgContactCardWidget::handleShortTap
+// @see header
//---------------------------------------------------------------
-/*HbFeedback::InstantEffect MsgContactCardWidget::overrideFeedback(Hb::InstantInteraction interaction) const
+void MsgContactCardWidget::handleShortTap(const QPointF &position)
{
- switch (interaction) {
- case Hb::InstantPressed:
- case Hb::InstantClicked:
- return HbFeedback::Basic;
- default:
- return HbFeedback::None;
+ this->ungrabGesture(Qt::TapGesture);
+
+ // Check if events need to be ignored/accepted
+ if (mIgnoreEvents) {
+ return;
}
-}*/
+
+ int contactId = resolveContactId(mContactNumber);
+ if(contactId > 0)
+ {
+ //resolved contact open contact card.
+ openContactInfo();
+ }
+ else
+ {
+ //unresolved contact show longpress options menu.
+ handleLongTap(position);
+ }
+
+ //fire timer to regrab gesture after some delay.
+ QTimer::singleShot(300,this,SLOT(regrabGesture()));
+}
//---------------------------------------------------------------
// MsgContactCardWidget::openContactInfo
@@ -369,6 +385,9 @@
connect(request, SIGNAL(requestError(const QVariant&)), this,
SLOT(handleError(const QVariant&)));
+ //disbale subscritption for the CV events
+ ConversationsEngine::instance()->disableRegisterationForCVEvents();
+
request->setArguments(args);
request->send();
delete request;
@@ -382,11 +401,9 @@
int MsgContactCardWidget::resolveContactId(const QString& value)
{
QString displayLabel;
-
- return MsgContactHandler::resolveContactDisplayName(
- value,
- displayLabel,
- 0);
+
+ int count;
+ return MsgContactHandler::resolveContactDisplayName(value, displayLabel, count);
}
//---------------------------------------------------------------
@@ -396,7 +413,7 @@
void MsgContactCardWidget::call()
{
//Launch dialer service
- QString serviceName("com.nokia.services.telephony");
+ QString serviceName("com.nokia.symbian.ICallDial");
QString operation("dial(QString)");
XQServiceRequest* serviceRequest = new XQServiceRequest(serviceName, operation, false);
@@ -416,6 +433,7 @@
//---------------------------------------------------------------
void MsgContactCardWidget::addToContacts()
{
+ openContactInfo();
}
//---------------------------------------------------------------
@@ -426,20 +444,26 @@
{
Q_UNUSED(result)
- QList<QContact> matchingContacts =
- MsgContactHandler::findContactList(mContactNumber);
+ QList<QContact> matchingContacts = MsgContactHandler::findContactList(mContactNumber);
if (!matchingContacts.isEmpty()) {
setAddress(matchingContacts.at(0).displayLabel());
-
- QList<QContactAvatar> avatarDetails =
- matchingContacts.at(0).details<QContactAvatar> ();
-
+
+ QList<QContactAvatar> avatarDetails = matchingContacts.at(0).details<QContactAvatar> ();
+
if (!avatarDetails.isEmpty()) {
- mThumbnailManager->getThumbnail(
- avatarDetails.at(0).imageUrl().toString());
+ mThumbnailManager->getThumbnail(avatarDetails.at(0).imageUrl().toString());
}
- }
+ }
+
+ // Get the new conversation id.
+ qint64 convId = ConversationsEngine::instance()->getConversationIdFromAddress(
+ mContactNumber);
+ emit conversationIdChanged(convId);
+
+ ConversationsEngine::instance(
+ )->emitOpenConversationViewIdUpdate(convId);
+
}
//---------------------------------------------------------------
@@ -449,7 +473,14 @@
void MsgContactCardWidget::handleError(int errorCode, const QString& errorMessage)
{
Q_UNUSED(errorMessage)
- Q_UNUSED(errorCode)
+ Q_UNUSED(errorCode)
+
+ //unblock the cv events in case of contacts save error
+ ConversationsEngine::instance(
+ )->emitOpenConversationViewIdUpdate(
+ ConversationsEngine::instance(
+ )->getCurrentConversationId(
+ ));
}
//---------------------------------------------------------------
@@ -482,17 +513,22 @@
setAvatar(HbIcon(DEFAULT_AVATAR_ICON));
}
}
+
//---------------------------------------------------------------
-// MsgContactCardWidget::connectSignals
+// MsgContactCardWidget::ignoreSignals
// @see header
//---------------------------------------------------------------
-void MsgContactCardWidget::connectSignals(bool yes)
+void MsgContactCardWidget::ignoreSignals(bool yes)
{
- if (yes) {
- connect(this, SIGNAL(clicked()), this, SLOT(openContactInfo()));
- }
- else {
- disconnect(this, SIGNAL(clicked()), this, SLOT(openContactInfo()));
- }
+ mIgnoreEvents = yes;
+}
+
+//---------------------------------------------------------------
+// MsgContactCardWidget::regrabGesture
+// @see header file
+//---------------------------------------------------------------
+void MsgContactCardWidget::regrabGesture()
+{
+ this->grabGesture(Qt::TapGesture);
}
// EOF
--- a/messagingapp/msgui/conversationview/src/msgconversationbaseview.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/conversationview/src/msgconversationbaseview.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -42,6 +42,9 @@
QTM_USE_NAMESPACE
+const int INVALID_MSGID = -1;
+const int INVALID_CONVID = -1;
+
// LOCALIZATION
#define LOC_SAVED_TO_DRAFTS hbTrId("txt_messaging_dpopinfo_saved_to_drafts")
@@ -50,12 +53,10 @@
// Constructor
//---------------------------------------------------------------
MsgConversationBaseView::MsgConversationBaseView(QGraphicsItem* parent) :
-MsgBaseView(parent),
-mConversationId(-1),
-mCVIdkey(XQSettingsKey::TargetPublishAndSubscribe,KMsgCVIdProperty,
- KMsgCVIdKey)
-{
- connect(this->mainWindow(),SIGNAL(viewReady()),this,SLOT(doDelayedConstruction()));
+ MsgBaseView(parent), mConversationId(-1), mCVIdkey(XQSettingsKey::TargetPublishAndSubscribe,
+ KMsgCVIdProperty, KMsgCVIdKey)
+{
+ connect(this->mainWindow(), SIGNAL(viewReady()), this, SLOT(doDelayedConstruction()));
initView();
}
@@ -64,7 +65,7 @@
// Destructor
//---------------------------------------------------------------
MsgConversationBaseView::~MsgConversationBaseView()
-{
+{
}
//---------------------------------------------------------------
@@ -75,15 +76,14 @@
{
ConversationsEngine::instance()->getConversations(convId);
mConversationId = convId;
- connect(this->mainWindow(),SIGNAL(viewReady()),this,SLOT(doDelayedConstruction()));
-
- // publsih conversation id
- mSettingsManager->writeItemValue(mCVIdkey,(int)mConversationId);
-
- if(mConversationView)
- {
+ connect(this->mainWindow(), SIGNAL(viewReady()), this, SLOT(doDelayedConstruction()));
+
+ // publsih conversation id
+ mSettingsManager->writeItemValue(mCVIdkey, (int) mConversationId);
+
+ if (mConversationView) {
mConversationView->refreshView();
- }
+ }
}
//---------------------------------------------------------------
@@ -91,8 +91,8 @@
// create and initialise the conversationview
//---------------------------------------------------------------
void MsgConversationBaseView::initView()
- {
-
+{
+
// Create header widget
mContactCard = new MsgContactCardWidget(this);
@@ -100,10 +100,11 @@
qreal spacing = HbDeviceProfile::profile(this).unitValue();
mMainLayout->setSpacing(spacing);
- mMainLayout->setContentsMargins(CONTENT_MARGIN, CONTENT_MARGIN,
- CONTENT_MARGIN, CONTENT_MARGIN);
+ mMainLayout->setContentsMargins(CONTENT_MARGIN, CONTENT_MARGIN, CONTENT_MARGIN, CONTENT_MARGIN);
mMainLayout->addItem(mContactCard);
+ connect(mContactCard, SIGNAL(conversationIdChanged(qint64)), this,
+ SLOT(handleConversationIdChange(qint64)));
/**
* Create conversation view and connect to proper signals.
@@ -114,25 +115,24 @@
mConversationView->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
- connect(mConversationView, SIGNAL(closeConversationView()),
- this, SLOT(closeConversationView()));
+ connect(mConversationView, SIGNAL(closeConversationView()), this, SLOT(closeConversationView()));
+
+ connect(mConversationView, SIGNAL(replyStarted()), this, SLOT(markMessagesAsRead()));
- connect(mConversationView,SIGNAL(replyStarted()),
- this,SLOT(markMessagesAsRead()));
+ connect(mConversationView, SIGNAL(switchView(const QVariantList&)), this,
+ SIGNAL(switchView(const QVariantList&)));
- connect(mConversationView, SIGNAL(switchView(const QVariantList&)),
- this, SIGNAL(switchView(const QVariantList&)));
-
- connect(mConversationView,SIGNAL(hideChrome(bool)),this,SLOT(hideChrome(bool)));
+ connect(mConversationView, SIGNAL(vkbOpened(bool)), this, SLOT(hideChrome(bool)));
+ connect(mConversationView, SIGNAL(vkbOpened(bool)), mContactCard, SLOT(ignoreSignals(bool)));
this->setMenu(mConversationView->menu());
mMainLayout->addItem(mConversationView);
this->setLayout(mMainLayout);
-
+
mSettingsManager = new XQSettingsManager(this);
-
+
}
//---------------------------------------------------------------
@@ -141,7 +141,7 @@
//---------------------------------------------------------------
void MsgConversationBaseView::closeConversationView()
{
- markMessagesAsRead();
+ markMessagesAsRead();
}
//---------------------------------------------------------------
@@ -149,39 +149,38 @@
// Mark unread msgs in cv as read
//---------------------------------------------------------------
void MsgConversationBaseView::markMessagesAsRead()
- {
- if( mConversationId >= 0)
- {
+{
+ if (mConversationId >= 0) {
ConversationsEngine::instance()->markConversationRead(mConversationId);
- }
}
+}
//---------------------------------------------------------------
// MsgConversationBaseView::saveContentToDrafts
// saves the editors content to drafts
//---------------------------------------------------------------
-void MsgConversationBaseView::saveContentToDrafts()
- {
+int MsgConversationBaseView::saveContentToDrafts()
+{
+ int msgId = INVALID_MSGID;
bool result = false;
- if( mConversationId >= 0)
- {
- result = mConversationView->saveContentToDrafts();
- }
-
- if(result)
- {
+ if (mConversationId >= 0) {
+ msgId = mConversationView->saveContentToDrafts();
+ }
+
+ if (msgId != INVALID_MSGID) {
HbNotificationDialog::launchDialog(LOC_SAVED_TO_DRAFTS);
- }
}
+ return msgId;
+}
//---------------------------------------------------------------
// MsgConversationBaseView::conversationId
// get the conversation ID
//---------------------------------------------------------------
-qint64 MsgConversationBaseView::conversationId()
- {
- return mConversationId;
- }
+qint64 MsgConversationBaseView::conversationId()
+{
+ return mConversationId;
+}
//---------------------------------------------------------------
// MsgConversationBaseView::clearContent
@@ -198,19 +197,19 @@
//
//---------------------------------------------------------------
void MsgConversationBaseView::handleOk(const QVariant& result)
- {
+{
Q_UNUSED(result)
- }
+}
//---------------------------------------------------------------
// MsgConversationBaseView::handleError
//
//---------------------------------------------------------------
void MsgConversationBaseView::handleError(int errorCode, const QString& errorMessage)
- {
+{
Q_UNUSED(errorMessage)
Q_UNUSED(errorCode)
- }
+}
//---------------------------------------------------------------
// MsgConversationBaseView::doDelayedConstruction
@@ -218,49 +217,58 @@
//---------------------------------------------------------------
void MsgConversationBaseView::doDelayedConstruction()
{
- disconnect(this->mainWindow(),SIGNAL(viewReady()),this,SLOT(doDelayedConstruction()));
- QTimer::singleShot(50,this,SLOT(handleViewReady()));
+ disconnect(this->mainWindow(), SIGNAL(viewReady()), this, SLOT(doDelayedConstruction()));
+ QTimer::singleShot(50, this, SLOT(handleViewReady()));
}
-
//---------------------------------------------------------------
// MsgConversationBaseView::handleViewReady
//
//---------------------------------------------------------------
void MsgConversationBaseView::handleViewReady()
- {
- ConversationsEngine::instance()->fetchMoreConversations();
+{
+ mConversationView->onViewReady();
+}
+
+//---------------------------------------------------------------
+// MsgConversationBaseView::handleConversationIdChange
+//
+//---------------------------------------------------------------
+void MsgConversationBaseView::handleConversationIdChange(qint64 convId)
+{
+ if (INVALID_CONVID != convId && mConversationId != convId) {
+
+ mConversationId = convId;
+ // publsih conversation id
+ mSettingsManager->writeItemValue(mCVIdkey, (int) mConversationId);
}
+}
//---------------------------------------------------------------
// MsgConversationBaseView::hideChrome
//
//---------------------------------------------------------------
void MsgConversationBaseView::hideChrome(bool hide)
- {
- if(hide)
- {
+{
+ if (hide) {
this->hideItems(Hb::StatusBarItem | Hb::TitleBarItem);
this->setContentFullScreen(true);
-
- if(this->mainWindow()->orientation() == Qt::Horizontal)
- {
+
+ if (this->mainWindow()->orientation() == Qt::Horizontal) {
mMainLayout->removeItem(mContactCard);
mContactCard->hide();
- }
}
- else
- {
+ }
+ else {
this->showItems(Hb::StatusBarItem | Hb::TitleBarItem);
this->setContentFullScreen(false);
-
- if(!mContactCard->isVisible())
- {
- mMainLayout->insertItem(0,mContactCard);
+
+ if (!mContactCard->isVisible()) {
+ mMainLayout->insertItem(0, mContactCard);
mContactCard->show();
- }
}
}
+}
//---------------------------------------------------------------
// MsgConversationBaseView::setPSCVId
@@ -268,11 +276,11 @@
//---------------------------------------------------------------
void MsgConversationBaseView::setPSCVId(bool setId)
{
- if(setId){
- mSettingsManager->writeItemValue(mCVIdkey,(int)mConversationId);
+ if (setId) {
+ mSettingsManager->writeItemValue(mCVIdkey, (int) mConversationId);
}
else {
- mSettingsManager->writeItemValue(mCVIdkey,-1);
+ mSettingsManager->writeItemValue(mCVIdkey, -1);
}
}
// EOF
--- a/messagingapp/msgui/conversationview/src/msgconversationview.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/conversationview/src/msgconversationview.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -24,11 +24,12 @@
#include <HbMessageBox>
#include <HbNotificationDialog>
#include <HbFrameBackground>
-#include <XQServiceRequest.h>
+#include <xqservicerequest.h>
#include <HbStaticVkbHost>
#include <HbStyleLoader>
#include <xqaiwrequest.h>
#include <xqappmgr.h>
+#include <HbMainWindow>
#include <QDir>
#include <QDateTime>
@@ -41,6 +42,7 @@
#include <MmsEngineDomainCRKeys.h>
// USER INCLUDES
+#include "msgcontactsutil.h"
#include "msgsendutil.h"
#include "msgconversationviewitem.h"
#include "conversationsengine.h"
@@ -55,6 +57,7 @@
#include "ringbc.h"
#include "mmsconformancecheck.h"
#include "msgsettingsview.h"
+#include "msgaudiofetcherview.h"
//Item specific menu.
@@ -62,13 +65,11 @@
#define LOC_COMMON_DELETE hbTrId("txt_common_menu_delete")
#define LOC_COMMON_FORWARD hbTrId("txt_common_menu_forward")
#define LOC_COMMON_DOWNLOAD hbTrId("txt_messaging_menu_download")
-#define LOC_COMMON_SEND hbTrId("txt_common_menu_send")
+#define LOC_COMMON_SEND hbTrId("txt_common_button_send")
#define LOC_COMMON_SAVE hbTrId("txt_common_menu_save")
-#define LOC_BUTTON_DELETE hbTrId("txt_common_button_delete")
-#define LOC_BUTTON_CANCEL hbTrId("txt_common_button_cancel")
-#define LOC_BUTTON_OK hbTrId("txt_common_button_ok")
#define LOC_DELETE_MESSAGE hbTrId("txt_messaging_dialog_delete_message")
+#define LOC_SAVE_TO_CONTACTS hbTrId("txt_messaging_menu_save_to_contacts")
//main menu
#define LOC_ATTACH hbTrId("txt_messaging_opt_attach")
@@ -78,13 +79,11 @@
#define LOC_ADD_RECIPIENTS hbTrId("txt_messaging_opt_add_recipients")
#define LOC_ADD_SUBJECT hbTrId("txt_messaging_opt_add_subject")
-#define LOC_MSG_SEND_FAILED hbTrId("txt_messaging_dpopinfo_sending_failed")
-
+#define LOC_MSG_SEND_FAILED hbTrId("txt_messaging_dialog_message_sending_failed")
#define LOC_DIALOG_SMS_SETTINGS_INCOMPLETE hbTrId("txt_messaging_dialog_sms_settings_incomplete")
#define LOC_DIALOG_SAVE_RINGTONE hbTrId("txt_conversations_dialog_save_ringing_tone")
-
const int INVALID_MSGID = -1;
const int INVALID_CONVID = -1;
const int CONTACT_INSERTION_MODE = 1;
@@ -102,15 +101,27 @@
mEditorWidget(NULL),
mContactCardWidget(contactCardWidget),
mSendUtil(NULL),
- mItemLongPressed(false),
mVkbHost(NULL),
- mVkbopened(false)
+ mVisibleIndex(),
+ mVkbopened(false),
+ mModelPopulated(false),
+ mViewReady(false)
{
//create send utils
mSendUtil = new MsgSendUtil(this);
//initialize view
setupView();
setupMenu();
+
+ connect(ConversationsEngine::instance(),
+ SIGNAL(conversationModelUpdated()),
+ this,
+ SLOT(scrollToBottom()));
+
+ connect(ConversationsEngine::instance(),
+ SIGNAL(conversationViewEmpty()),
+ this,
+ SLOT(onConversationViewEmpty()));
}
//---------------------------------------------------------------
@@ -152,6 +163,11 @@
connect(mConversationList, SIGNAL(activated(QModelIndex)),
this, SLOT(openItem(QModelIndex)));
+ connect(this->mainWindow(), SIGNAL(aboutToChangeOrientation()),
+ this, SLOT(onOrientationAboutToBeChanged()));
+
+ connect(this->mainWindow(), SIGNAL(orientationChanged(Qt::Orientation)),
+ this, SLOT(onOrientationChanged(Qt::Orientation)));
// Long tap list item
connect(mConversationList, SIGNAL(longPressed(HbAbstractViewItem*, QPointF)),
@@ -201,6 +217,18 @@
}
//---------------------------------------------------------------
+// MsgConversationView::fetchMoreConversations
+// @see header file
+//---------------------------------------------------------------
+void MsgConversationView::fetchMoreConversations()
+{
+ if (mViewReady && mModelPopulated) {
+ ConversationsEngine::instance()->fetchMoreConversations();
+ mViewReady = mModelPopulated = false;
+ }
+}
+
+//---------------------------------------------------------------
// MsgConversationView::refreshView()
// @see header file
//---------------------------------------------------------------
@@ -234,6 +262,14 @@
mMessageModel->index(rowCnt - 1, 0));
}
+void MsgConversationView::onConversationViewEmpty()
+{
+ QVariantList param;
+ param << MsgBaseView::CLV; // target view
+ param << MsgBaseView::CV; // source view
+ emit switchView(param);
+}
+
//---------------------------------------------------------------
// MsgConversationView::longPressed
// @see header file
@@ -241,8 +277,6 @@
void MsgConversationView::longPressed(HbAbstractViewItem* viewItem,
const QPointF& point)
{
- mItemLongPressed = true;
-
MsgConversationViewItem* item = qgraphicsitem_cast<
MsgConversationViewItem *> (viewItem);
@@ -266,11 +300,7 @@
contextMenu->show();
}
- else
- {
- // For cases where the long tap check failed
- mItemLongPressed = false;
- }
+
}
//---------------------------------------------------------------
@@ -296,6 +326,8 @@
void MsgConversationView::addSaveItemToContextMenu(MsgConversationViewItem* item,
HbMenu* contextMenu, int sendingState)
{
+ Q_UNUSED(sendingState)
+
int messageSubType = item->modelIndex().data(MessageSubType).toInt();
int direction = item->modelIndex().data(Direction).toInt();
if ((messageSubType == ConvergedMessage::RingingTone) &&
@@ -322,10 +354,14 @@
{
return;
}
-
+ if ((messageSubType == ConvergedMessage::VCard) &&
+ (direction == ConvergedMessage::Incoming))
+ {
+ HbAction *contextItem = contextMenu->addAction(LOC_SAVE_TO_CONTACTS);
+ connect(contextItem, SIGNAL(triggered()),this, SLOT(openItem()));
+ return;
+ }
if( (sendingState == ConvergedMessage::SentState ) ||
- (sendingState == ConvergedMessage::Resend ) ||
- (sendingState == ConvergedMessage::Failed ) ||
(direction == ConvergedMessage::Incoming))
{
HbAction *contextItem = contextMenu->addAction(LOC_COMMON_OPEN);
@@ -374,12 +410,18 @@
}
qint32 messageId = item->modelIndex().data(ConvergedMsgId).toInt();
+ qint32 messageProperty = item->modelIndex().data(MessageProperty).toInt();
+
+ bool canForwardMessage = true;
+ if (messageType == ConvergedMessage::Mms){
+ canForwardMessage = (messageProperty & EPreviewForward)? true:false;
+ }
if( ((sendingState == ConvergedMessage::SentState) ||
(sendingState == ConvergedMessage::Resend) ||
(sendingState == ConvergedMessage::Failed) ||
(direction == ConvergedMessage::Incoming) ) &&
- (validateMsgForForward(messageType,messageId)) )
+ canForwardMessage)
{
HbAction *contextItem = contextMenu->addAction(LOC_COMMON_FORWARD);
connect(contextItem, SIGNAL(triggered()),this, SLOT(forwardMessage()));
@@ -462,7 +504,9 @@
deactivateInputBlocker();
if( sendResult == KErrNotFound)
{
- HbMessageBox::question(LOC_DIALOG_SMS_SETTINGS_INCOMPLETE, this, SLOT(onDialogSettingsLaunch(HbAction*)), LOC_BUTTON_OK, LOC_BUTTON_CANCEL);
+ HbMessageBox::question(LOC_DIALOG_SMS_SETTINGS_INCOMPLETE, this,
+ SLOT(onDialogSettingsLaunch(HbAction*)),
+ HbMessageBox::Ok | HbMessageBox::Cancel);
}
}
@@ -536,11 +580,12 @@
//---------------------------------------------------------------
void MsgConversationView::fetchImages()
{
- QString interface("Image");
- QString operation("fetch(QVariantMap,QVariant)");
+ QString service("photos");
+ QString interface("com.nokia.symbian.IImageFetch");
+ QString operation("fetch()");
XQAiwRequest* request = NULL;
XQApplicationManager appManager;
- request = appManager.create(interface, operation, true); // embedded
+ request = appManager.create(service,interface, operation, true); // embedded
request->setSynchronous(true); // synchronous
if(!request)
{
@@ -553,11 +598,6 @@
connect(request, SIGNAL(requestError(int,const QString&)),
this, SLOT(serviceRequestError(int,const QString&)));
- // Set arguments for request
- QList<QVariant> args;
- args << QVariantMap();
- args << QVariant();
- request->setArguments(args);
// Make the request
if (!request->send())
{
@@ -572,30 +612,25 @@
//---------------------------------------------------------------
void MsgConversationView::fetchAudio()
{
- QString service("musicplayer");
- QString interface("com.nokia.symbian.IMusicFetch");
- QString operation("fetch()");
- XQAiwRequest* request = NULL;
- XQApplicationManager appManager;
- request = appManager.create(service, interface, operation, true); //embedded
- request->setSynchronous(true); // synchronous
- if(!request)
- {
- QDEBUG_WRITE("AIW-ERROR: NULL request");
- return;
- }
+ // Launch Audio fetcher view
+ QVariantList params;
+ QByteArray dataArray;
+ QDataStream messageStream
+ (&dataArray, QIODevice::WriteOnly | QIODevice::Append);
- connect(request, SIGNAL(requestOk(const QVariant&)),
- this, SLOT(audiosFetched(const QVariant&)));
- connect(request, SIGNAL(requestError(int,const QString&)),
- this, SLOT(serviceRequestError(int,const QString&)));
+ ConvergedMessage message;
+ message.setBodyText(mEditorWidget->content());
+ // add address from contact-card to to-field
+ ConvergedMessageAddress address;
+ address.setAlias(mContactCardWidget->address().at(0)->alias());
+ address.setAddress(mContactCardWidget->address().at(0)->address());
+ message.addToRecipient(address);
+ message.serialize(messageStream);
- // Make the request
- if (!request->send())
- {
- QDEBUG_WRITE_FORMAT("AIW-ERROR: Request Send failed ",request->lastError());
- }
- delete request;
+ params << MsgBaseView::AUDIOFETCHER; // target view
+ params << MsgBaseView::CV; // source view
+ params << dataArray;
+ emit switchView(params);
}
//---------------------------------------------------------------
@@ -637,26 +672,6 @@
}
//---------------------------------------------------------------
-// MsgConversationView::audiosFetched()
-// @see header file
-//---------------------------------------------------------------
-void MsgConversationView::audiosFetched(const QVariant& result )
-{
- if(result.canConvert<QStringList>())
- {
- QStringList fileList = result.value<QStringList>();
- if ( fileList.size()>0 && !fileList.at(0).isEmpty())
- {
- QString filepath(QDir::toNativeSeparators(fileList.at(0)));
- QVariantList params;
- params << MsgBaseView::ADD_AUDIO;
- params << filepath;
- launchUniEditor(params);
- }
- }
-}
-
-//---------------------------------------------------------------
// MsgConversationView::addSubject()
// @see header file
//---------------------------------------------------------------
@@ -738,8 +753,7 @@
void MsgConversationView::deleteItem()
{
HbMessageBox::question(LOC_DELETE_MESSAGE,this,SLOT(onDialogdeleteMsg(HbAction*)),
- LOC_BUTTON_DELETE,
- LOC_BUTTON_CANCEL);
+ HbMessageBox::Delete | HbMessageBox::Cancel);
}
//---------------------------------------------------------------
@@ -767,7 +781,7 @@
// MsgConversationView::saveContentToDrafts()
// @See header
//---------------------------------------------------------------
-bool MsgConversationView::saveContentToDrafts()
+int MsgConversationView::saveContentToDrafts()
{
int msgId = INVALID_MSGID;
if(!mEditorWidget->content().isEmpty())
@@ -790,7 +804,7 @@
}
deactivateInputBlocker();
}
- return ((msgId > INVALID_MSGID)? true : false);
+ return msgId;
}
//---------------------------------------------------------------
@@ -814,14 +828,24 @@
{
qint32 messageId = index.data(ConvergedMsgId).toLongLong();
- QString interface("com.nokia.services.btmsgdispservices.displaymsg");
+ QList<QVariant> args;
+ QString serviceName("com.nokia.services.btmsgdispservices");
QString operation("displaymsg(int)");
+ XQAiwRequest* request;
+ XQApplicationManager appManager;
+ request = appManager.create(serviceName, "displaymsg", operation, false); // embedded
+
+ if ( request == NULL )
+ {
+ return;
+ }
- XQServiceRequest request(interface, operation, false);
-
- request << messageId;
-
- bool result = request.send();
+ args << QVariant(messageId);
+ request->setSynchronous(true);
+
+ request->setArguments(args);
+ request->send();
+ delete request;
}
//---------------------------------------------------------------
@@ -861,50 +885,72 @@
//@see header
//---------------------------------------------------------------
void MsgConversationView::openItem(const QModelIndex & index)
- {
+{
// Return if invalid index.
if (!index.isValid() || mVkbopened)
- {
+ {
return;
- }
-
- if(mItemLongPressed)
- {
- //reset the flag
- mItemLongPressed = false;
- return;
- }
+ }
int messageType = index.data(MessageType).toInt();
int messageSubType = index.data(MessageSubType).toInt();
+ int messageId = index.data(ConvergedMsgId).toInt();
- if (ConvergedMessage::BioMsg == messageType) {
- if (ConvergedMessage::RingingTone == messageSubType) {
+ if (ConvergedMessage::BioMsg == messageType)
+ {
+ if (ConvergedMessage::RingingTone == messageSubType)
+ {
HbMessageBox::question(LOC_DIALOG_SAVE_RINGTONE, this,
- SLOT(onDialogSaveTone(HbAction*)), LOC_COMMON_SAVE, LOC_BUTTON_CANCEL);
+ SLOT(onDialogSaveTone(HbAction*)),
+ HbMessageBox::Save | HbMessageBox::Cancel);
return;
}
else if(ConvergedMessage::Provisioning == messageSubType)
- {
+ {
int messageId = index.data(ConvergedMsgId).toInt();
handleProvisoningMsg(messageId);
QList<int> msgIdList;
if(index.data(UnReadStatus).toInt())
- {
+ {
msgIdList.clear();
msgIdList << messageId;
ConversationsEngine::instance()->markMessagesRead(msgIdList);
- }
- return;
}
- // Unsupported messages
- else if (ConvergedMessage::VCard == messageSubType
- || ConvergedMessage::VCal == messageSubType) {
+ return;
+ }
+ else if(ConvergedMessage::VCard == messageSubType)
+ {
+ QString filepath = index.data(Attachments).toStringList().at(0);
+ bool result = MsgContactsUtil::launchVCardViewer(filepath);
+ if(result)
+ {
+
+ int messageId = index.data(ConvergedMsgId).toInt();
+ QList<int> msgIdList;
+ if(index.data(UnReadStatus).toInt())
+ {
+ msgIdList.clear();
+ msgIdList << messageId;
+ ConversationsEngine::instance()->markMessagesRead(msgIdList);
+ }
+ }
+ return;
+ }
+ else if(ConvergedMessage::VCal == messageSubType)
+ {
return;
}
}
- else if (ConvergedMessage::BT == messageType) {
+ else if (ConvergedMessage::BT == messageType)
+ {
launchBtDisplayService(index);
+ QList<int> msgIdList;
+ if(index.data(UnReadStatus).toInt())
+ {
+ msgIdList.clear();
+ msgIdList << messageId;
+ ConversationsEngine::instance()->markMessagesRead(msgIdList);
+ }
return;
}
else if(ConvergedMessage::MmsNotification == messageType)
@@ -922,107 +968,72 @@
else
{
//TODO: use logical str name
- HbMessageBox::question("Download Message?",this,SLOT(onDialogDownLoadMsg(HbAction*)),
- LOC_COMMON_DOWNLOAD,
- LOC_BUTTON_CANCEL);
+ HbMessageBox::question("Download Message?",this,
+ SLOT(onDialogDownLoadMsg(HbAction*)),
+ HbMessageBox::Yes | HbMessageBox::Cancel);
return;
}
}
- ConvergedMessage message;
+ int direction = index.data(Direction).toInt();
+
+ if (direction == ConvergedMessage::Outgoing && ConvergedMessage::Sms == messageType
+ && ConversationsEngine::instance()->getMsgSubType(messageId)== ConvergedMessage::NokiaService)
+ {
+ return;
+ }
+
// check whether message is in sending progress, then donot launch viewer.
int location = index.data(MessageLocation).toInt();
int sendingState = index.data(SendingState).toInt();
- //If message is in Sending state or is Scheduled to be sent later,
+ //If message is in any other state other than 'Sent'
//do not open the message
- if(sendingState == ConvergedMessage::Suspended ||
- sendingState == ConvergedMessage::Scheduled ||
- sendingState == ConvergedMessage::Sending ||
- sendingState == ConvergedMessage::Waiting)
+ if(direction == ConvergedMessage::Outgoing
+ && sendingState != ConvergedMessage::SentState )
+
{
return;
}
- //TODO: sendingState check should be removed once msg
- // movement lock issue is resolved from mw
- if( !((location == ConvergedMessage::Inbox) ||
- (location == ConvergedMessage::Sent) ||
- (sendingState == ConvergedMessage::SentState)||
- (sendingState == ConvergedMessage::Failed) ||
- (sendingState == ConvergedMessage::Resend)))
- {// do not launch viewer, show a note
- HbNotificationDialog* dlg = new HbNotificationDialog();
- dlg->setFocusPolicy(Qt::NoFocus);
- QString text(tr("Message Locked"));
- dlg->setText(text);
- dlg->setDismissPolicy(HbPopup::TapAnywhere);
- dlg->setAttribute(Qt::WA_DeleteOnClose, true);
- dlg->show();
- return;
- }
-
- // message id
- qint32 messageId = index.data(ConvergedMsgId).toLongLong();
- ConvergedMessageId msgId(messageId);
- message.setMessageId(msgId);
-
- // contact Id
- qint32 contactId = index.data(ContactId).toLongLong();
-
- // message type
-
- message.setMessageType((ConvergedMessage::MessageType) messageType);
- message.setMessageSubType((ConvergedMessage::MessageSubType) messageSubType);
-
- if (messageType == ConvergedMessage::Mms)
- {
- message.setSubject(index.data(Subject).toString());
- message.setPriority((ConvergedMessage::Priority) index.data(
- MessagePriority).toInt());
- }
- else if (messageType == ConvergedMessage::IM)
- {
- // add body text and send to the message for IM case
- message.setBodyText(index.data(BodyText).toString());
- }
-
- // time stamp
- message.setTimeStamp(index.data(TimeStamp).toLongLong());
-
- //Message direction
- message.setDirection((ConvergedMessage::Direction)index.data(Direction).toInt());
-
- // conatct name as address
- ConvergedMessageAddress address;
- address.setAlias(mContactCardWidget->address().at(0)->alias());
- address.setAddress(mContactCardWidget->address().at(0)->address());
- message.addToRecipient(address);
-
- // Mark this message as read if its unread
- QByteArray dataArray;
- QDataStream messageStream
- (&dataArray, QIODevice::WriteOnly | QIODevice::Append);
- message.serialize(messageStream);
- //if message unread, mark as read before opening view
- QList<int> msgIdList;
- if(index.data(UnReadStatus).toInt())
- {
+
+
+ // contact Id
+ qint32 contactId = index.data(ContactId).toLongLong();
+
+ //if message unread, mark as read before opening view
+ QList<int> msgIdList;
+ if(index.data(UnReadStatus).toInt())
+ {
msgIdList.clear();
msgIdList << messageId;
ConversationsEngine::instance()->markMessagesRead(msgIdList);
- }
+ }
+
+ qint32 messageProperty = index.data(MessageProperty).toInt();
- //switch view
- QVariantList param;
- param << MsgBaseView::UNIVIEWER; // target view
- param << MsgBaseView::CV; // source view
+ bool canForwardMessage = true;
+ if (messageType == ConvergedMessage::Mms){
+ canForwardMessage = (messageProperty & EPreviewForward)? true:false;
+ }
+
+ //switch view
+ QVariantList param;
+ param << MsgBaseView::UNIVIEWER; // target view
+ param << MsgBaseView::CV; // source view
- param << contactId;
- param << dataArray;
- param << mMessageModel->rowCount();
-
- emit switchView(param);
+ param << contactId;
+ param << messageId;
+ param << mMessageModel->rowCount();
+ if (canForwardMessage == true)
+ {
+ param << 1;
+ }
+ else
+ {
+ param << 0;
+ }
+ emit switchView(param);
}
//---------------------------------------------------------------
@@ -1084,7 +1095,14 @@
{
ConvergedMessageAddress* address = new ConvergedMessageAddress;
address->setAlias(contactList[i].mDisplayName);
- address->setAddress(contactList[i].mPhoneNumber);
+ if(!contactList[i].mPhoneNumber.isEmpty())
+ {
+ address->setAddress(contactList[i].mPhoneNumber);
+ }
+ else
+ {
+ address->setAddress(contactList[i].mEmailAddress);
+ }
addresses.append(address);
}
message.addToRecipients(addresses);
@@ -1116,16 +1134,13 @@
// @see header file
//---------------------------------------------------------------
void MsgConversationView::populateConversationsView()
-{
- bool b = connect(ConversationsEngine::instance(),
- SIGNAL(conversationModelUpdated()),
- this,
- SLOT(scrollToBottom()));
-
+{
+ mModelPopulated = true;
mConversationList->setModel(mMessageModel);
refreshView();
scrollToBottom();
+ fetchMoreConversations();
}
//---------------------------------------------------------------
@@ -1174,26 +1189,6 @@
}
//---------------------------------------------------------------
-// MsgConversationView::validateMsgForForward
-// @see header file
-//---------------------------------------------------------------
-bool MsgConversationView::validateMsgForForward(int &messageType,
- qint32 &messageId)
-{
- bool retValue = true;
- if (messageType == ConvergedMessage::Mms)
- {
- //Validate if the mms msg can be forwarded or not
- MmsConformanceCheck* mmsConformanceCheck = new MmsConformanceCheck;
- retValue = mmsConformanceCheck->validateMsgForForward(messageId);
-
- delete mmsConformanceCheck;
- }
-
- return retValue;
-}
-
-//---------------------------------------------------------------
// MsgConversationView::vkbOpened
// @see header file
//---------------------------------------------------------------
@@ -1201,9 +1196,7 @@
{
mVkbopened = true;
- mContactCardWidget->connectSignals(false);
-
- emit hideChrome(true);
+ emit vkbOpened(true);
QRectF appRect = mVkbHost->applicationArea();
qreal spacing = 0.0;
@@ -1229,9 +1222,7 @@
{
mVkbopened = false;
- mContactCardWidget->connectSignals(true);
-
- emit hideChrome(false);
+ emit vkbOpened(false);
this->setMaximumHeight(-1);
connect(mVkbHost,SIGNAL(keypadOpened()),this,SLOT(vkbOpened()));
@@ -1251,27 +1242,25 @@
//---------------------------------------------------------------
// MsgConversationView::activateInputBlocker
// @see header file
-//--------------------------------------------------------------
+//---------------------------------------------------------------
void MsgConversationView::activateInputBlocker()
- {
- this->grabMouse();
- this->grabKeyboard();
- }
+{
+ mainWindow()->setInteractive(false);
+}
//---------------------------------------------------------------
// MsgConversationView::deactivateInputBlocker
// @see header file
-//--------------------------------------------------------------
+//---------------------------------------------------------------
void MsgConversationView::deactivateInputBlocker()
- {
- this->ungrabKeyboard();
- this->ungrabMouse();
- }
+{
+ mainWindow()->setInteractive(true);
+}
//---------------------------------------------------------------
// MsgConversationView::handleProvisoningMsg
// @see header file
-//--------------------------------------------------------------
+//---------------------------------------------------------------
void MsgConversationView::handleProvisoningMsg(int msgId)
{
QString messageId;
@@ -1301,7 +1290,7 @@
//---------------------------------------------------------------
// MsgConversationView::onDialogSettingsLaunch
// @see header file
-//--------------------------------------------------------------
+//---------------------------------------------------------------
void MsgConversationView::onDialogSettingsLaunch(HbAction* action)
{
HbMessageBox *dlg = qobject_cast<HbMessageBox*> (sender());
@@ -1319,7 +1308,7 @@
//---------------------------------------------------------------
// MsgConversationView::onDialogdeleteMsg
// @see header file
-//--------------------------------------------------------------
+//---------------------------------------------------------------
void MsgConversationView::onDialogdeleteMsg(HbAction* action)
{
HbMessageBox *dlg = qobject_cast<HbMessageBox*> (sender());
@@ -1371,4 +1360,46 @@
}
}
+//---------------------------------------------------------------
+// MsgConversationView::onOrientationChanged
+// @see header file
+//---------------------------------------------------------------
+void MsgConversationView::onOrientationChanged(Qt::Orientation newOrientation)
+{
+ Q_UNUSED(newOrientation)
+
+ // On orientation change always make the preserved index(last visible item) to be visible
+ if(mVisibleIndex.isValid())
+ {
+ mConversationList->scrollTo(mVisibleIndex, HbAbstractItemView::PositionAtBottom);
+ mVisibleIndex = QModelIndex();
+ }
+}
+
+//---------------------------------------------------------------
+// MsgConversationView::onOrientationAboutToBeChanged
+// @see header file
+//---------------------------------------------------------------
+void MsgConversationView::onOrientationAboutToBeChanged()
+{
+ // Preserve the model index of the last visible item to be scrolled on orientation change
+ QList<HbAbstractViewItem *>items = mConversationList->visibleItems();
+ if (items.count() > 0) {
+ mVisibleIndex = items.last()->modelIndex();
+ }
+}
+
+//---------------------------------------------------------------
+// MsgConversationView::onViewReady
+// @see header file
+//---------------------------------------------------------------
+void MsgConversationView::onViewReady()
+{
+ mViewReady = true;
+ //Disconnect list View's signals, for avoiding execution of the default implementaion
+ disconnect(mainWindow(), SIGNAL(aboutToChangeOrientation()), mConversationList, 0);
+ disconnect(mainWindow(), SIGNAL(orientationChanged(Qt: rientation)), mConversationList, 0);
+
+ fetchMoreConversations();
+}
// EOF
--- a/messagingapp/msgui/conversationview/src/msgconversationviewitem.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/conversationview/src/msgconversationviewitem.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -27,6 +27,7 @@
#include <HbIconAnimationManager>
#include <HbIconAnimator>
#include <ccsdefs.h>
+#include <HbInstance>
// USER INCLUDES
#include "msgconversationwidget.h"
@@ -41,6 +42,9 @@
const QString ANIMATION_FILE(":/qtg_anim_loading.axml");
const QString ANIMATION_ICON_NAME("qtg_anim_loading");
const QString VCARD_ICON("qtg_large_mycard");
+const QString IMAGE_ICON("qtg_small_image");
+const QString CORRUPTED_ICON("qtg_small_corrupted");
+const QString MSG_VIDEO_ICON("qtg_small_video");
// LOCALIZATION
#define LOC_RINGING_TONE hbTrId("txt_messaging_dpopinfo_ringing_tone")
@@ -55,7 +59,7 @@
//---------------------------------------------------------------
MsgConversationViewItem::MsgConversationViewItem(QGraphicsItem* parent) :
HbListViewItem(parent), mIncoming(false), mConversation(0),
- mMessageStateIconItem(0)
+ mIncomingMsgStateIconItem(0), mOutgoingMsgStateIconItem(0)
{
}
@@ -72,23 +76,18 @@
// Create a new decorator item.
//---------------------------------------------------------------
MsgConversationViewItem* MsgConversationViewItem::createItem()
- {
- return new MsgConversationViewItem(*this);
- }
+{
+ MsgConversationViewItem *item = new MsgConversationViewItem(*this);
+ item->init();
+ return item;
+}
//---------------------------------------------------------------
// MsgConversationViewItem::updateChildItems
//
//---------------------------------------------------------------
void MsgConversationViewItem::updateChildItems()
- {
-
- if (!mMessageStateIconItem)
- {
- mMessageStateIconItem = new HbIconItem(this);
- HbStyle::setItemName(mMessageStateIconItem, "msgStateIcon");
- }
-
+{
QModelIndex index = modelIndex();
#ifdef _DEBUG_TRACES_
@@ -136,14 +135,10 @@
// MsgConversationViewItem::updateSmsTypeItem
// @see header file
//---------------------------------------------------------------
-void MsgConversationViewItem::updateSmsTypeItem(const QModelIndex& index, int messageSubType)
- {
-
- if (!mConversation)
- {
- mConversation = new MsgConversationWidget(this);
- HbStyle::setItemName(mConversation, "msgconvwidget");
- }
+void MsgConversationViewItem::updateSmsTypeItem(const QModelIndex& index,
+ int messageSubType)
+{
+
mIncoming = false;
mConversation->resetProperties();
@@ -154,8 +149,8 @@
setIncoming(true);
mConversation->setIncoming(true);
- mMessageStateIconItem->setVisible(false);
- }
+ mIncomingMsgStateIconItem->setVisible(false);
+ }
else if (direction == ConvergedMessage::Outgoing)
{
setIncoming(false);
@@ -238,7 +233,7 @@
}
else
{
- mMessageStateIconItem->setVisible(false);
+ mIncomingMsgStateIconItem->setVisible(false);
}
}
else if (direction == ConvergedMessage::Outgoing)
@@ -295,28 +290,63 @@
//preview image
bool hasImage = (msgProperty & EPreviewImage) ? true : false;
-
if (hasImage)
- {
- int msgId = index.data(ConvergedMsgId).toInt();
- mConversation->setPreviewIconPath(previewPath, msgId);
+ {
mConversation->setImage(true);
- }
+ HbIcon previewIcon;
+ if (msgProperty & EPreviewProtectedImage)
+ {
+ previewIcon = HbIcon(IMAGE_ICON);
+ }
+ else if (msgProperty & EPreviewCorruptedImage)
+ {
+ // TODO: Change to official icon.
+ previewIcon = HbIcon(CORRUPTED_ICON);
+ }
+ else
+ {
+ QVariant previewData = index.data(PreviewIcon);
+ previewIcon = qvariant_cast<HbIcon> (previewData);
+ }
+ mConversation->setPreviewIcon(previewIcon);
+ }
bool hasVideo = (msgProperty & EPreviewVideo) ? true : false;
-
if (hasVideo)
- {
+ {
mConversation->setVideo(true);
- }
-
+ HbIcon videoPreviewIcon;
+ if (msgProperty & EPreviewProtectedVideo)
+ {
+ videoPreviewIcon = HbIcon(MSG_VIDEO_ICON);
+ }
+ else if (msgProperty & EPreviewCorruptedVideo)
+ {
+ videoPreviewIcon = HbIcon(CORRUPTED_ICON);
+ }
+ else
+ {
+ videoPreviewIcon = HbIcon(MSG_VIDEO_ICON);
+ }
+ mConversation->setPreviewIcon(videoPreviewIcon);
+ }
bool hasAudio = (msgProperty & EPreviewAudio) ? true : false;
if (hasAudio)
- {
+ {
mConversation->setAudio(true);
- }
-
- mConversation->displayAudioIcon();
+ if (msgProperty & EPreviewProtectedAudio)
+ {
+ mConversation->displayAudioIcon();
+ }
+ else if (msgProperty & EPreviewCorruptedAudio)
+ {
+ mConversation->displayAudioIcon(CORRUPTED_ICON);
+ }
+ else
+ {
+ mConversation->displayAudioIcon();
+ }
+ }
int priority = index.data(MessagePriority).toInt();
mConversation->setPriority(priority);
@@ -331,6 +361,7 @@
mConversation->setAudio(true);
mConversation->displayAudioIcon();
mConversation->setSubject(LOC_RINGING_TONE);
+ mConversation->setBodyText(bodyText);
}
else if (messageSubType == ConvergedMessage::VCard)
{
@@ -380,8 +411,8 @@
//---------------------------------------------------------------
bool MsgConversationViewItem::containsPoint(const QPointF& point)
{
- return mConversation->boundingRect().
- contains(mConversation->mapFromScene(point));
+ return mConversation->boundingRect(). contains(mConversation->mapFromScene(
+ point));
}
//---------------------------------------------------------------
@@ -391,6 +422,23 @@
void MsgConversationViewItem::setIncoming(bool incoming)
{
mIncoming = incoming;
+
+ if (mIncoming)
+ {
+ HbStyle::setItemName(mOutgoingMsgStateIconItem, "");
+ mOutgoingMsgStateIconItem->setVisible(false);
+ HbStyle::setItemName(mIncomingMsgStateIconItem, "msgStateIconIncoming");
+ mIncomingMsgStateIconItem->setIcon(HbIcon());
+ mIncomingMsgStateIconItem->setVisible(false);
+ }
+ else
+ {
+ HbStyle::setItemName(mIncomingMsgStateIconItem, "");
+ mIncomingMsgStateIconItem->setVisible(false);
+ HbStyle::setItemName(mOutgoingMsgStateIconItem, "msgStateIconOutgoing");
+ mOutgoingMsgStateIconItem->setIcon(HbIcon());
+ mOutgoingMsgStateIconItem->setVisible(false);
+ }
}
//---------------------------------------------------------------
@@ -408,51 +456,52 @@
//---------------------------------------------------------------
void MsgConversationViewItem::setMessageStateIcon(int messageState)
{
- HbIconAnimator& iconAnimator = mMessageStateIconItem->animator();
- HbIconAnimationManager* iconAnimationManager = HbIconAnimationManager::global();
+ HbIconAnimator& iconAnimator = mOutgoingMsgStateIconItem->animator();
+ HbIconAnimationManager* iconAnimationManager =
+ HbIconAnimationManager::global();
switch (messageState)
{
case ConvergedMessage::Waiting:
case ConvergedMessage::Scheduled:
case ConvergedMessage::Sending:
- {
- bool defined = iconAnimationManager->addDefinitionFile(ANIMATION_FILE);
- HbIcon animIcon;
+ {
+ bool defined = iconAnimationManager->addDefinitionFile(
+ ANIMATION_FILE);
+ HbIcon animIcon;
animIcon.setIconName(ANIMATION_ICON_NAME);
- QSizeF size = mMessageStateIconItem->size();
- mMessageStateIconItem->setIcon(animIcon);
- mMessageStateIconItem->setVisible(true);
+ QSizeF size = mOutgoingMsgStateIconItem->size();
+ mOutgoingMsgStateIconItem->setIcon(animIcon);
+ mOutgoingMsgStateIconItem->setVisible(true);
iconAnimator.startAnimation();
- repolish();
break;
}
case ConvergedMessage::Suspended:
{
- iconAnimator.stopAnimation();
- mMessageStateIconItem->setIcon(MSG_OUTBOX_ICON);
- mMessageStateIconItem->setVisible(true);
- break;
-
+ iconAnimator.stopAnimation();
+ mOutgoingMsgStateIconItem->setIcon(MSG_OUTBOX_ICON);
+ mOutgoingMsgStateIconItem->setVisible(true);
+ break;
+
}
case ConvergedMessage::Resend:
{
iconAnimator.stopAnimation();
- mMessageStateIconItem->setIcon(MSG_OUTBOX_ICON);
- mMessageStateIconItem->setVisible(true);
+ mOutgoingMsgStateIconItem->setIcon(MSG_OUTBOX_ICON);
+ mOutgoingMsgStateIconItem->setVisible(true);
break;
}
case ConvergedMessage::Failed:
{
iconAnimator.stopAnimation();
- mMessageStateIconItem->setIcon(MSG_FAIL_ICON);
- mMessageStateIconItem->setVisible(true);
+ mOutgoingMsgStateIconItem->setIcon(MSG_FAIL_ICON);
+ mOutgoingMsgStateIconItem->setVisible(true);
break;
}
case ConvergedMessage::Unknown:
default:
{
iconAnimator.stopAnimation();
- mMessageStateIconItem->setVisible(false);
+ mOutgoingMsgStateIconItem->setVisible(false);
break;
}
}
@@ -465,28 +514,29 @@
void MsgConversationViewItem::setNotificationStateIcon(int notificationState)
{
- HbIconAnimator& iconAnimator = mMessageStateIconItem->animator();
- HbIconAnimationManager* iconAnimationManager = HbIconAnimationManager::global();
+ HbIconAnimator& iconAnimator = mIncomingMsgStateIconItem->animator();
+ HbIconAnimationManager* iconAnimationManager =
+ HbIconAnimationManager::global();
switch (notificationState)
{
case ConvergedMessage::NotifRetrieving:
case ConvergedMessage::NotifWaiting:
{
//TODO: Temp icon until official icons are received
- bool defined = iconAnimationManager->addDefinitionFile(ANIMATION_FILE);
+ bool defined = iconAnimationManager->addDefinitionFile(
+ ANIMATION_FILE);
HbIcon animIcon;
animIcon.setIconName(ANIMATION_ICON_NAME);
- QSizeF size = mMessageStateIconItem->size();
- mMessageStateIconItem->setIcon(animIcon);
- mMessageStateIconItem->setVisible(true);
+ QSizeF size = mIncomingMsgStateIconItem->size();
+ mIncomingMsgStateIconItem->setIcon(animIcon);
+ mIncomingMsgStateIconItem->setVisible(true);
iconAnimator.startAnimation();
- repolish();
break;
}
default:
{
iconAnimator.stopAnimation();
- mMessageStateIconItem->setVisible(false);
+ mIncomingMsgStateIconItem->setVisible(false);
break;
}
}
@@ -501,4 +551,41 @@
mConversation->pressStateChanged(pressed, animate);
}
+//---------------------------------------------------------------
+// MsgConversationViewItem::init
+// @see header file
+//---------------------------------------------------------------
+void MsgConversationViewItem::init()
+{
+ mConversation = new MsgConversationWidget(this);
+ HbStyle::setItemName(mConversation, "msgconvwidget");
+
+ mIncomingMsgStateIconItem = new HbIconItem(this);
+ HbStyle::setItemName(mIncomingMsgStateIconItem, "msgStateIconIncoming");
+
+ mOutgoingMsgStateIconItem = new HbIconItem(this);
+ HbStyle::setItemName(mOutgoingMsgStateIconItem, "msgStateIconOutgoing");
+
+ HbMainWindow *mainWindow = hbInstance->allMainWindows()[0];
+
+ connect(mainWindow, SIGNAL(orientationChanged(Qt::Orientation)), this,
+ SLOT(orientationchanged(Qt::Orientation)), Qt::UniqueConnection);
+
+ // Force polish to get all the sub-item properties right.
+ polishEvent();
+}
+
+//---------------------------------------------------------------
+// MsgConversationViewItem::orientationchanged
+// @see header file
+//---------------------------------------------------------------
+void MsgConversationViewItem::orientationchanged(Qt::Orientation orientation)
+{
+ QDEBUG_WRITE("MsgConversationViewItem:orientationchanged start.")
+
+ repolish();
+
+ QDEBUG_WRITE("MsgConversationViewItem:orientationchanged end.")
+}
+
// EOF
--- a/messagingapp/msgui/conversationview/src/msgconversationwidget.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/conversationview/src/msgconversationwidget.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -32,6 +32,8 @@
#include <QBool>
#include <QCoreApplication>
#include <HbEvent>
+#include <HbMainWindow>
+#include <HbInstance>
#include "debugtraces.h"
@@ -42,9 +44,7 @@
const QString MSG_HIGH_PRIORITY_ICON("qtg_small_priority_high");
const QString MSG_LOW_PRIORITY_ICON("qtg_small_priority_low");
const QString MSG_ATTACH_ICON("qtg_small_attachment");
-const QString MSG_AUDIO_ICON("qtg_large_music_player");
-const QString MSG_VIDEO_ICON("qtg_large_video_player");
-const QString MSG_AUDIO_PLAY_ICON("qtg_large_music_player");
+const QString MSG_AUDIO_PLAY_ICON("qtg_small_sound");
// Frames
@@ -56,9 +56,6 @@
const QString CV_SENT_HIGHLIGHT_FR("qtg_fr_convlist_sent_highlight");
const QString NEW_ITEM_FRAME("qtg_fr_list_new_item");
-//selecet preview-icon query
-_LIT(KSelectPreviewIconStmt,"SELECT message_id, preview_icon FROM conversation_messages WHERE message_id = :message_id ");
-
//---------------------------------------------------------------
// MsgConversationWidget::MsgConversationWidget
// @see header file
@@ -118,7 +115,27 @@
mNewFrameItem = new HbFrameItem(this);
mNewFrameItem->frameDrawer().setFrameType(HbFrameDrawer::ThreePiecesVertical);
HbStyle::setItemName(mNewFrameItem, "newItemIcon");
+ mSubjectTextItem = new HbTextItem(this);
+ mSubjectTextItem->setTextWrapping(Hb::TextWordWrap);
+ HbStyle::setItemName(mSubjectTextItem, "subject");
+ mBodyTextItem = new HbTextItem(this);
+ mBodyTextItem->setTextWrapping(Hb::TextWordWrap);
+ HbStyle::setItemName(mBodyTextItem, "bodyText");
+ mPreviewIconItem = new HbIconItem(this);
+ HbStyle::setItemName(mPreviewIconItem, "preview");
+ mPriorityIconItem = new HbIconItem(this);
+ HbStyle::setItemName(mPriorityIconItem, "priority");
+ mAttachmentIconItem = new HbIconItem(this);
+ HbStyle::setItemName(mAttachmentIconItem, "attachment");
+ mPlayIconItem = new HbIconItem(this);
+ HbStyle::setItemName(mPlayIconItem, "playIcon");
+ mTimeStampTextItem = new HbTextItem(this);
+ HbStyle::setItemName(mTimeStampTextItem, "timeStamp");
+ HbMainWindow *mainWindow = hbInstance->allMainWindows()[0];
+ connect(mainWindow, SIGNAL(orientationChanged(Qt::Orientation)), this,
+ SLOT(orientationchanged(Qt::Orientation)),Qt::UniqueConnection);
+ polishEvent();
}
//---------------------------------------------------------------
@@ -127,11 +144,6 @@
//---------------------------------------------------------------
void MsgConversationWidget::setSubject(const QString &subject)
{
- if (!mSubjectTextItem)
- {
- mSubjectTextItem = new HbTextItem(this);
- mSubjectTextItem->setTextWrapping(Hb::TextWordWrap);
- }
HbStyle::setItemName(mSubjectTextItem, "subject");
mSubjectTextItem->setText(subject);
mSubjectTextItem->show();
@@ -143,11 +155,6 @@
//---------------------------------------------------------------
void MsgConversationWidget::setBodyText(const QString &body)
{
- if (!mBodyTextItem)
- {
- mBodyTextItem = new HbTextItem(this);
- mBodyTextItem->setTextWrapping(Hb::TextWordWrap);
- }
HbStyle::setItemName(mBodyTextItem, "bodyText");
mBodyTextItem->setText(body);
@@ -155,107 +162,23 @@
}
//---------------------------------------------------------------
-// MsgConversationWidget::setPreviewIconPath
+// MsgConversationWidget::setPreviewIcon
// @see header file
//---------------------------------------------------------------
-void MsgConversationWidget::setPreviewIconPath(const QString &filePath,int msgId)
+void MsgConversationWidget::setPreviewIcon(HbIcon& icon)
{
- if (!mPreviewIconItem)
- {
- mPreviewIconItem = new HbIconItem(this);
- mPreviewIconItem->setAlignment(Qt::AlignHCenter | Qt::AlignTop);
- }
+ QCRITICAL_WRITE("MsgConversationWidget::setPreviewIcon start.")
+
HbStyle::setItemName(mPreviewIconItem, "preview");
- //sql query to get preview-icon from DB
- TBool isOpen = EFalse;
- bool imagePreviewed = false;
-
- //get DB handle and check if it is open
- RSqlDatabase& sqlDb = ConversationsEngine::instance()->getDBHandle(isOpen);
- if (isOpen)
- {
- RSqlStatement sqlSelectPreviewIconStmt;
- TInt err = sqlSelectPreviewIconStmt.Prepare(sqlDb,
- KSelectPreviewIconStmt);
-
- QCRITICAL_WRITE_FORMAT("Error from Prepare()", err)
-
- if (err == KErrNone)
- {
- //msg_id
- TInt msgIdIndex = sqlSelectPreviewIconStmt.ParameterIndex(
- _L(":message_id"));
- sqlSelectPreviewIconStmt.BindInt(msgIdIndex, msgId);
-
- // get preview-icon from DB
- err = sqlSelectPreviewIconStmt.Next();
- QCRITICAL_WRITE_FORMAT("Error from Next()", err)
-
- if (err == KSqlAtRow)
- {
- TInt previewIconIndex = sqlSelectPreviewIconStmt.ColumnIndex(
- _L("preview_icon"));
-
- RSqlColumnReadStream stream;
-
- //Get data from binary column BLOB
- err = stream.ColumnBinary(sqlSelectPreviewIconStmt,
- previewIconIndex);
-
- QCRITICAL_WRITE_FORMAT("Error from ColumnBinary()", err)
-
- if (err == KErrNone)
- {
- CFbsBitmap *bitmap = new CFbsBitmap;
- TRAPD(err,bitmap->InternalizeL(stream));
- QCRITICAL_WRITE_FORMAT("Error from bitmap InternalizeL()", err)
- //convert bitmap to pixmap
- if (err == KErrNone)
- {
- TSize size = bitmap->SizeInPixels();
- int bytesPerLine = bitmap->ScanLineLength(size.iWidth,
- bitmap->DisplayMode());
- const uchar* dataPtr =
- (const uchar*) bitmap->DataAddress();
-
- QPixmap pixmap = QPixmap::fromImage(QImage(dataPtr,
- size.iWidth, size.iHeight, bytesPerLine,
- QImage::Format_RGB16));
+ mPreviewIconItem->setIcon(icon);
+ mPreviewIconItem->setPreferredSize(icon.size());
+ mPreviewIconItem->show();
- mPreviewIconItem->setIcon(HbIcon(pixmap));
- mPreviewIconItem->setPreferredSize(pixmap.size());
- mPreviewIconItem->setEnabled(true);
- mPreviewIconItem->show();
- imagePreviewed = true;
-
- QCRITICAL_WRITE("Bitmap Conversion completed")
- }
- //remove bitmap
- delete bitmap;
- }
- //close stream
- stream.Close();
- }
- }
- sqlSelectPreviewIconStmt.Close();
- }
+ QCRITICAL_WRITE("MsgConversationWidget::setPreviewIcon end.")
+}
- // if not found in db, set from file path
- if(!imagePreviewed)
- {
- QPixmap pixmap(filePath);
- QPixmap scaledPixmap =pixmap.scaled(100,100,Qt::IgnoreAspectRatio);
- mPreviewIconItem->setIcon(HbIcon(scaledPixmap));
- mPreviewIconItem->setPreferredSize(scaledPixmap.size());
- mPreviewIconItem->setEnabled(true);
- mPreviewIconItem->show();
- }
-
- QCRITICAL_WRITE("MsgConversationWidget::setPreviewIconPath end.")
-
-}
//---------------------------------------------------------------
// MsgConversationWidget::setPriority
@@ -267,10 +190,6 @@
if (priority)
{
- if (!mPriorityIconItem)
- {
- mPriorityIconItem = new HbIconItem(this);
- }
HbStyle::setItemName(mPriorityIconItem, "priority");
if (ConvergedMessage::Low == priority)
{
@@ -303,10 +222,6 @@
if (attachment)
{
- if (!mAttachmentIconItem)
- {
- mAttachmentIconItem = new HbIconItem(this);
- }
HbStyle::setItemName(mAttachmentIconItem, "attachment");
mAttachmentIconItem->setIcon(HbIcon(MSG_ATTACH_ICON));
mAttachmentIconItem->show();
@@ -366,27 +281,30 @@
{
if (hasAudio())
{
- if (hasImage())
+ if (!hasImage())
{
- if (!mPlayIconItem)
+ HbStyle::setItemName(mPreviewIconItem, "preview");
+ if(iconPath.isEmpty())
{
- mPlayIconItem = new HbIconItem(this);
+ qreal iconSize = 0;
+ style()->parameter("hb-param-graphic-size-primary-small",iconSize);
+ HbIcon icon(MSG_AUDIO_PLAY_ICON);
+ icon.setHeight(iconSize);
+ icon.setWidth(iconSize);
+ mPreviewIconItem->setIcon(icon);
}
- HbStyle::setItemName(mPlayIconItem, "playIcon");
- mPlayIconItem->setIconName(iconPath.isEmpty() ? MSG_AUDIO_PLAY_ICON : iconPath);
- mPlayIconItem->show();
+ else
+ {
+ mPreviewIconItem->setIconName(iconPath);
+ }
+ mPreviewIconItem->show();
}
else
{
- if (!mAudioIconItem)
- {
- mAudioIconItem = new HbIconItem(this);
- }
- HbStyle::setItemName(mAudioIconItem, "audioIcon");
- mAudioIconItem->setIconName(iconPath.isEmpty() ? MSG_AUDIO_PLAY_ICON : iconPath);
- mAudioIconItem->show();
-
- }
+ HbStyle::setItemName(mPlayIconItem, "playIcon");
+ mPlayIconItem->setIconName(iconPath.isEmpty() ? MSG_AUDIO_PLAY_ICON : iconPath);
+ mPlayIconItem->show();
+ }
}
}
@@ -397,18 +315,6 @@
void MsgConversationWidget::setVideo(bool video)
{
mHasVideo = video;
-
- if (video)
- {
- if (!mVideoIconItem)
- {
- mVideoIconItem = new HbIconItem(this);
- }
- HbStyle::setItemName(mVideoIconItem, "video");
- mVideoIconItem->setIcon(HbIcon(MSG_VIDEO_ICON));
- mVideoIconItem->show();
-
- }
}
//---------------------------------------------------------------
@@ -463,6 +369,8 @@
void MsgConversationWidget::setUnread(bool unread)
{
mUnread = unread;
+ // Needed for colour group changes to be visible
+ QCoreApplication::postEvent(this, new HbEvent(HbEvent::ThemeChanged));
}
//---------------------------------------------------------------
@@ -521,6 +429,8 @@
case ConvergedMessage::SentState:
{
mSendingState = Sent;
+ // Needed for colour group changes to be visible
+ QCoreApplication::postEvent(this, new HbEvent(HbEvent::ThemeChanged));
break;
}
case ConvergedMessage::Sending:
@@ -608,10 +518,6 @@
//---------------------------------------------------------------
void MsgConversationWidget::setTimeStamp(const QString &timeStamp)
{
- if(!mTimeStampTextItem)
- {
- mTimeStampTextItem = new HbTextItem(this);
- }
HbStyle::setItemName(mTimeStampTextItem, "timeStamp");
mTimeStampTextItem->setText(timeStamp);
@@ -657,15 +563,7 @@
}
else
{
- if(mSendingState == Sending || mSendingState == Pending ||
- mSendingState == Unknown || mSendingState == Failed)
- {
- mBubbleFrameItem->frameDrawer().setFrameGraphicsName(CV_SENT_HIGHLIGHT_FR);
- }
- else
- {
mBubbleFrameItem->frameDrawer().setFrameGraphicsName(CV_SENT_NORMAL_FR);
- }
}
}
@@ -698,7 +596,11 @@
}
}
- void MsgConversationWidget::resetProperties()
+//---------------------------------------------------------------
+// MsgConversationWidget::resetProperties
+// @see header file
+//---------------------------------------------------------------
+void MsgConversationWidget::resetProperties()
{
mHasAttachment = false;
mHasImage = false;
@@ -740,17 +642,7 @@
HbStyle::setItemName(mPriorityIconItem, "");
mPriorityIconItem->hide();
}
-
- if(mAudioIconItem){
- HbStyle::setItemName(mAudioIconItem, "");
- mAudioIconItem->hide();
- }
-
- if(mVideoIconItem){
- HbStyle::setItemName(mVideoIconItem, "");
- mVideoIconItem->hide();
- }
-
+
if(mPlayIconItem){
HbStyle::setItemName(mPlayIconItem, "");
mPlayIconItem->hide();
@@ -761,11 +653,68 @@
mPreviewIconItem->hide();
}
}
+
+//---------------------------------------------------------------
+// MsgConversationWidget::orientationchanged
+// @see header file
+//---------------------------------------------------------------
+void MsgConversationWidget::orientationchanged(Qt::Orientation orientation)
+{
+ QDEBUG_WRITE("MsgConversationWidget:orientationchanged start.")
+
+ repolish();
- void MsgConversationWidget::repolishWidget()
+ QDEBUG_WRITE("MsgConversationWidget:orientationchanged end.")
+}
+
+//---------------------------------------------------------------
+// MsgConversationWidget::polish
+// @see header file
+//---------------------------------------------------------------
+void MsgConversationWidget::polish(HbStyleParameters ¶ms)
+{
+ QString bubbleOrig = HbStyle::itemName(mBubbleFrameItem);
+ QString newItemIconOrig = HbStyle::itemName(mNewFrameItem);
+ QString subjectOrig = HbStyle::itemName(mSubjectTextItem);
+ QString bodyTextOrig = HbStyle::itemName(mBodyTextItem);
+ QString previewOrig = HbStyle::itemName(mPreviewIconItem);
+ QString priorityOrig = HbStyle::itemName(mPriorityIconItem);
+ QString attachmentOrig = HbStyle::itemName(mAttachmentIconItem);
+ QString timeStampOrig = HbStyle::itemName(mTimeStampTextItem);
+ QString playIconOrig = HbStyle::itemName(mPlayIconItem);
+
+ // Make sure that all the sub-items are polished in every polish.
+ HbStyle::setItemName(mBubbleFrameItem, "bubble");
+ HbStyle::setItemName(mNewFrameItem, "newItemIcon");
+ HbStyle::setItemName(mSubjectTextItem, "subject");
+ HbStyle::setItemName(mBodyTextItem, "bodyText");
+ HbStyle::setItemName(mPreviewIconItem, "preview");
+ HbStyle::setItemName(mPriorityIconItem, "priority");
+ HbStyle::setItemName(mAttachmentIconItem, "attachment");
+ HbStyle::setItemName(mTimeStampTextItem, "timeStamp");
+ HbStyle::setItemName(mPlayIconItem, "playIcon");
+
+ HbWidget::polish(params);
+
+ HbStyle::setItemName(mBubbleFrameItem, bubbleOrig);
+ HbStyle::setItemName(mNewFrameItem, newItemIconOrig);
+ HbStyle::setItemName(mSubjectTextItem, subjectOrig);
+ HbStyle::setItemName(mBodyTextItem, bodyTextOrig);
+ HbStyle::setItemName(mPreviewIconItem, previewOrig);
+ HbStyle::setItemName(mPriorityIconItem, priorityOrig);
+ HbStyle::setItemName(mAttachmentIconItem, attachmentOrig);
+ HbStyle::setItemName(mTimeStampTextItem, timeStampOrig);
+ HbStyle::setItemName(mPlayIconItem, playIconOrig);
+}
+
+//---------------------------------------------------------------
+// MsgConversationWidget::repolishWidget
+// @see header file
+//---------------------------------------------------------------
+void MsgConversationWidget::repolishWidget()
{
- QCoreApplication::postEvent(this, new HbEvent(HbEvent::ThemeChanged));
repolish();
}
-
+
+
// EOF
--- a/messagingapp/msgui/conversationview/src/msgeditorwidget.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/conversationview/src/msgeditorwidget.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -31,14 +31,14 @@
#include <QTimer>
#include "unieditorpluginloader.h"
#include "unieditorplugininterface.h"
-#include "unisendingsettings.h"
-#include "unieditorgenutils.h"
+#include "UniSendingSettings.h"
+#include "UniEditorGenUtils.h"
#include "debugtraces.h"
// LOCAL CONSTANTS
const QString SEND_ICON("qtg_mono_send");
-const QString BACKGROUND("qtg_fr_input_bg");
+const QString BACKGROUND("qtg_fr_input_v_bg");
const QString BACKGROUND_FRAME("qtg_fr_btn_normal");
const QString SEND_BUTTON_NORMAL("qtg_fr_input_btn_function_normal");
@@ -46,8 +46,8 @@
const QString SEND_BUTTON_DISABLED("qtg_fr_input_btn_function_disabled");
#define LOC_SMS_CHAR_LIMIT_REACHED hbTrId("txt_messaging_dialog_sms_character_count_exceeded")
-#define LOC_DIALOG_OK hbTrId("txt_common_button_ok")
-#define LOC_BUTTON_CANCEL hbTrId("txt_common_button_cancel")
+#define LOC_HINT_TEXT hbTrId("txt_messaging_formlabel_enter_message_here")
+
const TInt KShowCounterLimit = 10;
@@ -83,14 +83,15 @@
mMsgEditor->setMaxRows(3); // NOTE: Don't remove this line.
HbStyle::setItemName(mMsgEditor, "msgEditor");
- mSendButton = new HbPushButton(this);
- HbStyle::setItemName(mSendButton, "sendButton");
+ mSendButton = new HbPushButton(this);
+ HbStyle::setItemName(mSendButton, "sendButton");
+ mSendButton->setEnabled(false);
+
+ HbFrameItem* backGround = new HbFrameItem(this);
+ backGround->frameDrawer().setFrameType(HbFrameDrawer::NinePieces);
+ mSendButton->setBackgroundItem(backGround);
+ updateButtonBackground(SEND_BUTTON_DISABLED);
mSendButton->setIcon(HbIcon(SEND_ICON));
- mSendButton->setEnabled(false);
- HbFrameDrawer* drawer = new HbFrameDrawer(this);
- drawer->setFrameType(HbFrameDrawer::NinePieces);
- mSendButton->setFrameBackground(drawer);
- updateButtonBackground(SEND_BUTTON_DISABLED);
mCharCounter = new HbTextItem(this);
HbStyle::setItemName(mCharCounter, "charCounter");
@@ -252,9 +253,8 @@
mSmsCharLimitReached = false;
HbMessageBox::question(LOC_SMS_CHAR_LIMIT_REACHED,
- this,SLOT(onSmsCharLimitReached(HbAction*)),
- LOC_DIALOG_OK,
- LOC_BUTTON_CANCEL);
+ this,SLOT(onSmsCharLimitReached(HbAction*)),
+ HbMessageBox::Ok | HbMessageBox::Cancel);
}
@@ -282,14 +282,15 @@
// MsgEditor::updateButtonBackground
// @see header
//---------------------------------------------------------------
-void MsgEditorWidget::updateButtonBackground(const QString& bg)
- {
- HbFrameDrawer* drawer = mSendButton->frameBackground();
- if(drawer)
- {
- drawer->setFrameGraphicsName(bg);
- }
- }
+void MsgEditorWidget::updateButtonBackground(const QString& bg)
+ {
+ HbFrameItem* drawer = static_cast<HbFrameItem*>(mSendButton->backgroundItem());
+ if(drawer)
+ {
+ drawer->frameDrawer().setFrameGraphicsName(bg);
+ }
+ }
+
//---------------------------------------------------------------
// MsgEditor::onPressed
@@ -356,7 +357,7 @@
MsgEditor::MsgEditor(QGraphicsItem *parent)
:HbLineEdit(parent)
{
-
+ this->setPlaceholderText(LOC_HINT_TEXT);
}
//---------------------------------------------------------------
--- a/messagingapp/msgui/conversationview/src/msgviewutils.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/conversationview/src/msgviewutils.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -16,7 +16,7 @@
*/
#include "msgviewutils.h"
-#include "s60qconversions.h"
+#include <xqconversions.h>
// ---------------------------------------------------------------------------
// Constructor
@@ -44,7 +44,7 @@
RFs rfs;
RFile file;
- HBufC* fileName = S60QConversions::qStringToS60Desc(aFileName);
+ HBufC* fileName = XQConversions::qStringToS60Desc(aFileName);
//TODO: The RFs and RApaLsSession has to be connected 1's, not for every mms
@@ -69,7 +69,7 @@
rfs.Close();
apaSession.Close();
- return S60QConversions::s60Desc8ToQString(fileType);
+ return XQConversions::s60Desc8ToQString(fileType);
}
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/conversationview/tsrc/tsrc.pro Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,19 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+#
+
+SUBDIRS += unittests
+TEMPLATE = subdirs
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/conversationview/tsrc/unittests/unittest_msgconversationwidget/hbwidget.h Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ *
+ */
+
+#ifndef T_MSGCONVERSATIONVIEW_HBWIDGET_H
+#define T_MSGCONVERSATIONVIEW_HBWIDGET_H
+
+#include <QGraphicsWidget>
+
+/*
+ Mocked HbWidget class' external variables.
+ */
+extern QGraphicsWidget *hbwidget_parent;
+
+/*
+ Mocked HbWidget class.
+ */
+class HbWidget : public QGraphicsWidget
+{
+ Q_OBJECT
+public:
+ HbWidget(QGraphicsWidget *parent = NULL)
+ : QGraphicsWidget(hbwidget_parent = parent)
+ {
+ }
+ ~HbWidget()
+ {
+ }
+
+ void repolish() {}
+
+private:
+ Q_DISABLE_COPY(HbWidget)
+private:
+};
+
+#endif /* T_MSGCONVERSATIONVIEW_HBWIDGET_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/conversationview/tsrc/unittests/unittest_msgconversationwidget/msgconversationwidgetheaders.h Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,282 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ *
+ */
+
+#ifndef T_MSGCONVERSATIONWIDGET_HEADERS_H
+#define T_MSGCONVERSATIONWIDGET_HEADERS_H
+
+#include <QGraphicsWidget>
+
+#include "convergedmessage.h"
+#include "debugtraces.h"
+
+#define QCoreApplication QCoreApplication2
+
+/*
+ Mocked HbEvent class.
+ */
+class HbEvent : public QObject
+{
+ Q_OBJECT
+public:
+ enum Flags{
+ ThemeChanged
+ };
+
+ HbEvent(HbEvent::Flags flag)
+ {
+ }
+ ~HbEvent()
+ {
+ }
+
+private:
+ Q_DISABLE_COPY(HbEvent)
+};
+
+/*
+ Mocked QCoreApplication class.
+ */
+ class MSG;
+
+class QCoreApplication2 : public QObject
+{
+ Q_OBJECT
+public:
+ enum EventFilter
+ {
+ CodecForTr, UnicodeUTF8, DefaultCodec
+ };
+
+ QCoreApplication ( int & argc, char ** argv ) {}
+ ~QCoreApplication () {}
+ bool filterEvent ( void * message, long * result ) {}
+ virtual bool notify ( QObject * receiver, QEvent * event ) {}
+ EventFilter setEventFilter ( EventFilter filter ) {}
+ virtual bool winEventFilter ( MSG * msg, long * result ) {}
+ static void postEvent(QObject* ref, HbEvent* ob) {}
+
+private:
+ Q_DISABLE_COPY(QCoreApplication)
+};
+
+/*
+ Mocked Hb class.
+ */
+class Hb : public QObject
+{
+ Q_OBJECT
+public:
+ enum Flags{
+ TextCursorHidden
+
+ };
+
+ Hb(QObject *parent = NULL)
+ {
+ }
+ ~Hb()
+ {
+ }
+
+private:
+ Q_DISABLE_COPY(Hb)
+};
+
+/*
+ Mocked HbIcon class.
+ */
+class HbIcon
+{
+
+public:
+
+ HbIcon (const QString &iconName) {}
+ HbIcon (const QIcon &icon) {}
+ HbIcon (const HbIcon &other) {}
+
+ QSizeF size() const {}
+private:
+ //Q_DISABLE_COPY(HbIcon)
+};
+
+/*
+ Mocked HbIconItem class.
+ */
+
+class HbIconItem : public QGraphicsWidget
+{
+ Q_OBJECT
+public:
+ HbIconItem(QGraphicsWidget *parent = NULL)
+ {
+ }
+ ~HbIconItem()
+ {
+ }
+ void setAlignment(Qt::Alignment alignment) {}
+ void setIcon(const HbIcon &icon) {}
+ void setPreferredSize(QSizeF size) {}
+ void show(){}
+ void setIconName(const QString& name) {}
+private:
+ Q_DISABLE_COPY(HbIconItem)
+private:
+};
+
+/*
+ Mocked HbTextItem class.
+ */
+class HbTextItem : public QGraphicsWidget
+{
+ Q_OBJECT
+public:
+ HbTextItem(QGraphicsWidget *parent = NULL)
+ {
+ }
+ ~HbTextItem()
+ {
+ }
+ void setText(const QString &timeStamp){}
+ void show(){}
+private:
+ Q_DISABLE_COPY(HbTextItem)
+private:
+};
+
+/*
+ Mocked HbIconItem class.
+ */
+extern int hbtextedit_setsmileysenabled_callcount;
+extern int hbtextedit_setreadonly_callcount;
+
+class HbTextEdit : public QGraphicsWidget
+{
+ Q_OBJECT
+public:
+ HbTextEdit(QGraphicsWidget *parent = NULL)
+ {
+ }
+ ~HbTextEdit()
+ {
+ }
+ void setReadOnly(bool status) {
+ hbtextedit_setreadonly_callcount++;
+ }
+ void setBackgroundItem(int back) {}
+ void setSmileysEnabled(bool status) {
+ hbtextedit_setsmileysenabled_callcount++;
+ }
+ void setFlag(QGraphicsWidget::GraphicsItemFlag flag,bool status) {}
+ void setPlainText(QString text) {}
+ void show() {}
+ void setCursorVisibility(Hb::Flags flag) {}
+private:
+ Q_DISABLE_COPY(HbTextEdit)
+private:
+};
+
+/*
+ Mocked HbStyle class.
+ */
+extern int hbstyle_setitemname_callcount;
+
+class HbStyle: public QObject
+{
+ Q_OBJECT
+public:
+ enum{
+ P_None
+ };
+ HbStyle(QObject *parent = NULL)
+ {
+ }
+
+ void static setItemName(QGraphicsWidget* bubbleFrameItem, QString type)
+ {
+ hbstyle_setitemname_callcount++;
+ }
+
+private:
+ Q_DISABLE_COPY(HbStyle)
+};
+
+/*
+ Mocked HbFrameDrawer class.
+ */
+ extern int hbframedrawer_setframetype_callcount;
+
+class HbFrameDrawer: public QObject
+{
+ Q_OBJECT
+public:
+ enum PieceSize{
+ OnePieces,
+ TwoPieces,
+ ThreePiecesVertical,
+ FourPieces,
+ NinePieces
+ };
+ HbFrameDrawer(QObject *parent = NULL)
+ {
+ }
+ void setFrameType(HbFrameDrawer::PieceSize piece)
+ {
+ hbframedrawer_setframetype_callcount++;
+ }
+
+ void setFrameGraphicsName(const QString name) {}
+
+private:
+ Q_DISABLE_COPY(HbFrameDrawer)
+};
+
+/*
+ Mocked HbFrameItem class.
+ */
+extern int hbframeitem_framedrawer_callcount;
+
+class HbFrameItem : public QGraphicsWidget
+{
+ Q_OBJECT
+
+public:
+
+ HbFrameItem(QGraphicsWidget *parent = NULL)
+ {
+ }
+ ~HbFrameItem()
+ {
+ }
+
+HbFrameDrawer& frameDrawer ( )
+{
+ hbframeitem_framedrawer_callcount++;
+ return frameDraw;
+}
+
+private:
+ Q_DISABLE_COPY(HbFrameItem)
+private:
+ HbFrameDrawer frameDraw;
+};
+
+/*
+ Include the header file of the class under test.
+ */
+#include "../../../inc/msgconversationwidget.h"
+
+#endif /* T_MSGCONVERSATIONWIDGET_HEADERS_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/conversationview/tsrc/unittests/unittest_msgconversationwidget/unittest_msgconversationwidget.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,174 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ *
+ */
+
+#include <QtTest/QtTest>
+
+#include "msgconversationwidgetheaders.h"
+
+/*
+ Global variables that are used to control the test environment and/or
+ observe the individual tests. The naming convention can be described with
+ a ternary template
+
+ <class>_<member>[_<suffix>],
+
+ where <class> is the name of a mocked class, <member> is the name of a
+ variable, a function, or a property under consideration, and <suffix> is
+ an optional description. For example, if we wish to observe the number of
+ A::B() calls, we declare a global integer a_b_callcount and increment it
+ every time A::B() is called. The variable is also declared in the header
+ file of the mocked class by using the extern keyword. Typically, these
+ global variables are defined and reset in the unit-test class' helper
+ functions.
+
+ Mocked HbLabel class' global variables:
+
+ • argument of setNumber() and/or setPlainText(),
+ • number of setNumber() calls, and
+ • number of setPlaintText() calls.
+ */
+
+int hbframeitem_framedrawer_callcount;
+int hbstyle_setitemname_callcount;
+int hbframedrawer_setframetype_callcount;
+int hbtextedit_setreadonly_callcount;
+int hbtextedit_setsmileysenabled_callcount;
+const QString SUBJECT = "Subject";
+const QString BODYTEXT = "Body Text";
+
+QGraphicsWidget *hbwidget_parent;
+
+/*
+ The unit-test class. The class definition contains four helper functions
+ and a number of test functions. The helper functions are responsible for
+ the initialization and cleanup of the test environment, whereas the test
+ functions implement the actual testing. Although the test functions are
+ executed in the order they are defined, they should not depend on each
+ other in any way. In other words, one should be able to scramble the test
+ functions and still compile a working unit test.
+ */
+class TestMsgConversationWidget : public QObject
+{
+ Q_OBJECT
+private slots:
+ void initTestCase();
+ void cleanupTestCase();
+ void init();
+ void cleanup();
+ void testConstructor();
+ void testSetSubject();
+ void testSetBodyText();
+};
+
+/*
+ Initializes the test environment. This function is automatically invoked
+ before the first test function.
+ */
+void TestMsgConversationWidget::initTestCase()
+{
+}
+
+/*
+ Cleans up the test environment. This function is automatically invoked
+ after the last test function.
+ */
+void TestMsgConversationWidget::cleanupTestCase()
+{
+}
+
+/*
+ Performs initialization for a single test function. This function is
+ automatically invoked before each test function.
+ */
+void TestMsgConversationWidget::init()
+{
+ hbframeitem_framedrawer_callcount = 0;
+ hbstyle_setitemname_callcount = 0;
+ hbframedrawer_setframetype_callcount = 0;
+ hbtextedit_setsmileysenabled_callcount = 0;
+ hbtextedit_setreadonly_callcount = 0;
+ hbwidget_parent = NULL;
+}
+
+/*
+ Performs cleanup for a single test function. This function is auto-
+ matically invoked after each test function.
+ */
+void TestMsgConversationWidget::cleanup()
+{
+}
+
+/*
+ Test the constructor with different parent arguments:
+
+ 1. null parent (i.e. default parent argument) and
+ 2. non-null parent.
+ */
+void TestMsgConversationWidget::testConstructor()
+{
+ // 1.
+ MsgConversationWidget *widget = new MsgConversationWidget();
+ QVERIFY(!hbwidget_parent);
+ delete widget;
+
+ // 2.
+ MsgConversationWidget parent(NULL);
+ widget = new MsgConversationWidget(&parent);
+ QVERIFY(hbwidget_parent == &parent);
+
+ QVERIFY(6 == hbframeitem_framedrawer_callcount);
+ QVERIFY(6 == hbframedrawer_setframetype_callcount);
+ QVERIFY(6 == hbstyle_setitemname_callcount);
+
+ delete widget;
+}
+
+void TestMsgConversationWidget::testSetSubject()
+{
+ // 1.
+ MsgConversationWidget* myWidget = new MsgConversationWidget();
+ myWidget->setSubject(SUBJECT);
+ QVERIFY(1 == hbtextedit_setreadonly_callcount);
+ QVERIFY(1 == hbtextedit_setsmileysenabled_callcount);
+
+ delete myWidget;
+}
+
+void TestMsgConversationWidget::testSetBodyText()
+{
+ // 1.
+ MsgConversationWidget* myWidget = new MsgConversationWidget();
+ myWidget->setBodyText(BODYTEXT);
+ QVERIFY(1 == hbtextedit_setreadonly_callcount);
+ QVERIFY(1 == hbtextedit_setsmileysenabled_callcount);
+
+ delete myWidget;
+}
+
+/*
+ Implement a main() function that initializes the test environment,
+ executes all tests in the order they were defined, and finally cleans up
+ the test environment.
+ */
+QTEST_APPLESS_MAIN(TestMsgConversationWidget)
+
+/*
+ Because both the declaration and the implementation of our test class are
+ in a single .cpp file, we also need to include the generated moc file to
+ make Qt's introspection work.
+ */
+#include "unittest_msgconversationwidget.moc"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/conversationview/tsrc/unittests/unittest_msgconversationwidget/unittest_msgconversationwidget.pro Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,31 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+#
+
+CONFIG += qtestlib symbian_test
+INCLUDEPATH += .
+MMP_RULES += "USERINCLUDE . ../../../../../../inc"
+MOC_DIR = moc
+TARGET = unittest_msgconversationwidget
+TARGET.CAPABILITY = All -TCB
+TEMPLATE = app
+
+HEADERS += hbwidget.h \
+ msgconversationwidgetheaders.h \
+ ../../../inc/msgconversationwidget.h
+
+SOURCES += unittest_msgconversationwidget.cpp \
+ ../../../src/msgconversationwidget.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/conversationview/tsrc/unittests/unittests.pro Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,22 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+#
+
+CONFIG += symbian_test
+SUBDIRS += unittest_nmexampleadapterclass \
+ unittest_nmexamplesymbianclass \
+ unittest_nmexampleview
+TEMPLATE = subdirs
--- a/messagingapp/msgui/eabi/appengineu.def Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/eabi/appengineu.def Thu Jul 22 16:32:06 2010 +0100
@@ -2,40 +2,46 @@
_ZN19ConversationsEngine11getDBHandleERi @ 1 NONAME
_ZN19ConversationsEngine11qt_metacallEN11QMetaObject4CallEiPPv @ 2 NONAME
_ZN19ConversationsEngine11qt_metacastEPKc @ 3 NONAME
- _ZN19ConversationsEngine13resendMessageEi @ 4 NONAME
- _ZN19ConversationsEngine14deleteMessagesER5QListIiE @ 5 NONAME
- _ZN19ConversationsEngine14getDraftsModelEv @ 6 NONAME
- _ZN19ConversationsEngine15downloadMessageEi @ 7 NONAME
- _ZN19ConversationsEngine16getConversationsEx @ 8 NONAME
- _ZN19ConversationsEngine16markMessagesReadER5QListIiE @ 9 NONAME
- _ZN19ConversationsEngine16staticMetaObjectE @ 10 NONAME DATA 16
- _ZN19ConversationsEngine17getContactDetailsExR7QStringS1_ @ 11 NONAME
- _ZN19ConversationsEngine18clearConversationsEv @ 12 NONAME
- _ZN19ConversationsEngine19deleteConversationsEx @ 13 NONAME
- _ZN19ConversationsEngine19getStaticMetaObjectEv @ 14 NONAME
- _ZN19ConversationsEngine20markAsReadAndGetTypeEiRiS0_ @ 15 NONAME
- _ZN19ConversationsEngine20markConversationReadEx @ 16 NONAME
- _ZN19ConversationsEngine21getConversationsModelEv @ 17 NONAME
- _ZN19ConversationsEngine22deleteAllDraftMessagesEv @ 18 NONAME
- _ZN19ConversationsEngine22fetchMoreConversationsEv @ 19 NONAME
- _ZN19ConversationsEngine24conversationModelUpdatedEv @ 20 NONAME
- _ZN19ConversationsEngine24getCurrentConversationIdEv @ 21 NONAME
- _ZN19ConversationsEngine26conversationModelPopulatedEv @ 22 NONAME
- _ZN19ConversationsEngine26downloadOperationSupportedEi @ 23 NONAME
- _ZN19ConversationsEngine28emitConversationModelUpdatedEv @ 24 NONAME
- _ZN19ConversationsEngine28getConversationIdFromAddressE7QString @ 25 NONAME
- _ZN19ConversationsEngine28getConversationsSummaryModelEv @ 26 NONAME
- _ZN19ConversationsEngine30conversationListModelPopulatedEv @ 27 NONAME
- _ZN19ConversationsEngine30emitConversationModelPopulatedEv @ 28 NONAME
- _ZN19ConversationsEngine30getConversationIdFromContactIdEi @ 29 NONAME
- _ZN19ConversationsEngine34emitConversationListModelPopulatedEv @ 30 NONAME
- _ZN19ConversationsEngine8instanceEv @ 31 NONAME
- _ZN19ConversationsEngineC1EP7QObject @ 32 NONAME
- _ZN19ConversationsEngineC2EP7QObject @ 33 NONAME
- _ZN19ConversationsEngineD0Ev @ 34 NONAME
- _ZN19ConversationsEngineD1Ev @ 35 NONAME
- _ZN19ConversationsEngineD2Ev @ 36 NONAME
- _ZNK19ConversationsEngine10metaObjectEv @ 37 NONAME
- _ZTI19ConversationsEngine @ 38 NONAME
- _ZTV19ConversationsEngine @ 39 NONAME
+ _ZN19ConversationsEngine13getMsgSubTypeEi @ 4 NONAME
+ _ZN19ConversationsEngine13resendMessageEi @ 5 NONAME
+ _ZN19ConversationsEngine14deleteMessagesER5QListIiE @ 6 NONAME
+ _ZN19ConversationsEngine14getDraftsModelEv @ 7 NONAME
+ _ZN19ConversationsEngine15downloadMessageEi @ 8 NONAME
+ _ZN19ConversationsEngine16getConversationsEx @ 9 NONAME
+ _ZN19ConversationsEngine16markMessagesReadER5QListIiE @ 10 NONAME
+ _ZN19ConversationsEngine16staticMetaObjectE @ 11 NONAME DATA 16
+ _ZN19ConversationsEngine17getContactDetailsExR7QStringS1_ @ 12 NONAME
+ _ZN19ConversationsEngine18clearConversationsEv @ 13 NONAME
+ _ZN19ConversationsEngine19deleteConversationsEx @ 14 NONAME
+ _ZN19ConversationsEngine19getStaticMetaObjectEv @ 15 NONAME
+ _ZN19ConversationsEngine20markAsReadAndGetTypeEiRiS0_ @ 16 NONAME
+ _ZN19ConversationsEngine20markConversationReadEx @ 17 NONAME
+ _ZN19ConversationsEngine21getConversationsModelEv @ 18 NONAME
+ _ZN19ConversationsEngine22deleteAllDraftMessagesEv @ 19 NONAME
+ _ZN19ConversationsEngine22fetchMoreConversationsEv @ 20 NONAME
+ _ZN19ConversationsEngine24conversationModelUpdatedEv @ 21 NONAME
+ _ZN19ConversationsEngine24getCurrentConversationIdEv @ 22 NONAME
+ _ZN19ConversationsEngine26conversationModelPopulatedEv @ 23 NONAME
+ _ZN19ConversationsEngine26downloadOperationSupportedEi @ 24 NONAME
+ _ZN19ConversationsEngine28emitConversationModelUpdatedEv @ 25 NONAME
+ _ZN19ConversationsEngine28getConversationIdFromAddressE7QString @ 26 NONAME
+ _ZN19ConversationsEngine28getConversationsSummaryModelEv @ 27 NONAME
+ _ZN19ConversationsEngine30conversationListModelPopulatedEv @ 28 NONAME
+ _ZN19ConversationsEngine30emitConversationModelPopulatedEv @ 29 NONAME
+ _ZN19ConversationsEngine30getConversationIdFromContactIdEi @ 30 NONAME
+ _ZN19ConversationsEngine34emitConversationListModelPopulatedEv @ 31 NONAME
+ _ZN19ConversationsEngine8instanceEv @ 32 NONAME
+ _ZN19ConversationsEngineC1EP7QObject @ 33 NONAME
+ _ZN19ConversationsEngineC2EP7QObject @ 34 NONAME
+ _ZN19ConversationsEngineD0Ev @ 35 NONAME
+ _ZN19ConversationsEngineD1Ev @ 36 NONAME
+ _ZN19ConversationsEngineD2Ev @ 37 NONAME
+ _ZNK19ConversationsEngine10metaObjectEv @ 38 NONAME
+ _ZTI19ConversationsEngine @ 39 NONAME
+ _ZTV19ConversationsEngine @ 40 NONAME
+ _ZN19ConversationsEngine28conversationListEntryDeletedEi @ 41 NONAME
+ _ZN19ConversationsEngine37emitConversationListModelEntryDeletedEi @ 42 NONAME
+ _ZN19ConversationsEngine21conversationViewEmptyEv @ 43 NONAME
+ _ZN19ConversationsEngine31disableRegisterationForCVEventsEv @ 44 NONAME
+ _ZN19ConversationsEngine32emitOpenConversationViewIdUpdateEi @ 45 NONAME
--- a/messagingapp/msgui/eabi/conversationviewu.def Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/eabi/conversationviewu.def Thu Jul 22 16:32:06 2010 +0100
@@ -14,19 +14,20 @@
_ZN23MsgConversationBaseView21closeConversationViewEv @ 13 NONAME
_ZN23MsgConversationBaseView21doDelayedConstructionEv @ 14 NONAME
_ZN23MsgConversationBaseView22conversationViewClosedEv @ 15 NONAME
- _ZN23MsgConversationBaseView8handleOkERK8QVariant @ 16 NONAME
- _ZN23MsgConversationBaseView8initViewEv @ 17 NONAME
- _ZN23MsgConversationBaseView9setPSCVIdEb @ 18 NONAME
- _ZN23MsgConversationBaseViewC1EP13QGraphicsItem @ 19 NONAME
- _ZN23MsgConversationBaseViewC2EP13QGraphicsItem @ 20 NONAME
- _ZN23MsgConversationBaseViewD0Ev @ 21 NONAME
- _ZN23MsgConversationBaseViewD1Ev @ 22 NONAME
- _ZN23MsgConversationBaseViewD2Ev @ 23 NONAME
- _ZNK23MsgConversationBaseView10metaObjectEv @ 24 NONAME
- _ZTI23MsgConversationBaseView @ 25 NONAME
- _ZTV23MsgConversationBaseView @ 26 NONAME
- _ZThn16_N23MsgConversationBaseViewD0Ev @ 27 NONAME
- _ZThn16_N23MsgConversationBaseViewD1Ev @ 28 NONAME
- _ZThn8_N23MsgConversationBaseViewD0Ev @ 29 NONAME
- _ZThn8_N23MsgConversationBaseViewD1Ev @ 30 NONAME
+ _ZN23MsgConversationBaseView26handleConversationIdChangeEx @ 16 NONAME
+ _ZN23MsgConversationBaseView8handleOkERK8QVariant @ 17 NONAME
+ _ZN23MsgConversationBaseView8initViewEv @ 18 NONAME
+ _ZN23MsgConversationBaseView9setPSCVIdEb @ 19 NONAME
+ _ZN23MsgConversationBaseViewC1EP13QGraphicsItem @ 20 NONAME
+ _ZN23MsgConversationBaseViewC2EP13QGraphicsItem @ 21 NONAME
+ _ZN23MsgConversationBaseViewD0Ev @ 22 NONAME
+ _ZN23MsgConversationBaseViewD1Ev @ 23 NONAME
+ _ZN23MsgConversationBaseViewD2Ev @ 24 NONAME
+ _ZNK23MsgConversationBaseView10metaObjectEv @ 25 NONAME
+ _ZTI23MsgConversationBaseView @ 26 NONAME
+ _ZTV23MsgConversationBaseView @ 27 NONAME
+ _ZThn16_N23MsgConversationBaseViewD0Ev @ 28 NONAME
+ _ZThn16_N23MsgConversationBaseViewD1Ev @ 29 NONAME
+ _ZThn8_N23MsgConversationBaseViewD0Ev @ 30 NONAME
+ _ZThn8_N23MsgConversationBaseViewD1Ev @ 31 NONAME
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/eabi/msgaudiofetcheru.def Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,24 @@
+EXPORTS
+ _ZN19MsgAudioFetcherView11initToolBarEv @ 1 NONAME
+ _ZN19MsgAudioFetcherView11qt_metacallEN11QMetaObject4CallEiPPv @ 2 NONAME
+ _ZN19MsgAudioFetcherView11qt_metacastEPKc @ 3 NONAME
+ _ZN19MsgAudioFetcherView13enableToolBarEb @ 4 NONAME
+ _ZN19MsgAudioFetcherView14initMainWidgetEv @ 5 NONAME
+ _ZN19MsgAudioFetcherView16staticMetaObjectE @ 6 NONAME DATA 16
+ _ZN19MsgAudioFetcherView19getStaticMetaObjectEv @ 7 NONAME
+ _ZN19MsgAudioFetcherView19removeToolBarActionEv @ 8 NONAME
+ _ZN19MsgAudioFetcherView23on_leftAction_triggeredEv @ 9 NONAME
+ _ZN19MsgAudioFetcherView24on_rightAction_triggeredEv @ 10 NONAME
+ _ZN19MsgAudioFetcherViewC1ERK5QListI8QVariantE @ 11 NONAME
+ _ZN19MsgAudioFetcherViewC2ERK5QListI8QVariantE @ 12 NONAME
+ _ZN19MsgAudioFetcherViewD0Ev @ 13 NONAME
+ _ZN19MsgAudioFetcherViewD1Ev @ 14 NONAME
+ _ZN19MsgAudioFetcherViewD2Ev @ 15 NONAME
+ _ZNK19MsgAudioFetcherView10metaObjectEv @ 16 NONAME
+ _ZTI19MsgAudioFetcherView @ 17 NONAME
+ _ZTV19MsgAudioFetcherView @ 18 NONAME
+ _ZThn16_N19MsgAudioFetcherViewD0Ev @ 19 NONAME
+ _ZThn16_N19MsgAudioFetcherViewD1Ev @ 20 NONAME
+ _ZThn8_N19MsgAudioFetcherViewD0Ev @ 21 NONAME
+ _ZThn8_N19MsgAudioFetcherViewD1Ev @ 22 NONAME
+
--- a/messagingapp/msgui/eabi/msgsettingsu.def Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-EXPORTS
- _ZN14SettingsViewer11iAPSelectorEP11QStringList @ 1 NONAME
- _ZN14SettingsViewer11qt_metacallEN11QMetaObject4CallEiPPv @ 2 NONAME
- _ZN14SettingsViewer11qt_metacastEPKc @ 3 NONAME
- _ZN14SettingsViewer13changeServiceEv @ 4 NONAME
- _ZN14SettingsViewer13closeSettingsEv @ 5 NONAME
- _ZN14SettingsViewer13createMmsViewEv @ 6 NONAME
- _ZN14SettingsViewer13createSmsViewEv @ 7 NONAME
- _ZN14SettingsViewer14softkeyClickedEv @ 8 NONAME
- _ZN14SettingsViewer15openMmsSettingsEv @ 9 NONAME
- _ZN14SettingsViewer15openSmsSettingsEv @ 10 NONAME
- _ZN14SettingsViewer16staticMetaObjectE @ 11 NONAME DATA 16
- _ZN14SettingsViewer17changeAccessPointEi @ 12 NONAME
- _ZN14SettingsViewer17settingListClosedEv @ 13 NONAME
- _ZN14SettingsViewer19getStaticMetaObjectEv @ 14 NONAME
- _ZN14SettingsViewer20settingsViewerClosedEv @ 15 NONAME
- _ZN14SettingsViewer8initViewEv @ 16 NONAME
- _ZN14SettingsViewerC1EP13QGraphicsItem @ 17 NONAME
- _ZN14SettingsViewerC2EP13QGraphicsItem @ 18 NONAME
- _ZN14SettingsViewerD0Ev @ 19 NONAME
- _ZN14SettingsViewerD1Ev @ 20 NONAME
- _ZN14SettingsViewerD2Ev @ 21 NONAME
- _ZNK14SettingsViewer10metaObjectEv @ 22 NONAME
- _ZTI14SettingsViewer @ 23 NONAME
- _ZTV14SettingsViewer @ 24 NONAME
- _ZThn16_N14SettingsViewerD0Ev @ 25 NONAME
- _ZThn16_N14SettingsViewerD1Ev @ 26 NONAME
- _ZThn8_N14SettingsViewerD0Ev @ 27 NONAME
- _ZThn8_N14SettingsViewerD1Ev @ 28 NONAME
-
--- a/messagingapp/msgui/eabi/msguiutilsu.def Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/eabi/msguiutilsu.def Thu Jul 22 16:32:06 2010 +0100
@@ -23,23 +23,26 @@
_ZN12MsgMediaUtilC2Ev @ 22 NONAME
_ZN12MsgMediaUtilD1Ev @ 23 NONAME
_ZN12MsgMediaUtilD2Ev @ 24 NONAME
- _ZN19MmsConformanceCheck11qt_metacallEN11QMetaObject4CallEiPPv @ 25 NONAME
- _ZN19MmsConformanceCheck11qt_metacastEPKc @ 26 NONAME
- _ZN19MmsConformanceCheck16staticMetaObjectE @ 27 NONAME DATA 16
- _ZN19MmsConformanceCheck18checkModeForInsertERK7QStringb @ 28 NONAME
- _ZN19MmsConformanceCheck19getStaticMetaObjectEv @ 29 NONAME
- _ZN19MmsConformanceCheck19onDialogInsertMediaEP8HbAction @ 30 NONAME
- _ZN19MmsConformanceCheck21validateMsgForForwardEi @ 31 NONAME
- _ZN19MmsConformanceCheck9showPopupERK7QString @ 32 NONAME
- _ZN19MmsConformanceCheckC1Ev @ 33 NONAME
- _ZN19MmsConformanceCheckC2Ev @ 34 NONAME
- _ZN19MmsConformanceCheckD0Ev @ 35 NONAME
- _ZN19MmsConformanceCheckD1Ev @ 36 NONAME
- _ZN19MmsConformanceCheckD2Ev @ 37 NONAME
- _ZNK11MsgSendUtil10metaObjectEv @ 38 NONAME
- _ZNK19MmsConformanceCheck10metaObjectEv @ 39 NONAME
- _ZTI11MsgSendUtil @ 40 NONAME
- _ZTI19MmsConformanceCheck @ 41 NONAME
- _ZTV11MsgSendUtil @ 42 NONAME
- _ZTV19MmsConformanceCheck @ 43 NONAME
+ _ZN15MsgContactsUtil15copyVCardToTempERK7QString @ 25 NONAME
+ _ZN15MsgContactsUtil17launchVCardViewerERK7QString @ 26 NONAME
+ _ZN15MsgContactsUtil19deleteVCardFromTempERK7QString @ 27 NONAME
+ _ZN19MmsConformanceCheck11qt_metacallEN11QMetaObject4CallEiPPv @ 28 NONAME
+ _ZN19MmsConformanceCheck11qt_metacastEPKc @ 29 NONAME
+ _ZN19MmsConformanceCheck16staticMetaObjectE @ 30 NONAME DATA 16
+ _ZN19MmsConformanceCheck18checkModeForInsertERK7QStringb @ 31 NONAME
+ _ZN19MmsConformanceCheck19getStaticMetaObjectEv @ 32 NONAME
+ _ZN19MmsConformanceCheck19onDialogInsertMediaEP8HbAction @ 33 NONAME
+ _ZN19MmsConformanceCheck21validateMsgForForwardEi @ 34 NONAME
+ _ZN19MmsConformanceCheck9showPopupERK7QString @ 35 NONAME
+ _ZN19MmsConformanceCheckC1Ev @ 36 NONAME
+ _ZN19MmsConformanceCheckC2Ev @ 37 NONAME
+ _ZN19MmsConformanceCheckD0Ev @ 38 NONAME
+ _ZN19MmsConformanceCheckD1Ev @ 39 NONAME
+ _ZN19MmsConformanceCheckD2Ev @ 40 NONAME
+ _ZNK11MsgSendUtil10metaObjectEv @ 41 NONAME
+ _ZNK19MmsConformanceCheck10metaObjectEv @ 42 NONAME
+ _ZTI11MsgSendUtil @ 43 NONAME
+ _ZTI19MmsConformanceCheck @ 44 NONAME
+ _ZTV11MsgSendUtil @ 45 NONAME
+ _ZTV19MmsConformanceCheck @ 46 NONAME
--- a/messagingapp/msgui/eabi/unifiededitoru.def Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/eabi/unifiededitoru.def Thu Jul 22 16:32:06 2010 +0100
@@ -17,17 +17,17 @@
_ZN20MsgUnifiedEditorView11resizeEventEP25QGraphicsSceneResizeEvent @ 16 NONAME
_ZN20MsgUnifiedEditorView12createVCardsERK8QVariantR11QStringList @ 17 NONAME
_ZN20MsgUnifiedEditorView13addAttachmentERK7QString @ 18 NONAME
- _ZN20MsgUnifiedEditorView13audiosFetchedERK8QVariant @ 19 NONAME
- _ZN20MsgUnifiedEditorView13deleteMessageEv @ 20 NONAME
- _ZN20MsgUnifiedEditorView13fetchContactsEv @ 21 NONAME
- _ZN20MsgUnifiedEditorView13imagesFetchedERK8QVariant @ 22 NONAME
- _ZN20MsgUnifiedEditorView14addAttachmentsE11QStringList @ 23 NONAME
- _ZN20MsgUnifiedEditorView14changePriorityEv @ 24 NONAME
- _ZN20MsgUnifiedEditorView14forwardMessageER18ConvergedMessageIdN16ConvergedMessage11MessageTypeE @ 25 NONAME
- _ZN20MsgUnifiedEditorView14sendingOptionsEv @ 26 NONAME
- _ZN20MsgUnifiedEditorView15contactsFetchedERK8QVariant @ 27 NONAME
- _ZN20MsgUnifiedEditorView15populateContentERK5QListI8QVariantE @ 28 NONAME
- _ZN20MsgUnifiedEditorView16createTempFolderEv @ 29 NONAME
+ _ZN20MsgUnifiedEditorView13deleteMessageEv @ 19 NONAME
+ _ZN20MsgUnifiedEditorView13fetchContactsEv @ 20 NONAME
+ _ZN20MsgUnifiedEditorView13imagesFetchedERK8QVariant @ 21 NONAME
+ _ZN20MsgUnifiedEditorView14addAttachmentsE11QStringList @ 22 NONAME
+ _ZN20MsgUnifiedEditorView14changePriorityEv @ 23 NONAME
+ _ZN20MsgUnifiedEditorView14forwardMessageER18ConvergedMessageIdN16ConvergedMessage11MessageTypeE @ 24 NONAME
+ _ZN20MsgUnifiedEditorView15contactsFetchedERK8QVariant @ 25 NONAME
+ _ZN20MsgUnifiedEditorView15formatAddressesER5QListIP23ConvergedMessageAddressE @ 26 NONAME
+ _ZN20MsgUnifiedEditorView15populateContentERK5QListI8QVariantE @ 27 NONAME
+ _ZN20MsgUnifiedEditorView16createTempFolderEv @ 28 NONAME
+ _ZN20MsgUnifiedEditorView16enableSendButtonEb @ 29 NONAME
_ZN20MsgUnifiedEditorView16generateFileNameER7QString @ 30 NONAME
_ZN20MsgUnifiedEditorView16onContentChangedEv @ 31 NONAME
_ZN20MsgUnifiedEditorView16removeTempFolderEv @ 32 NONAME
@@ -44,7 +44,7 @@
_ZN20MsgUnifiedEditorView22deactivateInputBlockerEv @ 43 NONAME
_ZN20MsgUnifiedEditorView22setAttachOptionEnabledENS_16TBE_AttachOptionEb @ 44 NONAME
_ZN20MsgUnifiedEditorView23handleViewExtnActivatedEP16HbListWidgetItem @ 45 NONAME
- _ZN20MsgUnifiedEditorView25populateContentIntoEditorERK16ConvergedMessage @ 46 NONAME
+ _ZN20MsgUnifiedEditorView25populateContentIntoEditorERK16ConvergedMessageb @ 46 NONAME
_ZN20MsgUnifiedEditorView25removeAttachmentContainerEv @ 47 NONAME
_ZN20MsgUnifiedEditorView25updateOtherRecipientCountEb @ 48 NONAME
_ZN20MsgUnifiedEditorView4sendEv @ 49 NONAME
--- a/messagingapp/msgui/eabi/unifiedvieweru.def Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/eabi/unifiedvieweru.def Thu Jul 22 16:32:06 2010 +0100
@@ -8,11 +8,11 @@
_ZN13UnifiedViewer15handleFwdActionEv @ 7 NONAME
_ZN13UnifiedViewer15populateContentEibi @ 8 NONAME
_ZN13UnifiedViewer16staticMetaObjectE @ 9 NONAME DATA 16
- _ZN13UnifiedViewer18handleDeleteActionEv @ 10 NONAME
- _ZN13UnifiedViewer19getStaticMetaObjectEv @ 11 NONAME
- _ZN13UnifiedViewer21validateMsgForForwardEv @ 12 NONAME
- _ZN13UnifiedViewerC1EiP13QGraphicsItem @ 13 NONAME
- _ZN13UnifiedViewerC2EiP13QGraphicsItem @ 14 NONAME
+ _ZN13UnifiedViewer17onDialogDeleteMsgEP8HbAction @ 10 NONAME
+ _ZN13UnifiedViewer18handleDeleteActionEv @ 11 NONAME
+ _ZN13UnifiedViewer19getStaticMetaObjectEv @ 12 NONAME
+ _ZN13UnifiedViewerC1EiiP13QGraphicsItem @ 13 NONAME
+ _ZN13UnifiedViewerC2EiiP13QGraphicsItem @ 14 NONAME
_ZN13UnifiedViewerD0Ev @ 15 NONAME
_ZN13UnifiedViewerD1Ev @ 16 NONAME
_ZN13UnifiedViewerD2Ev @ 17 NONAME
@@ -23,5 +23,4 @@
_ZThn16_N13UnifiedViewerD1Ev @ 22 NONAME
_ZThn8_N13UnifiedViewerD0Ev @ 23 NONAME
_ZThn8_N13UnifiedViewerD1Ev @ 24 NONAME
- _ZN13UnifiedViewer17onDialogDeleteMsgEP8HbAction @ 25 NONAME
--- a/messagingapp/msgui/inc/msgbaseview.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/inc/msgbaseview.h Thu Jul 22 16:32:06 2010 +0100
@@ -45,7 +45,8 @@
UNIEDITOR,
UNIVIEWER,
MSGSETTINGS,
- SERVICE
+ SERVICE,
+ AUDIOFETCHER
};
/**
@@ -69,6 +70,10 @@
*/
void switchView(const QVariantList& data);
+ /**
+ * Forceful close of conversation view
+ */
+ void closeOpenConversationView();
};
--- a/messagingapp/msgui/msgapp/inc/draftslistview.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/msgapp/inc/draftslistview.h Thu Jul 22 16:32:06 2010 +0100
@@ -153,11 +153,6 @@
DRAFTS_EXTN = 0x00, CONVERSATIONS_EXTN = 0x01
};
- /**
- * Flag to track if item has been long pressed.
- * TODO: Remove it, once unique longpress and click event signal released in week16
- */
- bool mItemLongPressed;
};
#endif /* DRAFTS_LISTVIEW_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/msgapp/inc/msgactivityhandler.h Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ * Handles saving and opening activites.
+ *
+ */
+
+#ifndef MSGACTIVITYHANDLER_H_
+#define MSGACTIVITYHANDLER_H_
+
+#include <QObject>
+#include <QVariant>
+
+class MsgMainWindow;
+class MsgViewManager;
+
+class MsgActivityHandler: public QObject
+{
+Q_OBJECT
+
+public:
+ /**
+ * Constructor
+ */
+ MsgActivityHandler( QObject* parent = 0);
+
+ /**
+ * Destructor.
+ */
+ ~MsgActivityHandler();
+
+public slots:
+
+ /**
+ * Saves the current running activity.
+ */
+ void saveActivity();
+
+public:
+ /**
+ * Set the message main window pointer.
+ * @param mainWindow message main window.
+ */
+ void setMainWindow(MsgMainWindow* mainWindow);
+
+ /**
+ * Clears all saved messaging activities.
+ */
+ void clearActivities();
+
+ /**
+ * Parses the activity data.
+ * @param activitry data.
+ * @return valid message Id if its editor activity
+ * else Invalid message id( i.e. -1) for list view activity
+ */
+ int parseActivityData(const QVariant &activityData);
+
+private:
+ /**
+ * main window reference not owned.
+ */
+ MsgMainWindow* mMainWindow;
+};
+
+#endif /* MSGACTIVITYHANDLER_H_ */
--- a/messagingapp/msgui/msgapp/inc/msglistview.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/msgapp/inc/msglistview.h Thu Jul 22 16:32:06 2010 +0100
@@ -27,6 +27,8 @@
class HbListWidget;
class HbListWidgetItem;
class HbAction;
+class QGraphicsLinearLayout;
+
/**
* This class provides the message list view for the messaging application.
* Data source for this view is the conversation list model.
@@ -115,6 +117,13 @@
*/
void onDialogDeleteMsg(HbAction* action);
+ /**
+ * This slot is called when appengine emits the partialdeleteconversationlist event.
+ * This performs grab of the HbAbstractviewitem on which delete was called.
+ * @param conversation id of the item.
+ */
+ void enableListitem( int conversationId );
+
private:
/**
@@ -154,10 +163,10 @@
};
/**
- * Flag to track if item has been long pressed.
- * TODO: Remove it, once unique longpress and click event signal released in week16
- */
- bool mItemLongPressed;
+ * Main layout
+ * Own
+ */
+ QGraphicsLinearLayout *mMainLayout;
};
#endif // MSG_LIST_VIEW_H
--- a/messagingapp/msgui/msgapp/inc/msglistviewitem.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/msgapp/inc/msglistviewitem.h Thu Jul 22 16:32:06 2010 +0100
@@ -76,21 +76,26 @@
private:
/**
- * Returns the preview text based on message type, sub type and state.
+ * Create permanent items.
+ */
+ void initItems();
+
+ /**
+ * Returns the preview text based on message type, sub type.
+ * Also sets the indicator icon.
* @return QString
*/
- QString previewText(int msgType, int msgSubType, int msgState,int msgDirection);
+ QString defaultPreviewText(int msgType, int msgSubType);
/**
- * return the preview text based on state.
- * @return bool
+ * Sets the preview text and timestamp.
*/
- QString textBySendState(int sendState,int msgDirection);
-
+ void setTimestampAndPreviewText();
+
private:
/**
- * Property to change the color of text
- */
+ * Property to change the color of text
+ */
bool mUnReadMsg;
/**
--- a/messagingapp/msgui/msgapp/inc/msgmainwindow.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/msgapp/inc/msgmainwindow.h Thu Jul 22 16:32:06 2010 +0100
@@ -40,18 +40,23 @@
/**
* Constructor
*/
- MsgMainWindow(bool serviceRequest, QWidget *parent = 0);
+ MsgMainWindow(bool serviceRequest,
+ int activityMsgId = -1,
+ QWidget *parent = 0);
/**
* Destructor
*/
virtual ~MsgMainWindow();
-
+ /**
+ * Returns view manager.
+ */
+ MsgViewManager* viewManager();
private:
MsgServiceInterface* mMsgSI;
MsgSendServiceInterface* mMsgSendSI;
-
+ MsgViewManager* mViewManager;
};
#endif // MSG_MAIN_WINDOW_H
--- a/messagingapp/msgui/msgapp/inc/msgviewmanager.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/msgapp/inc/msgviewmanager.h Thu Jul 22 16:32:06 2010 +0100
@@ -20,6 +20,7 @@
#define MSGVIEWMANAGER_H_
#include <QObject>
+#include <QVariantList>
#include <QVariant>
class HbMainWindow;
@@ -32,6 +33,7 @@
class MsgSettingsView;
class HbAction;
class HbView;
+class MsgAudioFetcherView;
class MsgViewManager: public QObject
{
@@ -41,7 +43,8 @@
/**
* constructor
*/
- MsgViewManager(bool serviceRequest, HbMainWindow* mainWindow, QObject* parent = 0);
+ MsgViewManager(bool serviceRequest, HbMainWindow* mainWindow,
+ QObject* parent = 0,int activityMsgId = -1);
/**
* Destructor.
@@ -84,6 +87,15 @@
*/
void view(int msgId);
+ /**
+ * Returns the current active view.
+ */
+ int currentView();
+
+ /**
+ * Saves the content of editor or Cv to draft.
+ */
+ int saveContentToDraft();
private:
/**
* swiches back to last view after service request is complete.
@@ -158,6 +170,29 @@
* Appends the views to be deleted into a QList to be deleted when view is ready
*/
void appendViewToBeDeleted(HbView* view);
+
+ /**
+ * Save the editor data to be populated
+ * @param editorData QVariantList
+ */
+ void populateUniEditorAfterViewReady(const QVariantList& editorData);
+
+ /**
+ * Launch Audio fetcher view
+ */
+ void switchToAudioFetcher(const QVariantList& data);
+
+ /**
+ * opens unieditor as activity.
+ * @param activityMsgId activity msg id.
+ */
+ void openUniEditorActivity(int activityMsgId);
+
+ /**
+ * find contact id corresponding to given phone no.
+ * @param phoneNum
+ */
+ qint32 findContactId(const QString address);
private slots:
/**
@@ -191,6 +226,11 @@
* @param action selected action (yes or no).
*/
void onDialogSaveTone(HbAction* action);
+
+ /**
+ * When this slot is called the saved editor data is set to the editor
+ */
+ void populateUniEditorView();
private:
/**
@@ -207,6 +247,7 @@
UnifiedViewer* mUniViewer;
DraftsListView* mDraftsListView;
MsgSettingsView* mSettingsView;
+ MsgAudioFetcherView* mAudioFetcherView;
HbAction* mBackAction;
int mPreviousView;
@@ -218,6 +259,8 @@
QList<HbView*> mViewTobeDeleted;
HbView* mDummyview;
int mMessageId;
+
+ QVariantList mEditorData;
};
#endif /* MSGVIEWMANAGER_H_ */
--- a/messagingapp/msgui/msgapp/msgapp.pro Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/msgapp/msgapp.pro Thu Jul 22 16:32:06 2010 +0100
@@ -17,28 +17,31 @@
TEMPLATE = app
TARGET = messaging101
-ICON = resources/icons/qtg_large_message.svg
-
DEPENDPATH += . inc src ../inc
INCLUDEPATH += .
INCLUDEPATH += ../inc
INCLUDEPATH += ../../../inc
+INCLUDEPATH += ../msgaudiofetcher/inc
INCLUDEPATH += ../unifiededitor/inc
INCLUDEPATH += ../appengine/inc
INCLUDEPATH += ../conversationview/inc
INCLUDEPATH += ../unifiedviewer/inc
INCLUDEPATH += ../../msgsettings/settingsview/inc
+INCLUDEPATH += ../../smartmessaging/ringbc/inc
+
INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
-INCLUDEPATH += /ext/mw/qtextensions/qtmobileextensions/include
-INCLUDEPATH += ../../smartmessaging/ringbc/inc
CONFIG += hb service
QT += sql
-TARGET.UID3 = 0x2001FE79
-TARGET.CAPABILITY = All -TCB
-TARGET.EPOCHEAPSIZE = 0x20000 0x1000000
+symbian {
+ TARGET.UID3 = 0x2001FE79
+ TARGET.CAPABILITY = All -TCB
+ TARGET.EPOCSTACKSIZE = 0x14000
+ TARGET.EPOCHEAPSIZE = 0x20000 0x1000000
+ SKINICON = qtg_large_message
+}
# Platforms
SYMBIAN_PLATFORMS = WINSCW ARMV5
@@ -51,8 +54,12 @@
"sis/msgapp_stub.sis /epoc32/data/z/system/install/msgapp_stub.sis" \
"rom/messaging_uda.confml CONFML_EXPORT_PATH(messaging_uda.confml,uda_content)" \
"rom/messaging_uda_copy.implml CRML_EXPORT_PATH(messaging_uda_copy.implml,uda_content)" \
- "rom/private.zip CRML_EXPORT_PATH(../content/zip/,uda_content)"
-
+ "rom/private.zip CRML_EXPORT_PATH(../content/zip/,uda_content)" \
+ "resources/xml/messaging101.docml /epoc32/data/z/resource/hb/splashml/messaging101.docml" \
+ "resources/xml/messaging101.splashml /epoc32/data/z/resource/hb/splashml/messaging101.splashml" \
+ "resources/xml/messaging101_dummy.docml /epoc32/data/z/resource/hb/splashml/messaging101_dummy.docml" \
+ "resources/xml/messaging101_dummy.splashml /epoc32/data/z/resource/hb/splashml/messaging101_dummy.splashml"
+
# Input
HEADERS += msgmainwindow.h \
msglistview.h \
@@ -62,7 +69,8 @@
msgviewmanager.h \
msgbaseview.h \
msgsendserviceinterface.h \
- msgserviceinterface.h
+ msgserviceinterface.h \
+ msgactivityhandler.h
SOURCES += main.cpp \
msgmainwindow.cpp \
@@ -72,7 +80,8 @@
msgutils.cpp \
msgviewmanager.cpp \
msgsendserviceinterface.cpp \
- msgserviceinterface.cpp
+ msgserviceinterface.cpp \
+ msgactivityhandler.cpp
RESOURCES += msgapp.qrc
@@ -93,6 +102,6 @@
-lQtContacts \
-lsettingsview \
-lringbc \
- -lunidatamodelloader
-
+ -lunidatamodelloader \
+ -lmsgaudiofetcher
--- a/messagingapp/msgui/msgapp/resources/icons/qtg_large_message.svg Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
-<svg baseProfile="tiny" height="98" viewBox="0 0 98 98" width="98" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g>
-<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_1_" x1="48.9995" x2="48.9995" y1="23.8706" y2="73.753">
-<stop offset="0" style="stop-color:#FEEFA7"/>
-<stop offset="0.5091" style="stop-color:#FFC501"/>
-<stop offset="1" style="stop-color:#F6A800"/>
-</linearGradient>
-<polygon fill="url(#SVGID_1_)" points="84,74.5 14,74.5 14,23.5 49.579,24.5 84,23.5 "/>
-<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_2_" x1="48.9995" x2="48.9995" y1="23.627" y2="74.8003">
-<stop offset="0" style="stop-color:#F7AC00"/>
-<stop offset="0.3394" style="stop-color:#FFF8DB"/>
-<stop offset="1" style="stop-color:#FFE066"/>
-</linearGradient>
-<path d="M83.23,24.275v49.449H14.77V24.275H83.23 M84,23.5l-35.249,0.42L14,23.5v51h70V23.5L84,23.5z" fill="url(#SVGID_2_)"/>
-<polygon fill="#FBAB13" fill-opacity="0.3" points="14,73.637 84,73.637 84,72.645 48.999,41.91 14,72.645 " stroke-opacity="0.3"/>
-<polygon fill="#F18800" fill-opacity="0.3" points="14,74.5 84,74.5 84,73.504 48.999,42.773 14,73.504 " stroke-opacity="0.3"/>
-<linearGradient gradientTransform="matrix(-1 0 0 -1 -1118.3896 -657.6523)" gradientUnits="userSpaceOnUse" id="SVGID_3_" x1="-1167.3896" x2="-1167.3896" y1="-701.0981" y2="-731.9614">
-<stop offset="0" style="stop-color:#F98A00"/>
-<stop offset="0.7273" style="stop-color:#FCBC3C"/>
-<stop offset="1" style="stop-color:#FFE36A"/>
-</linearGradient>
-<polygon fill="url(#SVGID_3_)" points="84,74.475 48.999,43.611 14,74.475 "/>
-<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_4_" x1="48.9995" x2="48.9995" y1="43.374" y2="75.3424">
-<stop offset="0" style="stop-color:#FFF1B5"/>
-<stop offset="1" style="stop-color:#FFE066"/>
-</linearGradient>
-<polygon fill="url(#SVGID_4_)" points="84,74.475 48.999,43.611 14,74.475 48.999,44.705 "/>
-<polygon fill="#F18800" fill-opacity="0.3" points="49.07,24.5 14,23.5 48.999,59.771 84,23.5 " stroke-opacity="0.3"/>
-<polygon fill="#C26D00" fill-opacity="0.4" points="49.007,24.5 14,23.5 48.999,57.863 84,23.5 " stroke-opacity="0.4"/>
-<polygon fill="#AB6100" fill-opacity="0.4" points="48.879,24.371 14,23.5 48.999,56.252 84,23.5 " stroke-opacity="0.4"/>
-<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_5_" x1="49.0005" x2="49.0005" y1="52.7031" y2="21.5113">
-<stop offset="0" style="stop-color:#FFDA33"/>
-<stop offset="0.25" style="stop-color:#FFE692"/>
-<stop offset="1" style="stop-color:#FFFBF8"/>
-</linearGradient>
-<polygon fill="url(#SVGID_5_)" points="14,23.5 48.999,54.363 84,23.5 "/>
-<rect fill="none" height="98" width="98"/>
-</g>
-</svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/msgapp/resources/xml/messaging101.docml Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<hbdocument version="1.1">
+ <object name="viewextn" type="HbAction">
+ <icon iconName="qtg_mono_sort" name="icon"/>
+ </object>
+ <object name="newmsg" type="HbAction">
+ <icon iconName="qtg_mono_create_message" name="icon"/>
+ </object>
+ <object name="settings" type="HbAction">
+ <string locid="txt_messaging_opt_settings" name="text" value="Settings"/>
+ </object>
+ <widget name="view" type="HbView">
+ <widget name="content" role="HbView:widget" type="HbWidget">
+ <widget name="groupBox" type="HbGroupBox">
+ <real name="z" value="1"/>
+ <bool name="collapsable" value="FALSE"/>
+ <string locid="txt_messaging_title_conversations" name="heading" value="Conversations"/>
+ </widget>
+ <layout type="anchor">
+ <anchoritem dst="groupBox" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="groupBox" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
+ <anchoritem dst="groupBox" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
+ </layout>
+ </widget>
+ <widget name="viewToolbar" role="HbView:toolBar" type="HbToolBar">
+ <ref object="viewextn" role="HbWidget:addAction"/>
+ <ref object="newmsg" role="HbWidget:addAction"/>
+ </widget>
+ <widget name="viewMenu" role="HbView:menu" type="HbMenu">
+ <ref object="settings" role="HbWidget:addAction"/>
+ </widget>
+ <string locid="txt_messaging_title_messaging" name="title" value="Messaging"/>
+ </widget>
+ <metadata activeUIState="Common ui state" display="NHD-3.2-inch_portrait" unit="un">
+ <uistate name="Common ui state" sections="#common"/>
+ </metadata>
+</hbdocument>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/msgapp/resources/xml/messaging101.splashml Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,7 @@
+<hbsplash version="1">
+ <screenid>clv</screenid>
+ <docml>messaging101.docml</docml>
+ <widget>view</widget>
+ <appuid>0x2001FE79</appuid>
+ <tsappname>Messaging</tsappname>
+</hbsplash>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/msgapp/resources/xml/messaging101_dummy.docml Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<hbdocument version="1.1">
+ <object name="viewextn" type="HbAction">
+ <icon iconName="qtg_mono_sort" name="icon"/>
+ </object>
+ <object name="newmsg" type="HbAction">
+ <icon iconName="qtg_mono_create_message" name="icon"/>
+ </object>
+ <object name="settings" type="HbAction">
+ <string locid="txt_messaging_opt_settings" name="text" value="Settings"/>
+ </object>
+ <widget name="view" type="HbView">
+ <widget name="content" role="HbView:widget" type="HbWidget">
+ <layout type="anchor"/>
+ </widget>
+ <widget name="viewToolbar" role="HbView:toolBar" type="HbToolBar"/>
+ <widget name="viewMenu" role="HbView:menu" type="HbMenu">
+ <ref object="settings" role="HbWidget:addAction"/>
+ </widget>
+ <string locid="txt_messaging_title_messaging" name="title" value="Messaging"/>
+ </widget>
+ <metadata activeUIState="Common ui state" display="NHD-3.2-inch_portrait" unit="un">
+ <uistate name="Common ui state" sections="#common"/>
+ </metadata>
+</hbdocument>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/msgapp/resources/xml/messaging101_dummy.splashml Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,7 @@
+<hbsplash version="1">
+ <screenid>dummy</screenid>
+ <docml>messaging101_dummy.docml</docml>
+ <widget>view</widget>
+ <appuid>0x2001FE79</appuid>
+ <tsappname>Messaging</tsappname>
+</hbsplash>
--- a/messagingapp/msgui/msgapp/resources/xml/msglistviewitem_color.css Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/msgapp/resources/xml/msglistviewitem_color.css Thu Jul 22 16:32:06 2010 +0100
@@ -7,6 +7,10 @@
color: var(qtc_list_item_content_normal);
}
+MsgListViewItem[state="pressed"]::addressLabel {
+ color: var(qtc_list_item_pressed);
+}
+
MsgListViewItem[unReadMsg="true"]::previewLabel {
color: var(qtc_list_item_title_normal);
}
@@ -15,6 +19,10 @@
color: var(qtc_list_item_content_normal);
}
+MsgListViewItem[state="pressed"]::previewLabel {
+ color: var(qtc_list_item_pressed);
+}
+
MsgListViewItem[unReadMsg="true"]::unreadCount {
color: var(qtc_list_item_title_normal);
}
@@ -23,6 +31,10 @@
color: var(qtc_list_item_content_normal);
}
+MsgListViewItem[state="pressed"]::unreadCount {
+ color: var(qtc_list_item_pressed);
+}
+
MsgListViewItem[unReadMsg="true"]::timeLabel {
color: var(qtc_list_item_title_normal);
}
@@ -31,3 +43,11 @@
color: var(qtc_list_item_content_normal);
}
+MsgListViewItem[state="pressed"]::timeLabel {
+ color: var(qtc_list_item_pressed);
+}
+
+MsgListViewItem::presenceIndicator {
+ color: var(qtc_list_item_title_normal);
+}
+
--- a/messagingapp/msgui/msgapp/rom/msgapp.iby Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/msgapp/rom/msgapp.iby Thu Jul 22 16:32:06 2010 +0100
@@ -19,8 +19,15 @@
file=ABI_DIR\UREL\messaging101.exe SHARED_LIB_DIR\messaging101.exe
data=DATAZ_\private\10003a3f\import\apps\messaging101_reg.rsc private\10003a3f\import\apps\messaging101_reg.rsc
-data=DATAZ_\resource\apps\0x2001FE79.mif resource\apps\0x2001FE79.mif
+data=DATAZ_\resource\apps\messaging101.mif resource\apps\messaging101.mif
data=DATAZ_\system\install\msgapp_stub.sis system\install\msgapp_stub.sis
+<clip>
+ data=ZRESOURCE\hb\splashml\messaging101.splashml RESOURCE_FILES_DIR\hb\splashml\messaging101.splashml
+ data=ZRESOURCE\hb\splashml\messaging101.docml RESOURCE_FILES_DIR\hb\splashml\messaging101.docml
+ data=ZRESOURCE\hb\splashml\messaging101_dummy.splashml RESOURCE_FILES_DIR\hb\splashml\messaging101_dummy.splashml
+ data=ZRESOURCE\hb\splashml\messaging101_dummy.docml RESOURCE_FILES_DIR\hb\splashml\messaging101_dummy.docml
+</clip>
+
#endif // __MSGAPP_IBY__
--- a/messagingapp/msgui/msgapp/src/draftslistview.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/msgapp/src/draftslistview.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -66,8 +66,6 @@
// Confirmation note
#define LOC_DELETE_MESSAGE hbTrId("txt_messaging_dialog_delete_message")
#define LOC_DELETE_ALL_DRAFTS hbTrId("txt_messaging_dialog_delate_all_drafts")
-#define LOC_BUTTON_DELETE hbTrId("txt_common_button_delete")
-#define LOC_BUTTON_CANCEL hbTrId("txt_common_button_cancel")
//---------------------------------------------------------------
// DraftsListView::DraftsListView
@@ -77,8 +75,7 @@
MsgBaseView(parent),
mListView(0),
mViewExtnList(0),
- mToolBar(0),
- mItemLongPressed(false)
+ mToolBar(0)
{
// Delayed loading.
connect(this->mainWindow(), SIGNAL(viewReady()), this, SLOT(doDelayedLoading()));
@@ -123,6 +120,7 @@
viewAction->setIcon(HbIcon(SORT_ICON));
mViewExtnList = new HbListWidget();
+ mViewExtnList->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Fixed);
mViewExtnList->addItem(LOC_TB_EXTN_DRAFTS);
mViewExtnList->addItem(LOC_TB_EXTN_CONVERSATIONS);
@@ -231,8 +229,8 @@
}
HbMessageBox::question(LOC_DELETE_MESSAGE,
- this,SLOT(onDialogDeleteMsg(HbAction*)),
- LOC_BUTTON_DELETE, LOC_BUTTON_CANCEL);
+ this,SLOT(onDialogDeleteMsg(HbAction*)),
+ HbMessageBox::Delete | HbMessageBox::Cancel);
}
@@ -243,9 +241,8 @@
void DraftsListView::deleteAllDraftMessage()
{
HbMessageBox::question(LOC_DELETE_ALL_DRAFTS,
- this,SLOT(onDialogDeleteAllMessages(HbAction*)),
- LOC_BUTTON_DELETE,
- LOC_BUTTON_CANCEL);
+ this,SLOT(onDialogDeleteAllMessages(HbAction*)),
+ HbMessageBox::Delete | HbMessageBox::Cancel);
}
//------------------------------------------------------------------------------
@@ -267,12 +264,6 @@
//------------------------------------------------------------------------------
void DraftsListView::openDraftMessage(const QModelIndex &index)
{
- if(mItemLongPressed)
- {
- //reset the flag
- mItemLongPressed = false;
- return;
- }
QVariant msgId = index.data(ConvergedMsgId);
QVariant msgType = index.data(MessageType);
ConvergedMessageId convergedMsgId = ConvergedMessageId(msgId.toInt());
@@ -299,7 +290,6 @@
//------------------------------------------------------------------------------
void DraftsListView::handleLongPressed(HbAbstractViewItem *item, const QPointF &coords)
{
- mItemLongPressed = true;
if (this->isVisible()) {
// Set the current index as tapped items index.
--- a/messagingapp/msgui/msgapp/src/main.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/msgapp/src/main.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -22,13 +22,18 @@
#include "debugtraces.h"
#include <QDateTime>
#include <QPointer>
+#include <HbSplashScreen>
#include "msgmainwindow.h"
+#include "msgactivityhandler.h"
//Localised constants
#define LOC_TITLE hbTrId("txt_messaging_title_messaging")
const QString debugFileName("c:/art2_app_log.txt");
+const QString activityParam("-activity");
+const int INVALID_MSGID = -1;
+
#ifdef _DEBUG_TRACES_
void debugInit(QtMsgType type, const char *msg)
{
@@ -74,6 +79,22 @@
#endif
int main(int argc, char *argv[])
{
+
+ QCRITICAL_WRITE("MsgApp start.");
+
+ QString firstArg(argv[1]);
+ bool serviceRequest = false;
+ // check for argc is greater than 1 and its not from activity
+ if(argc >1 && firstArg != activityParam )
+ {
+ serviceRequest = true;
+ HbSplashScreen::setScreenId("dummy");
+ }
+ else
+ {
+ HbSplashScreen::setScreenId("clv");
+ }
+
// Application
HbApplication app(argc, argv);
@@ -81,12 +102,11 @@
QString locale = QLocale::system().name();
QString path = "z:/resource/qt/translations/";
QTranslator translator;
- //QTranslator translator_comm;
- //translator.load(path + QString("messaging_") + locale);
- //translator_comm.load(path + QString("common_") + locale);
- translator.load( "messaging_en_GB", ":/translations" );
+ QTranslator translator_comm;
+ translator.load(path + QString("messaging_") + locale);
+ translator_comm.load(path + QString("common_") + locale);
app.installTranslator(&translator);
- //app.installTranslator(&translator_comm);
+ app.installTranslator(&translator_comm);
app.setApplicationName(LOC_TITLE);
@@ -99,20 +119,38 @@
}
qInstallMsgHandler(debugInit);
#endif
- bool serviceRequest = false;
- if(argc >1)
- {
- serviceRequest = true;
+
+
+
+ MsgActivityHandler* activityHandler = new MsgActivityHandler(&app);
+ // connect to aboutToQuit signal to save activity
+ QObject::connect(&app, SIGNAL(aboutToQuit()),
+ activityHandler, SLOT(saveActivity()));
+
+ int activityMsgId = INVALID_MSGID;
+ if(app.activateReason() == Hb::ActivationReasonActivity) {
+ // restoring an activity, not a fresh startup or a service
+ QVariant data = app.activateData();
+ activityMsgId = activityHandler->parseActivityData(data);
+ // set service request to false , since its a activity launch
+ serviceRequest = false;
}
+ // clear the old activities
+ activityHandler->clearActivities();
+
// Main window
- QPointer<MsgMainWindow> mainWindow = new MsgMainWindow(serviceRequest);
+ QPointer<MsgMainWindow> mainWindow = new MsgMainWindow(serviceRequest,activityMsgId);
+ // Set the main window pointer to activity handler.
+ activityHandler->setMainWindow(mainWindow);
mainWindow->show();
// Event loop
int error = app.exec();
-
+ HbApplication::processEvents();
+
// delete main window and return error
delete mainWindow;
+
return error;
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/msgapp/src/msgactivityhandler.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,135 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ * Handles saving and opening activites.
+ *
+ */
+
+#include "msgactivityhandler.h"
+
+#include "msgviewmanager.h"
+#include "msgbaseview.h"
+#include "msgmainwindow.h"
+#include <hbapplication.h>
+#include <hbactivitymanager.h>
+#include <QVariantHash>
+
+const int INVALID_MSGID = -1;
+// Activity Names
+const QString ListViewActivityName("MsgConversationsList");
+const QString EditorActivityName("MsgCreate");
+
+//-----------------------------------------------------------------------------
+// MsgActivityHandler::MsgActivityHandler
+// Constructor
+//-----------------------------------------------------------------------------
+MsgActivityHandler::MsgActivityHandler(QObject* parent):
+ QObject(parent)
+{
+
+}
+
+//-----------------------------------------------------------------------------
+// MsgActivityHandler::MsgActivityHandler
+// Destructor
+//-----------------------------------------------------------------------------
+MsgActivityHandler::~MsgActivityHandler()
+{
+
+}
+
+//-----------------------------------------------------------------------------
+// MsgActivityHandler::saveActivity
+// @see header
+//-----------------------------------------------------------------------------
+void MsgActivityHandler::saveActivity()
+{
+ HbActivityManager* activityManager =
+ qobject_cast<HbApplication*>(qApp)->activityManager();
+
+ int currentView = mMainWindow->viewManager()->currentView();
+ int msgId = INVALID_MSGID;
+ if((currentView == MsgBaseView::CV) || (currentView== MsgBaseView::UNIEDITOR))
+ {
+ msgId = mMainWindow->viewManager()->saveContentToDraft();
+ }
+
+ // get a screenshot for saving to the activity manager
+ QVariantHash metadata;
+ metadata.insert("screenshot",
+ QPixmap::grabWidget(mMainWindow, mMainWindow->rect()));
+
+ // save any data necessary to save the state
+ QByteArray serializedActivity;
+ QDataStream stream(&serializedActivity,
+ QIODevice::WriteOnly | QIODevice::Append);
+
+ if( msgId != INVALID_MSGID)
+ {
+ stream << EditorActivityName;
+ stream << msgId;
+
+ // add the activity to the activity manager
+ bool ok = activityManager->addActivity(EditorActivityName,
+ serializedActivity, metadata);
+ }
+ else
+ {
+ stream << ListViewActivityName;
+
+ // add the activity to the activity manager
+ bool ok = activityManager->addActivity(ListViewActivityName,
+ serializedActivity, metadata);
+ }
+}
+
+//-----------------------------------------------------------------------------
+// MsgActivityHandler::parseActivityData
+// @see header
+//-----------------------------------------------------------------------------
+int MsgActivityHandler::parseActivityData(const QVariant &activityData)
+{
+ QByteArray serializedModel = activityData.toByteArray();
+ QDataStream stream(&serializedModel, QIODevice::ReadOnly);
+
+ QString activityName;
+ int msgId = INVALID_MSGID;
+ stream >> activityName;
+ if( activityName == EditorActivityName)
+ {
+ stream >> msgId;
+ }
+ return msgId;
+}
+
+//-----------------------------------------------------------------------------
+// MsgActivityHandler::clearActivities
+// @see header
+//-----------------------------------------------------------------------------
+void MsgActivityHandler::clearActivities()
+{
+ HbActivityManager* activityManager =
+ qobject_cast<HbApplication*>(qApp)->activityManager();
+ activityManager->removeActivity(ListViewActivityName);
+ activityManager->removeActivity(EditorActivityName);
+}
+
+//-----------------------------------------------------------------------------
+// MsgActivityHandler::setMainWindow
+// @see header
+//-----------------------------------------------------------------------------
+void MsgActivityHandler::setMainWindow(MsgMainWindow* mainWindow)
+{
+ mMainWindow = mainWindow;
+}
--- a/messagingapp/msgui/msgapp/src/msglistview.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/msgapp/src/msglistview.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -60,10 +60,7 @@
#define LOC_OPEN hbTrId("txt_common_menu_open")
#define LOC_SAVETO_CONTACTS hbTrId("txt_messaging_menu_save_to_contacts")
#define LOC_DELETE_CONVERSATION hbTrId("txt_messaging_menu_delete_conversation")
-#define LOC_OPEN_CONTACT_INFO hbTrId("txt_messaging_menu_open_contact_info")
-
-#define LOC_BUTTON_DELETE hbTrId("txt_common_button_delete")
-#define LOC_BUTTON_CANCEL hbTrId("txt_common_button_cancel")
+#define LOC_OPEN_CONTACT_INFO hbTrId("txt_messaging_menu_contact_info")
//main menu
#define LOC_SETTINGS hbTrId("txt_messaging_opt_settings")
@@ -80,11 +77,29 @@
// @see header
//---------------------------------------------------------------
MsgListView::MsgListView(QGraphicsItem *parent) :
- MsgBaseView(parent),
- mItemLongPressed(false)
-{
- connect(this->mainWindow(),SIGNAL(viewReady()),this,SLOT(doDelayedConstruction()));
-}
+ MsgBaseView(parent)
+ {
+ //These changes are needed for splash implementation to avoid flicker
+ setupToolBar();
+ setupMenu();
+
+ // Create parent layout.
+ mMainLayout = new QGraphicsLinearLayout(Qt::Vertical);
+ mMainLayout->setContentsMargins(0, 0, 0, 0);
+ mMainLayout->setSpacing(0);
+
+ // Create view heading.
+ HbGroupBox *viewHeading = new HbGroupBox();
+ viewHeading->setHeading(LOC_VIEW_HEADING);
+
+ // Add view heading widget to main layout.
+ mMainLayout->addItem(viewHeading);
+
+ this->setLayout(mMainLayout);
+
+ connect(this->mainWindow(), SIGNAL(viewReady()), this,
+ SLOT(doDelayedConstruction()));
+ }
//---------------------------------------------------------------
// MsgListView::~MsgListView
@@ -101,7 +116,6 @@
//---------------------------------------------------------------
void MsgListView::longPressed(HbAbstractViewItem* viewItem, const QPointF& point)
{
- mItemLongPressed = true;
if (this->isVisible()) {
// Set the current index as the present Item's index.
// By default it will not be set.
@@ -144,11 +158,6 @@
//---------------------------------------------------------------
void MsgListView::openConversation(const QModelIndex& index)
{
- if(mItemLongPressed)
- {
- mItemLongPressed = false;
- return;
- }
//TODO: model populating possibilities.
if (index.isValid()) {
QVariant conversationId = index.data(ConversationId);
@@ -219,8 +228,8 @@
#endif
//confirmation dialog.
HbMessageBox::question(LOC_DIALOG_DELETE_CONVERSATION,
- this,SLOT(onDialogDeleteMsg(HbAction*)),
- LOC_BUTTON_DELETE, LOC_BUTTON_CANCEL);
+ this,SLOT(onDialogDeleteMsg(HbAction*)),
+ HbMessageBox::Delete | HbMessageBox::Cancel);
#ifdef _DEBUG_TRACES_
qDebug() << " Leaving MsgConversationView::deleteItem";
#endif
@@ -231,16 +240,7 @@
// @see header
//---------------------------------------------------------------
void MsgListView::setupListView()
-{
- // Create parent layout.
- QGraphicsLinearLayout *mainLayout = new QGraphicsLinearLayout(Qt::Vertical);
- mainLayout->setContentsMargins(0, 0, 0, 0);
- mainLayout->setSpacing(0);
-
- // Create view heading.
- HbGroupBox *viewHeading = new HbGroupBox();
- viewHeading->setHeading(LOC_VIEW_HEADING);
-
+ {
// Register the custorm css path.
HbStyleLoader::registerFilePath(":/clv");
@@ -250,37 +250,29 @@
mMsgList->setLayoutName("custom");
mMsgList->setItemRecycling(true);
- mMsgList->setUniformItemSizes(true);
+ mMsgList->setUniformItemSizes(true);
MsgListViewItem *prototype = new MsgListViewItem(this);
mMsgList->setItemPrototype(prototype);
-
- // Set proxy model
- QSortFilterProxyModel* proxyModel = new QSortFilterProxyModel(this);
- proxyModel->setDynamicSortFilter(true);
- proxyModel->setSourceModel(ConversationsEngine::instance()->getConversationsSummaryModel());
- proxyModel->setSortRole(TimeStamp);
- proxyModel->sort(0, Qt::DescendingOrder);
-
- mMsgList->setModel(proxyModel);
-
- connect(ConversationsEngine::instance(), SIGNAL(conversationListModelPopulated()),
- this, SLOT(populateListView()));
-
+ mMsgList->setModel(ConversationsEngine::instance()->getConversationsSummaryModel());
+
// Single tap list item
- connect(mMsgList, SIGNAL(activated(const QModelIndex&)),
- this, SLOT(openConversation(const QModelIndex&)));
+ connect(mMsgList, SIGNAL(activated(const QModelIndex&)), this,
+ SLOT(openConversation(const QModelIndex&)));
// Long tap list item
- connect(mMsgList, SIGNAL(longPressed(HbAbstractViewItem*, const QPointF&)),
- this, SLOT(longPressed(HbAbstractViewItem*, const QPointF&)));
+ connect(mMsgList,
+ SIGNAL(longPressed(HbAbstractViewItem*, const QPointF&)), this,
+ SLOT(longPressed(HbAbstractViewItem*, const QPointF&)));
- // Add all widgets to main layout.
- mainLayout->addItem(viewHeading);
- mainLayout->addItem(mMsgList);
+ // enable tap after delete is completed
+ connect(ConversationsEngine::instance(),
+ SIGNAL(conversationListEntryDeleted( int )), this,
+ SLOT(enableListitem( int )));
- this->setLayout(mainLayout);
-}
+ // Add list view to main layout.
+ mMainLayout->addItem(mMsgList);
+ }
//---------------------------------------------------------------
// MsgListView::addMenu
@@ -309,6 +301,7 @@
viewAction->setIcon(HbIcon(SORT_ICON));
mViewExtnList = new HbListWidget();
+ mViewExtnList->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Fixed);
mViewExtnList->addItem(LOC_TB_EXTN_DRAFTS);
mViewExtnList->addItem(LOC_TB_EXTN_CONVERSATIONS);
@@ -347,10 +340,8 @@
// @see header
//---------------------------------------------------------------
void MsgListView::doDelayedConstruction()
- {
- setupToolBar();
+ {
setupListView();
- setupMenu();
disconnect(this->mainWindow(),SIGNAL(viewReady()),this,SLOT(doDelayedConstruction()));
}
@@ -425,17 +416,46 @@
// @see header
//---------------------------------------------------------------
void MsgListView::onDialogDeleteMsg(HbAction* action)
-{
+ {
HbMessageBox *dlg = qobject_cast<HbMessageBox*> (sender());
- if (action == dlg->actions().at(0)) {
- QModelIndex index = mMsgList->currentIndex();
- if(index.isValid())
+ if (action == dlg->actions().at(0))
{
+ QModelIndex index = mMsgList->currentIndex();
+ if (index.isValid())
+ {
+ HbAbstractViewItem *item = mMsgList->currentViewItem();
+ item->ungrabGesture(Qt::TapGesture);
qint64 conversationId = index.data(ConversationId).toLongLong();
- ConversationsEngine::instance()->deleteConversations(conversationId);
+
+ ConversationsEngine::instance()->deleteConversations(
+ conversationId);
+
+ }
+
}
-
}
-}
+
+//---------------------------------------------------------------
+// MsgListView::enableListitem
+// @see header
+//---------------------------------------------------------------
+void MsgListView::enableListitem(int conversationId)
+ {
+ QAbstractItemModel* proxyModel = mMsgList->model();
+ QModelIndexList indexList = proxyModel->match(proxyModel->index(0, 0),
+ ConversationId, conversationId, 1, Qt::MatchExactly);
+ HbAbstractViewItem* item = NULL;
+ int count = indexList.count();
+ // only item is expected to be the result of the above match function
+ if (1 == count)
+ {
+ item = mMsgList->itemByIndex(indexList[0]);
+ if (item)
+ {
+ item->grabGesture(Qt::TapGesture);
+ }
+ }
+
+ }
//EOF
--- a/messagingapp/msgui/msgapp/src/msglistviewitem.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/msgapp/src/msglistviewitem.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -25,6 +25,8 @@
#include <HbTextItem>
#include <HbFrameItem>
#include <HbIconItem>
+#include <QCoreApplication>
+#include <HbEvent>
#include "msgcommondefines.h"
#include "conversationsengine.h"
@@ -78,49 +80,13 @@
//---------------------------------------------------------------
void MsgListViewItem::updateChildItems()
{
- if (!mAddressLabelItem)
- {
- mAddressLabelItem = new HbTextItem(this);
- HbStyle::setItemName(mAddressLabelItem, "addressLabel");
- }
- if (!mTimestampItem)
- {
- mTimestampItem = new HbTextItem(this);
- HbStyle::setItemName(mTimestampItem, "timeLabel");
- }
- if (!mPreviewLabelItem)
- {
- mPreviewLabelItem = new HbTextItem(this);
- mPreviewLabelItem->setTextWrapping(Hb::TextWordWrap);
- HbStyle::setItemName(mPreviewLabelItem, "previewLabel");
- }
- if (!mUnreadCountItem)
- {
- mUnreadCountItem = new HbTextItem(this);
- HbStyle::setItemName(mUnreadCountItem, "unreadCount");
- }
- if (!mNewMsgIndicatorItem)
- {
- mNewMsgIndicatorItem = new HbFrameItem(this);
- HbStyle::setItemName(mNewMsgIndicatorItem, "newMsgIndicator");
+ initItems();
- mNewMsgIndicatorItem->frameDrawer().setFrameType(
- HbFrameDrawer::ThreePiecesVertical);
- }
-
- // Set the message text depending upon the message type
- int messageType = modelIndex().data(MessageType).toInt();
- int messageSubType = modelIndex().data(MessageSubType).toInt();
- int messageState = modelIndex().data(SendingState).toInt();
- int messageDirection = modelIndex().data(Direction).toInt();
- QString prevText;
- prevText = previewText(messageType, messageSubType, messageState,messageDirection);
- prevText.replace(QChar::ParagraphSeparator, QChar::LineSeparator);
- prevText.replace('\r', QChar::LineSeparator);
- mPreviewLabelItem->setText(prevText);
+ setTimestampAndPreviewText();
// Address label
QString contactName;
+ int messageType = modelIndex().data(MessageType).toInt();
if(messageType == ConvergedMessage::BT)
{
contactName = LOC_RECEIVED_FILES;
@@ -129,15 +95,7 @@
{
QString displayName = modelIndex().data(DisplayName).toString();
QString contactAddress = modelIndex().data(ConversationAddress).toString();
-
- if (displayName.isEmpty())
- {
- contactName.append(contactAddress);
- }
- else
- {
- contactName.append(displayName);
- }
+ contactName.append(displayName);
}
mAddressLabelItem->setText(contactName);
@@ -148,33 +106,76 @@
{
QString unRead(tr("(%n)", "", unreadCount));
mUnreadCountItem->setText(unRead);
- mUnReadMsg = true;
- mNewMsgIndicatorItem->frameDrawer().setFrameGraphicsName(NEW_ITEM_FRAME);
+ if(!mUnReadMsg)
+ {
+ mUnReadMsg = true;
+ mNewMsgIndicatorItem->frameDrawer().setFrameGraphicsName(NEW_ITEM_FRAME);
+ repolish();
+ // Needed for colour group changes to be visible
+ QCoreApplication::postEvent(this, new HbEvent(HbEvent::ThemeChanged));
+ }
}
else
{
- mUnreadCountItem->setText(QString());
- mNewMsgIndicatorItem->frameDrawer().setFrameGraphicsName(QString());
- mUnReadMsg = false;
- repolish();
+ mUnreadCountItem->setText(QString());
+ if(mUnReadMsg)
+ {
+ mUnReadMsg = false;
+ mNewMsgIndicatorItem->frameDrawer().setFrameGraphicsName(QString());
+ repolish();
+ // Needed for colour group changes to be visible
+ QCoreApplication::postEvent(this, new HbEvent(HbEvent::ThemeChanged));
+ }
}
HbListViewItem::updateChildItems();
}
//---------------------------------------------------------------
-// MsgListViewItem::previewText
+// MsgListViewItem::initItems
// @see header
//---------------------------------------------------------------
-QString MsgListViewItem::previewText(int msgType,
- int msgSubType,
- int msgState,
- int msgDirection)
+void MsgListViewItem::initItems()
+{
+ if (!mAddressLabelItem) {
+ mAddressLabelItem = new HbTextItem(this);
+ HbStyle::setItemName(mAddressLabelItem, "addressLabel");
+ }
+ if (!mTimestampItem) {
+ mTimestampItem = new HbTextItem(this);
+ HbStyle::setItemName(mTimestampItem, "timeLabel");
+ }
+ if (!mPreviewLabelItem) {
+ mPreviewLabelItem = new HbTextItem(this);
+ mPreviewLabelItem->setTextWrapping(Hb::TextWordWrap);
+ HbStyle::setItemName(mPreviewLabelItem, "previewLabel");
+ }
+ if (!mUnreadCountItem) {
+ mUnreadCountItem = new HbTextItem(this);
+ HbStyle::setItemName(mUnreadCountItem, "unreadCount");
+ }
+ if (!mNewMsgIndicatorItem) {
+ mNewMsgIndicatorItem = new HbFrameItem(this);
+ HbStyle::setItemName(mNewMsgIndicatorItem, "newMsgIndicator");
+
+ mNewMsgIndicatorItem->frameDrawer().setFrameType(HbFrameDrawer::ThreePiecesVertical);
+ }
+ if (!mPresenceIndicatorItem) {
+ mPresenceIndicatorItem = new HbIconItem(this);
+ HbStyle::setItemName(mPresenceIndicatorItem, "presenceIndicator");
+ }
+}
+//---------------------------------------------------------------
+// MsgListViewItem::defaultPreviewText
+// @see header
+//---------------------------------------------------------------
+QString MsgListViewItem::defaultPreviewText(int msgType, int msgSubType)
{
QString bodyText(modelIndex().data(BodyText).toString());
QString previewText;
// Set the message text & icons, depending upon the message type
if (msgType == ConvergedMessage::BioMsg) {
+
if (msgSubType == ConvergedMessage::RingingTone) {
previewText = LOC_RINGING_TONE;
}
@@ -184,14 +185,19 @@
previewText.append(bodyText);
}
else if (msgSubType == ConvergedMessage::Provisioning) {
- previewText = bodyText;
- }
+ previewText = bodyText;
+ }
+ else if (msgSubType == ConvergedMessage::NokiaService) {
+ previewText = bodyText;
+ }
else {
previewText = LOC_UNSUPPORTED_MSG_TYPE;
}
+
+ mPresenceIndicatorItem->setVisible(false);
}
else if (msgType == ConvergedMessage::BT) {
-
+
if (msgSubType == ConvergedMessage::VCard) {
previewText = LOC_BUSINESS_CARD;
previewText.append(QChar::LineSeparator);
@@ -200,26 +206,26 @@
else {
previewText = bodyText;
}
- if (!mPresenceIndicatorItem) {
- mPresenceIndicatorItem = new HbIconItem(this);
- HbStyle::setItemName(mPresenceIndicatorItem, "presenceIndicator");
- mPresenceIndicatorItem->setIconName(BT_ICON);
- }
+
+ mPresenceIndicatorItem->setIconName(BT_ICON);
+ mPresenceIndicatorItem->setVisible(true);
}
else {
- previewText = textBySendState(msgState,msgDirection);
+ // All message types except BIO & BT.
+ previewText = modelIndex().data(BodyText).toString();
+ mPresenceIndicatorItem->setVisible(false);
}
return previewText;
}
//---------------------------------------------------------------
-// MsgListViewItem::textBySendState
+// MsgListViewItem::setTimestampAndPreviewText
// @see header
//---------------------------------------------------------------
-QString MsgListViewItem::textBySendState(int sendState,int msgDirection)
+void MsgListViewItem::setTimestampAndPreviewText()
{
- QString previewText;
+ // Get timestamp
QDateTime dateTime;
dateTime.setTime_t(modelIndex().data(TimeStamp).toUInt());
QString dateString;
@@ -230,80 +236,55 @@
dateString = MsgUtils::dateTimeToString(dateTime, DATE_FORMAT);
}
- if (msgDirection == ConvergedMessage::Outgoing)
- {
- switch (sendState)
- {
- case ConvergedMessage::Resend:
- {
-
- QString resendString = LOC_MSG_RESEND_AT + dateString;
- previewText = resendString;
- dateString = QString("");
- if (!mPresenceIndicatorItem)
- {
- mPresenceIndicatorItem = new HbIconItem(this);
- }
- HbStyle::setItemName(mPresenceIndicatorItem,
- "presenceIndicator");
- mPresenceIndicatorItem->setIconName(MSG_OUTGOING_ICON);
- mPresenceIndicatorItem->setVisible(true);
- break;
- }
+ // Set preview text & time based on direction
+ int msgType = modelIndex().data(MessageType).toInt();
+ int msgSubType = modelIndex().data(MessageSubType).toInt();
+ int sendState = modelIndex().data(SendingState).toInt();
+ int msgDirection = modelIndex().data(Direction).toInt();
+ QString previewText;
+ if (ConvergedMessage::Incoming == msgDirection) {
+ previewText = defaultPreviewText(msgType, msgSubType);
+ }
+ else if (msgDirection == ConvergedMessage::Outgoing) {
- case ConvergedMessage::Sending:
- case ConvergedMessage::Suspended:
- case ConvergedMessage::Scheduled:
- case ConvergedMessage::Waiting:
- {
- previewText = QString(LOC_MSG_OUTGOING);
- if (!mPresenceIndicatorItem)
- {
- mPresenceIndicatorItem = new HbIconItem(this);
- }
- HbStyle::setItemName(mPresenceIndicatorItem,
- "presenceIndicator");
- mPresenceIndicatorItem->setIconName(MSG_OUTGOING_ICON);
- mPresenceIndicatorItem->setVisible(true);
- break;
- }
- case ConvergedMessage::Failed:
- {
- previewText = QString(LOC_MSG_SEND_FAILED);
- if (!mPresenceIndicatorItem)
- {
- mPresenceIndicatorItem = new HbIconItem(this);
- }
- HbStyle::setItemName(mPresenceIndicatorItem,
- "presenceIndicator");
- mPresenceIndicatorItem->setIconName(MSG_FAILED_ICON);
- mPresenceIndicatorItem->setVisible(true);
- break;
- }
- default:
- QString postFix = QString("");
- previewText = modelIndex().data(BodyText).toString();
- previewText += (QChar(QChar::LineSeparator) + postFix);
-
- if (!mPresenceIndicatorItem)
- {
- mPresenceIndicatorItem = new HbIconItem(this);
- }
-
- HbStyle::setItemName(mPresenceIndicatorItem,
- "presenceIndicator");
- mPresenceIndicatorItem->setIconName(MSG_FAILED_ICON);
- mPresenceIndicatorItem->setVisible(false);
-
- break;
+ switch (sendState) {
+ case ConvergedMessage::Resend:
+ {
+ previewText = LOC_MSG_RESEND_AT + dateString;
+ dateString = QString();
+ mPresenceIndicatorItem->setIconName(MSG_OUTGOING_ICON);
+ mPresenceIndicatorItem->setVisible(true);
+ break;
+ }
+ case ConvergedMessage::Sending:
+ case ConvergedMessage::Suspended:
+ case ConvergedMessage::Scheduled:
+ case ConvergedMessage::Waiting:
+ {
+ previewText = QString(LOC_MSG_OUTGOING);
+ mPresenceIndicatorItem->setIconName(MSG_OUTGOING_ICON);
+ mPresenceIndicatorItem->setVisible(true);
+ break;
+ }
+ case ConvergedMessage::Failed:
+ {
+ previewText = QString(LOC_MSG_SEND_FAILED);
+ mPresenceIndicatorItem->setIconName(MSG_FAILED_ICON);
+ mPresenceIndicatorItem->setVisible(true);
+ break;
+ }
+ default:
+ {
+ // Successful case
+ previewText = defaultPreviewText(msgType, msgSubType);
+ break;
+ }
}
}
- else
- {
- previewText = modelIndex().data(BodyText).toString();
- }
+ previewText.replace(QChar::ParagraphSeparator, QChar::LineSeparator);
+ previewText.replace('\r', QChar::LineSeparator);
+ mPreviewLabelItem->setText(previewText);
mTimestampItem->setText(dateString);
- return previewText;
}
//---------------------------------------------------------------
--- a/messagingapp/msgui/msgapp/src/msgmainwindow.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/msgapp/src/msgmainwindow.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -28,12 +28,12 @@
// MsgMainWindow::MsgMainWindow
// Constructor
//---------------------------------------------------------------
-MsgMainWindow::MsgMainWindow(bool serviceRequest, QWidget *parent) :
+MsgMainWindow::MsgMainWindow(bool serviceRequest,int activityMsgId,QWidget *parent) :
HbMainWindow(parent), mMsgSI(0), mMsgSendSI(0)
{
- MsgViewManager* viewManager = new MsgViewManager(serviceRequest,this,this);
- mMsgSI = new MsgServiceInterface(NULL,viewManager);
- mMsgSendSI = new MsgSendServiceInterface(NULL,viewManager);
+ mViewManager = new MsgViewManager(serviceRequest,this,this,activityMsgId);
+ mMsgSI = new MsgServiceInterface(NULL,mViewManager);
+ mMsgSendSI = new MsgSendServiceInterface(NULL,mViewManager);
//Model creation
ConversationsEngine::instance();
@@ -60,4 +60,12 @@
delete ConversationsEngine::instance();
}
+//---------------------------------------------------------------
+// MsgMainWindow::viewManager
+// Constructor
+//---------------------------------------------------------------
+MsgViewManager* MsgMainWindow::viewManager()
+{
+ return mViewManager;
+}
// End of file
--- a/messagingapp/msgui/msgapp/src/msgserviceinterface.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/msgapp/src/msgserviceinterface.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -91,10 +91,11 @@
ContactDetail &contactDetail)
{
QString displayLabel = QString("");
+ int count;
int localId =
MsgContactHandler::resolveContactDisplayName(address.address(),
displayLabel,
- 0);
+ count);
if (localId != -1)
{
@@ -104,5 +105,5 @@
}
return false;
- }
+}
--- a/messagingapp/msgui/msgapp/src/msgviewmanager.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/msgapp/src/msgviewmanager.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -25,7 +25,7 @@
#include <QSqlError>
#include <HbApplication>
#include <xqappmgr.h>
-#include <HbMessageBox.h>
+#include <hbmessagebox.h>
#include <HbView>
#include "conversationsengine.h"
@@ -39,20 +39,20 @@
#include "ringbc.h"
#include "unidatamodelloader.h"
#include "unidatamodelplugininterface.h"
+#include "msgcontacthandler.h"
+#include "debugtraces.h"
+#include "msgaudiofetcherview.h"
// LOCALIZATION
-#define LOC_BUTTON_DELETE hbTrId("txt_common_button_delete")
-#define LOC_BUTTON_CANCEL hbTrId("txt_common_button_cancel")
#define LOC_DELETE_MESSAGE hbTrId("txt_messaging_dialog_delete_message")
#define LOC_DIALOG_SAVE_RINGTONE hbTrId("txt_conversations_dialog_save_ringing_tone")
-#define LOC_COMMON_SAVE hbTrId("txt_common_menu_save")
const qint64 NULL_CONVERSATIONID = -1;
-MsgViewManager::MsgViewManager(bool serviceRequest, HbMainWindow* mainWindow, QObject* parent) :
+MsgViewManager::MsgViewManager(bool serviceRequest, HbMainWindow* mainWindow, QObject* parent,int activityMsgId) :
QObject(parent), mMainWindow(mainWindow), mUniEditor(0), mListView(0), mConversationView(0),
- mUniViewer(0), mDraftsListView(0), mSettingsView(0), mBackAction(0), mServiceRequest(
- serviceRequest), mConversationId(-1), mViewServiceRequest(false),mMessageId(-1)
+ mUniViewer(0), mDraftsListView(0), mSettingsView(0), mAudioFetcherView(0), mBackAction(0),
+ mServiceRequest(serviceRequest), mConversationId(-1), mViewServiceRequest(false),mMessageId(-1)
{
//creating back action.
mBackAction = new HbAction(Hb::BackNaviAction, this);
@@ -60,10 +60,18 @@
//create clv as first view if not a service request.
if (!mServiceRequest) {
+
+ if(activityMsgId == NULL_CONVERSATIONID)
+ {
QVariantList param;
param << MsgBaseView::CLV;
param << MsgBaseView::CLV;
switchView(param);
+ }
+ else
+ {
+ openUniEditorActivity(activityMsgId);
+ }
}
else
{
@@ -77,6 +85,7 @@
MsgViewManager::~MsgViewManager()
{
// TODO Auto-generated destructor stub
+ mEditorData.clear();
}
void MsgViewManager::onBackAction()
@@ -102,6 +111,8 @@
case MsgBaseView::CV:
{
+ mConversationId = -1; //reset the conversation view id since its closed
+
//Save content to drafts before switching to clv
mConversationView->saveContentToDrafts();
@@ -110,7 +121,7 @@
// reset the conversation id published
mConversationView->setPSCVId(false);
-
+
//clearing content of cv.
mConversationView->clearContent();
@@ -186,9 +197,18 @@
}
else {
QVariantList param;
- param << MsgBaseView::CV;
- param << MsgBaseView::UNIVIEWER;
- param << mConversationId;
+ if (mConversationId != -1)
+ {
+ //this means CV is till open then just open the fresh CV
+ param << MsgBaseView::CV;
+ param << MsgBaseView::UNIVIEWER;
+ param << mConversationView->conversationId();
+ }
+ else
+ {
+ param << MsgBaseView::CLV;
+ param << MsgBaseView::UNIVIEWER;
+ }
switchView(param);
}
@@ -202,6 +222,19 @@
switchView(param);
break;
}
+ case MsgBaseView::AUDIOFETCHER:
+ {
+ // switch back to previous view
+ QVariantList param;
+ param << mPreviousView;
+ param << MsgBaseView::AUDIOFETCHER;
+ if(mPreviousView == MsgBaseView::CV)
+ {
+ param << mConversationId;
+ }
+ switchView(param);
+ break;
+ }
default:
{
break;
@@ -211,12 +244,10 @@
void MsgViewManager::switchView(const QVariantList& data)
{
-
- connect(mMainWindow, SIGNAL(viewReady()),this,SLOT(setViewInteractive()));
- mMainWindow->setInteractive(false);
+ QCRITICAL_WRITE("MsgViewManager::switchView start.");
int viewId = data.at(0).toInt();
-
+
switch (viewId) {
case MsgBaseView::DEFAULT:
{
@@ -259,7 +290,13 @@
switchToMsgSettings(data);
break;
}
+ case MsgBaseView::AUDIOFETCHER:
+ {
+ switchToAudioFetcher(data);
+ break;
}
+ }
+ QCRITICAL_WRITE("MsgViewManager::switchView end.");
}
void MsgViewManager::deletePreviousView()
@@ -270,7 +307,6 @@
mMainWindow->removeView(v);
delete v;
}
- disconnect(mMainWindow, SIGNAL(viewReady()), this, SLOT(deletePreviousView()));
}
@@ -369,7 +405,7 @@
if (conversationId < 0) {
param << MsgBaseView::CLV;
param << MsgBaseView::SERVICE;
-
+
if( mCurrentView == MsgBaseView::CV && mConversationView)
{
mConversationView->setPSCVId(false);
@@ -449,22 +485,53 @@
void MsgViewManager::switchToClv(const QVariantList& data)
{
- //switch to CLV.
- mCurrentView = MsgBaseView::CLV;
mPreviousView = data.at(1).toInt();
- // delete case from viewer service
+ // delete case from viewer service
if (mViewServiceRequest && (mPreviousView == MsgBaseView::UNIVIEWER)) {
- // quit the application
+ // quit the application
HbApplication::quit();
}
+ // this is the case when viewer/editor is opened and contacts update takes
+ // place resulting in CV close, the view should directly come to CLV
+ // bypassing the CV
+ if ((mCurrentView == MsgBaseView::UNIVIEWER
+ && mPreviousView != MsgBaseView::UNIVIEWER)
+ || (mCurrentView == MsgBaseView::UNIEDITOR
+ && mPreviousView != MsgBaseView::UNIEDITOR))
+ {
+ //dont do anything
+ //wait for the back from viewer/editor
+ //and reset the open CV id
+ mConversationId = -1;
+ return;
+ }
+
+ //delete UniEditor
+ if (mUniEditor)
+ {
+ appendViewToBeDeleted(mUniEditor);
+ mUniEditor = NULL;
+ }
+
+ //delete UniViewer
+ if (mUniViewer)
+ {
+ appendViewToBeDeleted(mUniViewer);
+ mUniViewer = NULL;
+ }
+
if (mConversationView) {
mConversationView->saveContentToDrafts();
//clearing content of cv.
mConversationView->clearContent();
+ //reset the open CV id
+ mConversationId = -1;
}
-
+
+ //switch to CLV.
+ mCurrentView = MsgBaseView::CLV;
if (!mListView) {
mListView = new MsgListView();
mListView->setNavigationAction(mBackAction);
@@ -474,20 +541,6 @@
}
mMainWindow->setCurrentView(mListView);
-
- //delete UniEditor
- if (mUniEditor)
- {
- appendViewToBeDeleted(mUniEditor);
- mUniEditor = NULL;
- }
-
- //delete UniViewer
- if (mUniViewer)
- {
- appendViewToBeDeleted(mUniViewer);
- mUniViewer = NULL;
- }
}
void MsgViewManager::switchToCv(const QVariantList& data)
@@ -498,44 +551,64 @@
// delete case from viewer service
if (mViewServiceRequest && (mPreviousView == MsgBaseView::UNIVIEWER)) {
- // quit the application
+ // quit the application
HbApplication::quit();
}
+ // delete Audio Fetcher view
+ if(mAudioFetcherView)
+ {
+ appendViewToBeDeleted(mAudioFetcherView);
+ mAudioFetcherView = NULL;
+ }
+
+ //delete UniEditor
+ if (mUniEditor)
+ {
+ appendViewToBeDeleted(mUniEditor);
+ mUniEditor = NULL;
+ }
+
+ //delete UniViewer
+ if (mUniViewer)
+ {
+ appendViewToBeDeleted(mUniViewer);
+ mUniViewer = NULL;
+ }
+
QVariant var = data.at(2);
qint64 conversationId;
if (var.type() == QVariant::String) {
QString phoneNumber = var.toString();
- conversationId = findConversationId(phoneNumber);
+ qint32 contactId = findContactId(phoneNumber);
+ if (contactId != -1) {
+ conversationId = ConversationsEngine::instance()->getConversationIdFromContactId(contactId);
+ }
+ else {
+ conversationId = findConversationId(phoneNumber);
+ }
if (conversationId == NULL_CONVERSATIONID) {
QVariantList param;
param << MsgBaseView::CLV;
param << MsgBaseView::CV;
-
+
if( mCurrentView == MsgBaseView::CV && mConversationView){
mConversationView->setPSCVId(false);
}
-
+
switchView(param);
return;
}
}
else if (var.type() == QVariant::Invalid) {
- // this case comes when a message is deleted from
- // Unified viewer set curent view as conversation view
+ // this case comes when a message is deleted from
+ // Unified viewer set curent view as conversation view
// and return
mMainWindow->setCurrentView(mConversationView);
-
+
// publish already opened conversation's id
mConversationView->setPSCVId(true);
-
- if (mUniViewer)
- {
- appendViewToBeDeleted(mUniViewer);
- mUniViewer = NULL;
- }
-
return;
}
else {
@@ -557,30 +630,10 @@
mConversationView->saveContentToDrafts();
//clearing content of current cv.
mConversationView->clearContent();
- }
+ }
mConversationView->openConversation(conversationId);
-
- if (mServiceRequest) {
- mMainWindow->setCurrentView(mConversationView);
- }
- else {
- mMainWindow->setCurrentView(mConversationView);
- }
-
- //delete UniEditor
- if (mUniEditor)
- {
- appendViewToBeDeleted(mUniEditor);
- mUniEditor = NULL;
- }
-
- //delete UniViewer
- if (mUniViewer)
- {
- appendViewToBeDeleted(mUniViewer);
- mUniViewer = NULL;
- }
+ mMainWindow->setCurrentView(mConversationView);
}
void MsgViewManager::switchToDlv(const QVariantList& data)
@@ -606,24 +659,43 @@
* Editor is tried to open again before exiting the previously
* opened editor. Multi taping in DLV or Forward.
*/
- if (mUniEditor) {
+ if (mUniEditor && !mAudioFetcherView)
+ {
return;
}
mCurrentView = MsgBaseView::UNIEDITOR;
- mPreviousView = data.at(1).toInt();
+ if(MsgBaseView::AUDIOFETCHER != data.at(1).toInt())
+ {
+ mPreviousView = data.at(1).toInt();
+ }
- if (mConversationView) {
+ // delete Audio Fetcher view
+ if(mAudioFetcherView)
+ {
+ appendViewToBeDeleted(mAudioFetcherView);
+ mAudioFetcherView = NULL;
+ }
+
+ // delete UniViewer
+ if (mUniViewer )
+ {
+ appendViewToBeDeleted(mUniViewer);
+ mUniViewer = NULL;
+ }
+
+ if (mConversationView)
+ {
//clearing content of cv.
mConversationView->clearContent();
}
- // reset conversation id published
- if(mPreviousView == MsgBaseView::CV && mConversationView)
- {
- mConversationView->setPSCVId(false);
- }
-
+ // reset conversation id published
+ if(mPreviousView == MsgBaseView::CV && mConversationView)
+ {
+ mConversationView->setPSCVId(false);
+ }
+
//swich to unieditor.
if (!mUniEditor) {
mUniEditor = new MsgUnifiedEditorView();
@@ -642,25 +714,15 @@
}
if (MsgBaseView::DLV == mPreviousView) {
- mUniEditor->openDraftsMessage(editorData);
+ //Populate editor after view ready indication
+ populateUniEditorAfterViewReady(editorData);
}
else {
mUniEditor->populateContent(editorData);
}
}
- if (mServiceRequest) {
- mMainWindow->setCurrentView(mUniEditor);
- }
- else {
- mMainWindow->setCurrentView(mUniEditor);
- }
- //delete UniViewer
- if (mUniViewer )
- {
- appendViewToBeDeleted(mUniViewer);
- mUniViewer = NULL;
- }
+ mMainWindow->setCurrentView(mUniEditor);
}
void MsgViewManager::switchToUniViewer(const QVariantList& data)
@@ -679,29 +741,25 @@
//switch to univiewer.
if (data.length() > 2) {
qint32 contactId = data.at(2).toLongLong();
- QByteArray dataArray = data.at(3).toByteArray();
+ qint32 messageId = data.at(3).toInt();
int msgCount = data.at(4).toInt();
+ int canForwardMessage = data.at(5).toInt();
- ConvergedMessage *message = new ConvergedMessage;
- QDataStream stream(&dataArray, QIODevice::ReadOnly);
- message->deserialize(stream);
- qint32 messageId = message->id()->getId();
if (!mUniViewer) {
- mUniViewer = new UnifiedViewer(messageId);
+ mUniViewer = new UnifiedViewer(messageId, canForwardMessage);
mUniViewer->setNavigationAction(mBackAction);
mMainWindow->addView(mUniViewer);
connect(mUniViewer, SIGNAL(switchView(const QVariantList&)), this,
SLOT(switchView(const QVariantList&)));
}
mUniViewer->populateContent(messageId, true, msgCount);
- delete message;
}
-
+
if(mPreviousView==MsgBaseView::CV && mConversationView)
{
mConversationView->setPSCVId(false);
}
-
+
mMainWindow->setCurrentView(mUniViewer);
}
void MsgViewManager::switchToMsgSettings(const QVariantList& data)
@@ -710,14 +768,14 @@
mPreviousView = data.at(1).toInt();
if (!mSettingsView) {
-
+
MsgSettingsView::SettingsView view = MsgSettingsView::DefaultView;
if (mPreviousView == MsgBaseView::UNIEDITOR || mPreviousView
== MsgBaseView::CV)
{
- view = (MsgSettingsView::SettingsView)data.at(2).toInt();
+ view = (MsgSettingsView::SettingsView)data.at(2).toInt();
}
-
+
mSettingsView = new MsgSettingsView(view);
mSettingsView->setNavigationAction(mBackAction);
mMainWindow->addView(mSettingsView);
@@ -809,9 +867,9 @@
default:
{
// for un supported message show delete option
- HbMessageBox::question(LOC_DELETE_MESSAGE,this,SLOT(onDialogDeleteMsg(HbAction*)),
- LOC_BUTTON_DELETE,
- LOC_BUTTON_CANCEL);
+ HbMessageBox::question(LOC_DELETE_MESSAGE,this,
+ SLOT(onDialogDeleteMsg(HbAction*)),
+ HbMessageBox::Delete | HbMessageBox::Cancel);
break;
}
}
@@ -847,7 +905,8 @@
{
mMessageId = msgId;
HbMessageBox::question(LOC_DIALOG_SAVE_RINGTONE, this,
- SLOT(onDialogSaveTone(HbAction*)), LOC_COMMON_SAVE, LOC_BUTTON_CANCEL);
+ SLOT(onDialogSaveTone(HbAction*)),
+ HbMessageBox::Save | HbMessageBox::Cancel);
}
// ----------------------------------------------------------------------------
@@ -888,7 +947,7 @@
{
mMainWindow->setInteractive(true);
}
-
+
disconnect(mMainWindow, SIGNAL(viewReady()),this,SLOT(setViewInteractive()));
}
@@ -897,11 +956,38 @@
if (view)
{
mViewTobeDeleted << view;
- connect(mMainWindow, SIGNAL(viewReady()), this, SLOT(deletePreviousView()));
+ connect(mMainWindow, SIGNAL(viewReady()), this, SLOT(deletePreviousView()), Qt::UniqueConnection);
}
}
// ----------------------------------------------------------------------------
+// MsgViewManager::populateEditorAfterViewReady
+// @see header
+// ----------------------------------------------------------------------------
+void MsgViewManager::populateUniEditorAfterViewReady(const QVariantList& editorData)
+ {
+ //Save the editor data and use it in ViewReady handler
+ mEditorData = editorData;
+ connect(mMainWindow, SIGNAL(viewReady()), this, SLOT(populateUniEditorView()));
+ }
+
+// ----------------------------------------------------------------------------
+// MsgViewManager::populateUniEditorView
+// @see header
+// ----------------------------------------------------------------------------
+void MsgViewManager::populateUniEditorView()
+ {
+ if (mUniEditor)
+ {
+ mUniEditor->openDraftsMessage(mEditorData);
+ }
+ mEditorData.clear();
+
+ disconnect(mMainWindow, SIGNAL(viewReady()), this,
+ SLOT(populateUniEditorView()));
+}
+
+// ----------------------------------------------------------------------------
// MsgViewManager::onDialogDeleteMsg
// @see header
// ----------------------------------------------------------------------------
@@ -948,3 +1034,124 @@
HbApplication::quit();
}
+// ----------------------------------------------------------------------------
+// MsgViewManager::currentView
+// @see header
+// ----------------------------------------------------------------------------
+int MsgViewManager::currentView()
+ {
+ return mCurrentView;
+ }
+
+// ----------------------------------------------------------------------------
+// MsgViewManager::switchToAudioFetcher
+// @see header
+// ----------------------------------------------------------------------------
+void MsgViewManager::switchToAudioFetcher(const QVariantList& data)
+ {
+ /**
+ * Audio Fetcher is tried to open again
+ */
+ if(mAudioFetcherView)
+ {
+ return;
+ }
+
+ //switch to Audio Fetcher view
+ mCurrentView = MsgBaseView::AUDIOFETCHER;
+ mPreviousView = data.at(1).toInt();
+ QVariantList editorData;
+ // i=2 because view manager consumed first two args
+ for (int i = 2; i < data.length(); i++) {
+ editorData << data.at(i);
+ }
+ mAudioFetcherView = new MsgAudioFetcherView(editorData);
+ mAudioFetcherView->setNavigationAction(mBackAction);
+ connect(mAudioFetcherView, SIGNAL(switchView(const QVariantList&)), this,
+ SLOT(switchView(const QVariantList&)));
+
+ if(mPreviousView==MsgBaseView::CV && mConversationView)
+ {
+ mConversationView->setPSCVId(false);
+ }
+
+ mMainWindow->addView(mAudioFetcherView);
+ mMainWindow->setCurrentView(mAudioFetcherView);
+ }
+
+// ----------------------------------------------------------------------------
+// MsgViewManager::saveContentToDraft
+// @see header
+// ----------------------------------------------------------------------------
+int MsgViewManager::saveContentToDraft()
+ {
+ int msgId = NULL_CONVERSATIONID;
+ if( mCurrentView == MsgBaseView::CV )
+ {
+ msgId = mConversationView->saveContentToDrafts();
+ }
+ else if( mCurrentView ==MsgBaseView::UNIEDITOR)
+ {
+ msgId = mUniEditor->saveContentToDrafts();
+ }
+ return msgId;
+ }
+
+// ----------------------------------------------------------------------------
+// MsgViewManager::saveContentToDraft
+// @see header
+// ----------------------------------------------------------------------------
+void MsgViewManager::openUniEditorActivity(int activityMsgId)
+{
+ int msgType;
+ int msgSubType;
+
+ qint32 messageId(activityMsgId);
+ // get the message type
+ ConversationsEngine::instance()->markAsReadAndGetType(messageId, msgType, msgSubType);
+
+ if (!mUniEditor) {
+ mUniEditor = new MsgUnifiedEditorView();
+ mMainWindow->addView(mUniEditor);
+ mUniEditor->setNavigationAction(mBackAction);
+ connect(mUniEditor, SIGNAL(switchView(const QVariantList&)), this,
+ SLOT(switchView(const QVariantList&)));
+ }
+
+ // buffer data to open the draft message
+ ConvergedMessageId convergedMsgId(activityMsgId);
+ ConvergedMessage message;
+ message.setMessageType((ConvergedMessage::MessageType) msgType);
+ message.setMessageId(convergedMsgId);
+
+ // Launch uni-editor view
+ QByteArray dataArray;
+ QDataStream messageStream(&dataArray, QIODevice::WriteOnly | QIODevice::Append);
+ message.serialize(messageStream);
+
+ QVariantList editorData;
+ editorData << dataArray;
+ mUniEditor->openDraftsMessage(editorData);
+
+ // set the current view
+ mCurrentView = MsgBaseView::UNIEDITOR;
+ mMainWindow->setCurrentView(mUniEditor);
+}
+
+// ----------------------------------------------------------------------------
+// MsgViewManager::findContactId
+// @see header
+// ----------------------------------------------------------------------------
+qint32 MsgViewManager::findContactId(QString address)
+ {
+ QString displayLabel;
+ int count;
+ int localId =
+ MsgContactHandler::resolveContactDisplayName(address,
+ displayLabel,
+ count);
+
+ return localId;
+ }
+
+//EOF
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/msgaudiofetcher/inc/msgaudiofetchermodel.h Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,127 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ * The header file for messaging's audio fetcher model
+ *
+ */
+
+#ifndef MSGAUDIOFETCHERMODEL_H
+#define MSGAUDIOFETCHERMODEL_H
+
+// SYSTEM INCLUDES
+#include <QStandardItemModel>
+#include <QStringList>
+#include <QDir>
+
+// FORWARD DECLARATIONS
+class MsgAudioSelectionEngine;
+
+/**
+ * @class MsgAudioFetcherModel
+ * @brief This class is messaging's audio fetcher model
+ */
+class MsgAudioFetcherModel : public QStandardItemModel
+{
+Q_OBJECT
+
+public:
+ /**
+ * Constructor
+ */
+ explicit MsgAudioFetcherModel(QObject *parent);
+
+ /**
+ * Destructor
+ */
+ virtual ~MsgAudioFetcherModel();
+
+ /**
+ * Clears model
+ */
+ void clearAll();
+
+ /**
+ * adds a row into the model
+ */
+ void addRow(QString filepath);
+
+public: //from QAbstractItemModel
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
+
+private:
+ /**
+ * binary search (ascendant) for the correct index to insert.
+ * @param low the start of search
+ * @param high the end of search.
+ * @return the correct index
+ */
+ int insertIndex(int low, int high, QString variant);
+
+ /**
+ * Add audio files into the model
+ * @param toneDir, Dir from which to get audio files to add to model
+ */
+ void addToneFiles(QDir& toneDir);
+
+ /**
+ * Finds and adds audio files into the model
+ */
+ void getRomToneFiles();
+
+ /**
+ * Initialize the model
+ */
+ void init();
+
+ /**
+ * checks if the given file is DRM protected
+ * @param filepath, path of audio file
+ */
+ bool isDRM(QString filepath);
+
+private slots:
+ /**
+ * Handle MDS session open
+ */
+ void mdeSessionOpened();
+
+ /**
+ * Handle MDS session open error
+ */
+ void mdeSessionError(int error);
+
+ /**
+ * Handle MDS query complete
+ */
+ void queryComplete(const QStringList &nameList,
+ const QStringList &uriList);
+
+ /**
+ * Handle MDS query error
+ */
+ void queryError(int error);
+
+ /**
+ * Handle object observer callback
+ */
+ void onObjectChanged();
+
+private:
+ /**
+ * audio selection engine
+ */
+ MsgAudioSelectionEngine* mSelectionEngine;
+};
+
+#endif /* MsgAudioFetcherModel_H_ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/msgaudiofetcher/inc/msgaudiofetcherview.h Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,113 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ * The header file for messaging's audio fetcher view.
+ *
+ */
+
+#ifndef MSGAUDIOFETCHERVIEW_H
+#define MSGAUDIOFETCHERVIEW_H
+
+#ifdef BUILD_MSGAUDIOFETCHER_DLL
+#define MSGAUDIOFETCHER_DLL_EXPORT Q_DECL_EXPORT
+#else
+#define MSGAUDIOFETCHER_DLL_EXPORT Q_DECL_IMPORT
+#endif
+
+// SYSTEM INCLUDES
+#include <QObject>
+#include <hblistwidget.h>
+
+// USER INCLUDES
+#include "msgbaseview.h"
+#include "convergedmessage.h"
+
+// FORWARD DECLARATIONS
+class MsgAudioFetcherWidget;
+class HbAction;
+
+/**
+ * @class MsgAudioFetcherView
+ * @brief This class is messaging's audio fetcher view
+ */
+class MSGAUDIOFETCHER_DLL_EXPORT MsgAudioFetcherView : public MsgBaseView
+{
+Q_OBJECT
+
+public:
+ /**
+ * Constructor
+ */
+ explicit MsgAudioFetcherView(const QVariantList& data);
+
+ /**
+ * Destructor
+ */
+ ~MsgAudioFetcherView();
+private:
+ /**
+ * Creates a widget and sets it to the view
+ */
+ void initMainWidget();
+
+ /**
+ * Initializes view's toolbar actions
+ */
+ void initToolBar();
+
+ /**
+ * tool bar actions must to be removed in case the app crashes.
+ */
+ void removeToolBarAction();
+
+private slots:
+ /**
+ * Handles toolbar's leftaction (play/pause)
+ */
+ void on_leftAction_triggered();
+
+ /**
+ * Handles toolbar's rightaction (select)
+ */
+ void on_rightAction_triggered();
+
+ /**
+ * enable toolbar actions, only when an item is selected
+ */
+ void enableToolBar(bool enable);
+
+private:
+ /**
+ * view's main widget
+ */
+ MsgAudioFetcherWidget *mWidget;
+
+ /**
+ * Toolbar's left action
+ */
+ HbAction *mToolBarLeftAction;
+
+ /**
+ * Toolbar's right action
+ */
+ HbAction *mToolBarRightAction;
+
+ /**
+ * Converged Message object
+ * owned
+ */
+ ConvergedMessage* message;
+};
+
+#endif /* MSGAUDIOFETCHERVIEW_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/msgaudiofetcher/inc/msgaudiofetcherwidget.h Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,120 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ * The header file for messaging's audio fetcher widget.
+ *
+ */
+#ifndef MSGAUDIOFETCHERWIDGET_H
+#define MSGAUDIOFETCHERWIDGET_H
+
+// SYSTEM INCLUDES
+#include <HbWidget>
+
+// USER INCLUDES
+class HbListView;
+class QGraphicsLinearLayout;
+class MsgAudioFetcherView;
+class MsgAudioFetcherModel;
+class HbLabel;
+class MsgAudioPreview;
+
+/**
+ * @class MsgAudioFetcherWidget
+ * @brief This class is messaging's audio fetcher view's mainwidget
+ */
+class MsgAudioFetcherWidget : public HbWidget
+{
+Q_OBJECT
+
+public:
+ /**
+ * Constructor
+ */
+ explicit MsgAudioFetcherWidget();
+
+ /**
+ * Destructor
+ */
+ ~MsgAudioFetcherWidget();
+
+ /**
+ * Get the path of item selected in the list
+ */
+ QString getCurrentItemPath();
+
+ /**
+ * Play or pause the audio file
+ */
+ void playOrPause();
+
+signals:
+ /**
+ * Signal to enable/disable the toolbar
+ */
+ void triggerToolBar(bool enable);
+
+private slots:
+ /**
+ * Handles selection of a list item
+ */
+ void on_list_activated(const QModelIndex &index);
+private:
+ /**
+ * initializes widget
+ */
+ void init();
+
+private:
+ /**
+ * label of the list view
+ * owned
+ */
+ HbLabel *mLabel;
+
+ /**
+ * list view
+ * owned
+ */
+ HbListView *mListView;
+
+ /**
+ * list's layout
+ * owned
+ */
+ QGraphicsLinearLayout *mLayout;
+
+ /**
+ * populating model
+ * owned
+ */
+ MsgAudioFetcherModel *mFetcherModel;
+
+ /**
+ * For previewing audio files
+ * owned
+ */
+ MsgAudioPreview* mAudioPreview;
+
+ /**
+ * selection state
+ */
+ bool mSelected;
+
+ /**
+ * last selected item
+ */
+ QModelIndex mOldSeletedItem;
+};
+
+#endif /* MSGAUDIOFETCHERWIDGET_H_ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/msgaudiofetcher/inc/msgaudiopreview.h Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,211 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ * The header file for tone previewing.
+ *
+ */
+
+#ifndef MSGAUDIOPPREVIEW_H
+#define MSGAUDIOPPREVIEW_H
+
+#include <e32base.h>
+#include <DrmAudioSamplePlayer.h>
+#include <mdaaudiotoneplayer.h>
+#include <videoplayer.h>
+#include <centralrepository.h>
+#include <apgcli.h> // for RApaLsSession
+#include <e32property.h>
+#include <QObject>
+
+class C3DRingingToneInterface;
+class RWindow;
+
+/**
+ * CMFPreviewHandlerBase
+ *
+ * Base class for CMFAudioPreviewHandler.
+ */
+class CMFPreviewHandlerBase: public QObject, public CBase
+
+{
+Q_OBJECT
+public:
+
+ enum TMediaFileType
+ {
+ EMediaFileTypeAudio = 0, EMediaFileTypeVideo
+ };
+ enum TPlayerStatus
+ {
+ EPlayerNotCreated,
+ EPlayerInitializing,
+ EPlayerReady,
+ EPlayerPlaying,
+ EPlayerInitialized,
+ EPlayerPlayingWith3DEffect
+ };
+
+ // these must match with the ones in Profile Engine
+ enum TRingingTypes
+ {
+ ERingingTypeRinging = 0,
+ ERingingTypeAscending,
+ ERingingTypeRingOnce,
+ ERingingTypeBeepOnce,
+ ERingingTypeSilent
+ };
+
+ enum TFLAllowScreenSaver
+ {
+ EFLScreenSaverAllowed = 0, EFLScreenSaverNotAllowed
+ };
+
+protected:
+
+ virtual ~CMFPreviewHandlerBase();
+
+protected:
+
+ /**
+ * C++ default constructor.
+ */
+ CMFPreviewHandlerBase(QObject *parent);
+
+ /**
+ * By default Symbian OS constructor is private.
+ */
+ void ConstructL();
+
+public:
+ void SetAttr(const QString &file);
+ TInt Attr(TInt aAttr);
+ virtual void Play() = 0;
+ virtual void Stop() = 0;
+ virtual TBool IsPlaying() = 0;
+ QString normalizeSeperator(const QString &path);
+protected:
+ TInt ConvertVolume(TInt aVolume);
+ void ReadActiveProfileL();
+ TInt GetDataType(const TDesC& aFileName, TDataType& aDataType);
+ void ReadDefaultToneL();
+
+ void DisableBackLight();
+
+ static TInt DoResetInactivityTimer(TAny* aObject);
+protected:
+ TInt RingingVolume();
+ TInt RingingType();
+ TInt Vibra();
+ TInt Echo3D();
+ TInt Effect3D();
+
+protected:
+ static TInt ConvertVolume(TInt aVolume, TInt aMaxVolume);
+
+protected:
+ TInt iRingingVolume;
+ TInt iRingingType;
+ TInt iVibra;
+ TInt i3DEffect;
+ TInt i3DEcho;
+ TInt iMediaType;
+ TInt iFileSize;
+ HBufC* iFullName;
+
+ TBool iActiveProfileRead;
+ TInt iActiveProfileRingingVolume;
+ TInt iActiveProfileRingingType;
+ TInt iActiveProfileVibra;
+ TInt iActiveProfile3DEffect;
+ TInt iActiveProfile3DEcho;
+
+ TInt iPlayerStatus;
+
+ // handle to window
+ RWindow* iWindow; // does not own
+
+ // for getting file MIME types
+ RApaLsSession iApaSession;
+
+ // for setting screensaver on/off
+ RProperty iProperty;
+
+ // default ringing tone
+ TFileName iDefaultTone;
+
+ /**
+ * Timer for resetting the user inactivity timeout
+ */
+ CPeriodic* iBacklightTimer;
+};
+
+// CLASS DECLARATION
+/**
+ * This class is used for previewing the tones.
+ *
+ */
+
+class MsgAudioPreview: public CMFPreviewHandlerBase,
+ public MDrmAudioPlayerCallback,
+ public MMdaAudioToneObserver
+
+{
+Q_OBJECT
+public:
+ MsgAudioPreview(QObject *parent);
+ virtual ~MsgAudioPreview();
+signals:
+ // void notifyPreviewEvent(ToneFetcherEngine::TPreviewEvent event, int errorId);
+
+public:
+ void Play();
+ void Stop();
+ TBool IsPlaying();
+
+private:
+ void Cancel();
+ void SetAudioRingingType(TInt aRingingType);
+ void SetToneRingingType(TInt aRingingType);
+ TInt ConvertVolume(TInt aVolume);
+ void PlayL();
+
+private:
+ // from MMdaAudioToneObserver
+ virtual void MatoPrepareComplete(TInt aError);
+ virtual void MatoPlayComplete(TInt aError);
+
+private:
+ // from MDrmAudioPlayerCallback
+ void MdapcInitComplete(TInt aError, const TTimeIntervalMicroSeconds& aDuration);
+ void MdapcPlayComplete(TInt aError);
+
+private:
+ // audio player
+ CDrmPlayerUtility* iAudioPlayer;
+
+ /// Audioplayer status
+ TPlayerStatus iAudioPlayerStatus;
+
+ /// toneplayer
+ CMdaAudioToneUtility* iTonePlayer;
+
+ /// Toneplayer status
+ TPlayerStatus iTonePlayerStatus;
+
+ // plugin for playing 3D effects
+ C3DRingingToneInterface* i3dRingingTonePlugin;
+
+};
+
+#endif /* MSGAUDIOPPREVIEW_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/msgaudiofetcher/inc/msgaudioselectionengine.h Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,138 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ * The header file for mde tone fetcher.
+ *
+ */
+#ifndef MSGAUDIOSELECTIONENGINE_H
+#define MSGAUDIOSELECTIONENGINE_H
+
+// SYSTEM INCLUDES
+#include <mdesession.h>
+#include <mdequery.h>
+#include <mdelogiccondition.h>
+#include <mdeconstants.h>
+#include <mdeobjectquery.h>
+#include <mdccommon.h>
+#include <mdeitem.h>
+#include <mdeobject.h>
+#include <e32base.h>
+#include <QObject>
+#include <QStringList>
+
+// FORWARD DECLARATIONS
+
+/**
+ * This class is used for quering tones from mde.
+ */
+class MsgAudioSelectionEngine : public QObject,
+ public CBase,
+ public MMdESessionObserver,
+ public MMdEQueryObserver,
+ public MMdEObjectObserver,
+ public MMdEObjectPresentObserver
+{
+Q_OBJECT
+
+public:
+
+ enum TStorageType
+ {
+ EPhoneMemory = 0, ERomStorage, EMassStorage, EMemoryCard
+ };
+
+ enum TQueryAttribute
+ {
+ EAttrMediaType = 20, // integer
+ EAttrFileSize, // integer
+ EAttrStorageType, // integer
+ EAttrMediaFileId, // integer
+ EAttrFileName, // string
+ EAttrFullName, // string
+ EAttrSongName, // string
+ EAttrArtist, // string
+ EAttrAlbum, // string
+ EAttrGenre, // string
+ EAttrComposer
+ // string
+ };
+
+public:
+ MsgAudioSelectionEngine();
+ virtual ~MsgAudioSelectionEngine();
+ void CreateMetaDataSession();
+signals:
+ void mdeSessionOpened();
+ void mdeSessionError(int error);
+ void queryComplete(QStringList nameList, QStringList uriList);
+ void queryError(int error);
+ void notifyObjectChanged();
+
+public:
+ static CMdEPropertyDef& PropertyDefL(CMdESession* aSession, TInt aAttr);
+ void QueryTones();
+ void SetAttr(int attr, int value);
+
+private:
+ void LeaveIfSessionClosedL();
+ CMdEPropertyDef& PropertyDefL(TInt aAttr);
+ void QueryTonesL();
+ void HandleQueryCompletedL(CMdEQuery& aQuery, TInt aError);
+
+private:
+ // from MMdESessionObserver
+ void HandleSessionOpened(CMdESession& aSession, TInt aError);
+ void HandleSessionError(CMdESession& aSession, TInt aError);
+
+private:
+ // from MMdEQueryObserver (mdequery.h)
+ void HandleQueryNewResults(CMdEQuery& aQuery, TInt aFirstNewItemIndex,
+ TInt aNewItemCount);
+ void HandleQueryCompleted(CMdEQuery& aQuery, TInt aError);
+private:
+ // from MMdEObjectObserver
+ void HandleObjectNotification(CMdESession& aSession,
+ TObserverNotificationType aType,
+ const RArray<TItemId>& aObjectIdArray);
+
+private:
+ // from MMdEObjectPresentObserver
+ void HandleObjectPresentNotification(CMdESession& aSession,
+ TBool aPresent, const RArray<TItemId>& aObjectIdArray);
+ void AddObjectObserverL();
+private:
+
+
+ // session to metadata engine
+ CMdESession* iSession;
+
+ // metadata query
+ CMdEObjectQuery* iQuery;
+
+ // used for saving the quering result.
+ //both name and uri.
+ QStringList iNameList;
+ QStringList iUriList;
+
+ // is metadata session open
+ TBool iSessionOpen;
+
+ // max audio file file size
+ TInt iMaxFileSize;
+
+ // query error
+ TInt iQueryError;
+};
+#endif /* MSGAUDIOSELECTIONENGINE_H */
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/msgaudiofetcher/msgaudiofetcher.pro Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,81 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+TEMPLATE = lib
+TARGET = msgaudiofetcher
+DEFINES += BUILD_MSGAUDIOFETCHER_DLL
+
+DEPENDPATH += . \
+ inc \
+ src
+
+INCLUDEPATH += ../inc
+INCLUDEPATH += ../../../inc
+INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+
+CONFIG += hb
+
+TARGET.UID3 = 0x2001FE67
+TARGET.CAPABILITY = All -TCB
+TARGET.EPOCALLOWDLLDATA = 1
+
+# Platforms
+SYMBIAN_PLATFORMS = WINSCW \
+ ARMV5
+
+# Build.inf rules
+BLD_INF_RULES.prj_exports += "$${LITERAL_HASH}include <platform_paths.hrh>" \
+ "rom/msgaudiofetcher.iby CORE_APP_LAYER_IBY_EXPORT_PATH(msgaudiofetcher.iby)"
+
+# Input
+HEADERS += msgaudioselectionengine.h \
+ msgaudiofetchermodel.h \
+ msgaudiofetcherwidget.h \
+ msgaudiofetcherview.h \
+ msgaudiopreview.h \
+ ../inc/msgbaseview.h
+
+SOURCES += msgaudioselectionengine.cpp \
+ msgaudiofetchermodel.cpp \
+ msgaudiofetcherwidget.cpp \
+ msgaudiofetcherview.cpp \
+ msgaudiopreview.cpp
+
+defBlock = \
+ "$${LITERAL_HASH}if defined(EABI)" \
+ "DEFFILE ../eabi/msgaudiofetcher.def" \
+ "$${LITERAL_HASH}else" \
+ "DEFFILE ../bwins/msgaudiofetcher.def" \
+ "$${LITERAL_HASH}endif"
+
+MMP_RULES += defBlock
+
+# Libs
+LIBS += -lconvergedmessageutils \
+ -lxqutils \
+ -lmdeclient \
+ -lcentralrepository \
+ -lProfileEng \
+ -lmediaclientaudio \
+ -lDrmAudioPlayUtility \
+ -lDRMCommon \
+ -lDrmRights \
+ -lDrmHelper \
+ -ldrmutility \
+ -lapmime \
+ -lecom \
+ -lxqservice \
+ -lapgrfx
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/msgaudiofetcher/rom/msgaudiofetcher.iby Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#ifndef __MSGAUDIOFETCHER_IBY__
+#define __MSGAUDIOFETCHER_IBY__
+
+REM DLL
+file=ABI_DIR\UREL\msgaudiofetcher.dll SHARED_LIB_DIR\msgaudiofetcher.dll
+
+#endif // __MSGAUDIOFETCHER_IBY__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/msgaudiofetcher/src/msgaudiofetchermodel.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,192 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ * The source file for messaging's audio fetcher model
+ */
+
+// SYSTEM INCLUDES
+#include <xqutils.h>
+#include <xqappmgr.h>
+
+// USER INCLUDES
+#include "msgaudiofetchermodel.h"
+#include "msgaudioselectionengine.h"
+
+MsgAudioFetcherModel::MsgAudioFetcherModel(QObject *parent) :
+ QStandardItemModel(parent), mSelectionEngine(0)
+{
+ init();
+}
+
+MsgAudioFetcherModel::~MsgAudioFetcherModel()
+{
+ delete mSelectionEngine;
+}
+
+void MsgAudioFetcherModel::init()
+{
+ mSelectionEngine = new MsgAudioSelectionEngine();
+
+ connect(mSelectionEngine, SIGNAL(mdeSessionOpened()), this, SLOT(mdeSessionOpened()));
+ connect(mSelectionEngine, SIGNAL(mdeSessionError(int)), this, SLOT(mdeSessionError(int)));
+ connect(mSelectionEngine, SIGNAL(queryComplete(QStringList, QStringList)), this,
+ SLOT(queryComplete(QStringList, QStringList)));
+ connect(mSelectionEngine, SIGNAL(queryError(int)), this, SLOT(queryError(int)));
+
+ connect(mSelectionEngine, SIGNAL(notifyObjectChanged()), this, SLOT(onObjectChanged()));
+ mSelectionEngine->CreateMetaDataSession();
+}
+
+void MsgAudioFetcherModel::getRomToneFiles()
+{
+ // z:\data\sounds\digital
+ QDir digitalsoundPath(XQUtils::romRootPath() + XQUtils::digitalSoundsPath());
+ addToneFiles(digitalsoundPath);
+
+ //z:\data\sounds\simple
+ QDir simpleSoundPath(XQUtils::romRootPath() + XQUtils::simpleSoundsPath());
+ addToneFiles(simpleSoundPath);
+
+ //z:\data\sounds
+ QDir soundPath(XQUtils::romRootPath() + XQUtils::soundsPath());
+ addToneFiles(soundPath);
+}
+
+void MsgAudioFetcherModel::addToneFiles(QDir& toneDir)
+{
+ // List only xx.amr files
+ QStringList filters;
+ filters << "*.amr";
+ toneDir.setNameFilters(filters);
+
+ QStringList soundList = toneDir.entryList();
+ for (int i = 0; i < soundList.size(); ++i) {
+ QString fullPath = QDir::toNativeSeparators(toneDir.absolutePath());
+ fullPath.append(QDir::separator());
+ fullPath.append(soundList.at(i));
+ addRow(fullPath);
+ }
+}
+
+QVariant MsgAudioFetcherModel::data(const QModelIndex &index, int role) const
+{
+ return QStandardItemModel::data(index, role);
+}
+
+void MsgAudioFetcherModel::addRow(QString filepath)
+{
+ if(isDRM(filepath))
+ {
+ // don't insert DRM protected files, as sending itself
+ // is not allowed in 'Restricted Mode'
+ return;
+ }
+
+ QFileInfo fInfo(filepath);
+ QStandardItem* item = new QStandardItem();
+ QString filename = fInfo.baseName();
+ item->setData(filename, Qt::DisplayRole);
+ item->setData(filepath, Qt::UserRole);
+
+ // get insert index
+ int index = this->insertIndex(0, rowCount(), filename);
+ insertRow(index, item);
+}
+
+int MsgAudioFetcherModel::insertIndex(int low, int high, QString value)
+{
+ if (low == high) {
+ return low;
+ }
+ int middle = (low + high - 1) / 2;
+ QModelIndex lowItemIndex = ((QStandardItemModel *) this)->index(low, 0);
+ QModelIndex highItemIndex = ((QStandardItemModel *) this)->index(high - 1, 0);
+ QModelIndex middleItemIndex = ((QStandardItemModel *) this)->index(middle, 0);
+ QString lowString = data(lowItemIndex).toString();
+ QString highString = data(highItemIndex).toString();
+ QString middleString = data(middleItemIndex).toString();
+
+ if (value >= highString) {
+ return high;
+ }
+ if (value < lowString) {
+ return low;
+ }
+ high = high - 1;
+ while (low < high) {
+ middle = (low + high) / 2;
+ middleItemIndex = ((QStandardItemModel *) this)->index(middle, 0);
+ middleString = data(middleItemIndex).toString();
+ if (value >= middleString) {
+ low = middle + 1;
+ }
+ else {
+ high = middle;
+ }
+ }
+ return low;
+}
+
+void MsgAudioFetcherModel::clearAll()
+{
+ QStandardItemModel::clear();
+}
+
+void MsgAudioFetcherModel::mdeSessionOpened()
+{
+ mSelectionEngine->QueryTones();
+ getRomToneFiles();
+}
+
+void MsgAudioFetcherModel::queryComplete(const QStringList &nameList, const QStringList &uriList)
+{
+ for (int i = 0; i < nameList.size(); ++i) {
+ addRow(uriList.at(i));
+ }
+}
+
+void MsgAudioFetcherModel::queryError(int error)
+{
+ Q_UNUSED(error);
+}
+
+void MsgAudioFetcherModel::mdeSessionError(int error)
+{
+ Q_UNUSED(error);
+}
+
+void MsgAudioFetcherModel::onObjectChanged()
+{
+ clearAll();
+ getRomToneFiles();
+ mSelectionEngine->QueryTones();
+}
+
+bool MsgAudioFetcherModel::isDRM(QString filepath)
+{
+ QList<int> attrNames;
+ attrNames.append(XQApplicationManager::IsProtected);
+
+ QFile file(filepath);
+ QVariantList attrValues;
+ XQApplicationManager appmgr;
+ bool ok = appmgr.getDrmAttributes(file, attrNames, attrValues);
+ if(!ok)
+ {
+ return true;
+ }
+ return (0 < attrValues.at(0).toInt());
+}
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/msgaudiofetcher/src/msgaudiofetcherview.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,122 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ * The source file for messaging's audio fetcher view.
+ *
+ */
+
+// SYSTEM INCLUDES
+#include <hbaction.h>
+#include <hbtoolbar.h>
+
+// USER INCLUDES
+#include "msgaudiofetcherview.h"
+#include "msgaudiofetcherwidget.h"
+#include "convergedmessage.h"
+
+MsgAudioFetcherView::MsgAudioFetcherView(const QVariantList& data) :
+message(NULL)
+{
+ message = new ConvergedMessage;
+ if(data.length() > 0)
+ {
+ QByteArray dataArray = data.at(0).toByteArray();
+ QDataStream stream(&dataArray, QIODevice::ReadOnly);
+ message->deserialize(stream);
+ }
+ initToolBar();
+ initMainWidget();
+ QMetaObject::connectSlotsByName(this);
+}
+
+MsgAudioFetcherView::~MsgAudioFetcherView()
+{
+ if(message != NULL)
+ {
+ delete message;
+ message = NULL;
+ }
+ removeToolBarAction();
+}
+
+void MsgAudioFetcherView::initMainWidget()
+{
+ mWidget = new MsgAudioFetcherWidget();
+ Q_ASSERT(mWidget);
+ setWidget(mWidget);
+ connect(mWidget, SIGNAL(triggerToolBar(bool)), this, SLOT(enableToolBar(bool)));
+}
+
+void MsgAudioFetcherView::initToolBar()
+{
+ mToolBarLeftAction = new HbAction(this);
+ mToolBarLeftAction->setObjectName("leftAction");
+ //TODO: need localized string
+ mToolBarLeftAction->setText(hbTrId("Play/Pause"));
+ toolBar()->addAction(mToolBarLeftAction);
+ mToolBarLeftAction->setEnabled(false);
+
+ mToolBarRightAction = new HbAction(this);
+ mToolBarRightAction->setObjectName("rightAction");
+ //TODO: need localized string
+ mToolBarRightAction->setText(hbTrId("Select"));
+ mToolBarRightAction->setEnabled(false);
+ toolBar()->addAction(mToolBarRightAction);
+
+ toolBar()->setOrientation(Qt::Horizontal);
+ toolBar()->setEnabled(false);
+}
+
+void MsgAudioFetcherView::removeToolBarAction()
+{
+ toolBar()->removeAction(mToolBarRightAction);
+ toolBar()->removeAction(mToolBarLeftAction);
+}
+
+void MsgAudioFetcherView::on_leftAction_triggered()
+{
+ mWidget->playOrPause();
+}
+
+void MsgAudioFetcherView::on_rightAction_triggered()
+{
+ // param list for switching to editor view
+ QVariantList params;
+ QByteArray dataArray;
+ QDataStream messageStream
+ (&dataArray, QIODevice::WriteOnly | QIODevice::Append);
+
+ QString filepath(mWidget->getCurrentItemPath());
+ ConvergedMessageAttachment* attachment =
+ new ConvergedMessageAttachment(filepath);
+ ConvergedMessageAttachmentList attachmentList;
+ attachmentList.append(attachment);
+ message->addAttachments(attachmentList);
+
+ message->serialize(messageStream);
+ params << MsgBaseView::UNIEDITOR;
+ params << MsgBaseView::AUDIOFETCHER;
+ params << dataArray;
+ params << MsgBaseView::ADD_AUDIO;
+ emit switchView(params);
+}
+
+void MsgAudioFetcherView::enableToolBar(bool enable)
+{
+ mToolBarRightAction->setEnabled(enable);
+ mToolBarLeftAction->setEnabled(enable);
+ toolBar()->setEnabled(enable);
+}
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/msgaudiofetcher/src/msgaudiofetcherwidget.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,140 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ * The source file for messaging's audio fetcher widget.
+ *
+ */
+
+// SYSTEM INCLUDES
+#include <HbListView>
+#include <QModelIndex>
+#include <QGraphicsLinearLayout>
+#include <QStandardItemModel>
+#include <HbLabel>
+
+// USER INCLUDES
+#include "msgaudiofetcherwidget.h"
+#include "msgaudiofetchermodel.h"
+#include "msgaudiopreview.h"
+
+// LOCALIZED CONSTANTS
+#define LOC_SELECT_SOUND hbTrId("txt_messaging_title_select_a_sound")
+
+
+MsgAudioFetcherWidget::MsgAudioFetcherWidget()
+ : HbWidget(this),
+ mLabel(0),
+ mListView(0),
+ mLayout(0),
+ mFetcherModel(0),
+ mAudioPreview(0),
+ mSelected(false)
+{
+ init();
+}
+
+MsgAudioFetcherWidget::~MsgAudioFetcherWidget()
+{
+}
+
+QString MsgAudioFetcherWidget::getCurrentItemPath()
+{
+ QModelIndexList modelIndexList = mListView->selectionModel()->selectedIndexes();
+ if(modelIndexList.count() > 0)
+ {
+ QModelIndex index = modelIndexList.at(0);
+ QString temppath =
+ mFetcherModel->data(index, Qt::UserRole).toString();
+ return QDir::toNativeSeparators(temppath);
+ }
+ return QString();
+}
+
+void MsgAudioFetcherWidget::playOrPause()
+{
+ mAudioPreview->SetAttr(getCurrentItemPath());
+ mAudioPreview->Play();
+}
+
+void MsgAudioFetcherWidget::on_list_activated(const QModelIndex &index)
+{
+ QModelIndexList modelIndexList = mListView->selectionModel()->selectedIndexes();
+
+ //stop previewing when clicking another item.
+ if (mAudioPreview->IsPlaying()) {
+ mAudioPreview->SetAttr(getCurrentItemPath());
+ mAudioPreview->Play();
+
+ }
+
+ /*
+ * when one item is selected, reselecting it will deselect it. selecting another
+ * will also deselect it, while the other is selected.
+ */
+ if(mSelected)
+ {
+ if(mOldSeletedItem != index)
+ {
+ mListView->selectionModel()->select(index, QItemSelectionModel::Select);
+ mOldSeletedItem = index;
+ emit triggerToolBar(true);
+ }
+ else
+ {
+ mListView->selectionModel()->select(index, QItemSelectionModel::Deselect);
+ mSelected = false;
+ emit triggerToolBar(false);
+ }
+ return;
+ }
+
+ if(modelIndexList.count() > 0)
+ {
+ QModelIndexList::const_iterator it;
+ for(it=modelIndexList.begin(); it!=modelIndexList.end(); ++it)
+ {
+ if((*it) == index)
+ {
+ mSelected = true;
+ mOldSeletedItem = index;
+ emit triggerToolBar(true);
+ }
+ }
+ }
+}
+
+void MsgAudioFetcherWidget::init()
+{
+ mLayout = new QGraphicsLinearLayout(this);
+ mLayout->setOrientation(Qt::Vertical);
+ setLayout(mLayout);
+
+ mLabel = new HbLabel(this);
+ // TODO: need localized string
+ mLabel->setPlainText(LOC_SELECT_SOUND);
+ mLayout->addItem(mLabel);
+
+ mListView = new HbListView(this);
+ mListView->setObjectName("list");
+ mLayout->addItem(mListView);
+ mListView->setSelectionMode(HbAbstractItemView::SingleSelection);
+
+ mFetcherModel = new MsgAudioFetcherModel(this);
+ mListView->setModel(mFetcherModel);
+ connect(mListView, SIGNAL(activated(QModelIndex)),
+ this, SLOT(on_list_activated(QModelIndex)));
+ mAudioPreview = new MsgAudioPreview(this);
+}
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/msgaudiofetcher/src/msgaudiopreview.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,629 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ * The source file for tone previewing.
+ *
+ */
+#include "msgaudiopreview.h"
+#include <AudioPreference.h> // KAudioPriorityPreview
+#include <c3dringingtoneinterface.h> // C3DRingingToneInterface
+#include <ctsydomainpskeys.h> // for phone call states
+#include <MProfileEngine.h>
+#include <MProfile.h>
+#include <MProfileTones.h>
+#include "TProfileToneSettings.h"
+#include <MProfileExtraSettings.h>
+#include <MProfile3DToneSettings.h>
+#include <ProfileInternal.hrh>
+#include <ProfileEngineDomainCRKeys.h> // KProEngDefaultRingingTone
+#include <XQConversions>
+#include <QChar>
+#include <QDir>
+
+
+CMFPreviewHandlerBase::CMFPreviewHandlerBase( QObject *parent ) : QObject( parent )
+ {
+ iMediaType = KErrNotFound;
+ iRingingVolume = KErrNotFound;
+ iRingingType = KErrNotFound;
+ iVibra = KErrNotFound;
+ i3DEffect = KErrNotFound;
+ i3DEcho = KErrNotFound;
+ iFileSize = KErrNotFound;
+ iFullName = 0;
+ iActiveProfileRead = EFalse;
+ iPlayerStatus = EPlayerNotCreated;
+
+ }
+
+void CMFPreviewHandlerBase::ConstructL()
+ {
+ // To allow/not allow screensaver
+ // Errors ignored, no actions needed if API is not available
+ //iProperty.Attach( KPSUidScreenSaver, KScreenSaverAllowScreenSaver );
+ TRAP_IGNORE(User::LeaveIfError( iApaSession.Connect() ) );
+
+ TRAP_IGNORE( ReadDefaultToneL() );
+ // To keep backlight on while a video is being previewed
+ iBacklightTimer = CPeriodic::NewL( EPriorityLow );
+ }
+
+CMFPreviewHandlerBase::~CMFPreviewHandlerBase()
+ {
+ delete iFullName;
+ iProperty.Close();
+ iApaSession.Close();
+ }
+
+void CMFPreviewHandlerBase::SetAttr(const QString &file )
+ {
+ if ( !file.isNull() )
+ {
+ QString path = normalizeSeperator(file);
+ delete iFullName;
+ iFullName = 0;
+ iFullName = XQConversions::qStringToS60Desc( path );
+ }
+ }
+
+TInt CMFPreviewHandlerBase::RingingVolume()
+ {
+ const TInt KDefaultVolumeLevel = 7; // see profile.hrh for volume levels
+
+ if ( iRingingVolume != KErrNotFound )
+ {
+ return iRingingVolume;
+ }
+
+ if ( iActiveProfileRead )
+ {
+ return iActiveProfileRingingVolume;
+ }
+
+ return KDefaultVolumeLevel;
+ }
+
+TInt CMFPreviewHandlerBase::RingingType()
+ {
+ if ( iRingingType != KErrNotFound )
+ {
+ return iRingingType;
+ }
+
+ if ( iActiveProfileRead )
+ {
+ return iActiveProfileRingingType;
+ }
+
+ return ERingingTypeRinging;
+ }
+
+TInt CMFPreviewHandlerBase::Vibra()
+ {
+ if ( iVibra != KErrNotFound )
+ {
+ return iVibra;
+ }
+
+ if ( iActiveProfileRead )
+ {
+ return iActiveProfileVibra;
+ }
+
+ return 0; // in case of error vibra is off
+ }
+
+TInt CMFPreviewHandlerBase::Echo3D()
+ {
+ if ( i3DEcho != KErrNotFound )
+ {
+ return i3DEcho;
+ }
+
+ if ( iActiveProfileRead )
+ {
+ return iActiveProfile3DEcho;
+ }
+
+ return EProfile3DEchoOff; // from ProfileInternal.hrh
+ }
+
+TInt CMFPreviewHandlerBase::Effect3D()
+ {
+ if ( i3DEffect != KErrNotFound )
+ {
+ return i3DEffect;
+ }
+
+ if ( iActiveProfileRead )
+ {
+ return iActiveProfile3DEffect;
+ }
+
+ return EProfile3DEffectOff;
+ }
+
+TInt CMFPreviewHandlerBase::ConvertVolume( TInt aVolume, TInt aMaxVolume )
+ {
+ const TInt KMinVolumeLevel = 1;
+ const TInt KMaxVolumeLevel = 10;
+
+ TInt result = aMaxVolume * aVolume / KMaxVolumeLevel;
+
+ // if user has selected minimum volume level set HW volume 1
+ if ( aVolume == KMinVolumeLevel && result == 0 )
+ {
+ result = 1;
+ }
+
+ return result;
+ }
+
+void CMFPreviewHandlerBase::ReadActiveProfileL()
+ {
+ iActiveProfileRead = EFalse;
+
+ MProfileEngine* profileEngine = CreateProfileEngineL();
+ CleanupReleasePushL( *profileEngine );
+
+ MProfile* activeProfile = profileEngine->ActiveProfileL();
+ CleanupReleasePushL( *activeProfile );
+
+ const MProfileTones& profileTones = activeProfile->ProfileTones();
+
+ const TProfileToneSettings& toneSettings = profileTones.ToneSettings();
+ iActiveProfileVibra = toneSettings.iVibratingAlert;
+ iActiveProfileRingingVolume = toneSettings.iRingingVolume;
+ iActiveProfileRingingType = toneSettings.iRingingType;
+
+ const MProfileExtraSettings& extra = activeProfile->ProfileExtraSettings();
+ const MProfile3DToneSettings& threeD = extra.Profile3DToneSettings();
+
+ iActiveProfile3DEffect = threeD.Effect();
+ iActiveProfile3DEcho = threeD.Echo();
+
+ CleanupStack::PopAndDestroy( activeProfile );
+ CleanupStack::PopAndDestroy( profileEngine );
+
+ iActiveProfileRead = ETrue;
+ }
+
+void CMFPreviewHandlerBase::ReadDefaultToneL()
+ {
+ CRepository* cenrep = CRepository::NewLC( KCRUidProfileEngine );
+
+ User::LeaveIfError( cenrep->Get( KProEngDefaultRingingTone, iDefaultTone ) );
+ CleanupStack::PopAndDestroy( cenrep );
+ }
+
+TInt CMFPreviewHandlerBase::GetDataType( const TDesC& aFileName, TDataType& aDataType )
+ {
+ TUid dummyUid( KNullUid );
+ return iApaSession.AppForDocument( aFileName, dummyUid, aDataType );
+ }
+
+TInt CMFPreviewHandlerBase::DoResetInactivityTimer( TAny* /*aObject*/ )
+ {
+ User::ResetInactivityTime();
+ return KErrNone;
+ }
+
+void CMFPreviewHandlerBase::DisableBackLight()
+ {
+ const TInt KResetInactivityTimerDelay = 2000000;
+ iBacklightTimer->Cancel(); // Just in case
+ // Disable backlight turn off during video preview
+ iBacklightTimer->Start( KResetInactivityTimerDelay,
+ KResetInactivityTimerDelay,
+ TCallBack( DoResetInactivityTimer, 0 ) );
+
+ }
+
+
+
+MsgAudioPreview::MsgAudioPreview( QObject *parent ) : CMFPreviewHandlerBase( parent )
+ {
+ iAudioPlayerStatus = EPlayerNotCreated;
+ TRAP_IGNORE(CMFPreviewHandlerBase::ConstructL());
+ iTonePlayerStatus = EPlayerNotCreated;
+ }
+
+MsgAudioPreview::~MsgAudioPreview()
+ {
+ Cancel();
+
+ delete iAudioPlayer;
+ delete iTonePlayer;
+ delete i3dRingingTonePlugin;
+ }
+
+TBool MsgAudioPreview::IsPlaying()
+ {
+ if ( iAudioPlayerStatus != EPlayerNotCreated )
+ {
+ return ETrue;
+ }
+
+ if ( iTonePlayerStatus != EPlayerNotCreated )
+ {
+ return ETrue;
+ }
+
+ return EFalse;
+ }
+
+void MsgAudioPreview::Play()
+ {
+ TRAP_IGNORE(PlayL());
+ }
+
+void MsgAudioPreview::PlayL()
+ {
+ if( IsPlaying() )
+ {
+ Stop();
+ return;
+ }
+ //sequence for playing a beep once sound
+ _LIT8( KFileListBeepSequence, "\x00\x11\x06\x0A\x08\x73\x0A\x40\x28\x0A\xF7\
+ \x05\xFC\x40\x64\x0A\x08\x40\x32\x0A\xF7\x06\x0B" );
+
+ // rng mime type
+ _LIT( KFileListRngMimeType, "application/vnd.nokia.ringing-tone" );
+
+ Cancel(); // stop previous play
+
+ if ( !iFullName || iFullName->Des().Length() == 0 )
+ {
+ User::Leave( KErrNotFound );
+ }
+
+ TRAP_IGNORE( ReadActiveProfileL() );
+
+ TPtrC fileName( iFullName->Des() );
+ TDataType dataType;
+ TInt err = GetDataType( fileName, dataType );
+ if ( err == KErrNotFound )
+ {
+ fileName.Set( iDefaultTone );
+ if ( fileName.Length() == 0 )
+ {
+ User::Leave( KErrNotFound );
+ }
+ }
+ else if ( err != KErrNone )
+ {
+ User::Leave( err );
+ }
+
+ TBool mimeTypeRng = EFalse;
+
+ if ( err == KErrNone )
+ {
+ if( dataType.Des().CompareF( KFileListRngMimeType ) == 0 )
+ {
+ mimeTypeRng = ETrue;
+ }
+ }
+
+ TInt ringingType = RingingType();
+ if ( ringingType == ERingingTypeBeepOnce )
+ {
+ // Active profile ringing tone is set to Beep Once
+ // Don't initialize a FileSequence but use DesSequence instead
+ iTonePlayer = CMdaAudioToneUtility::NewL( *this );
+ iTonePlayer->PrepareToPlayDesSequence( KFileListBeepSequence() );
+ iTonePlayerStatus = EPlayerInitializing;
+ }
+ else
+ {
+ if( mimeTypeRng )
+ {
+ //Ringingtone is a RNG-file
+ iTonePlayer = CMdaAudioToneUtility::NewL( *this );
+ iTonePlayer->PrepareToPlayFileSequence( fileName );
+ iTonePlayerStatus = EPlayerInitializing;
+ }
+ else
+ {
+ delete iAudioPlayer;
+ iAudioPlayer = 0;
+
+ iAudioPlayer = CDrmPlayerUtility::NewFilePlayerL(
+ fileName, *this, KAudioPriorityRingingTonePreview,
+ ( TMdaPriorityPreference )KAudioPrefRingFilePreview );
+
+ iAudioPlayerStatus = EPlayerInitializing;
+ }
+ }
+ DisableBackLight();
+ }
+
+void MsgAudioPreview::Stop()
+ {
+ Cancel();
+ }
+
+TInt MsgAudioPreview::ConvertVolume( TInt aVolume )
+ {
+ TInt result = 0;
+ if ( iAudioPlayer )
+ {
+ result = CMFPreviewHandlerBase::ConvertVolume( aVolume, iAudioPlayer->MaxVolume() );
+ }
+ else if ( iTonePlayer )
+ {
+ result = CMFPreviewHandlerBase::ConvertVolume( aVolume, iTonePlayer->MaxVolume() );
+ }
+
+ //if user has selected silent ringing type, set volume off
+ TInt ringingType = RingingType();
+ if( ringingType == ERingingTypeSilent )
+ {
+ result = 0;
+ }
+
+ return result;
+ }
+
+void MsgAudioPreview::SetToneRingingType( TInt aRingingType )
+ {
+ const TInt KToneInterval = 1000000; // 1 second pause between tones
+ const TInt KAscendingVolumeInterval = 3000000; // 3 seconds
+
+ if ( !iTonePlayer )
+ {
+ return;
+ }
+
+
+ TInt ringingVolume = RingingVolume();
+
+ switch( aRingingType )
+ {
+ case ERingingTypeRinging:
+ case ERingingTypeSilent:
+ {
+ iTonePlayer->SetRepeats( KMdaAudioToneRepeatForever,
+ TTimeIntervalMicroSeconds( KToneInterval ) );
+ break;
+ }
+ case ERingingTypeAscending:
+ {
+ iTonePlayer->SetRepeats( KMdaAudioToneRepeatForever,
+ TTimeIntervalMicroSeconds( KToneInterval ) );
+
+ TInt volRamp = KAscendingVolumeInterval * ringingVolume;
+ iTonePlayer->SetVolumeRamp( TTimeIntervalMicroSeconds( volRamp ) );
+ break;
+ }
+ case ERingingTypeRingOnce:
+ case ERingingTypeBeepOnce:
+ {
+ iTonePlayer->SetRepeats( 0, TTimeIntervalMicroSeconds( KToneInterval ) );
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ }
+
+void MsgAudioPreview::SetAudioRingingType( TInt aRingingType )
+ {
+ const TInt KToneInterval = 1000000; // 1 second pause between tones
+ const TInt KAscendingVolumeInterval = 3000000; // 3 seconds
+
+ if ( !iAudioPlayer )
+ {
+ return;
+ }
+
+ TInt ringingVolume = RingingVolume();
+
+ switch( aRingingType )
+ {
+ case ERingingTypeRinging:
+ case ERingingTypeSilent:
+ {
+ iAudioPlayer->SetRepeats( KMdaAudioToneRepeatForever,
+ TTimeIntervalMicroSeconds( KToneInterval ) );
+ break;
+ }
+ case ERingingTypeAscending:
+ {
+ iAudioPlayer->SetRepeats( KMdaAudioToneRepeatForever,
+ TTimeIntervalMicroSeconds( KToneInterval ) );
+ TInt volRamp = KAscendingVolumeInterval * ringingVolume;
+ iAudioPlayer->SetVolumeRamp( TTimeIntervalMicroSeconds( volRamp ) );
+ break;
+ }
+ case ERingingTypeRingOnce:
+ {
+ iAudioPlayer->SetRepeats( 0, TTimeIntervalMicroSeconds( KToneInterval ) );
+ break;
+ }
+
+ default:
+ {
+ break;
+ }
+ }
+ }
+
+void MsgAudioPreview::Cancel()
+ {
+ TBool isPlaying = EFalse;
+
+ if ( iAudioPlayer )
+ {
+ isPlaying = ETrue;
+ if ( iAudioPlayerStatus == EPlayerPlayingWith3DEffect )
+ {
+ i3dRingingTonePlugin->Stop();
+ // plugin calls AudioPlayer->Stop()
+ iAudioPlayer->Close();
+ }
+ if ( iAudioPlayerStatus == EPlayerPlaying )
+ {
+ iAudioPlayer->Stop();
+ iAudioPlayer->Close();
+ }
+
+ delete iAudioPlayer;
+ iAudioPlayer = 0;
+ iAudioPlayerStatus = EPlayerNotCreated;
+ }
+
+ if ( iTonePlayer )
+ {
+ isPlaying = ETrue;
+ if ( iTonePlayerStatus == EPlayerPlaying )
+ {
+ iTonePlayer->CancelPlay();
+ }
+
+ delete iTonePlayer;
+ iTonePlayer = 0;
+ iTonePlayerStatus = EPlayerNotCreated;
+ }
+
+
+ if ( isPlaying )
+ {
+ //User::InfoPrint(_L("cancel"));
+// EnableScreenSaver( ETrue );
+ iBacklightTimer->Cancel();
+ }
+ }
+
+void MsgAudioPreview::MatoPlayComplete( TInt aError )
+ {
+ Q_UNUSED(aError);
+ Cancel();
+ // emit notifyPreviewEvent( ToneFetcherEngine::EAudioPreviewComplete, aError );
+ }
+
+void MsgAudioPreview::MatoPrepareComplete( TInt aError )
+ {
+ if ( aError != KErrNone )
+ {
+ Cancel();
+
+ // emit notifyPreviewEvent( ToneFetcherEngine::EPreviewError, aError );
+ return;
+ }
+
+ TInt ringingVolume = RingingVolume();
+ TInt ringingType = RingingType();
+ TInt vibra = Vibra();
+
+ iTonePlayerStatus = EPlayerInitialized;
+ SetToneRingingType( ringingType );
+ iTonePlayer->SetVolume( ConvertVolume( ringingVolume ) );
+
+ TMdaPriorityPreference pref = (TMdaPriorityPreference) KAudioPrefRingFilePreview;
+ if ( vibra )
+ {
+ pref = (TMdaPriorityPreference) KAudioPrefRingFilePreviewVibra;
+ }
+ iTonePlayer->SetPriority( KAudioPriorityPreview, pref );
+
+ iTonePlayer->Play();
+ iTonePlayerStatus = EPlayerPlaying;
+ }
+
+void MsgAudioPreview::MdapcInitComplete( TInt aError,
+ const TTimeIntervalMicroSeconds& /* aDuration */ )
+ {
+ if ( aError != KErrNone )
+ {
+ Cancel();
+ // emit notifyPreviewEvent( ToneFetcherEngine::EPreviewError, aError );
+ return;
+ }
+
+
+ TInt ringingVolume = RingingVolume();
+ TInt ringingType = RingingType();
+ TInt vibra = Vibra();
+ TInt echo3D = Echo3D();
+ TInt effect3D = Effect3D();
+
+
+
+ iAudioPlayerStatus = EPlayerInitialized;
+ SetAudioRingingType( ringingType );
+ iAudioPlayer->SetVolume( ConvertVolume( ringingVolume ) );
+
+ TMdaPriorityPreference pref = (TMdaPriorityPreference) KAudioPrefRingFilePreview;
+ if ( vibra )
+ {
+ pref = (TMdaPriorityPreference) KAudioPrefRingFilePreviewVibra;
+ }
+ iAudioPlayer->SetPriority( KAudioPriorityPreview, pref );
+
+ iAudioPlayerStatus = EPlayerPlaying;
+
+ if ( effect3D == EProfile3DEffectOff )
+ {
+ iAudioPlayer->Play(); // 3D not used
+ return;
+ }
+
+ if ( !i3dRingingTonePlugin )
+ {
+ TUid emptyUid = { 0 };
+ TRAPD( err, i3dRingingTonePlugin = C3DRingingToneInterface::NewL( emptyUid ) );
+ if ( err != KErrNone || !i3dRingingTonePlugin )
+ {
+ iAudioPlayer->Play();
+ return;
+ }
+ }
+
+ i3dRingingTonePlugin->SetAttr( E3DRTIAttr3DEffect, effect3D );
+ i3dRingingTonePlugin->SetAttr( E3DRTIAttr3DEcho, echo3D );
+ i3dRingingTonePlugin->SetAttr( E3DRTIAttrDrmPlayerUtility, iAudioPlayer );
+ TRAP_IGNORE( i3dRingingTonePlugin->PlayL() );
+
+ iAudioPlayerStatus = EPlayerPlayingWith3DEffect;
+ }
+
+void MsgAudioPreview::MdapcPlayComplete( TInt aError )
+ {
+ Q_UNUSED(aError);
+ Cancel();
+ // emit notifyPreviewEvent( ToneFetcherEngine::EAudioPreviewComplete, aError );
+
+
+ }
+
+
+QString CMFPreviewHandlerBase::normalizeSeperator(const QString &path)
+{
+ QString standardpath( path );
+ QChar c('/');
+ QChar c1('\\');
+ if (standardpath.contains(c, Qt::CaseSensitive)) {
+ standardpath.replace(c, QDir::separator());
+ }
+ if (standardpath.contains(c1, Qt::CaseSensitive)) {
+ standardpath.replace(c1, QDir::separator());
+ }
+ return standardpath;
+}
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/msgaudiofetcher/src/msgaudioselectionengine.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,279 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ * The source file for mde tone fetcher.
+ *
+ */
+
+// SYSTEM INCLUDES
+#include <XQConversions>
+#include <pathinfo.h>
+#include <bautils.h>
+#include <centralrepository.h>
+#include <ProfileEngineDomainCRKeys.h>
+
+// USER INCLUDES
+#include "msgaudioselectionengine.h"
+
+// CONSTANTS
+_LIT( KAmrMime, "audio/amr" );
+
+MsgAudioSelectionEngine::MsgAudioSelectionEngine()
+ {
+
+ }
+
+MsgAudioSelectionEngine::~MsgAudioSelectionEngine()
+ {
+ delete iQuery;
+ delete iSession;
+ }
+
+
+void MsgAudioSelectionEngine::CreateMetaDataSession()
+{
+ TRAP_IGNORE(iSession = CMdESession::NewL(*this));
+}
+
+
+void MsgAudioSelectionEngine::HandleSessionOpened(CMdESession& /*aSession*/,
+ TInt aError)
+ {
+ if (aError != KErrNone)
+ {
+ delete iSession;
+ iSession = 0;
+ iSessionOpen = EFalse;
+ emit mdeSessionError(aError);
+ }
+ else
+ {
+ iSessionOpen = ETrue;
+ TRAP_IGNORE( AddObjectObserverL() );
+ emit mdeSessionOpened();
+ }
+ }
+
+void MsgAudioSelectionEngine::HandleSessionError(CMdESession& /*aSession*/,
+ TInt aError)
+ {
+ if (aError == KErrNone)
+ {
+ return;
+ }
+
+ delete iSession;
+ iSession = 0;
+ iSessionOpen = EFalse;
+ emit mdeSessionError(aError);
+ }
+
+void MsgAudioSelectionEngine::HandleQueryNewResults(CMdEQuery& /*aQuery*/,
+ TInt /*aFirstNewItemIndex*/, TInt /*aNewItemCount*/)
+ {
+ }
+
+void MsgAudioSelectionEngine::HandleObjectNotification(
+ CMdESession& /*aSession*/, TObserverNotificationType aType,
+ const RArray<TItemId>& /*aObjectIdArray*/)
+ {
+ if (aType == ENotifyAdd || aType == ENotifyModify || aType
+ == ENotifyRemove)
+ {
+ emit notifyObjectChanged();
+ }
+ }
+
+void MsgAudioSelectionEngine::AddObjectObserverL()
+ {
+ if (iSessionOpen)
+ {
+ TUint32 notificationType = ENotifyAdd | ENotifyModify | ENotifyRemove;
+ User::LeaveIfNull(iSession);
+ CMdENamespaceDef& defNS = iSession->GetDefaultNamespaceDefL();
+ iSession->AddObjectObserverL(*this, 0, notificationType, &defNS);
+ iSession->AddObjectPresentObserverL(*this);
+ }
+ }
+
+void MsgAudioSelectionEngine::HandleObjectPresentNotification(
+ CMdESession& /*aSession*/, TBool /*aPresent*/,
+ const RArray<TItemId>& aObjectIdArray)
+ {
+ if (aObjectIdArray.Count() > 0)
+ {
+ emit notifyObjectChanged();
+ }
+ }
+
+void MsgAudioSelectionEngine::HandleQueryCompleted(CMdEQuery& aQuery,
+ TInt aError)
+ {
+ TRAP_IGNORE(HandleQueryCompletedL(aQuery, aError));
+ }
+
+void MsgAudioSelectionEngine::HandleQueryCompletedL(CMdEQuery& aQuery,
+ TInt aError)
+ {
+ iNameList.clear();
+ iUriList.clear();
+ if (aError == KErrCancel)
+ {
+ emit queryError(aError);
+ return;
+ }
+ else
+ {
+ CMdEObjectQuery* query = static_cast<CMdEObjectQuery*> (&aQuery);
+ TInt count = query->Count();
+ for (TInt i = 0; i < count; ++i)
+ {
+ CMdEObject* object =
+ (CMdEObject*) query->TakeOwnershipOfResult(i);
+ CleanupStack::PushL(object);
+ CMdEPropertyDef& propDef = MsgAudioSelectionEngine::PropertyDefL(
+ iSession, MsgAudioSelectionEngine::EAttrFileName);
+
+ CMdEProperty* property = 0;
+ TInt err = object->Property(propDef, property, 0);
+ if (err != KErrNotFound && property)
+ {
+ QString songName(XQConversions::s60DescToQString(
+ property->TextValueL()));
+ QString uriValue(XQConversions::s60DescToQString(
+ object->Uri()));
+ iNameList.append(songName);
+ iUriList.append(uriValue);
+ }
+ CleanupStack::PopAndDestroy(object);
+ }
+ emit queryComplete(iNameList, iUriList);
+ }
+ }
+
+void MsgAudioSelectionEngine::QueryTones()
+ {
+ TRAP_IGNORE(QueryTonesL());
+ }
+
+void MsgAudioSelectionEngine::QueryTonesL()
+ {
+ LeaveIfSessionClosedL();
+ CMdENamespaceDef& defNS = iSession->GetDefaultNamespaceDefL();
+ CMdEObjectDef& musicObjectDef = defNS.GetObjectDefL(
+ MdeConstants::Audio::KAudioObject);
+
+ delete iQuery;
+ iQuery = 0;
+ iQuery = iSession->NewObjectQueryL(defNS, musicObjectDef, this);
+ CMdEPropertyDef& titlePropertyDef = musicObjectDef.GetPropertyDefL(
+ MdeConstants::Object::KTitleProperty);
+ CMdEPropertyDef& typePropertyDef = musicObjectDef.GetPropertyDefL(
+ MdeConstants::Object::KItemTypeProperty);
+
+ // set attributes that are included in query result
+ iQuery->AddPropertyFilterL(&titlePropertyDef);
+ iQuery->AddPropertyFilterL(&typePropertyDef);
+
+ iQuery->SetResultMode(EQueryResultModeItem);
+
+
+ // get root condition
+ CMdELogicCondition& conditions = iQuery->Conditions();
+ conditions.AddPropertyConditionL(typePropertyDef,
+ ETextPropertyConditionCompareEquals, KAmrMime);
+
+ iQuery->FindL();
+ }
+
+void MsgAudioSelectionEngine::LeaveIfSessionClosedL()
+ {
+ if (!iSession || !iSessionOpen)
+ {
+ User::Leave(KErrDisconnected);
+ }
+ }
+
+CMdEPropertyDef& MsgAudioSelectionEngine::PropertyDefL(TInt aAttr)
+ {
+ User::LeaveIfNull(iSession);
+ return PropertyDefL(iSession, aAttr);
+ }
+
+CMdEPropertyDef& MsgAudioSelectionEngine::PropertyDefL(CMdESession* aSession,
+ TInt aAttr)
+ {
+ CMdENamespaceDef& defNS = aSession->GetDefaultNamespaceDefL();
+
+ CMdEObjectDef& objectDef = defNS.GetObjectDefL(
+ MdeConstants::Audio::KAudioObject);
+
+ if (aAttr == EAttrFileSize)
+ {
+ return objectDef.GetPropertyDefL(MdeConstants::Object::KSizeProperty);
+ }
+ else if (aAttr == EAttrMediaType)
+ {
+ return objectDef.GetPropertyDefL(
+ MdeConstants::Object::KItemTypeProperty);
+ }
+ else if (aAttr == EAttrSongName || aAttr == EAttrFileName)
+ {
+ return objectDef.GetPropertyDefL(MdeConstants::Object::KTitleProperty);
+ }
+ else if (aAttr == EAttrArtist)
+ {
+ return objectDef.GetPropertyDefL(
+ MdeConstants::MediaObject::KArtistProperty);
+ }
+ else if (aAttr == EAttrAlbum)
+ {
+ return objectDef.GetPropertyDefL(MdeConstants::Audio::KAlbumProperty);
+ }
+ else if (aAttr == EAttrGenre)
+ {
+ return objectDef.GetPropertyDefL(
+ MdeConstants::MediaObject::KGenreProperty);
+ }
+ else if (aAttr == EAttrComposer)
+ {
+ return objectDef.GetPropertyDefL(
+ MdeConstants::Audio::KComposerProperty);
+ }
+ else
+ {
+ User::Leave(KErrNotSupported);
+ }
+
+ return objectDef.GetPropertyDefL(MdeConstants::Object::KTitleProperty);
+ }
+
+
+void MsgAudioSelectionEngine::SetAttr(int attr, int value)
+ {
+ switch (attr)
+ {
+ case MsgAudioSelectionEngine::EAttrFileSize:
+ {
+ iMaxFileSize = value;
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+}
+// End of File
+
--- a/messagingapp/msgui/msgui.pro Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/msgui.pro Thu Jul 22 16:32:06 2010 +0100
@@ -19,6 +19,7 @@
SYMBIAN_PLATFORMS = WINSCW ARMV5
# DLLs
+SUBDIRS += msgaudiofetcher/msgaudiofetcher.pro
SUBDIRS += msguiutils/msguiutils.pro
SUBDIRS += appengine/appengine.pro
SUBDIRS += conversationview/conversationview.pro
--- a/messagingapp/msgui/msguiutils/inc/mmsconformancecheck.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/msguiutils/inc/mmsconformancecheck.h Thu Jul 22 16:32:06 2010 +0100
@@ -20,7 +20,7 @@
#include <QObject>
-#include <msgmediainfo.h>
+#include <MsgMediaInfo.h>
#include <qstring.h>
#ifdef BUILD_MSGUI_UTILS_DLL
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/msguiutils/inc/msgcontactsutil.h Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: This static utility class handles all contacts & phbk
+ * services related common functions for UI modules.
+ *
+ */
+
+#ifndef MSGCONTACTSUTIL_H_
+#define MSGCONTACTSUTIL_H_
+
+#ifdef BUILD_MSGUI_UTILS_DLL
+#define MSGUI_UTILS_DLL_EXPORT Q_DECL_EXPORT
+#else
+#define MSGUI_UTILS_DLL_EXPORT Q_DECL_IMPORT
+#endif
+
+/**
+ * static utility class to handle contacts related common functionality
+ * for UI modules
+ */
+class MSGUI_UTILS_DLL_EXPORT MsgContactsUtil
+{
+
+public:
+ static bool launchVCardViewer(const QString& filepath);
+
+private:
+ static QString copyVCardToTemp(const QString& filepath);
+ static void deleteVCardFromTemp(const QString& filepath);
+};
+
+#endif /* MSGCONTACTSUTIL_H_ */
--- a/messagingapp/msgui/msguiutils/msguiutils.pro Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/msguiutils/msguiutils.pro Thu Jul 22 16:32:06 2010 +0100
@@ -24,7 +24,6 @@
INCLUDEPATH += ../../../inc
INCLUDEPATH += ../../msgutils/unieditorutils/editorgenutils/inc
-INCLUDEPATH += ../../msgutils/s60qconversions/inc
INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
CONFIG += hb
@@ -43,14 +42,26 @@
BLD_INF_RULES.prj_exports += "$${LITERAL_HASH}include <platform_paths.hrh>" \
"rom/msguiutils.iby CORE_APP_LAYER_IBY_EXPORT_PATH(msguiutils.iby)"
+
+defBlock = \
+ "$${LITERAL_HASH}if defined(EABI)" \
+ "DEFFILE ../eabi/msguiutils.def" \
+ "$${LITERAL_HASH}else" \
+ "DEFFILE ../bwins/msguiutils.def" \
+ "$${LITERAL_HASH}endif"
+
+MMP_RULES += defBlock
+
# Input
HEADERS += msgsendutil.h \
mmsconformancecheck.h \
- msgmediautil.h
+ msgmediautil.h \
+ msgcontactsutil.h
SOURCES += msgsendutil.cpp \
mmsconformancecheck.cpp \
- msgmediautil.cpp
+ msgmediautil.cpp \
+ msgcontactsutil.cpp
# Libs
LIBS += -lxqservice \
@@ -58,11 +69,11 @@
-leditorgenutils \
-lconvergedmessageutils \
-lcentralrepository \
- -ls60qconversions \
-lDRMHelper \
-lmsgmedia \
-lapmime \
-lunidatamodelloader \
- -lxqutils
+ -lxqutils \
+ -lefsrv
+
-
--- a/messagingapp/msgui/msguiutils/src/mmsconformancecheck.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/msguiutils/src/mmsconformancecheck.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -21,25 +21,26 @@
#include <MmsConformance.h>
#include <centralrepository.h>
#include <mmsconst.h>
-#include <msgmediainfo.h>
+#include <MsgMediaInfo.h>
#include <fileprotectionresolver.h>
#include <MsgMediaResolver.h>
#include <DRMHelper.h>
#include <MmsEngineInternalCRKeys.h>
#include <hbmessagebox.h>
-#include <hbnotificationdialog>
+#include <HbNotificationDialog>
#include <hbaction.h>
#include "unidatamodelloader.h"
#include "unidatamodelplugininterface.h"
-#include "unieditorgenutils.h" // This is needed for KDefaultMaxSize
-#include "s60qconversions.h"
+#include "UniEditorGenUtils.h" // This is needed for KDefaultMaxSize
+#include <xqconversions.h>
#include "debugtraces.h"
//DEFINES
#define RMODE_INSERT_ERROR hbTrId("Unable to insert. Object format not supported in restricted creation mode.")
#define INSERT_ERROR hbTrId("txt_messaging_dpopinfo_unable_to_attach_item_file")
+#define INSERT_PROTECTED_ERROR hbTrId("txt_messaging_dpopinfo_unable_to_attach_protected")
#define INSERT_QUERY_CONFRM hbTrId("The receiving phone may not support this object. Continue?")
// -----------------------------------------------------------------------------
// MmsConformanceCheck::MmsConformanceCheck
@@ -49,7 +50,7 @@
{
QDEBUG_WRITE("MmsConformanceCheck::MmsConformanceCheck start");
- TRAP_IGNORE(
+ TRAP_IGNORE(
CRepository* repository = CRepository::NewL(KCRUidMmsEngine);
CleanupStack::PushL(repository);
@@ -63,7 +64,7 @@
repository->Get( KMmsEngineMaximumSendSize, maxSize );
iMaxMmsSize = maxSize;
- CleanupStack::PopAndDestroy(repository);
+ CleanupStack::PopAndDestroy(repository);
);
QDEBUG_WRITE("MmsConformanceCheck::MmsConformanceCheck end");
@@ -86,33 +87,33 @@
bool showNote)
{
QDEBUG_WRITE("MmsConformanceCheck::CheckModeForInsert start");
- HBufC* filePath = S60QConversions::qStringToS60Desc(file);
+ HBufC* filePath = XQConversions::qStringToS60Desc(file);
if (filePath)
{
CleanupStack::PushL(filePath);
CMmsConformance* mmsConformance = CMmsConformance::NewL();
mmsConformance->CheckCharacterSet(EFalse);
-
+
CleanupStack::PushL(mmsConformance);
-
- CMsgMediaResolver* mediaResolver = CMsgMediaResolver::NewL();
+
+ CMsgMediaResolver* mediaResolver = CMsgMediaResolver::NewL();
mediaResolver->SetCharacterSetRecognition(EFalse);
-
+
CleanupStack::PushL(mediaResolver);
-
+
RFile fileHandle = mediaResolver->FileHandleL(*filePath);
CleanupClosePushL(fileHandle);
CMsgMediaInfo* info = mediaResolver->CreateMediaInfoL(fileHandle);
mediaResolver->ParseInfoDetailsL(info,fileHandle);
-
+
TMmsConformance conformance = mmsConformance->MediaConformance(*info);
iConfStatus = conformance.iConfStatus;
CleanupStack::PopAndDestroy(4);
-
+
// In "free" mode user can insert images that are larger by dimensions than allowed by conformance
if (iCreationMode != EMmsCreationModeRestricted)
{
@@ -134,7 +135,9 @@
}
else if (showNote)
{
- HbMessageBox::question(INSERT_QUERY_CONFRM, this, SLOT(onDialogInsertMedia(HbAction*)));
+ HbMessageBox::question(INSERT_QUERY_CONFRM, this,
+ SLOT(onDialogInsertMedia(HbAction*)),
+ HbMessageBox::Yes | HbMessageBox::No);
}
else
{
@@ -152,7 +155,15 @@
// "Not conformant" assumed if check fails.
if(showNote)
{
- showPopup(INSERT_ERROR);
+ // For protected objects.
+ if (EFileProtNoProtection != info->Protection())
+ {
+ showPopup(INSERT_PROTECTED_ERROR);
+ }
+ else
+ {
+ showPopup(INSERT_ERROR);
+ }
}
return EInsertNotSupported;
@@ -172,18 +183,19 @@
UniDataModelLoader* pluginLoader = new UniDataModelLoader();
UniDataModelPluginInterface* pluginInterface =
pluginLoader->getDataModelPlugin(ConvergedMessage::Mms);
- pluginInterface->setMessageId(messageId);
+ int error = pluginInterface->setMessageId(messageId);
- //Check if slide count is greater than 1
- if (pluginInterface->slideCount() > 1)
+ //Check if invalid id and slide count is greater than 1
+ if ( (error != KErrNone) || pluginInterface->slideCount() > 1)
{
delete pluginLoader;
return false;
}
- //Check if message size is inside max mms composition limits
+ //Check if message size is inside max mms composition limits
if (pluginInterface->messageSize() > iMaxMmsSize)
{
+ delete pluginLoader;
return false;
}
@@ -209,7 +221,6 @@
if (!retValue)
{
delete pluginLoader;
-
return false;
}
@@ -231,7 +242,6 @@
}
delete pluginLoader;
-
return retValue;
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/msguiutils/src/msgcontactsutil.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: This static utility class handles all contacts & phbk services related
+ * common functions for UI modules.
+ *
+ */
+
+#include <QFileInfo>
+#include <QDir>
+#include <QFile>
+#include <xqapplicationmanager.h>
+#include "msgcontactsutil.h"
+
+
+//---------------------------------------------------------------
+// MsgContactsUtil::copyVCardToTemp
+// @see header file
+//---------------------------------------------------------------
+QString MsgContactsUtil::copyVCardToTemp(const QString& filepath)
+{
+ QDir tempDir;
+ QString tempFilePath(QDir::toNativeSeparators(tempDir.tempPath()));
+ tempFilePath.append(QDir::separator());
+ QFileInfo fInfo(filepath);
+ tempFilePath.append(fInfo.fileName());
+ QFile::copy(filepath, tempFilePath);
+ return tempFilePath;
+}
+
+//---------------------------------------------------------------
+// MsgContactsUtil::deleteVCardFromTemp
+// @see header file
+//---------------------------------------------------------------
+void MsgContactsUtil::deleteVCardFromTemp(const QString& filepath)
+{
+ QFile::remove(filepath);
+}
+
+//---------------------------------------------------------------
+// MsgContactsUtil::launchVCardViewer
+// @see header file
+//---------------------------------------------------------------
+bool MsgContactsUtil::launchVCardViewer(const QString& filepath)
+{
+ //TODO: remove copyVcsFile after capabilities fix from Contacts
+ QString newfilepath = copyVCardToTemp(filepath);
+
+ QString service("com.nokia.services.phonebookservices");
+ QString interface("Fetch");
+ QString operation("editCreateNew(QString)");
+ XQApplicationManager appManager;
+ XQAiwRequest* request = appManager.create(service, interface, operation, true); //embedded
+ if(request)
+ {
+ QList<QVariant> args;
+ args << newfilepath;
+ request->setArguments(args);
+ QVariant retValue;
+ bool res = request->send(retValue);
+ delete request;
+ }
+ else
+ {
+ return false;
+ }
+ //TODO: remove deleteVcsFile after capabilities fix from Contacts
+ deleteVCardFromTemp(newfilepath);
+ return true;
+}
+
+
+// EOF
+
--- a/messagingapp/msgui/msguiutils/src/msgmediautil.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/msguiutils/src/msgmediautil.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -15,7 +15,7 @@
*
*/
#include <MsgMediaResolver.h>
-#include <XQConversions.h>
+#include <xqconversions.h>
#include "msgmediautil.h"
--- a/messagingapp/msgui/unifiededitor/inc/mmssettingsdefs.h Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-/*
- * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of "Eclipse Public License v1.0"
- * which accompanies this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html".
- *
- * Initial Contributors:
- * Nokia Corporation - initial contribution.
- *
- * Contributors:
- *
- * Description: MMS settings specific enumerations, constants, declaration.
- *
- */
-
-#ifndef MMSSETTINGSDEFS_H
-#define MMSSETTINGSDEFS_H
-
-// INCLUDES
-
-// CONSTANTS
-// Following definitions are applicable when the Unified SMS and MMS editor is in the build.
-// (Naming like KMmsImageSmallWidth cannot be used, because it is defined in mmsconst.h)
-// Small image: 640*480
-const TInt KMmsUniImageSmallWidth = 640;
-const TInt KMmsUniImageSmallHeight = 480;
-// Large image: 1600*1200
-const TInt KMmsUniImageLargeWidth = 1600;
-const TInt KMmsUniImageLargeHeight = 1200;
-
-#endif // MMSSETTINGSDEFS_H
-
-// End of File
--- a/messagingapp/msgui/unifiededitor/inc/msgattachmentcontainer.h Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,129 +0,0 @@
-/*
- * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of "Eclipse Public License v1.0"
- * which accompanies this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html".
- *
- * Initial Contributors:
- * Nokia Corporation - initial contribution.
- *
- * Contributors:
- *
- * Description: Container class for msg attachments
- *
- */
-#ifndef MSGATTACHMENTCONTAINER_H
-#define MSGATTACHMENTCONTAINER_H
-
-#include <HbWidget>
-#include "msgunieditorattachment.h"
-
-class QGraphicsLinearLayout;
-class MmsConformanceCheck;
-
-class MsgAttachmentContainer : public HbWidget
- {
- Q_OBJECT
-
-public:
- /**
- * Add Attachment success/failure states
- */
- enum AddAttachmentStatus
- {
- EAddSuccess = 0, EAddNotSupported, EAddSizeExceed
- };
-
- /**
- * Constructor
- */
- MsgAttachmentContainer( QGraphicsItem *parent = 0);
-
- /**
- * Destructor
- */
- ~MsgAttachmentContainer();
-
- /**
- * add attachment to the container
- * @param filepath of the attachment
- * @return add operation status
- */
- MsgAttachmentContainer::AddAttachmentStatus addAttachment(
- const QString& filepath);
-
- /**
- * count of attachments in the container
- * @return count
- */
- int count();
-
- /**
- * List of attachments in the container
- * @return attachments list
- */
- MsgUnifiedEditorAttachmentList attachmentList();
-
- /**
- * Check if the container hold multimedia content
- * @return true, if multimedia content is present
- * false, otherwise.
- */
- bool hasMMContent();
-
- /**
- * Size of the attachment container
- * @return size
- */
- int containerSize();
-
-signals:
- /**
- * emit when container content changes
- */
- void contentChanged();
-
- /**
- * emit to indicate view that container is now empty
- * View deletes the container if it becomes empty
- */
- void emptyAttachmentContainer();
-
-private slots:
- /**
- * delete attachment from the container
- */
- void deleteAttachment(MsgUnifiedEditorAttachment* attachment);
-
-private:
- /**
- * size of the msg
- */
- int messageSize();
-
-private:
-
- /**
- * container's layout
- */
- QGraphicsLinearLayout* mLayout;
-
- /**
- * MMS conformance check utility class
- */
- MmsConformanceCheck* mMmsConformanceCheck;
-
- /**
- * attachment list
- */
- MsgUnifiedEditorAttachmentList mAttachmentList;
-
- /**
- * flag to tell, if container is holding MM content
- */
- bool mIsMMContent;
- };
-
-#endif // MSGATTACHMENTCONTAINER_H
--- a/messagingapp/msgui/unifiededitor/inc/msgmonitor.h Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,217 +0,0 @@
-/*
- * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of "Eclipse Public License v1.0"
- * which accompanies this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html".
- *
- * Initial Contributors:
- * Nokia Corporation - initial contribution.
- *
- * Contributors:
- *
- * Description: Helper class to monitor msg construction in unified editor
- *
- */
-
-#ifndef MSG_MONITOR_H
-#define MSG_MONITOR_H
-
-#include <QObject>
-#include "convergedmessage.h"
-class MsgUnifiedEditorView;
-class HbWidget;
-class UniEditorGenUtils;
-
-/**
- * Helper class to monitor message's contruction in unified editor.
- * This class is for only reading editor's content to run its logic.
- * This class is NOT a place for content editing inside editor.
- */
-class MsgMonitor : public QObject
- {
- Q_OBJECT
-
-public:
- /**
- * Constructor
- */
- MsgMonitor(QObject* parent=0);
-
- /**
- * Destructor
- */
- ~MsgMonitor();
-
- /**
- * Set to skip showing note for first time
- * @param skip true/false
- */
- inline void setSkipNote(bool skip = true);
-
- /**
- * Seeker method to access current message type
- */
- static inline ConvergedMessage::MessageType messageType();
-
- /**
- * seeker function to get current msg size in bytes
- */
- static inline int messageSize();
-
- /**
- * seeker function to get current msg's body size
- * in bytes
- */
- static inline int bodySize();
-
- /**
- * seeker function to get current msg's attachment
- * container size in bytes
- */
- static inline int containerSize();
-
- /**
- * seeker function to get current msg's subject
- * size in bytes
- */
- static inline int subjectSize();
-
- /**
- * seeker function to get max possible mms size
- * in bytes
- */
- static inline int maxMmsSize();
-
- /**
- * seeker funtion to get max recipient count for sms
- */
- static inline int maxSmsRecipients();
-
- /**
- * seeker funtion to get max recipient count for mms
- */
- static inline int maxMmsRecipients();
-
- /**
- * get total address count in To, Cc & Bcc fields
- */
- static inline int msgAddressCount();
-
-public slots:
- /**
- * slot to handle content change in any editor component
- */
- void handleContentChange();
-
-private:
- /**
- * setter method to initialize content
- */
- void init();
-
- /**
- * Determine the projected msg type due to change in editor content
- */
- ConvergedMessage::MessageType projectedMsgType();
-
- /**
- * update various msg info changes during editing
- * @param senderWidget, Editor widget which triggered
- * content change slot
- */
- void updateMsgInfo(HbWidget* senderWidget);
-
- /**
- * show type change discreet note
- */
- void showPopup(const QString& text);
-
- /**
- * accessor for view
- */
- MsgUnifiedEditorView* view();
-
- /**
- * check editor body for MMS content
- * @return true if MMS content is present
- */
- bool bodyHasMMSContent();
-
- /**
- * check editor subject for MMS content
- * @return true if MMS content is present
- */
- bool subjectHasMMSContent();
-
- /**
- * check editor attachment container for MMS content
- * @return true if MMS content is present
- */
- bool containerHasMMSContent();
-
- /**
- * check for other MMS content criteria
- * @return true if MMS criteria is met
- */
- bool otherMMSCriteriaMet();
-
-private:
-
- /**
- * Flag to skip showing the type change popup.
- * Note need to be skipped when an mms is opened from draft.
- */
- bool mSkipNote;
-
- /**
- * Type of msg under composition in the editor
- */
- static ConvergedMessage::MessageType mMessageType;
-
- /**
- * msg body size in bytes
- */
- static int mBodySize;
-
- /**
- * msg container size in bytes
- */
- static int mContainerSize;
-
- /**
- * msg subject size in bytes
- */
- static int mSubjectSize;
-
- /**
- * max mms size in bytes
- */
- static int mMaxMmsSize;
-
- /**
- * max recipient count in an sms
- */
- static int mMaxSmsRecipients;
-
- /**
- * max recipient count in an sms
- */
- static int mMaxMmsRecipients;
-
- /**
- * current msg address count (to + cc + bcc)
- */
- static int mMsgCurrAddressCount;
-
- /**
- * UniEditorGenUtils object
- * Owned
- */
- UniEditorGenUtils* mUniEditorGenUtils;
- };
-
-#include "msgmonitor.inl"
-
-#endif //MSG_MONITOR_H
--- a/messagingapp/msgui/unifiededitor/inc/msgmonitor.inl Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,111 +0,0 @@
-/*
-* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: msgmonitor.inl
-*/
-
-
-
-// ========== INLINE METHODS ===============================
-
-//---------------------------------------------------------------
-// MsgMonitor::setSkipNote
-// @see header file
-//---------------------------------------------------------------
-inline void MsgMonitor::setSkipNote(bool skip)
-{
- mSkipNote = skip;
-}
-
-//---------------------------------------------------------------
-// MsgMonitor::messageType
-// @see header file
-//---------------------------------------------------------------
-inline ConvergedMessage::MessageType MsgMonitor::messageType()
-{
- return mMessageType;
-}
-
-//---------------------------------------------------------------
-// MsgMonitor::messageSize
-// @see header file
-//---------------------------------------------------------------
-inline int MsgMonitor::messageSize()
-{
- return mBodySize + mContainerSize + mSubjectSize;
-}
-
-//---------------------------------------------------------------
-// MsgMonitor::bodySize
-// @see header file
-//---------------------------------------------------------------
-inline int MsgMonitor::bodySize()
-{
- return mBodySize;
-}
-
-//---------------------------------------------------------------
-// MsgMonitor::containerSize
-// @see header file
-//---------------------------------------------------------------
-inline int MsgMonitor::containerSize()
-{
- return mContainerSize;
-}
-
-//---------------------------------------------------------------
-// MsgMonitor::subjectSize
-// @see header file
-//---------------------------------------------------------------
-inline int MsgMonitor::subjectSize()
-{
- return mSubjectSize;
-}
-
-//---------------------------------------------------------------
-// MsgMonitor::maxMmsSize
-// @see header file
-//---------------------------------------------------------------
-inline int MsgMonitor::maxMmsSize()
-{
- return mMaxMmsSize;
-}
-
-//---------------------------------------------------------------
-// MsgMonitor::maxSmsRecipients
-// @see header file
-//---------------------------------------------------------------
-inline int MsgMonitor::maxSmsRecipients()
-{
- return mMaxSmsRecipients;
-}
-
-//---------------------------------------------------------------
-// MsgMonitor::maxMmsRecipients
-// @see header file
-//---------------------------------------------------------------
-inline int MsgMonitor::maxMmsRecipients()
-{
- return mMaxMmsRecipients;
-}
-
-//---------------------------------------------------------------
-// MsgMonitor::msgAddressCount
-// @see header file
-//---------------------------------------------------------------
-inline int MsgMonitor::msgAddressCount()
-{
- return mMsgCurrAddressCount;
-}
-
-// End of File
--- a/messagingapp/msgui/unifiededitor/inc/msgunieditoraddress.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/unifiededitor/inc/msgunieditoraddress.h Thu Jul 22 16:32:06 2010 +0100
@@ -15,10 +15,10 @@
*
*/
-#ifndef UNIFIED_EDITOR_ADDRESS_H
-#define UNIFIED_EDITOR_ADDRESS_H
+#ifndef MSG_UNIFIED_EDITOR_ADDRESS_H
+#define MSG_UNIFIED_EDITOR_ADDRESS_H
-#include <msgunifiededitorbasewidget.h>
+#include <msgunieditorbasewidget.h>
#include <convergedmessageaddress.h>
#include <QMap>
@@ -132,6 +132,11 @@
* Handle invalid contact dialog useraction
*/
void handleInvalidContactDialog(HbAction* act);
+
+ /**
+ * Unblocks signals for pbk buttion after some delay.
+ */
+ void unblockSignals();
private:
/**
@@ -153,6 +158,13 @@
* Reset the addresslist to previous list
*/
void resetToPrevious();
+
+ /**
+ * checks if the passed sting is a valid address or not.
+ * @param addr
+ * @retunr true/false based on valid/invalid.
+ */
+ bool checkValidAddress(const QString& addr);
private:
@@ -202,4 +214,4 @@
int mExceedsMaxMmsRecipientsBy;
};
-#endif //UNIFIED_EDITOR_ADDRESS_H
+#endif //MSG_UNIFIED_EDITOR_ADDRESS_H
--- a/messagingapp/msgui/unifiededitor/inc/msgunieditorattachment.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/unifiededitor/inc/msgunieditorattachment.h Thu Jul 22 16:32:06 2010 +0100
@@ -15,8 +15,8 @@
*
*/
-#ifndef UNIFIED_EDITOR_ATTACHMENT_H
-#define UNIFIED_EDITOR_ATTACHMENT_H
+#ifndef MSG_UNIFIED_EDITOR_ATTACHMENT_H
+#define MSG_UNIFIED_EDITOR_ATTACHMENT_H
#include <HbWidget>
#include <QList>
@@ -24,6 +24,8 @@
class HbTextItem;
class HbIconItem;
class HbGestureSceneFilter;
+class HbFrameItem;
+class MsgUnifiedEditorUtils;
class MsgUnifiedEditorAttachment : public HbWidget
{
@@ -67,24 +69,16 @@
*/
bool isMultimediaContent();
- /*
- * Depricated
- */
- // HbFeedback::InstantEffect overrideFeedback(Hb::InstantInteraction interaction) const;
-
protected:
/**
* reimplemented from base class.
*/
- virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
- virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
+ virtual void gestureEvent(QGestureEvent *event);
private:
- /**
- * Helper method to initialize gesture.
- */
- void initGesture();
+
+ void setPressed(bool pressed);
signals:
@@ -102,22 +96,33 @@
/**
* show longpress menu for attachment object
*/
- void longPressed(QPointF position);
+ void handleLongTap(QPointF position);
+
+ /**
+ * Handles short tap event.
+ */
+ void handleShortTap();
/**
* slot to remove attachment from msg editor
*/
- void removeAttachment();
+ void handleRemove();
/**
* slot to open attachment
*/
- void openAttachment();
+ void handleOpen();
/**
* slot to view details of the attachment file
*/
void viewDetails();
+
+ /**
+ * Slot to regrab gesture after some delay (300 ms) to avoid multiple gesture
+ * events back to back.
+ */
+ void regrabGesture();
private:
/**
@@ -159,9 +164,21 @@
* Max limit on sms size. Store at class level for optimization
*/
int mMaxSmsSize;
+
+ /**
+ * Background item
+ * Own
+ */
+ HbFrameItem* mBackGround;
+
+ /**
+ * MsgUnifiedEditorUtils object.
+ * Own
+ */
+ MsgUnifiedEditorUtils *mEditorUtils;
};
typedef QList<MsgUnifiedEditorAttachment*> MsgUnifiedEditorAttachmentList;
-#endif //UNIFIED_EDITOR_ATTACHMENT_H
+#endif //MSG_UNIFIED_EDITOR_ATTACHMENT_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/unifiededitor/inc/msgunieditorattachmentcontainer.h Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,129 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: Container class for msg attachments
+ *
+ */
+#ifndef MSG_UNIFIED_EDITOR_ATTACHMENT_CONTAINER_H
+#define MSG_UNIFIED_EDITOR_ATTACHMENT_CONTAINER_H
+
+#include <HbWidget>
+#include "msgunieditorattachment.h"
+
+class QGraphicsLinearLayout;
+class MmsConformanceCheck;
+
+class MsgAttachmentContainer : public HbWidget
+ {
+ Q_OBJECT
+
+public:
+ /**
+ * Add Attachment success/failure states
+ */
+ enum AddAttachmentStatus
+ {
+ EAddSuccess = 0, EAddNotSupported, EAddSizeExceed
+ };
+
+ /**
+ * Constructor
+ */
+ MsgAttachmentContainer( QGraphicsItem *parent = 0);
+
+ /**
+ * Destructor
+ */
+ ~MsgAttachmentContainer();
+
+ /**
+ * add attachment to the container
+ * @param filepath of the attachment
+ * @return add operation status
+ */
+ MsgAttachmentContainer::AddAttachmentStatus addAttachment(
+ const QString& filepath);
+
+ /**
+ * count of attachments in the container
+ * @return count
+ */
+ int count();
+
+ /**
+ * List of attachments in the container
+ * @return attachments list
+ */
+ MsgUnifiedEditorAttachmentList attachmentList();
+
+ /**
+ * Check if the container hold multimedia content
+ * @return true, if multimedia content is present
+ * false, otherwise.
+ */
+ bool hasMMContent();
+
+ /**
+ * Size of the attachment container
+ * @return size
+ */
+ int containerSize();
+
+signals:
+ /**
+ * emit when container content changes
+ */
+ void contentChanged();
+
+ /**
+ * emit to indicate view that container is now empty
+ * View deletes the container if it becomes empty
+ */
+ void emptyAttachmentContainer();
+
+private slots:
+ /**
+ * delete attachment from the container
+ */
+ void deleteAttachment(MsgUnifiedEditorAttachment* attachment);
+
+private:
+ /**
+ * size of the msg
+ */
+ int messageSize();
+
+private:
+
+ /**
+ * container's layout
+ */
+ QGraphicsLinearLayout* mLayout;
+
+ /**
+ * MMS conformance check utility class
+ */
+ MmsConformanceCheck* mMmsConformanceCheck;
+
+ /**
+ * attachment list
+ */
+ MsgUnifiedEditorAttachmentList mAttachmentList;
+
+ /**
+ * flag to tell, if container is holding MM content
+ */
+ bool mIsMMContent;
+ };
+
+#endif // MSG_UNIFIED_EDITOR_ATTACHMENT_CONTAINER_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/unifiededitor/inc/msgunieditoraudiowidget.h Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,116 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: This widget is used to display audio content.
+ *
+ */
+
+#ifndef MSG_UNIFIED_EDITOR_AUDIO_WIDGET_H
+#define MSG_UNIFIED_EDITOR_AUDIO_WIDGET_H
+
+// FORWARD DECLARATIONS
+class MsgUnifiedEditorUtils;
+
+#include <HbPushButton>
+
+/**
+ * @class MsgUniFiedEditorAudioWidget
+ * @brief This widget is used to display audio content in univiewer.
+ */
+class MsgUniFiedEditorAudioWidget: public HbPushButton
+{
+Q_OBJECT
+
+public:
+
+ /**
+ * Constructor
+ */
+ explicit MsgUniFiedEditorAudioWidget(QGraphicsItem *parent = 0);
+
+ /**
+ * Destructor
+ */
+ ~MsgUniFiedEditorAudioWidget();
+
+ /**
+ * Populates the widget contents.
+ * @param mimeType Mime type of media.
+ * @param filePath File path of media.
+ */
+ void populate(const QString &filePath);
+
+signals:
+
+ /**
+ * Signal emitted when widget is clicked.
+ * @param mediaPath File path of the media.
+ */
+ void shortTap(const QString &mediaPath);
+
+ /**
+ * Signal emitted when widget is long tapped.
+ * @param position Scene coordinates of tap.
+ */
+ void longTap(const QPointF &position);
+
+ /**
+ * Emitted when remove action is triggered.
+ */
+ void remove();
+
+private slots:
+
+ /**
+ * Handles short tap event.
+ */
+ void handleShortTap();
+
+ /**
+ * Handles long tap event.
+ * @param position Scene coordinates of tap.
+ */
+ void handleLongTap(const QPointF &position);
+
+ /**
+ * Handles opening of media.
+ */
+ void handleOpen();
+
+ /**
+ * Handles removing of media.
+ */
+ void handleRemove();
+
+ /**
+ * Slot to regrab gesture after some delay (300 ms) to avoid multiple gesture
+ * events back to back.
+ */
+ void regrabGesture();
+
+private:
+
+ /**
+ * MsgUnifiedEditorUtils object.
+ * Own
+ */
+ MsgUnifiedEditorUtils *mEditorUtils;
+
+ /**
+ * Media file path.
+ */
+ QString mMediaPath;
+};
+
+#endif //MSG_UNIFIED_EDITOR_AUDIO_WIDGET_H
+// EOF
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/unifiededitor/inc/msgunieditorbasewidget.h Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:common base class for editor fields(address field,subject field,
+ * and body field.
+ *
+ */
+
+#include <HbWidget>
+
+#ifndef MSG_UNIFIED_EDITOR_BASEWIDGET_H
+#define MSG_UNIFIED_EDITOR_BASEWIDGET_H
+
+class MsgUnifiedEditorBaseWidget: public HbWidget
+{
+ Q_OBJECT
+
+public:
+ MsgUnifiedEditorBaseWidget(QGraphicsItem *parent = 0):HbWidget(parent){}
+ virtual void setFocus(){}
+
+};
+
+
+#endif /* MSG_UNIFIED_EDITOR_BASEWIDGET_H */
--- a/messagingapp/msgui/unifiededitor/inc/msgunieditorbody.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/unifiededitor/inc/msgunieditorbody.h Thu Jul 22 16:32:06 2010 +0100
@@ -15,24 +15,23 @@
*
*/
-#ifndef UNIFIED_EDITOR_BODY_H
-#define UNIFIED_EDITOR_BODY_H
+#ifndef MSG_UNIFIED_EDITOR_BODY_H
+#define MSG_UNIFIED_EDITOR_BODY_H
-#include <msgunifiededitorbasewidget.h>
+#include <msgunieditorbasewidget.h>
#include <f32file.h>
#include "msgunieditorprocessimageoperation.h"
class HbTextEdit;
class HbTextItem;
class HbFrameItem;
-class HbIconItem;
-class HbPushButton;
-//class HbGestureSceneFilter;
class CMsgMediaResolver;
class CMsgImageInfo;
class MmsConformanceCheck;
class UniEditorPluginInterface;
class UniEditorPluginLoader;
+class MsgUnifiedEditorPixmapWidget;
+class MsgUniFiedEditorAudioWidget;
class MsgUnifiedEditorBody : public MsgUnifiedEditorBaseWidget,
@@ -97,13 +96,28 @@
* @return bool
*/
bool hasAudio();
+
+ /**
+ * from MUniEditorProcessImageOperationObserver
+ * @see MUniEditorProcessImageOperationObserver
+ */
+ void EditorOperationEvent( TUniEditorProcessImageOperationEvent aEvent,
+ TFileName aFileName );
+ /**
+ * Function which tells whether the image resize process is in progress
+ */
+ bool isImageResizing()
+ {
+ return mIsImageResizing;
+ }
public slots:
/**
* Called to insert image content in editor.
* @param medialist list of absolute paths of media.
+ * @param draftMessage specifies draft message
*/
- void setImage(QString& imagefile);
+ void setImage(QString& imagefile, bool draftMessage = false);
/**
* Called to insert audio content in editor.
@@ -127,14 +141,14 @@
* Emitted when msg-body content changes
*/
void contentChanged();
+
+ /**
+ * Emitted when image is being processed.
+ * @param enable, true to enable/ false to disable.
+ */
+ void enableSendButton(bool enable) const;
-public: // from MUniEditorProcessImageOperationObserver
-
- /*
- * @see MUniEditorProcessImageOperationObserver
- */
- void EditorOperationEvent( TUniEditorProcessImageOperationEvent aEvent,
- TFileName aFileName );
+
protected: // from HbWidget
@@ -145,41 +159,17 @@
QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint) const;
private slots:
- /**
- * called on long press on the media objects
- */
- void longPressed(QPointF position);
/**
* called from the media object's item specific menu
*/
void removeMedia();
-
- /**
- * called from the media object's item specific menu
- */
- void openMedia();
-
- /**
- * called from the media object's item specific menu
- */
- void viewDetails();
/**
* handle text changes in body field
*/
void onTextChanged();
- /**
- * Service launch complete.
- */
- void handleOk(const QVariant& result);
-
- /**
- * Service launch errors.
- */
- void handleError(int errorCode, const QString& errorMessage);
-
private:
/**
@@ -192,12 +182,6 @@
* Set that body now contains an audio
*/
void setAudio(bool audio = false);
-
- /**
- * Get the region (image/audio/video) where longpress happened
- * @return region
- */
- QString getHitRegion(QPointF position);
/**
* size of the msg
@@ -238,19 +222,14 @@
HbTextEdit* mTextEdit;
/**
- * frame for editor.
- */
- HbFrameItem* mEditorFrame;
-
- /**
* icon item to preview images.
*/
- HbIconItem* mIconItem;
+ MsgUnifiedEditorPixmapWidget* mPixmapItem;
/**
* inline audio item
*/
- HbPushButton* mAudioItem;
+ MsgUniFiedEditorAudioWidget* mAudioItem;
/**
* Image file contained inside body
@@ -271,11 +250,6 @@
* Video file contained inside body
*/
QString mVideoFile;
-
- /**
- * To setup longpress gesture on media objects
- */
- //HbGestureSceneFilter* mGestureFilter;
/**
* MMs conformance check utility class
@@ -359,6 +333,17 @@
* Content widget for processing animation.
*/
HbWidget* mProcessingWidget;
+
+ /**
+ * boolean specifying a draft message
+ */
+ bool mDraftMessage ;
+
+ /*
+ * Flag to indicate the state of image resizing process.
+ * true - resize in progress. false - resize is not underway.
+ */
+ bool mIsImageResizing;
};
-#endif //UNIFIED_EDITOR_BODY_H
+#endif //MSG_UNIFIED_EDITOR_BODY_H
--- a/messagingapp/msgui/unifiededitor/inc/msgunieditorimageprocessor.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/unifiededitor/inc/msgunieditorimageprocessor.h Thu Jul 22 16:32:06 2010 +0100
@@ -18,8 +18,8 @@
-#ifndef C_UNIIMAGEPROCESSOR_H
-#define C_UNIIMAGEPROCESSOR_H
+#ifndef MSG_UNIFIED_EDITOR_IMAGE_PROCESSOR_H
+#define MSG_UNIFIED_EDITOR_IMAGE_PROCESSOR_H
// INCLUDES
#include <e32base.h>
@@ -412,4 +412,4 @@
#include <msgunieditorimageprocessor.inl>
-#endif // C_UNIIMAGEPROCESSOR_H
+#endif // MSG_UNIFIED_EDITOR_IMAGE_PROCESSOR_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/unifiededitor/inc/msgunieditorlineedit.h Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,103 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Derieved HbLineEdit class for custom address editor
+*
+*/
+
+#ifndef MSG_UNIFIED_EDITOR_LINEEDIT_H
+#define MSG_UNIFIED_EDITOR_LINEEDIT_H
+
+#include <HbLineEdit>
+#include<QBasicTimer>
+
+
+class MsgUnifiedEditorLineEdit : public HbLineEdit
+{
+ Q_OBJECT
+
+public:
+ /**
+ * Constructor
+ */
+ MsgUnifiedEditorLineEdit(const QString& label, QGraphicsItem* parent=0);
+
+ /**
+ * Destructor
+ */
+ ~MsgUnifiedEditorLineEdit();
+
+ /**
+ * seeker method for getting address list
+ */
+ QStringList addresses();
+
+ /**
+ * Flag to retain or override base-class behaviour
+ * Needed because address & subject field classes derieve
+ * from this class, but have different behaviour
+ */
+ void setDefaultBehaviour(bool defaultBehaviour = false);
+
+ /**
+ * seeker method for getting the text content held by editing field
+ */
+ QString content() const;
+
+ /**
+ * setter method to clear text content of the editing field
+ */
+ void clearContent();
+
+ /**
+ * set highlight on invalid contact
+ * @param invalidStr, String to be highlighted
+ */
+ void highlightInvalidString(QString invalidStr);
+
+signals:
+ void contentsChanged(const QString& text);
+
+public slots:
+ void setText(const QString &text, bool underlined = true);
+
+private slots:
+ void selectionChanged(const QTextCursor &oldCursor, const QTextCursor& newCursor);
+ void onContentsChanged();
+ void aboutToShowContextMenu(HbMenu *contextMenu, const QPointF &pos);
+
+protected: // from HbLineEdit
+ void inputMethodEvent(QInputMethodEvent *event);
+ void keyPressEvent(QKeyEvent *event);
+ void gestureEvent(QGestureEvent* event);
+ void focusInEvent(QFocusEvent* event);
+ void focusOutEvent(QFocusEvent *event);
+ void timerEvent (QTimerEvent *event);
+
+
+private:
+ void setHighlight(int currentPos);
+ QString text() const;
+ void handleTap();
+
+private:
+ QRegExp mLabelExpr;
+ QString mLabel;
+ QBasicTimer mSelectionSnapTimer;
+
+ int mSelectionStart;
+ int mSelectionEnd;
+ bool mDefaultBehaviour;
+};
+
+#endif // MSG_UNIFIED_EDITOR_LINEEDIT_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/unifiededitor/inc/msgunieditormmssettingsdefs.h Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: MMS settings specific enumerations, constants, declaration.
+ *
+ */
+
+#ifndef MSG_UNIFIED_EDITOR_MMS_SETTINGSDEFS_H
+#define MSG_UNIFIED_EDITOR_MMS_SETTINGSDEFS_H
+
+// INCLUDES
+
+// CONSTANTS
+// Following definitions are applicable when the Unified SMS and MMS editor is in the build.
+// (Naming like KMmsImageSmallWidth cannot be used, because it is defined in mmsconst.h)
+// Small image: 640*480
+const TInt KMmsUniImageSmallWidth = 640;
+const TInt KMmsUniImageSmallHeight = 480;
+// Large image: 1600*1200
+const TInt KMmsUniImageLargeWidth = 1600;
+const TInt KMmsUniImageLargeHeight = 1200;
+
+#endif // MSG_UNIFIED_EDITOR_MMS_SETTINGSDEFS_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/unifiededitor/inc/msgunieditormonitor.h Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,229 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: Helper class to monitor msg construction in unified editor
+ *
+ */
+
+#ifndef MSG_UNIFIED_EDITOR_MONITOR_H
+#define MSG_UNIFIED_EDITOR_MONITOR_H
+
+#include <QObject>
+#include "convergedmessage.h"
+class MsgUnifiedEditorView;
+class HbWidget;
+class UniEditorGenUtils;
+
+/**
+ * Helper class to monitor message's contruction in unified editor.
+ * This class is for only reading editor's content to run its logic.
+ * This class is NOT a place for content editing inside editor.
+ */
+class MsgUnifiedEditorMonitor : public QObject
+ {
+ Q_OBJECT
+
+public:
+ /**
+ * Constructor
+ */
+ MsgUnifiedEditorMonitor(QObject* parent=0);
+
+ /**
+ * Destructor
+ */
+ ~MsgUnifiedEditorMonitor();
+
+ /**
+ * Set to skip showing note for first time
+ * @param skip true/false
+ */
+ inline void setSkipNote(bool skip = true);
+
+ /**
+ * Seeker method to access current message type
+ */
+ static inline ConvergedMessage::MessageType messageType();
+
+ /**
+ * seeker function to get current msg size in bytes
+ */
+ static inline int messageSize();
+
+ /**
+ * seeker function to get current msg's body size
+ * in bytes
+ */
+ static inline int bodySize();
+
+ /**
+ * seeker function to get current msg's attachment
+ * container size in bytes
+ */
+ static inline int containerSize();
+
+ /**
+ * seeker function to get current msg's subject
+ * size in bytes
+ */
+ static inline int subjectSize();
+
+ /**
+ * seeker function to get max possible mms size
+ * in bytes
+ */
+ static inline int maxMmsSize();
+
+ /**
+ * seeker funtion to get max recipient count for sms
+ */
+ static inline int maxSmsRecipients();
+
+ /**
+ * seeker funtion to get max recipient count for mms
+ */
+ static inline int maxMmsRecipients();
+
+ /**
+ * get total address count in To, Cc & Bcc fields
+ */
+ static inline int msgAddressCount();
+
+public slots:
+ /**
+ * slot to handle content change in any editor component
+ */
+ void handleContentChange();
+
+signals:
+ /**
+ * Emitted when composed message can be sent.
+ * @param enable true if send is possible else false.
+ */
+ void enableSend(bool enable);
+
+private:
+ /**
+ * setter method to initialize content
+ */
+ void init();
+
+ /**
+ * Determine the projected msg type due to change in editor content
+ */
+ ConvergedMessage::MessageType projectedMsgType();
+
+ /**
+ * update various msg info changes during editing
+ * @param senderWidget, Editor widget which triggered
+ * content change slot
+ */
+ void updateMsgInfo(HbWidget* senderWidget);
+
+ /**
+ * show type change discreet note
+ */
+ void showPopup(const QString& text);
+
+ /**
+ * accessor for view
+ */
+ MsgUnifiedEditorView* view();
+
+ /**
+ * check editor body for MMS content
+ * @return true if MMS content is present
+ */
+ bool bodyHasMMSContent();
+
+ /**
+ * check editor subject for MMS content
+ * @return true if MMS content is present
+ */
+ bool subjectHasMMSContent();
+
+ /**
+ * check editor attachment container for MMS content
+ * @return true if MMS content is present
+ */
+ bool containerHasMMSContent();
+
+ /**
+ * check for other MMS content criteria
+ * @return true if MMS criteria is met
+ */
+ bool otherMMSCriteriaMet();
+
+ /**
+ * Checks if composed message can be sent and emits a signal.
+ */
+ void updateSend();
+
+private:
+
+ /**
+ * Flag to skip showing the type change popup.
+ * Note need to be skipped when an mms is opened from draft.
+ */
+ bool mSkipNote;
+
+ /**
+ * Type of msg under composition in the editor
+ */
+ static ConvergedMessage::MessageType mMessageType;
+
+ /**
+ * msg body size in bytes
+ */
+ static int mBodySize;
+
+ /**
+ * msg container size in bytes
+ */
+ static int mContainerSize;
+
+ /**
+ * msg subject size in bytes
+ */
+ static int mSubjectSize;
+
+ /**
+ * max mms size in bytes
+ */
+ static int mMaxMmsSize;
+
+ /**
+ * max recipient count in an sms
+ */
+ static int mMaxSmsRecipients;
+
+ /**
+ * max recipient count in an sms
+ */
+ static int mMaxMmsRecipients;
+
+ /**
+ * current msg address count (to + cc + bcc)
+ */
+ static int mMsgCurrAddressCount;
+
+ /**
+ * UniEditorGenUtils object
+ * Owned
+ */
+ UniEditorGenUtils* mUniEditorGenUtils;
+ };
+
+#include "msgunieditormonitor.inl"
+
+#endif //MSG_UNIFIED_EDITOR_MONITOR_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/unifiededitor/inc/msgunieditormonitor.inl Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,111 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: msgmonitor.inl
+*/
+
+
+
+// ========== INLINE METHODS ===============================
+
+//---------------------------------------------------------------
+// MsgUnifiedEditorMonitor::setSkipNote
+// @see header file
+//---------------------------------------------------------------
+inline void MsgUnifiedEditorMonitor::setSkipNote(bool skip)
+{
+ mSkipNote = skip;
+}
+
+//---------------------------------------------------------------
+// MsgUnifiedEditorMonitor::messageType
+// @see header file
+//---------------------------------------------------------------
+inline ConvergedMessage::MessageType MsgUnifiedEditorMonitor::messageType()
+{
+ return mMessageType;
+}
+
+//---------------------------------------------------------------
+// MsgUnifiedEditorMonitor::messageSize
+// @see header file
+//---------------------------------------------------------------
+inline int MsgUnifiedEditorMonitor::messageSize()
+{
+ return mBodySize + mContainerSize + mSubjectSize;
+}
+
+//---------------------------------------------------------------
+// MsgUnifiedEditorMonitor::bodySize
+// @see header file
+//---------------------------------------------------------------
+inline int MsgUnifiedEditorMonitor::bodySize()
+{
+ return mBodySize;
+}
+
+//---------------------------------------------------------------
+// MsgUnifiedEditorMonitor::containerSize
+// @see header file
+//---------------------------------------------------------------
+inline int MsgUnifiedEditorMonitor::containerSize()
+{
+ return mContainerSize;
+}
+
+//---------------------------------------------------------------
+// MsgUnifiedEditorMonitor::subjectSize
+// @see header file
+//---------------------------------------------------------------
+inline int MsgUnifiedEditorMonitor::subjectSize()
+{
+ return mSubjectSize;
+}
+
+//---------------------------------------------------------------
+// MsgUnifiedEditorMonitor::maxMmsSize
+// @see header file
+//---------------------------------------------------------------
+inline int MsgUnifiedEditorMonitor::maxMmsSize()
+{
+ return mMaxMmsSize;
+}
+
+//---------------------------------------------------------------
+// MsgUnifiedEditorMonitor::maxSmsRecipients
+// @see header file
+//---------------------------------------------------------------
+inline int MsgUnifiedEditorMonitor::maxSmsRecipients()
+{
+ return mMaxSmsRecipients;
+}
+
+//---------------------------------------------------------------
+// MsgUnifiedEditorMonitor::maxMmsRecipients
+// @see header file
+//---------------------------------------------------------------
+inline int MsgUnifiedEditorMonitor::maxMmsRecipients()
+{
+ return mMaxMmsRecipients;
+}
+
+//---------------------------------------------------------------
+// MsgUnifiedEditorMonitor::msgAddressCount
+// @see header file
+//---------------------------------------------------------------
+inline int MsgUnifiedEditorMonitor::msgAddressCount()
+{
+ return mMsgCurrAddressCount;
+}
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/unifiededitor/inc/msgunieditorpixmapwidget.h Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,131 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: This widget displays the pixmap content.
+ *
+ */
+
+#ifndef MSG_UNIFIED_EDITOR_PIXMAP_WIDGET_H
+#define MSG_UNIFIED_EDITOR_PIXMAP_WIDGET_H
+
+#include <HbIconItem>
+
+// FORWARD DECLARATIONS
+class MsgUnifiedEditorUtils;
+
+/**
+ * This widget displays the pixmap content.
+ */
+class MsgUnifiedEditorPixmapWidget: public HbIconItem
+{
+Q_OBJECT
+
+public:
+
+ /**
+ * Constructor
+ */
+ MsgUnifiedEditorPixmapWidget(QGraphicsItem *parent = 0);
+
+ /**
+ * Destructor
+ */
+ ~MsgUnifiedEditorPixmapWidget();
+
+ /**
+ * Sets the pixmap content to be displayed.
+ * @param imagePath File path of the image.
+ */
+ void populate(const QString &imagePath);
+
+signals:
+
+ /**
+ * Signal emitted when widget is clicked.
+ * @param mediaPath File path of the media.
+ */
+ void shortTap(const QString &mediaPath);
+
+ /**
+ * Signal emitted when widget is long tapped.
+ * @param position Scene coordinates of tap.
+ */
+ void longTap(const QPointF &position);
+
+ /**
+ * Emitted when remove action is triggered.
+ */
+ void remove();
+
+protected:
+
+ /**
+ * Event handler for gesture events.
+ * Reimplemented from HbWidgetBase.
+ * @see HbWidgetBase
+ */
+ virtual void gestureEvent(QGestureEvent *event);
+
+private slots:
+
+ /**
+ * Handles opening of media.
+ */
+ void handleOpen();
+
+ /**
+ * Handles removing of media.
+ */
+ void handleRemove();
+
+ /**
+ * Handles opening of details view.
+ */
+ void viewDetails();
+
+ /**
+ * Slot to regrab gesture after some delay (300 ms) to avoid multiple gesture
+ * events back to back.
+ */
+ void regrabGesture();
+
+private:
+
+ /**
+ * Handles short tap event.
+ */
+ void handleShortTap();
+
+ /**
+ * Handles long tap event.
+ * @param position Scene coordinates of tap.
+ */
+ void handleLongTap(const QPointF &position);
+
+private:
+
+ /**
+ * MsgUnifiedEditorUtils object.
+ * Own
+ */
+ MsgUnifiedEditorUtils *mEditorUtils;
+
+ /**
+ * Pixmap file path being set.
+ */
+ QString mPixmapPath;
+};
+
+#endif /* MSG_UNIFIED_EDITOR_PIXMAP_WIDGET_H */
+
+// EOF
--- a/messagingapp/msgui/unifiededitor/inc/msgunieditorprocessimageoperation.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/unifiededitor/inc/msgunieditorprocessimageoperation.h Thu Jul 22 16:32:06 2010 +0100
@@ -17,8 +17,8 @@
-#ifndef __UNIEDITORPROCESSIMAGEOPERATION_H
-#define __UNIEDITORPROCESSIMAGEOPERATION_H
+#ifndef MSG_UNIFIED_EDITOR_PROCESS_IMAGEOPERATION_H
+#define MSG_UNIFIED_EDITOR_PROCESS_IMAGEOPERATION_H
// INCLUDES
@@ -262,4 +262,4 @@
TBool largeImageQuery;
};
-#endif //__UNIEDITORPROCESSIMAGEOPERATION_H
+#endif //MSG_UNIFIED_EDITOR_PROCESS_IMAGEOPERATION_H
--- a/messagingapp/msgui/unifiededitor/inc/msgunieditorsubject.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/unifiededitor/inc/msgunieditorsubject.h Thu Jul 22 16:32:06 2010 +0100
@@ -14,10 +14,10 @@
* Description:
*/
-#ifndef UNIFIED_EDITOR_SUBJECT_H
-#define UNIFIED_EDITOR_SUBJECT_H
+#ifndef MSG_UNIFIED_EDITOR_SUBJECT_H
+#define MSG_UNIFIED_EDITOR_SUBJECT_H
-#include <msgunifiededitorbasewidget.h>
+#include <msgunieditorbasewidget.h>
#include "convergedmessage.h"
@@ -120,4 +120,4 @@
QString mPrevBuffer;
};
-#endif //UNIFIED_EDITOR_SUBJECT_H
+#endif //MSG_UNIFIED_EDITOR_SUBJECT_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/unifiededitor/inc/msgunieditorutils.h Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: Utility class for unieditor.
+ *
+ */
+
+#ifndef MSG_UNIFIED_EDITOR_UTILS_H
+#define MSG_UNIFIED_EDITOR_UTILS_H
+
+// SYSTEM INCLUDES
+#include <QObject>
+
+// FORWARD DECLARATIONS
+
+/**
+ * @class MsgUnifiedEditorUtils
+ * @brief Utility class for univiewer. Contains common functionality required
+ * for widgets.
+ */
+
+class MsgUnifiedEditorUtils: public QObject
+{
+Q_OBJECT
+
+public:
+
+ /**
+ * Constructor
+ */
+ explicit MsgUnifiedEditorUtils(QObject *parent = 0);
+
+ /**
+ * Destructor
+ */
+ virtual ~MsgUnifiedEditorUtils();
+
+ /**
+ * Utility function to launch different content viewers.
+ * @param mimeType Mime type of the content.
+ * @param filePath Absolute file path of content.
+ */
+ void launchContentViewer(const QString &mimeType, const QString &filePath);
+
+signals:
+
+ /**
+ * Service launch complete.
+ */
+ void requestOk(const QVariant& result);
+
+ /**
+ * Service launch errors.
+ */
+ void requestError(int errorCode, const QString& errorMessage);
+
+private slots:
+
+ /**
+ * Service launch complete.
+ */
+ void handleOk(const QVariant& result);
+
+ /**
+ * Service launch errors.
+ */
+ void handleError(int errorCode, const QString& errorMessage);
+
+private:
+
+ /**
+ * Launch content viewer using XQSharableFile.
+ * @param filePath Absolute path of content.
+ */
+ void launchViaSharableFile(const QString &filePath);
+
+};
+
+#endif // MSG_UNIFIED_EDITOR_UTILS_H
+//eof
--- a/messagingapp/msgui/unifiededitor/inc/msgunieditorview.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/unifiededitor/inc/msgunieditorview.h Thu Jul 22 16:32:06 2010 +0100
@@ -15,8 +15,8 @@
*
*/
-#ifndef UNIFIED_EDITOR_VIEW_H
-#define UNIFIED_EDITOR_VIEW_H
+#ifndef MSG_UNIFIED_EDITOR_VIEW_H
+#define MSG_UNIFIED_EDITOR_VIEW_H
#ifdef UNIFIEDEDITOR_DLL
#define UNIFIEDEDITOR_EXPORT Q_DECL_EXPORT
@@ -35,7 +35,7 @@
class MsgUnifiedEditorSubject;
class MsgUnifiedEditorAddress;
class MsgUnifiedEditorBody;
-class MsgMonitor;
+class MsgUnifiedEditorMonitor;
class MsgAttachmentContainer;
class UniEditorPluginLoader;
class HbListWidgetItem;
@@ -75,7 +75,7 @@
/**
* Saves the content inside editor to save
*/
- void saveContentToDrafts();
+ int saveContentToDrafts();
protected:
/**
@@ -105,9 +105,11 @@
/**
* Populate editor with prepopulated msg content
+ * @param messageDetails message details
+ * @param draftMessage boolean for specifying draft message
*/
void populateContentIntoEditor(
- const ConvergedMessage& messageDetails);
+ const ConvergedMessage& messageDetails, bool draftMessage = false);
/**
* Populate the editor with the forwarded message's content
@@ -182,6 +184,13 @@
void setAttachOptionEnabled(MsgUnifiedEditorView::TBE_AttachOption opt,
bool enable);
+ /**
+ * Addresses are all ok. Now parse not allowed chars away
+ * before giving it to MTM
+ * @param addresses, list of ConvergedMessageAddress
+ */
+ void formatAddresses(ConvergedMessageAddressList& addresses);
+
private slots:
/**
@@ -205,11 +214,6 @@
void changePriority();
/**
- * slot for different sending options.
- */
- void sendingOptions();
-
- /**
* slot to current delete message.
*/
void deleteMessage();
@@ -220,11 +224,6 @@
void imagesFetched(const QVariant& result );
/**
- * slot to fetch audio files
- */
- void audiosFetched(const QVariant& result );
-
- /**
* slot to receive fetched contacts
*/
void contactsFetched(const QVariant& value);
@@ -317,10 +316,17 @@
* @param action selected action (yes or no).
*/
void onDialogMmsSettings(HbAction* action);
+
+ /**
+ * Enable/Disable send tool button.
+ * @param true/false to enable/disable.
+ */
+ void enableSendButton(bool enable);
private:
HbAction* mSubjectAction;
HbAction* mCcBccAction;
+ HbAction* mSendAction;
QGraphicsLinearLayout* mMainLayout;
MsgUnifiedEditorSubject* mSubjectField;
MsgUnifiedEditorAddress* mToField;
@@ -330,7 +336,7 @@
HbWidget* mContentWidget;
- MsgMonitor* mMsgMonitor;
+ MsgUnifiedEditorMonitor* mMsgMonitor;
MsgAttachmentContainer* mAttachmentContainer;
UniEditorPluginLoader* mPluginLoader;
ConvergedMessageId mOpenedMessageId;
@@ -347,7 +353,7 @@
*/
HbAbstractVkbHost* mVkbHost;
- friend class MsgMonitor;
+ friend class MsgUnifiedEditorMonitor;
};
-#endif //UNIFIED_EDITOR_VIEW_H
+#endif //MSG_UNIFIED_EDITOR_VIEW_H
--- a/messagingapp/msgui/unifiededitor/inc/msgunifiededitorbasewidget.h Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-/*
- * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of "Eclipse Public License v1.0"
- * which accompanies this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html".
- *
- * Initial Contributors:
- * Nokia Corporation - initial contribution.
- *
- * Contributors:
- *
- * Description:common base class for editor fields(address field,subject field,
- * and body field.
- *
- */
-
-#include <HbWidget>
-
-#ifndef MSGUNIFIEDEDITORBASEWIDGET_H_
-#define MSGUNIFIEDEDITORBASEWIDGET_H_
-
-class MsgUnifiedEditorBaseWidget: public HbWidget
-{
- Q_OBJECT
-
-public:
- MsgUnifiedEditorBaseWidget(QGraphicsItem *parent = 0):HbWidget(parent){}
- virtual void setFocus(){}
-
-};
-
-
-#endif /* MSGUNIFIEDEDITORBASEWIDGET_H_ */
--- a/messagingapp/msgui/unifiededitor/inc/msgunifiededitorlineedit.h Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,103 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Derieved HbLineEdit class for custom address editor
-*
-*/
-
-#ifndef MSGUNIFIEDEDITORLINEEDIT_H
-#define MSGUNIFIEDEDITORLINEEDIT_H
-
-#include <HbLineEdit>
-#include<QBasicTimer>
-
-
-class MsgUnifiedEditorLineEdit : public HbLineEdit
-{
- Q_OBJECT
-
-public:
- /**
- * Constructor
- */
- MsgUnifiedEditorLineEdit(const QString& label, QGraphicsItem* parent=0);
-
- /**
- * Destructor
- */
- ~MsgUnifiedEditorLineEdit();
-
- /**
- * seeker method for getting address list
- */
- QStringList addresses();
-
- /**
- * Flag to retain or override base-class behaviour
- * Needed because address & subject field classes derieve
- * from this class, but have different behaviour
- */
- void setDefaultBehaviour(bool defaultBehaviour = false);
-
- /**
- * seeker method for getting the text content held by editing field
- */
- QString content() const;
-
- /**
- * setter method to clear text content of the editing field
- */
- void clearContent();
-
- /**
- * set highlight on invalid contact
- * @param invalidStr, String to be highlighted
- */
- void highlightInvalidString(QString invalidStr);
-
-signals:
- void contentsChanged(const QString& text);
-
-public slots:
- void setText(const QString &text, bool underlined = true);
- void cut();
- void selectAll();
-
-private slots:
- void selectionChanged(const QTextCursor &oldCursor, const QTextCursor& newCursor);
- void onContentsChanged();
-
-protected: // from HbLineEdit
- void inputMethodEvent(QInputMethodEvent *event);
- void keyPressEvent(QKeyEvent *event);
- void mouseReleaseEvent(QGraphicsSceneMouseEvent* event);
- void focusInEvent(QFocusEvent* event);
- void focusOutEvent(QFocusEvent *event);
- void timerEvent (QTimerEvent *event);
-
-
-private:
- void setHighlight(int currentPos);
- QString text() const;
-
-private:
- QRegExp mLabelExpr;
- QString mLabel;
- QBasicTimer mSelectionSnapTimer;
-
- int mSelectionStart;
- int mSelectionEnd;
- bool mDefaultBehaviour;
-};
-
-#endif // MSGUNIFIEDEDITORLINEEDIT_H
--- a/messagingapp/msgui/unifiededitor/resources/layouts/msgunifiededitorattachment.css Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/unifiededitor/resources/layouts/msgunifiededitorattachment.css Thu Jul 22 16:32:06 2010 +0100
@@ -33,12 +33,7 @@
text-height:var(hb-param-text-height-tiny);
text-line-count-min:1;
text-line-count-max:1;
- fixed-width: 13.0un;
+ size-policy:fixed fixed;
text-align:right;
}
-MsgUnifiedEditorAttachment::bgFrame
-{
- zvalue:-1;
-}
-
--- a/messagingapp/msgui/unifiededitor/resources/layouts/msgunifiededitorattachment.widgetml Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/unifiededitor/resources/layouts/msgunifiededitorattachment.widgetml Thu Jul 22 16:32:06 2010 +0100
@@ -11,11 +11,6 @@
<meshitem src="attachmentName" srcEdge="LEFT" dst="attachmentIcon" dstEdge="RIGHT"/>
<meshitem src="attachmentName" srcEdge="CENTERV" dst="" dstEdge="CENTERV"/>
<meshitem src="attachmentName" srcEdge="RIGHT" dst="attachmentDetails" dstEdge="LEFT"/>
-
- <meshitem src="bgFrame" srcEdge="LEFT" dst="" dstEdge="LEFT"/>
- <meshitem src="bgFrame" srcEdge="TOP" dst="" dstEdge="TOP"/>
- <meshitem src="bgFrame" srcEdge="RIGHT" dst="" dstEdge="RIGHT"/>
- <meshitem src="bgFrame" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM"/>
</layout>
</hbwidget>
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/unifiededitor/resources/layouts/msgunifiededitorattachment_color.css Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,20 @@
+
+MsgUnifiedEditorAttachment[state="normal"]::attachmentDetails
+{
+ color:var(qtc_list_item_title_normal);
+}
+
+MsgUnifiedEditorAttachment[state="pressed"]::attachmentDetails
+{
+ color:var(qtc_list_item_pressed);
+}
+
+MsgUnifiedEditorAttachment[state="normal"]::attachmentName
+{
+ color:var(qtc_list_item_title_normal);
+}
+
+MsgUnifiedEditorAttachment[state="pressed"]::attachmentName
+{
+ color:var(qtc_list_item_pressed);
+}
--- a/messagingapp/msgui/unifiededitor/resources/layouts/msgunifiededitorbody.widgetml Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/unifiededitor/resources/layouts/msgunifiededitorbody.widgetml Thu Jul 22 16:32:06 2010 +0100
@@ -15,11 +15,6 @@
<meshitem src="textEdit" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
<meshitem src="textEdit" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" />
- <meshitem src="textEditFrame" srcEdge="TOP" dst="textEdit" dstEdge="TOP" />
- <meshitem src="textEditFrame" srcEdge="BOTTOM" dst="textEdit" dstEdge="BOTTOM" />
- <meshitem src="textEditFrame" srcEdge="LEFT" dst="textEdit" dstEdge="LEFT" />
- <meshitem src="textEditFrame" srcEdge="RIGHT" dst="textEdit" dstEdge="RIGHT" />
-
<meshitem src="charCounter" srcEdge="TOP" dst="textEdit" dstEdge="TOP" />
<meshitem src="charCounter" srcEdge="RIGHT" dst="textEdit" dstEdge="RIGHT" />
@@ -41,11 +36,6 @@
<meshitem src="textEdit" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
<meshitem src="textEdit" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" />
- <meshitem src="textEditFrame" srcEdge="TOP" dst="textEdit" dstEdge="TOP" />
- <meshitem src="textEditFrame" srcEdge="LEFT" dst="textEdit" dstEdge="LEFT" />
- <meshitem src="textEditFrame" srcEdge="RIGHT" dst="textEdit" dstEdge="RIGHT" />
- <meshitem src="textEditFrame" srcEdge="BOTTOM" dst="textEdit" dstEdge="BOTTOM" />
-
<meshitem src="charCounter" srcEdge="TOP" dst="textEdit" dstEdge="TOP" />
<meshitem src="charCounter" srcEdge="RIGHT" dst="textEdit" dstEdge="RIGHT" />
@@ -67,11 +57,6 @@
<meshitem src="textEdit" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
<meshitem src="textEdit" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" />
- <meshitem src="textEditFrame" srcEdge="TOP" dst="textEdit" dstEdge="TOP" />
- <meshitem src="textEditFrame" srcEdge="LEFT" dst="textEdit" dstEdge="LEFT" />
- <meshitem src="textEditFrame" srcEdge="RIGHT" dst="textEdit" dstEdge="RIGHT" />
- <meshitem src="textEditFrame" srcEdge="BOTTOM" dst="textEdit" dstEdge="BOTTOM" />
-
<meshitem src="pixmap" srcEdge="TOP" dst="audioItem" dstEdge="BOTTOM" />
<meshitem src="pixmap" srcEdge="LEFT" dst="" dstEdge="LEFT" />
<meshitem src="pixmap" srcEdge="RIGHT" dst="textEdit" dstEdge="LEFT" />
--- a/messagingapp/msgui/unifiededitor/src/msgattachmentcontainer.cpp Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,174 +0,0 @@
-/*
- * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of "Eclipse Public License v1.0"
- * which accompanies this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html".
- *
- * Initial Contributors:
- * Nokia Corporation - initial contribution.
- *
- * Contributors:
- *
- * Description: attachment container class
- *
- */
-
-
-// INCLUDES
-#include <QGraphicsLinearLayout>
-#include <QFileInfo>
-#include <HbFrameItem>
-#include <HbFrameDrawer>
-
-// USER INCLUDES
-#include "msgattachmentcontainer.h"
-#include "unieditorgenutils.h"
-#include "msgmonitor.h"
-#include "mmsconformancecheck.h"
-
-// Constants
-
-//---------------------------------------------------------------
-// MsgAttachmentContainer::MsgAttachmentContainer
-// @see header file
-//---------------------------------------------------------------
-MsgAttachmentContainer::MsgAttachmentContainer( QGraphicsItem *parent ) :
-HbWidget(parent),
-mIsMMContent(false)
-{
- mLayout = new QGraphicsLinearLayout(Qt::Vertical, this);
- mLayout->setContentsMargins(0,0,0,0);
- mLayout->setSpacing(0);
- mMmsConformanceCheck = new MmsConformanceCheck;
-}
-
-//---------------------------------------------------------------
-// MsgAttachmentContainer::~MsgAttachmentContainer
-// @see header file
-//---------------------------------------------------------------
-MsgAttachmentContainer::~MsgAttachmentContainer()
-{
- delete mMmsConformanceCheck;
-}
-
-//---------------------------------------------------------------
-// MsgAttachmentContainer::addAttachment
-// @see header file
-//---------------------------------------------------------------
-MsgAttachmentContainer::AddAttachmentStatus
- MsgAttachmentContainer::addAttachment(const QString& filepath)
-{
- //check for insert conformance
- if(EInsertSuccess != mMmsConformanceCheck->checkModeForInsert(filepath))
- return EAddNotSupported;
-
- int msgSize = messageSize();
- QFileInfo fileinfo(filepath);
- int fileSize = fileinfo.size() + KEstimatedMimeHeaderSize;
-
- if( (fileSize + msgSize) <= MsgMonitor::maxMmsSize())
- {
- MsgUnifiedEditorAttachment* att = new MsgUnifiedEditorAttachment(
- filepath, fileSize, this);
- if( ((mAttachmentList.count() == 0) && att->isMultimediaContent()) ||
- ((mAttachmentList.count() == 1) && !mIsMMContent) )
- {
- mIsMMContent = true;
- }
- mAttachmentList << att;
- int index = mLayout->count();
- mLayout->insertItem(index,att);
- connect(att, SIGNAL(deleteMe(MsgUnifiedEditorAttachment*)),
- this, SLOT(deleteAttachment(MsgUnifiedEditorAttachment*)));
-
- // emit to signal that container content & size changed
- emit contentChanged();
- }
- else
- {
- return EAddSizeExceed;
- }
- return EAddSuccess;
-}
-
-//---------------------------------------------------------------
-// MsgAttachmentContainer::deleteAttachment
-// @see header file
-//---------------------------------------------------------------
-void MsgAttachmentContainer::deleteAttachment(MsgUnifiedEditorAttachment* attachment)
-{
- mAttachmentList.removeOne(attachment);
- mLayout->removeItem(attachment);
- attachment->setParent(NULL);
- delete attachment;
-
- if( ((mAttachmentList.count() == 1) && !mAttachmentList.first()->isMultimediaContent()) ||
- ((mAttachmentList.count() == 0) && mIsMMContent) )
- {
- mIsMMContent = false;
- }
-
- // emit to indicate change in container content & size
- emit contentChanged();
- if(mAttachmentList.count() == 0)
- {
- emit emptyAttachmentContainer();
- }
-}
-
-//---------------------------------------------------------------
-// MsgAttachmentContainer::count
-// @see header file
-//---------------------------------------------------------------
-int MsgAttachmentContainer::count()
-{
- return mAttachmentList.count();
-}
-
-//---------------------------------------------------------------
-// MsgAttachmentContainer::attachmentList
-// @see header file
-//---------------------------------------------------------------
-MsgUnifiedEditorAttachmentList MsgAttachmentContainer::attachmentList()
-{
- return mAttachmentList;
-}
-
-//---------------------------------------------------------------
-// MsgAttachmentContainer::containerSize
-// @see header file
-//---------------------------------------------------------------
-int MsgAttachmentContainer::containerSize()
-{
- int attCount = count();
- int containerSize = 0;
-
- for(int i=0; i<attCount; i++)
- {
- containerSize += mAttachmentList.at(i)->size();
- }
- return containerSize;
-}
-
-//---------------------------------------------------------------
-// MsgAttachmentContainer::messageSize
-// @see header file
-//---------------------------------------------------------------
-int MsgAttachmentContainer::messageSize()
-{
- return containerSize() + MsgMonitor::bodySize() + MsgMonitor::subjectSize();
-}
-
-//---------------------------------------------------------------
-// MsgAttachmentContainer::hasMMContent
-// @see header file
-//---------------------------------------------------------------
-bool MsgAttachmentContainer::hasMMContent()
-{
- return mIsMMContent;
-}
-
-//EOF
-
--- a/messagingapp/msgui/unifiededitor/src/msgmonitor.cpp Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,332 +0,0 @@
-/*
- * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of "Eclipse Public License v1.0"
- * which accompanies this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html".
- *
- * Initial Contributors:
- * Nokia Corporation - initial contribution.
- *
- * Contributors:
- *
- * Description: Helper class to monitor msg construction in unified editor
- *
- */
-
-// INCLUDES
-#include "debugtraces.h"
-#include <HbNotificationDialog>
-#include <HbWidget>
-
-// USER INCLUDES
-#include "msgmonitor.h"
-#include "msgunieditorview.h"
-#include "msgunieditoraddress.h"
-#include "msgunieditorsubject.h"
-#include "msgunieditorbody.h"
-#include "msgattachmentcontainer.h"
-#include "UniEditorGenUtils.h"
-
-// Constants
-
-// Define static
-ConvergedMessage::MessageType MsgMonitor::mMessageType;
-int MsgMonitor::mBodySize;
-int MsgMonitor::mContainerSize;
-int MsgMonitor::mSubjectSize;
-int MsgMonitor::mMaxMmsSize;
-int MsgMonitor::mMaxSmsRecipients;
-int MsgMonitor::mMaxMmsRecipients;
-int MsgMonitor::mMsgCurrAddressCount;
-
-//Localized strings
-#define LOC_POP_MESSAGE_CHANGE_MUL hbTrId("txt_messaging_dpopinfo_message_type_changed_to_mul")
-#define LOC_POP_MESSAGE_CHANGE_TEXT hbTrId("txt_messaging_dpopinfo_message_type_changed_to_tex")
-
-//---------------------------------------------------------------
-// MsgMonitor::MsgMonitor
-// @see header file
-//---------------------------------------------------------------
-MsgMonitor::MsgMonitor(QObject* parent) :
-QObject(parent),
-mSkipNote(false)
-{
- init();
- mUniEditorGenUtils = new UniEditorGenUtils;
-}
-
-//---------------------------------------------------------------
-// MsgMonitor::~MsgMonitor
-// @see header file
-//---------------------------------------------------------------
-MsgMonitor::~MsgMonitor()
-{
- delete mUniEditorGenUtils;
-}
-
-//---------------------------------------------------------------
-// MsgMonitor::init
-// @see header file
-//---------------------------------------------------------------
-void MsgMonitor::init()
-{
- mMessageType = ConvergedMessage::Sms;
- mBodySize = 0;
- mContainerSize = 0;
- mSubjectSize = 0;
- mMsgCurrAddressCount = 0;
-
- UniEditorGenUtils* uniEditorGenUtils = new UniEditorGenUtils;
-
- mMaxMmsSize = KDefaultMaxSize;
- TRAP_IGNORE(mMaxMmsSize = uniEditorGenUtils->MaxMmsMsgSizeL());
-
- mMaxSmsRecipients = KDefaultSmsRecipients;
- TRAP_IGNORE(mMaxSmsRecipients = uniEditorGenUtils->MaxSmsRecipientsL());
-
- mMaxMmsRecipients = KDefaultMmsRecipients;
- TRAP_IGNORE(mMaxMmsRecipients = uniEditorGenUtils->MaxMmsRecipientsL());
-
- delete uniEditorGenUtils;
-}
-
-//---------------------------------------------------------------
-// MsgMonitor::handleContentChange
-// @see header file
-//---------------------------------------------------------------
-void MsgMonitor::handleContentChange()
-{
- // get the projected message type & show the type change note
- ConvergedMessage::MessageType newMsgType = projectedMsgType();
- if(mMessageType != newMsgType)
- {
- mMessageType = newMsgType;
- QString noteStr;
- if(newMsgType == ConvergedMessage::Sms)
- {
- noteStr = LOC_POP_MESSAGE_CHANGE_TEXT;
- }
- else
- {
- noteStr = LOC_POP_MESSAGE_CHANGE_MUL;
- }
- showPopup(noteStr);
- }
-
- HbWidget* senderWidget = qobject_cast<HbWidget*>(sender());
- updateMsgInfo(senderWidget);
-}
-
-//---------------------------------------------------------------
-// MsgMonitor::projectedMsgType
-// @see header file
-//---------------------------------------------------------------
-ConvergedMessage::MessageType MsgMonitor::projectedMsgType()
-{
- ConvergedMessage::MessageType newMsgType = ConvergedMessage::Sms;
-
- // check if MMS content is present in any of the editor component
- if( bodyHasMMSContent() ||
- subjectHasMMSContent() ||
- containerHasMMSContent() ||
- otherMMSCriteriaMet() )
- {
- newMsgType = ConvergedMessage::Mms;
- }
- return newMsgType;
-}
-
-//---------------------------------------------------------------
-// MsgMonitor::updateMsgInfo
-// @see header file
-//---------------------------------------------------------------
-void MsgMonitor::updateMsgInfo(HbWidget* senderWidget)
-{
- if(mMessageType == ConvergedMessage::Mms)
- {
- //Disable char counter & add subject
- view()->mBody->disableCharCounter();
- view()->addSubject();
- }
-
- // check if sent by body widget
- MsgUnifiedEditorBody* body = NULL;
- body = qobject_cast<MsgUnifiedEditorBody*>(senderWidget);
- if(body)
- {
- mBodySize = view()->mBody->bodySize();
- view()->setAttachOptionEnabled(
- MsgUnifiedEditorView::TBE_PHOTO, !view()->mBody->hasImage());
- view()->setAttachOptionEnabled(
- MsgUnifiedEditorView::TBE_SOUND, !view()->mBody->hasAudio());
- return;
- }
-
- // check if sent by subject widget
- MsgUnifiedEditorSubject* subject = NULL;
- subject = qobject_cast<MsgUnifiedEditorSubject*>(senderWidget);
- if(subject)
- {
- mSubjectSize = view()->mSubjectField->subjectSize();
- return;
- }
-
- // check if sent by attachment container widget
- MsgAttachmentContainer* container = NULL;
- container = qobject_cast<MsgAttachmentContainer*>(senderWidget);
- if(container)
- {
- mContainerSize = view()->mAttachmentContainer->containerSize();
- return;
- }
-
- // handle content change from other widgets e.g. To, Cc, Bcc address field
- int totalAddressCount = view()->mToField->addressCount();
- if(view()->mCcField && view()->mBccField)
- {
- totalAddressCount += view()->mCcField->addressCount() +
- view()->mBccField->addressCount();
- }
- mMsgCurrAddressCount = totalAddressCount;
- return;
-}
-
-//---------------------------------------------------------------
-// MsgMonitor::showPopup
-// @see header file
-//---------------------------------------------------------------
-void MsgMonitor::showPopup(const QString& text)
-{
- if(!mSkipNote)
- {
- HbNotificationDialog* dlg = new HbNotificationDialog();
- dlg->setFocusPolicy(Qt::NoFocus);
- dlg->setDismissPolicy(HbPopup::TapAnywhere);
- dlg->setAttribute(Qt::WA_DeleteOnClose, true);
- dlg->setText(text);
- dlg->show();
- }
- // reset skip note flag
- mSkipNote = false;
-}
-
-//---------------------------------------------------------------
-// MsgMonitor::view
-// @see header file
-//---------------------------------------------------------------
-MsgUnifiedEditorView* MsgMonitor::view()
-{
- return static_cast<MsgUnifiedEditorView*>(this->parent());
-}
-
-//---------------------------------------------------------------
-// MsgMonitor::bodyHasMMSContent
-// @see header file
-//---------------------------------------------------------------
-bool MsgMonitor::bodyHasMMSContent()
-{
- MsgUnifiedEditorBody* edBody = view()->mBody;
- // If any media-object is present inside body
- if(!edBody->mediaContent().isEmpty())
- {
- return true;
- }
-
- int bodyTextSize = mUniEditorGenUtils->UTF8Size(edBody->text());
- int maxSmsSize = 0;
- TRAP_IGNORE(maxSmsSize =
- mUniEditorGenUtils->MaxSmsMsgSizeL(edBody->isUnicode()));
- // If body text size exceeds sms text-size limit
- if(bodyTextSize > maxSmsSize)
- {
- return true;
- }
- return false;
-}
-
-//---------------------------------------------------------------
-// MsgMonitor::subjectHasMMSContent
-// @see header file
-//---------------------------------------------------------------
-bool MsgMonitor::subjectHasMMSContent()
-{
- MsgUnifiedEditorSubject* edSubject = view()->mSubjectField;
- ConvergedMessage::Priority priority = ConvergedMessage::Normal;
- QString subjectText;
- if(edSubject)
- {
- priority = edSubject->priority();
- subjectText = edSubject->text();
- }
- // If priority is set to other than Normal or
- // If subject has some content
- if( (priority != ConvergedMessage::Normal) ||
- !subjectText.isEmpty() )
- {
- return true;
- }
- return false;
-}
-
-//---------------------------------------------------------------
-// MsgMonitor::containerHasMMSContent
-// @see header file
-//---------------------------------------------------------------
-bool MsgMonitor::containerHasMMSContent()
-{
- QString bodyText = view()->mBody->text();
- MsgAttachmentContainer* edContainer = view()->mAttachmentContainer;
- bool hasMMAttachmentContent = false;
- int attachmentCount = 0;
- if(edContainer)
- {
- hasMMAttachmentContent = edContainer->hasMMContent();
- attachmentCount = edContainer->count();
- }
- // If MM attachments are present or
- // If only one non-MM attachment is present e.g. vcf along with body text
- if( hasMMAttachmentContent ||
- ((attachmentCount == 1) && !bodyText.isEmpty()) )
- {
- return true;
- }
- return false;
-}
-
-//---------------------------------------------------------------
-// MsgMonitor::otherMMSCriteriaMet
-// @see header file
-//---------------------------------------------------------------
-bool MsgMonitor::otherMMSCriteriaMet()
-{
- MsgUnifiedEditorAddress* edCc = view()->mCcField;
- MsgUnifiedEditorAddress* edBcc = view()->mBccField;
- int ccCount = 0;
- int bccCount = 0;
- if(edCc && edBcc)
- {
- ccCount = edCc->addressCount();
- bccCount = edBcc->addressCount();
- }
- // If CC/BCC has some content or
- // If to-recipients count exceeds max sms recipient count
- if( ccCount || bccCount ||
- (view()->mToField->addressCount() > mMaxSmsRecipients) )
- {
- return true;
- }
-
- // If to-field contains an email address
- bool isEmailPresent = false;
- ConvergedMessageAddressList addrList = view()->mToField->addresses();
- TRAP_IGNORE(isEmailPresent = mUniEditorGenUtils->VerifyEmailAddressesL(addrList));
- if(isEmailPresent)
- {
- return true;
- }
- return false;
-}
-
-//EOF
--- a/messagingapp/msgui/unifiededitor/src/msgunieditoraddress.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/unifiededitor/src/msgunieditoraddress.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -20,7 +20,6 @@
#include <HbTextItem>
#include <HbPushButton>
#include <HbAction>
-#include <hbinputeditorinterface.h>
#include <hbmessagebox.h>
#include <cntservicescontact.h>
#include <xqaiwrequest.h>
@@ -34,13 +33,13 @@
// USER INCLUDES
#include "debugtraces.h"
#include "msgunieditoraddress.h"
-#include "msgunifiededitorlineedit.h"
-#include "msgmonitor.h"
-#include "unieditorgenutils.h"
+#include "msgunieditorlineedit.h"
+#include "msgunieditormonitor.h"
+#include "UniEditorGenUtils.h"
const QString PBK_ICON("qtg_mono_contacts");
-const QString SEND_ICON("qtg_mono_send");
-const QString replacementStr("; ");
+const QString REPLACEMENT_STR("; ");
+const QString COMMA_SEPERATOR(",");
// Constants
const int KDefaultGsmNumberMatchLength = 7; //matching unique ph numbers
@@ -49,6 +48,12 @@
#define LOC_DIALOG_OK hbTrId("txt_common_button_ok")
#define LOC_BUTTON_CANCEL hbTrId("txt_common_button_cancel")
#define LOC_INVALID_RECIPIENT hbTrId("txt_messaging_dialog_invalid_recipient_found")
+#define LOC_INVALID_RECIPIENT_NOT_ADDED hbTrId("txt_messaging_dialog_invalid_recipient_not_added")
+#define LOC_INVALID_RECIPIENTS_NOT_ADDED hbTrId("txt_messaging_dialog_invalid_recipients_not_added")
+
+
+
+
MsgUnifiedEditorAddress::MsgUnifiedEditorAddress( const QString& label,
QGraphicsItem *parent ) :
@@ -73,13 +78,8 @@
connect(mAddressEdit, SIGNAL(contentsChanged(const QString&)),
this, SLOT(onContentsChanged(const QString&)));
- // add "Send" action in VKB
- HbEditorInterface editorInterface(mAddressEdit);
mAddressEdit->setInputMethodHints(Qt::ImhPreferNumbers);
- HbAction *sendAction = new HbAction(HbIcon(SEND_ICON), QString(),this);
- connect(sendAction, SIGNAL(triggered()),this, SIGNAL(sendMessage()));
- editorInterface.addAction(sendAction);
- }
+}
MsgUnifiedEditorAddress::~MsgUnifiedEditorAddress()
{
@@ -90,6 +90,8 @@
void MsgUnifiedEditorAddress::fetchContacts()
{
+ mLaunchBtn->blockSignals(true);
+
QList<QVariant> args;
QString serviceName("com.nokia.services.phonebookservices");
QString operation("fetch(QString,QString,QString)");
@@ -112,6 +114,9 @@
request->setArguments(args);
request->send();
delete request;
+
+ //unblock click signal after some delay.
+ QTimer::singleShot(250,this,SLOT(unblockSignals()));
}
void MsgUnifiedEditorAddress::handleOk(const QVariant& value)
@@ -125,7 +130,14 @@
{
ConvergedMessageAddress* address =
new ConvergedMessageAddress();
- address->setAddress(contactList[i].mPhoneNumber);
+ if(!contactList[i].mPhoneNumber.isEmpty())
+ {
+ address->setAddress(contactList[i].mPhoneNumber);
+ }
+ else
+ {
+ address->setAddress(contactList[i].mEmailAddress);
+ }
address->setAlias(contactList[i].mDisplayName);
addrlist << address;
}
@@ -190,6 +202,12 @@
void MsgUnifiedEditorAddress::setAddresses(ConvergedMessageAddressList addrlist)
{
+ // avoid processing if no info available
+ if(addrlist.count() == 0)
+ {
+ return;
+ }
+
// ensure flags are reset before starting the addr addition
mAboutToExceedMaxSmsRecipients = false;
mAboutToExceedMaxMmsRecipients = false;
@@ -197,37 +215,63 @@
// first, we check if MMS max-recipient count will exceed
int count = addrlist.count();
- int futureCount = count + MsgMonitor::msgAddressCount();
- if(futureCount > MsgMonitor::maxMmsRecipients())
+ int futureCount = count + MsgUnifiedEditorMonitor::msgAddressCount();
+ if(futureCount > MsgUnifiedEditorMonitor::maxMmsRecipients())
{
mAboutToExceedMaxMmsRecipients = true;
mExceedsMaxMmsRecipientsBy =
- futureCount - MsgMonitor::maxMmsRecipients();
+ futureCount - MsgUnifiedEditorMonitor::maxMmsRecipients();
}
// else, check if SMS max-recipient count will exceed
else if(!mSkipMaxRecipientQuery)
{
futureCount = count + addressCount();
- if( (addressCount() <= MsgMonitor::maxSmsRecipients()) &&
- (futureCount > MsgMonitor::maxSmsRecipients()) )
+ if( (addressCount() <= MsgUnifiedEditorMonitor::maxSmsRecipients()) &&
+ (futureCount > MsgUnifiedEditorMonitor::maxSmsRecipients()) )
{
mAboutToExceedMaxSmsRecipients = true;
}
}
-
+ int invalidCount= 0;
+ QString invalidContacts;
for(int i = 0; i < count; i++ )
- {
- mAddressMap.insertMulti(addrlist[i]->address(), addrlist[i]->alias());
- if(!addrlist[i]->alias().isEmpty())
{
- mAddressEdit->setText(addrlist[i]->alias());
- }
- else
+ bool isValid = false;
+ isValid = checkValidAddress(addrlist.at(i)->address());
+ if(!isValid)
+ {
+ invalidCount ++;
+ // append the comma till last but one contact.
+ // add the invalid ocntacts to the " , " seperated string.
+ if(invalidCount > 1)
+ {
+ invalidContacts.append(COMMA_SEPERATOR);
+ }
+ invalidContacts.append(addrlist.at(i)->alias());
+ }
+ else
+ {
+ mAddressMap.insertMulti(addrlist[i]->address(), addrlist[i]->alias());
+ if(!addrlist[i]->alias().isEmpty())
+ {
+ mAddressEdit->setText(addrlist[i]->alias());
+ }
+ else
+ {
+ mAddressEdit->setText(addrlist[i]->address(), false);
+ }
+ }
+ }
+ if(invalidCount)
{
- mAddressEdit->setText(addrlist[i]->address(), false);
+ QString invalidStr;
+ (invalidCount == 1)?(invalidStr = QString(LOC_INVALID_RECIPIENT_NOT_ADDED)) :(invalidStr = QString(LOC_INVALID_RECIPIENTS_NOT_ADDED));
+ // append line seperator
+ invalidStr.append("<br>");
+ invalidStr.append(invalidContacts);
+ HbMessageBox::information(invalidStr);
}
- }
// addition operation complete, reset flags
mAboutToExceedMaxSmsRecipients = false;
@@ -256,7 +300,7 @@
{
// Max MMS recipient count check
if( mAboutToExceedMaxMmsRecipients ||
- (MsgMonitor::msgAddressCount() >= MsgMonitor::maxMmsRecipients()) )
+ (MsgUnifiedEditorMonitor::msgAddressCount() >= MsgUnifiedEditorMonitor::maxMmsRecipients()) )
{
if(mAboutToExceedMaxMmsRecipients)
{// show discreet note only once
@@ -272,7 +316,7 @@
{
// update monitor data
emit contentChanged();
- if(MsgMonitor::msgAddressCount() > MsgMonitor::maxMmsRecipients())
+ if(MsgUnifiedEditorMonitor::msgAddressCount() > MsgUnifiedEditorMonitor::maxMmsRecipients())
{
HbNotificationDialog::launchDialog(
LOC_MMS_RECIPIENT_LIMIT_REACHED);
@@ -290,8 +334,8 @@
// Max SMS recipient count check
if( !mSkipMaxRecipientQuery &&
- (MsgMonitor::messageType() == ConvergedMessage::Sms) &&
- (mAddressEdit->addresses().count() > MsgMonitor::maxSmsRecipients()) )
+ (MsgUnifiedEditorMonitor::messageType() == ConvergedMessage::Sms) &&
+ (mAddressEdit->addresses().count() > MsgUnifiedEditorMonitor::maxSmsRecipients()) )
{
// when we show this dialog, we don't want the intermediate states
// to be signalled to us
@@ -317,7 +361,8 @@
dlg->setTimeout(HbPopup::NoTimeout);
dlg->setText(LOC_SMS_RECIPIENT_LIMIT_REACHED);
-
+
+ dlg->clearActions();
HbAction* okAction = new HbAction(LOC_DIALOG_OK,dlg);
dlg->addAction(okAction);
@@ -328,7 +373,6 @@
// reconnect to get back updates
connect(mAddressEdit, SIGNAL(contentsChanged(const QString&)),
this, SLOT(onContentsChanged(const QString&)));
- emit contentChanged();
}
void MsgUnifiedEditorAddress::syncDeletionsToMap()
@@ -347,6 +391,18 @@
}
else
{
+ // ensure that the matched contact is removed from the
+ // address's list
+ int matchedIndex = addrList.indexOf(i.value());
+ if(matchedIndex == -1)
+ {
+ matchedIndex = addrList.indexOf(i.key());
+ }
+ if(matchedIndex != -1)
+ {
+ addrList.removeAt(matchedIndex);
+ }
+ // now go to next index in map
++i;
}
}
@@ -414,7 +470,7 @@
this, SLOT(onContentsChanged(const QString&)));
mAddressEdit->clearContent();
- QStringList list = mPrevBuffer.split(replacementStr,
+ QStringList list = mPrevBuffer.split(REPLACEMENT_STR,
QString::SkipEmptyParts);
int count = list.count();
QStringList valList = mAddressMap.values();
@@ -444,6 +500,7 @@
HbMessageBox *dlg = qobject_cast<HbMessageBox*> (sender());
if (action == dlg->actions().at(0)) {
// accept new content, update prev-buffer
+ emit contentChanged();
mPrevBuffer = mAddressEdit->content();
}
else {
@@ -467,27 +524,15 @@
// get the list of contacts in address-field
QStringList fieldAddresses(mAddressEdit->addresses());
- bool allValid = true;
+ bool isValid = true;
foreach(QString addr, fieldAddresses)
{
// run address validation only if address is unmapped
// (i.e. user-inserted)
if(mAddressMap.contains(addr))
{
- // 1. perform number validation
- allValid = CommonPhoneParser::IsValidPhoneNumber(
- *XQConversions::qStringToS60Desc(addr),
- CommonPhoneParser::ESMSNumber );
-
- // 2. if number validity fails, then perform email addr validation
- if( !allValid &&
- (MsgMonitor::messageType() == ConvergedMessage::Mms) )
- { // additional check for MMS only
- allValid = genUtils->IsValidEmailAddress(
- *XQConversions::qStringToS60Desc(addr) );
- }
-
- if(!allValid)
+ isValid = checkValidAddress(addr);
+ if(!isValid)
{
mAddressEdit->highlightInvalidString(addr);
QString invalidAddrStr =
@@ -502,9 +547,35 @@
}
}
}
+
+ return isValid;
+}
+// ----------------------------------------------------------------------------
+// MsgUnifiedEditorAddress::checkValidAddress
+// @see header
+// ----------------------------------------------------------------------------
+bool MsgUnifiedEditorAddress::checkValidAddress(const QString& addr)
+ {
+ bool isValid = false;
+
+ HBufC *tempAddr = XQConversions::qStringToS60Desc(addr);
+
+ // 1. perform number validation
+ isValid = CommonPhoneParser::IsValidPhoneNumber(
+ *tempAddr,
+ CommonPhoneParser::ESMSNumber );
+
+ // 2. if number validity fails, then perform email addr validation
+ UniEditorGenUtils* genUtils = new UniEditorGenUtils;
+ if(!isValid)
+ { // additional check for MMS only
+ isValid = genUtils->IsValidEmailAddress(
+ *tempAddr );
+ }
delete genUtils;
- return allValid;
-}
+ delete tempAddr;
+ return isValid;
+ }
void MsgUnifiedEditorAddress::handleInvalidContactDialog(
HbAction* act)
@@ -513,6 +584,11 @@
QTimer::singleShot(250, this, SLOT(setFocus()));
}
+void MsgUnifiedEditorAddress::unblockSignals()
+{
+ mLaunchBtn->blockSignals(false);
+}
+
Q_IMPLEMENT_USER_METATYPE(CntServicesContact)
Q_IMPLEMENT_USER_METATYPE_NO_OPERATORS(CntServicesContactList)
--- a/messagingapp/msgui/unifiededitor/src/msgunieditorattachment.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/unifiededitor/src/msgunieditorattachment.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -25,15 +25,19 @@
#include <HbMenu>
#include <MsgMimeTypes.h>
#include <HbFrameItem>
-//#include <HbGestureSceneFilter>
-//#include <HbGesture>
+#include <HbInstantFeedback>
+#include <HbTapGesture>
#include <QGraphicsSceneMouseEvent>
#include <HbWidgetFeedback>
+#include <HbEffect>
+#include <QTimer>
// USER INCLUDES
+#include "msgcontactsutil.h"
#include "msgunieditorattachment.h"
-#include "unieditorgenutils.h"
-#include "s60qconversions.h"
+#include "UniEditorGenUtils.h"
+#include <xqconversions.h>
+#include "msgunieditorutils.h"
// Constants
#define BYTES_TO_KBYTES_FACTOR 1024
@@ -57,63 +61,63 @@
mSize(filesize),
mAttachmentIcon(0),
mAttachmentName(0),
-//mGestureFilter(0),
-mMaxSmsSize(KFirstNormalSmsLength)
+mMaxSmsSize(KFirstNormalSmsLength),
+mEditorUtils(0)
{
- //back ground
- HbFrameItem* backGround = new HbFrameItem(this);
- backGround->frameDrawer().setFrameGraphicsName(LIST_ITEM_BG_FRAME_NORMAL);
- backGround->frameDrawer().setFrameType(HbFrameDrawer::NinePieces);
- this->setBackgroundItem(backGround);
+ this->grabGesture(Qt::TapGesture);
+ setProperty("state", "normal");
+
+ //back ground
+ mBackGround = new HbFrameItem(this);
+ mBackGround->frameDrawer().setFrameGraphicsName(LIST_ITEM_BG_FRAME_NORMAL);
+ mBackGround->frameDrawer().setFrameType(HbFrameDrawer::NinePieces);
+ this->setBackgroundItem(mBackGround);
- mAttachmentIcon = new HbIconItem(ATTACHMENT_ICON, this);
- HbStyle::setItemName(mAttachmentIcon,"attachmentIcon");
+ mAttachmentIcon = new HbIconItem(ATTACHMENT_ICON, this);
+ HbStyle::setItemName(mAttachmentIcon,"attachmentIcon");
- int at_size = 0;
- TMsgMediaType mediaType = EMsgMediaUnknown;
- UniEditorGenUtils* genUtils = new UniEditorGenUtils;
- TRAP_IGNORE(genUtils->getFileInfoL(mPath,at_size,
- mMimeType,mediaType));
- TRAP_IGNORE(mMaxSmsSize = genUtils->MaxSmsMsgSizeL());
- delete genUtils;
- QFileInfo fileinfo(attachmentpath);
- QString filename = fileinfo.fileName();
- mAttachmentName = new HbTextItem(filename,this);
- HbStyle::setItemName(mAttachmentName,"attachmentName");
- mAttachmentName->setElideMode(Qt::ElideRight);
-
- // for sms, pure size should be shown
- // for mms, additional mimeheader size must be included
- qreal displaySize = mSize;
- if(!isMultimediaContent())
- {
- displaySize = fileinfo.size();
- }
- int sizeInKb = displaySize/BYTES_TO_KBYTES_FACTOR;
- QString fileDetails;
- // if size exceeds 1kb, then show kb or else only bytes
- if(sizeInKb >= 1)
- {
- fileDetails = QString().append(QString("(%1 Kb)").arg(sizeInKb));
- }
- else
- {
- fileDetails = QString().append(QString("(%1 B)").arg(displaySize));
- }
+ int at_size = 0;
+ TMsgMediaType mediaType = EMsgMediaUnknown;
+ UniEditorGenUtils* genUtils = new UniEditorGenUtils;
+ TRAP_IGNORE(genUtils->getFileInfoL(mPath,at_size,
+ mMimeType,mediaType));
+ TRAP_IGNORE(mMaxSmsSize = genUtils->MaxSmsMsgSizeL());
+ delete genUtils;
+ QFileInfo fileinfo(attachmentpath);
+ QString filename = fileinfo.fileName();
+ mAttachmentName = new HbTextItem(filename,this);
+ HbStyle::setItemName(mAttachmentName,"attachmentName");
+ mAttachmentName->setElideMode(Qt::ElideRight);
- mAttachmentDetails = new HbTextItem(fileDetails, this);
- HbStyle::setItemName(mAttachmentDetails,"attachmentDetails");
- mAttachmentDetails->setElideMode(Qt::ElideNone);
-
- initGesture();
+ // for sms, pure size should be shown
+ // for mms, additional mimeheader size must be included
+ qreal displaySize = mSize;
+ if(!isMultimediaContent())
+ {
+ displaySize = fileinfo.size();
+ }
+ int sizeInKb = displaySize/BYTES_TO_KBYTES_FACTOR;
+ QString fileDetails;
+ // if size exceeds 1kb, then show kb or else only bytes
+ if(sizeInKb >= 1)
+ {
+ fileDetails = QString().append(QString("(%1 Kb)").arg(sizeInKb));
+ }
+ else
+ {
+ fileDetails = QString().append(QString("(%1 B)").arg(displaySize));
+ }
+
+ mAttachmentDetails = new HbTextItem(fileDetails, this);
+ HbStyle::setItemName(mAttachmentDetails,"attachmentDetails");
+ mAttachmentDetails->setElideMode(Qt::ElideNone);
+
+ HbEffect::add("attachmentWidget", "listviewitem_press", "pressed");
+ HbEffect::add("attachmentWidget", "listviewitem_release", "released");
}
MsgUnifiedEditorAttachment::~MsgUnifiedEditorAttachment()
{
- /* if(mGestureFilter)
- {
- removeSceneEventFilter(mGestureFilter);
- }*/
}
const QString& MsgUnifiedEditorAttachment::path()
@@ -131,11 +135,11 @@
return mMimeType;
}
-void MsgUnifiedEditorAttachment::longPressed(QPointF position)
+void MsgUnifiedEditorAttachment::handleLongTap(QPointF position)
{
HbMenu* menu = new HbMenu;
- menu->addAction(LOC_OPEN, this, SLOT(openAttachment()));
- menu->addAction(LOC_REMOVE, this, SLOT(removeAttachment()));
+ menu->addAction(LOC_OPEN, this, SLOT(handleOpen()));
+ menu->addAction(LOC_REMOVE, this, SLOT(handleRemove()));
menu->addAction(LOC_DETAILS, this, SLOT(viewDetails()));
menu->setDismissPolicy(HbPopup::TapAnywhere);
menu->setAttribute(Qt::WA_DeleteOnClose, true);
@@ -143,14 +147,25 @@
menu->show();
}
-void MsgUnifiedEditorAttachment::removeAttachment()
+void MsgUnifiedEditorAttachment::handleRemove()
{
emit deleteMe(this);
}
-void MsgUnifiedEditorAttachment::openAttachment()
+void MsgUnifiedEditorAttachment::handleOpen()
{
- //open corresponding viewer app.
+ this->ungrabGesture(Qt::TapGesture);
+
+ //open corresponding viewer app
+
+ if (!mEditorUtils)
+ {
+ mEditorUtils = new MsgUnifiedEditorUtils(this);
+ }
+ mEditorUtils->launchContentViewer(mMimeType, mPath);
+
+ //fire timer to regrab gesture after some delay.
+ QTimer::singleShot(300,this,SLOT(regrabGesture()));
}
void MsgUnifiedEditorAttachment::viewDetails()
@@ -161,9 +176,9 @@
bool MsgUnifiedEditorAttachment::isMultimediaContent()
{
bool ret = true;
- QString vcard = S60QConversions::s60Desc8ToQString(KMsgMimeVCard());
- QString vcal = S60QConversions::s60Desc8ToQString(KMsgMimeVCal());
- QString ical = S60QConversions::s60Desc8ToQString(KMsgMimeICal());
+ QString vcard = XQConversions::s60Desc8ToQString(KMsgMimeVCard());
+ QString vcal = XQConversions::s60Desc8ToQString(KMsgMimeVCal());
+ QString ical = XQConversions::s60Desc8ToQString(KMsgMimeICal());
if( !QString::compare(mMimeType, vcard, Qt::CaseInsensitive) ||
!QString::compare(mMimeType, vcal, Qt::CaseInsensitive) ||
!QString::compare(mMimeType, ical, Qt::CaseInsensitive) )
@@ -181,61 +196,76 @@
return ret;
}
-void MsgUnifiedEditorAttachment::mousePressEvent(QGraphicsSceneMouseEvent *event)
-{
- HbWidgetFeedback::triggered(this, Hb::InstantPressed);
-
- HbFrameItem* backGround = new HbFrameItem(this);
- backGround->frameDrawer().setFrameGraphicsName(LIST_ITEM_BG_FRAME_PRESSED);
- backGround->frameDrawer().setFrameType(HbFrameDrawer::NinePieces);
- this->setBackgroundItem(backGround);
-
- event->accept();
-}
-
-void MsgUnifiedEditorAttachment::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
+void MsgUnifiedEditorAttachment::gestureEvent(QGestureEvent *event)
{
- HbFrameItem* backGround = new HbFrameItem(this);
- backGround->frameDrawer().setFrameGraphicsName(LIST_ITEM_BG_FRAME_NORMAL);
- backGround->frameDrawer().setFrameType(HbFrameDrawer::NinePieces);
- this->setBackgroundItem(backGround);
-
- if(this->rect().contains(event->pos()))
+ HbTapGesture *tapGesture = qobject_cast<HbTapGesture*> (event->gesture(Qt::TapGesture));
+ if (tapGesture) {
+ switch (tapGesture->state()) {
+ case Qt::GestureStarted:
+ {
+ // Trigger haptic feedback.
+ HbInstantFeedback::play(HbFeedback::Basic);
+ setPressed(true);
+ break;
+ }
+ case Qt::GestureUpdated:
{
- HbWidgetFeedback::triggered(this, Hb::InstantClicked);
- emit clicked();
+ if (HbTapGesture::TapAndHold == tapGesture->tapStyleHint()) {
+ // Handle longtap.
+ setPressed(false);
+ handleLongTap(tapGesture->scenePosition());
+ }
+ break;
}
-
- event->accept();
+ case Qt::GestureFinished:
+ {
+ HbInstantFeedback::play(HbFeedback::Basic);
+ if (HbTapGesture::Tap == tapGesture->tapStyleHint()) {
+ // Handle short tap.
+ setPressed(false);
+ handleShortTap();
+ }
+ break;
+ }
+ case Qt::GestureCanceled:
+ {
+ HbInstantFeedback::play(HbFeedback::Basic);
+ setPressed(false);
+ break;
+ }
+ }
+ }
+ else {
+ HbWidget::gestureEvent(event);
+ }
}
-void MsgUnifiedEditorAttachment::initGesture()
+void MsgUnifiedEditorAttachment::handleShortTap()
{
- // Create gesture filter
- /* mGestureFilter = new HbGestureSceneFilter( Qt::LeftButton, this );
-
- // Add gestures for longpress
- HbGesture* gestureLongpressed = new HbGesture( HbGesture::longpress,5 );
-
- mGestureFilter->addGesture( gestureLongpressed );
-
- connect( gestureLongpressed, SIGNAL(longPress(QPointF)),
- this, SLOT(longPressed(QPointF)) );
-
- //install gesture filter.
- this->installSceneEventFilter(mGestureFilter);*/
+ handleOpen();
}
-/*HbFeedback::InstantEffect MsgUnifiedEditorAttachment::overrideFeedback(Hb::InstantInteraction interaction) const
- {
- switch(interaction)
- {
- case Hb::InstantPressed:
- case Hb::InstantClicked:
- return HbFeedback::Basic;
- default:
- return HbFeedback::None;
- }
- }*/
+void MsgUnifiedEditorAttachment::setPressed(bool pressed)
+{
+ if (pressed)
+ {
+ setProperty("state", "pressed");
+ mBackGround->frameDrawer().setFrameGraphicsName(LIST_ITEM_BG_FRAME_PRESSED);
+ HbEffect::cancel(mBackGround, "released");
+ HbEffect::start(mBackGround, "attachmentWidget", "pressed");
+ }
+ else
+ {
+ setProperty("state", "normal");
+ mBackGround->frameDrawer().setFrameGraphicsName(LIST_ITEM_BG_FRAME_NORMAL);
+ HbEffect::cancel(mBackGround, "pressed");
+ HbEffect::start(mBackGround, "attachmentWidget", "released");
+ }
+}
+
+void MsgUnifiedEditorAttachment::regrabGesture()
+{
+ this->grabGesture(Qt::TapGesture);
+}
// EOF
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/unifiededitor/src/msgunieditorattachmentcontainer.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,174 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: attachment container class
+ *
+ */
+
+
+// INCLUDES
+#include <QGraphicsLinearLayout>
+#include <QFileInfo>
+#include <HbFrameItem>
+#include <HbFrameDrawer>
+
+// USER INCLUDES
+#include "msgunieditorattachmentcontainer.h"
+#include "UniEditorGenUtils.h"
+#include "msgunieditormonitor.h"
+#include "mmsconformancecheck.h"
+
+// Constants
+
+//---------------------------------------------------------------
+// MsgAttachmentContainer::MsgAttachmentContainer
+// @see header file
+//---------------------------------------------------------------
+MsgAttachmentContainer::MsgAttachmentContainer( QGraphicsItem *parent ) :
+HbWidget(parent),
+mIsMMContent(false)
+{
+ mLayout = new QGraphicsLinearLayout(Qt::Vertical, this);
+ mLayout->setContentsMargins(0,0,0,0);
+ mLayout->setSpacing(0);
+ mMmsConformanceCheck = new MmsConformanceCheck;
+}
+
+//---------------------------------------------------------------
+// MsgAttachmentContainer::~MsgAttachmentContainer
+// @see header file
+//---------------------------------------------------------------
+MsgAttachmentContainer::~MsgAttachmentContainer()
+{
+ delete mMmsConformanceCheck;
+}
+
+//---------------------------------------------------------------
+// MsgAttachmentContainer::addAttachment
+// @see header file
+//---------------------------------------------------------------
+MsgAttachmentContainer::AddAttachmentStatus
+ MsgAttachmentContainer::addAttachment(const QString& filepath)
+{
+ //check for insert conformance
+ if(EInsertSuccess != mMmsConformanceCheck->checkModeForInsert(filepath))
+ return EAddNotSupported;
+
+ int msgSize = messageSize();
+ QFileInfo fileinfo(filepath);
+ int fileSize = fileinfo.size() + KEstimatedMimeHeaderSize;
+
+ if( (fileSize + msgSize) <= MsgUnifiedEditorMonitor::maxMmsSize())
+ {
+ MsgUnifiedEditorAttachment* att = new MsgUnifiedEditorAttachment(
+ filepath, fileSize, this);
+ if( ((mAttachmentList.count() == 0) && att->isMultimediaContent()) ||
+ ((mAttachmentList.count() == 1) && !mIsMMContent) )
+ {
+ mIsMMContent = true;
+ }
+ mAttachmentList << att;
+ int index = mLayout->count();
+ mLayout->insertItem(index,att);
+ connect(att, SIGNAL(deleteMe(MsgUnifiedEditorAttachment*)),
+ this, SLOT(deleteAttachment(MsgUnifiedEditorAttachment*)));
+
+ // emit to signal that container content & size changed
+ emit contentChanged();
+ }
+ else
+ {
+ return EAddSizeExceed;
+ }
+ return EAddSuccess;
+}
+
+//---------------------------------------------------------------
+// MsgAttachmentContainer::deleteAttachment
+// @see header file
+//---------------------------------------------------------------
+void MsgAttachmentContainer::deleteAttachment(MsgUnifiedEditorAttachment* attachment)
+{
+ mAttachmentList.removeOne(attachment);
+ mLayout->removeItem(attachment);
+ attachment->setParent(NULL);
+ delete attachment;
+
+ if( ((mAttachmentList.count() == 1) && !mAttachmentList.first()->isMultimediaContent()) ||
+ ((mAttachmentList.count() == 0) && mIsMMContent) )
+ {
+ mIsMMContent = false;
+ }
+
+ // emit to indicate change in container content & size
+ emit contentChanged();
+ if(mAttachmentList.count() == 0)
+ {
+ emit emptyAttachmentContainer();
+ }
+}
+
+//---------------------------------------------------------------
+// MsgAttachmentContainer::count
+// @see header file
+//---------------------------------------------------------------
+int MsgAttachmentContainer::count()
+{
+ return mAttachmentList.count();
+}
+
+//---------------------------------------------------------------
+// MsgAttachmentContainer::attachmentList
+// @see header file
+//---------------------------------------------------------------
+MsgUnifiedEditorAttachmentList MsgAttachmentContainer::attachmentList()
+{
+ return mAttachmentList;
+}
+
+//---------------------------------------------------------------
+// MsgAttachmentContainer::containerSize
+// @see header file
+//---------------------------------------------------------------
+int MsgAttachmentContainer::containerSize()
+{
+ int attCount = count();
+ int containerSize = 0;
+
+ for(int i=0; i<attCount; i++)
+ {
+ containerSize += mAttachmentList.at(i)->size();
+ }
+ return containerSize;
+}
+
+//---------------------------------------------------------------
+// MsgAttachmentContainer::messageSize
+// @see header file
+//---------------------------------------------------------------
+int MsgAttachmentContainer::messageSize()
+{
+ return containerSize() + MsgUnifiedEditorMonitor::bodySize() + MsgUnifiedEditorMonitor::subjectSize();
+}
+
+//---------------------------------------------------------------
+// MsgAttachmentContainer::hasMMContent
+// @see header file
+//---------------------------------------------------------------
+bool MsgAttachmentContainer::hasMMContent()
+{
+ return mIsMMContent;
+}
+
+//EOF
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/unifiededitor/src/msgunieditoraudiowidget.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,137 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: This widget is used to display audio content in univiewer.
+ *
+ */
+#include "msgunieditoraudiowidget.h"
+
+// SYSTEM INCLUDES
+#include <QFileInfo>
+#include <QTimer>
+#include <HbMenu>
+
+// USER INCLUDES
+#include "msgmediautil.h"
+#include "msgunieditorutils.h"
+
+// LOCAL CONSTANTS
+#define LOC_OPEN hbTrId("txt_common_menu_open")
+#define LOC_REMOVE hbTrId("txt_common_menu_remove")
+
+const QString AUDIO_ICON("qtg_mono_audio");
+const QString AUDIO_MIMETYPE("audio");
+
+//----------------------------------------------------------------------------
+// MsgUniFiedEditorAudioWidget::MsgUniFiedEditorAudioWidget
+// @see header file
+//----------------------------------------------------------------------------
+MsgUniFiedEditorAudioWidget::MsgUniFiedEditorAudioWidget(QGraphicsItem *parent) :
+HbPushButton(parent),
+mEditorUtils(0)
+{
+ connect(this, SIGNAL(clicked()), this, SLOT(handleShortTap()));
+ connect(this, SIGNAL(longPress(QPointF)), this, SLOT(handleLongTap(QPointF)));
+}
+
+//----------------------------------------------------------------------------
+// MsgUniFiedEditorAudioWidget::~MsgUniFiedEditorAudioWidget
+// @see header file
+//----------------------------------------------------------------------------
+MsgUniFiedEditorAudioWidget::~MsgUniFiedEditorAudioWidget()
+{
+}
+
+//----------------------------------------------------------------------------
+// MsgUniFiedEditorAudioWidget::~MsgUniFiedEditorAudioWidget
+// @see header file
+//----------------------------------------------------------------------------
+void MsgUniFiedEditorAudioWidget::populate(const QString &filePath)
+{
+ mMediaPath = filePath;
+
+ this->setIcon(HbIcon(AUDIO_ICON));
+ QFileInfo fileInfo(mMediaPath);
+ this->setText(fileInfo.baseName());
+ MsgMediaUtil mediaUtil;
+ this->setAdditionalText(mediaUtil.mediaDuration(mMediaPath));
+ this->setTextAlignment(Qt::AlignVCenter | Qt::AlignLeft);
+}
+
+//----------------------------------------------------------------------------
+// MsgUniFiedEditorAudioWidget::handleShortTap
+// @see header file
+//----------------------------------------------------------------------------
+void MsgUniFiedEditorAudioWidget::handleShortTap()
+{
+ emit shortTap(mMediaPath);
+
+ // Open the media.
+ handleOpen();
+}
+
+//----------------------------------------------------------------------------
+// MsgUniFiedEditorAudioWidget::handleLongTap
+// @see header file
+//----------------------------------------------------------------------------
+void MsgUniFiedEditorAudioWidget::handleLongTap(const QPointF &position)
+{
+ emit longTap(position);
+
+ // Display context sensitive menu.
+ HbMenu* menu = new HbMenu;
+ menu->setAttribute(Qt::WA_DeleteOnClose);
+ menu->setDismissPolicy(HbPopup::TapAnywhere);
+
+ menu->addAction(LOC_OPEN, this, SLOT(handleOpen()));
+ menu->addAction(LOC_REMOVE, this, SLOT(handleRemove()));
+ menu->setPreferredPos(position);
+ menu->show();
+}
+
+//----------------------------------------------------------------------------
+// MsgUniFiedEditorAudioWidget::handleOpen
+// @see header file
+//----------------------------------------------------------------------------
+void MsgUniFiedEditorAudioWidget::handleOpen()
+{
+ this->ungrabGesture(Qt::TapGesture);
+
+ if (!mEditorUtils)
+ {
+ mEditorUtils = new MsgUnifiedEditorUtils(this);
+ }
+ mEditorUtils->launchContentViewer(AUDIO_MIMETYPE, mMediaPath);
+
+ //fire timer to regrab gesture after some delay.
+ QTimer::singleShot(300,this,SLOT(regrabGesture()));
+}
+
+//----------------------------------------------------------------------------
+// MsgUniFiedEditorAudioWidget::handleRemove
+// @see header file
+//----------------------------------------------------------------------------
+void MsgUniFiedEditorAudioWidget::handleRemove()
+{
+ emit remove();
+}
+
+//---------------------------------------------------------------
+// MsgUniFiedEditorAudioWidget::regrabGesture
+// @see header file
+//---------------------------------------------------------------
+void MsgUniFiedEditorAudioWidget::regrabGesture()
+{
+ this->grabGesture(Qt::TapGesture);
+}
+// EOF
--- a/messagingapp/msgui/unifiededitor/src/msgunieditorbody.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/unifiededitor/src/msgunieditorbody.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -21,12 +21,7 @@
#include <HbFrameItem>
#include <HbFrameDrawer>
#include <HbIconItem>
-#include <HbPushButton>
#include <HbAction>
-#include <hbinputeditorinterface.h>
-//#include <HbGestureSceneFilter>
-//#include <HbGesture>
-#include <HbMenu>
#include <HbMainWindow>
#include <HbDeviceProfile>
#include <QImageReader>
@@ -45,40 +40,34 @@
#include <xqrequestinfo.h>
#include <xqsharablefile.h>
#include <xqappmgr.h>
-
+#include <xqconversions.h>
// USER INCLUDES
#include "msgunieditorbody.h"
#include "UniEditorGenUtils.h"
-#include "unisendingsettings.h"
-#include "msgmonitor.h"
-#include "s60qconversions.h"
+#include "UniSendingSettings.h"
+#include "msgunieditormonitor.h"
+
#include "mmsconformancecheck.h"
#include "unieditorpluginloader.h"
#include "unieditorplugininterface.h"
#include "convergedmessage.h"
#include "msgmediautil.h"
+#include "msgunieditorpixmapwidget.h"
+#include "msgunieditoraudiowidget.h"
// Constants
-const QString EDITOR_FRAME("qtg_fr_lineedit_normal");
const QString BACKGROUND_FRAME("qtg_fr_btn_normal");
-const QString AUDIO_REGION("AudioRegion");
-const QString VIDEO_REGION("VideoRegion");
-const QString IMAGE_REGION("ImageRegion");
-const QString INVALID_REGION("InvalidRegion");
-const QString SEND_ICON("qtg_mono_send");
+
const int KShowCounterLimit = 10;
const int BYTES_TO_KBYTES_FACTOR = 1024;
//Localized Constants for item specific menu
-#define LOC_OPEN hbTrId("txt_common_menu_open")
-#define LOC_REMOVE hbTrId("txt_common_menu_remove")
-#define LOC_DETAILS hbTrId("txt_common_menu_details")
#define LOC_TITLE hbTrId("txt_messaging_title_messaging")
#define LOC_UNABLE_TO_ADD_CONTENT hbTrId("txt_messaging_dpopinfo_unable_to_add_more_content")
#define LOC_UNABLE_TO_ATTACH_ITEM hbTrId("txt_messaging_dpopinfo_unable_to_attach_item_avai")
#define LOC_PROCESSING hbTrId("txt_messaging_formlabel_loading")
+#define LOC_HINT_TEXT hbTrId("txt_messaging_formlabel_enter_message_here")
-const QString AUDIO_ICON("qtg_mono_audio");
const QString ANIMATION_ICON("qtg_anim_loading");
const QString ANIMATION_FILE(":/qtg_anim_loading.axml");
// LOCAL FUNCTIONS
@@ -90,7 +79,7 @@
void showInsertFailureNote()
{
int availableSize =
- (MsgMonitor::maxMmsSize() - MsgMonitor::messageSize())
+ (MsgUnifiedEditorMonitor::maxMmsSize() - MsgUnifiedEditorMonitor::messageSize())
/BYTES_TO_KBYTES_FACTOR;
QString displayStr = QString(LOC_UNABLE_TO_ATTACH_ITEM)
.arg(availableSize);
@@ -108,8 +97,7 @@
mHasImage(false),
mHasAudio(false),
mTextEdit(0),
-mEditorFrame(0),
-mIconItem(0),
+mPixmapItem(0),
mAudioItem(0),
mImageSize(0),
mAudioSize(0),
@@ -117,29 +105,13 @@
mProcessImageOperation(0),
mMediaResolver(0),
mImageInfo(0),
-mProcessingWidget(0)
+mProcessingWidget(0),
+mDraftMessage(false),
+mIsImageResizing(false)
{
mTextEdit = new HbTextEdit(this);
+ mTextEdit->setPlaceholderText(LOC_HINT_TEXT);
HbStyle::setItemName(mTextEdit,"textEdit");
-
- HbFrameDrawer* frameDrawer = new HbFrameDrawer(EDITOR_FRAME,
- HbFrameDrawer::NinePieces);
-
- mEditorFrame = new HbFrameItem(frameDrawer,this);
- HbStyle::setItemName(mEditorFrame,"textEditFrame");
- mEditorFrame->setZValue(-1);
-
- // add "Send" action in VKB
- HbEditorInterface editorInterface(mTextEdit);
- HbAction *sendAction = new HbAction(HbIcon(SEND_ICON), QString(),this);
- connect(sendAction, SIGNAL(triggered()),this, SIGNAL(sendMessage()));
- editorInterface.addAction(sendAction);
-
- /* mGestureFilter = new HbGestureSceneFilter(Qt::LeftButton, this);
- mGestureFilter->setLongpressAnimation(true);
- HbGesture *gesture = new HbGesture(HbGesture::longpress, 5);
- mGestureFilter->addGesture(gesture);
- connect(gesture, SIGNAL(longPress(QPointF)), this, SLOT(longPressed(QPointF)));*/
connect(mTextEdit, SIGNAL(contentsChanged()), this, SLOT(onTextChanged()));
mMmsConformanceCheck = new MmsConformanceCheck;
@@ -198,67 +170,82 @@
return mTextEdit->toPlainText();
}
-void MsgUnifiedEditorBody::setImage(QString& imagefile)
-{
- if (!mImageInfo)
- {
- setImage(true);
-
- mImageFile = imagefile;
- if (mIconItem)
+void MsgUnifiedEditorBody::setImage(QString& imagefile, bool draftMessage)
+ {
+ // do nothing if filepath is empty
+ if (imagefile.isEmpty())
{
- delete mIconItem;
- mIconItem = NULL;
- mImageSize = 0;
- }
-
- int error = KErrNone;
-
- if( !mProcessImageOperation )
- {
- TRAP(error,mProcessImageOperation =
- CUniEditorProcessImageOperation::NewL(*this));
- }
- if( !mMediaResolver && error == KErrNone )
- {
- TRAP(error,mMediaResolver = CMsgMediaResolver::NewL());
+ return;
}
- if( error == KErrNone)
+ mDraftMessage = draftMessage;
+ if (!mImageInfo)
{
- mMediaResolver->SetCharacterSetRecognition(EFalse);
- HBufC *name = S60QConversions::qStringToS60Desc(imagefile);
- RFile file;
- TRAP(error, file = mMediaResolver->FileHandleL(*name));
- if(error == KErrNone)
+ setImage(true);
+
+ mImageFile = imagefile;
+ if (mPixmapItem)
+ {
+ mPixmapItem->setParent(NULL);
+ delete mPixmapItem;
+ mPixmapItem = NULL;
+ mImageSize = 0;
+ }
+
+ int error = KErrNone;
+ if (!mDraftMessage)
{
- TRAP(error,mImageInfo = static_cast<CMsgImageInfo*>
- (mMediaResolver->CreateMediaInfoL(file)));
+ // if image is in draft, no need to resize it because it is resized already
+ if (!mProcessImageOperation)
+ {
+ TRAP(error,mProcessImageOperation =
+ CUniEditorProcessImageOperation::NewL(*this));
+ }
+ if (!mMediaResolver && error == KErrNone)
+ {
+ TRAP(error,mMediaResolver = CMsgMediaResolver::NewL());
+ }
+
+ if (error == KErrNone)
+ {
+ mMediaResolver->SetCharacterSetRecognition(EFalse);
+ HBufC *name = XQConversions::qStringToS60Desc(imagefile);
+ RFile file;
+ TRAP(error, file = mMediaResolver->FileHandleL(*name));
if (error == KErrNone)
- {
- TRAP(error, mMediaResolver->ParseInfoDetailsL(
- mImageInfo, file));
+ {
+ TRAP(error,mImageInfo = static_cast<CMsgImageInfo*>
+ (mMediaResolver->CreateMediaInfoL(file)));
+ if (error == KErrNone)
+ {
+ TRAP(error, mMediaResolver->ParseInfoDetailsL(
+ mImageInfo, file));
+ }
+ file.Close();
+ }
+ delete name;
}
- file.Close();
}
- delete name;
- }
-
- if (error == KErrNone)
- {
+ if (error == KErrNone && !mDraftMessage)
+ {
mSavedImageFile = imagefile;
startResizeAnimation();
+ mIsImageResizing = true;
mProcessImageOperation->Process(mImageInfo);
- }
+ }
else
- {
- delete mImageInfo;
- mImageInfo = NULL;
+ {
+ if (mImageInfo)
+ {
+ delete mImageInfo;
+ mImageInfo = NULL;
+ }
mSavedImageFile.clear();
handleSetImage();
+ }
+
}
}
-}
void MsgUnifiedEditorBody::handleSetImage()
{
@@ -269,7 +256,7 @@
int msgSize = messageSize();
QFileInfo fileinfo(mImageFile);
int imageSize = fileinfo.size() + KEstimatedMimeHeaderSize;
- if ( (imageSize + msgSize) <= MsgMonitor::maxMmsSize())
+ if ( (imageSize + msgSize) <= MsgUnifiedEditorMonitor::maxMmsSize())
{
mImageSize = imageSize;
}
@@ -282,16 +269,13 @@
return;
}
- mIconItem = new HbIconItem(this);
- mIconItem->hide();
- //mIconItem->setIconName(mImageFile);
- QPixmap pixmap(mImageFile);
- mIconItem->setIcon(HbIcon(pixmap));
-
- HbStyle::setItemName(mIconItem, "pixmap");
- mIconItem->setAlignment(Qt::AlignHCenter | Qt::AlignTop);
- // mIconItem->installSceneEventFilter(mGestureFilter);
-
+ mPixmapItem = new MsgUnifiedEditorPixmapWidget(this);
+ mPixmapItem->hide();
+ HbStyle::setItemName(mPixmapItem, "pixmap");
+ mPixmapItem->setAlignment(Qt::AlignHCenter | Qt::AlignTop);
+ mPixmapItem->populate(mImageFile);
+ connect(mPixmapItem,SIGNAL(remove()),this,SLOT(removeMedia()));
+
// repolish the body widget
this->repolish();
@@ -301,6 +285,12 @@
void MsgUnifiedEditorBody::setAudio(QString& audiofile)
{
+ // do nothing if filepath is empty
+ if(audiofile.isEmpty())
+ {
+ return;
+ }
+
//check for insert conformance
if(EInsertSuccess != mMmsConformanceCheck->checkModeForInsert(audiofile))
return;
@@ -309,6 +299,7 @@
mAudioFile = audiofile;
if(mAudioItem)
{
+ mAudioItem->setParent(NULL);
delete mAudioItem;
mAudioItem = NULL;
mAudioSize = 0;
@@ -317,7 +308,7 @@
int msgSize = messageSize();
QFileInfo fileinfo(mAudioFile);
int audioSize = fileinfo.size() + KEstimatedMimeHeaderSize;
- if((audioSize + msgSize) <= MsgMonitor::maxMmsSize() )
+ if((audioSize + msgSize) <= MsgUnifiedEditorMonitor::maxMmsSize() )
{
mAudioSize = audioSize;
}
@@ -330,16 +321,11 @@
return;
}
- HbIconItem* audioIcon = new HbIconItem(AUDIO_ICON);
- mAudioItem = new HbPushButton(this);
+ mAudioItem = new MsgUniFiedEditorAudioWidget(this);
mAudioItem->hide();
HbStyle::setItemName(mAudioItem,"audioItem");
- mAudioItem->setIcon(audioIcon->icon());
- mAudioItem->setText(fileinfo.baseName());
- MsgMediaUtil mediaUtil;
- mAudioItem->setAdditionalText(mediaUtil.mediaDuration(mAudioFile));
- mAudioItem->setTextAlignment(Qt::AlignVCenter | Qt::AlignLeft);
- connect(mAudioItem, SIGNAL(longPress(QPointF)), this, SLOT(longPressed(QPointF)));
+ mAudioItem->populate(mAudioFile);
+ connect(mAudioItem,SIGNAL(remove()),this,SLOT(removeMedia()));
// repolish the body widget
this->repolish();
@@ -350,7 +336,10 @@
void MsgUnifiedEditorBody::setText(QString& text)
{
- mTextEdit->setPlainText(text);
+ if(!text.isEmpty())
+ {
+ mTextEdit->setPlainText(text);
+ }
}
const QStringList MsgUnifiedEditorBody::mediaContent()
@@ -363,8 +352,6 @@
if(mHasAudio)
mediaFiles << mAudioFile;
- //TODO: append video content
-
return mediaFiles;
}
@@ -427,7 +414,7 @@
mAudioItem->show();
}
- if(mIconItem || mProcessingWidget)
+ if(mPixmapItem || mProcessingWidget)
{
QSizeF imageSize(0.0,0.0);
QSizeF defaultImageSize(QImageReader(mImageFile).size());
@@ -461,17 +448,17 @@
imageSize.setWidth(newWidth);
}
- if(mIconItem)
+ if(mPixmapItem)
{
- mIconItem->setPreferredSize(imageSize);
- mIconItem->setSize(imageSize);
+ mPixmapItem->setPreferredSize(imageSize);
+ mPixmapItem->setSize(imageSize);
if(mMainWindow->orientation() == Qt::Horizontal)
{
- QPointF currPos = mIconItem->pos();
+ QPointF currPos = mPixmapItem->pos();
currPos.setX(leftMargin+((maxWidth-imageSize.width())/2));
- mIconItem->setPos(currPos);
+ mPixmapItem->setPos(currPos);
}
- mIconItem->show();
+ mPixmapItem->show();
}
if(mProcessingWidget)
@@ -490,147 +477,46 @@
return szHint;
}
-void MsgUnifiedEditorBody::longPressed(QPointF position)
-{
- HbMenu* menu = new HbMenu;
- menu->addAction(LOC_OPEN, this, SLOT(openMedia()));
- menu->addAction(LOC_REMOVE, this, SLOT(removeMedia()));
- menu->addAction(LOC_DETAILS, this, SLOT(viewDetails()));
-
- menu->setDismissPolicy(HbPopup::TapAnywhere);
- menu->setAttribute(Qt::WA_DeleteOnClose, true);
- menu->setPreferredPos(position);
-
- menu->setObjectName(getHitRegion(position));
- menu->show();
-}
-
void MsgUnifiedEditorBody::removeMedia()
{
- HbAction* action = qobject_cast<HbAction*>(sender());
- QString objName = action->parent()->objectName();
- if(objName == IMAGE_REGION)
+ QObject* senderObject = sender();
+
+ MsgUnifiedEditorPixmapWidget* pixmap =
+ qobject_cast<MsgUnifiedEditorPixmapWidget*>(senderObject);
+
+ MsgUniFiedEditorAudioWidget* audio =
+ qobject_cast<MsgUniFiedEditorAudioWidget*>(senderObject);
+
+ if(pixmap) //remove image
{
mImageFile.clear();
- if(mIconItem)
+ if(mPixmapItem)
{
- // mIconItem->removeSceneEventFilter(mGestureFilter);
- delete mIconItem;
- mIconItem = NULL;
+ mPixmapItem->setParent(NULL);
+ delete mPixmapItem;
+ mPixmapItem = NULL;
}
setImage(false);
mImageSize = 0;
}
- else if(objName == AUDIO_REGION)
- {
- mAudioFile.clear();
- if(mAudioItem)
+ else if(audio)//remove audio item
{
- delete mAudioItem;
- mAudioItem = NULL;
+ mAudioFile.clear();
+ if(mAudioItem)
+ {
+ mAudioItem->setParent(NULL);
+ delete mAudioItem;
+ mAudioItem = NULL;
+ }
+ setAudio(false);
+ mAudioSize = 0;
}
- setAudio(false);
- mAudioSize = 0;
- }
- else if(objName == VIDEO_REGION)
- {
- //TODO: complete this with video handling story
- }
- else
- {
- // return without doing anything
- return;
- }
this->repolish();
emit contentChanged();
}
-//---------------------------------------------------------------
-// MsgUnifiedEditorBody :: openMedia
-// @see header file
-//---------------------------------------------------------------
-void MsgUnifiedEditorBody::openMedia()
-{
- HbAction* action = qobject_cast<HbAction*>(sender());
- QString objName = action->parent()->objectName();
-
- QString fileName;
- if ( objName == IMAGE_REGION )
- {
- fileName = mImageFile;
- }
- else if ( objName == AUDIO_REGION )
- {
- fileName = mAudioFile;
- }
- else
- {
- return;
- }
-
- XQSharableFile sf;
- XQAiwRequest* request = 0;
-
- if ( !sf.open(fileName) )
- {
- return;
- }
-
- // Get handlers
- XQApplicationManager appManager;
- QList<XQAiwInterfaceDescriptor> fileHandlers = appManager.list(sf);
- if (fileHandlers.count() > 0)
- {
- XQAiwInterfaceDescriptor d = fileHandlers.first();
- request = appManager.create(sf, d);
-
- if ( !request )
- {
- sf.close();
- return ;
- }
- }
- else
- {
- sf.close();
- return;
- }
-
- // Result handlers
- connect (request, SIGNAL(requestOk(const QVariant&)),
- this, SLOT(handleOk(const QVariant&)));
- connect (request, SIGNAL(requestError(const QVariant&)),
- this, SLOT(handleError(const QVariant&)));
-
- request->setEmbedded(true);
- request->setSynchronous(true);
-
- // Fill args
- QList<QVariant> args;
- args << qVariantFromValue(sf);
- request->setArguments(args);
-
- // Fill headers
- QString key("WindowTitle");
- QVariant value(QString(LOC_TITLE));
- XQRequestInfo info;
- info.setInfo(key, value);
- request->setInfo(info);
-
- request->send();
-
- // Cleanup
- sf.close();
- delete request;
-}
-
-void MsgUnifiedEditorBody::viewDetails()
-{
- //open details view.
-}
-
bool MsgUnifiedEditorBody::hasImage()
{
return mHasImage;
@@ -676,32 +562,7 @@
estimatedMediaSize = KEstimatedMmsSmilHeaderSize;
}
- return estimatedMediaSize + MsgMonitor::subjectSize() + MsgMonitor::containerSize();
-}
-
-QString MsgUnifiedEditorBody::getHitRegion(QPointF position)
-{
- if(mIconItem)
- {
- QPolygonF imageHitRegion = mIconItem->mapToScene(mIconItem->boundingRect());
- if(imageHitRegion.containsPoint(position, Qt::OddEvenFill))
- {
- return IMAGE_REGION;
- }
- }
-
- if(mAudioItem)
- {
- QPolygonF audioHitRegion = mAudioItem->mapToScene(mAudioItem->boundingRect());
- if(audioHitRegion.containsPoint(position, Qt::OddEvenFill))
- {
- return AUDIO_REGION;
- }
- }
-
- //TODO : add hit test for video region with video userstory
-
- return INVALID_REGION;
+ return estimatedMediaSize + MsgUnifiedEditorMonitor::subjectSize() + MsgUnifiedEditorMonitor::containerSize();
}
void MsgUnifiedEditorBody::onTextChanged()
@@ -709,12 +570,12 @@
QString string = text();
if( string.size() > mPrevBuffer.size() &&
- MsgMonitor::messageType() == ConvergedMessage::Mms )
+ MsgUnifiedEditorMonitor::messageType() == ConvergedMessage::Mms )
{
// reject any text input if mms size limit is reached
int futureSize = bodySize() +
- MsgMonitor::containerSize() + MsgMonitor::subjectSize();
- if(futureSize > MsgMonitor::maxMmsSize())
+ MsgUnifiedEditorMonitor::containerSize() + MsgUnifiedEditorMonitor::subjectSize();
+ if(futureSize > MsgUnifiedEditorMonitor::maxMmsSize())
{
mTextEdit->setPlainText(mPrevBuffer);
HbNotificationDialog::launchDialog(LOC_UNABLE_TO_ADD_CONTENT);
@@ -754,7 +615,7 @@
// emit signal to indicate change in content
emit contentChanged();
- if(MsgMonitor::messageType() == ConvergedMessage::Sms)
+ if(MsgUnifiedEditorMonitor::messageType() == ConvergedMessage::Sms)
{
//Set char counter value
QString display = QString("%1(%2)").arg(numOfRemainingChars).arg(
@@ -777,27 +638,34 @@
void MsgUnifiedEditorBody::EditorOperationEvent(
TUniEditorProcessImageOperationEvent aEvent, TFileName aFileName)
{
- stopResizeAnimation();
-
delete mImageInfo;
mImageInfo = NULL;
if (aEvent == EUniEditorProcessImageOperationComplete &&
aFileName.Length() > 0)
{
- mImageFile = S60QConversions::s60DescToQString(aFileName);
+ mImageFile = XQConversions::s60DescToQString(aFileName);
}
else
{
mImageFile = mSavedImageFile;
}
mSavedImageFile.clear();
+
+ // image resize is complete. reset the image resize flag
+ mIsImageResizing = false;
//handle the processed image from ProcessImage Operation
handleSetImage();
+
+ stopResizeAnimation();
}
void MsgUnifiedEditorBody::startResizeAnimation()
{
+ // emit signal to indicate disable the send tool button.
+ emit enableSendButton(false);
+
+
QGraphicsLinearLayout* processingLayout = new QGraphicsLinearLayout(Qt::Vertical);
mProcessingWidget = new HbWidget(this);
@@ -810,6 +678,7 @@
processingLayout->addItem(processingText);
HbIconItem* animationItem = new HbIconItem(ANIMATION_ICON,mProcessingWidget);
+ animationItem->setAlignment(Qt::AlignHCenter);
processingLayout->addItem(animationItem);
HbIconAnimator& iconAnimator = animationItem->animator();
@@ -828,6 +697,7 @@
delete mProcessingWidget;
mProcessingWidget = NULL;
}
+
}
// ---------------------------------------------------------
@@ -850,26 +720,6 @@
}
//---------------------------------------------------------------
-// MsgUnifiedEditorBody :: handleOk
-// @see header file
-//---------------------------------------------------------------
-void MsgUnifiedEditorBody::handleOk(const QVariant& result)
-{
- Q_UNUSED(result)
-}
-
-//---------------------------------------------------------------
-// MsgUnifiedEditorBody :: handleError
-// @see header file
-//---------------------------------------------------------------
-void MsgUnifiedEditorBody::handleError(int errorCode,
- const QString& errorMessage)
-{
- Q_UNUSED(errorMessage)
- Q_UNUSED(errorCode)
-}
-
-//---------------------------------------------------------------
// MsgUnifiedEditorBody :: setFocus
// @see header file
//---------------------------------------------------------------
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/unifiededitor/src/msgunieditorlineedit.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,640 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ *
+ */
+
+#include "msgunieditorlineedit.h"
+#include <HbTapGesture>
+#include <HbMenu>
+#include <QApplication>
+#include <QClipboard>
+
+const QRegExp expr("[,;\n]$");
+const QRegExp sepAtEnd("; $");
+const QRegExp sepAtMiddle("; ");
+
+const QString replacementStr("; ");
+const QString labelSeperator(": ");
+
+const int fadedAlpha(125);
+const int solidAlpha(255);
+
+const int SNAP_DELAY = 350;
+
+//Localization
+#define LOC_PASTE hbTrId("txt_common_menu_paste")
+
+MsgUnifiedEditorLineEdit::MsgUnifiedEditorLineEdit(const QString& label,QGraphicsItem *parent):
+HbLineEdit(parent),
+mSelectionStart(-1),
+mSelectionEnd(-1),
+mDefaultBehaviour(false)
+{
+ QString labelStr = label.trimmed();
+
+ QTextCursor cursor(this->textCursor());
+ QTextCharFormat colorFormat(cursor.charFormat());
+
+ QColor fgColor = this->palette().color(QPalette::Text);
+ fgColor.setAlpha(fadedAlpha);
+ colorFormat.setForeground(fgColor);
+ cursor.insertText(labelStr , colorFormat);
+
+ fgColor.setAlpha(solidAlpha);
+ colorFormat.setForeground(fgColor);
+
+ cursor.insertText(" ",colorFormat);
+
+ mLabelExpr.setPattern(QString("^"+labelStr+" $"));
+ mLabel = labelStr+" ";
+
+ moveCursor(QTextCursor::EndOfBlock);
+
+ connect(this,SIGNAL(selectionChanged(QTextCursor,QTextCursor)),
+ this,SLOT(selectionChanged(QTextCursor,QTextCursor)));
+ connect(this, SIGNAL(contentsChanged()), this, SLOT(onContentsChanged()));
+
+ connect(this,SIGNAL(aboutToShowContextMenu(HbMenu*,const QPointF &)),
+ this,SLOT(aboutToShowContextMenu(HbMenu*,const QPointF &)));
+
+}
+
+MsgUnifiedEditorLineEdit::~MsgUnifiedEditorLineEdit()
+{
+}
+
+void MsgUnifiedEditorLineEdit::inputMethodEvent(QInputMethodEvent *event)
+{
+ //let it go in default way.
+ if(mDefaultBehaviour)
+ {
+ HbAbstractEdit::inputMethodEvent(event);
+ event->accept();
+ return;
+ }
+
+ if (!event->commitString().isEmpty() || event->replacementLength())
+ {
+ if (event->commitString().contains(expr))
+ {
+ if(this->text().isEmpty() || this->text().contains(sepAtEnd) || this->text().contains(mLabelExpr))
+ {
+ event->accept();
+ return;
+ }
+
+ this->setCursorPosition(this->text().length());
+
+ QString str = event->commitString();
+ str.replace(expr, replacementStr);
+
+ event->setCommitString(str, event->replacementStart(), event->replacementLength());
+ }
+ else if(this->hasSelectedText())
+ {// all user inputs get appended at the end
+ this->setCursorPosition(this->text().length());
+ }
+ }
+
+ HbAbstractEdit::inputMethodEvent(event);
+ event->accept();
+}
+
+void MsgUnifiedEditorLineEdit::keyPressEvent(QKeyEvent *event)
+{
+ QString str = event->text();
+
+ if(event->key()== Qt::Key_Enter || event->key()== Qt::Key_Return)
+ {
+ if(mDefaultBehaviour)
+ {
+ HbAbstractEdit::keyReleaseEvent(event);
+ event->accept();
+ return;
+ }
+ if(this->text().isEmpty() || this->text().contains(sepAtEnd) || this->text().contains(mLabelExpr))
+ {
+ event->accept();
+ return;
+ }
+ this->setCursorPosition(this->text().length());
+ str = replacementStr;
+ QKeyEvent eve(event->type(), Qt::Key_Any, event->modifiers(), str);
+ HbAbstractEdit::keyPressEvent(&eve);
+ event->accept();
+ return;
+ }
+
+ if(event->key() == Qt::Key_Backspace || event->key() == Qt::Key_Delete )
+ {
+ int pos = this->cursorPosition();
+ bool pbkContact = true;
+
+ if(!this->hasSelectedText())
+ {
+ this->setCursorPosition(pos-2);
+ pbkContact = this->textCursor().charFormat().fontUnderline();
+ this->setCursorPosition(pos);
+ }
+
+ QString text = this->text();
+ text = text.left(pos);
+
+ if(text.contains(mLabelExpr))
+ {
+ event->accept();
+ return;
+ }
+
+ if(pbkContact)
+ {
+ //if already selected delete it.
+ if(this->hasSelectedText())
+ {
+ // deleting phbkContact is an atomic operation
+ // ensure that the signal is emitted only once
+ disconnect(this, SIGNAL(contentsChanged()),
+ this, SLOT(onContentsChanged()));
+ HbLineEdit::keyPressEvent(event);
+ event->accept();
+ //delete seperator (i.e."; ").
+ QKeyEvent eve(event->type(), Qt::Key_Delete, Qt::NoModifier);
+ HbLineEdit::keyPressEvent(&eve);
+ HbLineEdit::keyPressEvent(&eve);
+ connect(this, SIGNAL(contentsChanged()),
+ this, SLOT(onContentsChanged()));
+ onContentsChanged();
+ }
+ else //make it selected
+ {
+ this->setCursorPosition(pos-3);
+ setHighlight(pos-3);
+ }
+ }
+ else
+ {
+ QString str = text.right(2);
+ if(str == replacementStr)
+ {
+ // deleting contact is an atomic operation
+ // ensure that the signal is emitted only once
+ disconnect(this, SIGNAL(contentsChanged()),
+ this, SLOT(onContentsChanged()));
+ //delete seperator (i.e."; ").
+ QKeyEvent eve(event->type(), Qt::Key_Backspace, Qt::NoModifier);
+ HbLineEdit::keyPressEvent(&eve);
+ HbLineEdit::keyPressEvent(&eve);
+ connect(this, SIGNAL(contentsChanged()),
+ this, SLOT(onContentsChanged()));
+ onContentsChanged();
+ }
+ else
+ {
+ HbLineEdit::keyPressEvent(event);
+ }
+ event->accept();
+ }
+
+ event->accept();
+ return;
+ }
+
+ if (event->key() == Qt::Key_Left )
+ {
+ bool selectedText = this->hasSelectedText();
+
+ //look ahead left.
+ int pos = this->cursorPosition();
+
+ QString text = this->text();
+ text = text.left(pos);
+
+ //no text other than label;
+ if(text.contains(mLabelExpr))
+ {
+ event->accept();
+ return;
+ }
+
+ //look for next seperator while going left.
+ int newPos = text.lastIndexOf(sepAtMiddle);
+
+ if(newPos < 0 && selectedText)
+ {
+ event->accept();
+ return;
+ }
+
+ bool pbkContact = true;
+
+ if(!selectedText)
+ {
+ this->setCursorPosition(pos-2);
+ pbkContact = this->textCursor().charFormat().fontUnderline();
+ this->setCursorPosition(pos);
+ }
+ else
+ {
+ this->setCursorPosition(newPos);
+ pbkContact = this->textCursor().charFormat().fontUnderline();
+ this->setCursorPosition(pos);
+ }
+
+
+ if(pbkContact && newPos >0)
+ {
+
+ setHighlight(newPos-1);
+ }
+ else
+ {
+ //move left, char by char. if seperator met jump over it.
+ if( (newPos > 0 && selectedText) || (pos-2 == newPos))
+ {
+ this->setCursorPosition(newPos+1);
+ }
+
+ HbLineEdit::keyPressEvent(event);
+
+ }
+ event->accept();
+ return;
+ }
+
+ if (event->key() == Qt::Key_Right)
+ {
+ bool selectedText = this->hasSelectedText();
+
+ //look ahead.
+ int pos = this->cursorPosition();
+ this->setCursorPosition(pos+3);
+ bool pbkContact = this->textCursor().charFormat().fontUnderline();
+ this->setCursorPosition(pos);
+
+ //look for next seperator.
+ QString text = this->text();
+ int newPos = text.indexOf(sepAtMiddle,pos+2);
+
+ if(pbkContact && newPos >0)
+ {
+ this->setCursorPosition(newPos-1);
+ setHighlight(newPos-1);
+ }
+ else
+ {
+ int seperatorPos = text.indexOf(sepAtMiddle,pos);
+
+ if(selectedText || seperatorPos == pos)
+ {
+ this->setCursorPosition(pos+1);
+ this->deselect();
+ }
+ HbAbstractEdit::keyPressEvent(event);
+ }
+ event->accept();
+ return;
+ }
+
+ if(!str.isEmpty())
+ {
+ if(mDefaultBehaviour)
+ {
+ HbAbstractEdit::keyPressEvent(event);
+ event->accept();
+ return;
+ }
+ if (str.contains(expr))
+ {
+ if(this->text().isEmpty() || this->text().contains(sepAtEnd) || this->text().contains(mLabelExpr))
+ {
+ event->accept();
+ return;
+ }
+
+ // auto-complete the last incomplete word
+ int contentLength = this->text().length();
+ int pos = this->cursorPosition();
+ QString incompleteWord(this->text().right(contentLength-(pos-1)));
+ if(!incompleteWord.contains(sepAtMiddle))
+ {
+ this->setCursorPosition(this->text().length());
+ }
+
+ str.replace(expr, replacementStr);
+ QKeyEvent eve(event->type(), event->key(), event->modifiers(), str);
+ HbAbstractEdit::keyPressEvent(&eve);
+ }
+ else
+ {
+ HbAbstractEdit::keyPressEvent(event);
+ event->accept();
+ return;
+ }
+ }
+}
+
+void MsgUnifiedEditorLineEdit::handleTap()
+{
+ int currentPos = this->cursorPosition();
+
+ QString txt = this->text();
+
+ QString tempTxt = txt.left(currentPos+2);
+ int seperatorPos = tempTxt.lastIndexOf(sepAtMiddle,currentPos);
+
+ txt = txt.right(txt.length() - currentPos);
+ int labelPos = txt.indexOf(labelSeperator);
+
+ if(labelPos >= 0 )//pressed on label.
+ {
+ this->setCursorPosition(currentPos + labelPos + 2);
+ }
+ else if(seperatorPos == currentPos-1 || seperatorPos == currentPos)//pressed just on seperator.
+ {
+ this->setCursorPosition(seperatorPos+2);
+ }
+ else
+ {
+ this->setCursorPosition(currentPos+1);
+ bool pbkContact = this->textCursor().charFormat().fontUnderline();
+ if(pbkContact)
+ {
+ setHighlight(currentPos);
+ }
+ }
+
+ this->update();
+}
+
+void MsgUnifiedEditorLineEdit::gestureEvent(QGestureEvent* event)
+{
+ //passing gesture event to base class.
+ HbLineEdit::gestureEvent(event);
+
+
+ if(HbTapGesture *tap = qobject_cast<HbTapGesture*>(event->gesture(Qt::TapGesture)))
+ {
+ //capturing gesture position, and map to local co-ordinates.
+ QPointF pos = mapFromScene(tap->scenePosition());
+
+ switch (tap->state())
+ {
+ case Qt::GestureFinished:
+ {
+ if (HbTapGesture::Tap == tap->tapStyleHint())
+ {
+ handleTap();
+ }
+ break;
+ }
+ default:
+ break;
+ }
+ event->accept();
+ }
+ else
+ {
+ event->ignore();
+ }
+}
+
+void MsgUnifiedEditorLineEdit::setText(const QString& text, bool underlined)
+{
+
+ if(!mDefaultBehaviour)
+ {
+ // atomic operation, ensure one signal only at the end
+ disconnect(this, SIGNAL(contentsChanged()), this, SLOT(onContentsChanged()));
+
+ //make sure previous text is complete.
+ if(this->content().length() > 0)
+ {
+ QInputMethodEvent e;
+ e.setCommitString(";");
+ this->inputMethodEvent(&e);
+ }
+ this->setCursorPosition(this->text().length());
+
+ QTextCursor cursor(this->textCursor());
+ QTextCharFormat colorFormat(cursor.charFormat());
+ if(underlined)
+ {
+ QColor fgColor = colorFormat.foreground().color();
+ fgColor.setAlpha(fadedAlpha);
+ colorFormat.setUnderlineColor(fgColor);
+ colorFormat.setFontUnderline(true);
+ }
+ cursor.insertText(text , colorFormat);
+ colorFormat.setFontUnderline(false);
+
+ cursor.insertText(replacementStr,colorFormat);
+ connect(this, SIGNAL(contentsChanged()), this, SLOT(onContentsChanged()));
+ onContentsChanged();
+ }
+ else
+ {
+ this->setCursorPosition(this->text().length());
+ QTextCursor cursor(this->textCursor());
+ cursor.insertText(text);
+ }
+
+ moveCursor(QTextCursor::EndOfBlock);
+}
+
+QStringList MsgUnifiedEditorLineEdit::addresses()
+{
+ QString text = this->content();
+ QStringList list = text.split(replacementStr,QString::SkipEmptyParts);
+ return list;
+}
+
+void MsgUnifiedEditorLineEdit::focusInEvent(QFocusEvent* event)
+{
+ HbLineEdit::focusInEvent(event);
+ this->setCursorVisibility(Hb::TextCursorVisible);
+}
+
+void MsgUnifiedEditorLineEdit::focusOutEvent(QFocusEvent* event)
+{
+ HbLineEdit::focusOutEvent(event);
+ this->setCursorVisibility(Hb::TextCursorHidden);
+}
+
+void MsgUnifiedEditorLineEdit::setHighlight(int currentPos)
+{
+ QString txt = this->text();
+
+ int endPos = qMax(txt.indexOf(sepAtMiddle,currentPos),
+ txt.indexOf(labelSeperator,currentPos));
+
+ int startPos = qMax(txt.lastIndexOf(sepAtMiddle,currentPos),
+ txt.lastIndexOf(labelSeperator,currentPos));
+
+ disconnect(this,SIGNAL(selectionChanged(QTextCursor,QTextCursor)),
+ this,SLOT(selectionChanged(QTextCursor,QTextCursor)));
+
+ //highlight if pbk contact.
+ if(startPos > 0 && endPos > 0 && startPos != endPos)
+ {
+ this->setSelection(startPos + 2, endPos - startPos - 2);
+ this->update();
+ }
+ else
+ {
+ this->deselect();
+ }
+
+ this->update();
+
+ connect(this,SIGNAL(selectionChanged(QTextCursor,QTextCursor)),
+ this,SLOT(selectionChanged(QTextCursor,QTextCursor)));
+}
+
+void MsgUnifiedEditorLineEdit::selectionChanged(const QTextCursor &oldCursor, const QTextCursor& newCursor)
+{
+
+ if(mSelectionSnapTimer.isActive())
+ {
+ mSelectionSnapTimer.stop();
+ }
+
+ if(newCursor.selectionStart() < mLabel.length())
+ {
+ this->setTextCursor(oldCursor);
+ return;
+ }
+
+ if(!mDefaultBehaviour)
+ {
+ mSelectionStart = newCursor.selectionStart();
+ mSelectionEnd = newCursor.selectionEnd();
+
+ if(mSelectionStart == mSelectionEnd )
+ {
+ return;
+ }
+
+ mSelectionSnapTimer.start(SNAP_DELAY,this);
+ }
+}
+
+void MsgUnifiedEditorLineEdit::timerEvent(QTimerEvent *event)
+{
+ //passing event to base class.
+ HbLineEdit::timerEvent(event);
+
+ if (event->timerId() == mSelectionSnapTimer.timerId())
+ {
+ mSelectionSnapTimer.stop();
+
+ disconnect(this,SIGNAL(selectionChanged(QTextCursor,QTextCursor)),
+ this,SLOT(selectionChanged(QTextCursor,QTextCursor)));
+
+ QString txt = this->text();
+
+ int startPos = qMax(txt.lastIndexOf(sepAtMiddle,mSelectionStart),
+ txt.lastIndexOf(labelSeperator,mSelectionStart));
+
+ int endPos = qMax(txt.indexOf(sepAtMiddle,mSelectionEnd),
+ txt.indexOf(labelSeperator,mSelectionEnd));
+
+ if(endPos < 0 )
+ {
+ endPos = mSelectionEnd;
+ }
+
+ this->setSelection(startPos + 2, endPos - startPos - 2);
+
+ connect(this,SIGNAL(selectionChanged(QTextCursor,QTextCursor)),
+ this,SLOT(selectionChanged(QTextCursor,QTextCursor)));
+
+ event->accept();
+ }
+}
+
+void MsgUnifiedEditorLineEdit::setDefaultBehaviour(bool defaultBehaviour)
+{
+ mDefaultBehaviour = defaultBehaviour;
+}
+
+QString MsgUnifiedEditorLineEdit::text() const
+{
+ return HbLineEdit::text();
+}
+
+QString MsgUnifiedEditorLineEdit::content() const
+{
+ QString text = this->text();
+ text.remove(mLabel);
+ return text;
+}
+
+void MsgUnifiedEditorLineEdit::clearContent()
+{
+ // avoid getting updates during local editing
+ disconnect(this, SIGNAL(contentsChanged()), this, SLOT(onContentsChanged()));
+
+ int startPos = mLabel.length();
+ this->setSelection(startPos, content().length());
+ QKeyEvent eve(QEvent::KeyPress, Qt::Key_Backspace, Qt::NoModifier);
+ this->keyPressEvent(&eve);
+ this->deselect();
+
+ // re-connect signal to start getting updates
+ connect(this, SIGNAL(contentsChanged()), this, SLOT(onContentsChanged()));
+}
+
+void MsgUnifiedEditorLineEdit::onContentsChanged()
+{
+ emit contentsChanged(content());
+}
+
+void MsgUnifiedEditorLineEdit::highlightInvalidString(QString invalidStr)
+{
+ // for only address editor
+ if(!mDefaultBehaviour)
+ {
+ QString txtContent = this->text();
+ int searchStartPos = mLabel.length();
+ int startPos = txtContent.indexOf(invalidStr, searchStartPos);
+ disconnect(this,SIGNAL(selectionChanged(QTextCursor,QTextCursor)),
+ this,SLOT(selectionChanged(QTextCursor,QTextCursor)));
+ // if invalidStr found
+ if(startPos > 0)
+ {
+ this->setSelection(startPos, invalidStr.length());
+ }
+ connect(this,SIGNAL(selectionChanged(QTextCursor,QTextCursor)),
+ this,SLOT(selectionChanged(QTextCursor,QTextCursor)));
+ }
+}
+
+void MsgUnifiedEditorLineEdit::aboutToShowContextMenu(HbMenu *contextMenu, const QPointF &pos)
+{
+ Q_UNUSED(pos)
+ //clear all menu actions.
+ contextMenu->clearActions();
+
+ const QMimeData *mimedata = QApplication::clipboard()->mimeData();
+ if(mimedata)
+ {
+ if(canInsertFromMimeData(mimedata))
+ {
+ contextMenu->addAction(LOC_PASTE,this,SLOT(paste()));
+ }
+ }
+
+}
+// eof
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/unifiededitor/src/msgunieditormonitor.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,350 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: Helper class to monitor msg construction in unified editor
+ *
+ */
+
+// INCLUDES
+#include "debugtraces.h"
+#include <HbNotificationDialog>
+#include <HbWidget>
+
+// USER INCLUDES
+#include "msgunieditormonitor.h"
+#include "msgunieditorview.h"
+#include "msgunieditoraddress.h"
+#include "msgunieditorsubject.h"
+#include "msgunieditorbody.h"
+#include "msgunieditorattachmentcontainer.h"
+#include "UniEditorGenUtils.h"
+
+// Constants
+
+// Define static
+ConvergedMessage::MessageType MsgUnifiedEditorMonitor::mMessageType;
+int MsgUnifiedEditorMonitor::mBodySize;
+int MsgUnifiedEditorMonitor::mContainerSize;
+int MsgUnifiedEditorMonitor::mSubjectSize;
+int MsgUnifiedEditorMonitor::mMaxMmsSize;
+int MsgUnifiedEditorMonitor::mMaxSmsRecipients;
+int MsgUnifiedEditorMonitor::mMaxMmsRecipients;
+int MsgUnifiedEditorMonitor::mMsgCurrAddressCount;
+
+//Localized strings
+#define LOC_POP_MESSAGE_CHANGE_MUL hbTrId("txt_messaging_dpopinfo_message_type_changed_to_mul")
+#define LOC_POP_MESSAGE_CHANGE_TEXT hbTrId("txt_messaging_dpopinfo_message_type_changed_to_tex")
+
+//---------------------------------------------------------------
+// MsgUnifiedEditorMonitor::MsgUnifiedEditorMonitor
+// @see header file
+//---------------------------------------------------------------
+MsgUnifiedEditorMonitor::MsgUnifiedEditorMonitor(QObject* parent) :
+QObject(parent),
+mSkipNote(false)
+{
+ init();
+ mUniEditorGenUtils = new UniEditorGenUtils;
+}
+
+//---------------------------------------------------------------
+// MsgUnifiedEditorMonitor::~MsgUnifiedEditorMonitor
+// @see header file
+//---------------------------------------------------------------
+MsgUnifiedEditorMonitor::~MsgUnifiedEditorMonitor()
+{
+ delete mUniEditorGenUtils;
+}
+
+//---------------------------------------------------------------
+// MsgUnifiedEditorMonitor::init
+// @see header file
+//---------------------------------------------------------------
+void MsgUnifiedEditorMonitor::init()
+{
+ mMessageType = ConvergedMessage::Sms;
+ mBodySize = 0;
+ mContainerSize = 0;
+ mSubjectSize = 0;
+ mMsgCurrAddressCount = 0;
+
+ UniEditorGenUtils* uniEditorGenUtils = new UniEditorGenUtils;
+
+ mMaxMmsSize = KDefaultMaxSize;
+ TRAP_IGNORE(mMaxMmsSize = uniEditorGenUtils->MaxMmsMsgSizeL());
+
+ mMaxSmsRecipients = KDefaultSmsRecipients;
+ TRAP_IGNORE(mMaxSmsRecipients = uniEditorGenUtils->MaxSmsRecipientsL());
+
+ mMaxMmsRecipients = KDefaultMmsRecipients;
+ TRAP_IGNORE(mMaxMmsRecipients = uniEditorGenUtils->MaxMmsRecipientsL());
+
+ delete uniEditorGenUtils;
+}
+
+//---------------------------------------------------------------
+// MsgUnifiedEditorMonitor::handleContentChange
+// @see header file
+//---------------------------------------------------------------
+void MsgUnifiedEditorMonitor::handleContentChange()
+{
+ // get the projected message type & show the type change note
+ ConvergedMessage::MessageType newMsgType = projectedMsgType();
+ if(mMessageType != newMsgType)
+ {
+ mMessageType = newMsgType;
+ QString noteStr;
+ if(newMsgType == ConvergedMessage::Sms)
+ {
+ noteStr = LOC_POP_MESSAGE_CHANGE_TEXT;
+ }
+ else
+ {
+ noteStr = LOC_POP_MESSAGE_CHANGE_MUL;
+ }
+ showPopup(noteStr);
+ }
+
+ HbWidget* senderWidget = qobject_cast<HbWidget*>(sender());
+ updateMsgInfo(senderWidget);
+ updateSend();
+}
+
+//---------------------------------------------------------------
+// MsgUnifiedEditorMonitor::projectedMsgType
+// @see header file
+//---------------------------------------------------------------
+ConvergedMessage::MessageType MsgUnifiedEditorMonitor::projectedMsgType()
+{
+ ConvergedMessage::MessageType newMsgType = ConvergedMessage::Sms;
+
+ // check if MMS content is present in any of the editor component
+ if( bodyHasMMSContent() ||
+ subjectHasMMSContent() ||
+ containerHasMMSContent() ||
+ otherMMSCriteriaMet() )
+ {
+ newMsgType = ConvergedMessage::Mms;
+ }
+ return newMsgType;
+}
+
+//---------------------------------------------------------------
+// MsgUnifiedEditorMonitor::updateMsgInfo
+// @see header file
+//---------------------------------------------------------------
+void MsgUnifiedEditorMonitor::updateMsgInfo(HbWidget* senderWidget)
+{
+ if(mMessageType == ConvergedMessage::Mms)
+ {
+ //Disable char counter & add subject
+ view()->mBody->disableCharCounter();
+ view()->addSubject();
+ }
+
+ // check if sent by body widget
+ MsgUnifiedEditorBody* body = NULL;
+ body = qobject_cast<MsgUnifiedEditorBody*>(senderWidget);
+ if(body)
+ {
+ mBodySize = view()->mBody->bodySize();
+ view()->setAttachOptionEnabled(
+ MsgUnifiedEditorView::TBE_PHOTO, !view()->mBody->hasImage());
+ view()->setAttachOptionEnabled(
+ MsgUnifiedEditorView::TBE_SOUND, !view()->mBody->hasAudio());
+ return;
+ }
+
+ // check if sent by subject widget
+ MsgUnifiedEditorSubject* subject = NULL;
+ subject = qobject_cast<MsgUnifiedEditorSubject*>(senderWidget);
+ if(subject)
+ {
+ mSubjectSize = view()->mSubjectField->subjectSize();
+ return;
+ }
+
+ // check if sent by attachment container widget
+ MsgAttachmentContainer* container = NULL;
+ container = qobject_cast<MsgAttachmentContainer*>(senderWidget);
+ if(container)
+ {
+ mContainerSize = view()->mAttachmentContainer->containerSize();
+ return;
+ }
+
+ // handle content change from other widgets e.g. To, Cc, Bcc address field
+ int totalAddressCount = view()->mToField->addressCount();
+ if(view()->mCcField && view()->mBccField)
+ {
+ totalAddressCount += view()->mCcField->addressCount() +
+ view()->mBccField->addressCount();
+ }
+ mMsgCurrAddressCount = totalAddressCount;
+ return;
+}
+
+//---------------------------------------------------------------
+// MsgUnifiedEditorMonitor::showPopup
+// @see header file
+//---------------------------------------------------------------
+void MsgUnifiedEditorMonitor::showPopup(const QString& text)
+{
+ if(!mSkipNote)
+ {
+ HbNotificationDialog* dlg = new HbNotificationDialog();
+ dlg->setFocusPolicy(Qt::NoFocus);
+ dlg->setDismissPolicy(HbPopup::TapAnywhere);
+ dlg->setAttribute(Qt::WA_DeleteOnClose, true);
+ dlg->setText(text);
+ dlg->show();
+ }
+ // reset skip note flag
+ mSkipNote = false;
+}
+
+//---------------------------------------------------------------
+// MsgUnifiedEditorMonitor::view
+// @see header file
+//---------------------------------------------------------------
+MsgUnifiedEditorView* MsgUnifiedEditorMonitor::view()
+{
+ return static_cast<MsgUnifiedEditorView*>(this->parent());
+}
+
+//---------------------------------------------------------------
+// MsgUnifiedEditorMonitor::bodyHasMMSContent
+// @see header file
+//---------------------------------------------------------------
+bool MsgUnifiedEditorMonitor::bodyHasMMSContent()
+{
+ MsgUnifiedEditorBody* edBody = view()->mBody;
+ // If any media-object is present inside body
+ if(!edBody->mediaContent().isEmpty())
+ {
+ return true;
+ }
+
+ int bodyTextSize = mUniEditorGenUtils->UTF8Size(edBody->text());
+ int maxSmsSize = 0;
+ TRAP_IGNORE(maxSmsSize =
+ mUniEditorGenUtils->MaxSmsMsgSizeL(edBody->isUnicode()));
+ // If body text size exceeds sms text-size limit
+ if(bodyTextSize > maxSmsSize)
+ {
+ return true;
+ }
+ return false;
+}
+
+//---------------------------------------------------------------
+// MsgUnifiedEditorMonitor::subjectHasMMSContent
+// @see header file
+//---------------------------------------------------------------
+bool MsgUnifiedEditorMonitor::subjectHasMMSContent()
+{
+ MsgUnifiedEditorSubject* edSubject = view()->mSubjectField;
+ ConvergedMessage::Priority priority = ConvergedMessage::Normal;
+ QString subjectText;
+ if(edSubject)
+ {
+ priority = edSubject->priority();
+ subjectText = edSubject->text();
+ }
+ // If priority is set to other than Normal or
+ // If subject has some content
+ if( (priority != ConvergedMessage::Normal) ||
+ !subjectText.isEmpty() )
+ {
+ return true;
+ }
+ return false;
+}
+
+//---------------------------------------------------------------
+// MsgUnifiedEditorMonitor::containerHasMMSContent
+// @see header file
+//---------------------------------------------------------------
+bool MsgUnifiedEditorMonitor::containerHasMMSContent()
+{
+ QString bodyText = view()->mBody->text();
+ MsgAttachmentContainer* edContainer = view()->mAttachmentContainer;
+ bool hasMMAttachmentContent = false;
+ int attachmentCount = 0;
+ if(edContainer)
+ {
+ hasMMAttachmentContent = edContainer->hasMMContent();
+ attachmentCount = edContainer->count();
+ }
+ // If MM attachments are present or
+ // If only one non-MM attachment is present e.g. vcf along with body text
+ if( hasMMAttachmentContent ||
+ ((attachmentCount == 1) && !bodyText.isEmpty()) )
+ {
+ return true;
+ }
+ return false;
+}
+
+//---------------------------------------------------------------
+// MsgUnifiedEditorMonitor::otherMMSCriteriaMet
+// @see header file
+//---------------------------------------------------------------
+bool MsgUnifiedEditorMonitor::otherMMSCriteriaMet()
+{
+ MsgUnifiedEditorAddress* edCc = view()->mCcField;
+ MsgUnifiedEditorAddress* edBcc = view()->mBccField;
+ int ccCount = 0;
+ int bccCount = 0;
+ if(edCc && edBcc)
+ {
+ ccCount = edCc->addressCount();
+ bccCount = edBcc->addressCount();
+ }
+ // If CC/BCC has some content or
+ // If to-recipients count exceeds max sms recipient count
+ if( ccCount || bccCount ||
+ (view()->mToField->addressCount() > mMaxSmsRecipients) )
+ {
+ return true;
+ }
+
+ // If to-field contains an email address
+ bool isEmailPresent = false;
+ ConvergedMessageAddressList addrList = view()->mToField->addresses();
+ TRAP_IGNORE(isEmailPresent = mUniEditorGenUtils->VerifyEmailAddressesL(addrList));
+ if(isEmailPresent)
+ {
+ return true;
+ }
+ return false;
+}
+
+//---------------------------------------------------------------
+// MsgUnifiedEditorMonitor::updateSend
+// @see header file
+//---------------------------------------------------------------
+void MsgUnifiedEditorMonitor::updateSend()
+{
+ if (mMsgCurrAddressCount > 0 && (mSubjectSize + mBodySize + mContainerSize) > 0 && !view()->mBody->isImageResizing())
+ {
+ emit enableSend(true);
+ }
+ else
+ {
+ emit enableSend(false);
+ }
+}
+
+
+//EOF
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/unifiededitor/src/msgunieditorpixmapwidget.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,187 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: This widget displays the pixmap content.
+ *
+ */
+
+#include "msgunieditorpixmapwidget.h"
+
+// SYSTEM INCLUDES
+#include <HbTapGesture>
+#include <HbWidget>
+#include <HbInstantFeedback>
+#include <HbMenu>
+#include <QPixmap>
+#include <QTimer>
+
+// USER INCLUDES
+#include "msgunieditorutils.h"
+
+// LOCAL CONSTANTS
+#define LOC_OPEN hbTrId("txt_common_menu_open")
+#define LOC_REMOVE hbTrId("txt_common_menu_remove")
+#define LOC_DETAILS hbTrId("txt_common_menu_details")
+
+const QString IMAGE_MIMETYPE("image");
+
+//---------------------------------------------------------------
+// MsgUnifiedEditorPixmapWidget::MsgUnifiedEditorPixmapWidget
+// @see header file
+//---------------------------------------------------------------
+MsgUnifiedEditorPixmapWidget::MsgUnifiedEditorPixmapWidget(QGraphicsItem *parent) :
+HbIconItem(parent),
+mEditorUtils(0)
+{
+ this->grabGesture(Qt::TapGesture);
+}
+
+//---------------------------------------------------------------
+// MsgUnifiedEditorPixmapWidget::~MsgUnifiedEditorPixmapWidget
+// @see header file
+//---------------------------------------------------------------
+MsgUnifiedEditorPixmapWidget::~MsgUnifiedEditorPixmapWidget()
+{
+}
+
+//---------------------------------------------------------------
+// MsgUnifiedEditorPixmapWidget::setPixmap
+// @see header file
+//---------------------------------------------------------------
+void MsgUnifiedEditorPixmapWidget::populate(const QString &pixmapPath)
+{
+ mPixmapPath = pixmapPath;
+ QPixmap pixmap(mPixmapPath);
+ this->setIcon(HbIcon(pixmap));
+}
+
+//---------------------------------------------------------------
+// MsgUnifiedEditorPixmapWidget::gestureEvent
+// @see header file
+//---------------------------------------------------------------
+void MsgUnifiedEditorPixmapWidget::gestureEvent(QGestureEvent *event)
+{
+ HbTapGesture *tapGesture = qobject_cast<HbTapGesture*> (event->gesture(Qt::TapGesture));
+ if (tapGesture) {
+ switch (tapGesture->state()) {
+ case Qt::GestureStarted:
+ {
+ // Trigger haptic feedback.
+ HbInstantFeedback::play(HbFeedback::Basic);
+ break;
+ }
+ case Qt::GestureUpdated:
+ {
+ if (HbTapGesture::TapAndHold == tapGesture->tapStyleHint()) {
+ // Handle longtap.
+ handleLongTap(tapGesture->scenePosition());
+ }
+ break;
+ }
+ case Qt::GestureFinished:
+ {
+ HbInstantFeedback::play(HbFeedback::Basic);
+ if (HbTapGesture::Tap == tapGesture->tapStyleHint()) {
+ // Handle short tap
+ handleShortTap();
+ }
+ break;
+ }
+ case Qt::GestureCanceled:
+ {
+ HbInstantFeedback::play(HbFeedback::Basic);
+ break;
+ }
+ }
+ }
+ else {
+ HbIconItem::gestureEvent(event);
+ }
+}
+
+//---------------------------------------------------------------
+// MsgUnifiedEditorPixmapWidget::handleOpen
+// @see header file
+//---------------------------------------------------------------
+void MsgUnifiedEditorPixmapWidget::handleOpen()
+{
+ this->ungrabGesture(Qt::TapGesture);
+
+ if (!mEditorUtils) {
+ mEditorUtils = new MsgUnifiedEditorUtils(this);
+ }
+ mEditorUtils->launchContentViewer(IMAGE_MIMETYPE, mPixmapPath);
+
+ //fire timer to regrab gesture after some delay.
+ QTimer::singleShot(300,this,SLOT(regrabGesture()));
+}
+
+//---------------------------------------------------------------
+// MsgUnifiedEditorPixmapWidget::handleSave
+// @see header file
+//---------------------------------------------------------------
+void MsgUnifiedEditorPixmapWidget::handleRemove()
+{
+ emit remove();
+}
+
+//---------------------------------------------------------------
+// MsgUnifiedEditorPixmapWidget::handleSave
+// @see header file
+//---------------------------------------------------------------
+void MsgUnifiedEditorPixmapWidget::viewDetails()
+{
+
+}
+
+//----------------------------------------------------------------------------
+// MsgUnifiedEditorPixmapWidget::handleShortTap
+// @see header file
+//----------------------------------------------------------------------------
+void MsgUnifiedEditorPixmapWidget::handleShortTap()
+{
+ emit shortTap(mPixmapPath);
+
+ // Open the media.
+ handleOpen();
+}
+
+//---------------------------------------------------------------
+// MsgUnifiedEditorPixmapWidget::handleLongTap
+// @see header file
+//---------------------------------------------------------------
+void MsgUnifiedEditorPixmapWidget::handleLongTap(const QPointF &position)
+{
+ emit longTap(position);
+
+ HbMenu* menu = new HbMenu;
+ menu->setAttribute(Qt::WA_DeleteOnClose);
+ menu->setDismissPolicy(HbPopup::TapAnywhere);
+
+ menu->addAction(LOC_OPEN, this, SLOT(handleOpen()));
+ menu->addAction(LOC_REMOVE, this, SLOT(handleRemove()));
+ menu->addAction(LOC_DETAILS, this, SLOT(viewDetails()));
+
+ menu->setPreferredPos(position);
+ menu->show();
+}
+
+//---------------------------------------------------------------
+// MsgUnifiedEditorPixmapWidget::regrabGesture
+// @see header file
+//---------------------------------------------------------------
+void MsgUnifiedEditorPixmapWidget::regrabGesture()
+{
+ this->grabGesture(Qt::TapGesture);
+}
+// EOF
--- a/messagingapp/msgui/unifiededitor/src/msgunieditorprocessimageoperation.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/unifiededitor/src/msgunieditorprocessimageoperation.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -19,13 +19,13 @@
// ========== INCLUDE FILES ================================
-#include <BASCHED.H>
+#include <basched.h>
#include <icl/imagedata.h>
#include <centralrepository.h>
-#include <messagingvariant.hrh>
-#include <messaginginternalcrkeys.h> // for Central Repository keys
+#include <MessagingVariant.hrh>
+#include <MessagingInternalCRKeys.h> // for Central Repository keys
#include <MsgMediaResolver.h>
#include <MsgImageInfo.h>
@@ -43,12 +43,12 @@
#include <msvids.h>
#include <MmsEngineDomainCRKeys.h>
-#include <mmssettingsdefs.h>
+#include <msgunieditormmssettingsdefs.h>
#include <HbMessageBox>
#include <HbAction>
#include <mmsconst.h>
-#include "msgmonitor.h"
+#include "msgunieditormonitor.h"
#include "msgunieditorprocessimageoperation.h"
// ========== CONSTANTS ====================================
@@ -85,7 +85,7 @@
CleanupStack::PushL( self );
self->ConstructL();
- CleanupStack::Pop( self );
+ CleanupStack::Pop();
return self;
}
@@ -149,7 +149,7 @@
delete repository;
- iMaxMmsSize = MsgMonitor::maxMmsSize();
+ iMaxMmsSize = MsgUnifiedEditorMonitor::maxMmsSize();
}
// ---------------------------------------------------------
@@ -476,9 +476,9 @@
if ( !( iProcessMethod & EUniProcessImgMethodScale ) &&
( iImageInfo->FileSize() +
- MsgMonitor::messageSize() ) > iMaxMmsSize &&
+ MsgUnifiedEditorMonitor::messageSize() ) > iMaxMmsSize &&
iImageInfo->MimeType().CompareF( KMsgMimeImageJpeg ) == 0 &&
- (MsgMonitor::messageSize()) < KUniCompressionMargin )
+ (MsgUnifiedEditorMonitor::messageSize()) < KUniCompressionMargin )
{
// Only compression needed as image is JPEG that is larger than can be fitted
// into the message and scaling is not performed. Also current message size
@@ -493,7 +493,7 @@
// Image won't be processed
if ( ( origSize.iWidth > KImageRichWidth ||
origSize.iHeight > KImageRichHeight ) &&
- ( iImageInfo->FileSize() + MsgMonitor::messageSize() ) < iMaxMmsSize )
+ ( iImageInfo->FileSize() + MsgUnifiedEditorMonitor::messageSize() ) < iMaxMmsSize )
{
// Original image width or height is "non-conformant" and original image would
// fit to into the message without any processing.
@@ -525,7 +525,8 @@
if( largeImageQuery && iMmsCreationMode == EMmsCreationModeWarning)
{
HbMessageBox::question(LOC_LARGE_IMAGE_NOTE, this,
- SLOT(onDialogLargeImage(HbAction*)));
+ SLOT(onDialogLargeImage(HbAction*)),
+ HbMessageBox::Yes | HbMessageBox::No);
}
else
{
--- a/messagingapp/msgui/unifiededitor/src/msgunieditorsubject.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/unifiededitor/src/msgunieditorsubject.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -23,8 +23,8 @@
// USER INCLUDES
#include "msgunieditorsubject.h"
#include "UniEditorGenUtils.h"
-#include "msgunifiededitorlineedit.h"
-#include "msgmonitor.h"
+#include "msgunieditorlineedit.h"
+#include "msgunieditormonitor.h"
// Localized Constants
#define LOC_SUBJECT hbTrId("txt_messaging_formlabel_subject")
@@ -115,8 +115,8 @@
{
// reject any text input if mms size limit is reached
int futureSize = subjectSize() +
- MsgMonitor::containerSize() + MsgMonitor::bodySize();
- if(futureSize > MsgMonitor::maxMmsSize())
+ MsgUnifiedEditorMonitor::containerSize() + MsgUnifiedEditorMonitor::bodySize();
+ if(futureSize > MsgUnifiedEditorMonitor::maxMmsSize())
{
// atomic operation
disconnect(mSubjectEdit, SIGNAL(contentsChanged(const QString&)),
@@ -151,7 +151,10 @@
void MsgUnifiedEditorSubject::setText(const QString& text)
{
- mSubjectEdit->setText(text);
+ if(!text.isEmpty())
+ {
+ mSubjectEdit->setText(text);
+ }
}
void MsgUnifiedEditorSubject::setFocus()
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/unifiededitor/src/msgunieditorutils.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,143 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: Utility class for unieditor.
+ *
+ */
+
+#include "msgunieditorutils.h"
+
+// SYSTEM INCLUDES
+#include <xqaiwrequest.h>
+#include <xqrequestinfo.h>
+#include <xqappmgr.h>
+#include <hbglobal.h>
+
+// USER INCLUDES
+#include "msgcontactsutil.h"
+
+// LOCAL CONSTANTS
+#define LOC_TITLE hbTrId("txt_messaging_title_messaging")
+
+const QString IMAGE_MIMETYPE("image");
+const QString AUDIO_MIMETYPE("audio");
+const QString VCARD_MIMETYPE("text/X-vCard");
+
+//---------------------------------------------------------------
+// MsgUnifiedEditorUtils::MsgUnifiedEditorUtils
+// @see header file
+//---------------------------------------------------------------
+MsgUnifiedEditorUtils::MsgUnifiedEditorUtils(QObject *parent) :
+QObject(parent)
+{
+}
+
+//---------------------------------------------------------------
+// MsgUnifiedEditorUtils::~MsgUnifiedEditorUtils
+// @see header file
+//---------------------------------------------------------------
+MsgUnifiedEditorUtils::~MsgUnifiedEditorUtils()
+{
+}
+
+//---------------------------------------------------------------
+// MsgUnifiedEditorUtils::addAttachmentWidget
+// @see header file
+//---------------------------------------------------------------
+void MsgUnifiedEditorUtils::launchContentViewer(const QString &mimeType, const QString &filePath)
+{
+ if (mimeType.contains(IMAGE_MIMETYPE) || mimeType.contains(AUDIO_MIMETYPE)) {
+ launchViaSharableFile(filePath);
+ }
+ else if (mimeType.contains(VCARD_MIMETYPE, Qt::CaseInsensitive)) {
+ MsgContactsUtil::launchVCardViewer(filePath);
+ }
+}
+
+//---------------------------------------------------------------
+// MsgUnifiedEditorUtils::handleOk
+// @see header file
+//---------------------------------------------------------------
+void MsgUnifiedEditorUtils::handleOk(const QVariant& result)
+{
+ emit requestOk(result);
+}
+
+//---------------------------------------------------------------
+// MsgUnifiedEditorUtils::handleError
+// @see header file
+//---------------------------------------------------------------
+void MsgUnifiedEditorUtils::handleError(int errorCode, const QString& errorMessage)
+{
+ emit requestError(errorCode, errorMessage);
+}
+
+//---------------------------------------------------------------
+// MsgUnifiedEditorUtils::launchViaSharableFile
+// @see header file
+//---------------------------------------------------------------
+void MsgUnifiedEditorUtils::launchViaSharableFile(const QString &filePath)
+{
+ XQSharableFile sf;
+ XQAiwRequest* request = 0;
+
+ if (!sf.open(filePath)) {
+ return;
+ }
+
+ // Get handlers
+ XQApplicationManager appManager;
+ QList<XQAiwInterfaceDescriptor> fileHandlers = appManager.list(sf);
+ if (fileHandlers.count() > 0) {
+ XQAiwInterfaceDescriptor d = fileHandlers.first();
+ request = appManager.create(sf, d);
+
+ if (!request) {
+ sf.close();
+ return;
+ }
+ }
+ else {
+ sf.close();
+ return;
+ }
+
+ // Result handlers
+ connect(request, SIGNAL(requestOk(const QVariant&)), this, SLOT(handleOk(const QVariant&)),
+ Qt::UniqueConnection);
+ connect(request, SIGNAL(requestError(int,const QString&)), this,
+ SLOT(handleError(int,const QString&)), Qt::UniqueConnection);
+
+ request->setEmbedded(true);
+ request->setSynchronous(true);
+
+ // Fill args
+ QList<QVariant> args;
+ args << qVariantFromValue(sf);
+ request->setArguments(args);
+
+ // Fill headers
+ QString key("WindowTitle");
+ QVariant value(QString(LOC_TITLE));
+ XQRequestInfo info;
+ info.setInfo(key, value);
+ request->setInfo(info);
+
+ request->send();
+
+ // Cleanup
+ sf.close();
+ delete request;
+}
+
+//EOF
--- a/messagingapp/msgui/unifiededitor/src/msgunieditorview.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/unifiededitor/src/msgunieditorview.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -49,7 +49,7 @@
#include <qcontactmanager.h>
#include <qversitcontactexporter.h>
#include <cntservicescontact.h>
-
+#include <commonphoneparser.h> // Common phone number validity checker
// USER INCLUDES
#include "debugtraces.h"
@@ -57,11 +57,11 @@
#include "msgunieditoraddress.h"
#include "msgunieditorsubject.h"
#include "msgunieditorbody.h"
-#include "msgmonitor.h"
-#include "msgattachmentcontainer.h"
+#include "msgunieditormonitor.h"
+#include "msgunieditorattachmentcontainer.h"
#include "msgsendutil.h"
#include "convergedmessageaddress.h"
-#include "unieditorgenutils.h"
+#include "UniEditorGenUtils.h"
#include "unieditorpluginloader.h"
#include "unieditorplugininterface.h"
#include "msgsettingsview.h"
@@ -94,26 +94,23 @@
//options menu.
#define LOC_ADD_SUBJECT hbTrId("txt_messaging_opt_add_subject")
#define LOC_ADD_CC_BCC hbTrId("txt_messaging_opt_add_cc_bcc")
-#define LOC_PRIORITY hbTrId("txt_messaging_setlabel_priority")
-#define LOC_SENDING_OPTIONS hbTrId("txt_messaging_opt_sending_options")
+#define LOC_PRIORITY hbTrId("txt_messaging_opt_priority")
#define LOC_DELETE_MESSAGE hbTrId("txt_messaging_opt_delete_message")
//priority sub menu
-#define LOC_HIGH hbTrId("txt_messaging_setlabel_priority_val_high")
-#define LOC_NORMAL hbTrId("txt_messaging_setlabel_priority_val_normal")
-#define LOC_LOW hbTrId("txt_messaging_setlabel_priority_val_low")
+#define LOC_HIGH hbTrId("txt_messaging_opt_attach_sub_high")
+#define LOC_NORMAL hbTrId("txt_messaging_opt_attach_sub_normal")
+#define LOC_LOW hbTrId("txt_messaging_opt_attach_sub_low")
//group box
#define LOC_OTHER_RECIPIENTS(n) hbTrId("txt_messaging_group_title_ln_other_recipients",n)
+#define LOC_OTHER_RECIPIENTS_EXPAND hbTrId("txt_messaging_title_other_recipients")
//saved to draft note
#define LOC_SAVED_TO_DRAFTS hbTrId("txt_messaging_dpopinfo_saved_to_drafts")
//delete confermation
#define LOC_NOTE_DELETE_MESSAGE hbTrId("txt_messaging_dialog_delete_message")
-#define LOC_BUTTON_DELETE hbTrId("txt_common_button_delete")
-#define LOC_BUTTON_CANCEL hbTrId("txt_common_button_cancel")
-#define LOC_DIALOG_OK hbTrId("txt_common_button_ok")
// attachment addition failure note
#define LOC_UNABLE_TO_ADD_ATTACHMENTS hbTrId("txt_messaging_dpopinfo_unable_to_attach_l1_of_l2")
@@ -122,8 +119,8 @@
const QString POPUP_LIST_FRAME("qtg_fr_popup_list_normal");
//settings confirmation
-#define LOC_DIALOG_SMS_SETTINGS_INCOMPLETE hbTrId("txt_messaging_dialog_sms_settings_incomplete")
-#define LOC_DIALOG_MMS_SETTINGS_INCOMPLETE hbTrId("txt_messaging_dialog_mms_settings_incomplete")
+#define LOC_DIALOG_SMS_SETTINGS_INCOMPLETE hbTrId("txt_messaging_dialog_sms_message_centre_does_not_e")
+#define LOC_DIALOG_MMS_SETTINGS_INCOMPLETE hbTrId("txt_messaging_dialog_mms_access_point_not_defined")
// LOCAL FUNCTIONS
//---------------------------------------------------------------
@@ -148,6 +145,7 @@
MsgBaseView(parent),
mSubjectAction(0),
mCcBccAction(0),
+ mSendAction(0),
mMainLayout(0),
mSubjectField(0),
mToField(0),
@@ -201,7 +199,8 @@
mMainLayout->setContentsMargins(0,vTopSpacing,0,0);
mMainLayout->setSpacing(vItemSpacing);
- mMsgMonitor = new MsgMonitor(this);
+ mMsgMonitor = new MsgUnifiedEditorMonitor(this);
+ connect(mMsgMonitor, SIGNAL(enableSend(bool)), this, SLOT(enableSendButton(bool)));
mToField = new MsgUnifiedEditorAddress( LOC_TO, mContentWidget );
@@ -222,6 +221,7 @@
connect(mBody, SIGNAL(contentChanged()),this,SLOT(onContentChanged()));
connect(mBody, SIGNAL(contentChanged()),
mMsgMonitor, SLOT(handleContentChange()));
+ connect(mBody, SIGNAL(enableSendButton(bool)), this, SLOT(enableSendButton(bool)));
}
@@ -253,7 +253,6 @@
HbAction* lowPriorityAction = prioritySubMenu->addAction(LOC_LOW);
lowPriorityAction->setData(ConvergedMessage::Low);
- HbAction* sendOptionsAction = mainMenu->addAction(LOC_SENDING_OPTIONS);
HbAction* deleteMsgAction = mainMenu->addAction(LOC_DELETE_MESSAGE);
connect(mSubjectAction,SIGNAL(triggered()),this, SLOT(addSubject()));
@@ -261,7 +260,6 @@
connect(highPriorityAction, SIGNAL(triggered()), this, SLOT(changePriority()));
connect(normalPriorityAction, SIGNAL(triggered()), this, SLOT(changePriority()));
connect(lowPriorityAction, SIGNAL(triggered()), this, SLOT(changePriority()));
- connect(sendOptionsAction,SIGNAL(triggered()),this, SLOT(sendingOptions()));
connect(deleteMsgAction,SIGNAL(triggered()),this, SLOT(deleteMessage()));
setMenu(mainMenu);
@@ -297,7 +295,7 @@
if( msg != NULL )
{
//Populate the content inside editor
- populateContentIntoEditor(*msg);
+ populateContentIntoEditor(*msg,true); // true as it is draft message
delete msg;
}
@@ -450,7 +448,7 @@
}
void MsgUnifiedEditorView::populateContentIntoEditor(
- const ConvergedMessage& messageDetails)
+ const ConvergedMessage& messageDetails,bool draftMessage)
{
// skip first-time MMS type switch note for draft
mMsgMonitor->setSkipNote(true);
@@ -519,7 +517,7 @@
{
case EMsgMediaImage:
{
- mBody->setImage(filePath);
+ mBody->setImage(filePath,draftMessage);
break;
}
case EMsgMediaAudio:
@@ -560,6 +558,7 @@
attachAction->setIcon(HbIcon(ATTACH_ICON));
mTBExtnContentWidget = new HbListWidget();
+ mTBExtnContentWidget->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Fixed);
mTBExtnContentWidget->addItem(LOC_PHOTO);
mTBExtnContentWidget->addItem(LOC_SOUND);
mTBExtnContentWidget->addItem(LOC_BUSINESS_CARD);
@@ -576,8 +575,8 @@
attachExtension->setContentWidget(mTBExtnContentWidget);
//Add Action to the toolbar and show toolbar
- toolBar->addAction(HbIcon(SEND_ICON),QString(),this,SLOT(send()));
-
+ mSendAction = toolBar->addAction(HbIcon(SEND_ICON),QString(),this,SLOT(send()));
+ mSendAction->setDisabled(true);
setToolBar(toolBar);
}
@@ -657,7 +656,7 @@
groupBox->setSizePolicy(QSizePolicy::Minimum,QSizePolicy::Preferred);
groupBox->setContentWidget(groupWidget);
- groupBox->setHeading(LOC_OTHER_RECIPIENTS(-1));
+ groupBox->setHeading(LOC_OTHER_RECIPIENTS_EXPAND);
mMainLayout->insertItem(1,groupBox);
connect(groupBox, SIGNAL(toggled(bool)), this, SLOT(updateOtherRecipientCount(bool)));
@@ -690,13 +689,16 @@
{
if(!state)
{
- groupBox->setHeading(LOC_OTHER_RECIPIENTS(-1));
+ groupBox->setHeading(LOC_OTHER_RECIPIENTS_EXPAND);
}
else
{
int addrCount = mCcField->addressCount();
addrCount += mBccField->addressCount();
- groupBox->setHeading(LOC_OTHER_RECIPIENTS(addrCount));
+ if(addrCount > 0)
+ {
+ groupBox->setHeading(LOC_OTHER_RECIPIENTS(addrCount));
+ }
}
}
}
@@ -716,14 +718,11 @@
mSubjectField->setPriority(priority);
}
-void MsgUnifiedEditorView::sendingOptions()
-{
-}
-
void MsgUnifiedEditorView::deleteMessage()
{
- HbMessageBox::question(LOC_NOTE_DELETE_MESSAGE,this,SLOT(onDialogDeleteMsg(HbAction*)),
- LOC_BUTTON_DELETE, LOC_BUTTON_CANCEL);
+ HbMessageBox::question(LOC_NOTE_DELETE_MESSAGE,this,
+ SLOT(onDialogDeleteMsg(HbAction*)),
+ HbMessageBox::Delete | HbMessageBox::Cancel);
}
void MsgUnifiedEditorView::removeAttachmentContainer()
@@ -756,6 +755,12 @@
int MsgUnifiedEditorView::addAttachment(const QString& filepath)
{
+ // do nothing if filepath is empty
+ if(filepath.isEmpty())
+ {
+ return MsgAttachmentContainer::EAddSuccess;
+ }
+
if(!mAttachmentContainer)
{
mAttachmentContainer = new MsgAttachmentContainer( mContentWidget);
@@ -797,7 +802,7 @@
// converged msg for sending
ConvergedMessage msg;
- ConvergedMessage::MessageType messageType = MsgMonitor::messageType();
+ ConvergedMessage::MessageType messageType = MsgUnifiedEditorMonitor::messageType();
msg.setMessageType(messageType);
// we need to remove duplicate addresses
@@ -914,16 +919,14 @@
if (messageType == ConvergedMessage::Sms)
{
HbMessageBox::question(LOC_DIALOG_SMS_SETTINGS_INCOMPLETE,
- this,SLOT(onDialogSmsSettings(HbAction*)),
- LOC_DIALOG_OK,
- LOC_BUTTON_CANCEL);
+ this,SLOT(onDialogSmsSettings(HbAction*)),
+ HbMessageBox::Ok | HbMessageBox::Cancel);
}
else
{
HbMessageBox::question(LOC_DIALOG_MMS_SETTINGS_INCOMPLETE,
- this,SLOT(onDialogMmsSettings(HbAction*)),
- LOC_DIALOG_OK,
- LOC_BUTTON_CANCEL);
+ this,SLOT(onDialogMmsSettings(HbAction*)),
+ HbMessageBox::Ok | HbMessageBox::Cancel);
}
}
}
@@ -931,7 +934,7 @@
void MsgUnifiedEditorView::packMessage(ConvergedMessage &msg, bool isSave)
{
- ConvergedMessage::MessageType messageType = MsgMonitor::messageType();
+ ConvergedMessage::MessageType messageType = MsgUnifiedEditorMonitor::messageType();
msg.setMessageType(messageType);
// If isSave is true (save to draft usecase), then don't remove duplicates
// If isSave is false (send usecase), then remove duplicates
@@ -940,7 +943,13 @@
mToField->addresses(removeDuplicates);
ConvergedMessageAddressList ccAddresses;
ConvergedMessageAddressList bccAddresses;
-
+
+ //Don't format the addresses for save to drfats case
+ if(!isSave)
+ {
+ formatAddresses(addresses);
+ }
+
msg.addToRecipients(addresses);
msg.setBodyText(mBody->text());
msg.setDirection(ConvergedMessage::Outgoing);
@@ -999,10 +1008,20 @@
if(ccAddresses.count()>0)
{
+ //Don't format the addresses for save to drfats case
+ if(!isSave)
+ {
+ formatAddresses(ccAddresses);
+ }
msg.addCcRecipients(ccAddresses);
}
if(bccAddresses.count()>0)
{
+ //Don't format the addresses for save to drfats case
+ if(!isSave)
+ {
+ formatAddresses(bccAddresses);
+ }
msg.addBccRecipients(bccAddresses);
}
if(mSubjectField)
@@ -1053,14 +1072,15 @@
}
}
-void MsgUnifiedEditorView::saveContentToDrafts()
+int MsgUnifiedEditorView::saveContentToDrafts()
{
if(!mCanSaveToDrafts)
{
- return;
+ return mOpenedMessageId.getId(); // return currently opened message id
}
+
activateInputBlocker();
- ConvergedMessage::MessageType messageType = MsgMonitor::messageType();
+ ConvergedMessage::MessageType messageType = MsgUnifiedEditorMonitor::messageType();
ConvergedMessageAddressList addresses = mToField->addresses();
@@ -1079,8 +1099,8 @@
if(messageType == ConvergedMessage::Sms &&
addresses.isEmpty() &&
- MsgMonitor::bodySize() <= 0 &&
- MsgMonitor::containerSize() <= 0)
+ MsgUnifiedEditorMonitor::bodySize() <= 0 &&
+ MsgUnifiedEditorMonitor::containerSize() <= 0)
{
if(mOpenedMessageId.getId() != -1)
{
@@ -1089,7 +1109,7 @@
// if empty msg, do not save
deactivateInputBlocker();
- return;
+ return INVALID_MSGID;
}
ConvergedMessageAddressList ccAddresses;
@@ -1113,8 +1133,8 @@
ccAddresses.isEmpty() &&
bccAddresses.isEmpty() &&
subectSize <= 0 &&
- MsgMonitor::bodySize() <= 0 &&
- MsgMonitor::containerSize() <= 0)
+ MsgUnifiedEditorMonitor::bodySize() <= 0 &&
+ MsgUnifiedEditorMonitor::containerSize() <= 0)
{
if(mOpenedMessageId.getId() != -1)
{
@@ -1122,7 +1142,7 @@
}
// if empty msg, do not send
deactivateInputBlocker();
- return;
+ return INVALID_MSGID;
}
ConvergedMessage msg;
packMessage(msg, true);
@@ -1148,6 +1168,7 @@
{
HbNotificationDialog::launchDialog(LOC_SAVED_TO_DRAFTS);
}
+ return msgId;
}
void MsgUnifiedEditorView::resizeEvent( QGraphicsSceneResizeEvent * event )
@@ -1356,11 +1377,12 @@
//---------------------------------------------------------------
void MsgUnifiedEditorView::fetchImages()
{
- QString interface("Image");
- QString operation("fetch(QVariantMap,QVariant)");
+ QString service("photos");
+ QString interface("com.nokia.symbian.IImageFetch");
+ QString operation("fetch()");
XQAiwRequest* request = NULL;
XQApplicationManager appManager;
- request = appManager.create(interface, operation, true);//embedded
+ request = appManager.create(service,interface, operation, true);//embedded
request->setSynchronous(true); // synchronous
if(!request)
{
@@ -1373,11 +1395,6 @@
connect(request, SIGNAL(requestError(int,const QString&)),
this, SLOT(serviceRequestError(int,const QString&)));
- // Set arguments for request
- QList<QVariant> args;
- args << QVariantMap();
- args << QVariant();
- request->setArguments(args);
// Make the request
if (!request->send())
{
@@ -1392,30 +1409,11 @@
//---------------------------------------------------------------
void MsgUnifiedEditorView::fetchAudio()
{
- QString service("musicplayer");
- QString interface("com.nokia.symbian.IMusicFetch");
- QString operation("fetch()");
- XQAiwRequest* request = NULL;
- XQApplicationManager appManager;
- request = appManager.create(service, interface, operation, true); //embedded
- request->setSynchronous(true); // synchronous
- if(!request)
- {
- QCRITICAL_WRITE("AIW-ERROR: NULL request");
- return;
- }
-
- connect(request, SIGNAL(requestOk(const QVariant&)),
- this, SLOT(audiosFetched(const QVariant&)));
- connect(request, SIGNAL(requestError(int,const QString&)),
- this, SLOT(serviceRequestError(int,const QString&)));
-
- // Make the request
- if (!request->send())
- {
- QDEBUG_WRITE_FORMAT("AIW-ERROR: Request Send failed :",request->lastError());
- }
- delete request;
+ // Launch Audio fetcher view
+ QVariantList params;
+ params << MsgBaseView::AUDIOFETCHER; // target view
+ params << MsgBaseView::UNIEDITOR; // source view
+ emit switchView(params);
}
//---------------------------------------------------------------
@@ -1450,24 +1448,6 @@
}
//---------------------------------------------------------------
-// MsgUnifiedEditorView::audiosFetched
-// @see header file
-//---------------------------------------------------------------
-void MsgUnifiedEditorView::audiosFetched(const QVariant& result )
-{
- if(result.canConvert<QStringList>())
- {
- QStringList fileList = result.value<QStringList>();
- if ( fileList.size()>0 && !fileList.at(0).isEmpty())
- {
- QString filepath(QDir::toNativeSeparators(fileList.at(0)));
- QDEBUG_WRITE_FORMAT("Received audio file path = ", fileList.at(0));
- mBody->setAudio(filepath);
- }
- }
-}
-
-//---------------------------------------------------------------
// MsgUnifiedEditorView::serviceRequestError
// @see header file
//---------------------------------------------------------------
@@ -1482,8 +1462,7 @@
//--------------------------------------------------------------
void MsgUnifiedEditorView::activateInputBlocker()
{
- this->grabMouse();
- this->grabKeyboard();
+ mainWindow()->setInteractive(false);
}
//---------------------------------------------------------------
@@ -1491,9 +1470,8 @@
// @see header file
//--------------------------------------------------------------
void MsgUnifiedEditorView::deactivateInputBlocker()
-{
- this->ungrabKeyboard();
- this->ungrabMouse();
+{
+ mainWindow()->setInteractive(true);
}
//---------------------------------------------------------------
@@ -1637,7 +1615,7 @@
}
UniEditorPluginInterface* pluginInterface = mPluginLoader->getUniEditorPlugin(
- MsgMonitor::messageType());
+ MsgUnifiedEditorMonitor::messageType());
pluginInterface->deleteDraftsEntry(mOpenedMessageId.getId());
}
@@ -1684,4 +1662,47 @@
}
}
+//---------------------------------------------------------------
+// MsgUnifiedEditorView::enableSendButton
+// @see header file
+//--------------------------------------------------------------
+void MsgUnifiedEditorView::enableSendButton(bool enable)
+ {
+ if(mSendAction)
+ {
+ // enable/disable based on only if its disabled/enabled.
+ // this check is to avoid unnecessary calls to mSendAction->setEnabled(enable);
+ if(mSendAction->isEnabled() != enable )
+ mSendAction->setEnabled(enable);
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// MsgUnifiedEditorView::formatAddresses
+// @see header
+// ----------------------------------------------------------------------------
+void MsgUnifiedEditorView::formatAddresses(
+ ConvergedMessageAddressList& addresses)
+{
+
+ for(int i=0; i < addresses.count() ;i++ )
+ {
+ QString addr = addresses[i]->address();
+
+ HBufC *tempAddr = XQConversions::qStringToS60Desc(addr);
+
+ TPtr ptr = tempAddr->Des();
+
+ // Note: This is just to parse spaces etc away from phonenumbers.
+ // Ignore EFalse returned for email addresses.
+ CommonPhoneParser::ParsePhoneNumber(ptr ,
+ CommonPhoneParser::ESMSNumber );
+
+ addr = XQConversions::s60DescToQString(tempAddr->Des());
+
+ addresses[i]->setAddress(addr);
+
+ delete tempAddr;
+ }
+}
//EOF
--- a/messagingapp/msgui/unifiededitor/src/msgunifiededitorlineedit.cpp Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,596 +0,0 @@
-/*
- * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of "Eclipse Public License v1.0"
- * which accompanies this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html".
- *
- * Initial Contributors:
- * Nokia Corporation - initial contribution.
- *
- * Contributors:
- *
- * Description:
- *
- */
-
-#include <QGraphicsSceneMouseEvent>
-#include "msgunifiededitorlineedit.h"
-
-const QRegExp expr("[,;\n]$");
-const QRegExp sepAtEnd("; $");
-const QRegExp sepAtMiddle("; ");
-
-const QString replacementStr("; ");
-const QString labelSeperator(": ");
-
-const int fadedAlpha(125);
-const int solidAlpha(255);
-
-const int SNAP_DELAY = 350;
-
-MsgUnifiedEditorLineEdit::MsgUnifiedEditorLineEdit(const QString& label,QGraphicsItem *parent):
-HbLineEdit(parent),
-mSelectionStart(-1),
-mSelectionEnd(-1),
-mDefaultBehaviour(false)
-{
- QString labelStr = label.trimmed();
-
- QTextCursor cursor(this->textCursor());
- QTextCharFormat colorFormat(cursor.charFormat());
-
- QColor fgColor = this->palette().color(QPalette::Text);
- fgColor.setAlpha(fadedAlpha);
- colorFormat.setForeground(fgColor);
- cursor.insertText(labelStr , colorFormat);
-
- fgColor.setAlpha(solidAlpha);
- colorFormat.setForeground(fgColor);
-
- cursor.insertText(" ",colorFormat);
-
- mLabelExpr.setPattern(QString("^"+labelStr+" $"));
- mLabel = labelStr+" ";
-
- connect(this,SIGNAL(selectionChanged(QTextCursor,QTextCursor)),
- this,SLOT(selectionChanged(QTextCursor,QTextCursor)));
- connect(this, SIGNAL(contentsChanged()), this, SLOT(onContentsChanged()));
-}
-
-MsgUnifiedEditorLineEdit::~MsgUnifiedEditorLineEdit()
-{
-}
-
-void MsgUnifiedEditorLineEdit::inputMethodEvent(QInputMethodEvent *event)
-{
- //let it go in default way.
- if(mDefaultBehaviour)
- {
- HbAbstractEdit::inputMethodEvent(event);
- event->accept();
- return;
- }
-
- if (!event->commitString().isEmpty() || event->replacementLength())
- {
- if (event->commitString().contains(expr))
- {
- if(this->text().isEmpty() || this->text().contains(sepAtEnd) || this->text().contains(mLabelExpr))
- {
- event->accept();
- return;
- }
-
- this->setCursorPosition(this->text().length());
-
- QString str = event->commitString();
- str.replace(expr, replacementStr);
-
- event->setCommitString(str, event->replacementStart(), event->replacementLength());
- }
- else if(this->hasSelectedText())
- {// all user inputs get appended at the end
- this->setCursorPosition(this->text().length());
- }
-
- HbAbstractEdit::inputMethodEvent(event);
- event->accept();
- }
-}
-
-void MsgUnifiedEditorLineEdit::keyPressEvent(QKeyEvent *event)
-{
- QString str = event->text();
-
- if(event->key()== Qt::Key_Enter || event->key()== Qt::Key_Return)
- {
- if(mDefaultBehaviour)
- {
- HbAbstractEdit::keyReleaseEvent(event);
- event->accept();
- return;
- }
- if(this->text().isEmpty() || this->text().contains(sepAtEnd) || this->text().contains(mLabelExpr))
- {
- event->accept();
- return;
- }
- this->setCursorPosition(this->text().length());
- str = replacementStr;
- QKeyEvent eve(event->type(), Qt::Key_Any, event->modifiers(), str);
- HbAbstractEdit::keyPressEvent(&eve);
- event->accept();
- return;
- }
-
- if(event->key() == Qt::Key_Backspace || event->key() == Qt::Key_Delete )
- {
- int pos = this->cursorPosition();
- bool pbkContact = true;
-
- if(!this->hasSelectedText())
- {
- this->setCursorPosition(pos-2);
- pbkContact = this->textCursor().charFormat().fontUnderline();
- this->setCursorPosition(pos);
- }
-
- QString text = this->text();
- text = text.left(pos);
-
- if(text.contains(mLabelExpr))
- {
- event->accept();
- return;
- }
-
- if(pbkContact)
- {
- //if already selected delete it.
- if(this->hasSelectedText())
- {
- // deleting phbkContact is an atomic operation
- // ensure that the signal is emitted only once
- disconnect(this, SIGNAL(contentsChanged()),
- this, SLOT(onContentsChanged()));
- HbLineEdit::keyPressEvent(event);
- event->accept();
- //delete seperator (i.e."; ").
- QKeyEvent eve(event->type(), Qt::Key_Delete, Qt::NoModifier);
- HbLineEdit::keyPressEvent(&eve);
- HbLineEdit::keyPressEvent(&eve);
- connect(this, SIGNAL(contentsChanged()),
- this, SLOT(onContentsChanged()));
- onContentsChanged();
- }
- else //make it selected
- {
- this->setCursorPosition(pos-3);
- setHighlight(pos-3);
- }
- }
- else
- {
- QString str = text.right(2);
- if(str == replacementStr)
- {
- // deleting contact is an atomic operation
- // ensure that the signal is emitted only once
- disconnect(this, SIGNAL(contentsChanged()),
- this, SLOT(onContentsChanged()));
- //delete seperator (i.e."; ").
- QKeyEvent eve(event->type(), Qt::Key_Backspace, Qt::NoModifier);
- HbLineEdit::keyPressEvent(&eve);
- HbLineEdit::keyPressEvent(&eve);
- connect(this, SIGNAL(contentsChanged()),
- this, SLOT(onContentsChanged()));
- onContentsChanged();
- }
- else
- {
- HbLineEdit::keyPressEvent(event);
- }
- event->accept();
- }
-
- event->accept();
- return;
- }
-
- if (event->key() == Qt::Key_Left )
- {
- bool selectedText = this->hasSelectedText();
-
- //look ahead left.
- int pos = this->cursorPosition();
-
- QString text = this->text();
- text = text.left(pos);
-
- //no text other than label;
- if(text.contains(mLabelExpr))
- {
- event->accept();
- return;
- }
-
- //look for next seperator while going left.
- int newPos = text.lastIndexOf(sepAtMiddle);
-
- if(newPos < 0 && selectedText)
- {
- event->accept();
- return;
- }
-
- bool pbkContact = true;
-
- if(!selectedText)
- {
- this->setCursorPosition(pos-2);
- pbkContact = this->textCursor().charFormat().fontUnderline();
- this->setCursorPosition(pos);
- }
- else
- {
- this->setCursorPosition(newPos);
- pbkContact = this->textCursor().charFormat().fontUnderline();
- this->setCursorPosition(pos);
- }
-
-
- if(pbkContact && newPos >0)
- {
-
- setHighlight(newPos-1);
- }
- else
- {
- //move left, char by char. if seperator met jump over it.
- if( (newPos > 0 && selectedText) || (pos-2 == newPos))
- {
- this->setCursorPosition(newPos+1);
- }
-
- HbLineEdit::keyPressEvent(event);
-
- }
- event->accept();
- return;
- }
-
- if (event->key() == Qt::Key_Right)
- {
- bool selectedText = this->hasSelectedText();
-
- //look ahead.
- int pos = this->cursorPosition();
- this->setCursorPosition(pos+3);
- bool pbkContact = this->textCursor().charFormat().fontUnderline();
- this->setCursorPosition(pos);
-
- //look for next seperator.
- QString text = this->text();
- int newPos = text.indexOf(sepAtMiddle,pos+2);
-
- if(pbkContact && newPos >0)
- {
- this->setCursorPosition(newPos-1);
- setHighlight(newPos-1);
- }
- else
- {
- int seperatorPos = text.indexOf(sepAtMiddle,pos);
-
- if(selectedText || seperatorPos == pos)
- {
- this->setCursorPosition(pos+1);
- this->deselect();
- }
- HbAbstractEdit::keyPressEvent(event);
- }
- event->accept();
- return;
- }
-
- if(!str.isEmpty())
- {
- if(mDefaultBehaviour)
- {
- HbAbstractEdit::keyPressEvent(event);
- event->accept();
- return;
- }
- if (str.contains(expr))
- {
- if(this->text().isEmpty() || this->text().contains(sepAtEnd) || this->text().contains(mLabelExpr))
- {
- event->accept();
- return;
- }
-
- // auto-complete the last incomplete word
- int contentLength = this->text().length();
- int pos = this->cursorPosition();
- QString incompleteWord(this->text().right(contentLength-(pos-1)));
- if(!incompleteWord.contains(sepAtMiddle))
- {
- this->setCursorPosition(this->text().length());
- }
-
- str.replace(expr, replacementStr);
- QKeyEvent eve(event->type(), event->key(), event->modifiers(), str);
- HbAbstractEdit::keyPressEvent(&eve);
- }
- else
- {
- HbAbstractEdit::keyPressEvent(event);
- event->accept();
- return;
- }
- }
-}
-
-void MsgUnifiedEditorLineEdit::mouseReleaseEvent(QGraphicsSceneMouseEvent* event)
-{
- HbAbstractEdit::mouseReleaseEvent(event);
-
- int currentPos = this->cursorPosition();
-
- QString txt = this->text();
-
- QString tempTxt = txt.left(currentPos+2);
- int seperatorPos = tempTxt.lastIndexOf(sepAtMiddle,currentPos);
-
- txt = txt.right(txt.length() - currentPos);
- int labelPos = txt.indexOf(labelSeperator);
-
- if(labelPos >= 0 )//pressed on label.
- {
- this->setCursorPosition(currentPos + labelPos + 2);
- }
- else if(seperatorPos == currentPos-1 || seperatorPos == currentPos)//pressed just on seperator.
- {
- this->setCursorPosition(seperatorPos+2);
- }
- else
- {
- this->setCursorPosition(currentPos+1);
- bool pbkContact = this->textCursor().charFormat().fontUnderline();
- if(pbkContact)
- {
- setHighlight(currentPos);
- }
- }
-
- this->update();
- event->accept();
-}
-
-void MsgUnifiedEditorLineEdit::setText(const QString& text, bool underlined)
-{
-
- if(!mDefaultBehaviour)
- {
- // atomic operation, ensure one signal only at the end
- disconnect(this, SIGNAL(contentsChanged()), this, SLOT(onContentsChanged()));
-
- //make sure previous text is complete.
- if(this->content().length() > 0)
- {
- QInputMethodEvent e;
- e.setCommitString(";");
- this->inputMethodEvent(&e);
- }
- this->setCursorPosition(this->text().length());
-
- QTextCursor cursor(this->textCursor());
- QTextCharFormat colorFormat(cursor.charFormat());
- if(underlined)
- {
- QColor fgColor = colorFormat.foreground().color();
- fgColor.setAlpha(fadedAlpha);
- colorFormat.setUnderlineColor(fgColor);
- colorFormat.setFontUnderline(true);
- }
- cursor.insertText(text , colorFormat);
- colorFormat.setFontUnderline(false);
-
- cursor.insertText(replacementStr,colorFormat);
- connect(this, SIGNAL(contentsChanged()), this, SLOT(onContentsChanged()));
- onContentsChanged();
- }
- else
- {
- this->setCursorPosition(this->text().length());
- QTextCursor cursor(this->textCursor());
- cursor.insertText(text);
- }
-}
-
-QStringList MsgUnifiedEditorLineEdit::addresses()
-{
- QString text = this->content();
- QStringList list = text.split(replacementStr,QString::SkipEmptyParts);
- return list;
-}
-
-void MsgUnifiedEditorLineEdit::focusInEvent(QFocusEvent* event)
-{
- HbLineEdit::focusInEvent(event);
- this->setCursorVisibility(Hb::TextCursorVisible);
-}
-
-void MsgUnifiedEditorLineEdit::focusOutEvent(QFocusEvent* event)
-{
- HbLineEdit::focusOutEvent(event);
- this->setCursorVisibility(Hb::TextCursorHidden);
-}
-
-void MsgUnifiedEditorLineEdit::setHighlight(int currentPos)
-{
- QString txt = this->text();
-
- int endPos = qMax(txt.indexOf(sepAtMiddle,currentPos),
- txt.indexOf(labelSeperator,currentPos));
-
- int startPos = qMax(txt.lastIndexOf(sepAtMiddle,currentPos),
- txt.lastIndexOf(labelSeperator,currentPos));
-
- disconnect(this,SIGNAL(selectionChanged(QTextCursor,QTextCursor)),
- this,SLOT(selectionChanged(QTextCursor,QTextCursor)));
-
- //highlight if pbk contact.
- if(startPos > 0 && endPos > 0 && startPos != endPos)
- {
- this->setSelection(startPos + 2, endPos - startPos - 2);
- this->update();
- }
- else
- {
- this->deselect();
- }
-
- this->update();
-
- connect(this,SIGNAL(selectionChanged(QTextCursor,QTextCursor)),
- this,SLOT(selectionChanged(QTextCursor,QTextCursor)));
-}
-
-void MsgUnifiedEditorLineEdit::cut()
-{
- HbLineEdit::cut();
- //after cut delete seperator (i.e."; ").
- QKeyEvent eve(QEvent::KeyPress, Qt::Key_Delete, Qt::NoModifier);
- HbLineEdit::keyPressEvent(&eve);
- HbLineEdit::keyPressEvent(&eve);
-}
-
-void MsgUnifiedEditorLineEdit::selectAll()
-{
- //don't allow user to select every thing.
- //do nothing.
-}
-
-void MsgUnifiedEditorLineEdit::selectionChanged(const QTextCursor &oldCursor, const QTextCursor& newCursor)
-{
-
- if(mSelectionSnapTimer.isActive())
- {
- mSelectionSnapTimer.stop();
- }
-
- if(newCursor.selectionStart() < mLabel.length())
- {
- this->setTextCursor(oldCursor);
- return;
- }
-
- if(!mDefaultBehaviour)
- {
- mSelectionStart = newCursor.selectionStart();
- mSelectionEnd = newCursor.selectionEnd();
-
- if(mSelectionStart == mSelectionEnd )
- {
- return;
- }
-
- mSelectionSnapTimer.start(SNAP_DELAY,this);
- }
-}
-
-void MsgUnifiedEditorLineEdit::timerEvent(QTimerEvent *event)
-{
- //passing event to base class.
- HbLineEdit::timerEvent(event);
-
- if (event->timerId() == mSelectionSnapTimer.timerId())
- {
- mSelectionSnapTimer.stop();
-
- disconnect(this,SIGNAL(selectionChanged(QTextCursor,QTextCursor)),
- this,SLOT(selectionChanged(QTextCursor,QTextCursor)));
-
- QString txt = this->text();
-
- int startPos = qMax(txt.lastIndexOf(sepAtMiddle,mSelectionStart),
- txt.lastIndexOf(labelSeperator,mSelectionStart));
-
- int endPos = qMax(txt.indexOf(sepAtMiddle,mSelectionEnd),
- txt.indexOf(labelSeperator,mSelectionEnd));
-
- if(endPos < 0 )
- {
- endPos = mSelectionEnd;
- }
-
- this->setSelection(startPos + 2, endPos - startPos - 2);
-
- connect(this,SIGNAL(selectionChanged(QTextCursor,QTextCursor)),
- this,SLOT(selectionChanged(QTextCursor,QTextCursor)));
-
- event->accept();
- }
-}
-
-void MsgUnifiedEditorLineEdit::setDefaultBehaviour(bool defaultBehaviour)
-{
- mDefaultBehaviour = defaultBehaviour;
-}
-
-QString MsgUnifiedEditorLineEdit::text() const
-{
- return HbLineEdit::text();
-}
-
-QString MsgUnifiedEditorLineEdit::content() const
-{
- QString text = this->text();
- text.remove(mLabel);
- return text;
-}
-
-void MsgUnifiedEditorLineEdit::clearContent()
-{
- // avoid getting updates during local editing
- disconnect(this, SIGNAL(contentsChanged()), this, SLOT(onContentsChanged()));
-
- int startPos = mLabel.length();
- this->setSelection(startPos, content().length());
- QKeyEvent eve(QEvent::KeyPress, Qt::Key_Backspace, Qt::NoModifier);
- this->keyPressEvent(&eve);
- this->deselect();
-
- // re-connect signal to start getting updates
- connect(this, SIGNAL(contentsChanged()), this, SLOT(onContentsChanged()));
-}
-
-void MsgUnifiedEditorLineEdit::onContentsChanged()
-{
- emit contentsChanged(content());
-}
-
-void MsgUnifiedEditorLineEdit::highlightInvalidString(QString invalidStr)
-{
- // for only address editor
- if(!mDefaultBehaviour)
- {
- QString txtContent = this->text();
- int searchStartPos = mLabel.length();
- int startPos = txtContent.indexOf(invalidStr, searchStartPos);
- disconnect(this,SIGNAL(selectionChanged(QTextCursor,QTextCursor)),
- this,SLOT(selectionChanged(QTextCursor,QTextCursor)));
- // if invalidStr found
- if(startPos > 0)
- {
- this->setSelection(startPos, invalidStr.length());
- }
- connect(this,SIGNAL(selectionChanged(QTextCursor,QTextCursor)),
- this,SLOT(selectionChanged(QTextCursor,QTextCursor)));
- }
-}
-
-// eof
--- a/messagingapp/msgui/unifiededitor/unifiededitor.pro Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/unifiededitor/unifiededitor.pro Thu Jul 22 16:32:06 2010 +0100
@@ -26,12 +26,12 @@
INCLUDEPATH += ../msguiutils/inc
INCLUDEPATH += ../../msgutils/unieditorutils/editorgenutils/inc
INCLUDEPATH += ../../msgutils/unidatautils/unidatamodelloader/inc
-INCLUDEPATH += ../../msgutils/s60qconversions/inc
INCLUDEPATH += ../../msgsettings/settingsview/inc
INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
CONFIG += hb
+HB += hbfeedback
TARGET.EPOCALLOWDLLDATA = 1
TARGET.CAPABILITY = All -TCB
@@ -44,38 +44,52 @@
BLD_INF_RULES.prj_exports += "$${LITERAL_HASH}include <platform_paths.hrh>" \
"rom/unifiededitor.iby CORE_APP_LAYER_IBY_EXPORT_PATH(unifiededitor.iby)"
+defBlock = \
+ "$${LITERAL_HASH}if defined(EABI)" \
+ "DEFFILE ../eabi/unifiededitor.def" \
+ "$${LITERAL_HASH}else" \
+ "DEFFILE ../bwins/unifiededitor.def" \
+ "$${LITERAL_HASH}endif"
+
+MMP_RULES += defBlock
+
# Input
-HEADERS += msgmonitor.h \
+HEADERS += msgunieditormonitor.h \
msgunieditoraddress.h \
msgunieditorattachment.h \
msgunieditorbody.h \
msgunieditorsubject.h \
msgunieditorview.h \
- msgunifiededitorlineedit.h \
- msgattachmentcontainer.h \
+ msgunieditorlineedit.h \
+ msgunieditorattachmentcontainer.h \
msgbaseview.h \
msgunieditorimageprocessor.h \
msgunieditorprocessimageoperation.h \
- msgunifiededitorbasewidget.h
+ msgunieditorbasewidget.h \
+ msgunieditorpixmapwidget.h \
+ msgunieditorutils.h \
+ msgunieditoraudiowidget.h
-SOURCES += msgmonitor.inl \
- msgmonitor.cpp \
+SOURCES += msgunieditormonitor.inl \
+ msgunieditormonitor.cpp \
msgunieditoraddress.cpp \
msgunieditorattachment.cpp \
msgunieditorbody.cpp \
msgunieditorsubject.cpp \
msgunieditorview.cpp \
- msgunifiededitorlineedit.cpp \
- msgattachmentcontainer.cpp \
+ msgunieditorlineedit.cpp \
+ msgunieditorattachmentcontainer.cpp \
msgunieditorimageprocessor.inl \
msgunieditorimageprocessor.cpp \
- msgunieditorprocessimageoperation.cpp
+ msgunieditorprocessimageoperation.cpp \
+ msgunieditorpixmapwidget.cpp \
+ msgunieditorutils.cpp \
+ msgunieditoraudiowidget.cpp
RESOURCES += unifiededitor.qrc
# Libs
-LIBS += -ls60qconversions \
- -lconvergedmessageutils \
+LIBS += -lconvergedmessageutils \
-lmsguiutils \
-lunieditorpluginloader \
-leditorgenutils \
@@ -94,7 +108,7 @@
-lgsmu \
-lsmcm \
-lxqserviceutil \
- -lcommonengine
-
+ -lcommonengine \
+ -lefsrv
\ No newline at end of file
--- a/messagingapp/msgui/unifiededitor/unifiededitor.qrc Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/unifiededitor/unifiededitor.qrc Thu Jul 22 16:32:06 2010 +0100
@@ -11,5 +11,6 @@
<file alias="msgunifiededitorbody.widgetml">resources/layouts/msgunifiededitorbody.widgetml</file>
<file alias="msgunifiededitorsubject.css">resources/layouts/msgunifiededitorsubject.css</file>
<file alias="msgunifiededitorsubject.widgetml">resources/layouts/msgunifiededitorsubject.widgetml</file>
+ <file alias="msgunifiededitorattachment_color.css">resources/layouts/msgunifiededitorattachment_color.css</file>
</qresource>
</RCC>
--- a/messagingapp/msgui/unifiedviewer/inc/unifiedviewer.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/unifiedviewer/inc/unifiedviewer.h Thu Jul 22 16:32:06 2010 +0100
@@ -46,7 +46,9 @@
/**
* Constructor
*/
- UnifiedViewer(const qint32 messageId, QGraphicsItem *parent = 0);
+ UnifiedViewer(const qint32 messageId,
+ int canForwardMessage = 0,
+ QGraphicsItem *parent = 0);
/**
* Destructor
@@ -73,13 +75,7 @@
* @see HbView
*/
void createToolBar();
-
- /**
- * Validates if message can be forwarded
- * @return true if message can be forwarded
- * false if message cant be forwarded
- */
- bool validateMsgForForward();
+
public slots:
@@ -143,6 +139,11 @@
* Message count
*/
int mMsgCount;
+
+ /**
+ * Forward status of message
+ */
+ bool mForwardMessage;
};
#endif
--- a/messagingapp/msgui/unifiedviewer/inc/unihighlighter.h Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of "Eclipse Public License v1.0"
- * which accompanies this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html".
- *
- * Initial Contributors:
- * Nokia Corporation - initial contribution.
- *
- * Contributors:
- *
- * Description: Enables parsing and change font parameters for email/url
- *
- */
-
-#ifndef UNI_HIGHLIGHTER_H
-#define UNI_HIGHLIGHTER_H
-
-#include <QSyntaxHighlighter>
-#include <QHash>
-#include <QTextCharFormat>
-
-QT_BEGIN_NAMESPACE
-class QTextDocument;
-QT_END_NAMESPACE
-
-/**
- * Enables parsing and change font parameters for email/url
- */
-class UniHighlighter : public QSyntaxHighlighter
-{
-Q_OBJECT
-
-public:
- /*
- * Constructor
- */
- UniHighlighter(QTextDocument *parent = 0);
-
-protected:
- /*
- * highlightBlock
- * @see QSyntaxHighlighter
- */
- void highlightBlock(const QString &text);
-
-private:
-
- struct HighlightingRule
- {
- QRegExp pattern;
- QTextCharFormat format;
- };
- QVector<HighlightingRule> highlightingRules;
-
- QTextCharFormat emailFormat;
- QTextCharFormat urlFormat;
-};
-
-#endif //UNI_HIGHLIGHTER_H
-// EOF
--- a/messagingapp/msgui/unifiedviewer/inc/univieweraddresscontainer.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/unifiedviewer/inc/univieweraddresscontainer.h Thu Jul 22 16:32:06 2010 +0100
@@ -66,6 +66,12 @@
void setCcField(ConvergedMessageAddressList ccRecipients);
/**
+ * Sets Bcc recipients
+ * @param bccRecipients list of Bcc recipients
+ */
+ void setBccField(ConvergedMessageAddressList bccRecipients);
+
+ /**
* Clears the content of the widget
*/
void clearContent();
--- a/messagingapp/msgui/unifiedviewer/inc/univieweraddresswidget.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/unifiedviewer/inc/univieweraddresswidget.h Thu Jul 22 16:32:06 2010 +0100
@@ -60,16 +60,10 @@
void clearContent();
protected:
-
/**
- * called when mouse is pressed.
+ * Gesture event, overridden from base class.
*/
- void mousePressEvent(QGraphicsSceneMouseEvent *event);
-
- /**
- * called when mouse is released.
- */
- void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
+ void gestureEvent(QGestureEvent* event);
private:
/**
@@ -106,14 +100,18 @@
*/
void menuClosed();
- //handlers for phone number specific menu items.
+ /**
+ * handlers for phone number specific menu items.
+ */
void openContactInfo();
void call();
void saveToContacts();
void sendMessage();
void copyToClipboard();
- //called after service request is completed.
+ /**
+ * called after service request is completed.
+ */
void onServiceRequestCompleted();
/**
--- a/messagingapp/msgui/unifiedviewer/inc/univiewerattachmentcontainer.h Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,83 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: This holds all the attachments inside convergedmessage
-*
-*/
-
-#ifndef UNIVIEWERATTACHMENTCONTAINER_H
-#define UNIVIEWERATTACHMENTCONTAINER_H
-
-// SYSTEM INCLUDES
-#include <HbWidget>
-#include <QList>
-
-// FORWARD DECLARATIONS
-class QGraphicsLinearLayout;
-class UniViewerMediaWidget;
-
-//const int MAX_ATTACHMENT = 10;
-
-/**
- * Container widget for all attachment inside message
- */
-
-class UniViewerAttachmentContainer: public HbWidget
-{
-Q_OBJECT
-
-public:
-
- /**
- * Constructor
- */
- explicit UniViewerAttachmentContainer(QGraphicsItem *parent = 0);
-
- /**
- * Destructor
- */
- virtual ~UniViewerAttachmentContainer();
-
- /**
- * Add one more attachment into the widget
- */
- void addAttachmentWidget(QString type, QString fileName);
-
- /**
- * Clears the content of the widget
- */
- void clearContent();
-
-private:
-
- /**
- * This contains total number of attacmnets added
- */
- int mTotalAttachment;
-
- /**
- * Main layout reference.
- * Own
- */
- QGraphicsLinearLayout *mMainLayout;
-
- /**
- * From widget reference.
- * Own
- */
- QList<UniViewerMediaWidget *> mUniViewerMediaWidgetList;
-
-};
-
-#endif // UNIVIEWERATTACHMENTCONTAINER_H
-//eof
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/unifiedviewer/inc/univiewerattachmentwidget.h Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,161 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: Widget for displaying attachment media objects.
+ *
+ */
+
+#ifndef UNI_VIEWER_ATTACHMENT_WIDGET_H
+#define UNI_VIEWER_ATTACHMENT_WIDGET_H
+
+// SYSTEM INCLUDES
+#include <HbWidget>
+
+// FORWARD DECLARATIONS
+class HbTextItem;
+class HbIconItem;
+class HbIcon;
+class HbFrameItem;
+class UniViewerUtils;
+class UniMessageInfo;
+
+/**
+ * @class UniViewerAttachmentWidget
+ * @brief Widget for displaying attachment media objects.
+ */
+class UniViewerAttachmentWidget: public HbWidget
+{
+Q_OBJECT
+
+public:
+
+ /**
+ * Constructor
+ */
+ explicit UniViewerAttachmentWidget(QGraphicsItem *parent = 0);
+
+ /**
+ * Destructor
+ */
+ virtual ~UniViewerAttachmentWidget();
+
+ /**
+ * Populates the widget contents.
+ * @param info Object information.
+ */
+ void populate(UniMessageInfo *info);
+
+signals:
+
+ /**
+ * Signal emitted when widget is clicked.
+ * @param mediaPath File path of the media.
+ */
+ void shortTap(const QString &mediaPath);
+
+ /**
+ * Signal emitted when widget is long tapped.
+ * @param position Scene coordinates of tap.
+ */
+ void longTap(const QPointF &position);
+
+protected:
+
+ /**
+ * Event handler for gesture events.
+ * Reimplemented from HbWidgetBase.
+ * @see HbWidgetBase
+ */
+ virtual void gestureEvent(QGestureEvent *event);
+
+private slots:
+
+ /**
+ * Handles opening of media.
+ */
+ void handleOpen();
+
+ /**
+ * Handles saving of media.
+ */
+ void handleSave();
+
+ /**
+ * Slot to regrab gesture after some delay (300 ms) to avoid multiple gesture
+ * events back to back.
+ */
+ void regrabGesture();
+
+private:
+
+ /**
+ * Handles short tap event.
+ */
+ void handleShortTap();
+
+ /**
+ * Handles long tap event.
+ * @param position Scene coordinates of tap.
+ */
+ void handleLongTap(const QPointF &position);
+
+ /**
+ * Handles pressed state.
+ */
+ void setPressed(bool pressed);
+
+private:
+
+ /**
+ * Media icon item.
+ * Own
+ */
+ HbIconItem *mMediaIcon;
+
+ /**
+ * Media name text item.
+ * Own
+ */
+ HbTextItem *mName;
+
+ /**
+ * Media information text item.
+ * Own
+ */
+ HbTextItem *mInfo;
+
+ /**
+ * Background item of widget.
+ * Own
+ */
+ HbFrameItem *mFrameItem;
+
+ /**
+ * UniViewerUtils object.
+ * Own
+ */
+ UniViewerUtils *mViewerUtils;
+
+ /**
+ * Media file path.
+ */
+ QString mMediaPath;
+
+ /**
+ * Mime type of media.
+ */
+ QString mMimeType;
+};
+
+#endif // UNI_VIEWER_ATTACHMENT_WIDGET_H
+// EOF
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/unifiedviewer/inc/univieweraudiowidget.h Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,116 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: This widget is used to display audio content in univiewer.
+ *
+ */
+
+#ifndef UNI_VIEWER_AUDIO_WIDGET_H
+#define UNI_VIEWER_AUDIO_WIDGET_H
+
+// FORWARD DECLARATIONS
+class UniViewerUtils;
+class UniMessageInfo;
+
+#include <HbPushButton>
+
+/**
+ * @class UniViewerAudioWidget
+ * @brief This widget is used to display audio content in univiewer.
+ */
+class UniViewerAudioWidget: public HbPushButton
+{
+Q_OBJECT
+
+public:
+
+ /**
+ * Constructor
+ */
+ explicit UniViewerAudioWidget(QGraphicsItem *parent = 0);
+
+ /**
+ * Destructor
+ */
+ ~UniViewerAudioWidget();
+
+ /**
+ * Populates the widget contents.
+ * @param info Object information.
+ */
+ void populate(UniMessageInfo *info);
+
+signals:
+
+ /**
+ * Signal emitted when widget is clicked.
+ * @param mediaPath File path of the media.
+ */
+ void shortTap(const QString &mediaPath);
+
+ /**
+ * Signal emitted when widget is long tapped.
+ * @param position Scene coordinates of tap.
+ */
+ void longTap(const QPointF &position);
+
+private slots:
+
+ /**
+ * Handles short tap event.
+ */
+ void handleShortTap();
+
+ /**
+ * Handles long tap event.
+ * @param position Scene coordinates of tap.
+ */
+ void handleLongTap(const QPointF &position);
+
+ /**
+ * Handles opening of media.
+ */
+ void handleOpen();
+
+ /**
+ * Handles saving of media.
+ */
+ void handleSave();
+
+ /**
+ * Slot to regrab gesture after some delay (300 ms) to avoid multiple gesture
+ * events back to back.
+ */
+ void regrabGesture();
+
+private:
+
+ /**
+ * UniViewerUtils object.
+ * Own
+ */
+ UniViewerUtils *mViewerUtils;
+
+ /**
+ * Media file path.
+ */
+ QString mMediaPath;
+
+ /**
+ * Mime type of media.
+ */
+ QString mMimeType;
+};
+
+#endif //UNI_VIEWER_AUDIO_WIDGET_H
+// EOF
--- a/messagingapp/msgui/unifiedviewer/inc/univiewerbodywidget.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/unifiedviewer/inc/univiewerbodywidget.h Thu Jul 22 16:32:06 2010 +0100
@@ -24,13 +24,12 @@
class UniViewerTextItem;
class UniViewerPixmapWidget;
+class UniViewerAudioWidget;
class HbTextItem;
-class HbPushButton;
-//class HbGestureSceneFilter;
-class QSignalMapper;
/**
- * This widget displays the body of the viewer
+ * @class UniViewerBodyWidget
+ * @brief This widget displays the body of the viewer.
*/
class UniViewerBodyWidget: public HbWidget
{
@@ -55,27 +54,27 @@
/**
* Called to insert image content in viewer.
- * @param medialist list of absolute paths of media.
+ * @param info Object information.
*/
- void setPixmap(QString pixmapFile);
+ void setPixmap(UniMessageInfo *info);
/**
* Called to insert audio content in viewer.
- * @param medialist list of absolute paths of media.
+ * @param info Object information.
*/
- void setAudio(QString audiofile);
+ void setAudio(UniMessageInfo *info);
/**
* Called to insert video content in viewer.
- * @param medialist list of absolute paths of media.
+ * @param info Object information.
*/
- void setVideo(QString videofile);
+ void setVideo(UniMessageInfo *info);
/**
* Called to insert text content in viewer.
* @param text Body text to be set.
*/
- void setTextContent(QString text);
+ void setText(QString text);
/**
* Sets the slide counter.
@@ -127,38 +126,6 @@
*/
QSizeF sizeHint(Qt::SizeHint which, const QSizeF & constraint = QSizeF()) const;
-private slots:
-
- /**
- * called on long press on the media objects
- */
- void longPressed(QPointF position);
-
- /**
- * called from the media object's item specific menu
- */
- void openMedia();
-
- /**
- * Open a specified media file
- */
- void openMedia(const QString& fileName);
-
- /**
- * called from the media object's item specific menu
- */
- void saveMedia();
-
- /**
- * Service launch complete.
- */
- void handleOk(const QVariant& result);
-
- /**
- * Service launch errors.
- */
- void handleError(int errorCode, const QString& errorMessage);
-
signals:
/**
* this signal is emitted when sendMessage is emitted from UniViewerTextItem.
@@ -196,17 +163,7 @@
/**
* Media widget for embedded audio content.
*/
- HbPushButton *mAudioItem;
-
- /**
- * To setup longpress gesture on media objects
- */
- // HbGestureSceneFilter* gestureFilter;
-
- /**
- * File mapper for opening media
- */
- QSignalMapper* mSignalMapper;
+ UniViewerAudioWidget *mAudioItem;
};
#endif //UNIVIEWER_BODY_WIDGET_H
--- a/messagingapp/msgui/unifiedviewer/inc/univiewerfeeder.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/unifiedviewer/inc/univiewerfeeder.h Thu Jul 22 16:32:06 2010 +0100
@@ -126,15 +126,25 @@
* toAddressList
* @return list of to address list
*/
-
ConvergedMessageAddressList toAddressList();
/**
* ccAddressList
* @return list of cc address list
*/
+ ConvergedMessageAddressList ccAddressList();
- ConvergedMessageAddressList ccAddressList();
+ /**
+ * bccAddressList
+ * @return list of Bcc address list
+ */
+ ConvergedMessageAddressList bccAddressList();
+
+ /**
+ * recipientCount
+ * @return Total recipient count
+ */
+ int recipientCount();
/**
* messageSize
--- a/messagingapp/msgui/unifiedviewer/inc/univiewerfeeder_p.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/unifiedviewer/inc/univiewerfeeder_p.h Thu Jul 22 16:32:06 2010 +0100
@@ -131,11 +131,23 @@
* @return list of cc address list
*/
ConvergedMessageAddressList ccAddressList();
+
+ /**
+ * bccAddressList
+ * @return list of Bcc address list
+ */
+ ConvergedMessageAddressList bccAddressList();
+
+ /**
+ * Finds total recipient count
+ * @return total recipient count
+ */
+ int recipientCount();
+
/**
* messageSize
* @return int
*/
-
int messageSize();
/**
@@ -232,8 +244,13 @@
* owned.
*/
ConvergedMessageAddressList mCcAddressList;
-
-
+
+ /**
+ * CC address list
+ * owned.
+ */
+ ConvergedMessageAddressList mBccAddressList;
+
/**
* Msv Session.
* not Owned.
--- a/messagingapp/msgui/unifiedviewer/inc/univiewerheadercontainer.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/unifiedviewer/inc/univiewerheadercontainer.h Thu Jul 22 16:32:06 2010 +0100
@@ -27,8 +27,8 @@
class HbGroupBox;
class HbFrameItem;
class UniViewerAddressContainer;
-class UniViewerAttachmentContainer;
class UniViewerFeeder;
+class UniViewerAttachmentWidget;
class UniViewerHeaderContainer: public HbWidget
{
@@ -136,10 +136,9 @@
UniViewerAddressContainer *mAddressContainer;
/**
- * UniViewerAttachmentContainer object
- * owned.
+ * List of attachment widgets.
*/
- UniViewerAttachmentContainer *mAttachmentContainer;
+ QList<UniViewerAttachmentWidget *> mUniViewerAttachmentstList;
};
#endif /* UNIVIEWER_HEADER_CONTAINER_H */
--- a/messagingapp/msgui/unifiedviewer/inc/univiewermediawidget.h Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,104 +0,0 @@
-/*
- * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of "Eclipse Public License v1.0"
- * which accompanies this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html".
- *
- * Initial Contributors:
- * Nokia Corporation - initial contribution.
- *
- * Contributors:
- *
- * Description:
- *
- */
-
-#ifndef UNIVIEWERMEDIAWIDGET_H
-#define UNIVIEWERMEDIAWIDGET_H
-
-// SYSTEM INCLUDES
-#include <HbWidget>
-
-// FORWARD DECLARATIONS
-class HbTextItem;
-class HbIconItem;
-class HbIcon;
-class HbPushButton;
-
-/**
- * Widget for displaying inline media objects.
- */
-class UniViewerMediaWidget : public HbWidget
-{
- Q_OBJECT
-
-public:
-
- /**
- * Constructor
- */
- explicit UniViewerMediaWidget(QGraphicsItem *parent = 0);
-
- /**
- * Destructor
- */
- virtual ~UniViewerMediaWidget();
-
- /**
- * Initialize method
- */
- void init();
-
- /**
- * Populates the widget contents.
- * @param icon Media icon name.
- * @param name Media file name.
- * @param info Media information.
- * @param bgFrame Background frame.
- */
- void populate(const QString &icon, const QString &name,
- const QString &info, const QString &bgFrame);
-
- /**
- * Clears the contents of the widget.
- */
- void clearContent();
-
-signals:
-
- /**
- * Signal emitted when widget is clicked.
- */
- void clicked();
-
-private:
-
- /**
- * Media icon item.
- * Own
- */
- HbIconItem *mMediaIcon;
-
- /**
- * Media name text item.
- * Own
- */
- HbTextItem *mName;
-
- /**
- * Media information text item.
- * Own
- */
- HbTextItem *mInfo;
-
- /**
- * Background item of widget.
- * Own
- */
- HbPushButton *mFrameItem;
-};
-
-#endif // UNIVIEWERMEDIAWIDGET_H
-// EOF
--- a/messagingapp/msgui/unifiedviewer/inc/univiewerpixmapwidget.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/unifiedviewer/inc/univiewerpixmapwidget.h Thu Jul 22 16:32:06 2010 +0100
@@ -20,6 +20,12 @@
#include <HbIconItem>
+// FORWARD DECLARATIONS
+class UniViewerUtils;
+class UniMessageInfo;
+class ThumbnailManager;
+
+
/**
* This widget displays the pixmap content in viewer.
*/
@@ -41,17 +47,23 @@
/**
* Sets the pixmap content to be displayed.
- * @param pixmapPath File path of the pixmap.
+ * @param info Object information.
*/
- void setPixmap(const QString &pixmapPath);
+ void populate(UniMessageInfo *info);
signals:
/**
- * Signal emitted for short tap on pixmap.
- * @param pixmapPath File path of the pixmap being clicked.
+ * Signal emitted when widget is clicked.
+ * @param mediaPath File path of the media.
*/
- void shortTap(const QString &pixmapPath);
+ void shortTap(const QString &mediaPath);
+
+ /**
+ * Signal emitted when widget is long tapped.
+ * @param position Scene coordinates of tap.
+ */
+ void longTap(const QPointF &position);
protected:
@@ -62,12 +74,70 @@
*/
virtual void gestureEvent(QGestureEvent *event);
+private slots:
+
+ /**
+ *
+ */
+ void handleOpen();
+
+ /**
+ *
+ */
+ void handleSave();
+
+ /**
+ * Slot to regrab gesture after some delay (300 ms) to avoid multiple gesture
+ * events back to back.
+ */
+ void regrabGesture();
+
+ /**
+ * Slot hit when the thumbnail is ready.
+ */
+ void thumbnailReady(const QPixmap& pixmap, void *data, int id, int error);
+
private:
/**
+ * Initialization function.
+ */
+ void init();
+
+ /**
+ * Handles short tap event.
+ */
+ void handleShortTap();
+
+ /**
+ * Handles long tap event.
+ * @param position Scene coordinates of tap.
+ */
+ void handleLongTap(const QPointF &position);
+
+private:
+
+ /**
+ * UniViewerUtils object.
+ * Own
+ */
+ UniViewerUtils *mViewerUtils;
+
+ /**
+ * ThumbnailManager
+ * Own.
+ */
+ ThumbnailManager *mThumbnailManager;
+
+ /**
+ * Mime Type of pixmap.
+ */
+ QString mMimeType;
+
+ /**
* Pixmap file path being set.
*/
- QString mPixmapFile;
+ QString mPixmapPath;
};
#endif /* UNI_VIEWER_PIXMAP_WIDGET_H */
--- a/messagingapp/msgui/unifiedviewer/inc/univiewertextitem.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/unifiedviewer/inc/univiewertextitem.h Thu Jul 22 16:32:06 2010 +0100
@@ -32,8 +32,10 @@
void setText(const QString& text);
protected:
- void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
- void mousePressEvent(QGraphicsSceneMouseEvent *event);
+ /**
+ * Gesture event, overridden from base class.
+ */
+ void gestureEvent(QGestureEvent* event);
private:
@@ -54,8 +56,9 @@
/**
* short tap handler.
* @param anchor anchor at cursor position.
+ * @param pos tapping position
*/
- void shortTapAction(QString anchor);
+ void handleShortTap(QString anchor,const QPointF& pos);
/**
* Helper method to highlight find item on tap.
@@ -75,18 +78,26 @@
void menuClosed();
- //handlers for phone number specific menu items.
+ /**
+ * handlers for phone number specific menu items.
+ */
void call();
void sendMessage();
- //handlers for e-mail specific menu items.
+ /**
+ * handlers for e-mail specific menu items.
+ */
void createEmail();
- //handlers for url specific menu items.
+ /**
+ * handlers for url specific menu items.
+ */
void openLink();
void addToBookmarks();
- //common handlers.
+ /**
+ * common handlers.
+ */
void openContactInfo();
void saveToContacts();
void copyToClipboard();
@@ -105,7 +116,9 @@
*/
void handleError(int errorCode, const QString& errorMessage);
- //called after service request is completed.
+ /**
+ * called after service request is completed.
+ */
void onServiceRequestCompleted();
signals:
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/unifiedviewer/inc/univiewerutils.h Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: Utility class for univiewer.
+ *
+ */
+
+#ifndef UNI_VIEWER_UTILS_H
+#define UNI_VIEWER_UTILS_H
+
+// SYSTEM INCLUDES
+#include <QObject>
+
+// FORWARD DECLARATIONS
+
+/**
+ * @class UniViewerUtils
+ * @brief Utility class for univiewer. Contains common functionality required
+ * for widgets.
+ */
+
+class UniViewerUtils: public QObject
+{
+Q_OBJECT
+
+public:
+
+ /**
+ * Constructor
+ */
+ explicit UniViewerUtils(QObject *parent = 0);
+
+ /**
+ * Destructor
+ */
+ virtual ~UniViewerUtils();
+
+ /**
+ * Utility function to launch different content viewers.
+ * @param mimeType Mime type of the content.
+ * @param filePath Absolute file path of content.
+ */
+ void launchContentViewer(const QString &mimeType, const QString &filePath);
+
+signals:
+
+ /**
+ * Service launch complete.
+ */
+ void requestOk(const QVariant& result);
+
+ /**
+ * Service launch errors.
+ */
+ void requestError(int errorCode, const QString& errorMessage);
+
+private slots:
+
+ /**
+ * Service launch complete.
+ */
+ void handleOk(const QVariant& result);
+
+ /**
+ * Service launch errors.
+ */
+ void handleError(int errorCode, const QString& errorMessage);
+
+private:
+
+ /**
+ * Launch content viewer using XQSharableFile.
+ * @param filePath Absolute path of content.
+ */
+ void launchViaSharableFile(const QString &filePath);
+
+};
+
+#endif // UNI_VIEWER_UTILS_H
+//eof
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/unifiedviewer/resources/layouts/univiewerattachmentwidget.css Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,45 @@
+
+UniViewerAttachmentWidget
+{
+ layout: layout-default;
+}
+
+UniViewerAttachmentWidget::mediaIcon
+{
+ left:-var(hb-param-margin-gene-left);
+ top:-var(hb-param-margin-gene-top);
+ bottom:var(hb-param-margin-gene-bottom) ;
+ aspect-ratio:ignore;
+ size-policy:fixed fixed;
+ pref-width:var(hb-param-graphic-size-primary-small);
+ pref-height:var(hb-param-graphic-size-primary-small);
+}
+
+UniViewerAttachmentWidget::text-1
+{
+ left:-var(hb-param-margin-gene-middle-horizontal);
+ right:var(hb-param-margin-gene-middle-horizontal);
+ center-vertical:0un;
+ text-height:var(hb-param-text-height-secondary);
+ font-variant:secondary;
+ text-line-count-min:1;
+ text-line-count-max:1;
+}
+
+UniViewerAttachmentWidget::text-2
+{
+ left:-var(hb-param-margin-gene-middle-horizontal);
+ right:var(hb-param-margin-gene-right);
+ center-vertical:0un;
+ size-policy-horizontal:fixed;
+ font-variant:secondary;
+ text-height:var(hb-param-text-height-tiny);
+ text-line-count-min:1;
+ text-line-count-max:1;
+}
+
+UniViewerAttachmentWidget::bgFrame
+{
+ zvalue:-1;
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/unifiedviewer/resources/layouts/univiewerattachmentwidget.widgetml Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,20 @@
+<hbwidget version="0.1">
+ <layout name="layout-default" type="mesh">
+ <meshitem src="mediaIcon" srcEdge="LEFT" dst="" dstEdge="LEFT" />
+ <meshitem src="mediaIcon" srcEdge="TOP" dst="" dstEdge="TOP" />
+ <meshitem src="mediaIcon" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" />
+
+ <meshitem src="text-1" srcEdge="LEFT" dst="mediaIcon" dstEdge="RIGHT"/>
+ <meshitem src="text-1" srcEdge="RIGHT" dst="text-2" dstEdge="LEFT"/>
+ <meshitem src="text-1" srcEdge="CENTERV" dst="" dstEdge="CENTERV"/>
+
+ <meshitem src="text-2" srcEdge="LEFT" dst="text-1" dstEdge="RIGHT"/>
+ <meshitem src="text-2" srcEdge="RIGHT" dst="" dstEdge="RIGHT"/>
+ <meshitem src="text-2" srcEdge="CENTERV" dst="" dstEdge="CENTERV"/>
+
+ <meshitem src="bgFrame" srcEdge="LEFT" dst="" dstEdge="LEFT"/>
+ <meshitem src="bgFrame" srcEdge="TOP" dst="" dstEdge="TOP"/>
+ <meshitem src="bgFrame" srcEdge="RIGHT" dst="" dstEdge="RIGHT"/>
+ <meshitem src="bgFrame" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM"/>
+ </layout>
+</hbwidget>
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/unifiedviewer/resources/layouts/univiewerattachmentwidget_color.css Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,20 @@
+
+UniViewerAttachmentWidget[state="normal"]::text-1
+{
+ color:var(qtc_list_item_title_normal);
+}
+
+UniViewerAttachmentWidget[state="pressed"]::text-1
+{
+ color:var(qtc_list_item_pressed);
+}
+
+UniViewerAttachmentWidget[state="normal"]::text-2
+{
+ color:var(qtc_list_item_title_normal);
+}
+
+UniViewerAttachmentWidget[state="pressed"]::text-2
+{
+ color:var(qtc_list_item_pressed);
+}
--- a/messagingapp/msgui/unifiedviewer/resources/layouts/univiewermediawidget.css Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-
-UniViewerMediaWidget
-{
- layout: layout-default;
-}
-
-UniViewerMediaWidget::mediaIcon
-{
- left:-var(hb-param-margin-gene-left);
- top:-var(hb-param-margin-gene-top);
- bottom:var(hb-param-margin-gene-bottom) ;
- aspect-ratio:ignore;
- size-policy:fixed fixed;
- pref-width:var(hb-param-graphic-size-primary-small);
- pref-height:var(hb-param-graphic-size-primary-small);
-}
-
-UniViewerMediaWidget::text-1
-{
- left:-var(hb-param-margin-gene-middle-horizontal);
- right:var(hb-param-margin-gene-middle-horizontal);
- center-vertical:0un;
- text-height:var(hb-param-text-height-secondary);
- font-variant:secondary;
- text-line-count-min:1;
- text-line-count-max:1;
-}
-
-UniViewerMediaWidget::text-2
-{
- left:-var(hb-param-margin-gene-middle-horizontal);
- right:var(hb-param-margin-gene-right);
- center-vertical:0un;
- size-policy-horizontal:fixed;
- font-variant:secondary;
- text-height:var(hb-param-text-height-tiny);
- text-line-count-min:1;
- text-line-count-max:1;
-}
-
-UniViewerMediaWidget::bgFrame
-{
- zvalue:-1;
-}
-
--- a/messagingapp/msgui/unifiedviewer/resources/layouts/univiewermediawidget.widgetml Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-<hbwidget version="0.1">
- <layout name="layout-default" type="mesh">
- <meshitem src="mediaIcon" srcEdge="LEFT" dst="" dstEdge="LEFT" />
- <meshitem src="mediaIcon" srcEdge="TOP" dst="" dstEdge="TOP" />
- <meshitem src="mediaIcon" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" />
-
- <meshitem src="text-1" srcEdge="LEFT" dst="mediaIcon" dstEdge="RIGHT"/>
- <meshitem src="text-1" srcEdge="RIGHT" dst="text-2" dstEdge="LEFT"/>
- <meshitem src="text-1" srcEdge="CENTERV" dst="" dstEdge="CENTERV"/>
-
- <meshitem src="text-2" srcEdge="LEFT" dst="text-1" dstEdge="RIGHT"/>
- <meshitem src="text-2" srcEdge="RIGHT" dst="" dstEdge="RIGHT"/>
- <meshitem src="text-2" srcEdge="CENTERV" dst="" dstEdge="CENTERV"/>
-
- <meshitem src="bgFrame" srcEdge="LEFT" dst="" dstEdge="LEFT"/>
- <meshitem src="bgFrame" srcEdge="TOP" dst="" dstEdge="TOP"/>
- <meshitem src="bgFrame" srcEdge="RIGHT" dst="" dstEdge="RIGHT"/>
- <meshitem src="bgFrame" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM"/>
- </layout>
-</hbwidget>
\ No newline at end of file
--- a/messagingapp/msgui/unifiedviewer/resources/layouts/univiewermediawidget_color.css Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,10 +0,0 @@
-
-UniViewerMediaWidget::text-1
-{
- color:var(qtc_list_item_title_normal);
-}
-
-UniViewerMediaWidget::text-2
-{
- color:var(qtc_list_item_title_normal);
-}
\ No newline at end of file
--- a/messagingapp/msgui/unifiedviewer/src/unifiedviewer.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/unifiedviewer/src/unifiedviewer.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -38,8 +38,6 @@
#include "conversationsengine.h"
#include "debugtraces.h"
#include "nativemessageconsts.h"
-#include "mmsconformancecheck.h"
-#include "UniEditorGenUtils.h" // This is needed for KDefaultMaxSize
// LOCAL CONSTANTS
const QString REPLY_ICON("qtg_mono_reply");
@@ -50,15 +48,15 @@
//LOCALIZED CONSTANTS
#define LOC_DELETE_MESSAGE hbTrId("txt_messaging_dialog_delete_message")
-#define LOC_BUTTON_DELETE hbTrId("txt_common_button_delete")
-#define LOC_BUTTON_CANCEL hbTrId("txt_common_button_cancel")
//----------------------------------------------------------------------------
// UnifiedViewer::UnifiedViewer
// constructor
//----------------------------------------------------------------------------
-UnifiedViewer::UnifiedViewer(const qint32 messageId, QGraphicsItem *parent) :
- MsgBaseView(parent)
+UnifiedViewer::UnifiedViewer(const qint32 messageId,
+ int canForwardMessage,
+ QGraphicsItem *parent) :
+ MsgBaseView(parent), mForwardMessage(false)
{
QDEBUG_WRITE("UnifiedViewer contruction start");
@@ -70,6 +68,8 @@
mMessageId = messageId;
mViewFeeder = new UniViewerFeeder(mMessageId, this);
+ if (canForwardMessage > 0) mForwardMessage = true;
+
mScrollArea = new UniScrollArea(this);
this->setWidget(mScrollArea);
@@ -115,10 +115,14 @@
else
{
toolbar->addAction(HbIcon(REPLY_ICON), "");
- toolbar->addAction(HbIcon(REPLY_ALL_ICON), "");
+
+ if (mViewFeeder->recipientCount() > 1)
+ {
+ toolbar->addAction(HbIcon(REPLY_ALL_ICON), "");
+ }
}
- if (validateMsgForForward())
+ if (mForwardMessage)
{
toolbar->addAction(HbIcon(FORWARD_ICON), "", this, SLOT(handleFwdAction()));
}
@@ -232,9 +236,9 @@
//---------------------------------------------------------------
void UnifiedViewer::handleDeleteAction()
{
- HbMessageBox::question(LOC_DELETE_MESSAGE,this,SLOT(onDialogDeleteMsg(HbAction*)),
- LOC_BUTTON_DELETE,
- LOC_BUTTON_CANCEL);
+ HbMessageBox::question(LOC_DELETE_MESSAGE,this,
+ SLOT(onDialogDeleteMsg(HbAction*)),
+ HbMessageBox::Delete | HbMessageBox::Cancel);
}
//---------------------------------------------------------------
@@ -265,27 +269,6 @@
}
//---------------------------------------------------------------
-// UnifiedViewer::validateMsgForForward
-// @see header file
-//---------------------------------------------------------------
-bool UnifiedViewer::validateMsgForForward()
-{
- if (mViewFeeder->msgType() == KSenduiMtmMmsUidValue)
- {
- bool retValue = false;
-
- //Validate if the mms msg can be forwarded or not
- MmsConformanceCheck* mmsConformanceCheck = new MmsConformanceCheck;
- retValue = mmsConformanceCheck->validateMsgForForward(mMessageId);
-
- delete mmsConformanceCheck;
- return retValue;
- }
-
- return true;
-}
-
-//---------------------------------------------------------------
// UnifiedViewer::onDialogDeleteMsg
// @see header file
//---------------------------------------------------------------
--- a/messagingapp/msgui/unifiedviewer/src/unihighlighter.cpp Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of "Eclipse Public License v1.0"
- * which accompanies this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html".
- *
- * Initial Contributors:
- * Nokia Corporation - initial contribution.
- *
- * Contributors:
- *
- * Description: Enables parsing and change font parameters for email/url
- *
- */
-#include "unihighlighter.h"
-
-#include <QtGui>
-
-//---------------------------------------------------------------
-//UniHighlighter :: UniHighlighter
-// @see header file
-//---------------------------------------------------------------
-UniHighlighter::UniHighlighter(QTextDocument *parent) :
- QSyntaxHighlighter(parent)
-{
- HighlightingRule rule;
-
- emailFormat.setFontWeight(QFont::Bold);
- rule.pattern = QRegExp(
- "\\b[a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4}\\b");
- rule.format = emailFormat;
- highlightingRules.append(rule);
-
- urlFormat.setAnchor(true);
- urlFormat.setFontUnderline(true);
- rule.pattern
- = QRegExp(
- "\\b((https?|ftp|gopher|telnet|file|notes|ms-help):((//)|(\\\\))+[\\w\\d:#@%/;$()~_?\\+-=\\\\.&]*)\\b");
- rule.format = urlFormat;
- highlightingRules.append(rule);
-}
-
-//---------------------------------------------------------------
-//UniHighlighter :: highlightBlock
-// @see header file
-//---------------------------------------------------------------
-void UniHighlighter::highlightBlock(const QString &text)
-{
- foreach (const HighlightingRule &rule, highlightingRules)
- {
- QRegExp expression(rule.pattern);
- int index = text.indexOf(expression);
- while (index >= 0)
- {
- int length = expression.matchedLength();
- setFormat(index, length, rule.format);
- index = text.indexOf(expression, index + length);
- }
- }
-}
-
-// EOF
--- a/messagingapp/msgui/unifiedviewer/src/univieweraddresscontainer.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/unifiedviewer/src/univieweraddresscontainer.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -99,4 +99,20 @@
ccWidget->populate(LOC_CC, ccRecipients);
}
+//---------------------------------------------------------------
+// UniViewerAddressContainer :: setBccField
+// @see header file
+//---------------------------------------------------------------
+void UniViewerAddressContainer::setBccField(ConvergedMessageAddressList bccRecipients)
+{
+ UniViewerAddressWidget* bccWidget = new UniViewerAddressWidget();
+
+ connect(bccWidget, SIGNAL(sendMessage(const QString&,const QString&)), this,
+ SIGNAL(sendMessage(const QString&,const QString&)));
+
+ mMainLayout->addItem(bccWidget);
+
+ bccWidget->populate(LOC_BCC, bccRecipients);
+}
+
// EOF
--- a/messagingapp/msgui/unifiedviewer/src/univieweraddresswidget.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/unifiedviewer/src/univieweraddresswidget.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -20,26 +20,22 @@
// SYSTEM INCLUDES
#include <QTextCursor>
-#include <HbMenu>
-#include <QGraphicsSceneMouseEvent>
-#include <HbAction>
-#include <HbFrameItem>
#include <QTextBlock>
#include <QApplication>
-#include <QClipBoard>
+#include <QClipboard>
+
+#include <HbMenu>
+#include <HbAction>
+#include <HbTapGesture>
+
#include <xqservicerequest.h>
-
#include <xqappmgr.h>
#include <cntservicescontact.h>
#include <qtcontacts.h>
-#include <XQServiceRequest.h>
+#include <xqservicerequest.h>
#include <xqaiwrequest.h>
#include "msgcontacthandler.h"
-
-
-
-
// LOCAL CONSTANTS
const QString ADDRESS_SEPARATOR("; ");
const QString ADDRESS_OPEN(" (");
@@ -63,11 +59,11 @@
HbTextEdit(parent),
mCursorPos(-1)
{
- this->setReadOnly(true);
- this->setCursorVisibility(Hb::TextCursorHidden);
+ this->setReadOnly(true);
this->setScrollable(false);
- HbFrameItem *noBackground = new HbFrameItem(this);
- this->setBackgroundItem(noBackground);
+ this->setFlag(QGraphicsItem::ItemIsFocusable,false);
+ this->setCursorVisibility(Hb::TextCursorHidden);
+ this->setBackgroundItem(0);
HbFontSpec fontSpec(HbFontSpec::Secondary);
QFont font = fontSpec.font();
@@ -92,37 +88,71 @@
}
//---------------------------------------------------------------
-//UniViewerAddressWidget :: mousePressEvent
+//UniViewerAddressWidget :: gestureEvent
// @see header file
//---------------------------------------------------------------
-void UniViewerAddressWidget::mousePressEvent(QGraphicsSceneMouseEvent *event)
+void UniViewerAddressWidget::gestureEvent(QGestureEvent* event)
{
- HbTextEdit::mousePressEvent(event);
-
- QTextDocument* doc = this->document();
-
- mCursorPos = doc->documentLayout()->hitTest(event->pos(), Qt::ExactHit);
-
- highlightText(true);
+ //handle gesture to highlight and dehighlight find item.
+
+ if(HbTapGesture *tap = qobject_cast<HbTapGesture*>(event->gesture(Qt::TapGesture)))
+ {
+ //capturing gesture position, and map to local co-ordinates.
+ QPointF pos = mapFromScene(tap->scenePosition());
+
+ switch (tap->state())
+ {
+ case Qt::GestureStarted:
+ {
+ //highlight find item.
+ QTextDocument* doc = this->document();
+ mCursorPos = doc->documentLayout()->hitTest(pos, Qt::ExactHit);
+ highlightText(true);
+ break;
+ }
+
+ case Qt::GestureFinished:
+ {
+ if (HbTapGesture::Tap == tap->tapStyleHint())
+ {
+ //gesture is finshed dehighlight text.
+ highlightText(false);
+
+ QString anchor = this->anchorAt(pos);
+
+ //do short tap action.
+ if (!anchor.isEmpty() && !this->textCursor().hasSelection())
+ {
+ shortTapAction(anchor);
+ }
+ }
+ break;
+ }
+
+ case Qt::GestureCanceled:
+ {
+ //gesture is canceled due to pan or swipe, dehighlight text.
+ if (HbTapGesture::Tap == tap->tapStyleHint())
+ {
+ highlightText(false);
+ break;
+ }
+ }
+ default:
+ break;
+ }
+
+ event->accept();
+ }
+ else
+ {
+ event->ignore();
+ }
+
+ //passing gesture event to base class.
+ HbTextEdit::gestureEvent(event);
}
-//---------------------------------------------------------------
-//UniViewerAddressWidget :: mouseReleaseEvent
-// @see header file
-//---------------------------------------------------------------
-void UniViewerAddressWidget::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
-{
- HbTextEdit::mouseReleaseEvent(event);
-
- highlightText(false);
-
- QString anchor = this->anchorAt(event->pos());
-
- if(!anchor.isEmpty() && !this->textCursor().hasSelection())
- {
- shortTapAction(anchor);
- }
-}
//----------------------------------------------------------------------------
// UniViewerAddressWidget::populate
@@ -372,7 +402,7 @@
QString phoneNumber = action->data().toString();
//invoke dialer service and pass phoneNumber.
- QString serviceName("com.nokia.services.telephony");
+ QString serviceName("com.nokia.symbian.ICallDial");
QString operation("dial(QString)");
XQServiceRequest* serviceRequest = new XQServiceRequest(serviceName,operation,false);
@@ -416,6 +446,16 @@
QContactPhoneNumber::DefinitionName,
QContactPhoneNumber::FieldNumber);
+ // if contact is unresolved on phone number field
+ // then, try resolving it on email address field
+ if(contactId <= 0)
+ {
+ contactId = MsgContactHandler::resolveContactDisplayName(
+ data,
+ QContactEmailAddress::DefinitionName,
+ QContactEmailAddress::FieldEmailAddress);
+ }
+
if(contactId > 0)
{
//open contact card
--- a/messagingapp/msgui/unifiedviewer/src/univiewerattachmentcontainer.cpp Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,103 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-
-#include "univiewerattachmentcontainer.h"
-
-// SYSTEM INCLUDES
-#include <QGraphicsLinearLayout>
-#include <QFileInfo>
-
-// USER INCLUDES
-#include "univiewermediawidget.h"
-#include "debugtraces.h"
-
-// LOCAL CONSTANTS
-const QString ATTACHMENT_FRAME("qtg_fr_groupbox");
-const QString ATTACHMENT_ICON("qtg_small_attachment.svg");
-
-const int KILOBYTE = 1024;
-
-//---------------------------------------------------------------
-// UniViewerAttachmentContainer :: UniViewerAttachmentContainer
-// @see header file
-//---------------------------------------------------------------
-UniViewerAttachmentContainer::UniViewerAttachmentContainer(QGraphicsItem *parent) :
- HbWidget(parent), mTotalAttachment(0), mMainLayout(NULL)
-{
- QDEBUG_WRITE("AttachmentContainer Initialized..");
- mMainLayout = new QGraphicsLinearLayout(Qt::Vertical);
- mMainLayout->setContentsMargins(0, 0, 0, 0);
- mMainLayout->setSpacing(0);
- setLayout(mMainLayout);
-}
-
-//---------------------------------------------------------------
-// UniViewerAttachmentContainer :: ~UniViewerAttachmentContainer
-// @see header file
-//---------------------------------------------------------------
-UniViewerAttachmentContainer::~UniViewerAttachmentContainer()
-{
-
-}
-
-//---------------------------------------------------------------
-// UniViewerAttachmentContainer :: addAttachmentWidget
-// @see header file
-//---------------------------------------------------------------
-void UniViewerAttachmentContainer::addAttachmentWidget(QString type, QString fileName)
-{
- Q_UNUSED(type)
-
- UniViewerMediaWidget *attachmentWidget = new UniViewerMediaWidget(this);
- mUniViewerMediaWidgetList.append(attachmentWidget);
- QFileInfo fileInfo(fileName);
-
- int fileSize = fileInfo.size();
- QString sizeString('B');
- if (fileSize > KILOBYTE) {
- // Convert to Kilobytes.
- fileSize /= KILOBYTE;
- sizeString = "Kb";
- }
-
- QString fileDetails = "(" + QString::number(fileSize) + sizeString + ")";
-
- attachmentWidget->populate(ATTACHMENT_ICON, fileInfo.fileName(), fileDetails, ATTACHMENT_FRAME);
-
- mMainLayout->addItem(attachmentWidget);
-
- mTotalAttachment++;
-}
-
-//---------------------------------------------------------------
-// UniViewerAttachmentContainer :: clearContent
-// @see header file
-//---------------------------------------------------------------
-void UniViewerAttachmentContainer::clearContent()
-{
- for (int i = 0; i < mUniViewerMediaWidgetList.count(); ++i) {
- --mTotalAttachment;
- mMainLayout->removeItem(mUniViewerMediaWidgetList[i]);
- mUniViewerMediaWidgetList[i]->setParent(NULL);
- delete mUniViewerMediaWidgetList[i];
- mUniViewerMediaWidgetList[i] = NULL;
- }
- mUniViewerMediaWidgetList.clear();
- resize(rect().width(), -1);
-}
-
-//eof
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/unifiedviewer/src/univiewerattachmentwidget.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,259 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: Widget for displaying attachment media objects.
+ *
+ */
+
+#include "univiewerattachmentwidget.h"
+
+// SYSTEM INCLUDES
+#include <HbIconItem>
+#include <HbTextItem>
+#include <HbFrameItem>
+#include <HbMenu>
+#include <HbEffect>
+#include <HbTapGesture>
+#include <HbInstantFeedback>
+
+#include <QFileInfo>
+#include <QTimer>
+
+// USER INCLUDES
+#include "univiewerutils.h"
+#include "unidatamodelplugininterface.h"
+
+// LOCAL CONSTANTS
+#define LOC_OPEN hbTrId("txt_common_menu_open")
+#define LOC_SAVE hbTrId("txt_common_menu_save")
+#define LOC_SAVE_TO_CONTACTS hbTrId("txt_messaging_menu_save_to_contacts")
+
+const QString BG_FRAME_NORMAL("qtg_fr_list_normal");
+const QString BG_FRAME_PRESSED("qtg_fr_list_pressed");
+const QString ATTACHMENT_ICON("qtg_small_attachment");
+const QString CORRUPTED_ATTACH_ICON("qtg_small_corrupted");
+const QString VCARD_MIMETYPE("text/X-vCard");
+
+const int KILOBYTE = 1024;
+
+//----------------------------------------------------------------------------
+// UniViewerAttachmentWidget::UniViewerAttachmentWidget
+// @see header file
+//----------------------------------------------------------------------------
+UniViewerAttachmentWidget::UniViewerAttachmentWidget(QGraphicsItem *parent) :
+ HbWidget(parent), mMediaIcon(0), mName(0), mInfo(0), mFrameItem(0), mViewerUtils(0)
+{
+ this->grabGesture(Qt::TapGesture);
+
+ setProperty("state", "normal");
+
+ mMediaIcon = new HbIconItem(this);
+ HbStyle::setItemName(mMediaIcon, "mediaIcon");
+
+ mName = new HbTextItem(this);
+ HbStyle::setItemName(mName, "text-1");
+
+ mInfo = new HbTextItem(this);
+ HbStyle::setItemName(mInfo, "text-2");
+
+ mFrameItem = new HbFrameItem(BG_FRAME_NORMAL, HbFrameDrawer::NinePieces, this);
+ HbStyle::setItemName(mFrameItem, "bgFrame");
+
+ HbEffect::add("attachmentWidget", "listviewitem_press", "pressed");
+ HbEffect::add("attachmentWidget", "listviewitem_release", "released");
+}
+
+//----------------------------------------------------------------------------
+// UniViewerAttachmentWidget::~UniViewerAttachmentWidget
+// @see header file
+//----------------------------------------------------------------------------
+UniViewerAttachmentWidget::~UniViewerAttachmentWidget()
+{
+}
+
+//----------------------------------------------------------------------------
+// UniViewerAttachmentWidget::populate
+// @see header file
+//----------------------------------------------------------------------------
+void UniViewerAttachmentWidget::populate(UniMessageInfo *info)
+{
+ mMimeType = info->mimetype();
+ mMediaPath = info->path();
+
+ QString attachIcon;
+ if (info->isProtected()) {
+ attachIcon = ATTACHMENT_ICON;
+ }
+ else if (info->isCorrupted()) {
+ attachIcon = CORRUPTED_ATTACH_ICON;
+ }
+ else {
+ attachIcon = ATTACHMENT_ICON;
+ }
+
+ mMediaIcon->setIconName(attachIcon);
+ QFileInfo fileInfo(mMediaPath);
+ mName->setText(fileInfo.fileName());
+
+ QString sizeString('B');
+ int fileSize = fileInfo.size();
+ if (fileSize > KILOBYTE) {
+ // Convert to Kilobytes.
+ fileSize /= KILOBYTE;
+ sizeString = "Kb";
+ }
+ QString fileDetails = "(" + QString::number(fileSize) + sizeString + ")";
+ mInfo->setText(fileDetails);
+}
+
+//----------------------------------------------------------------------------
+// UniViewerAttachmentWidget::resizeEvent
+// @see header file
+//----------------------------------------------------------------------------
+void UniViewerAttachmentWidget::gestureEvent(QGestureEvent *event)
+{
+ HbTapGesture *tapGesture = qobject_cast<HbTapGesture*> (event->gesture(Qt::TapGesture));
+ if (tapGesture) {
+ switch (tapGesture->state()) {
+ case Qt::GestureStarted:
+ {
+ // Trigger haptic feedback.
+ HbInstantFeedback::play(HbFeedback::Basic);
+ setPressed(true);
+ break;
+ }
+ case Qt::GestureUpdated:
+ {
+ if (HbTapGesture::TapAndHold == tapGesture->tapStyleHint()) {
+ // Handle longtap.
+ setPressed(false);
+ handleLongTap(tapGesture->scenePosition());
+ }
+ break;
+ }
+ case Qt::GestureFinished:
+ {
+ HbInstantFeedback::play(HbFeedback::Basic);
+ if (HbTapGesture::Tap == tapGesture->tapStyleHint()) {
+ // Handle short tap.
+ setPressed(false);
+ handleShortTap();
+ }
+ break;
+ }
+ case Qt::GestureCanceled:
+ {
+ HbInstantFeedback::play(HbFeedback::Basic);
+ setPressed(false);
+ break;
+ }
+ }
+ }
+ else {
+ HbWidget::gestureEvent(event);
+ }
+}
+
+//----------------------------------------------------------------------------
+// UniViewerAttachmentWidget::handleOpen
+// @see header file
+//----------------------------------------------------------------------------
+void UniViewerAttachmentWidget::handleOpen()
+{
+ this->ungrabGesture(Qt::TapGesture);
+
+ if (!mViewerUtils) {
+ mViewerUtils = new UniViewerUtils(this);
+ }
+ mViewerUtils->launchContentViewer(mMimeType, mMediaPath);
+
+ //fire timer to regrab gesture after some delay.
+ QTimer::singleShot(300,this,SLOT(regrabGesture()));
+}
+
+//----------------------------------------------------------------------------
+// UniViewerAttachmentWidget::handleSave
+// @see header file
+//----------------------------------------------------------------------------
+void UniViewerAttachmentWidget::handleSave()
+{
+
+}
+
+//----------------------------------------------------------------------------
+// UniViewerAttachmentWidget::handleShortTap
+// @see header file
+//----------------------------------------------------------------------------
+void UniViewerAttachmentWidget::handleShortTap()
+{
+ emit shortTap(mMediaPath);
+
+ // Open the media.
+ handleOpen();
+}
+
+//----------------------------------------------------------------------------
+// UniViewerAttachmentWidget::handleLongTap
+// @see header file
+//----------------------------------------------------------------------------
+void UniViewerAttachmentWidget::handleLongTap(const QPointF &position)
+{
+ emit longTap(position);
+
+ // Display context sensitive menu.
+ HbMenu* menu = new HbMenu;
+ menu->setAttribute(Qt::WA_DeleteOnClose);
+ menu->setPreferredPos(position);
+
+ if (mMimeType.contains(VCARD_MIMETYPE, Qt::CaseInsensitive)) {
+ // For vcard opening & saving is same.
+ menu->addAction(LOC_SAVE_TO_CONTACTS, this, SLOT(handleOpen()));
+ }
+ else {
+ menu->addAction(LOC_OPEN, this, SLOT(handleOpen()));
+ menu->addAction(LOC_SAVE, this, SLOT(handleSave()));
+ }
+
+ menu->show();
+}
+
+//----------------------------------------------------------------------------
+// UniViewerAttachmentWidget::setPressed
+// @see header file
+//----------------------------------------------------------------------------
+void UniViewerAttachmentWidget::setPressed(bool pressed)
+{
+ if (pressed) {
+ setProperty("state", "pressed");
+ mFrameItem->frameDrawer().setFrameGraphicsName(BG_FRAME_PRESSED);
+ HbEffect::cancel(mFrameItem, "released");
+ HbEffect::start(mFrameItem, "attachmentWidget", "pressed");
+
+ }
+ else {
+ setProperty("state", "normal");
+ mFrameItem->frameDrawer().setFrameGraphicsName(BG_FRAME_NORMAL);
+ HbEffect::cancel(mFrameItem, "pressed");
+ HbEffect::start(mFrameItem, "attachmentWidget", "released");
+ }
+}
+
+//---------------------------------------------------------------
+// UniViewerAttachmentWidget::regrabGesture
+// @see header file
+//---------------------------------------------------------------
+void UniViewerAttachmentWidget::regrabGesture()
+{
+ this->grabGesture(Qt::TapGesture);
+}
+// EOF
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/unifiedviewer/src/univieweraudiowidget.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,146 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: This widget is used to display audio content in univiewer.
+ *
+ */
+#include "univieweraudiowidget.h"
+
+// SYSTEM INCLUDES
+#include <QFileInfo>
+#include <QTimer>
+#include <HbMenu>
+
+// USER INCLUDES
+#include "msgmediautil.h"
+#include "univiewerutils.h"
+#include "unidatamodelplugininterface.h"
+
+// LOCAL CONSTANTS
+#define LOC_OPEN hbTrId("txt_common_menu_open")
+#define LOC_SAVE hbTrId("txt_common_menu_save")
+
+const QString AUDIO_ICON("qtg_mono_audio");
+const QString CORRUPTED_AUDIO_ICON("qtg_mono_corrupted");
+
+//----------------------------------------------------------------------------
+// UniViewerAudioWidget::UniViewerAudioWidget
+// @see header file
+//----------------------------------------------------------------------------
+UniViewerAudioWidget::UniViewerAudioWidget(QGraphicsItem *parent) :
+ HbPushButton(parent), mViewerUtils(0)
+{
+ connect(this, SIGNAL(clicked()), this, SLOT(handleShortTap()));
+ connect(this, SIGNAL(longPress(QPointF)), this, SLOT(handleLongTap(QPointF)));
+}
+
+//----------------------------------------------------------------------------
+// UniViewerAudioWidget::~UniViewerAudioWidget
+// @see header file
+//----------------------------------------------------------------------------
+UniViewerAudioWidget::~UniViewerAudioWidget()
+{
+}
+
+//----------------------------------------------------------------------------
+// UniViewerAudioWidget::~UniViewerAudioWidget
+// @see header file
+//----------------------------------------------------------------------------
+void UniViewerAudioWidget::populate(UniMessageInfo *info)
+{
+ mMimeType = info->mimetype();
+ mMediaPath = info->path();
+
+ HbIcon audioIcon;
+ if (info->isProtected()) {
+ audioIcon.setIconName(AUDIO_ICON);
+ }
+ else if (info->isCorrupted()) {
+ audioIcon.setIconName(CORRUPTED_AUDIO_ICON);
+ }
+ else {
+ audioIcon.setIconName(AUDIO_ICON);
+ }
+
+ this->setIcon(audioIcon);
+ QFileInfo fileInfo(mMediaPath);
+ this->setText(fileInfo.baseName());
+ this->setTextAlignment(Qt::AlignLeft);
+ MsgMediaUtil mediaUtil;
+ this->setAdditionalText(mediaUtil.mediaDuration(mMediaPath));
+}
+
+//----------------------------------------------------------------------------
+// UniViewerAudioWidget::handleShortTap
+// @see header file
+//----------------------------------------------------------------------------
+void UniViewerAudioWidget::handleShortTap()
+{
+ emit shortTap(mMediaPath);
+
+ // Open the media.
+ handleOpen();
+}
+
+//----------------------------------------------------------------------------
+// UniViewerAudioWidget::handleLongTap
+// @see header file
+//----------------------------------------------------------------------------
+void UniViewerAudioWidget::handleLongTap(const QPointF &position)
+{
+ emit longTap(position);
+
+ // Display context sensitive menu.
+ HbMenu* menu = new HbMenu;
+ menu->setAttribute(Qt::WA_DeleteOnClose);
+ menu->addAction(LOC_OPEN, this, SLOT(handleOpen()));
+ menu->addAction(LOC_SAVE, this, SLOT(handleSave()));
+ menu->setPreferredPos(position);
+ menu->show();
+}
+
+//----------------------------------------------------------------------------
+// UniViewerAudioWidget::handleOpen
+// @see header file
+//----------------------------------------------------------------------------
+void UniViewerAudioWidget::handleOpen()
+{
+ this->ungrabGesture(Qt::TapGesture);
+
+ if (!mViewerUtils) {
+ mViewerUtils = new UniViewerUtils(this);
+ }
+ mViewerUtils->launchContentViewer(mMimeType, mMediaPath);
+
+ //fire timer to regrab gesture after some delay.
+ QTimer::singleShot(300,this,SLOT(regrabGesture()));
+}
+
+//----------------------------------------------------------------------------
+// UniViewerAudioWidget::handleSave
+// @see header file
+//----------------------------------------------------------------------------
+void UniViewerAudioWidget::handleSave()
+{
+
+}
+
+//---------------------------------------------------------------
+// UniViewerAudioWidget::regrabGesture
+// @see header file
+//---------------------------------------------------------------
+void UniViewerAudioWidget::regrabGesture()
+{
+ this->grabGesture(Qt::TapGesture);
+}
+// EOF
--- a/messagingapp/msgui/unifiedviewer/src/univiewerbodywidget.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/unifiedviewer/src/univiewerbodywidget.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -17,30 +17,21 @@
#include "univiewerbodywidget.h"
+// SYSTEM INCLUDES
#include <QFile>
-#include <QFileInfo>
-#include <QPixmap>
-#include <QSignalMapper>
-
#include <HbTextItem>
-#include <HbPushButton>
-#include <HbMenu>
#include <HbMainWindow>
-#include <xqaiwrequest.h>
-#include <xqrequestinfo.h>
-#include <xqappmgr.h>
-
+// USER INCLUDES
#include "univiewertextitem.h"
#include "univiewerpixmapwidget.h"
-#include "msgmediautil.h"
-// LOCAL CONSTANTS
-const QString AUDIO_ICON("qtg_mono_audio");
+#include "univieweraudiowidget.h"
-// Localization
-#define LOC_TITLE hbTrId("txt_messaging_title_messaging")
-#define LOC_OPEN hbTrId("txt_common_menu_open")
-#define LOC_SAVE hbTrId("txt_common_menu_save")
+// LOCAL CONSTANTS
+const QString IMAGE_MIMETYPE("image");
+const QString AUDIO_MIMETYPE("audio");
+const QString VIDEO_MIMETYPE("video");
+const QString TEXT_MIMETYPE("text");
//---------------------------------------------------------------
//UniViewerBodyWidget::UniViewerBodyWidget
@@ -50,10 +41,7 @@
HbWidget(parent), mHasText(false), mHasPixmap(false), mTextItem(0), mSlideCounter(0),
mPixmapItem(0), mAudioItem(0)
{
- this->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed);
- // Signal mapper for opening media files
- mSignalMapper = new QSignalMapper(this);
- connect(mSignalMapper, SIGNAL(mapped(const QString &)), this, SLOT(openMedia(const QString &)));
+ this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
}
//---------------------------------------------------------------
@@ -68,18 +56,16 @@
//UniViewerBodyWidget::setImage
// @see header file
//---------------------------------------------------------------
-void UniViewerBodyWidget::setPixmap(QString pixmapFile)
+void UniViewerBodyWidget::setPixmap(UniMessageInfo *info)
{
setHasPixmap(true);
//create image item instance
if (!mPixmapItem) {
mPixmapItem = new UniViewerPixmapWidget(this);
HbStyle::setItemName(mPixmapItem, "pixmap");
- connect(mPixmapItem, SIGNAL(shortTap(QString)), this, SLOT(openMedia(QString)));
}
-
mPixmapItem->hide();
- mPixmapItem->setPixmap(pixmapFile);
+ mPixmapItem->populate(info);
this->repolish();
}
@@ -88,23 +74,14 @@
//UniViewerBodyWidget::setAudio
// @see header file
//---------------------------------------------------------------
-void UniViewerBodyWidget::setAudio(QString audiofile)
+void UniViewerBodyWidget::setAudio(UniMessageInfo *info)
{
if (!mAudioItem) {
- mAudioItem = new HbPushButton(this);
+ mAudioItem = new UniViewerAudioWidget(this);
HbStyle::setItemName(mAudioItem, "audioItem");
}
mAudioItem->hide();
- QFileInfo fileInfo(audiofile);
- mAudioItem->setIcon(HbIcon(AUDIO_ICON));
- mAudioItem->setText(fileInfo.baseName());
- MsgMediaUtil mediaUtil;
- mAudioItem->setAdditionalText(mediaUtil.mediaDuration(audiofile));
- mAudioItem->setTextAlignment(Qt::AlignLeft);
-
- // Connect to signal mapper with file name
- mSignalMapper->setMapping(mAudioItem, audiofile);
- connect(mAudioItem, SIGNAL(clicked()), mSignalMapper, SLOT(map()));
+ mAudioItem->populate(info);
this->repolish();
}
@@ -113,16 +90,25 @@
//UniViewerBodyWidget::setVideo
// @see header file
//---------------------------------------------------------------
-void UniViewerBodyWidget::setVideo(QString videofile)
+void UniViewerBodyWidget::setVideo(UniMessageInfo *info)
{
- Q_UNUSED(videofile)
+ setHasPixmap(true);
+ //create image item instance
+ if (!mPixmapItem) {
+ mPixmapItem = new UniViewerPixmapWidget(this);
+ HbStyle::setItemName(mPixmapItem, "pixmap");
+ }
+ mPixmapItem->hide();
+ mPixmapItem->populate(info);
+
+ this->repolish();
}
//---------------------------------------------------------------
-//UniViewerBodyWidget::setTextContent
+//UniViewerBodyWidget::setText
// @see header file
//---------------------------------------------------------------
-void UniViewerBodyWidget::setTextContent(QString text)
+void UniViewerBodyWidget::setText(QString text)
{
setHasText(true);
@@ -140,7 +126,7 @@
}
//---------------------------------------------------------------
-//UniViewerBodyWidget::setTextContent
+// UniViewerBodyWidget::setSlideCounter
// @see header file
//---------------------------------------------------------------
void UniViewerBodyWidget::setSlideCounter(QString &slideCounter)
@@ -204,23 +190,23 @@
int count = objList.count();
for (int a = 0; a < count; ++a) {
UniMessageInfo* info = objList.at(a);
- QString type = info->mimetype();
+ QString mimeType = info->mimetype();
- if (type.contains("text")) {
+ if (mimeType.contains(TEXT_MIMETYPE)) {
QFile file(info->path());
if (file.open(QIODevice::ReadOnly)) {
QString textContent(file.readAll());
- setTextContent(textContent);
+ setText(textContent);
}
}
- else if (type.contains("video")) {
- setVideo(info->path());
+ else if (mimeType.contains(AUDIO_MIMETYPE)) {
+ setAudio(info);
}
- else if (type.contains("audio")) {
- setAudio(info->path());
+ else if (mimeType.contains(VIDEO_MIMETYPE)) {
+ setVideo(info);
}
- else if (type.contains("image")) {
- setPixmap(info->path());
+ else if (mimeType.contains(IMAGE_MIMETYPE)) {
+ setPixmap(info);
}
delete info;
@@ -403,110 +389,4 @@
return szHint;
}
-//---------------------------------------------------------------
-//UniViewerBodyWidget::longPressed
-// @see header file
-//---------------------------------------------------------------
-void UniViewerBodyWidget::longPressed(QPointF position)
-{
-
- HbMenu* menu = new HbMenu;
- menu->setAttribute(Qt::WA_DeleteOnClose);
- menu->addAction(LOC_OPEN, this, SLOT(openMedia()));
- menu->addAction(LOC_SAVE, this, SLOT(saveMedia()));
- menu->setPreferredPos(position);
- menu->show();
-}
-
-//---------------------------------------------------------------
-//UniViewerBodyWidget::openMedia
-// @see header file
-//---------------------------------------------------------------
-void UniViewerBodyWidget::openMedia()
-{
-}
-
-//---------------------------------------------------------------
-//UniViewerBodyWidget::openMedia
-// @see header file
-//---------------------------------------------------------------
-void UniViewerBodyWidget::openMedia(const QString& fileName)
-{
- XQSharableFile sf;
- XQAiwRequest* request = 0;
-
- if (!sf.open(fileName)) {
- return;
- }
-
- // Get handlers
- XQApplicationManager appManager;
- QList<XQAiwInterfaceDescriptor> fileHandlers = appManager.list(sf);
- if (fileHandlers.count() > 0) {
- XQAiwInterfaceDescriptor d = fileHandlers.first();
- request = appManager.create(sf, d);
-
- if (!request) {
- sf.close();
- return;
- }
- }
- else {
- sf.close();
- return;
- }
-
- // Result handlers
- connect(request, SIGNAL(requestOk(const QVariant&)), this, SLOT(handleOk(const QVariant&)));
- connect(request, SIGNAL(requestError(const QVariant&)), this,
- SLOT(handleError(const QVariant&)));
-
- request->setEmbedded(true);
- request->setSynchronous(true);
-
- // Fill args
- QList<QVariant> args;
- args << qVariantFromValue(sf);
- request->setArguments(args);
-
- // Fill headers
- QString key("WindowTitle");
- QVariant value(QString(LOC_TITLE));
- XQRequestInfo info;
- info.setInfo(key, value);
- request->setInfo(info);
-
- request->send();
-
- // Cleanup
- sf.close();
- delete request;
-}
-
-//---------------------------------------------------------------
-//UniViewerBodyWidget::saveMedia
-// @see header file
-//---------------------------------------------------------------
-void UniViewerBodyWidget::saveMedia()
-{
-}
-
-//---------------------------------------------------------------
-// UniViewerBodyWidget :: handleOk
-// @see header file
-//---------------------------------------------------------------
-void UniViewerBodyWidget::handleOk(const QVariant& result)
-{
- Q_UNUSED(result)
-}
-
-//---------------------------------------------------------------
-// UniViewerBodyWidget :: handleError
-// @see header file
-//---------------------------------------------------------------
-void UniViewerBodyWidget::handleError(int errorCode, const QString& errorMessage)
-{
- Q_UNUSED(errorMessage)
- Q_UNUSED(errorCode)
-}
// EOF
--- a/messagingapp/msgui/unifiedviewer/src/univiewerfeeder.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/unifiedviewer/src/univiewerfeeder.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -167,6 +167,24 @@
}
// ---------------------------------------------------------------------------
+// UniViewerFeeder::bccAddressList
+// @see header file
+// ---------------------------------------------------------------------------
+ConvergedMessageAddressList UniViewerFeeder::bccAddressList()
+{
+ return d_ptr->bccAddressList();
+}
+
+// ---------------------------------------------------------------------------
+// UniViewerFeeder::recipientCount
+// @see header file
+// ---------------------------------------------------------------------------
+int UniViewerFeeder::recipientCount()
+{
+ return d_ptr->recipientCount();
+}
+
+// ---------------------------------------------------------------------------
// UniViewerFeeder::messageSize
// @see header file
// ---------------------------------------------------------------------------
--- a/messagingapp/msgui/unifiedviewer/src/univiewerfeeder_p.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/unifiedviewer/src/univiewerfeeder_p.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -18,7 +18,6 @@
#include "univiewerfeeder_p.h"
// SYSTEM INCLUDES
#include <msvstd.h>
-#include <s60qconversions.h>
#include <msvids.h>
// USER INCLUDES
@@ -27,6 +26,7 @@
#include "unidatamodelloader.h"
#include "msgcontacthandler.h"
#include "debugtraces.h"
+#include "msgbiouids.h"
// ---------------------------------------------------------------------------
// UniViewerFeederPrivate::UniViewerFeederPrivate
@@ -156,8 +156,8 @@
void UniViewerFeederPrivate::fetchDetailsL()
{
QDEBUG_WRITE("UniViewerFeederPrivate fetchDetailsL : SMS start");
- if (msgType() == KSenduiMtmSmsUidValue)
- {
+ if (msgType() == KSenduiMtmSmsUidValue || (msgType() == KSenduiMtmBioUidValue
+ && mEntry.iBioType == KMsgBioNokiaServiceMessage.iUid)) {
QString body;
mPluginInterface->body(body);
q_ptr->emitMsgBody(body);
@@ -248,14 +248,21 @@
mPluginInterface->setMessageId(msgId);
}
- if (msgType() == KSenduiMtmMmsUidValue)
- {
+ else if (msgType() == KSenduiMtmMmsUidValue) {
mPluginInterface = mPluginLoader->getDataModelPlugin(ConvergedMessage::Mms);
mPluginInterface->setMessageId(msgId);
mSlideCount = mPluginInterface->slideCount();
+
}
+ else if (msgType() == KSenduiMtmBioUidValue && mEntry.iBioType
+ == KMsgBioNokiaServiceMessage.iUid) {
+ mPluginInterface = mPluginLoader->getDataModelPlugin(ConvergedMessage::BioMsg);
+ mPluginInterface->setMessageId(msgId);
+ }
+
mPluginInterface->toRecipientList(mToAddressList);
mPluginInterface->ccRecipientList(mCcAddressList);
+ mPluginInterface->bccRecipientList(mBccAddressList);
}
// ---------------------------------------------------------------------------
@@ -265,12 +272,10 @@
ConvergedMessageAddressList UniViewerFeederPrivate::toAddressList()
{
QString alias = QString();
- for (int i = 0; i < mToAddressList.count(); ++i)
- {
+ int count;
+ for (int i = 0; i < mToAddressList.count(); ++i) {
MsgContactHandler::resolveContactDisplayName(
- mToAddressList.at(i)->address(),
- alias,
- 0);
+ mToAddressList.at(i)->address(), alias, count);
mToAddressList.at(i)->setAlias(alias);
alias.clear();
}
@@ -284,12 +289,10 @@
ConvergedMessageAddressList UniViewerFeederPrivate::ccAddressList()
{
QString alias = QString();
- for (int i = 0; i < mCcAddressList.count(); ++i)
- {
+ int count;
+ for (int i = 0; i < mCcAddressList.count(); ++i) {
MsgContactHandler::resolveContactDisplayName(
- mToAddressList.at(i)->address(),
- alias,
- 0);
+ mToAddressList.at(i)->address(), alias, count);
mCcAddressList.at(i)->setAlias(alias);
alias.clear();
@@ -298,6 +301,35 @@
}
// ---------------------------------------------------------------------------
+// UniViewerFeederPrivate::bccAddressList
+// @see header file
+// ---------------------------------------------------------------------------
+ConvergedMessageAddressList UniViewerFeederPrivate::bccAddressList()
+{
+ QString alias = QString();
+ int count;
+ for (int i = 0; i < mBccAddressList.count(); ++i)
+ {
+ MsgContactHandler::resolveContactDisplayName(
+ mBccAddressList.at(i)->address(),
+ alias,
+ count);
+ mBccAddressList.at(i)->setAlias(alias);
+ alias.clear();
+ }
+ return mBccAddressList;
+}
+
+// ---------------------------------------------------------------------------
+// UniViewerFeederPrivate::recipientCount
+// @see header file
+// ---------------------------------------------------------------------------
+int UniViewerFeederPrivate::recipientCount()
+{
+ return mToAddressList.count() + mCcAddressList.count() + mBccAddressList.count();
+}
+
+// ---------------------------------------------------------------------------
// UniViewerFeederPrivate::messageSize
// @see header file
// ---------------------------------------------------------------------------
@@ -313,10 +345,8 @@
void UniViewerFeederPrivate::fromAddressAndAlias(QString& from, QString& alias)
{
mPluginInterface->fromAddress(from);
- MsgContactHandler::resolveContactDisplayName(
- from,
- alias,
- 0);
+ int count;
+ MsgContactHandler::resolveContactDisplayName(from, alias, count);
}
// ---------------------------------------------------------------------------
@@ -335,8 +365,13 @@
{
delete mCcAddressList.at(i);
}
+ mCcAddressList.clear();
- mCcAddressList.clear();
+ for (int i = 0; i < mBccAddressList.count(); ++i)
+ {
+ delete mBccAddressList.at(i);
+ }
+ mBccAddressList.clear();
}
// EOF
--- a/messagingapp/msgui/unifiedviewer/src/univiewerheadercontainer.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/unifiedviewer/src/univiewerheadercontainer.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -24,9 +24,9 @@
// USER INCLUDES
#include "univieweraddresscontainer.h"
-#include "univiewerattachmentcontainer.h"
#include "univiewerdetailswidget.h"
#include "univiewerfeeder.h"
+#include "univiewerattachmentwidget.h"
#include "nativemessageconsts.h"
@@ -44,13 +44,10 @@
//---------------------------------------------------------------
UniViewerHeaderContainer::UniViewerHeaderContainer(UniViewerFeeder* feeder, QGraphicsItem *parent) :
HbWidget(parent), mViewFeeder(feeder), mViewerDetails(0), mHeaderGroupBox(0), mSeparator(0),
- mAddressContainer(0), mAttachmentContainer(0)
+ mAddressContainer(0)
{
this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
- HbFrameItem *bgItem = new HbFrameItem(BG_FRAME_GRAPHICS, HbFrameDrawer::NinePieces, this);
- this->setBackgroundItem(bgItem);
-
mMainLayout = new QGraphicsLinearLayout(Qt::Vertical, this);
mMainLayout->setSpacing(0);
mMainLayout->setContentsMargins(0, 0, 0, 0);
@@ -68,16 +65,31 @@
// Separator
mSeparator = new HbFrameItem(DIVIDER_FRAME, HbFrameDrawer::OnePiece, this);
- mSeparator->setMaximumHeight(1);
+ mSeparator->setMinimumHeight(2.0);
+ mSeparator->frameDrawer().fillWholeRect();
mSeparator->hide();
// Viewer Details widget
mViewerDetails = new UniViewerDetailsWidget(this);
+ // This widget is created to apply background for header & details.
+ HbWidget *headerContainer = new HbWidget(this);
+
+ QGraphicsLinearLayout *headerLayout = new QGraphicsLinearLayout(Qt::Vertical, headerContainer);
+ headerLayout->setSpacing(0);
+ headerLayout->setContentsMargins(0, 0, 0, 0);
+
+ HbFrameItem *bgItem = new HbFrameItem(BG_FRAME_GRAPHICS, HbFrameDrawer::NinePieces, this);
+ headerContainer->setBackgroundItem(bgItem, -2.0);
+
//Add address group box and insert into layout
- mMainLayout->addItem(mHeaderGroupBox);
- mMainLayout->addItem(mSeparator);
- mMainLayout->addItem(mViewerDetails);
+ headerLayout->addItem(mHeaderGroupBox);
+ headerLayout->addItem(mSeparator);
+ headerLayout->addItem(mViewerDetails);
+
+ headerContainer->setLayout(headerLayout);
+
+ mMainLayout->addItem(headerContainer);
this->setLayout(mMainLayout);
}
@@ -117,9 +129,11 @@
// Expand address group box for outgoing messages.
if (mViewFeeder->isIncoming()) {
mHeaderGroupBox->setCollapsed(true);
+ addressBoxToggled(true);
}
else {
mHeaderGroupBox->setCollapsed(false);
+ addressBoxToggled(false);
}
}
@@ -132,9 +146,17 @@
if (mViewerDetails) {
mViewerDetails->clearContent();
}
- if (mAttachmentContainer) {
- mAttachmentContainer->clearContent();
+
+ // Clear the attachments.
+ for (int i = 0; i < mUniViewerAttachmentstList.count(); ++i) {
+ mMainLayout->removeItem(mUniViewerAttachmentstList[i]);
+ mUniViewerAttachmentstList[i]->setParent(NULL);
+ delete mUniViewerAttachmentstList[i];
+ mUniViewerAttachmentstList[i] = NULL;
}
+ mUniViewerAttachmentstList.clear();
+
+ resize(rect().width(), -1);
}
//---------------------------------------------------------------
@@ -167,17 +189,14 @@
//---------------------------------------------------------------
void UniViewerHeaderContainer::populateAttachments()
{
- if (!mAttachmentContainer) {
- // Attachment Container
- mAttachmentContainer = new UniViewerAttachmentContainer(this);
- mMainLayout->addItem(mAttachmentContainer);
- }
-
UniMessageInfoList attachList = mViewFeeder->attachmentsList();
for (int a = 0; a < attachList.count(); ++a) {
UniMessageInfo* info = attachList.at(a);
- mAttachmentContainer->addAttachmentWidget(info->mimetype(), info->path());
+ UniViewerAttachmentWidget *attachmentWidget = new UniViewerAttachmentWidget(this);
+ mUniViewerAttachmentstList.append(attachmentWidget);
+ attachmentWidget->populate(info);
delete info;
+ mMainLayout->addItem(attachmentWidget);
}
}
@@ -209,6 +228,10 @@
if (!ccList.isEmpty()) {
mAddressContainer->setCcField(ccList);
}
+ ConvergedMessageAddressList bccList = mViewFeeder->bccAddressList();
+ if (!bccList.isEmpty()) {
+ mAddressContainer->setBccField(bccList);
+ }
}
}
@@ -259,3 +282,5 @@
{
(state) ? mSeparator->hide() : mSeparator->show();
}
+
+// EOF
--- a/messagingapp/msgui/unifiedviewer/src/univiewermediawidget.cpp Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,98 +0,0 @@
-/*
- * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of "Eclipse Public License v1.0"
- * which accompanies this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html".
- *
- * Initial Contributors:
- * Nokia Corporation - initial contribution.
- *
- * Contributors:
- *
- * Description:
- *
- */
-
-#include "univiewermediawidget.h"
-
-// SYSTEM INCLUDES
-#include <HbIconItem>
-#include <HbTextItem>
-#include <HbPushButton>
-#include <HbFrameDrawer>
-
-// USER INCLUDES
-#include "debugtraces.h"
-
-// LOCAL CONSTANTS
-
-//----------------------------------------------------------------------------
-// UniViewerMediaWidget::UniViewerMediaWidget
-// @see header file
-//----------------------------------------------------------------------------
-UniViewerMediaWidget::UniViewerMediaWidget(QGraphicsItem *parent):
- HbWidget(parent), mMediaIcon(0), mName(0), mInfo(0), mFrameItem(0)
-{
- init();
-}
-
-//----------------------------------------------------------------------------
-// UniViewerMediaWidget::~UniViewerMediaWidget
-// @see header file
-//----------------------------------------------------------------------------
-UniViewerMediaWidget::~UniViewerMediaWidget()
-{
-}
-
-//----------------------------------------------------------------------------
-// UniViewerMediaWidget::init
-// @see header file
-//----------------------------------------------------------------------------
-void UniViewerMediaWidget::init()
-{
- mMediaIcon = new HbIconItem(this);
- HbStyle::setItemName(mMediaIcon, "mediaIcon");
-
- mName = new HbTextItem(this);
- HbStyle::setItemName(mName, "text-1");
-
- mInfo = new HbTextItem(this);
- HbStyle::setItemName(mInfo, "text-2");
-
- mFrameItem = new HbPushButton(this);
- HbStyle::setItemName(mFrameItem, "bgFrame");
-
- connect(mFrameItem, SIGNAL(clicked(bool)), this, SIGNAL(clicked()));
-}
-
-//----------------------------------------------------------------------------
-// UniViewerMediaWidget::populate
-// @see header file
-//----------------------------------------------------------------------------
-void UniViewerMediaWidget::populate(const QString &icon, const QString &name,
- const QString &info, const QString &bgFrame)
-{
- HbFrameDrawer *fd = new HbFrameDrawer(bgFrame,
- HbFrameDrawer::NinePieces);
- mFrameItem->setFrameBackground(fd);
-
- mMediaIcon->setIconName(icon);
- mName->setText(name);
- mInfo->setText(info);
-
-}
-
-//----------------------------------------------------------------------------
-// UniViewerMediaWidget::clearContent
-// @see header file
-//----------------------------------------------------------------------------
-void UniViewerMediaWidget::clearContent()
-{
- mMediaIcon->setIconName("");
- mName->setText("");
- mInfo->setText("");
-}
-
-// EOF
--- a/messagingapp/msgui/unifiedviewer/src/univiewerpixmapwidget.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/unifiedviewer/src/univiewerpixmapwidget.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -17,20 +17,53 @@
#include "univiewerpixmapwidget.h"
+// SYSTEM INCLUDES
#include <HbTapGesture>
#include <HbWidget>
#include <HbInstantFeedback>
+#include <HbMenu>
#include <QPixmap>
+#include <QTimer>
+#include <thumbnailmanager_qt.h>
+
+// USER INCLUDES
+#include "univiewerutils.h"
+#include "unidatamodelplugininterface.h"
+
+// LOCAL CONSTANTS
+#define LOC_OPEN hbTrId("txt_common_menu_open")
+#define LOC_SAVE hbTrId("txt_common_menu_save")
+
+const QString PIXMAP_ICON("qtg_small_image");
+const QString CORRUPTED_PIXMAP_ICON("qtg_large_corrupted");
+const QString VIDEO_MIMETYPE("video");
+const QString MSG_VIDEO_ICON("qtg_small_video");
//---------------------------------------------------------------
// UniViewerPixmapWidget::UniViewerPixmapWidget
// @see header file
//---------------------------------------------------------------
UniViewerPixmapWidget::UniViewerPixmapWidget(QGraphicsItem *parent) :
- HbIconItem(parent)
+ HbIconItem(parent), mViewerUtils(0), mThumbnailManager(0)
{
- mPixmapFile = QString("");
this->grabGesture(Qt::TapGesture);
+ init();
+}
+
+//---------------------------------------------------------------
+// UniViewerPixmapWidget::init
+// @see header file
+//---------------------------------------------------------------
+void UniViewerPixmapWidget::init()
+{
+ mThumbnailManager = new ThumbnailManager(this);
+ mThumbnailManager->setMode(ThumbnailManager::Default);
+ mThumbnailManager->setQualityPreference(ThumbnailManager::OptimizeForQuality);
+ mThumbnailManager->setThumbnailSize(ThumbnailManager::ThumbnailLarge);
+
+ connect(mThumbnailManager, SIGNAL(thumbnailReady(QPixmap, void*, int, int)), this,
+ SLOT(thumbnailReady(QPixmap, void*, int, int)));
+
}
//---------------------------------------------------------------
@@ -45,11 +78,25 @@
// UniViewerPixmapWidget::setPixmap
// @see header file
//---------------------------------------------------------------
-void UniViewerPixmapWidget::setPixmap(const QString &pixmapPath)
+void UniViewerPixmapWidget::populate(UniMessageInfo *info)
{
- mPixmapFile = pixmapPath;
- QPixmap pixmap(pixmapPath);
- this->setIcon(HbIcon(pixmap));
+ mMimeType = info->mimetype();
+ mPixmapPath = info->path();
+ if (mMimeType.contains(VIDEO_MIMETYPE)) {
+ this->setIcon(MSG_VIDEO_ICON);
+ mThumbnailManager->getThumbnail(mPixmapPath);
+ this->ungrabGesture(Qt::TapGesture);
+ }
+ else if (info->isProtected()) {
+ this->setIconName(PIXMAP_ICON);
+ }
+ else if (info->isCorrupted()) {
+ this->setIconName(CORRUPTED_PIXMAP_ICON);
+ }
+ else {
+ QPixmap pixmap(mPixmapPath);
+ this->setIcon(HbIcon(pixmap));
+ }
}
//---------------------------------------------------------------
@@ -70,24 +117,107 @@
case Qt::GestureUpdated:
{
if (HbTapGesture::TapAndHold == tapGesture->tapStyleHint()) {
- // emit longtap
+ // Handle longtap.
+ handleLongTap(tapGesture->scenePosition());
}
break;
}
case Qt::GestureFinished:
{
+ HbInstantFeedback::play(HbFeedback::Basic);
if (HbTapGesture::Tap == tapGesture->tapStyleHint()) {
- // Emit short tap
- emit shortTap(mPixmapFile);
+ // Handle short tap
+ handleShortTap();
}
break;
}
case Qt::GestureCanceled:
{
+ HbInstantFeedback::play(HbFeedback::Basic);
break;
}
}
}
+ else {
+ HbIconItem::gestureEvent(event);
+ }
+}
+
+//---------------------------------------------------------------
+// UniViewerPixmapWidget::handleOpen
+// @see header file
+//---------------------------------------------------------------
+void UniViewerPixmapWidget::handleOpen()
+{
+ this->ungrabGesture(Qt::TapGesture);
+
+ if (!mViewerUtils) {
+ mViewerUtils = new UniViewerUtils(this);
+ }
+ mViewerUtils->launchContentViewer(mMimeType, mPixmapPath);
+
+ //fire timer to regrab gesture after some delay.
+ QTimer::singleShot(300,this,SLOT(regrabGesture()));
+}
+
+//---------------------------------------------------------------
+// UniViewerPixmapWidget::handleSave
+// @see header file
+//---------------------------------------------------------------
+void UniViewerPixmapWidget::handleSave()
+{
+}
+
+//----------------------------------------------------------------------------
+// UniViewerPixmapWidget::handleShortTap
+// @see header file
+//----------------------------------------------------------------------------
+void UniViewerPixmapWidget::handleShortTap()
+{
+ emit shortTap(mPixmapPath);
+
+ // Open the media.
+ handleOpen();
}
+//---------------------------------------------------------------
+// UniViewerPixmapWidget::handleLongTap
+// @see header file
+//---------------------------------------------------------------
+void UniViewerPixmapWidget::handleLongTap(const QPointF &position)
+{
+ emit longTap(position);
+
+ HbMenu* menu = new HbMenu;
+ menu->setAttribute(Qt::WA_DeleteOnClose);
+ menu->addAction(LOC_OPEN, this, SLOT(handleOpen()));
+ menu->addAction(LOC_SAVE, this, SLOT(handleSave()));
+ menu->setPreferredPos(position);
+ menu->show();
+}
+
+//---------------------------------------------------------------
+// UniViewerPixmapWidget::regrabGesture
+// @see header file
+//---------------------------------------------------------------
+void UniViewerPixmapWidget::regrabGesture()
+{
+ this->grabGesture(Qt::TapGesture);
+}
+
+//---------------------------------------------------------------
+// UniViewerPixmapWidget::thumbnailReady
+// @see header
+//---------------------------------------------------------------
+void UniViewerPixmapWidget::thumbnailReady(const QPixmap& pixmap, void *data, int id, int error)
+{
+ Q_UNUSED(data)
+ Q_UNUSED(id)
+ this->grabGesture(Qt::TapGesture);
+ if (!error) {
+ this->setIcon(HbIcon(pixmap));
+ this->hide();
+ this->updateGeometry();
+ }
+}
// EOF
--- a/messagingapp/msgui/unifiedviewer/src/univiewertextitem.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/unifiedviewer/src/univiewertextitem.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -21,16 +21,16 @@
#include "msgcontacthandler.h"
#include <QRegExp>
-#include <QGraphicsSceneMouseEvent>
#include <QApplication>
#include <QClipboard>
#include <QTextBlock>
-
+#include <QUrl>
+#include <QDesktopServices>
+#include <HbTapGesture>
#include <HbMenu>
#include <HbAction>
-#include <HbFrameItem>
#include <cntservicescontact.h>
-#include <XQServiceRequest.h>
+#include <xqservicerequest.h>
#include <xqaiwrequest.h>
#include <xqappmgr.h>
@@ -38,11 +38,11 @@
//consts
//regexp
-const QString NUMBER_PATTERN("(\\(|\\+|\\d)((?:\\d{2,})((?:[\\s-/.\\)\\()])*(?:(\\d+|\\))))*)|((\\*#)(?:\\d+(\\*|#)(?:\\d+#)?))");
+const QString NUMBER_PATTERN("(\\(?(\\+|\\d))((?:\\d)((?:[\\s-/.\\)\\(])*(?:(\\d+|\\))))*(?:\\d?|\\)))|((\\*#)(?:\\d+(\\*|#)(?:\\d+#)?))");
const QString EMAIL_PATTERN("[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?");
-const QString URL_PATTERN("(((ht|f|rt)(tp|sp)(s?)\\:\\/\\/)|(www|wap)(?:\\.))(([-\\w]*[0-9a-zA-Z])+(:(0-9)*)*(\\/?)([a-zA-Z0-9\\-\\?\\,\'\\/\\\\+&%\\$#_=~]*)(\\.)([-\\w]*[0-9a-zA-Z])+(:(0-9)*)*(\\/?)([a-zA-Z0-9\\-\\?\\,\'\\/\\\\+&%\\$#_=~]*))+");
+const QString URL_PATTERN("(((ht|f|rt)(tp|sp)(s?)\\:\\/\\/)|(www|wap)(?:\\.))(([-\\w]*[0-9a-zA-Z])+(:(0-9)*)*(\\/?)([a-zA-Z0-9\\-\\?\\,\'\\/\\\\+&%\\$#_=~]*)(\\.)([-\\w]*[0-9a-zA-Z])+(:(0-9)*)*(\\/?)([a-zA-Z0-9\\-\\?\\,\'\\/\\\\+&%\\$#_=~]*))+[a-zA-Z0-9/]");
//rules
const QString NUMBER_RULE("NUMBER_RULE");
@@ -50,7 +50,7 @@
const QString URL_RULE("URL_RULE");
//localization
-#define LOC_OPEN_CONTACT_INFO hbTrId("txt_messaging_menu_open_contact_info")
+#define LOC_CONTACT_INFO hbTrId("txt_messaging_menu_contact_info")
#define LOC_CALL hbTrId("txt_common_menu_call_verb")
#define LOC_SEND_MESSAGE hbTrId("txt_common_menu_send_message")
#define LOC_SAVE_TO_CONTACTS hbTrId("txt_common_menu_save_to_contacts")
@@ -68,9 +68,9 @@
this->setReadOnly(true);
this->setScrollable(false);
this->setCursorVisibility(Hb::TextCursorHidden);
+ this->setFlag(QGraphicsItem::ItemIsFocusable,false);
this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
- HbFrameItem *noBackground = new HbFrameItem(this);
- this->setBackgroundItem(noBackground);
+ this->setBackgroundItem(0);
//inserting rules and patterns to map.
mRules.insert(NUMBER_RULE,NUMBER_PATTERN);
@@ -117,6 +117,7 @@
QString ruleName = i.key();
QString rule = i.value();
QRegExp ruleExp(rule);
+ ruleExp.setCaseSensitivity(Qt::CaseInsensitive);
QTextCursor cursor = this->document()->find(ruleExp);
@@ -177,38 +178,88 @@
}
-
-void UniViewerTextItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
+void UniViewerTextItem::gestureEvent(QGestureEvent* event)
{
- HbTextEdit::mouseReleaseEvent(event);
-
- highlightText(false);
-
- QString anchor = this->anchorAt(event->pos());
-
- if(!anchor.isEmpty() && !this->textCursor().hasSelection())
+ //handle gesture to highlight and dehighlight find item.
+
+ if(HbTapGesture *tap = qobject_cast<HbTapGesture*>(event->gesture(Qt::TapGesture)))
{
- shortTapAction(anchor);
+ //capturing gesture position, and map to local co-ordinates.
+ QPointF pos = mapFromScene(tap->scenePosition());
+
+ switch (tap->state())
+ {
+ case Qt::GestureStarted:
+ {
+ //highlight find item.
+ QTextDocument* doc = this->document();
+ mCursorPos = doc->documentLayout()->hitTest(pos, Qt::ExactHit);
+ highlightText(true);
+ break;
+ }
+
+ case Qt::GestureFinished:
+ {
+ if (HbTapGesture::Tap == tap->tapStyleHint())
+ {
+ //gesture is finshed dehighlight text.
+ highlightText(false);
+
+ QString anchor = this->anchorAt(pos);
+
+ //do short tap action.
+ if (!anchor.isEmpty() && !this->textCursor().hasSelection())
+ {
+ handleShortTap(anchor,tap->scenePosition());
+ }
+ }
+ break;
+ }
+
+ case Qt::GestureCanceled:
+ {
+ //gesture is canceled due to pan or swipe, dehighlight text.
+ if (HbTapGesture::Tap == tap->tapStyleHint())
+ {
+ highlightText(false);
+ break;
+ }
+ }
+ default:
+ break;
+ }
+ event->accept();
}
-}
-
-void UniViewerTextItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
-{
- HbTextEdit::mousePressEvent(event);
-
- QTextDocument* doc = this->document();
-
- mCursorPos = doc->documentLayout()->hitTest(event->pos(), Qt::ExactHit);
-
- highlightText(true);
+ else
+ {
+ event->ignore();
+ }
+
+ //passing gesture event to base class.
+ HbTextEdit::gestureEvent(event);
}
void UniViewerTextItem::addNumberMenu(HbMenu* contextMenu,const QString& data)
{
HbAction* action = NULL;
- action = contextMenu->addAction(LOC_OPEN_CONTACT_INFO, this, SLOT(openContactInfo()));
- action->setData(data);
+ QString number = data;
+ number.remove(NUMBER_RULE);
+ int contactId = MsgContactHandler::resolveContactDisplayName(
+ number,
+ QContactPhoneNumber::DefinitionName,
+ QContactPhoneNumber::FieldNumber);
+
+ if(contactId > 0)
+ {
+ action = contextMenu->addAction(LOC_CONTACT_INFO, this, SLOT(openContactInfo()));
+ action->setData(data);
+ }
+ else
+ {
+ action = contextMenu->addAction(LOC_SAVE_TO_CONTACTS, this, SLOT(saveToContacts()));
+ action->setData(data);
+ }
action = contextMenu->addAction(LOC_CALL, this, SLOT(call()));
action->setData(data);
@@ -216,9 +267,6 @@
action = contextMenu->addAction(LOC_SEND_MESSAGE, this, SLOT(sendMessage()));
action->setData(data);
- action = contextMenu->addAction(LOC_SAVE_TO_CONTACTS, this, SLOT(saveToContacts()));
- action->setData(data);
-
action = contextMenu->addAction(LOC_COPY, this, SLOT(copyToClipboard()));
action->setData(data);
}
@@ -230,7 +278,7 @@
action = contextMenu->addAction(LOC_CREATE_EMAIL, this, SLOT(createEmail()));
action->setData(data);
- action = contextMenu->addAction(LOC_OPEN_CONTACT_INFO, this, SLOT(openContactInfo()));
+ action = contextMenu->addAction(LOC_CONTACT_INFO, this, SLOT(openContactInfo()));
action->setData(data);
action = contextMenu->addAction(LOC_SAVE_TO_CONTACTS, this, SLOT(saveToContacts()));
@@ -254,15 +302,40 @@
action->setData(data);
}
-void UniViewerTextItem::shortTapAction(QString anchor)
+void UniViewerTextItem::handleShortTap(QString anchor,const QPointF& pos)
{
HbAction action;
action.setData(anchor);
if(anchor.contains(NUMBER_RULE))
{
- //open vcard template.
- connect(&action,SIGNAL(triggered()),this,SLOT(openContactInfo()));
+ QString data = anchor;
+ data.remove(NUMBER_RULE);
+ int contactId = MsgContactHandler::resolveContactDisplayName(
+ data,
+ QContactPhoneNumber::DefinitionName,
+ QContactPhoneNumber::FieldNumber);
+
+ if(contactId > 0 )
+ {
+ //if resolved conatct open contact card
+ connect(&action,SIGNAL(triggered()),this,SLOT(openContactInfo()));
+ }
+ else
+ {
+ //unresolved contact show popup.
+ highlightText(true);
+
+ HbMenu* contextMenu = new HbMenu();
+ contextMenu->setDismissPolicy(HbPopup::TapAnywhere);
+ contextMenu->setAttribute(Qt::WA_DeleteOnClose, true);
+ contextMenu->setPreferredPos(pos);
+ connect(contextMenu,SIGNAL(aboutToClose()),this,SLOT(menuClosed()));
+
+ addNumberMenu(contextMenu,anchor);
+
+ contextMenu->show();
+ }
}
else if(anchor.contains(EMAIL_RULE))
{
@@ -308,7 +381,7 @@
phoneNumber.remove(NUMBER_RULE);
//invoke dialer service and pass phoneNumber.
- QString serviceName("com.nokia.services.telephony");
+ QString serviceName("com.nokia.symbian.ICallDial");
QString operation("dial(QString)");
XQServiceRequest* serviceRequest = new XQServiceRequest(serviceName,operation,false);
@@ -348,11 +421,10 @@
emailId.remove(EMAIL_RULE);
// Launch email editor
- QString serviceName("com.nokia.services.commonemail");
- QString interfaceName("imessage.send");
+ QString interfaceName("com.nokia.symbian.IEmailMessageSend");
QString operation("send(QVariant)");
XQApplicationManager appManager;
- XQAiwRequest* request = appManager.create(serviceName, interfaceName,
+ XQAiwRequest* request = appManager.create(interfaceName,
operation, true);
if ( request == NULL )
{
@@ -390,6 +462,8 @@
QString url = action->data().toString();
url.remove(URL_RULE);
//invoke browser service & pass url.
+ QUrl uri(url);
+ QDesktopServices::openUrl(uri);
}
}
@@ -496,7 +570,7 @@
void UniViewerTextItem::saveToContacts()
{
- //handler for save to contacts.
+ openContactInfo();
}
void UniViewerTextItem::onServiceRequestCompleted()
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/unifiedviewer/src/univiewerutils.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,145 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: Utility class for univiewer.
+ *
+ */
+
+#include "univiewerutils.h"
+
+// SYSTEM INCLUDES
+#include <xqaiwrequest.h>
+#include <xqrequestinfo.h>
+#include <xqappmgr.h>
+#include <hbglobal.h>
+
+// USER INCLUDES
+#include "msgcontactsutil.h"
+
+// LOCAL CONSTANTS
+#define LOC_TITLE hbTrId("txt_messaging_title_messaging")
+
+const QString IMAGE_MIMETYPE("image");
+const QString AUDIO_MIMETYPE("audio");
+const QString VCARD_MIMETYPE("text/X-vCard");
+const QString VIDEO_MIMETYPE("video");
+
+//---------------------------------------------------------------
+// UniViewerUtils::UniViewerUtils
+// @see header file
+//---------------------------------------------------------------
+UniViewerUtils::UniViewerUtils(QObject *parent) :
+ QObject(parent)
+{
+}
+
+//---------------------------------------------------------------
+// UniViewerUtils::~UniViewerUtils
+// @see header file
+//---------------------------------------------------------------
+UniViewerUtils::~UniViewerUtils()
+{
+}
+
+//---------------------------------------------------------------
+// UniViewerUtils::addAttachmentWidget
+// @see header file
+//---------------------------------------------------------------
+void UniViewerUtils::launchContentViewer(const QString &mimeType, const QString &filePath)
+{
+ if (mimeType.contains(IMAGE_MIMETYPE) || mimeType.contains(AUDIO_MIMETYPE) ||
+ mimeType.contains(VIDEO_MIMETYPE)) {
+ launchViaSharableFile(filePath);
+ }
+ else if (mimeType.contains(VCARD_MIMETYPE, Qt::CaseInsensitive)) {
+ MsgContactsUtil::launchVCardViewer(filePath);
+ }
+}
+
+//---------------------------------------------------------------
+// UniViewerUtils::handleOk
+// @see header file
+//---------------------------------------------------------------
+void UniViewerUtils::handleOk(const QVariant& result)
+{
+ emit requestOk(result);
+}
+
+//---------------------------------------------------------------
+// UniViewerUtils::handleError
+// @see header file
+//---------------------------------------------------------------
+void UniViewerUtils::handleError(int errorCode, const QString& errorMessage)
+{
+ emit requestError(errorCode, errorMessage);
+}
+
+//---------------------------------------------------------------
+// UniViewerUtils::launchViaSharableFile
+// @see header file
+//---------------------------------------------------------------
+void UniViewerUtils::launchViaSharableFile(const QString &filePath)
+{
+ XQSharableFile sf;
+ XQAiwRequest* request = 0;
+
+ if (!sf.open(filePath)) {
+ return;
+ }
+
+ // Get handlers
+ XQApplicationManager appManager;
+ QList<XQAiwInterfaceDescriptor> fileHandlers = appManager.list(sf);
+ if (fileHandlers.count() > 0) {
+ XQAiwInterfaceDescriptor d = fileHandlers.first();
+ request = appManager.create(sf, d);
+
+ if (!request) {
+ sf.close();
+ return;
+ }
+ }
+ else {
+ sf.close();
+ return;
+ }
+
+ // Result handlers
+ connect(request, SIGNAL(requestOk(const QVariant&)), this, SLOT(handleOk(const QVariant&)),
+ Qt::UniqueConnection);
+ connect(request, SIGNAL(requestError(int,const QString&)), this,
+ SLOT(handleError(int,const QString&)), Qt::UniqueConnection);
+
+ request->setEmbedded(true);
+ request->setSynchronous(true);
+
+ // Fill args
+ QList<QVariant> args;
+ args << qVariantFromValue(sf);
+ request->setArguments(args);
+
+ // Fill headers
+ QString key("WindowTitle");
+ QVariant value(QString(LOC_TITLE));
+ XQRequestInfo info;
+ info.setInfo(key, value);
+ request->setInfo(info);
+
+ request->send();
+
+ // Cleanup
+ sf.close();
+ delete request;
+}
+
+//EOF
--- a/messagingapp/msgui/unifiedviewer/src/univiewslidewidget.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/unifiedviewer/src/univiewslidewidget.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -53,7 +53,7 @@
mHeaderContainer = new UniViewerHeaderContainer(mViewFeeder, this);
// Always connect to populate sms content
- connect(mViewFeeder, SIGNAL(msgBody(QString)), mBody, SLOT(setTextContent(QString)));
+ connect(mViewFeeder, SIGNAL(msgBody(QString)), mBody, SLOT(setText(QString)));
connect(mHeaderContainer,SIGNAL(sendMessage(const QString&,const QString&)),
this, SIGNAL(sendMessage(const QString&,const QString&)));
@@ -105,8 +105,7 @@
if (mViewFeeder->msgType() == KSenduiMtmMmsUidValue) {
QString slideString;
if (mViewFeeder->slideCount() > 1) {
- slideString = QString(LOC_SLIDE_COUNTER).arg(mSlideNumber + 1).arg(
- mViewFeeder->slideCount());
+ slideString = (LOC_SLIDE_COUNTER).arg(mSlideNumber + 1).arg(mViewFeeder->slideCount());
}
mBody->setSlideContents(mViewFeeder->slideContent(mSlideNumber), slideString);
}
--- a/messagingapp/msgui/unifiedviewer/unifiedviewer.pro Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/unifiedviewer/unifiedviewer.pro Thu Jul 22 16:32:06 2010 +0100
@@ -25,7 +25,6 @@
INCLUDEPATH += ../appengine/inc
INCLUDEPATH += ../msguiutils/inc
INCLUDEPATH += . ../../msgutils/unieditorutils/editorgenutils/inc
-INCLUDEPATH += . ../../msgutils/s60qconversions/inc
INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
#QMAKE_CXXFLAGS.ARMCC -= --no_hide_all
@@ -49,47 +48,55 @@
"$${LITERAL_HASH}include <platform_paths.hrh>" \
"rom/unifiedviewer.iby CORE_APP_LAYER_IBY_EXPORT_PATH(unifiedviewer.iby)"
+defBlock = \
+ "$${LITERAL_HASH}if defined(EABI)" \
+ "DEFFILE ../eabi/unifiedviewer.def" \
+ "$${LITERAL_HASH}else" \
+ "DEFFILE ../bwins/unifiedviewer.def" \
+ "$${LITERAL_HASH}endif"
+
+MMP_RULES += defBlock
+
# Input
HEADERS += inc/unifiedviewer.h \
inc/unicontentswidget.h \
-# inc/unihighlighter.h \
inc/univiewerfeeder.h \
inc/univiewerfeeder_p.h \
inc/univiewslidewidget.h \
inc/uniscrollarea.h \
../inc/msgbaseview.h \
+ inc/univiewerutils.h \
inc/univiewerbodywidget.h \
inc/univiewerdetailswidget.h \
inc/univieweraddresswidget.h \
inc/univieweraddresscontainer.h \
- inc/univiewermediawidget.h \
- inc/univiewerattachmentcontainer.h \
+ inc/univiewerattachmentwidget.h \
inc/univiewertextitem.h \
inc/univiewerheadercontainer.h \
- inc/univiewerpixmapwidget.h
+ inc/univiewerpixmapwidget.h \
+ inc/univieweraudiowidget.h
SOURCES += src/unifiedviewer.cpp \
src/unicontentswidget.cpp \
-# src/unihighlighter.cpp \
src/univiewerfeeder.cpp \
src/univiewerfeeder_p.cpp \
src/univiewslidewidget.cpp \
src/uniscrollarea.cpp \
+ src/univiewerutils.cpp \
src/univiewerbodywidget.cpp \
src/univiewerdetailswidget.cpp \
src/univieweraddresswidget.cpp \
src/univieweraddresscontainer.cpp \
- src/univiewermediawidget.cpp \
- src/univiewerattachmentcontainer.cpp \
+ src/univiewerattachmentwidget.cpp \
src/univiewertextitem.cpp \
src/univiewerheadercontainer.cpp \
- src/univiewerpixmapwidget.cpp
+ src/univiewerpixmapwidget.cpp \
+ src/univieweraudiowidget.cpp
RESOURCES += unifiedviewer.qrc
# Libs
-LIBS = -ls60qconversions \
- -letext \
+LIBS = -letext \
-lmsgs \
-lconvergedmessageutils \
-lappengine \
@@ -98,4 +105,5 @@
-lQtContacts \
-lmsguiutils \
-lcentralrepository \
+ -lthumbnailmanagerqt \
-lxqserviceutil
--- a/messagingapp/msgui/unifiedviewer/unifiedviewer.qrc Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/unifiedviewer/unifiedviewer.qrc Thu Jul 22 16:32:06 2010 +0100
@@ -6,8 +6,8 @@
<file alias="univiewerdetailswidget.css">resources/layouts/univiewerdetailswidget.css</file>
<file alias="univiewerdetailswidget_color.css">resources/layouts/univiewerdetailswidget_color.css</file>
<file alias="univiewerdetailswidget.widgetml">resources/layouts/univiewerdetailswidget.widgetml</file>
- <file alias="univiewermediawidget.css">resources/layouts/univiewermediawidget.css</file>
- <file alias="univiewermediawidget_color.css">resources/layouts/univiewermediawidget_color.css</file>
- <file alias="univiewermediawidget.widgetml">resources/layouts/univiewermediawidget.widgetml</file>
+ <file alias="univiewerattachmentwidget.css">resources/layouts/univiewerattachmentwidget.css</file>
+ <file alias="univiewerattachmentwidget_color.css">resources/layouts/univiewerattachmentwidget_color.css</file>
+ <file alias="univiewerattachmentwidget.widgetml">resources/layouts/univiewerattachmentwidget.widgetml</file>
</qresource>
</RCC>
--- a/messagingapp/msgutils/bwins/s60qconversionsu.def Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-EXPORTS
- ?qStringToS60Desc@S60QConversions@@SAPAVHBufC16@@ABVQString@@@Z @ 1 NONAME ; class HBufC16 * S60QConversions::qStringToS60Desc(class QString const &)
- ?s60DescToQString@S60QConversions@@SA?AVQString@@ABVTDesC16@@@Z @ 2 NONAME ; class QString S60QConversions::s60DescToQString(class TDesC16 const &)
- ?s60Desc8ToQString@S60QConversions@@SA?AVQString@@ABVTDesC8@@@Z @ 3 NONAME ; class QString S60QConversions::s60Desc8ToQString(class TDesC8 const &)
- ?qStringToS60Desc8@S60QConversions@@SAPAVHBufC8@@ABVQString@@@Z @ 4 NONAME ; class HBufC8 * S60QConversions::qStringToS60Desc8(class QString const &)
-
--- a/messagingapp/msgutils/convergedmessageutils/convergedmessageutils.pro Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgutils/convergedmessageutils/convergedmessageutils.pro Thu Jul 22 16:32:06 2010 +0100
@@ -47,6 +47,15 @@
"$${LITERAL_HASH}include <platform_paths.hrh>" \
"rom/convergedmessageutils.iby CORE_APP_LAYER_IBY_EXPORT_PATH(convergedmessageutils.iby)"
+defBlock = \
+ "$${LITERAL_HASH}if defined(EABI)" \
+ "DEFFILE ../eabi/convergedmessageutils.def" \
+ "$${LITERAL_HASH}else" \
+ "DEFFILE ../bwins/convergedmessageutils.def" \
+ "$${LITERAL_HASH}endif"
+
+MMP_RULES += defBlock
+
symbian {
TARGET.UID3 = 0x20024319
TARGET.CAPABILITY = CAP_GENERAL_DLL
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgutils/convergedmessageutils/tsrc/mmstestbed/inc/mmsreadfile.h Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,471 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ */
+
+#ifndef MMSREADFILE_H
+#define MMSREADFILE_H
+
+// INCLUDES
+#include <e32base.h>
+#include <badesca.h>
+#include <f32file.h>
+#include <msvstd.h>
+
+// forward references
+class CMmsAttaStructure;
+class CMmsHeaders;
+class CEikonEnv;
+class CMmsClientMtm;
+
+// Out-of-range value for any MMS header with assigned number
+// Used in coverage tests to get coverage for "default" branches
+// in "case" statements.
+const TInt KMmsTestIllegalValue = 255;
+
+//
+// TEST KEY WORDS
+// Extended to include all MMS headers to allow generation of arbitrary PDUs
+// Content type header cannot be separately defined,
+// it will always be "multipat/mixed" or "multipart/related"
+_LIT8( KTestEndOfFile, "EOF" );
+_LIT8( KTestNewMessage, "MESSAGE BEGIN" );
+//------------------------------------------------
+_LIT8( KTestMessageType, "MESSAGE-TYPE" ); //X-Mms-Message-Type
+_LIT8( KTestDate, "DATE" ); // Date
+_LIT8( KTestFrom, "FROM" ); // From
+_LIT8( KTestTo, "TO" ); // To
+_LIT8( KTestCc, "CC" ); // Cc
+_LIT8( KTestBcc, "BCC" ); // Bcc
+_LIT8( KTestSubject, "SUBJECT" ); // Subject
+_LIT8( KTestExpiryRel, "EXPIRY-REL" ); // X-Mms-Expiry, relative
+_LIT8( KTestExpiryAbs, "EXPIRY-ABS" ); // X-Mms-Expiry, absolute
+_LIT8( KTestDeliveryTimeRel, "DELIVERY-TIME-REL" ); // X-Mms-Delivery-Time, relative
+_LIT8( KTestDeliveryTimeAbs, "DELIVERY-TIME-ABS" ); // X-Mms-Delivery-Time, absolute
+_LIT8( KTestPriority, "PRIORITY" ); // X-Mms-Priority
+_LIT8( KTestSenderVisibility, "SENDER-VISIBILITY" ); // X-Mms-Sender-Visibility
+_LIT8( KTestDeliveryReport, "DELIVERY-REPORT" ); // X-Mms-Delivery-Report
+_LIT8( KTestReadReply, "READ-REPLY" ); // X-Mms-Read-Report
+// ---------------------------------------------------
+_LIT8( KTestNewAttachment, "ATTACHMENT" );
+_LIT8( KTestAttachmentType, "ATTACHMENTTYPE" );
+_LIT8( KTestAttachmentName, "ATTACHMENTNAME" );
+_LIT8( KTestAttachmentContLoc, "ATTACHMENTCONTLOC" );
+_LIT8( KTestAttachmentCharset, "ATTACHMENTCHARSET" );
+_LIT8( KTestAttachmentCid, "ATTACHMENTCID" );
+_LIT8( KTestAttachmentRoot, "ATTACHMENTROOT" );
+// content-type and x-type parameters for attachments
+// should appear in name-value pairs.
+// Test program is not responsible for verifying illegal scripts
+_LIT8( KTestAttContTypeParamName, "ContTypeParamName" );
+_LIT8( KTestAttContTypeParamValue, "ContTypeParamValue" );
+_LIT8( KTestAttXTypeParamName, "X-TypeParamName" );
+_LIT8( KTestAttXTypeParamValue, "X-TypeParamValue" );
+// -----------------------------------------------------
+_LIT8( KTestMessageClass, "MESSAGE-CLASS" ); // X-Mms-Message-Class
+_LIT8( KTestDelivRepSendAllow, "DELIV-REP-SEND-ALLOW" ); // X-Mms-Report-Allowed
+_LIT8( KTestAcceptAdvertis, "ACCEPT-ADVERTISEMENTS" );
+_LIT8( KTestRetryCount, "RETRY-COUNT" );
+_LIT8( KTestRetryInterval, "RETRY-INTERVAL" );
+// -------------------------------------------------
+_LIT8( KTestAlias, "ALIAS" );
+_LIT8( KTestFromAlias, "FROMALIAS" );
+_LIT8( KTestToAlias, "TOALIAS" );
+_LIT8( KTestCcAlias, "CCALIAS" );
+_LIT8( KTestBccAlias, "BCCALIAS" );
+// -------------------------------------------------
+// more Message headers to allow testing all possible PDUs and
+// MMS 1.1 headers
+_LIT8( KTestReplyCharging, "REPLY-CHARGING" ); // X-Mms-Reply-Charging
+_LIT8( KTestReplyChargAbs, "REPLY-CHARG-DEADLINE-ABS" ); // X-Mms-Reply-Charging, absolute
+_LIT8( KTestReplyChargRel, "REPLY-CHARG-DEADLINE-REL" ); // X-Mms-Reply-Charging, relative
+_LIT8( KTestReplyChargSize, "REPLY-CHARG-SIZE" ); // X-Mms-Reply-Charging-Size (octets)
+_LIT8( KTestReplyChargID, "REPLY-CHARGING-ID" ); // X-Mms-Reply-Charging-ID
+_LIT8( KTestTID, "TID" );
+_LIT8( KTestContentLocation, "CONTLOC" ); // X-Mms-Content-Location
+// The following three must appear as triplets.
+// index must be first, address and date may appear in any order
+_LIT8( KTestPreviouslySentIndex, "PREVIOUSINDEX" ); // forwarded count for X-Mms-PreviouslySent headers
+_LIT8( KTestPreviouslySentBy, "PREV-SENT-BY" ); // X-Mms-Previously-Sent-By
+_LIT8( KTestPreviouslySentDate, "PREV-SENT-DATE" ); // X-Mms-Previously-Sent-Date
+//---
+_LIT8( KTestMessageId, "MESSAGE-ID" ); // Message-ID
+_LIT8( KTestMessageSize, "MESSAGE-SIZE" ); // X-Mms-Message-Size (octets)
+_LIT8( KTestVersion, "MMS-VERSION" ); // X-MMS-Version (hex:, 10 = 1.0, 11 = 1.1 etc. )
+_LIT8( KTestReadStatus, "READ-STATUS" ); // X-Mms-Read-Status
+_LIT8( KTestResponseStatus, "RESPONSE-STATUS" ); // X-Mms-Response-Status
+_LIT8( KTestResponseText, "RESPONSE-TEXT" ); // X-Mms-Response-Text
+_LIT8( KTestRetrieveStatus, "RETRIEVE-STATUS" ); // X-Mms-Retrieve-Status
+_LIT8( KTestRetrieveText, "RETRIEVE-TEXT" ); // X-Mms-Retrieve-Text
+_LIT8( KTestStatus, "STATUS" ); // X-Mms-Status
+// -------------------------------------------------
+// MMS 1.2 headers
+_LIT8( KTestAttribute, "ATTRIBUTE" ); // X-Mms-Attribute
+// The value should be one of the following:
+// BCC, CC, CONTENT, CONTENT-TYPE, DATE, DELIVERY-REPORT, DELIVERY-TIME-ABS,
+// EXPIRY-ABS, FROM, MESSAGE-CLASS, MESSAGE-ID, MESSAGE-SIZE, PRIORITY,
+// READ-REPLY, SUBJECT, TO, REPLY-CHARGING, REPLY-CHARGING-ID,
+// REPLY-CHARG-DEADLINE-ABS, REPLY-CHARG-SIZE, PREV-SENT-BY,
+// PREV-SENT-DATE, ADDITIONAL-HEADERS
+_LIT8( KTestDistributionIndicator, "DISTRIBUTION-INDICATOR" ); // X-Mms-Distribution-Indicator
+_LIT8( KTestLimit, "LIMIT" ); // X-Mms-Limit
+_LIT8( KTestMessageQuota, "MESSAGE-QUOTA" ); // X-Mms-Mbox-Quota, message number
+_LIT8( KTestSizeQuota, "SIZE-QUOTA" ); // X-Mms-Mbox-Quota, size quota
+_LIT8( KTestMessageTotal, "MESSAGE-TOTAL" ); // X-Mms-Mbox-Totals, message number
+_LIT8( KTestSizeTotal, "SIZE-TOTAL" ); // X-Mms-Mbox-Totals, total size
+_LIT8( KTestMessageCount, "MESSAGE-COUNT" ); // X-Mms-Message-Count
+_LIT8( KTestAddKeyword, "ADD-KEYWORD" ); // X-Mms-MM-Flags
+_LIT8( KTestRemoveKeyword, "REMOVE-KEYWORD" ); // X-Mms-MM-Flags
+_LIT8( KTestFilterKeyword, "FILTER-KEYWORD" ); // X-Mms-MM-FLags
+_LIT8( KTestMMState, "MESSAGE-STATE" ); // X-Mms-MM-State
+_LIT8( KTestQuota, "QUOTA" ); // X-Mms-Quotas
+_LIT8( KTestStart, "START" ); // X-Mms-Start
+_LIT8( KTestStore, "STORE" ); // X-Mms-Store
+_LIT8( KTestStored, "STORED" ); // X-Mms-Stored
+_LIT8( KTestStoreStatus, "STORE-STATUS" ); // X-Mms-Store-Status
+_LIT8( KTestStoreStatusText, "STORE-STATUS-TEXT" ); // X-Mms-Store-Status-Text
+_LIT8( KTestTotals, "TOTALS" ); // X-Mms-Totals
+// Delete confirmation header structure
+// This consists of index, content location, response status and response status text.
+// All three values are not always necessary for each index, but at least content-location
+// and response status should be present.
+// The index retains its value until a new index is encountered.
+_LIT8( KTestDeleteInfoIndex, "DELETESTATUSINDEX" ); // index for next delete info fields
+// This header must precede content-location, response-status and response-text fields
+// in a delete confirmation. Index retains its value until a new index is encountered.
+
+// Element descriptor header not implemented
+
+// Application id headers
+// These will officially be supported in MMS encapsulation version 1.3
+// Java has non-standard support even earlier
+
+_LIT8( KTestApplicId, "APPLIC-ID" ); // X-Mms-Applic-ID
+_LIT8( KTestReplyApplicId, "REPLY-APPLIC-ID" ); // X-Mms-Reply-Applic-ID
+_LIT8( KTestApplicInfo, "AUX-APPLIC-INFO" ); // X-Mms-Aux-Applic-Info
+
+// Since Encapsulation 1.3
+_LIT8( KTestContentClass, "CONTENT-CLASS" ); // X-Mms-Content-Class
+_LIT8( KTestDrmContent, "DRM-CONTENT" ); // X-Mms-DRM-Content
+_LIT8( KTestAdaptationAllowed, "ADAPTATION-ALLOWED" ); // X-Mms-Adaptation-Allowed
+_LIT8( KTestRecommendedRetrievalMode, "REC-RETRIEVAL-MODE" ); // X-Mms-Recommended-Retrieval-Mode
+_LIT8( KTestRecRetrievalModeText, "REC-RETR-MODE-TEXT" ); // X-Mms-Recommended-Retrieval-Mode-Text
+_LIT8( KTestReplaceId, "REPLACE-ID" ); // X-Mms-Replace-ID
+_LIT8( KTestStatusText, "STATUS-TEXT" ); // X-Mms-Status-Text
+_LIT8( KTestCancelId, "CANCEL-ID" ); // X-Mms-Cancel-ID
+_LIT8( KTestCancelStatus, "CANCEL-STATUS" ); // X-Mms-Cancel-Status
+
+// DATA TYPES
+#define aSet 1
+#define aReset 0
+#define PartCount 100
+#define MaxAttaCount 10
+#define DefaultBufLen 256
+#define MaxRecipients 5
+
+// status returned by ReadRow
+enum TTestReadStatus
+ {
+ ETestUnknown,
+ ETestNewMessage,
+ ETestNewAttachment,
+ ETestEof, // End of file
+ ETestMessageType,
+ ETestDate,
+ ETestFrom,
+ ETestTo,
+ ETestCc,
+ ETestBcc,
+ ETestAlias,
+ ETestFromAlias,
+ ETestToAlias,
+ ETestCcAlias,
+ ETestBccAlias,
+ ETestSubject,
+ ETestExpiryRel,
+ ETestExpiryAbs,
+ ETestDeliveryTimeRel,
+ ETestDeliveryTimeAbs,
+ ETestPriority,
+ ETestSenderVisibility,
+ ETestDeliveryReport,
+ ETestReadReply,
+ ETestAttachmentType,
+// ETestAttachmentName,
+ ETestAttachmentCharset,
+ ETestAttachmentCid,
+ ETestAttachmentRoot,
+ ETestSettings,
+ ETestMessageClass,
+ ETestDelivReportSendAllow,
+ ETestSingleMessageClass,
+ ETestReplyCharging,
+ ETestReplyChargAbs,
+ ETestReplyChargRel,
+ ETestReplyChargSize,
+ ETestReplyChargID,
+ ETestTID,
+ ETestContentLocation,
+ ETestPreviouslySentIndex,
+ ETestPreviouslySentBy,
+ ETestPreviouslySentDate,
+ ETestMessageId,
+ ETestMessageSize,
+ ETestVersion,
+ ETestReadStatus,
+ ETestResponseStatus,
+ ETestResponseText,
+ ETestRetrieveStatus,
+ ETestRetrieveText,
+ ETestStatus,
+ ETestAttribute,
+ ETestDistributionIndicator,
+ ETestLimit,
+ ETestMessageQuota,
+ ETestSizeQuota,
+ ETestMessageTotal,
+ ETestSizeTotal,
+ ETestMessageCount,
+ ETestAddKeyword,
+ ETestRemoveKeyword,
+ ETestFilterKeyword,
+ ETestMMState,
+ ETestQuota,
+ ETestStart,
+ ETestStore,
+ ETestStored,
+ ETestStoreStatus,
+ ETestStoreStatusText,
+ ETestTotals,
+ ETestDeleteInfoIndex,
+ ETestApplicId,
+ ETestReplyApplicId,
+ ETestApplicInfo,
+ ETestContentClass,
+ ETestDrmContent,
+ ETestAdaptationAllowed,
+ ETestRecommendedRetrievalMode,
+ ETestRecRetrievalModeText,
+ ETestReplaceId,
+ ETestStatusText,
+ ETestCancelId,
+ ETestCancelStatus,
+ ETestAttaRecommendedName,
+ ETestAttachmentContLoc,
+ ETestAttContTypeParamName,
+ ETestAttContTypeParamValue,
+ ETestAttXTypeParamName,
+ ETestAttXTypeParamValue
+
+ };
+
+// VALUE KEYWORDS
+_LIT( KPersonal, "Personal" );
+_LIT( KAdvertisement, "Advertisement" );
+_LIT( KInformational, "Informational" );
+_LIT( KAuto, "Auto" );
+_LIT( KLow, "Low" );
+_LIT( KNormal, "Normal" );
+_LIT( KHigh, "High" );
+_LIT( KHide, "Hide" );
+_LIT( KShow, "Show" );
+_LIT( KYes, "Yes" );
+_LIT( KNo, "No" );
+_LIT( KOn, "On" );
+_LIT( KOff, "Off" );
+_LIT( KDeferred, "Deferred" );
+_LIT( KExpired, "Expired" );
+_LIT( KRetrieved, "Retrieved" );
+_LIT( KRejected, "Rejected" );
+_LIT( KUnrecognized, "Unrecognized" );
+_LIT( KIndeterminate, "Indeterminate" );
+_LIT( KForwarded, "Forwarded" );
+_LIT( KUnreachable, "Unreachable" );
+_LIT( KDraft, "Draft");
+_LIT( KSent, "Sent" );
+_LIT( KNew, "New" );
+// X-Mms-Message-Type
+_LIT( KSendReq, "SendReq" );
+_LIT( KSendConf, "SendConf" );
+_LIT( KNotifInd, "NotifInd" );
+_LIT( KNotifResp, "NotifResp" );
+_LIT( KRetrConf, "RetrConf" );
+_LIT( KAckInd, "AckInd" );
+_LIT( KDelInd, "DelInd" );
+_LIT( KReadReqInd, "ReadReqInd" );
+_LIT( KReadOrigInd, "ReadOrigInd" );
+_LIT( KForwardRec, "ForwardReq" );
+_LIT( KForwardConf, "ForwardConf" );
+_LIT( KMBoxStoreReq, "MBoxStoreReq" );
+_LIT( KMBoxStoreConf, "MBoxStoreConf" );
+_LIT( KMBoxViewReq, "MBoxViewReq" );
+_LIT( KMBoxViewConf, "MBoxViewConf" );
+_LIT( KMBoxUploadReq, "MBoxUploadReq" );
+_LIT( KMBoxUploadConf, "MBoxUploadConf" );
+_LIT( KMBoxDeleteReq, "MBoxDeleteReq" );
+_LIT( KMBoxDeleteConf, "MBoxDeleteConf" );
+_LIT( KMBoxDescr, "MBoxDescr" );
+_LIT( KDeleteReq, "DeleteReq" );
+_LIT( KDeleteConf, "DeleteConf" );
+_LIT( KCancelReq, "CancelReq" );
+_LIT( KCancelResp, "CancelConf" );
+// X-Mms-Read-Status
+_LIT( KRead, "Read" );
+_LIT( KDelNotRead, "DeletedNotRead" );
+// X-Mms-Reply-Charging
+_LIT( KRequested, "Requested" );
+_LIT( KReqTextOnly, "ReqTextOnly" );
+_LIT( KAccepted, "Accepted" );
+_LIT( KAccTextOnly, "AccTextOnly" );
+// X-Mms-Cancel-Status (only receival of request, not actual cancellation)
+_LIT( KCancelSuccessful, "CancelSuccess" );
+_LIT( KCancelCorrupted, "CancelCorrupted" );
+// X-Mms-Content-Class
+_LIT( KText, "Text" );
+_LIT( KImageBasic, "ImageBasic" );
+_LIT( KImageRich, "ImageRich" );
+_LIT( KVideoBasic, "VideoBasic" );
+_LIT( KVideoRich, "VideoRich" );
+_LIT( KMegaPixel, "MegaPixel" );
+_LIT( KContentBasic, "ContentBasic" );
+_LIT( KContentRich, "ContentRich" );
+// X-Mms-Recommended-Retrieval-Mode
+_LIT( KManual, "Manual" );
+
+//X-Mms-ResponseStatus
+// legacy values
+_LIT( KOk, "OK" );
+_LIT( KErrUnspecified, "Unspecified" );
+_LIT( KErrServiceDenied, "ServiceDenied" );
+_LIT( KErrMessageFormatCorrupt, "FormatCorrupt" );
+_LIT( KErrAddressUnresolved, "AddressUnresolved" );
+_LIT( KErrMessageNotFound, "MessageNotFound" );
+_LIT( KErrNetworkProblem, "NetworkProblem" );
+_LIT( KErrContentNotAccepted, "ContentNotAccepted" );
+_LIT( KErrUnsupportedMessage, "UnsupportedMessage" );
+// values since 1.1 (and 1.2)
+_LIT( KErrTransient, "TransientFailure" );
+_LIT( KErrTransientAddressUnresolved, "TransientAddressUnresolved" );
+_LIT( KErrTransientNotFound, "TransientMessageNotFound" );
+_LIT( KErrTransientNetworkproblem, "TransientNetworkProblem" );
+_LIT( KErrTransientPartialSuccess, "PartialSuccess" );
+_LIT( KErrPermanent, "PermanentFailure" );
+_LIT( KErrPermanentServiceDenied, "PermanentServiceDenied" );
+_LIT( KErrPermanentMessageFormatCorrupt, "PermanentFormatCorrupt" );
+_LIT( KErrPermanentAddressUnresolved, "PermanentAddressUnresolved" );
+_LIT( KErrPermanentNotFound, "PermanentMessageNotFound" );
+_LIT( KErrPermanentContentNotAccepted, "PermanentContentNotAccepted" );
+_LIT( KErrReplyChargingLimitNotMet, "ReplyChargingLimitNotMet" );
+_LIT( KErrReplyChargingRequestNotAccepted, "ReplyChargingRequestNotAccepted" );
+_LIT( KErrReplyChargingForwardingDenied, "ReplyChargingForwardingDenied" );
+_LIT( KErrReplyChargingNotSupported, "ReplyChargingNotSupported" );
+_LIT( KErrAddressHidingNotSupported, "AddressHidingNotSupported" );
+_LIT( KErrPermanentLackOfPrepaid, "PermanentLackOfPrepaid" );
+//X-Mms-RetrieveStatus (one extra value)
+_LIT( KErrRetrieveContentUnsupported, "PermanentContentUnsupported" );
+//X-Mms-Store-Status (one extra value)
+_LIT( KErrMMBoxFull, "MMBoxFull" );
+
+_LIT8( KTestContent, "Content" ); // For attribute list only
+_LIT8( KTestAdditionalHeaders, "ADDITIONAL-HEADERS" ); // For attribute list only
+_LIT8( KTestDeliveryTime, "DELIVERY-TIME"); // for attribute list only
+_LIT8( KTestExpiry, "EXPIRY"); // for attribute list only
+_LIT8( KTestReplyCharg, "REPLY-CHARG-DEADLINE" ); // for attribute list only
+_LIT8( KTestContentType, "CONTENT-TYPE" ); // for attribute list only
+
+/**
+* CMmsReadFile
+*/
+NONSHARABLE_CLASS( CMmsReadFile ):public CBase
+ {
+ public: // Constructors and destructor
+
+ static CMmsReadFile* NewL(RFs& aFs, RFileReadStream& aReadStream ); // Two-phased constructor.
+ virtual ~CMmsReadFile(); // Destructor
+
+ public: // New functions
+
+ TInt CompleteTestL(TInt aMessageCounter, CMmsHeaders& aMmsHeaders);
+ TTestReadStatus ReadRowL();
+ void CreateMessageL( CMmsClientMtm* aMmsClient, CMmsHeaders* aMmsHeaders );
+ TInt FindAlias(TPtrC alias);
+ void SetAttaStructure( TBool aOldAttaStructure = EFalse );
+
+ protected: // Functions from base classes
+
+ private:
+
+ CMmsReadFile(); // C++ default constructor.
+ // By default constructor is private.
+ void ConstructL( RFs& aFs, RFileReadStream& aReadStream );
+ void Reset();
+
+ public: // data
+ TInt iMessageType;
+
+
+ private: // Data
+
+ RFs iFs;
+ RFileReadStream* iReader;
+ TBuf<DefaultBufLen> iValueBuffer;
+ CDesCArray* iAliasArray; // aliases
+ HBufC8* iByteBuffer;
+ TTime iDate;
+ CArrayPtrFlat<CMmsAttaStructure>* iAttaStructures;
+ TInt iAttaCount;
+ TInt iAttaRoot;
+ TInt iAliasCount;
+ TInt iNextMessageType;
+ TParse iParse;
+ TFileName iFilename;
+
+ protected: // Data
+ private: // Data
+
+ // CArrayFixFlat <TestMessage>* iMessages;
+
+ public: // Friend classes
+ protected: // Friend classes
+ private: // Friend classes
+
+ };
+
+
+NONSHARABLE_CLASS( CMmsAttaStructure ):public CBase
+ {
+ public: // Constructors and destructor
+ static CMmsAttaStructure* NewL(); // Two-phased constructor.
+ virtual ~CMmsAttaStructure(); // Destructor
+ private:
+ CMmsAttaStructure(); // C++ default constructor.
+ // By default constructor is private.
+ void ConstructL();
+
+ public: // Data
+ HBufC8* iAtta;
+ HBufC8* iAttaName; // content location
+ HBufC8* iAttaType;
+ HBufC8* iAttaCid;
+ TInt iAttaCharset;
+ HBufC* iAttaRecommendedName; // recommended filename
+ CDesC8ArrayFlat* iContentTypeParams; // zero or more "parameter"
+ CDesC8ArrayFlat* iXTypeParams; // zero or more X-Type "parameters"
+
+ };
+
+
+#endif // MMSREADFILE_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgutils/convergedmessageutils/tsrc/mmstestbed/inc/mmstestbed.h Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,151 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ */
+
+#ifndef MMSTESTBED_H
+#define MMSTESTBED_H
+
+#ifdef BUILD_MMSTESTBED_DLL
+#define MMSTESTBED_EXPORT Q_DECL_EXPORT
+#else
+#define MMSTESTBED_EXPORT Q_DECL_IMPORT
+#endif
+
+#include <QObject>
+#include <QString>
+
+#include <msvids.h> //for consts like KMsvNullIndexEntryIdValue
+#include <MSVAPI.H>
+#include <MTCLREG.H>
+#include <mmsclient.h>
+//#include <mmsservercommon.h>
+
+class CTestUiTimer;
+class CMsvSession;
+class CMmsClientMtm;
+class CMmsSettings;
+class CMmsHeaders;
+class CLogEvent;
+class CLogViewEvent;
+class CLogFilter;
+class CLogClient;
+
+class MMSTESTBED_EXPORT MmsTestBed : public QObject, public MMsvSessionObserver
+ {
+ Q_OBJECT
+
+public:
+ /**
+ *
+ */
+ MmsTestBed();
+ ~MmsTestBed();
+ void setConnectionLocal(bool value);
+ void fromOutboxToMmsc();
+ void fromMmscToInbox();
+ /**
+ * cleanup MMS service
+ */
+ void cleanupAndCreateNewService();
+ void deleteNotifications();
+ void restoreFactorySettings();
+ void setFetchingState( TMmsReceivingMode aState );
+ void sendFromFile();
+ void sendOneByOne();
+ void sendNotifications();
+ void copyDrafts();
+ void garbageCollection(TUint32 aReason = 0x00000001); //0x00000001 == KMmsReasonBoot
+ void messageVariation();
+ void cancelSendScheduling();
+ void scheduledSend(TMsvId aBoxId, TInt aDelay = 5);
+ void deleteSendSchedule();
+ void cancelFetchScheduling();
+ void fetchForced(TInt aDelay = 5);
+ void deleteFetchSchedule();
+ void doAFetchCycle();
+ void createEntry(TMsvEntry& aNewEntry, CMsvEntry& aClientEntry);
+ void cleanOutbox();
+ void cleanInbox();
+ void cleanSent();
+ void cleanDrafts();
+ void cleanAll();
+ void reply();
+ void replyToAll();
+ void forward();
+ void sendReadReport(); // send a read report
+ int fromOutboxToMmscWithMemoryFailure(); // returns memory failure count
+ int fromMmscToInboxWithMemoryFailure(); // returns memory failure count
+ void sendViaClient();
+ void scheduledFetch(TInt aDelay = 5);
+ void fetchForcedImmediate();
+ void getEventType();
+ void addEventType();
+ void deleteEventType();
+ void cleanLog();
+ void setOnline(bool value);
+ void generateDeliveryReport( CMmsHeaders* aMmsHeaders );
+ void sendDeliveryReport();
+
+signals:
+ void entryCreatedInDraft(long int id);
+ void entryMovedToOutbox(long int id);
+ void entryMovedToSent(long int id);
+ void entryCreatedInInbox(long int id);
+
+protected:
+ /**
+ * From MMsvSessionObserver
+ */
+ void HandleSessionEventL(TMsvSessionEvent aEvent, TAny* aArg1,
+ TAny* aArg2, TAny* aArg3);
+
+private:
+ void findDefaultL();
+ void createMmsService();
+ void cleanup();
+ void deleteEntry(TMsvId aEntryId, CMsvEntry& aClientEntry);
+ void testFile(TFileName& aFilePath, TInt aCommand = 0, TMsvId aBox = KMsvGlobalOutBoxIndexEntryId);
+ void addMMBoxDescriptions();
+ void encodeMessageFromDrafts();
+ TMsvId findMMSFolder();
+ bool checkLogClient();
+ int getLogEntries();
+
+private:
+ //data
+ CTestUiTimer* iTimer;
+ CMsvOperationActiveSchedulerWait* iWait;
+ CMsvSession* iSession;
+ CClientMtmRegistry* iClientMtmRegistry;
+ CMmsClientMtm* iMmsClient;
+ CMmsSettings* iSettings;
+ CMmsHeaders* iMmsHeaders;
+ TMsvId iServiceId;
+ TMsvId iDefaultServiceId;
+ TMsvSessionEvent iEvent;
+ RFs iFs;
+ TFileName iFilename;
+ TFileName iCurrentFile;
+ TFileName iCurrentPath;
+ TParse iParse; // parse buffer as member to save stack space
+ CBufFlat* iEncodeBuffer;
+ CMsvEntrySelection* iMsvEntrySelection;
+ CLogEvent* iLogEvent;
+ CLogClient* iLogClient;
+ CLogViewEvent* iLogView;
+ CLogFilter* iLogFilter;
+ };
+
+#endif // MMSTESTBED_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgutils/convergedmessageutils/tsrc/mmstestbed/inc/mmstestbed.hrh Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,131 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ */
+
+#include <bldvariant.hrh>
+
+
+#ifndef MMSTESTBED_HRH
+#define MMSTESTBED_HRH
+
+enum
+{
+ EAppMainOk = 1,
+ EAppMainCancel,
+ //
+ EMenufrmCmdCascadeTest,
+ ECleanup,
+ ECleanOutbox,
+ ESaveSettings,
+ ELoadSettings,
+ ECleanInbox,
+ EShowIn,
+ EShowOut,
+ EOutToMMSC,
+ EMMSCToIn,
+ ESendScheduled,
+ EReceiveScheduled,
+ EShowSent,
+ ECleanSent,
+ EStartMyNotifier,
+ EGetEventType,
+ EAddEventType,
+ EDeleteEventType,
+ EViewLog,
+ ECleanLog,
+ EShowWapAccessPoints,
+ ESelectWapAccessPoint,
+ EShowConnectionMode,
+ EShowIAP,
+ EConnectToIAP,
+ EDeleteSendSchedule,
+ EDeleteReceiveSchedule,
+ EDeleteNotifications,
+ ERestoreFactorySettings,
+ ECreateFromFile,
+ EShowNotifications,
+ ESendDeliveryReport,
+ EShowDrafts,
+ ECleanDrafts,
+ ECleanAll,
+ EFetchingDeferred,
+ EFetchingOn,
+ ESendFromFile,
+ ESwitchToLocal,
+ ESwitchToGlobal,
+ EDecodeLoggingOn,
+ EDecodeLoggingOff,
+ EBinaryDumpOn,
+ EBinaryDumpOff,
+ ESendNotification,
+ ECreateToInbox,
+ ECreateToSentItems,
+ ESendFromDrafts,
+ EFindMMSFolder,
+ ESendOneByOne,
+ ECreateToDrafts,
+ ESendViaClient,
+ ESendMemFail,
+ EFetchMemFail,
+ EReceiveForced,
+ ECreateHeadersFromFile,
+ ESwitchToOffline,
+ ESwitchToOnline,
+ ECopyDrafts,
+ ECreateNotification,
+ EReply,
+ EReplyToAll,
+ EForward,
+ EFetchingManual,
+ EFirstBoot,
+ ENoFirstBoot,
+ EFindNetworkStatus,
+ ESendReadReport,
+ ECreateMMBoxViewConf,
+ EGetMMBoxView,
+ ECleanMMBox,
+ EShowMMBox
+};
+
+#define ETestLabel1 1
+#define ETestLabel2 2
+#define ETestLabel3 3
+#define ETestLabel4 4
+
+#define EServiceList 2
+
+
+enum TTestBedDlgCtrlIds
+ {
+ ETestEditField = 1
+ };
+
+enum TEditServiceControls
+ {
+ EFolderLabel = 1,
+ EEditUri
+// EEditServiceFolder,
+// ENameLabel,
+// EEditServiceName,
+// ENumberLabel,
+// EEditServiceNumber
+ };
+
+enum
+ {
+ EFsViewDialogId = 1
+ };
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgutils/convergedmessageutils/tsrc/mmstestbed/inc/mmsteststaticutils.h Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,203 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ */
+
+#ifndef MMSTESTSTATICUTILS_H
+#define MMSTESTSTATICUTILS_H
+
+#include <e32std.h>
+#include <msvstd.h>
+#include <badesca.h>
+
+#include "mmsconst.h"
+
+class RFs;
+class CMsvSession;
+class CMmsEncode;
+class CMmsHeaders;
+
+#ifdef __WINS__
+_LIT( KRootPath, "c:\\" );
+#else
+// This is removable disk.
+// drive letter should not be hard coded, must be investigated further
+// We use c: for a while for the tests (to be cahnged later)
+_LIT( KRootPath, "c:\\" );
+//_LIT( KRootPath, "e:\\" );
+#endif
+
+// directory where mmbox descriptions are created
+_LIT( KMmsMMBoxDescriptionDirectory, "C:\\mmsmmboxdescriptions\\");
+// directory where created headers are dumped
+_LIT( KMmsDumpDirectory, "C:\\mmsdump\\");
+// content type of MMS PDUs
+_LIT8( KMmsMimeType, "application/vnd.wap.mms-message" );
+
+_LIT( KWild, "*" );
+
+
+/**
+ * joined array structure
+ *
+ */
+NONSHARABLE_CLASS( TMmsJoinedArrays ): public MDesCArray
+ {
+public:
+ TMmsJoinedArrays(CDesCArray* const & aArray1, CDesCArray* const & aArray2);
+ TInt MdcaCount() const;
+ TPtrC16 MdcaPoint(TInt aIndex) const;
+private:
+ CDesCArray* const & iArray1;
+ CDesCArray* const & iArray2;
+ };
+
+/**
+ * static utility functions
+ *
+ */
+class TMmsTestUtils
+ {
+
+public:
+
+ /**
+ *
+ */
+ TMmsTestUtils();
+
+ /**
+ * read phone number for sending messages
+ *
+ * @param aFileName full path for filename
+ * @param aFs file system handle
+ * @return allocated pointer containing the name
+ * The caller must delete the pointer when no longer needed
+ */
+ static HBufC* ReadContactFromFileL( TDesC& aFileName, RFs& aFs );
+
+ static void DecodeLoggingOnL();
+ static void DecodeLoggingOffL();
+ static void BinaryDumpOnL();
+ static void BinaryDumpOffL();
+
+ /**
+ * Clean all temporary directories used in local mode.
+ * Does not delete the directories, only the contents
+ *
+ * @param aFs file system handle
+ */
+ static void CleanDirectoryL( RFs& aFs );
+
+ /**
+ * Dump a binary message
+ *
+ * @param aBuffer buffer containing the binary message
+ * @param aFilename full path of the directory whenre the dump goes
+ * @param aParse reference to parser (to save stack space)
+ * @param aFs file system handle
+ */
+ static void Dump(
+ CBufFlat& aBuffer, TFileName& aFilename, TParse& aParse, RFs& aFs );
+
+ /**
+ * Delete all MMS messages and notifications from a given folder
+ *
+ * @param aBoxId folder id
+ * @param aSession Messaging server session
+ */
+ static void CleanBoxL(TMsvId aBoxId, CMsvSession& aSession);
+
+ /**
+ * turn on logging messages sent to email addresses
+ */
+ static void EmailLoggingOnL();
+
+ /**
+ * turn off logging messages sent to email addresses
+ */
+ static void EmailLoggingOffL();
+
+ /**
+ * load list of children into selection and return count
+ *
+ * @param aBoxId folder id
+ * @param aMsvEntrySelection reference to a pointer that will contain the list of child ids
+ * caller is responsible of deleting the pointer afterwards.
+ * Pointer may be NULL at entry, and a new pointer will be allocated
+ * @param aSession messge server session
+ * @param aMessageType child MTM type, default is multimedia message
+ * @return number of entries in selection
+ */
+ static TInt CountChildrenL(
+ TMsvId aBoxId,
+ CMsvEntrySelection*& aMsvEntrySelection,
+ CMsvSession& aSession,
+ TUid aMessageType = KUidMsgTypeMultimedia);
+
+ /**
+ * Create a folder entry
+ *
+ * @param aSession messge server session
+ * @param aParentFolder the parent folder
+ * @param aFolderName name of the folder
+ * @param aFolderId will contain the if of the new folder if creation was successful
+ */
+ static void CreateFolderEntryL(
+ CMsvSession& aSession,
+ TMsvId aParentFolder,
+ const TDesC& aFolderName,
+ TMsvId& aFolderId );
+
+ /**
+ * Create an MMS notification from data in buffer
+ * @param aNotificationFolder mms notification folder (target folder)
+ * @param aServiceId id of MMS service
+ * @param aEncodeBuffer buffer that contains the data
+ * @param aSession message server session
+ * @return id of the created notification
+ */
+ static TMsvId CreateNotificationEntryL(
+ TMsvId aNotificationFolder,
+ TMsvId aServiceId,
+ CBufFlat* aEncodeBuffer,
+ CMsvSession& aSession );
+
+ /**
+ * Encode an MMS notification into buffer
+ * @param aUrl url of the notification for local messages a filepath
+ * @param aSize size of the message
+ * @param aMmsHeaders MMS headers structure for creating the notification
+ * @param aMmsEncoder reference to CMmsEncode class
+ * @param aEncodeBuffer flat buffer that will contain the encoded notification
+ */
+ static void FormNotification(
+ TDesC8& aUrl,
+ TInt aSize,
+ CMmsHeaders& aMmsHeaders,
+ CMmsEncode& aMmsEncoder,
+ CBufFlat* aEncodeBuffer );
+
+
+ static TBool IsDrive(const TDesC& aFileName);
+ static TBool IsDir(const TDesC& aFileName, RFs& aFs);
+ static TBool IsFile(const TDesC& aFileName, RFs& aFs);
+
+
+private:
+
+ };
+
+
+#endif // MMSTESTSTATICUTILS_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgutils/convergedmessageutils/tsrc/mmstestbed/inc/mmstestuitimer.h Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ */
+
+#ifndef C_TESTUITIMER_H
+#define C_TESTUITIMER_H
+
+
+#include <e32base.h>
+
+#define KPeriod 10000 // period of timer
+
+/**
+ * timer for test programs
+ */
+NONSHARABLE_CLASS( CTestUiTimer ): public CTimer
+ {
+public:
+
+ static CTestUiTimer* NewL();
+ virtual ~CTestUiTimer();
+
+ void RunL();
+ void DoCancel();
+ void ConstructL();
+ void IssueRequest();
+ void TimeoutOperation(CActive* aObject, TTimeIntervalSeconds aTimeoutInSeconds);
+
+private:
+ CTestUiTimer();
+
+public:
+ TTimeIntervalMicroSeconds32 period;
+
+private: // data
+ CActive* iObject;
+ };
+
+#endif // C_TESTUITIMER_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgutils/convergedmessageutils/tsrc/mmstestbed/mmstestbed.pro Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,76 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+QT += testlib
+QT -= gui
+
+TEMPLATE = lib
+
+TARGET = mmstestbed
+
+INCLUDEPATH += .
+INCLUDEPATH += inc
+INCLUDEPATH += ../../inc
+INCLUDEPATH += ../../../../../mmsengine/inc
+INCLUDEPATH += ../../../../../mmsengine/mmscodec/inc
+INCLUDEPATH += ../../../../../mmsengine/mmshttptransport/inc
+INCLUDEPATH += ../../../../../mmsengine/mmsmessage/inc
+INCLUDEPATH += ../../../../../mmsengine/mmsconninit/inc
+INCLUDEPATH += ../../../../../mmsengine/mmsserver/inc
+INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+
+DEFINES += BUILD_MMSTESTBED_DLL
+
+SOURCES += src/mmstestbed.cpp \
+ src/mmsteststaticutils.cpp \
+ src/mmsreadfile.cpp \
+ src/mmstestuitimer.cpp
+
+HEADERS += inc/mmstestbed.h \
+ inc/mmsteststaticutils.h \
+ inc/mmsreadfile.h \
+ inc/mmstestuitimer.h \
+ inc/mmstestbed.hrh
+
+SYMBIAN_PLATFORMS = WINSCW ARMV5
+
+symbian {
+ TARGET.CAPABILITY = CAP_GENERAL_DLL
+ TARGET.EPOCSTACKSIZE = 0x8000
+ TARGET.EPOCHEAPSIZE = 0x1000 0x1F00000
+ TARGET.EPOCALLOWDLLDATA = 1
+ }
+
+# Build.inf rules
+BLD_INF_RULES.prj_exports += \
+ "$${LITERAL_HASH}include <platform_paths.hrh>"
+
+LIBS += -lmsgs \
+ -lmmsmessage \
+ -lmmsconninit \
+ -lmmscodec \
+ -lmmsserversettings \
+ -lcentralrepository \
+ -lapparc \
+ -lbafl \
+ -lefsrv \
+ -lesock \
+ -lestor \
+ -leuser \
+ -llogcli \
+ -llogwrap \
+ -lapgrfx \
+ -lapmime
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgutils/convergedmessageutils/tsrc/mmstestbed/src/mmsreadfile.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,1799 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ */
+
+// INCLUDE FILES
+#include <e32base.h>
+#include <badesca.h>
+#include <e32def.h>
+#include <s32file.h>
+#include <msvids.h>
+#include <mtmdef.h>
+//#include <eikenv.h>
+#include <apgcli.h>
+#include <CMsvMimeHeaders.h>
+#include <AknNoteWrappers.h>
+
+#include <mmsservercommon.h>
+#include "mmsconst.h"
+#include "mmsclient.h"
+#include "mmsheaders.h"
+#include "mmsreadfile.h"
+#include "mmsmmboxviewheaders.h"
+#include "mmsmmboxmessageheaders.h"
+#include "mmsmmboxflags.h"
+#include "mmssettings.h"
+
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES
+
+// CONSTANTS
+const TInt KMmsGranularity = 8;
+_LIT( K1970, "19700000:000000.000000" ); // 1-Jan 1970 0:00:00
+
+
+// MACROS
+
+// LOCAL CONSTANTS AND MACROS
+
+// MODULE DATA STRUCTURES
+
+// LOCAL FUNCTION PROTOTYPES
+
+// ==================== LOCAL FUNCTIONS ====================
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//
+CMmsReadFile::CMmsReadFile()
+ {
+ // all member variables in a class derived from CBase
+ // are automatically set to 0.
+ }
+
+
+//
+void CMmsReadFile::ConstructL(RFs& aFs, RFileReadStream& aReadStream )
+ {
+ // iRowBuffer = HBufC8::NewMaxL( 500 ); // Max row length!!!!
+ iFs = aFs;
+ iReader = &aReadStream;
+ iByteBuffer = HBufC8::NewL( DefaultBufLen );
+ iAliasArray = new ( ELeave ) CDesCArrayFlat( KMmsGranularity );
+ iAttaStructures = new ( ELeave ) CArrayPtrFlat<CMmsAttaStructure>( KMmsGranularity );
+ Reset();
+ }
+
+// Two-phased constructor.
+CMmsReadFile* CMmsReadFile::NewL(RFs& aFs, RFileReadStream& aReadStream )
+ {
+ CMmsReadFile* self = new ( ELeave ) CMmsReadFile();
+ CleanupStack::PushL( self );
+ self->ConstructL( aFs, aReadStream );
+ CleanupStack::Pop();
+ return self;
+ }
+
+
+// Destructor
+CMmsReadFile::~CMmsReadFile()
+ {
+ Reset(); // resets and destroys all array data
+ if (iAliasArray != NULL) iAliasArray->Reset();
+ delete iByteBuffer;
+ delete iAliasArray;
+ delete iAttaStructures;
+ }
+
+void CMmsReadFile::Reset()
+ {
+ // reset all arrays
+ if (iAttaStructures != NULL) iAttaStructures->ResetAndDestroy();
+ iAttaCount = 0;
+ iAttaRoot = 0;
+ }
+
+// ---------------------------------------------------------
+// CMmsReadFile()::CompleteTest
+// ---------------------------------------------------------
+//
+TInt CMmsReadFile::CompleteTestL( TInt aMessageCounter, CMmsHeaders& aMmsHeaders )
+{
+ Reset(); // new message
+
+ TUint32 val;
+ TUint limit = 1000000;
+ TUint sizeLimit = 1000 * 1024; //max message size 1000 kB!
+ TUint allLimit = 999999;
+ TInt error;
+ TRadix radix = EDecimal;
+ TLex16 lex;
+ TTestReadStatus readStatus = ETestUnknown;
+ CMmsAttaStructure* oneAtta = NULL;
+ TInt index;
+ TTime y1970( K1970 );
+ TTimeIntervalMicroSeconds interval;
+ TTime date;
+ TInt order = 0;
+ TInt16 shortInteger = 0;
+
+ //iso luuppi, joka kiertää ja lukee kunnes EOF tule vastaan
+ //Big Loop, which passes around and read until the EOF
+
+ iMessageType = iNextMessageType;
+ while(readStatus != ETestEof)
+ {
+ readStatus = ReadRowL();
+ if ( readStatus == ETestEof )
+ {
+ return(-1);
+ }
+ if ( readStatus == ETestUnknown )
+ {
+ // A line containing only comments, or an unknown tag
+ // As using the scripts to test settings is no longer supported,
+ // any old keywords used to test CMmsSettings class are ignored
+ continue;
+ }
+ if( readStatus == ETestNewMessage )
+ {
+ iNextMessageType = readStatus;
+ if(aMessageCounter++)
+ {
+ return(NULL);
+ }
+ else
+ {
+ iMessageType = iNextMessageType;
+ continue;
+ }
+ }
+ if ( iMessageType == ETestNewMessage)
+ {
+ switch(readStatus)
+ {
+ case ETestFrom:
+ aMmsHeaders.SetSenderL( iValueBuffer );
+ break;
+ case ETestFromAlias:
+ index = FindAlias(iValueBuffer);
+ if(index >= 0)
+ {
+ aMmsHeaders.SetSenderL( iAliasArray->MdcaPoint(index).Mid(iAliasArray->MdcaPoint(index).Locate('=') + 1 ) );
+ }
+ break;
+ case ETestTo:
+ aMmsHeaders.AddTypedAddresseeL( iValueBuffer, EMsvRecipientTo );
+ break;
+ case ETestToAlias:
+ index = FindAlias(iValueBuffer);
+ if(index >= 0)
+ {
+ aMmsHeaders.AddTypedAddresseeL( iAliasArray->MdcaPoint(index).Mid(iAliasArray->MdcaPoint(index).Locate('=') + 1 ), EMmsTo );
+ }
+ break;
+ case ETestCc:
+ aMmsHeaders.AddTypedAddresseeL( iValueBuffer, EMsvRecipientCc );
+ break;
+ case ETestCcAlias:
+ index = FindAlias(iValueBuffer);
+ if(index >= 0)
+ {
+ aMmsHeaders.AddTypedAddresseeL( iAliasArray->MdcaPoint(index).Mid(iAliasArray->MdcaPoint(index).Locate('=') + 1 ), EMmsCc );
+ }
+ break;
+ case ETestBcc:
+ aMmsHeaders.AddTypedAddresseeL( iValueBuffer, EMsvRecipientBcc );
+ break;
+ case ETestBccAlias:
+ index = FindAlias(iValueBuffer);
+ if(index >= 0)
+ {
+ aMmsHeaders.AddTypedAddresseeL( iAliasArray->MdcaPoint(index).Mid(iAliasArray->MdcaPoint(index).Locate('=') + 1 ), EMmsBcc );
+ }
+ break;
+ case ETestSubject:
+ aMmsHeaders.SetSubjectL( iValueBuffer );
+ break;
+ case ETestExpiryRel:
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,radix,limit);
+ if (error == KErrNone)
+ {
+ aMmsHeaders.SetExpiryInterval( val );
+ }
+ break;
+ case ETestExpiryAbs:
+ error = iDate.Set(iValueBuffer);
+ interval = iDate.MicroSecondsFrom( y1970 );
+ // expiry date in seconds from 1.1.1970.
+ aMmsHeaders.SetExpiryDate( (interval.Int64())/1000000 );
+ break;
+ case ETestDeliveryTimeRel:
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,radix,limit);
+ if (error == KErrNone)
+ {
+ aMmsHeaders.SetDeliveryTimeInterval( val );
+ }
+ break;
+ case ETestDeliveryTimeAbs:
+ error = iDate.Set(iValueBuffer);
+ interval = iDate.MicroSecondsFrom( y1970 );
+ aMmsHeaders.SetDeliveryDate( (interval.Int64())/1000000 );
+ break;
+ case ETestDate:
+ error = iDate.Set(iValueBuffer);
+ interval = iDate.MicroSecondsFrom( y1970 );
+ aMmsHeaders.SetDate( (interval.Int64())/1000000 );
+ case ETestPriority:
+ val = 0;
+ if ((iValueBuffer.CompareF(KLow)) == 0)
+ {
+ val = EMmsPriorityLow;
+ }
+ else if ((iValueBuffer.CompareF(KNormal)) == 0)
+ {
+ val = EMmsPriorityNormal;
+ }
+ else if ((iValueBuffer.CompareF(KHigh)) == 0)
+ {
+ val = EMmsPriorityHigh;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetMessagePriority( val );
+ break;
+ case ETestSenderVisibility:
+ val = 0;
+ if ((iValueBuffer.CompareF(KHide)) == 0)
+ {
+ val = EMmsSenderVisibilityHide;
+ }
+ else if ((iValueBuffer.CompareF(KShow)) == 0)
+ {
+ val = EMmsSenderVisibilityShow;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetSenderVisibility( val );
+ break;
+ case ETestDeliveryReport:
+ val = 0;
+ if ((iValueBuffer.CompareF(KYes)) == 0)
+ {
+ val = EMmsYes;
+ }
+ else if ((iValueBuffer.CompareF(KNo)) == 0)
+ {
+ val = EMmsNo;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetDeliveryReport( val );
+ break;
+ case ETestDelivReportSendAllow:
+ val = 0;
+ if ((iValueBuffer.CompareF(KYes)) == 0)
+ {
+ val = EMmsYes;
+ }
+ else if ((iValueBuffer.CompareF(KNo)) == 0)
+ {
+ val = EMmsNo;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetReportAllowed( val );
+ break;
+
+ case ETestReadReply:
+ val = 0;
+ if ((iValueBuffer.CompareF(KYes)) == 0)
+ {
+ val = EMmsYes;
+ }
+ else if ((iValueBuffer.CompareF(KNo)) == 0)
+ {
+ val = EMmsNo;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetReadReply( val );
+ break;
+ case ETestNewAttachment:
+ oneAtta = CMmsAttaStructure::NewL();
+ iAttaStructures->AppendL(oneAtta);
+ oneAtta->iAtta->Des().Copy( iValueBuffer );
+ iAttaCount++;
+ break;
+ case ETestAttachmentType:
+ if (oneAtta != NULL)
+ {
+ oneAtta->iAttaType->Des().Copy( iValueBuffer );
+ }
+ break;
+ case ETestAttachmentContLoc:
+ if (oneAtta != NULL)
+ {
+ oneAtta->iAttaName->Des().Copy( iValueBuffer );
+ }
+ break;
+ case ETestAttaRecommendedName:
+ if (oneAtta != NULL)
+ {
+ oneAtta->iAttaRecommendedName->Des().Copy( iValueBuffer );
+ }
+ break;
+ case ETestAttachmentCharset:
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,radix,limit);
+ if (error == KErrNone)
+ {
+ if (oneAtta != NULL)
+ {
+ oneAtta->iAttaCharset = val;
+ }
+ }
+ break;
+ case ETestAttachmentCid:
+ if (oneAtta != NULL)
+ {
+ oneAtta->iAttaCid->Des().Copy(iValueBuffer);
+ }
+ break;
+ case ETestAttContTypeParamName:
+ iByteBuffer->Des().Copy( iValueBuffer );
+ if (oneAtta != NULL)
+ {
+ oneAtta->iContentTypeParams->AppendL(iByteBuffer->Des());
+ }
+ break;
+ case ETestAttContTypeParamValue:
+ iByteBuffer->Des().Copy( iValueBuffer );
+ if (oneAtta != NULL)
+ {
+ oneAtta->iContentTypeParams->AppendL(iByteBuffer->Des());
+ }
+ break;
+ case ETestAttXTypeParamName:
+ iByteBuffer->Des().Copy( iValueBuffer );
+ if (oneAtta != NULL)
+ {
+ oneAtta->iXTypeParams->AppendL(iByteBuffer->Des());
+ }
+ break;
+ case ETestAttXTypeParamValue:
+ iByteBuffer->Des().Copy( iValueBuffer );
+ if (oneAtta != NULL)
+ {
+ oneAtta->iXTypeParams->AppendL(iByteBuffer->Des());
+ }
+ break;
+ case ETestAttachmentRoot:
+ iAttaRoot = iAttaCount;
+ break;
+ case ETestAlias:
+ // all aliases are global even if they appear
+ // in the middle of a message
+ iAliasArray->AppendL( iValueBuffer );
+ iAliasCount++;
+ break;
+ case ETestMessageClass: // should be handled!
+ val = EMmsClassPersonal;
+ if ((iValueBuffer.CompareF(KPersonal)) == 0)
+ {
+ val = EMmsClassPersonal;
+ }
+ else if ((iValueBuffer.CompareF(KAdvertisement)) == 0)
+ {
+ val = EMmsClassAdvertisement;
+ }
+ else if ((iValueBuffer.CompareF(KInformational)) == 0)
+ {
+ val = EMmsClassInformational;
+ }
+ else if ((iValueBuffer.CompareF(KAuto)) == 0)
+ {
+ val = EMmsClassAuto;
+ }
+ else
+ {
+ val = (TMmsMessageClass)KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetMessageClass( val );
+ break;
+ case ETestReplyCharging:
+ val = 0;
+ if ((iValueBuffer.CompareF(KRequested)) == 0)
+ {
+ val = KMmsReplyChargingRequested;
+ }
+ else if ((iValueBuffer.CompareF(KReqTextOnly)) == 0)
+ {
+ val = KMmsReplyChargingRequestedTextOnly;
+ }
+ else if ((iValueBuffer.CompareF(KAccepted)) == 0)
+ {
+ val = KMmsReplyChargingAccepted;
+ }
+ else if ((iValueBuffer.CompareF(KAccTextOnly)) == 0)
+ {
+ val = KMmsReplyChargingAcceptedTextOnly;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetReplyCharging( val );
+ break;
+ case ETestReplyChargAbs:
+ error = date.Set(iValueBuffer);
+ if ( error == KErrNone )
+ {
+ interval = date.MicroSecondsFrom( y1970 );
+ aMmsHeaders.SetReplyChargingDate( (interval.Int64())/1000000 );
+ }
+ break;
+ case ETestReplyChargRel:
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,radix,limit);
+ if (error == KErrNone)
+ {
+ aMmsHeaders.SetReplyChargingInterval( val );
+ }
+ break;
+ case ETestReplyChargSize:
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,radix,sizeLimit);
+ if (error == KErrNone)
+ {
+ aMmsHeaders.SetReplyChargingSize( val );
+ }
+ break;
+ case ETestReplyChargID:
+ iByteBuffer->Des().Copy( iValueBuffer );
+ aMmsHeaders.SetReplyChargingIdL( iByteBuffer->Des() );
+ break;
+ case ETestTID:
+ iByteBuffer->Des().Copy( iValueBuffer );
+ aMmsHeaders.SetTidL( iByteBuffer->Des() );
+ break;
+ case ETestContentLocation:
+ iByteBuffer->Des().Copy( iValueBuffer );
+ if ( aMmsHeaders.MessageType() == KMmsMessageTypeMboxViewReq ||
+ aMmsHeaders.MessageType() == KMmsMessageTypeMboxViewConf ||
+ aMmsHeaders.MessageType() == KMmsMessageTypeMBoxDeleteReq )
+ {
+ aMmsHeaders.MMBoxMessageHeadersL().ContentLocationList().AppendL( iByteBuffer->Des() );
+ }
+ else if ( aMmsHeaders.MessageType() == KMmsMessageTypeMBoxDeleteConf )
+ {
+ aMmsHeaders.InsertDeleteContentLocationL( order, iByteBuffer->Des() );
+ }
+ else
+ {
+ aMmsHeaders.SetContentLocationL( iByteBuffer->Des() );
+ }
+ break;
+ case ETestPreviouslySentIndex:
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,radix,limit);
+ order = val;
+ break;
+ case ETestPreviouslySentBy:
+ aMmsHeaders.InsertPreviouslySentByL( order, iValueBuffer );
+ break;
+ case ETestPreviouslySentDate:
+ error = date.Set(iValueBuffer);
+ if ( error == KErrNone )
+ {
+ interval = date.MicroSecondsFrom( y1970 );
+ aMmsHeaders.InsertPreviouslySentDateL( order, (interval.Int64())/1000000 );
+ }
+ break;
+ case ETestMessageId:
+ iByteBuffer->Des().Copy( iValueBuffer );
+ aMmsHeaders.SetMessageIdL( iByteBuffer->Des() );
+ break;
+ case ETestMessageSize:
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,radix,sizeLimit);
+ if (error == KErrNone)
+ {
+ aMmsHeaders.SetMessageSize( val );
+ }
+ break;
+ case ETestVersion:
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,EHex,limit);
+ shortInteger = TInt16( val );
+ if (error == KErrNone)
+ {
+ aMmsHeaders.SetMmsVersion( shortInteger );
+ }
+ break;
+ case ETestReadStatus:
+ val = 0;
+ if ((iValueBuffer.CompareF(KRead)) == 0)
+ {
+ val = KMmsReadStatusRead;
+ }
+ else if ((iValueBuffer.CompareF(KDelNotRead)) == 0)
+ {
+ val = KMmsReadStatusDeletedWithoutBeingRead;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetReadStatus( val );
+ break;
+ case ETestResponseStatus:
+ val = 0;
+ if ((iValueBuffer.CompareF(KOk)) == 0)
+ {
+ val = KMmsStatusOk;
+ }
+ else if ((iValueBuffer.CompareF(KErrUnspecified)) == 0)
+ {
+ val = KMmsErrorUnspecified;
+ }
+ else if ((iValueBuffer.CompareF(KErrServiceDenied)) == 0)
+ {
+ val = KMmsErrorServiceDenied;
+ }
+ else if ((iValueBuffer.CompareF(KErrMessageFormatCorrupt)) == 0)
+ {
+ val = KMmsErrorMessageFormatCorrupt;
+ }
+ else if ((iValueBuffer.CompareF(KErrAddressUnresolved)) == 0)
+ {
+ val = KMmsErrorSendingAddressUnresolved;
+ }
+ else if ((iValueBuffer.CompareF(KErrMessageNotFound)) == 0)
+ {
+ val = KMmsErrorMessageNotFound;
+ }
+ else if ((iValueBuffer.CompareF(KErrNetworkProblem)) == 0)
+ {
+ val = KMmsErrorNetworkProblem;
+ }
+ else if ((iValueBuffer.CompareF(KErrContentNotAccepted)) == 0)
+ {
+ val = KMmsErrorNoContentAccepted;
+ }
+ else if ((iValueBuffer.CompareF(KErrUnsupportedMessage)) == 0)
+ {
+ val = KMmsErrorUnsupportedMessage;
+ }
+ else if ((iValueBuffer.CompareF(KErrTransient)) == 0)
+ {
+ val = KMmsErrorTransientFailure;
+ }
+ else if ((iValueBuffer.CompareF(KErrTransientAddressUnresolved)) == 0)
+ {
+ val = KMmsErrorTransientSendingAddressUnresolved;
+ }
+ else if ((iValueBuffer.CompareF(KErrTransientNotFound)) == 0)
+ {
+ val = KMmsErrorTransientMessageNotFound;
+ }
+ else if ((iValueBuffer.CompareF(KErrTransientNetworkproblem)) == 0)
+ {
+ val = KMmsErrorTransientNetworkProblem;
+ }
+ else if ((iValueBuffer.CompareF(KErrPermanent)) == 0)
+ {
+ val = KMmsErrorPermanentFailure;
+ }
+ else if ((iValueBuffer.CompareF(KErrPermanentServiceDenied)) == 0)
+ {
+ val = KMmsErrorPermanentServiceDenied;
+ }
+ else if ((iValueBuffer.CompareF(KErrPermanentMessageFormatCorrupt)) == 0)
+ {
+ val = KMmsErrorPermanentMessageFormatCorrupt;
+ }
+ else if ((iValueBuffer.CompareF(KErrPermanentAddressUnresolved)) == 0)
+ {
+ val = KMmsErrorPermanentSendingAddressUnresolved;
+ }
+ else if ((iValueBuffer.CompareF(KErrPermanentNotFound)) == 0)
+ {
+ val = KMmsErrorPermanentMessageNotFound;
+ }
+ else if ((iValueBuffer.CompareF(KErrPermanentContentNotAccepted)) == 0)
+ {
+ val = KMmsErrorPermanentContentNotAccepted;
+ }
+ else if ((iValueBuffer.CompareF(KErrReplyChargingLimitNotMet)) == 0)
+ {
+ val = KMmsErrorPermanentReplyChargingLimitationsNotMet;
+ }
+ else if ((iValueBuffer.CompareF(KErrReplyChargingRequestNotAccepted)) == 0)
+ {
+ val = KMmsErrorPermanentReplyChargingRequestNotAccepted;
+ }
+ else if ((iValueBuffer.CompareF(KErrReplyChargingForwardingDenied)) == 0)
+ {
+ val = KMmsErrorPermanentReplyChargingForwardingDenied;
+ }
+ else if ((iValueBuffer.CompareF(KErrReplyChargingNotSupported)) == 0)
+ {
+ val = KMmsErrorPermanentReplyChargingNotSupported;
+ }
+ else if ((iValueBuffer.CompareF(KErrTransientPartialSuccess)) == 0)
+ {
+ val = KMmsErrorTransientPartialSuccess;
+ }
+ else if ((iValueBuffer.CompareF(KErrAddressHidingNotSupported)) == 0)
+ {
+ val = KMmsErrorPermanentAddressHidingNotSupported;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ if ( aMmsHeaders.MessageType() == KMmsMessageTypeMBoxDeleteConf )
+ {
+ aMmsHeaders.InsertDeleteStatusL( order, val );
+ }
+ else
+ {
+ aMmsHeaders.SetResponseStatus( val );
+ }
+ break;
+ case ETestResponseText:
+ if ( aMmsHeaders.MessageType() == KMmsMessageTypeMBoxDeleteConf )
+ {
+ aMmsHeaders.InsertDeleteResponseTextL( order, iValueBuffer );
+ }
+ else
+ {
+ aMmsHeaders.SetResponseTextL( iValueBuffer );
+ }
+ break;
+ case ETestRetrieveStatus:
+ val = 0;
+ if ((iValueBuffer.CompareF(KOk)) == 0)
+ {
+ val = KMmsStatusOk;
+ }
+ else if ((iValueBuffer.CompareF(KErrTransient)) == 0)
+ {
+ val = KMmsErrorTransientFailure;
+ }
+ else if ((iValueBuffer.CompareF(KErrTransientNotFound)) == 0)
+ {
+ val = KMmsErrorReceiveTransientMessageNotFound;
+ }
+ else if ((iValueBuffer.CompareF(KErrTransientNetworkproblem)) == 0)
+ {
+ val = KMmsErrorReceiveTransientNetworkProblem;
+ }
+ else if ((iValueBuffer.CompareF(KErrPermanent)) == 0)
+ {
+ val = KMmsErrorPermanentFailure;
+ }
+ else if ((iValueBuffer.CompareF(KErrPermanentServiceDenied)) == 0)
+ {
+ val = KMmsErrorPermanentServiceDenied;
+ }
+ else if ((iValueBuffer.CompareF(KErrPermanentNotFound)) == 0)
+ {
+ val = KMmsErrorReceivePermanentMessageNotFound;
+ }
+ else if ((iValueBuffer.CompareF(KErrRetrieveContentUnsupported)) == 0)
+ {
+ val = KMmsErrorReceivePermanentContentUnsupported;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetResponseStatus( val );
+ break;
+ case ETestRetrieveText:
+ aMmsHeaders.SetResponseTextL( iValueBuffer );
+ break;
+ case ETestStatus:
+ val = 0;
+ if ((iValueBuffer.CompareF(KDeferred)) == 0)
+ {
+ val = KMmsMessageStatusDeferred;
+ }
+ else if ((iValueBuffer.CompareF(KExpired)) == 0)
+ {
+ val = KMmsMessageStatusExpired;
+ }
+ else if ((iValueBuffer.CompareF(KRetrieved)) == 0)
+ {
+ val = KMmsMessageStatusRetrieved;
+ }
+ else if ((iValueBuffer.CompareF(KRejected)) == 0)
+ {
+ val = KMmsMessageStatusRejected;
+ }
+ else if ((iValueBuffer.CompareF(KUnrecognized)) == 0)
+ {
+ val = KMmsMessageStatusUnrecognized;
+ }
+ else if ((iValueBuffer.CompareF(KIndeterminate)) == 0)
+ {
+ val = KMmsMessageStatusIndeterminate;
+ }
+ else if ((iValueBuffer.CompareF(KForwarded)) == 0)
+ {
+ val = KMmsMessageStatusForwarded;
+ }
+ else if ((iValueBuffer.CompareF(KUnreachable)) == 0)
+ {
+ val = KMmsMessageStatusUnreachable;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetStatus( val );
+ break;
+ case ETestMessageType:
+ val = 0;
+ if ((iValueBuffer.CompareF(KSendReq)) == 0)
+ {
+ val = KMmsMessageTypeMSendReq;
+ }
+ else if ((iValueBuffer.CompareF(KSendConf)) == 0)
+ {
+ val = KMmsMessageTypeMSendConf;
+ }
+ else if ((iValueBuffer.CompareF(KNotifInd)) == 0)
+ {
+ val = KMmsMessageTypeMNotificationInd;
+ }
+ else if ((iValueBuffer.CompareF(KNotifResp)) == 0)
+ {
+ val = KMmsMessageTypeMNotifyRespInd;
+ }
+ else if ((iValueBuffer.CompareF(KRetrConf)) == 0)
+ {
+ val = KMmsMessageTypeMRetrieveConf;
+ }
+ else if ((iValueBuffer.CompareF(KAckInd)) == 0)
+ {
+ val = KMmsMessageTypeAcknowledgeInd;
+ }
+ else if ((iValueBuffer.CompareF(KDelInd)) == 0)
+ {
+ val = KMmsMessageTypeDeliveryInd;
+ }
+ else if ((iValueBuffer.CompareF(KReadReqInd)) == 0)
+ {
+ val = KMmsMessageTypeReadRecInd;
+ }
+ else if ((iValueBuffer.CompareF(KReadOrigInd)) == 0)
+ {
+ val = KMmsMessageTypeReadOrigInd;
+ }
+ else if ((iValueBuffer.CompareF(KForwardRec)) == 0)
+ {
+ val = KMmsMessageTypeForwardReq;
+ }
+ else if ((iValueBuffer.CompareF(KForwardConf)) == 0)
+ {
+ val = KMmsMessageTypeForwardConf;
+ }
+ else if ((iValueBuffer.CompareF(KMBoxStoreReq)) == 0)
+ {
+ val = KMmsMessageTypeMboxStoreReq;
+ }
+ else if ((iValueBuffer.CompareF(KMBoxStoreConf)) == 0)
+ {
+ val = KMmsMessageTypeMboxStoreConf;
+ }
+ else if ((iValueBuffer.CompareF(KMBoxViewReq)) == 0)
+ {
+ val = KMmsMessageTypeMboxViewReq;
+ }
+ else if ((iValueBuffer.CompareF(KMBoxViewConf)) == 0)
+ {
+ val = KMmsMessageTypeMboxViewConf;
+ }
+ else if ((iValueBuffer.CompareF(KMBoxUploadReq)) == 0)
+ {
+ val = KMmsMessageTypeMBoxUploadReq;
+ }
+ else if ((iValueBuffer.CompareF(KMBoxUploadConf)) == 0)
+ {
+ val = KMmsMessageTypeMBoxUploadConf;
+ }
+ else if ((iValueBuffer.CompareF(KMBoxDeleteReq)) == 0)
+ {
+ val = KMmsMessageTypeMBoxDeleteReq;
+ }
+ else if ((iValueBuffer.CompareF(KMBoxDeleteConf)) == 0)
+ {
+ val = KMmsMessageTypeMBoxDeleteConf;
+ }
+ else if ((iValueBuffer.CompareF(KMBoxDescr)) == 0)
+ {
+ val = KMmsMessageTypeMBoxDescr;
+ }
+ else if ((iValueBuffer.CompareF(KDeleteReq)) == 0)
+ {
+ val = KMmsMessageTypeDeleteReq;
+ }
+ else if ((iValueBuffer.CompareF(KDeleteConf)) == 0)
+ {
+ val = KMmsMessageTypeDeleteConf;
+ }
+ else if ((iValueBuffer.CompareF(KCancelReq)) == 0)
+ {
+ val = KMmsMessageTypeCancelReq;
+ }
+ else if ((iValueBuffer.CompareF(KCancelResp)) == 0)
+ {
+ val = KMmsMessageTypeCancelConf;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetMessageType( val );
+ break;
+ case ETestAttribute:
+ val = 0;
+ iByteBuffer->Des().Copy( iValueBuffer );
+ if ((iByteBuffer->Des().CompareF(KTestBcc)) == 0)
+ {
+ val = KMmsAssignedBcc;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestCc)) == 0)
+ {
+ val = KMmsAssignedCc;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestContent)) == 0)
+ {
+ val = KMmsAssignedContent;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestContentType)) == 0)
+ {
+ val = KMmsAssignedContentType;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestDate)) == 0)
+ {
+ val = KMmsAssignedDate;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestDeliveryReport)) == 0)
+ {
+ val = KMmsAssignedDeliveryReport;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestDeliveryTime)) == 0)
+ {
+ val = KMmsAssignedDeliveryTime;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestExpiry)) == 0)
+ {
+ val = KMmsAssignedExpiry;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestFrom)) == 0)
+ {
+ val = KMmsAssignedFrom;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestMessageClass)) == 0)
+ {
+ val = KMmsAssignedMessageClass;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestMessageId)) == 0)
+ {
+ val = KMmsAssignedMessageId;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestMessageSize)) == 0)
+ {
+ val = KMmsAssignedMessageSize;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestPriority)) == 0)
+ {
+ val = KMmsAssignedPriority;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestReadReply)) == 0)
+ {
+ val = KMmsAssignedReadReply;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestSubject)) == 0)
+ {
+ val = KMmsAssignedSubject;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestTo)) == 0)
+ {
+ val = KMmsAssignedTo;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestReplyCharging)) == 0)
+ {
+ val = KMmsAssignedReplyCharging;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestReplyChargID)) == 0)
+ {
+ val = KMmsAssignedReplyChargingID;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestReplyCharg)) == 0)
+ {
+ val = KMmsAssignedReplyChargingDeadline;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestReplyChargSize)) == 0)
+ {
+ val = KMmsAssignedReplyChargingSize;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestPreviouslySentBy)) == 0)
+ {
+ val = KMmsAssignedPreviouslySentBy;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestPreviouslySentDate)) == 0)
+ {
+ val = KMmsAssignedPreviouslySentDate;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestAdditionalHeaders)) == 0)
+ {
+ val = KMmsAssignedAdditionalHeaders;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.MMBoxViewHeadersL().AttributeArray().InsertInOrder(val);
+ break;
+ case ETestDistributionIndicator:
+ val = 0;
+ if ((iValueBuffer.CompareF(KYes)) == 0)
+ {
+ val = KMmsYes;
+ }
+ else if ((iValueBuffer.CompareF(KNo)) == 0)
+ {
+ val = KMmsNo;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetDistributionIndicator( val );
+ break;
+ case ETestLimit:
+ aMmsHeaders.MMBoxViewHeadersL().SetMmsLimit(KMaxTUint32);
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,radix,limit);
+ if ( val > allLimit )
+ {
+ val = KMaxTUint32; // this is too hard to type, more than 999999 means "all"
+ }
+ if( error == KErrNone )
+ {
+ aMmsHeaders.MMBoxViewHeadersL().SetMmsLimit(val);
+ }
+ break;
+ case ETestMessageQuota:
+ aMmsHeaders.MMBoxViewHeadersL().SetMMBoxQuotaNumber(KMaxTUint32);
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,radix,limit);
+ if ( val > allLimit )
+ {
+ val = KMaxTUint32; // this is too hard to type, more than 999999 means "all"
+ }
+ if (error == KErrNone)
+ {
+ aMmsHeaders.MMBoxViewHeadersL().SetMMBoxQuotaNumber(val);
+ }
+ break;
+ case ETestSizeQuota:
+ aMmsHeaders.MMBoxViewHeadersL().SetMMBoxQuotaSize(KMaxTUint32);
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,radix,limit);
+ if ( val > allLimit )
+ {
+ val = KMaxTUint32; // this is too hard to type, more than 999999 means "all"
+ }
+ if (error == KErrNone)
+ {
+ aMmsHeaders.MMBoxViewHeadersL().SetMMBoxQuotaSize(val);
+ }
+ break;
+ case ETestMessageTotal:
+ aMmsHeaders.MMBoxViewHeadersL().SetMMBoxTotalNumber(KMaxTUint32);
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,radix,limit);
+ if ( val > allLimit )
+ {
+ val = KMaxTUint32; // this is too hard to type, more than 999999 means "all"
+ }
+ if (error == KErrNone)
+ {
+ aMmsHeaders.MMBoxViewHeadersL().SetMMBoxTotalNumber(val);
+ }
+ break;
+ case ETestSizeTotal:
+ aMmsHeaders.MMBoxViewHeadersL().SetMMBoxTotalSize(KMaxTUint32);
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,radix,limit);
+ if ( val > allLimit )
+ {
+ val = KMaxTUint32; // this is too hard to type, more than 999999 means "all"
+ }
+ if (error == KErrNone)
+ {
+ aMmsHeaders.MMBoxViewHeadersL().SetMMBoxTotalSize(val);
+ }
+ break;
+ case ETestMessageCount:
+ aMmsHeaders.MMBoxViewHeadersL().SetMmsMessageCount(KMaxTUint32);
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,radix,limit);
+ if ( val > allLimit )
+ {
+ val = KMaxTUint32; // this is too hard to type, more than 999999 means "all"
+ }
+ if (error == KErrNone)
+ {
+ aMmsHeaders.MMBoxViewHeadersL().SetMmsMessageCount(val);
+ }
+ break;
+ case ETestAddKeyword:
+ aMmsHeaders.MMBoxMessageHeadersL().AppendKeywordItemL(KMmsAddToken, iValueBuffer);
+ break;
+ case ETestRemoveKeyword:
+ aMmsHeaders.MMBoxMessageHeadersL().AppendKeywordItemL(KMmsRemoveToken, iValueBuffer);
+ break;
+ case ETestFilterKeyword:
+ aMmsHeaders.MMBoxMessageHeadersL().AppendKeywordItemL(KMmsFilterToken, iValueBuffer);
+ break;
+ case ETestMMState:
+ val = 0;
+ if ((iValueBuffer.CompareF(KDraft)) == 0)
+ {
+ val = KMmsDraft;
+ }
+ else if ((iValueBuffer.CompareF(KSent)) == 0)
+ {
+ val = KMmsSent;
+ }
+ else if ((iValueBuffer.CompareF(KNew)) == 0)
+ {
+ val = KMmsNew;
+ }
+ else if ((iValueBuffer.CompareF(KRetrieved)) == 0)
+ {
+ val = KMmsRetrieved;
+ }
+ else if ((iValueBuffer.CompareF(KForwarded)) == 0)
+ {
+ val = KMmsForwarded;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ if ( aMmsHeaders.MessageType() == KMmsMessageTypeMboxViewReq ||
+ aMmsHeaders.MessageType() == KMmsMessageTypeMboxViewConf )
+ {
+ aMmsHeaders.MMBoxViewHeadersL().MMStateArray().InsertInOrder( val );
+ }
+ else
+ {
+ aMmsHeaders.MMBoxMessageHeadersL().SetMMState( val );
+ }
+ break;
+ case ETestQuota:
+ val = 0;
+ if ((iValueBuffer.CompareF(KYes)) == 0)
+ {
+ val = KMmsYes;
+ }
+ else if ((iValueBuffer.CompareF(KNo)) == 0)
+ {
+ val = KMmsNo;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.MMBoxViewHeadersL().SetMmsQuotas( val );
+ break;
+ case ETestStart:
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,radix,limit);
+ if (error == KErrNone)
+ {
+ aMmsHeaders.MMBoxViewHeadersL().SetMmsStart(val);
+ }
+ break;
+ case ETestStore:
+ val = 0;
+ if ((iValueBuffer.CompareF(KYes)) == 0)
+ {
+ val = KMmsYes;
+ }
+ else if ((iValueBuffer.CompareF(KNo)) == 0)
+ {
+ val = KMmsNo;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.MMBoxMessageHeadersL().SetMmsStore( val );
+ break;
+ case ETestStored:
+ val = 0;
+ if ((iValueBuffer.CompareF(KYes)) == 0)
+ {
+ val = KMmsYes;
+ }
+ else if ((iValueBuffer.CompareF(KNo)) == 0)
+ {
+ val = KMmsNo;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.MMBoxMessageHeadersL().SetMmsStored( val );
+ break;
+ case ETestStoreStatus:
+ val = 0;
+ if ((iValueBuffer.CompareF(KOk)) == 0)
+ {
+ val = KMmsStatusOk;
+ }
+ else if ((iValueBuffer.CompareF(KErrTransient)) == 0)
+ {
+ val = KMmsErrorTransientFailure;
+ }
+ else if ((iValueBuffer.CompareF(KErrTransientNetworkproblem)) == 0)
+ {
+ val = KMmsErrorStoreStatusTransientNetworkProblem;
+ }
+ else if ((iValueBuffer.CompareF(KErrPermanent)) == 0)
+ {
+ val = KMmsErrorPermanentFailure;
+ }
+ else if ((iValueBuffer.CompareF(KErrPermanentServiceDenied)) == 0)
+ {
+ val = KMmsErrorPermanentServiceDenied;
+ }
+ else if ((iValueBuffer.CompareF(KErrPermanentMessageFormatCorrupt)) == 0)
+ {
+ val = KMmsErrorPermanentMessageFormatCorrupt;
+ }
+ else if ((iValueBuffer.CompareF(KErrPermanentNotFound)) == 0)
+ {
+ val = KMmsErrorStoreStatusPermanentMessageNotFound;
+ }
+ else if ((iValueBuffer.CompareF(KErrMMBoxFull)) == 0)
+ {
+ val = KMmsErrorStoreStatusPermanentMmboxFull;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.MMBoxMessageHeadersL().SetMmsStoreStatus( val );
+ break;
+ case ETestStoreStatusText:
+ aMmsHeaders.MMBoxMessageHeadersL().SetMmsStoreStatusTextL( iValueBuffer );
+ break;
+ case ETestTotals:
+ val = 0;
+ if ((iValueBuffer.CompareF(KYes)) == 0)
+ {
+ val = KMmsYes;
+ }
+ else if ((iValueBuffer.CompareF(KNo)) == 0)
+ {
+ val = KMmsNo;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.MMBoxViewHeadersL().SetMmsTotals( val );
+ break;
+
+ case ETestDeleteInfoIndex:
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,radix,limit);
+ order = val;
+ break;
+
+ case ETestApplicId:
+ aMmsHeaders.SetApplicIdL( iValueBuffer );
+ break;
+ case ETestReplyApplicId:
+ aMmsHeaders.SetReplyApplicIdL( iValueBuffer );
+ break;
+ case ETestApplicInfo:
+ iByteBuffer->Des().Copy( iValueBuffer );
+ aMmsHeaders.SetAuxApplicInfoL( iByteBuffer->Des() );
+ break;
+ case ETestContentClass:
+ val = 0;
+ if ((iValueBuffer.CompareF(KText)) == 0)
+ {
+ val = KMmsContentClassText;
+ }
+ else if ((iValueBuffer.CompareF(KImageBasic)) == 0)
+ {
+ val = KMmsContentClassImageBasic;
+ }
+ else if ((iValueBuffer.CompareF(KImageRich)) == 0)
+ {
+ val = KMmsContentClassImageRich;
+ }
+ else if ((iValueBuffer.CompareF(KVideoBasic)) == 0)
+ {
+ val = KMmsContentClassVideoBasic;
+ }
+ else if ((iValueBuffer.CompareF(KVideoRich)) == 0)
+ {
+ val = KMmsContentClassVideoRich;
+ }
+ else if ((iValueBuffer.CompareF(KMegaPixel)) == 0)
+ {
+ val = KMmsContentClassMegaPixel;
+ }
+ else if ((iValueBuffer.CompareF(KContentBasic)) == 0)
+ {
+ val = KMmsContentClassContentBasic;
+ }
+ else if ((iValueBuffer.CompareF(KContentRich)) == 0)
+ {
+ val = KMmsContentClassContentRich;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetContentClass( val );
+ break;
+ case ETestDrmContent:
+ val = 0;
+ if ((iValueBuffer.CompareF(KYes)) == 0)
+ {
+ val = KMmsYes;
+ }
+ else if ((iValueBuffer.CompareF(KNo)) == 0)
+ {
+ val = KMmsNo;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetDrmContent( val );
+ break;
+ case ETestAdaptationAllowed:
+ val = 0;
+ if ((iValueBuffer.CompareF(KYes)) == 0)
+ {
+ val = KMmsYes;
+ }
+ else if ((iValueBuffer.CompareF(KNo)) == 0)
+ {
+ val = KMmsNo;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetAdaptationAllowed( val );
+ break;
+ case ETestRecommendedRetrievalMode:
+ val = 0;
+ if ((iValueBuffer.CompareF(KManual)) == 0)
+ {
+ val = KMmsRecommendedRetrievalModeManual;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetRecommendedRetrievalMode( val );
+ break;
+ case ETestRecRetrievalModeText:
+ aMmsHeaders.SetRecommendedRetrievalModeTextL( iValueBuffer );
+ break;
+ case ETestReplaceId:
+ iByteBuffer->Des().Copy( iValueBuffer );
+ aMmsHeaders.SetReplaceCancelIdL( iByteBuffer->Des() );
+ break;
+ case ETestStatusText:
+ aMmsHeaders.SetResponseTextL( iValueBuffer );
+ break;
+ case ETestCancelId:
+ iByteBuffer->Des().Copy( iValueBuffer );
+ aMmsHeaders.SetReplaceCancelIdL( iByteBuffer->Des() );
+ break;
+ case ETestCancelStatus:
+ val = 0;
+ if ((iValueBuffer.CompareF(KCancelSuccessful)) == 0)
+ {
+ val = KMmsCancelRequestSuccessfullyReceived;
+ }
+ else if ((iValueBuffer.CompareF(KCancelCorrupted)) == 0)
+ {
+ val = KMmsCancelRequestCorrupted;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetCancelStatus( val );
+ break;
+ default:
+ break;
+ }
+ }
+ else
+ {
+ switch(readStatus)
+ {
+ case ETestAlias:
+ iAliasArray->AppendL( iValueBuffer );
+ iAliasCount++;
+ break;
+
+ default:
+ break;
+ }
+
+ }
+ }
+ return(-1);
+}
+
+// ---------------------------------------------------------
+// CMmsReadFile()::ReadRowL
+// ---------------------------------------------------------
+//
+TTestReadStatus CMmsReadFile::ReadRowL()
+ {
+
+ TBuf8<DefaultBufLen> RowBuffer;
+ TBuf8<32> KeyBuffer;
+
+ // READ ONE ROW AND DROP CR+LF FROM THE END OF LINE
+ TChar delim( 10 );
+ iReader->ReadL( RowBuffer, delim);
+ TInt length = RowBuffer.Length();
+ if ( RowBuffer.Length() < 2 )
+ {
+ return ETestEof;
+ }
+ RowBuffer.Delete(length - 2,2);
+
+ // DROP POSSIBLE COMMENT OUT
+ TInt pos = RowBuffer.Locate( ';' );
+ if ( pos >= 0 ) RowBuffer.Delete( pos, length-pos-2 );
+
+ if ( RowBuffer.Length() == 0 )
+ {
+ // the line contained only comment
+ return ETestUnknown;
+ }
+
+ // First split the row (:)
+ pos = RowBuffer.Locate( ':' );
+ if (pos > 0)
+ {
+ TPtrC8 p = RowBuffer.Mid( pos+1 );
+ length = p.Length();
+ iValueBuffer.Zero();
+ for (TInt i=0; i < length; ++i)
+ {
+ iValueBuffer.Append(p[i]);
+ }
+ iValueBuffer.Trim();
+ TPtrC8 pp = RowBuffer.Left(pos);
+ KeyBuffer.CopyUC(pp);
+ KeyBuffer.Trim();
+ }
+ // TRY TO FIND CORRECT TAG
+ if ((KeyBuffer.CompareF(KTestNewMessage)) == 0) return(ETestNewMessage);
+ if ((KeyBuffer.CompareF(KTestMessageType)) == 0) return ETestMessageType;
+ if ((KeyBuffer.CompareF(KTestDate)) == 0) return ETestDate;
+ if ((KeyBuffer.CompareF(KTestFrom)) == 0) return ETestFrom;
+ if ((KeyBuffer.CompareF(KTestTo)) == 0) return ETestTo;
+ if ((KeyBuffer.CompareF(KTestCc)) == 0) return ETestCc;
+ if ((KeyBuffer.CompareF(KTestBcc)) == 0) return ETestBcc;
+ if ((KeyBuffer.CompareF(KTestSubject)) == 0) return ETestSubject;
+ if ((KeyBuffer.CompareF(KTestExpiryRel)) == 0) return ETestExpiryRel;
+ if ((KeyBuffer.CompareF(KTestExpiryAbs)) == 0) return ETestExpiryAbs;
+ if ((KeyBuffer.CompareF(KTestDeliveryTimeRel)) == 0) return ETestDeliveryTimeRel;
+ if ((KeyBuffer.CompareF(KTestDeliveryTimeAbs)) == 0) return ETestDeliveryTimeAbs;
+ if ((KeyBuffer.CompareF(KTestPriority)) == 0) return ETestPriority;
+ if ((KeyBuffer.CompareF(KTestSenderVisibility)) == 0) return ETestSenderVisibility;
+ if ((KeyBuffer.CompareF(KTestDeliveryReport)) == 0) return ETestDeliveryReport;
+ if ((KeyBuffer.CompareF(KTestReadReply)) == 0) return ETestReadReply;
+ if ((KeyBuffer.CompareF(KTestNewAttachment)) == 0) return ETestNewAttachment;
+ if ((KeyBuffer.CompareF(KTestAttachmentName)) == 0) return ETestAttaRecommendedName;
+ if ((KeyBuffer.CompareF(KTestAttachmentContLoc)) == 0) return ETestAttachmentContLoc;
+ if ((KeyBuffer.CompareF(KTestAttachmentType)) == 0) return ETestAttachmentType;
+ if ((KeyBuffer.CompareF(KTestAttachmentCharset)) == 0) return ETestAttachmentCharset;
+ if ((KeyBuffer.CompareF(KTestAttachmentCid)) == 0) return ETestAttachmentCid;
+ if ((KeyBuffer.CompareF(KTestAttachmentRoot)) == 0) return ETestAttachmentRoot;
+ if ((KeyBuffer.CompareF(KTestEndOfFile)) == 0) return ETestEof;
+ if ((KeyBuffer.CompareF(KTestMessageClass)) == 0) return ETestMessageClass;
+ if ((KeyBuffer.CompareF(KTestDelivRepSendAllow)) == 0) return ETestDelivReportSendAllow;
+ if ((KeyBuffer.CompareF(KTestAlias)) == 0 ) return ETestAlias;
+ if ((KeyBuffer.CompareF(KTestFromAlias)) == 0 ) return ETestFromAlias;
+ if ((KeyBuffer.CompareF(KTestToAlias)) == 0 ) return ETestToAlias;
+ if ((KeyBuffer.CompareF(KTestCcAlias)) == 0 ) return ETestCcAlias;
+ if ((KeyBuffer.CompareF(KTestBccAlias)) == 0 ) return ETestBccAlias;
+ if ((KeyBuffer.CompareF(KTestReplyCharging)) == 0 ) return ETestReplyCharging;
+ if ((KeyBuffer.CompareF(KTestReplyChargAbs)) == 0 ) return ETestReplyChargAbs;
+ if ((KeyBuffer.CompareF(KTestReplyChargRel)) == 0 ) return ETestReplyChargRel;
+ if ((KeyBuffer.CompareF(KTestReplyChargSize)) == 0 ) return ETestReplyChargSize;
+ if ((KeyBuffer.CompareF(KTestReplyChargID)) == 0 ) return ETestReplyChargID;
+ if ((KeyBuffer.CompareF(KTestTID)) == 0 ) return ETestTID;
+ if ((KeyBuffer.CompareF(KTestContentLocation)) == 0 ) return ETestContentLocation;
+ if ((KeyBuffer.CompareF(KTestPreviouslySentIndex)) == 0 ) return ETestPreviouslySentIndex;
+ if ((KeyBuffer.CompareF(KTestPreviouslySentBy)) == 0 ) return ETestPreviouslySentBy;
+ if ((KeyBuffer.CompareF(KTestPreviouslySentDate)) == 0 ) return ETestPreviouslySentDate;
+ if ((KeyBuffer.CompareF(KTestMessageId)) == 0 ) return ETestMessageId;
+ if ((KeyBuffer.CompareF(KTestMessageSize)) == 0 ) return ETestMessageSize;
+ if ((KeyBuffer.CompareF(KTestVersion)) == 0 ) return ETestVersion;
+ if ((KeyBuffer.CompareF(KTestReadStatus)) == 0 ) return ETestReadStatus;
+ if ((KeyBuffer.CompareF(KTestResponseStatus)) == 0 ) return ETestResponseStatus;
+ if ((KeyBuffer.CompareF(KTestResponseText)) == 0 ) return ETestResponseText;
+ if ((KeyBuffer.CompareF(KTestRetrieveStatus)) == 0 ) return ETestRetrieveStatus;
+ if ((KeyBuffer.CompareF(KTestRetrieveText)) == 0 ) return ETestRetrieveText;
+ if ((KeyBuffer.CompareF(KTestStatus)) == 0 ) return ETestStatus;
+ if ((KeyBuffer.CompareF(KTestAttribute)) == 0 ) return ETestAttribute;
+ if ((KeyBuffer.CompareF(KTestDistributionIndicator)) == 0 ) return ETestDistributionIndicator;
+ if ((KeyBuffer.CompareF(KTestLimit)) == 0 ) return ETestLimit;
+ if ((KeyBuffer.CompareF(KTestMessageQuota)) == 0 ) return ETestMessageQuota;
+ if ((KeyBuffer.CompareF(KTestSizeQuota)) == 0 ) return ETestSizeQuota;
+ if ((KeyBuffer.CompareF(KTestMessageTotal)) == 0 ) return ETestMessageTotal;
+ if ((KeyBuffer.CompareF(KTestSizeTotal)) == 0 ) return ETestSizeTotal;
+ if ((KeyBuffer.CompareF(KTestMessageCount)) == 0 ) return ETestMessageCount;
+ if ((KeyBuffer.CompareF(KTestAddKeyword)) == 0 ) return ETestAddKeyword;
+ if ((KeyBuffer.CompareF(KTestRemoveKeyword)) == 0 ) return ETestRemoveKeyword;
+ if ((KeyBuffer.CompareF(KTestFilterKeyword)) == 0 ) return ETestFilterKeyword;
+ if ((KeyBuffer.CompareF(KTestMMState)) == 0 ) return ETestMMState;
+ if ((KeyBuffer.CompareF(KTestQuota)) == 0 ) return ETestQuota;
+ if ((KeyBuffer.CompareF(KTestStart)) == 0 ) return ETestStart;
+ if ((KeyBuffer.CompareF(KTestStore)) == 0 ) return ETestStore;
+ if ((KeyBuffer.CompareF(KTestStored)) == 0 ) return ETestStored;
+ if ((KeyBuffer.CompareF(KTestStoreStatus)) == 0 ) return ETestStoreStatus;
+ if ((KeyBuffer.CompareF(KTestStoreStatusText)) == 0 ) return ETestStoreStatusText;
+ if ((KeyBuffer.CompareF(KTestTotals)) == 0 ) return ETestTotals;
+ if ((KeyBuffer.CompareF(KTestDeleteInfoIndex)) == 0 ) return ETestDeleteInfoIndex;
+ if ((KeyBuffer.CompareF(KTestApplicId)) == 0 ) return ETestApplicId;
+ if ((KeyBuffer.CompareF(KTestReplyApplicId)) == 0 ) return ETestReplyApplicId;
+ if ((KeyBuffer.CompareF(KTestApplicInfo)) == 0 ) return ETestApplicInfo;
+ if ((KeyBuffer.CompareF(KTestContentClass)) == 0 ) return ETestContentClass;
+ if ((KeyBuffer.CompareF(KTestDrmContent)) == 0 ) return ETestDrmContent;
+ if ((KeyBuffer.CompareF(KTestAdaptationAllowed)) == 0 ) return ETestAdaptationAllowed;
+ if ((KeyBuffer.CompareF(KTestRecommendedRetrievalMode)) == 0 ) return ETestRecommendedRetrievalMode;
+ if ((KeyBuffer.CompareF(KTestRecRetrievalModeText)) == 0 ) return ETestRecRetrievalModeText;
+ if ((KeyBuffer.CompareF(KTestReplaceId)) == 0 ) return ETestReplaceId;
+ if ((KeyBuffer.CompareF(KTestStatusText)) == 0 ) return ETestStatusText;
+ if ((KeyBuffer.CompareF(KTestCancelId)) == 0 ) return ETestCancelId;
+ if ((KeyBuffer.CompareF(KTestCancelStatus)) == 0 ) return ETestCancelStatus;
+ if ((KeyBuffer.CompareF(KTestAttContTypeParamName)) == 0 ) return ETestAttContTypeParamName;
+ if ((KeyBuffer.CompareF(KTestAttContTypeParamValue)) == 0 ) return ETestAttContTypeParamValue;
+ if ((KeyBuffer.CompareF(KTestAttXTypeParamName)) == 0 ) return ETestAttXTypeParamName;
+ if ((KeyBuffer.CompareF(KTestAttXTypeParamValue)) == 0 ) return ETestAttXTypeParamValue;
+ return ETestUnknown;
+ }
+
+// ---------------------------------------------------------
+// CMmsReadFile()::CreateMessageL
+// program build a message from given parts
+// ---------------------------------------------------------
+//
+void CMmsReadFile::CreateMessageL( CMmsClientMtm* aMmsClient, CMmsHeaders* aMmsHeaders )
+ {
+
+ // Reset inactivity timer to keem viewServer from crashing
+ User::ResetInactivityTime();
+
+ TInt i;
+ TInt error = KErrNone;
+ RFile attaFile;
+ _LIT8(KLeftAngle, "<");
+ _LIT8(KRightAngle, ">");
+ // we can't use "seconds from" as it only returns a
+ // 32 bit signed integer. If fails in 2038.
+ // "microseconds from" returns a 64 bit signed integer
+
+ CMsvStore* store = aMmsClient->Entry().EditStoreL();
+ CleanupStack::PushL(store);
+ aMmsHeaders->StoreL(*store);
+ store->CommitL();
+ CleanupStack::PopAndDestroy( store );
+ store = NULL;
+
+ aMmsClient->LoadMessageL(); // read store is needed to do this
+
+ store = aMmsClient->Entry().EditStoreL();
+ CleanupStack::PushL(store);
+ CMsvAttachment* attaInfo = NULL;
+ TMsvAttachmentId attaId = 0;
+
+ for ( i=0; i < iAttaStructures->Count(); ++i)
+ {
+ attaId = KMsvNullIndexEntryId;
+ iFilename.Copy(iAttaStructures->At(i)->iAtta->Des());
+
+ error = attaFile.Open( iFs, iFilename, EFileShareReadersOnly | EFileRead );
+ User::LeaveIfError( error );
+
+ CleanupClosePushL(attaFile);
+
+ CMsvMimeHeaders* mimeHeaders = CMsvMimeHeaders::NewL();
+ CleanupStack::PushL( mimeHeaders );
+ TPtrC8 contentType = iAttaStructures->At(i)->iAttaType->Des();
+
+ TDataRecognitionResult result;
+ result.Reset(); // make sure that it is cleared
+
+ if(iAttaStructures->At(i)->iAttaCid->Length())
+ {
+ TPtr8 attaCID = iAttaStructures->At(i)->iAttaCid->Des();
+ if (attaCID.Find(KLeftAngle) == 0 &&
+ attaCID.Find(KRightAngle) == attaCID.Length()-1 )
+ {
+ // remove angle brackets from cid
+ attaCID = attaCID.Mid(1,attaCID.Length()-2);
+ }
+ mimeHeaders->SetContentIdL(attaCID);
+ }
+
+ if (iAttaStructures->At(i)->iAttaCharset)
+ {
+ mimeHeaders->SetMimeCharset(iAttaStructures->At(i)->iAttaCharset);
+ }
+
+ if (iAttaStructures->At(i)->iAttaName->Length())
+ {
+ iFilename.Copy(iAttaStructures->At(i)->iAttaName->Des());
+ }
+ iParse.Set( iFilename, NULL, NULL );
+ iFilename.Copy( iParse.NameAndExt() );
+
+ mimeHeaders->SetContentLocationL( iFilename );
+
+ // if Mime type has not been set, use RapaRecognizer
+ if ( iAttaStructures->At(i)->iAttaType->Length() == 0 && iFilename.Length() > 0)
+ {
+ // TO BE IMPLEMENTED
+
+ RApaLsSession lsSession;
+
+ if ( lsSession.Connect() == KErrNone )
+ {
+ CleanupClosePushL( lsSession );
+
+ iFilename.Copy(iAttaStructures->At(i)->iAtta->Des());
+ if ( lsSession.RecognizeData( iFilename, TPtrC8(), result ) == KErrNone )
+ {
+ // Check confidence level. Recognization must be at least
+ // "EProbable". We don't accept the result if it is "EPossible"
+ // or "EUnlikely" or "ENotRecognized"!
+
+ if ( result.iConfidence < CApaDataRecognizerType::EProbable )
+ {
+ result.Reset(); // clear buffer and try again with longer buffer
+ }
+
+ TPtrC8 mimeBuf8 = result.iDataType.Des8();
+
+ if ( mimeBuf8.Length() == 0 )
+ {
+ // Open file buffer and try again..
+
+ TInt bufSize = 0;
+ (void)lsSession.GetMaxDataBufSize( bufSize ); // ignore errors
+ if ( bufSize <= 0 )
+ {
+ bufSize = 30;
+ }
+ HBufC8* buf = HBufC8::NewLC( bufSize );
+ TPtr8 des = buf->Des();
+
+ RFile file;
+ TInt err=file.Open( iFs, iFilename, EFileShareReadersOnly );
+ if ( err == KErrNone )
+ {
+ err = file.Read( des );
+ file.Close();
+ if ( err == KErrNone )
+ {
+ if ( ( lsSession.RecognizeData( iFilename, des, result ) ) == KErrNone )
+ {
+ mimeBuf8.Set( result.iDataType.Des8() );
+ }
+ }
+
+ }
+ CleanupStack::PopAndDestroy(); // buf
+ }
+ if ( mimeBuf8.Length() > 0 &&
+ result.iConfidence >= CApaDataRecognizerType::EProbable )
+ {
+ contentType.Set( result.iDataType.Des8() );
+ }
+ }
+ CleanupStack::PopAndDestroy(1); // lssession
+ }
+ }
+
+ if ( contentType.Length() > 0 )
+ {
+ TInt position = contentType.Find( KMmsSlash8 );
+ if ( position >= 0 )
+ {
+ mimeHeaders->SetContentTypeL( contentType.Left( position ) );
+ }
+ if ( position < contentType.Length() - 1 )
+ {
+ mimeHeaders->SetContentSubTypeL( contentType.Mid( position + 1 ) );
+ }
+// CreateAttachment2L sets the content type to attaInfo
+// attaInfo->SetMimeTypeL( contentType );
+ }
+
+ if (iAttaStructures->At(i)->iAttaRecommendedName->Length())
+ {
+ iFilename.Copy(iAttaStructures->At(i)->iAttaRecommendedName->Des());
+ iParse.Set( iFilename, NULL, NULL );
+ iFilename.Copy( iParse.NameAndExt() );
+ mimeHeaders->SetSuggestedFilenameL( iFilename );
+ }
+
+ TInt j = 0;
+ for ( j = 0; j < iAttaStructures->At(i)->iContentTypeParams->MdcaCount(); ++j )
+ {
+ mimeHeaders->ContentTypeParams().AppendL( iAttaStructures->At(i)->iContentTypeParams->MdcaPoint( j ) );
+ }
+ for ( j = 0; j < iAttaStructures->At(i)->iXTypeParams->MdcaCount(); ++j )
+ {
+ mimeHeaders->XTypeParams().AppendL( iAttaStructures->At(i)->iXTypeParams->MdcaPoint( j ) );
+ }
+
+ attaInfo = CMsvAttachment::NewL(CMsvAttachment::EMsvFile);
+ // attaInfo does not go onto cleaunpstack because ownership will
+ // be transferred to attachment manager.
+
+ aMmsClient->CreateAttachment2L(
+ *store,
+ attaFile,
+ contentType,
+ *mimeHeaders,
+ attaInfo,
+ attaId);
+ attaInfo = NULL; // ownership transferred
+
+ CleanupStack::PopAndDestroy(); // mimeHeaders
+ CleanupStack::PopAndDestroy(); // attaFile.Close()
+
+ if ( iAttaRoot > 0 && iAttaRoot == ( i + 1 ) )
+ {
+ aMmsClient->SetMessageRootL( attaId );
+ }
+ }
+
+ store->CommitL();
+ CleanupStack::PopAndDestroy(); // store
+
+ // This frees all memory and resets all values
+ Reset();
+ // Reset inactivity timer to keem viewServer from crashing
+ User::ResetInactivityTime();
+ }
+
+
+// ---------------------------------------------------------
+// CMmsReadFile()::FindAlias
+// program build a message from given parts
+// ---------------------------------------------------------
+//
+TInt CMmsReadFile::FindAlias( TPtrC aAlias )
+ {
+ TBuf<DefaultBufLen> abuf;
+ for( TInt i=0; i < iAliasCount; ++i )
+ {
+ abuf.Copy( iAliasArray->MdcaPoint(i) );
+ abuf.SetLength( abuf.Locate('=') );
+ if( ( abuf.CompareF( aAlias ) ) == 0 ) return( i );
+ }
+ return( -1 );
+ }
+
+
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//
+CMmsAttaStructure::CMmsAttaStructure()
+ {
+ iAtta = NULL;
+ iAttaType = NULL;
+ iAttaName = NULL;
+ iAttaCid = NULL;
+ iAttaRecommendedName = NULL;
+ }
+
+
+//
+void CMmsAttaStructure::ConstructL()
+ {
+ iAtta = HBufC8::NewL(DefaultBufLen);
+ iAttaType = HBufC8::NewL(DefaultBufLen);
+ iAttaName = HBufC8::NewL(DefaultBufLen);
+ iAttaCid = HBufC8::NewL(DefaultBufLen);
+ iAttaRecommendedName = HBufC::NewL(DefaultBufLen);
+ iAttaCharset = 0;
+ iXTypeParams = new(ELeave) CDesC8ArrayFlat(4);
+ iContentTypeParams = new(ELeave) CDesC8ArrayFlat(4);
+
+ }
+
+// Two-phased constructor.
+CMmsAttaStructure* CMmsAttaStructure::NewL()
+ {
+ CMmsAttaStructure* self = new ( ELeave ) CMmsAttaStructure;
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+// Destructor
+CMmsAttaStructure::~CMmsAttaStructure()
+ {
+ delete iAtta;
+ delete iAttaName;
+ delete iAttaType;
+ delete iAttaCid;
+ delete iAttaRecommendedName;
+ if ( iContentTypeParams )
+ {
+ iContentTypeParams->Reset();
+ }
+ delete iContentTypeParams;
+ if ( iXTypeParams )
+ {
+ iXTypeParams->Reset();
+ }
+ delete iXTypeParams;
+ }
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgutils/convergedmessageutils/tsrc/mmstestbed/src/mmstestbed.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,2357 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ */
+
+#include <mtmdef.h>
+#include <CoreApplicationUIsSDKCRKeys.h>
+#include <mmsheaders.h>
+#include <mmscmds.h>
+#include <mmsencode.h>
+#include <mmscliententry.h>
+#include <logwrap.h>
+#include <logcli.h>
+#include <logview.h>
+#include "mmssettings.h" //use mmssettings.h instead of cmmssettings.h
+#include "mmstestbed.h"
+#include "mmsreadfile.h"
+#include "mmstestuitimer.h"
+#include "mmsteststaticutils.h"
+#include "mmstestbed.hrh"
+
+//constants
+_LIT( KMmsSender, "0601234567" );
+
+MmsTestBed::MmsTestBed()
+ {
+ //start the timer
+ iTimer = CTestUiTimer::NewL();
+ iTimer->Cancel();
+
+ iWait = CMsvOperationActiveSchedulerWait::NewLC();
+ // don't leave iWait on cleanup stack
+ CleanupStack::Pop();
+
+ //open msvsession
+ iSession = CMsvSession::OpenSyncL(*this);
+ //create client registry
+ iClientMtmRegistry = CClientMtmRegistry::NewL(*iSession);
+ //create client mtm
+ iMmsClient = (CMmsClientMtm *) iClientMtmRegistry->NewMtmL(
+ KUidMsgTypeMultimedia);
+
+ User::LeaveIfError( iFs.Connect() );
+ iFs.SetSessionPath( KRootPath );
+ iSettings = CMmsSettings::NewL();
+ iMmsHeaders = CMmsHeaders::NewL(iSettings->MmsVersion());
+ findDefaultL();
+ iServiceId = iDefaultServiceId;
+
+ //validate the settings
+ iSettings->ValidateSettings();
+
+ iLogEvent = CLogEvent::NewL();
+ iLogEvent->SetEventType(KLogMmsEventTypeUid);
+ iLogClient = NULL; // we test soon if this is available
+ iLogView = NULL; // needs log client
+ if ( checkLogClient() )
+ {
+ // first we generate a general view of all events
+ // we'll set the filter when we update the view
+ iLogView = CLogViewEvent::NewL( *iLogClient );
+ }
+ iLogFilter = CLogFilter::NewL();
+ // we try to filter MMS events
+ iLogFilter->SetEventType(KLogMmsEventTypeUid);
+ }
+
+MmsTestBed::~MmsTestBed()
+ {
+ delete iLogView;
+ delete iLogFilter;
+ delete iLogClient;
+ delete iLogEvent;
+ delete iSettings;
+ delete iMmsHeaders;
+ if(iTimer)
+ {
+ iTimer->Cancel();
+ delete iTimer;
+ }
+ //delete iMsvEntrySelection;
+ delete iMmsClient;
+ delete iClientMtmRegistry;
+ //delete iClientMtmRegistry;
+ delete iSession;
+ delete iWait;
+ }
+
+void MmsTestBed::setConnectionLocal(bool value)
+ {
+ //value = true for global off, local on
+ //value = false for global on, local off
+ iSettings->LoadSettingsL();
+ iSettings->SetLocalMode( value );
+ iSettings->SaveSettingsL();
+ }
+
+void MmsTestBed::fromOutboxToMmsc()
+ {
+ CMsvEntry* cEntry = NULL;
+
+ // Get List of services
+ cEntry = iSession->GetEntryL(KMsvGlobalOutBoxIndexEntryIdValue);
+ CleanupStack::PushL(cEntry);
+ // Get all mms messages of outbox
+ CMsvEntrySelection* selection = cEntry->ChildrenWithMtmL(
+ KUidMsgTypeMultimedia);
+ CleanupStack::PushL(selection);
+
+ // Change state to "KMsvSendStateUnknown" in case the entry has been suspended earlier
+ for (TInt i = 0; i < selection->Count(); ++i)
+ {
+ cEntry->SetEntryL(selection->At(i));
+ TMsvEntry entry = cEntry->Entry();
+ entry.SetReadOnly(EFalse);
+ entry.SetSendingState(KMsvSendStateUnknown);
+ cEntry->ChangeL(entry);
+ }
+
+ selection->InsertL(0, iServiceId);
+
+ CMsvOperation * op = NULL;
+ TCommandParameters parameters; // initialized to zero
+ TCommandParametersBuf paramPack(parameters);
+
+ op = iSession->TransferCommandL(*selection, EMmsSend, paramPack,
+ iWait->iStatus);
+
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending)
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ if (iWait->iStatus.Int() != KErrNone)
+ {
+ //DEBUG(_L("Testbed tried to send, return status %d"), iWait->iStatus.Int());
+ }
+
+ iTimer->Cancel();
+
+ CleanupStack::PopAndDestroy(); // op
+ CleanupStack::PopAndDestroy(); // selection
+ CleanupStack::PopAndDestroy(); //cEntry
+ }
+
+void MmsTestBed::fromMmscToInbox()
+ {
+ CMsvEntrySelection* msvEntrySelection = new CMsvEntrySelection;
+ CleanupStack::PushL(msvEntrySelection);
+
+ // if we have a selected service, insert it into selection
+ if (iServiceId != KMsvNullIndexEntryId)
+ {
+ msvEntrySelection->InsertL(0, iServiceId);
+ }
+
+ CMsvOperation * op = NULL;
+ TCommandParameters parameters; // initialized to zero
+ TCommandParametersBuf paramPack(parameters);
+
+ op = iMmsClient->InvokeAsyncFunctionL(EMmsReceive, *msvEntrySelection,
+ paramPack, iWait->iStatus);
+
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending)
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ if (iWait->iStatus.Int() != KErrNone)
+ {
+ //DEBUG(_L("Testbed tried to receive, return status %d"),iWait->iStatus.Int());
+ }
+
+ iTimer->Cancel();
+ CleanupStack::PopAndDestroy(); // op
+ CleanupStack::PopAndDestroy(); //msvEntrySelection
+ }
+
+void MmsTestBed::findDefaultL()
+ {
+ iSettings->LoadSettingsL();
+ iDefaultServiceId = iSettings->Service();
+ }
+
+void MmsTestBed::HandleSessionEventL(TMsvSessionEvent aEvent, TAny* aArg1,
+ TAny* aArg2, TAny* /*aArg3*/)
+ {
+ iEvent = aEvent;
+ if (aEvent == EMsvGeneralError)
+ {
+ return;
+ }
+ TMsvId parentId = KMsvNullIndexEntryId;
+ if (aArg2 != NULL)
+ {
+ parentId = *(TMsvId*) aArg2;
+ }
+
+ CMsvEntrySelection* selection = (CMsvEntrySelection*) aArg1;
+ TMsvEntry tEntry;
+ TMsvId service;
+ TInt error = KErrNone;
+ error = iSession->GetEntry(selection->At(0), service, tEntry);
+
+ CMsvEntry* cEntry = NULL;
+ switch (aEvent)
+ {
+ case EMsvEntriesCreated:
+ {
+ if (parentId == KMsvGlobalInBoxIndexEntryIdValue)
+ {
+ // emit signal for new entry into INBOX
+ emit entryCreatedInInbox(tEntry.Id());
+ }
+ else if (parentId == KMsvDraftEntryIdValue)
+ {
+ // emit signal for new entry into Draft
+ emit entryCreatedInDraft(tEntry.Id());
+ }
+ else if (parentId == iServiceId)
+ {
+ // emit signal for new Entry into SERVICE
+ }
+ else
+ {
+ // do nothing
+ }
+ }
+ break;
+ case EMsvEntriesChanged:
+ {
+ TMsvId id;
+ CMsvEntrySelection* selection = (CMsvEntrySelection*) aArg1;
+ if (selection == NULL)
+ {
+ // no selection, cannot handle
+ return;
+ }
+ id = selection->At(0);
+ //DEBUG Entry changed"));
+ if (parentId == KMsvGlobalInBoxIndexEntryIdValue)
+ {
+/*
+ cEntry = iSession->GetEntryL( parentId );
+ CleanupStack::PushL( cEntry );
+ TRAPD (error, cEntry->SetEntryL( id ));
+ if ( error != KErrNone )
+ {
+ CleanupStack::PopAndDestroy(); // cEntry
+ return;
+ }
+ TMsvEntry tEntry = cEntry->Entry();
+ if ( tEntry.Visible() )
+ {
+ // generate fake delivery report
+ CMsvStore* store = cEntry->ReadStoreL();
+ CleanupStack::PushL( store );
+ CMmsHeaders* mmsHeaders = CMmsHeaders::NewL( iSettings->MmsVersion() );
+ CleanupStack::PushL( mmsHeaders );
+ mmsHeaders->RestoreL( *store );
+ iEncodeBuffer->ResizeL( 0 );
+ generateDeliveryReport( mmsHeaders );
+ CleanupStack::PopAndDestroy( 2 ); // mmsHeaders, store
+ }
+ CleanupStack::PopAndDestroy(); // cEntry
+*/
+ }
+ }
+ break;
+ case EMsvEntriesDeleted:
+ {
+ //emit signal for entry deleted
+ }
+ break;
+ case EMsvEntriesMoved:
+ {
+ if (parentId == KMsvGlobalOutBoxIndexEntryIdValue)
+ {
+ // entry moved to outbox
+ emit entryMovedToOutbox(tEntry.Id());
+ }
+ else if (parentId == KMsvSentEntryIdValue)
+ {
+ // entry moved to sent folder
+ emit entryMovedToSent(tEntry.Id());
+ }
+ else
+ {
+ // do nothing
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+void MmsTestBed::createMmsService()
+ {
+ CMmsSettings * settings = CMmsSettings::NewL();
+ CleanupStack::PushL( settings );
+ settings->CreateNewServiceL( *iSession );
+ CleanupStack::PopAndDestroy(); // settings
+ return;
+ }
+
+void MmsTestBed::cleanup()
+ {
+ TMsvId entryToBeKilled;
+ // Get access to root index
+ CMsvEntry* cEntry = iSession->GetEntryL(KMsvRootIndexEntryId);
+ CleanupStack::PushL(cEntry);
+
+ entryToBeKilled = iSettings->Service();
+ cEntry->SetSortTypeL( TMsvSelectionOrdering( KMsvNoGrouping, EMsvSortByNone, ETrue ) );
+ while (entryToBeKilled != KMsvNullIndexEntryId)
+ {
+ // delete child of root entry
+ deleteEntry(entryToBeKilled, *cEntry);
+ entryToBeKilled = iSettings->Service();
+ }
+
+ CleanupStack::PopAndDestroy(); // cEntry
+ // We deleted everything!
+ iDefaultServiceId = KMsvNullIndexEntryId;
+ iServiceId = KMsvNullIndexEntryId;
+ }
+
+void MmsTestBed::deleteEntry(TMsvId aEntryId, CMsvEntry& aClientEntry)
+ {
+ aClientEntry.DeleteL(aEntryId);
+ }
+
+void MmsTestBed::cleanupAndCreateNewService()
+ {
+ cleanup();
+ // all old service entries have been destroyed, create a new one
+ createMmsService();
+ }
+
+void MmsTestBed::testFile(TFileName& aFilePath, TInt aCommand /* = 0 */, TMsvId aBox /* = KMsvGlobalOutBoxIndexEntryId */ )
+ {
+ // update settings in mmsclient
+ iMmsClient->RestoreSettingsL();
+ iSettings->CopyL( iMmsClient->MmsSettings() );
+
+ RFileReadStream readStream;
+ readStream.PushL();
+// TMsvId id = KMsvNullIndexEntryId;
+ CBufFlat* encodeBuffer = NULL;
+ CMmsEncode* encoder = NULL;
+
+ // Open the file
+ TInt err = readStream.Open(iFs, aFilePath, EFileShareReadersOnly );
+ if (err != KErrNone) User::Leave( err );
+
+ TInt retCode = 0;
+ CMmsReadFile* readFile = NULL;
+ readFile = CMmsReadFile::NewL( iFs, readStream );
+ CleanupStack::PushL( readFile );
+
+ TInt messageCounter = 0;
+ CMsvEntry* cEntry = NULL;
+
+ while(!retCode)
+ {
+ // READ MESSAGE TO BUFFERS
+ iMmsHeaders->Reset(iSettings);
+ // put in some message type just for fun (testing...)
+ iMmsHeaders->SetMessageType( KMmsMessageTypeForwardReq );
+ retCode = readFile->CompleteTestL( messageCounter++, *iMmsHeaders );
+ if(readFile->iMessageType == ETestNewMessage)
+ {
+ // CREATE MESSAGE ENTRY
+ switch ( aCommand )
+ {
+ case ECreateToInbox:
+ case ECreateNotification:
+ cEntry = iSession->GetEntryL(KMsvGlobalInBoxIndexEntryId);
+ break;
+ case ECreateToSentItems:
+ cEntry = iSession->GetEntryL(KMsvSentEntryId);
+ break;
+ case ECreateToDrafts:
+ cEntry = iSession->GetEntryL(KMsvDraftEntryId);
+ break;
+ case ECreateHeadersFromFile:
+ // here we just encode headers, no message entry
+ // the entry is fake.
+ break;
+ case ECreateMMBoxViewConf:
+ if ( iMmsHeaders->MessageType() == KMmsMessageTypeMboxViewConf )
+ {
+ // entry is not created for the description items
+ // they become attachments
+ cEntry = iSession->GetEntryL(KMsvDraftEntryId);
+ }
+ break;
+ default:
+ cEntry = iSession->GetEntryL(aBox);
+ break;
+ }
+
+ // if we are just playing with headers we have no entry
+ if ( aCommand != ECreateHeadersFromFile && aCommand != ECreateMMBoxViewConf )
+ {
+ CleanupStack::PushL(cEntry);
+ iMmsClient->SwitchCurrentEntryL(cEntry->EntryId());
+
+ // CREATE MESSAGE
+ iMmsClient->CreateMessageL(iServiceId);
+ }
+ else if ( aCommand == ECreateMMBoxViewConf )
+ {
+ if ( iMmsHeaders->MessageType() == KMmsMessageTypeMboxViewConf )
+ {
+ CleanupStack::PushL(cEntry);
+ iMmsClient->SwitchCurrentEntryL(cEntry->EntryId());
+
+ // CREATE MESSAGE
+ iMmsClient->CreateMessageL(iServiceId);
+ }
+ else
+ {
+ encodeBuffer = CBufFlat::NewL( 4 * 1024 ); // should be plenty
+ CleanupStack::PushL( encodeBuffer );
+ encoder = CMmsEncode::NewL( iFs );
+ CleanupStack::PushL( encoder );
+
+ // encode headers to a binary file
+ encoder->EncodeHeadersL( *iMmsHeaders, *encodeBuffer );
+
+ iFilename = KMmsMMBoxDescriptionDirectory;
+ TMmsTestUtils::Dump( *encodeBuffer, iFilename, iParse, iFs );
+
+ CleanupStack::PopAndDestroy( 2 ); // encodeBuffer, encoder
+ encodeBuffer = NULL;
+ encoder = NULL;
+ }
+ }
+ else
+ {
+ encodeBuffer = CBufFlat::NewL( 4 * 1024 ); // should be plenty
+ CleanupStack::PushL( encodeBuffer );
+ encoder = CMmsEncode::NewL( iFs );
+ CleanupStack::PushL( encoder );
+
+ // encode headers to a binary file
+ encoder->EncodeHeadersL( *iMmsHeaders, *encodeBuffer );
+
+ iFilename = KMmsDumpDirectory;
+ TMmsTestUtils::Dump( *encodeBuffer, iFilename, iParse, iFs );
+
+ CleanupStack::PopAndDestroy( 2 ); // encodeBuffer, encoder
+ encodeBuffer = NULL;
+ encoder = NULL;
+ }
+ }
+
+ if ( aCommand != ECreateHeadersFromFile &&
+ ( aCommand != ECreateMMBoxViewConf || iMmsHeaders->MessageType() == KMmsMessageTypeMboxViewConf ) )
+ {
+ if(readFile->iMessageType == ETestSettings)
+ {
+ TMsvId ServiceId = iMmsClient->DefaultServiceL();
+ iMmsClient->RestoreSettingsL();
+ iSettings->CopyL( iMmsClient->MmsSettings() );
+ }
+
+ TMemoryInfoV1Buf memory;
+ UserHal::MemoryInfo( memory );
+ TInt available = memory().iFreeRamInBytes;
+// TMmsLogger::Log(_L("Free memory before CreateMessageL %d"), available );
+
+ TRAP (err, readFile->CreateMessageL(iMmsClient, iMmsHeaders));
+
+ available = memory().iFreeRamInBytes;
+// TMmsLogger::Log(_L("Free memory after CreateMessageL %d"), available );
+
+ if(readFile->iMessageType == ETestNewMessage)
+ {
+ TMsvEntry tEntry = iMmsClient->Entry().Entry();
+ TMsvId id = tEntry.Id();
+ if ( err == KErrNone )
+ {
+ // SAVE MESSAGE
+ iMmsClient->SaveMessageL();
+
+ // If we are creating a MMBox View confirmation,
+ // we add all binary files from KMmsMMBoxDirectory
+ // as attachments.
+
+ if ( iMmsHeaders->MessageType() == KMmsMessageTypeMboxViewConf )
+ {
+ addMMBoxDescriptions();
+ }
+
+ // reload the entry in case mms client put something into it
+ // MESSAGE MUST BE SET VISIBLE
+ tEntry = iMmsClient->Entry().Entry();
+ if ( iMmsClient->MessageClass() == EMmsClassAdvertisement )
+ {
+ tEntry.iMtmData1 |= KMmsMessageAdvertisement;
+ }
+ else if ( iMmsClient->MessageClass() == EMmsClassInformational )
+ {
+ tEntry.iMtmData1 |= KMmsMessageInformational;
+ }
+ tEntry.iMtmData1 &= ~KMmsMessageMobileTerminated;
+
+ // Test: Set all as editor oriented - except notifications!
+ if ( aCommand == ECreateNotification )
+ {
+ tEntry.iMtm = KUidMsgMMSNotification;
+ }
+ else
+ {
+ tEntry.iMtmData1 |= KMmsMessageEditorOriented;
+ }
+ if ( aCommand == ECreateToInbox )
+ {
+ tEntry.iMtmData1 |= KMmsMessageMobileTerminated;
+ tEntry.SetReadOnly( ETrue );
+ tEntry.SetNew( ETrue );
+ tEntry.SetUnread( ETrue );
+ }
+ else if ( aCommand == ECreateToSentItems )
+ {
+ tEntry.SetReadOnly( ETrue );
+ }
+ tEntry.SetVisible( ETrue );
+ tEntry.SetInPreparation( EFalse );
+ TTime now;
+ now.UniversalTime();
+ tEntry.iDate = now;
+ TMsvId entryId = tEntry.Id();
+ iMmsClient->Entry().ChangeL( tEntry );
+ if ( iMmsHeaders->MessageType() == KMmsMessageTypeMboxViewConf )
+ {
+ // Encode to the directory that is used to fetch MMBox view
+ iFilename.Copy( KMmsMMBoxDirectory );
+ encodeMessageFromDrafts();
+ cEntry->SetEntryL( KMsvDraftEntryId );
+ cEntry->DeleteL( entryId );
+ }
+ }
+ else
+ {
+ //TMmsLogger::Log(_L("CreateMessageL left with error %d"), err );
+ iSession->RemoveEntry(id);
+ err = KErrNone; // clear error
+ }
+ CleanupStack::PopAndDestroy(); // cEntry
+ cEntry = NULL;
+ }
+ if(readFile->iMessageType == ETestSettings)
+ {
+ iMmsClient->SetSettingsL( *iSettings );
+ iMmsClient->StoreSettingsL();
+ }
+ }
+ }
+
+ CleanupStack::PopAndDestroy(); //readFile
+
+ readStream.Close();
+ readStream.Pop();
+
+ /*
+ iMmsClient->SwitchCurrentEntryL(id);
+ */
+ }
+
+void MmsTestBed::addMMBoxDescriptions()
+ {
+ // add the contents of KMmsMMBoxDescriptionDirectory as attachments
+ CDir* fileList = NULL;
+ TInt i = 0; // general counter
+ TInt error = KErrNone;
+ iCurrentPath = KMmsMMBoxDescriptionDirectory;
+
+ iFs.SetSessionPath(iCurrentPath);
+
+ TFindFile finder( iFs );
+ error = finder.FindWildByPath( KWild, NULL, fileList );
+ CleanupStack::PushL( fileList );
+ TInt fileCounter = 0;
+
+ if ( error == KErrNone )
+ {
+ fileCounter = fileList->Count();
+ }
+
+ TEntry entry;
+
+ if ( error == KErrNone )
+ {
+ for ( i = 0; i < fileCounter; ++i )
+ {
+ // Reset inactivity timer to keep viewServer from crashing
+ User::ResetInactivityTime();
+ entry = (*fileList)[i]; // name is entry.iName
+ iFilename.Copy( iCurrentPath );
+ iFilename.Append( entry.iName );
+ TPtrC ptr;
+ ptr.Set( iFilename );
+ iWait->iStatus = KErrNone;
+ iMmsClient->AddAttachmentL( ptr, KMmsMimeType, 0, iWait->iStatus );
+
+ iWait->Start();
+ // The descriptions are cleared after being used
+ iFs.Delete( ptr);
+ }
+ }
+
+ iMmsClient->SaveMessageL(); // just in case somthing must be updated
+ CleanupStack::PopAndDestroy(); // fileList
+ fileList = NULL;
+ }
+
+void MmsTestBed::encodeMessageFromDrafts()
+ {
+ CMmsEncode* encoder = CMmsEncode::NewL( iFs );
+ CleanupStack::PushL( encoder );
+ // encode a message iMmsClientPoints to
+ iMmsClient->LoadMessageL();
+ CMsvStore* store = iMmsClient->Entry().ReadStoreL();
+ CleanupStack::PushL( store );
+ iMmsHeaders->RestoreL( *store );
+ CleanupStack::PopAndDestroy(); // store
+ store = NULL;
+ iWait->iStatus = KErrNone;
+
+// caller sets the directory
+// iFilename = KMmsMessageDumpDirectory;
+
+ CMmsClientEntry* entryWrapper = CMmsClientEntry::NewL( iFs, iMmsClient->Entry(), iServiceId );
+ CleanupStack::PushL( entryWrapper );
+ iEncodeBuffer->ResizeL(0);
+ encoder->StartL( *entryWrapper, *iMmsHeaders, *iEncodeBuffer, iWait->iStatus );
+ iWait->Start();
+ if ( iWait->iStatus == KErrNone )
+ {
+ TMmsTestUtils::Dump( *iEncodeBuffer, iFilename, iParse, iFs );
+ }
+ iEncodeBuffer->ResizeL(0);
+ CleanupStack::PopAndDestroy(); // entryWrapper
+ CleanupStack::PopAndDestroy(); // encoder
+ }
+
+void MmsTestBed::deleteNotifications()
+ {
+ TMsvId mmsFolderId = KMsvNullIndexEntryId;
+ mmsFolderId = findMMSFolder();
+
+ CMsvEntry* cEntry = NULL;
+ // delete all messages from the specified box
+ cEntry = iSession->GetEntryL(KMsvRootIndexEntryId);
+ CleanupStack::PushL(cEntry);
+
+ if ( mmsFolderId != KMsvNullIndexEntryId )
+ {
+ cEntry->SetEntryL(mmsFolderId);
+
+ // show invisible entries
+ cEntry->SetSortTypeL( TMsvSelectionOrdering( KMsvNoGrouping, EMsvSortByNone, ETrue ) );
+ CMsvEntrySelection* msvEntrySelection = cEntry->ChildrenWithMtmL(KUidMsgTypeMultimedia);
+ CleanupStack::PushL(msvEntrySelection);
+
+ TCommandParameters parameters; // initialized to zero
+ TCommandParametersBuf paramPack( parameters );
+
+ if (msvEntrySelection->Count() > 0)
+ {
+ CMsvOperation* op = iSession->TransferCommandL(
+ *msvEntrySelection,
+ EMmsDeleteEntries,
+ paramPack,
+ iWait->iStatus);
+ CleanupStack::PushL(op);
+ iWait->Start();
+ CleanupStack::PopAndDestroy(); // op
+ }
+
+ // These cannot be deleted unless we have the a server mtm
+ // corresponding to this mtm type.
+ cEntry->SetSortTypeL( TMsvSelectionOrdering( KMsvNoGrouping, EMsvSortByNone, ETrue ) );
+ CleanupStack::PopAndDestroy(); //msvEntrySelection
+ msvEntrySelection = cEntry->ChildrenWithMtmL( KUidMsgMMSNotification );
+ CleanupStack::PushL(msvEntrySelection);
+
+ if (msvEntrySelection->Count() > 0)
+ {
+ CMsvOperation* op = iSession->TransferCommandL(
+ *msvEntrySelection,
+ EMmsDeleteEntries,
+ paramPack,
+ iWait->iStatus);
+ CleanupStack::PushL(op);
+ iWait->Start();
+ CleanupStack::PopAndDestroy(); // op
+ }
+
+ CleanupStack::PopAndDestroy(); //msvEntrySelection
+
+ CleanupStack::PopAndDestroy(); //cEntry
+ }
+ }
+
+TMsvId MmsTestBed::findMMSFolder()
+ {
+ return iSettings->NotificationFolder();
+ }
+
+void MmsTestBed::restoreFactorySettings()
+ {
+ iMmsClient->RestoreSettingsL();
+ iSettings->CopyL( iMmsClient->MmsSettings() );
+ // do not reset access point
+ TInt accessPoint = iSettings->AccessPoint( 0 );
+ iSettings->RestoreFactorySettingsL( iMmsClient->Session(), EMmsFactorySettingsLevelDeep );
+ TInt count = iSettings->AccessPointCount();
+ TInt i = 0;
+ for ( i = count - 1; i >= 0; --i )
+ {
+ iSettings->DeleteAccessPointL( i );
+ }
+ // restore the original access point
+ if ( accessPoint > 0 )
+ {
+ // a negative access point is an error (most likely "KErrNotFound")
+ iSettings->AddAccessPointL( accessPoint, 0 );
+ }
+ iMmsClient->SetSettingsL( *iSettings );
+ iMmsClient->StoreSettingsL();
+ }
+
+void MmsTestBed::setFetchingState( TMmsReceivingMode aState )
+ {
+ iMmsClient->RestoreSettingsL();
+ iSettings->CopyL( iMmsClient->MmsSettings() );
+
+ iSettings->SetReceivingModeHome( aState );
+
+ iMmsClient->SetSettingsL( *iSettings );
+ iMmsClient->StoreSettingsL();
+ }
+
+void MmsTestBed::sendFromFile()
+ {
+ CMsvOperation * op = NULL;
+
+ CMsvEntry* cEntry = iSession->GetEntryL(KMsvGlobalOutBoxIndexEntryId);
+ CleanupStack::PushL( cEntry );
+
+ CMsvEntrySelection* selection = NULL;
+ selection = cEntry->ChildrenWithMtmL(KUidMsgTypeMultimedia);
+ CleanupStack::PopAndDestroy(); // cEntry
+ CleanupStack::PushL( selection );
+
+ TRAPD (error, op = iMmsClient->SendL(*selection, iWait->iStatus));
+ if ( error != KErrNone )
+ {
+ CleanupStack::PopAndDestroy(); // selection
+ delete op;
+ return;
+ }
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ if ( iWait->iStatus.Int() != KErrNone )
+ {
+ //TMmsLogger::Log(_L("Testbed tried to send, return status %d"), iWait->iStatus.Int());
+ }
+
+ iTimer->Cancel();
+ CleanupStack::PopAndDestroy(2); // op, selection
+ }
+
+void MmsTestBed::sendOneByOne()
+ {
+ CMsvEntry* cEntry = iSession->GetEntryL(KMsvGlobalOutBoxIndexEntryId);
+ CleanupStack::PushL( cEntry );
+
+ CMsvEntrySelection* selection = NULL;
+ selection = cEntry->ChildrenWithMtmL(KUidMsgTypeMultimedia);
+ CleanupStack::PushL( selection );
+
+ CMsvEntrySelection* shortSelection = new (ELeave) CMsvEntrySelection;
+ CleanupStack::PushL( shortSelection );
+
+ TInt i;
+
+ for ( i = 0; i < selection->Count(); ++i )
+ {
+ shortSelection->Reset();
+ shortSelection->AppendL( selection->At( i ) );
+
+ CMsvOperation * op = NULL;
+
+ TTime now;
+ now.UniversalTime();
+
+ TRAPD (error, op = iMmsClient->SendL(*shortSelection, iWait->iStatus, now ));
+ if ( error != KErrNone )
+ {
+ delete op;
+ CleanupStack::PopAndDestroy( 3 ); // entry, selection, shortSelection
+ return;
+ }
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ if ( iWait->iStatus.Int() != KErrNone )
+ {
+ //TMmsLogger::Log(_L("Testbed tried to send, return status %d"), iWait->iStatus.Int());
+ }
+
+ iTimer->Cancel();
+ CleanupStack::PopAndDestroy(); // op
+
+ }
+ CleanupStack::PopAndDestroy( 3 ); // entry, selection, shortSelection
+ }
+
+void MmsTestBed::sendNotifications()
+ {
+ // Only send one notification!!
+
+ TInt error = KErrNone;
+
+ if (! TMmsTestUtils::IsFile(iCurrentFile, iFs) )
+ {
+ //Not a file
+ return;
+ }
+ TMsvId mmsFolder = findMMSFolder();
+
+ TEntry entry;
+
+
+ // now I think we have a filename
+ TEntry orgEntry;
+ TUint size = 0;
+ error = iFs.Entry( iCurrentFile, orgEntry );
+ size = orgEntry.iSize;
+
+ //TMmsLogger::Log(_L("- notification %S "), &iCurrentFile);
+ if ( size == 0 )
+ {
+ //empty file
+ //TMmsLogger::Log(_L("- empty file"));
+ return;
+ }
+
+ if ( iEncodeBuffer == NULL )
+ {
+ iEncodeBuffer = CBufFlat::NewL( size );
+ }
+ else
+ {
+ iEncodeBuffer->ResizeL( 0 );
+ iEncodeBuffer->ResizeL( size );
+ }
+
+ RFile inFile;
+ error = inFile.Open( iFs, iCurrentFile, EFileShareReadersOnly );
+ TPtr8 ptr = iEncodeBuffer->Ptr( 0 );
+ if ( error == KErrNone )
+ {
+ error = inFile.Read( ptr, size );
+ inFile.Close();
+ }
+ else
+ {
+ //Error
+ //TMmsLogger::Log(_L("- can't read file"));
+ return;
+ }
+
+ TUint8 byte;
+ TUint position = 0;
+ TUint32 uintvar = 0;
+
+ if ( size > 2 )
+ {
+ iEncodeBuffer->Read( 1, &byte, 1 );
+ if ( byte == 6 ) // PUSH PDU
+ {
+ // try to find out length of header
+ position = 2;
+ iEncodeBuffer->Read( position, &byte, 1);
+
+ while ( byte & 0x80 && position < size )
+ {
+ uintvar += ( byte & 0x7f );
+ uintvar <<= 7;
+ position++;
+ iEncodeBuffer->Read( position, &byte, 1 );
+ }
+
+ // add last byte without shift
+ uintvar += byte;
+ position++;
+ }
+ }
+
+ position += uintvar;
+
+ if ( position < size )
+ {
+ ptr = iEncodeBuffer->Ptr( position );
+ size = ptr.Length();
+ }
+
+ if ( size == 0 )
+ {
+ //no MMS stuff
+ //TMmsLogger::Log(_L("- no MMS stuff"));
+ return;
+ }
+
+ TMsvId entryId = TMmsTestUtils::CreateNotificationEntryL( mmsFolder, iServiceId, iEncodeBuffer, *iSession );
+
+ // Now we have streamed our data into this entry.
+ // Now we have an entry that says: local service, MMS MTM
+ CMsvEntrySelection* selection = new (ELeave) CMsvEntrySelection;
+ CleanupStack::PushL( selection );
+ if ( entryId != KMsvNullIndexEntryId )
+ {
+ selection->AppendL( entryId );
+ }
+ else
+ {
+ selection->AppendL( iDefaultServiceId );
+ }
+
+ TWatcherParameters parameters; // initialized to zero
+ parameters.iWatcherId = RThread().Id();
+ parameters.iDataPointer = &ptr;
+ TWatcherParametersBuf paramPack( parameters );
+
+ CMsvOperation * op = NULL;
+
+ op = iSession->TransferCommandL(
+ *selection, EMmsDecodePushedMessage, paramPack, iWait->iStatus );
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ iTimer->Cancel();
+ User::After(1000000);
+
+ CleanupStack::PopAndDestroy(); // op
+ CleanupStack::PopAndDestroy(); // selection
+ }
+
+void MmsTestBed::copyDrafts()
+ {
+ CMsvEntry* cEntry = NULL;
+// Copies contents of sent folder to drafts for retrying sending.
+
+ cEntry = iSession->GetEntryL(KMsvSentEntryId);
+ CleanupStack::PushL(cEntry);
+ // Get all mms messages in drafts
+ CMsvEntrySelection* selection = cEntry->ChildrenWithMtmL( KUidMsgTypeMultimedia );
+ CleanupStack::PushL( selection );
+
+ TMsvLocalOperationProgress progress;
+ cEntry->CopyL( *selection, KMsvDraftEntryId, progress );
+
+ TInt i = 0;
+ for ( i = 0; i < selection->Count(); ++i )
+ {
+ cEntry->SetEntryL( selection->At( i ) );
+ TMsvEntry entry = cEntry->Entry();
+ entry.SetReadOnly( EFalse );
+ cEntry->ChangeL( entry );
+ }
+
+ CleanupStack::PopAndDestroy(2); // selection, cEntry
+ }
+
+void MmsTestBed::garbageCollection(TUint32 aReason)
+ {
+ CMsvEntrySelection* selection = new (ELeave) CMsvEntrySelection;
+ CleanupStack::PushL( selection );
+ selection->InsertL(0, iDefaultServiceId);
+
+ CMsvOperation * op = NULL;
+
+ TMMSGarbageCollectionParameters parameters; // initialized to zero
+ parameters.iReasonFlags = aReason;
+ TMMSGarbageCollectionParametersBuf paramPack( parameters );
+ op = iSession->TransferCommandL(
+ *selection, EMmsGarbageCollection, paramPack, iWait->iStatus );
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ iTimer->Cancel();
+
+ CleanupStack::PopAndDestroy(); // op
+ CleanupStack::PopAndDestroy(); // selection
+ }
+
+void MmsTestBed::messageVariation()
+ {
+ CMsvEntrySelection* selection = new (ELeave) CMsvEntrySelection;
+ CleanupStack::PushL( selection );
+ selection->InsertL(0, iDefaultServiceId);
+
+ CMsvOperation * op = NULL;
+
+ op = iSession->TransferCommandL(
+ *selection, EMmsMessageGeneration, TPtrC8(), iWait->iStatus );
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ iTimer->Cancel();
+
+ CleanupStack::PopAndDestroy(); // op
+ CleanupStack::PopAndDestroy(); // selection
+ }
+
+void MmsTestBed::cancelSendScheduling()
+ {
+ CMsvEntry* cEntry = NULL;
+ setFetchingState( EMmsReceivingPostpone );
+ testFile( iCurrentFile );
+ scheduledSend(KMsvGlobalOutBoxIndexEntryIdValue, 10000); // long delay so that we have time to cancel
+ deleteSendSchedule();
+
+ cEntry = iSession->GetEntryL(KMsvRootIndexEntryId);
+ CleanupStack::PushL(cEntry);
+ cEntry->SetEntryL(KMsvGlobalOutBoxIndexEntryIdValue);
+ if (iMsvEntrySelection != NULL)
+ {
+ delete iMsvEntrySelection;
+ iMsvEntrySelection = NULL;
+ }
+ iMsvEntrySelection = cEntry->ChildrenWithMtmL(KUidMsgTypeMultimedia);
+ CleanupStack::PopAndDestroy();
+ }
+
+void MmsTestBed::scheduledSend(TMsvId aBoxId, TInt aDelay /* = 5 */)
+ {
+ CMsvEntry* cEntry = NULL;
+ TCommandParameters parameters;
+ parameters.iInitialDelay = aDelay;
+ TCommandParametersBuf paramPack( parameters );
+
+ cEntry = iSession->GetEntryL(aBoxId);
+ CleanupStack::PushL(cEntry);
+ // Get all mms messages of outbox
+ CMsvEntrySelection* selection = cEntry->ChildrenWithMtmL( KUidMsgTypeMultimedia );
+ CleanupStack::PushL( selection );
+// selection->InsertL(0, iDefaultServiceId);
+
+ CMsvOperation * op = NULL;
+ op = iMmsClient->InvokeAsyncFunctionL(
+ EMmsScheduledSend,
+ *selection,
+ paramPack,
+ iWait->iStatus);
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ iTimer->Cancel();
+
+ CleanupStack::PopAndDestroy(); // op
+ CleanupStack::PopAndDestroy(2); // cEntry, selection
+ }
+
+void MmsTestBed::deleteSendSchedule()
+ {
+ CMsvEntry* cEntry = NULL;
+
+ TCommandParameters parameters; // initialized to zero
+ TCommandParametersBuf paramPack( parameters );
+
+ cEntry = iSession->GetEntryL(KMsvGlobalOutBoxIndexEntryIdValue);
+ CleanupStack::PushL(cEntry);
+ // Get all mms messages of outbox
+ CMsvEntrySelection* selection = cEntry->ChildrenWithMtmL( KUidMsgTypeMultimedia );
+ CleanupStack::PushL( selection );
+ selection->InsertL(0, iDefaultServiceId);
+
+ CMsvOperation * op = NULL;
+ op = iMmsClient->InvokeAsyncFunctionL(
+ EMmsDeleteSchedule,
+ *selection,
+ paramPack,
+ iWait->iStatus);
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ iTimer->Cancel();
+
+ CleanupStack::PopAndDestroy(); // op
+ CleanupStack::PopAndDestroy(2); // cEntry, selection
+ }
+
+void MmsTestBed::cancelFetchScheduling()
+ {
+ TMsvId mmsFolder = findMMSFolder();
+ CMsvEntry* cEntry = NULL;
+ setFetchingState( EMmsReceivingPostpone );
+ testFile( iCurrentFile );
+ fromOutboxToMmsc(); // immediate send (EMmsSend)
+
+ // Wait until notification has arrived - may take a while in global mode
+ TInt i = 0;
+ while ( TMmsTestUtils::CountChildrenL( mmsFolder, iMsvEntrySelection, *iSession ) == 0
+ && i < 2000 )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ i++;
+ if ( (i/100) * 100 == i )
+ {
+ //TMmsLogger::Log(_L("%d:th wait cycle"), i );
+ }
+ CActiveScheduler::Start();
+ }
+ iTimer->Cancel();
+
+ fetchForced( 10000 ); // delay to allow cancelling
+ deleteFetchSchedule();
+
+ cEntry = iSession->GetEntryL(KMsvRootIndexEntryId);
+ CleanupStack::PushL(cEntry);
+ cEntry->SetEntryL(mmsFolder);
+ if (iMsvEntrySelection != NULL)
+ {
+ delete iMsvEntrySelection;
+ iMsvEntrySelection = NULL;
+ }
+ iMsvEntrySelection = cEntry->ChildrenWithMtmL(KUidMsgTypeMultimedia);
+ CleanupStack::PopAndDestroy(); // cEntry
+ }
+
+void MmsTestBed::fetchForced(TInt aDelay /* = 5 */)
+ {
+ TCommandParameters parameters;
+ parameters.iInitialDelay = aDelay;
+ TCommandParametersBuf paramPack( parameters );
+
+ CMsvEntrySelection* selection = new CMsvEntrySelection;
+ CleanupStack::PushL( selection );
+ // if we have a selected service, insert it into selection
+ if (iServiceId != KMsvNullIndexEntryId)
+ {
+ selection->InsertL(0, iServiceId);
+ }
+ else
+ {
+ selection->InsertL(0, iDefaultServiceId);
+ }
+
+
+ CMsvOperation * op = NULL;
+ op = iMmsClient->InvokeAsyncFunctionL(
+ EMmsScheduledReceiveForced,
+ *selection,
+ paramPack,
+ iWait->iStatus);
+
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ iTimer->Cancel();
+
+ CleanupStack::PopAndDestroy(); // op
+ CleanupStack::PopAndDestroy(); // selection
+ }
+
+void MmsTestBed::deleteFetchSchedule()
+ {
+ CMsvEntry* cEntry = NULL;
+
+ TCommandParameters parameters; // initialized to zero
+ TCommandParametersBuf paramPack( parameters );
+
+ TMsvId mmsFolderId = KMsvNullIndexEntryId;
+ mmsFolderId = findMMSFolder();
+ cEntry = iSession->GetEntryL( mmsFolderId );
+ CleanupStack::PushL(cEntry);
+ // Get all notifications
+ CMsvEntrySelection* selection = cEntry->ChildrenWithMtmL( KUidMsgTypeMultimedia );
+ CleanupStack::PushL( selection );
+ selection->InsertL(0, iDefaultServiceId);
+
+ CMsvOperation * op = NULL;
+ op = iMmsClient->InvokeAsyncFunctionL(
+ EMmsDeleteSchedule,
+ *selection,
+ paramPack,
+ iWait->iStatus);
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ iTimer->Cancel();
+
+ CleanupStack::PopAndDestroy(); // op
+ CleanupStack::PopAndDestroy(2); // cEntry, selection
+ }
+
+void MmsTestBed::doAFetchCycle()
+ {
+ // Sends a message from iCurrentFile and lets it come back
+ TMsvId mmsFolder = findMMSFolder();
+ testFile( iCurrentFile );
+ fromOutboxToMmsc(); // immediate send (EMmsSend)
+ // fetching will start automatically
+
+ TInt i = 0;
+ while ( TMmsTestUtils::CountChildrenL( KMsvGlobalInBoxIndexEntryId, iMsvEntrySelection, *iSession ) == 0
+ && i < 2000
+ && TMmsTestUtils::CountChildrenL( mmsFolder, iMsvEntrySelection, *iSession ) > 0 )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ i++;
+ if ( (i/100) * 100 == i )
+ {
+ //TMmsLogger::Log(_L("%d:th wait cycle"), i );
+ }
+ CActiveScheduler::Start();
+ }
+ iTimer->Cancel();
+ }
+
+bool MmsTestBed::checkLogClient()
+ {
+ if ( iLogClient == NULL )
+ {
+ TRAP_IGNORE( iLogClient = CLogClient::NewL( iFs ) );
+ }
+ return ( iLogClient != NULL );
+ }
+
+int MmsTestBed::getLogEntries()
+ {
+ TInt count = 0;
+ if ( !iLogView )
+ {
+ return 0;
+ }
+
+ if ( iLogView->SetFilterL( *iLogFilter, iWait->iStatus ) )
+ {
+ // should complete with KErrNone
+ iWait->Start();
+ if ( iWait->iStatus.Int() == KErrNone )
+ {
+ count = iLogView->CountL();
+ }
+ }
+ return count;
+ }
+
+void MmsTestBed::createEntry(TMsvEntry& aNewEntry, CMsvEntry& aClientEntry)
+ {
+ CMsvOperation* opert = aClientEntry.CreateL(aNewEntry, iWait->iStatus);
+ iWait->Start();
+ if (!opert->iStatus.Int()==KErrNone)
+ {
+ // what should we do? panic?
+ }
+
+ TPckgBuf<TMsvLocalOperationProgress> package;
+ package.Copy(opert->ProgressL());
+ *(TMsvId*)&aNewEntry = package().iId;
+
+ delete opert; opert=NULL;
+ }
+
+void MmsTestBed::cleanOutbox()
+ {
+ TMmsTestUtils::CleanBoxL(KMsvGlobalOutBoxIndexEntryId, *iSession);
+ }
+
+void MmsTestBed::cleanInbox()
+ {
+ TMmsTestUtils::CleanBoxL(KMsvGlobalInBoxIndexEntryId, *iSession);
+ }
+
+void MmsTestBed::cleanSent()
+ {
+ TMmsTestUtils::CleanBoxL(KMsvSentEntryId, *iSession);
+ }
+
+void MmsTestBed::cleanDrafts()
+ {
+ TMmsTestUtils::CleanBoxL(KMsvDraftEntryId, *iSession);
+ }
+
+void MmsTestBed::cleanAll()
+ {
+ cleanInbox();
+ cleanOutbox();
+ cleanSent();
+ cleanDrafts();
+ TMmsTestUtils::CleanBoxL( iSettings->MMBoxFolder(), *iSession );
+ deleteNotifications();
+ }
+
+void MmsTestBed::reply()
+ {
+ // The first message from inbox is replied to
+ CMsvEntry* cEntry = iSession->GetEntryL(KMsvGlobalInBoxIndexEntryId);
+ CleanupStack::PushL(cEntry);
+ delete iMsvEntrySelection;
+ iMsvEntrySelection = NULL;
+ iMsvEntrySelection = cEntry->ChildrenWithMtmL( KUidMsgTypeMultimedia );
+ if ( iMsvEntrySelection->Count() > 0 )
+ {
+ TMsvId originalEntry = iMsvEntrySelection->At(0);
+ iMmsClient->SwitchCurrentEntryL( originalEntry );
+ TMsvPartList partList = KMsvMessagePartOriginator | KMsvMessagePartDescription;
+ CMsvOperation * op = NULL;
+ op = iMmsClient->ReplyL( KMsvGlobalOutBoxIndexEntryId, partList, iWait->iStatus);
+ CleanupStack::PushL(op);
+ iWait->Start();
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ iTimer->Cancel();
+ if ( iWait->iStatus.Int() != KErrNone )
+ {
+ //TMmsLogger::Log(_L("Create reply, return status %d"), iWait->iStatus.Int());
+ }
+ else
+ {
+ TMsvId newEntry = KMsvNullIndexEntryId;
+ TPckgBuf<TMsvId> package;
+ package.Copy(op->ProgressL());
+ newEntry = package();
+ if ( newEntry != KMsvNullIndexEntryId )
+ {
+ cEntry->SetEntryL( newEntry );
+ TMsvEntry entry = cEntry->Entry();
+ entry.SetInPreparation( EFalse );
+ entry.SetVisible( ETrue );
+ cEntry->ChangeL(entry);
+ }
+ }
+ CleanupStack::PopAndDestroy(); // op
+ }
+ CleanupStack::PopAndDestroy(); // cEntry
+ }
+
+void MmsTestBed::replyToAll()
+ {
+ // The first message from inbox is replied to
+ CMsvEntry* cEntry = iSession->GetEntryL(KMsvGlobalInBoxIndexEntryId);
+ CleanupStack::PushL(cEntry);
+ delete iMsvEntrySelection;
+ iMsvEntrySelection = NULL;
+ iMsvEntrySelection = cEntry->ChildrenWithMtmL(KUidMsgTypeMultimedia);
+
+ if ( iMsvEntrySelection->Count() > 0 )
+ {
+ TMsvId originalEntry = iMsvEntrySelection->At(0);
+ iMmsClient->SwitchCurrentEntryL( originalEntry );
+ TMsvPartList partList = KMsvMessagePartOriginator | KMsvMessagePartDescription |
+ KMsvMessagePartRecipient;
+ CMsvOperation * op = NULL;
+ op = iMmsClient->ReplyL( KMsvGlobalOutBoxIndexEntryId, partList, iWait->iStatus);
+ CleanupStack::PushL(op);
+ iWait->Start();
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ iTimer->Cancel();
+ if ( iWait->iStatus.Int() != KErrNone )
+ {
+ //TMmsLogger::Log(_L("Create reply to all, return status %d"), iWait->iStatus.Int());
+ }
+ else
+ {
+ TMsvId newEntry = KMsvNullIndexEntryId;
+ TPckgBuf<TMsvId> package;
+ package.Copy(op->ProgressL());
+ newEntry = package();
+ if ( newEntry != KMsvNullIndexEntryId )
+ {
+ cEntry->SetEntryL( newEntry );
+ TMsvEntry entry = cEntry->Entry();
+ entry.SetInPreparation( EFalse );
+ entry.SetVisible( ETrue );
+ cEntry->ChangeL(entry);
+ }
+ }
+ CleanupStack::PopAndDestroy(); // op
+ }
+ CleanupStack::PopAndDestroy(); // cEntry
+ }
+
+void MmsTestBed::forward()
+ {
+ // The first message from inbox is forwarded
+ CMsvEntry* cEntry = iSession->GetEntryL(KMsvGlobalInBoxIndexEntryId);
+ CleanupStack::PushL(cEntry);
+ delete iMsvEntrySelection;
+ iMsvEntrySelection = NULL;
+ iMsvEntrySelection = cEntry->ChildrenWithMtmL(KUidMsgTypeMultimedia);
+
+ if ( iMsvEntrySelection->Count() > 0 )
+ {
+ TMsvId originalEntry = iMsvEntrySelection->At(0);
+ iMmsClient->SwitchCurrentEntryL( originalEntry );
+ TMsvPartList partList = KMsvMessagePartOriginator | KMsvMessagePartDescription |
+ KMsvMessagePartRecipient | KMsvMessagePartAttachments;
+ CMsvOperation * op = NULL;
+ op = iMmsClient->ForwardL( KMsvGlobalOutBoxIndexEntryId, partList, iWait->iStatus);
+ CleanupStack::PushL(op);
+ iWait->Start();
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ iTimer->Cancel();
+ if ( iWait->iStatus.Int() != KErrNone )
+ {
+ //TMmsLogger::Log(_L("Create forward, return status %d"), iWait->iStatus.Int());
+ }
+ else
+ {
+ TMsvId newEntry = KMsvNullIndexEntryId;
+ TPckgBuf<TMsvId> package;
+ package.Copy(op->ProgressL());
+ newEntry = package();
+ if ( newEntry != KMsvNullIndexEntryId )
+ {
+ iMmsClient->SwitchCurrentEntryL( newEntry );
+ // Add a sender: 0601234567
+ iMmsClient->LoadMessageL();
+ iMmsClient->SetSenderL( KMmsSender );
+ iMmsClient->SaveMessageL();
+ cEntry->SetEntryL( newEntry );
+ TMsvEntry entry = cEntry->Entry();
+ entry.SetInPreparation( EFalse );
+ entry.SetVisible( ETrue );
+ cEntry->ChangeL(entry);
+ }
+ }
+ CleanupStack::PopAndDestroy(); // op
+ }
+ CleanupStack::PopAndDestroy(); // cEntry
+ }
+
+void MmsTestBed::sendReadReport()
+ {
+ // TURN READ REPORTS ON (until available from menu)
+ iSettings->LoadSettingsL();
+ iSettings->SetReadReplyReportSendingAllowed( ETrue );
+ iSettings->SaveSettingsL();
+ iMmsClient->RestoreSettingsL();
+
+
+ // Read report is sent for the first message in inbox
+ CMsvEntry* cEntry = iSession->GetEntryL( KMsvGlobalInBoxIndexEntryId );
+ CleanupStack::PushL(cEntry);
+ delete iMsvEntrySelection;
+ iMsvEntrySelection = NULL;
+ iMsvEntrySelection = cEntry->ChildrenWithMtmL( KUidMsgTypeMultimedia );
+
+ if ( iMsvEntrySelection->Count() == 0 )
+ {
+ return;
+ }
+ TMsvId originalEntry = iMsvEntrySelection->At( 0 );
+
+ // new test using Client MTM
+ CMsvOperation * op = NULL;
+ op = iMmsClient->SendReadReportL( originalEntry, iWait->iStatus, EMmsReadStatusRead );
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ if ( iWait->iStatus.Int() != KErrNone )
+ {
+ //TMmsLogger::Log(_L("Testbed tried to send read report, return status %d"), iWait->iStatus.Int());
+ }
+
+ iTimer->Cancel();
+
+ CleanupStack::PopAndDestroy( op );
+ op = NULL;
+
+ // Try sending the read report to current entry
+
+ iMmsClient->SwitchCurrentEntryL( originalEntry );
+ op = iMmsClient->SendReadReportL( originalEntry, iWait->iStatus, EMmsReadStatusRead );
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ if ( iWait->iStatus.Int() != KErrNone )
+ {
+ //TMmsLogger::Log(_L("Testbed tried to send read report, return status %d"), iWait->iStatus.Int());
+ }
+
+ iTimer->Cancel();
+ CleanupStack::PopAndDestroy( op );
+ op = NULL;
+
+/*
+ cEntry->SetEntryL( originalEntry );
+ iMmsHeaders->Reset();
+ CMsvStore* store = cEntry->ReadStoreL();
+ CleanupStack::PushL( store );
+ iMmsHeaders->RestoreL( *store );
+ CleanupStack::PopAndDestroy( store );
+ store = NULL;
+ HBufC8* messageId = HBufC8::NewL( iMmsHeaders->MessageId().Length() );
+ CleanupStack::PushL( messageId );
+ messageId->Des().Copy( iMmsHeaders->MessageId() );
+
+ iMmsClient->SwitchCurrentEntryL( originalEntry );
+ iMmsClient->LoadMessageL();
+
+ iMmsHeaders->Reset();
+ iMmsHeaders->SetMessageType( KMmsMessageTypeReadRecInd );
+ // Message id cannot be accessed via MMS Client MTM!
+
+ iMmsHeaders->SetMessageIdL( messageId->Des() );
+ CleanupStack::PopAndDestroy( messageId );
+
+ iMmsHeaders->AddTypedAddresseeL( iMmsClient->Sender(), EMsvRecipientTo );
+ // sender must be insert-address-token because we don't know our number
+ TTime now;
+ now.UniversalTime();
+
+ _LIT( K1970, "19700000:000000.000000" ); // 1-Jan 1970 0:00:00
+
+ TTime y1970( K1970 );
+ TTimeIntervalMicroSeconds interval;
+ // we can't use "seconds from" as it only returns a
+ // 32 bit signed integer. If fails in 2038.
+ // "microseconds from" returns a 64 bit signed integer
+ interval = now.MicroSecondsFrom( y1970 );
+ // date in iMmsHeaders() in seconds from 1.1.1970.
+ iMmsHeaders->SetDate( (interval.Int64() ) / KMmsMillion );
+ iMmsHeaders->SetReadStatus( KMmsReadStatusRead );
+
+ TMsvId mmsFolderId = KMsvNullIndexEntryId;
+ mmsFolderId = FindMMSFolderL();
+
+ cEntry->SetEntryL( mmsFolderId );
+
+ TMsvEntry entry;
+ entry.iType = KUidMsvMessageEntry;
+ entry.iMtm = KUidMsgTypeMultimedia;
+ entry.SetVisible( ETrue );
+ entry.SetInPreparation( EFalse );
+ entry.iServiceId = KMsvLocalServiceIndexEntryId;
+ entry.iRelatedId = iDefaultServiceId;
+ entry.iMtmData1 = KMmsMessageReadRecInd;
+ cEntry->CreateL( entry );
+ TMsvId entryId = entry.Id();
+
+ cEntry->SetEntryL( entryId );
+
+ store = cEntry->EditStoreL();
+ CleanupStack::PushL( store );
+ iMmsHeaders->StoreL( *store );
+ store->CommitL();
+ CleanupStack::PopAndDestroy( store );
+ store = NULL;
+
+ CMsvEntrySelection* selection = new ( ELeave ) CMsvEntrySelection;
+ CleanupStack::PushL( selection );
+ selection->InsertL(0, entryId);
+
+ CMsvOperation * op = NULL;
+ TCommandParameters parameters; // initialized to zero
+ TCommandParametersBuf paramPack( parameters );
+
+ op = iSession->TransferCommandL(*selection,EMmsScheduledReadReport,paramPack,iWait->iStatus);
+
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ if ( iWait->iStatus.Int() != KErrNone )
+ {
+ //TMmsLogger::Log(_L("Testbed tried to send read report, return status %d"), iWait->iStatus.Int());
+ }
+
+ iTimer->Cancel();
+
+ CleanupStack::PopAndDestroy( op );
+ CleanupStack::PopAndDestroy( selection );
+*/
+ CleanupStack::PopAndDestroy( cEntry );
+ }
+
+int MmsTestBed::fromOutboxToMmscWithMemoryFailure()
+ {
+ TInt error = KErrNone;
+ TInt messageCount = 0;
+ TInt failureCount = 0;
+ do {
+ CMsvEntry* cEntry = NULL;
+
+ // Get List of services
+ cEntry = iSession->GetEntryL(KMsvGlobalOutBoxIndexEntryIdValue);
+ CleanupStack::PushL(cEntry);
+ // Get all mms messages of outbox
+ CMsvEntrySelection* selection = cEntry->ChildrenWithMtmL( KUidMsgTypeMultimedia );
+ CleanupStack::PushL( selection );
+ failureCount++;
+ // These are failures that fail in Message server.
+ if ( failureCount >= 63 && failureCount <= 64 )
+ {
+ failureCount = 65;
+ }
+ cEntry->SetEntryL( iServiceId );
+ TMsvEntry entry = cEntry->Entry();
+ entry.iMtmData3 &= 0x0000000FF;
+ entry.iMtmData3 |= failureCount << 8;
+ cEntry->ChangeL( entry );
+
+ selection->InsertL(0, iServiceId);
+
+ CMsvOperation * op = NULL;
+ TCommandParameters parameters; // initialized to zero
+ TCommandParametersBuf paramPack( parameters );
+
+ TRAP (error, op = iSession->TransferCommandL(*selection,EMmsSend,paramPack,iWait->iStatus));
+
+ if ( error == KErrNone )
+ {
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ if ( iWait->iStatus.Int() != KErrNone )
+ {
+ error = iWait->iStatus.Int();
+ if ( iWait->iStatus.Int() != KErrNoMemory )
+ {
+ //TMmsLogger::Log(_L("Testbed tried to send, return status %d"), iWait->iStatus.Int());
+ }
+ }
+
+ CleanupStack::PopAndDestroy(); // op
+ }
+ iTimer->Cancel();
+ CleanupStack::PopAndDestroy(); // selection
+ CleanupStack::PopAndDestroy(); // cEntry
+ selection = NULL;
+ cEntry = NULL;
+ cEntry = iSession->GetEntryL( KMsvGlobalOutBoxIndexEntryIdValue );
+ CleanupStack::PushL(cEntry);
+ selection = cEntry->ChildrenWithMtmL( KUidMsgTypeMultimedia );
+ messageCount = selection->Count();
+ delete selection;
+ selection = 0;
+ CleanupStack::PopAndDestroy(); //cEntry
+ }
+ while ( error == KErrNoMemory || messageCount > 0 );
+ return failureCount;
+ }
+
+int MmsTestBed::fromMmscToInboxWithMemoryFailure()
+ {
+ TInt error = KErrNone;
+ TInt failureCount = 0;
+ TInt messageCount = 0;
+ TMsvId mmsFolderId = KMsvNullIndexEntryId;
+ mmsFolderId = findMMSFolder();
+
+ do {
+ // Inbox must be cleaned if failure makes message to be fetched more than once.
+ // should not happen, but this test is quite stressful, and perfect result
+ // cannot be guaranteed.
+ // What is expected:
+ // 1. Program does not crash
+ // 2. After sufficient number of retries the message is fetched and notification deleted.
+ TMmsTestUtils::CleanBoxL(KMsvGlobalInBoxIndexEntryId, *iSession);
+ CMsvEntry* cEntry = NULL;
+ CMsvEntrySelection* msvEntrySelection = new CMsvEntrySelection;
+ CleanupStack::PushL(msvEntrySelection);
+
+ cEntry = iSession->GetEntryL(iServiceId);
+ CleanupStack::PushL(cEntry);
+
+ failureCount++;
+ // These are failures that fail in Message server.
+ if ( failureCount >= 63 && failureCount <= 64 )
+ {
+ failureCount = 65;
+ }
+ cEntry->SetEntryL( iServiceId );
+
+ TMsvEntry entry = cEntry->Entry();
+ entry.iMtmData3 &= 0x0000000FF;
+ entry.iMtmData3 |= failureCount << 8;
+ cEntry->ChangeL( entry );
+
+ // if we have a selected service, insert it into selection
+ if (iServiceId != KMsvNullIndexEntryId)
+ {
+ msvEntrySelection->InsertL(0, iServiceId);
+ }
+
+ CMsvOperation * op = NULL;
+ TCommandParameters parameters; // initialized to zero
+ TCommandParametersBuf paramPack( parameters );
+
+ TRAP (error, op = iMmsClient->InvokeAsyncFunctionL(
+ EMmsReceiveForced,
+ *msvEntrySelection,
+ paramPack,
+ iWait->iStatus) );
+
+ if ( error == KErrNone )
+ {
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ if ( iWait->iStatus.Int() != KErrNone )
+ {
+ error = iWait->iStatus.Int();
+ if ( iWait->iStatus.Int() != KErrNoMemory )
+ {
+ //TMmsLogger::Log(_L("Testbed tried to receive, return status %d"), iWait->iStatus.Int());
+ }
+ }
+
+ CleanupStack::PopAndDestroy(); // op
+ }
+
+ iTimer->Cancel();
+ CleanupStack::PopAndDestroy(); // msvEntrySelection
+ CleanupStack::PopAndDestroy(); // cEntry
+ msvEntrySelection = NULL;
+ cEntry = NULL;
+ cEntry = iSession->GetEntryL( mmsFolderId );
+ CleanupStack::PushL(cEntry);
+ msvEntrySelection = cEntry->ChildrenWithMtmL( KUidMsgTypeMultimedia );
+ messageCount = msvEntrySelection->Count();
+ delete msvEntrySelection;
+ msvEntrySelection = 0;
+ CleanupStack::PopAndDestroy(); //cEntry
+ }
+ while ( error == KErrNoMemory || messageCount > 0 );
+ if ( error != KErrNoMemory && error != KErrNone )
+ {
+ //TMmsLogger::Log(_L("Memory failure loop ended with %d"), error);
+ }
+ return failureCount;
+ }
+
+void MmsTestBed::sendViaClient()
+ {
+ CMsvEntry* cEntry = NULL;
+
+ cEntry = iSession->GetEntryL(KMsvDraftEntryId);
+ CleanupStack::PushL(cEntry);
+ // Get all mms messages in drafts
+ CMsvEntrySelection* selection = cEntry->ChildrenWithMtmL( KUidMsgTypeMultimedia );
+ CleanupStack::PushL( selection );
+
+ CMsvOperation * op = NULL;
+ TTime now;
+ now.UniversalTime();
+ op = iMmsClient->SendL( *selection, iWait->iStatus, now );
+
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ iTimer->Cancel();
+ CleanupStack::PopAndDestroy(); // op
+ CleanupStack::PopAndDestroy(2); // cEntry, selection
+ }
+
+void MmsTestBed::scheduledFetch(TInt aDelay /* = 5 */)
+ {
+ TCommandParameters parameters;
+ parameters.iInitialDelay = aDelay;
+ TCommandParametersBuf paramPack( parameters );
+
+ CMsvEntrySelection* selection = new CMsvEntrySelection;
+ CleanupStack::PushL( selection );
+ // if we have a selected service, insert it into selection
+ if (iServiceId != KMsvNullIndexEntryId)
+ {
+ selection->InsertL(0, iServiceId);
+ }
+ else
+ {
+ selection->InsertL(0, iDefaultServiceId);
+ }
+
+ CMsvOperation * op = NULL;
+ op = iMmsClient->InvokeAsyncFunctionL(
+ EMmsScheduledReceive,
+ *selection,
+ paramPack,
+ iWait->iStatus);
+
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ iTimer->Cancel();
+ CleanupStack::PopAndDestroy(); // op
+ CleanupStack::PopAndDestroy(); // selection
+ }
+
+void MmsTestBed::fetchForcedImmediate()
+ {
+ TCommandParameters parameters;
+ TCommandParametersBuf paramPack( parameters );
+
+ CMsvEntrySelection* selection = new CMsvEntrySelection;
+ CleanupStack::PushL( selection );
+ // if we have a selected service, insert it into selection
+ if (iServiceId != KMsvNullIndexEntryId)
+ {
+ selection->InsertL(0, iServiceId);
+ }
+ else
+ {
+ selection->InsertL(0, iDefaultServiceId);
+ }
+
+
+ CMsvOperation * op = NULL;
+ op = iMmsClient->InvokeAsyncFunctionL(
+ EMmsReceiveForced,
+ *selection,
+ paramPack,
+ iWait->iStatus);
+
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ iTimer->Cancel();
+ CleanupStack::PopAndDestroy(); // op
+ CleanupStack::PopAndDestroy(); // selection
+ }
+
+void MmsTestBed::getEventType()
+ {
+ if ( !checkLogClient() )
+ {
+ return; // not available
+ }
+
+ CLogEventType* eventType = CLogEventType::NewL();
+ CleanupStack::PushL( eventType );
+ eventType->SetUid(iLogEvent->EventType());
+ iLogClient->GetEventType( *eventType, iWait->iStatus );
+
+ iWait->Start();
+ CleanupStack::PopAndDestroy(); // eventType
+ }
+
+void MmsTestBed::addEventType()
+ {
+ if ( !checkLogClient() )
+ {
+ return; // not available
+ }
+
+ CLogEventType* eventType = CLogEventType::NewL();
+ CleanupStack::PushL( eventType );
+ eventType->SetUid(iLogEvent->EventType());
+ eventType->SetDescription(_L("Multimedia Message") );
+ eventType->SetLoggingEnabled( ETrue );
+
+// iWait->iStatus = KRequestPending;
+ iLogClient->AddEventType( *eventType, iWait->iStatus );
+ iWait->Start();
+ CleanupStack::PopAndDestroy(); // eventType
+ }
+
+void MmsTestBed::deleteEventType()
+ {
+ if ( !checkLogClient() )
+ {
+ return; // not available
+ }
+// iWait->iStatus = KRequestPending;
+ iLogClient->DeleteEventType( iLogEvent->EventType(), iWait->iStatus );
+ iWait->Start();
+ }
+
+void MmsTestBed::cleanLog()
+ {
+ TInt count = 0;
+
+ count = getLogEntries();
+
+ TInt i;
+ for ( i = 0; i < count; ++i )
+ {
+ // when a view is created, it will be positioned on the first event
+// iWait->iStatus = KRequestPending;
+ iLogClient->DeleteEvent(iLogView->Event().Id(), iWait->iStatus);
+ iWait->Start();
+
+ if ( iLogView->NextL( iWait->iStatus ) )
+ {
+ // should complete with KErrNone
+ iWait->Start();
+ if ( iWait->iStatus.Int() != KErrNone )
+ {
+ // could not get next event!
+ break;
+ }
+ }
+ else
+ {
+ break; // no more events!
+ }
+ }
+ }
+
+void MmsTestBed::setOnline(bool value)
+ {
+ //value = true for online mode
+ //value = false for offline mode
+ CRepository* repository = NULL;
+ TInt retval = KErrNone;
+ TRAP( retval, repository = CRepository::NewL( KCRUidCoreApplicationUIs ) );
+ if( retval == KErrNone )
+ {
+ repository->Set( KCoreAppUIsNetworkConnectionAllowed, value );
+ delete repository;
+ }
+ }
+
+void MmsTestBed::generateDeliveryReport( CMmsHeaders* aMmsHeaders )
+ {
+ iEncodeBuffer->ResizeL( 1024 );
+
+ TInt position = 0;
+
+ // encode message type
+ iEncodeBuffer->Write( position, &KMmsAssignedMessageType, 1 );
+ position++;
+ iEncodeBuffer->Write( position, &KMmsMessageTypeDeliveryInd, 1 );
+ position++;
+
+ // version
+ iEncodeBuffer->Write( position, &KMmsAssignedMmsVersion, 1 );
+ position++;
+
+ TUint8 version = aMmsHeaders->MmsVersion() | 0x80; // current version as short integer
+ iEncodeBuffer->Write( position, &version, 1 );
+ position++;
+
+ // message id from the headers
+ // At least once MMSC did not send us the message id!
+ // if message id is missing, we cannot match the entry!
+ // This only a fake. Real delivery reports should always
+ // contain the message id.
+ if ( aMmsHeaders->MessageId().Length() > 0 )
+ {
+ iEncodeBuffer->Write( position, &KMmsAssignedMessageId, 1 );
+ position++;
+ iEncodeBuffer->Write( position, &(aMmsHeaders->MessageId()[0]), aMmsHeaders->MessageId().Length() );
+ position += aMmsHeaders->MessageId().Length();
+ iEncodeBuffer->Write( position, &KMmsNull, 1 );
+ position++;
+ }
+
+ // To is taken from the headers
+ iEncodeBuffer->Write( position, &KMmsAssignedTo, 1 );
+ position++;
+
+ TPtrC recipient;
+ if ( aMmsHeaders->ToRecipients().MdcaCount() > 0 &&
+ aMmsHeaders->ToRecipients()[0].Length() > 0 )
+ {
+ recipient.Set( aMmsHeaders->ToRecipients()[0] );
+ }
+ else if( aMmsHeaders->CcRecipients().MdcaCount() > 0 &&
+ aMmsHeaders->CcRecipients()[0].Length() > 0 )
+ {
+ recipient.Set( aMmsHeaders->CcRecipients()[0] );
+ }
+ else if( aMmsHeaders->BccRecipients().MdcaCount() > 0 &&
+ aMmsHeaders->BccRecipients()[0].Length() > 0 )
+ {
+ recipient.Set( aMmsHeaders->BccRecipients()[0] );
+ }
+ else
+ {
+ recipient.Set( _L("Jasso-Kissa@jii.fi") );
+ }
+
+ TMmsAddressType addressType = EMmsAddressTypeUnknown;
+
+ if ( recipient.Find( KMiuMau ) != KErrNotFound )
+ {
+ addressType = EMmsAddressTypeEmail;
+ }
+ else
+ {
+ addressType = EMmsAddressTypeMobile;
+ }
+
+ TUint8 character;
+ TInt i;
+ if ( addressType == EMmsAddressTypeEmail )
+ {
+ // email address - ASCII ONLY - THIS IS JUST A TEST!
+
+ for ( i = 0; i < recipient.Length(); ++i )
+ {
+ character = TUint8( recipient[i] & 0xff );
+ iEncodeBuffer->Write( position, &character, 1 );
+ position++;
+ }
+ iEncodeBuffer->Write( position, &KMmsNull, 1 );
+ position++;
+
+ }
+ else
+ {
+ // must be a phone number
+ // We expect for now that the format is correct as is
+ // All legal characters present in a phone number are ASCII
+
+ TInt i;
+ for ( i = 0; i < recipient.Length(); ++i )
+ {
+ character = TUint8( recipient[i] & 0xff );
+ iEncodeBuffer->Write( position, &character, 1 );
+ position++;
+ }
+ iEncodeBuffer->Write( position, KMmsPlmn, KMmsPlmnLength );
+ position += KMmsPlmnLength;
+ iEncodeBuffer->Write( position, &KMmsNull, 1 );
+ position++;
+ }
+
+ // date
+ iEncodeBuffer->Write( position, &KMmsAssignedDate, 1 );
+ position++;
+
+ TLocale locale;
+ locale.Refresh();
+ TInt64 UtcDate;
+ TTimeIntervalSeconds universalTimeOffset( locale.UniversalTimeOffset() );
+
+ TTime now;
+ now.UniversalTime();
+ UtcDate = ( now.MicroSecondsFrom( TTime( KMmsYear1970String ) ).Int64() ) / 1000000 ;
+
+ UtcDate -= universalTimeOffset.Int();
+
+ if ( locale.QueryHomeHasDaylightSavingOn() )
+ {
+ TTimeIntervalSeconds daylightSaving( 60 * 60 );
+ UtcDate -= daylightSaving.Int();
+ }
+
+ TUint8 len; // number of bytes we will need
+ len = 0;
+ TUint8 array[8];
+
+ TInt64 temp = UtcDate;
+
+ for (i = 7; i >= 0; --i)
+ {
+ array[i] = TInt8( ( I64INT( temp ) ) & 0xFF );
+ I64LSR( temp, 8 );
+ }
+
+ len = 8;
+ i = 0;
+ while( ( array[i]== 0 ) && ( i < 8 ) )
+ {
+ i++;
+ len--;
+ }
+
+ // a zero should be coded as short integer.
+ // However, if there is a valid reason to code a zero as a long integer,
+ // we allow it. The caller should know what he is doing.
+ if ( len == 0 )
+ {
+ len = 1;
+ }
+ // write short length
+ iEncodeBuffer->Write( position, &len, 1 );
+ position++;
+ // write as many bytes as were non-zero
+ iEncodeBuffer->Write( position, &(array[8 - len] ), len );
+ position+= len;
+ // status
+ iEncodeBuffer->Write( position, &KMmsAssignedStatus, 1 );
+ position++;
+ iEncodeBuffer->Write( position, &KMmsMessageStatusRetrieved, 1 );
+ position++;
+ // DONE!!!
+ iEncodeBuffer->ResizeL( position );
+ return;
+ }
+
+void MmsTestBed::sendDeliveryReport()
+ {
+ if ( iEncodeBuffer->Size() == 0 )
+ {
+ //No delivery report
+ return;
+ }
+
+
+ TMsvId mmsFolder = findMMSFolder();
+ CMsvEntrySelection* selection = new (ELeave) CMsvEntrySelection;
+ CleanupStack::PushL( selection );
+
+ TMsvId entryId = TMmsTestUtils::CreateNotificationEntryL( mmsFolder, iServiceId, iEncodeBuffer, *iSession );
+ TPtr8 ptr = iEncodeBuffer->Ptr( 0 );
+
+ // Now we have streamed our data into this entry.
+ // Now we have an entry that says: local service, MMS MTM
+
+ if ( entryId != KMsvNullIndexEntryId )
+ {
+ selection->AppendL( entryId );
+ }
+ else
+ {
+ selection->AppendL( iDefaultServiceId );
+ }
+
+ TWatcherParameters parameters; // initialized to zero
+ parameters.iWatcherId = RThread().Id();
+ parameters.iDataPointer = &ptr;
+ TWatcherParametersBuf paramPack( parameters );
+
+ CMsvOperation * op = NULL;
+
+// iWait->iStatus = KRequestPending;
+ op = iSession->TransferCommandL(
+ *selection, EMmsDecodePushedMessage, paramPack, iWait->iStatus );
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ iTimer->Cancel();
+
+ CleanupStack::PopAndDestroy(); // op
+ CleanupStack::PopAndDestroy(); // selection
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgutils/convergedmessageutils/tsrc/mmstestbed/src/mmsteststaticutils.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,528 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ */
+
+#include <f32file.h>
+#include <centralrepository.h>
+#include <apparc.h>
+#include <msvapi.h>
+#include <msvids.h>
+
+#include "mmsteststaticutils.h"
+#include "mmsconst.h"
+#include "MmsEnginePrivateCRKeys.h"
+#include "mmssettings.h"
+#include "mmsheaders.h"
+#include "mmsservercommon.h"
+#include "mmsencode.h"
+
+
+// ---------------------------------------------------------
+//
+// ---------------------------------------------------------
+//
+TMmsJoinedArrays::TMmsJoinedArrays(CDesCArray* const & aArray1, CDesCArray* const & aArray2)
+: iArray1(aArray1), iArray2(aArray2)
+ {
+ }
+
+TInt TMmsJoinedArrays::MdcaCount() const
+ {
+ TInt count=0;
+ if (iArray1)
+ count += iArray1->MdcaCount();
+ if (iArray2)
+ count += iArray2->MdcaCount();
+ return count;
+ }
+
+TPtrC16 TMmsJoinedArrays::MdcaPoint(TInt aIndex) const
+ {
+ if (iArray1)
+ {
+ if (aIndex < iArray1->MdcaCount())
+ return iArray1->MdcaPoint(aIndex);
+ else
+ aIndex -= iArray1->MdcaCount();
+ }
+ return iArray2->MdcaPoint(aIndex);
+ }
+
+
+// ---------------------------------------------------------
+//
+// ---------------------------------------------------------
+//
+TMmsTestUtils::TMmsTestUtils()
+ {
+
+ }
+
+// ---------------------------------------------------------
+//
+// ---------------------------------------------------------
+//
+HBufC* TMmsTestUtils::ReadContactFromFileL( TDesC& aFileName, RFs& aFs )
+ {
+ RFile file;
+ TInt error = KErrNone;
+
+ TInt textBufferSize = 256;
+ HBufC* textBuffer = HBufC::NewL( textBufferSize );
+ TPtr textPtr = textBuffer->Des();
+ TFileText textFile;
+
+ error = file.Open( aFs, aFileName,
+ EFileRead|EFileShareReadersOnly );
+
+ if ( error == KErrNone )
+ {
+ textFile.Set( file );
+ error = textFile.Seek( ESeekStart );
+ }
+
+ if ( error == KErrNone )
+ {
+ error = textFile.Read( textPtr );
+ }
+
+ file.Close();
+
+ if ( textBuffer->Des().Find( &KMmsByteOrderMark, 1 ) == 0 )
+ {
+ textBuffer->Des().Copy( textBuffer->Des().Mid( 1 ) );
+ }
+
+ return textBuffer;
+ }
+
+//----------------------------------------------------------------------------------------
+// turn on detailed logging while decoding a message
+//----------------------------------------------------------------------------------------
+//
+void TMmsTestUtils::DecodeLoggingOnL()
+ {
+ // CenRep for decodelogging
+ CRepository* repository = NULL;
+ TInt retval = KErrNone;
+ TRAP( retval, repository = CRepository::NewL( KUidMmsServerMtm ) );
+ if( retval == KErrNone )
+ {
+ // Best effort - if cannot access repository, no can do
+ TInt temp = 1;
+ repository->Set( KMmsEngineDecodeLog, temp );
+ delete repository;
+ }
+ }
+
+//----------------------------------------------------------------------------------------
+// turn off detailed logging while decoding a message
+//----------------------------------------------------------------------------------------
+//
+void TMmsTestUtils::DecodeLoggingOffL()
+ {
+ // CenRep for decodelogging
+ CRepository* repository = NULL;
+ TInt retval = KErrNone;
+ TRAP( retval, repository = CRepository::NewL( KUidMmsServerMtm ) );
+ if( retval == KErrNone )
+ {
+ // Best effort - if cannot access repository, no can do
+ TInt temp = 0;
+ repository->Set( KMmsEngineDecodeLog, temp );
+ delete repository;
+ }
+
+ }
+
+//----------------------------------------------------------------------------------------
+// turn on binary dump of incoming messages
+//----------------------------------------------------------------------------------------
+//
+void TMmsTestUtils::BinaryDumpOnL()
+ {
+ // CenRep for binarydump setting
+ CRepository* repository = NULL;
+ TInt retval = KErrNone;
+ TRAP( retval, repository = CRepository::NewL( KUidMmsServerMtm ) );
+ if( retval == KErrNone )
+ {
+ // Best effort - if cannot access repository, no can do
+ TInt temp = 1;
+ repository->Set( KMmsEngineBinaryDump, temp );
+ delete repository;
+ }
+
+ }
+
+//----------------------------------------------------------------------------------------
+// turn off binary dump of incoming messages
+//----------------------------------------------------------------------------------------
+//
+void TMmsTestUtils::BinaryDumpOffL()
+ {
+ // CenRep for binarydump setting
+ CRepository* repository = NULL;
+ TInt retval = KErrNone;
+ TRAP( retval, repository = CRepository::NewL( KUidMmsServerMtm ) );
+ if( retval == KErrNone )
+ {
+ // Best effort - if cannot access repository, no can do
+ TInt temp = 0;
+ repository->Set( KMmsEngineBinaryDump, temp );
+ delete repository;
+ }
+ }
+
+// ---------------------------------------------------------
+//
+// ---------------------------------------------------------
+//
+void TMmsTestUtils::CleanDirectoryL( RFs& aFs )
+ {
+ // Delete the files in the directory
+ CFileMan* fileMan = CFileMan::NewL( aFs );
+ CleanupStack::PushL( fileMan );
+ fileMan->RmDir( KMmsDefaultLocalModeDir );
+ fileMan->RmDir( KMmsMMBoxDirectory );
+ fileMan->RmDir( KMmsMMBoxDescriptionDirectory );
+ CleanupStack::PopAndDestroy(); // fileManager
+ // we don't want to throw these away!
+ aFs.MkDirAll( KMmsDefaultLocalModeDir );
+ aFs.MkDirAll( KMmsMMBoxDirectory );
+ aFs.MkDirAll( KMmsMMBoxDescriptionDirectory );
+ }
+
+// ---------------------------------------------------------
+//
+// ---------------------------------------------------------
+//
+void TMmsTestUtils::Dump( CBufFlat& aBuffer, TFileName& aFilename, TParse& aParse, RFs& aFs )
+ {
+ TInt error = KErrNone;
+ aFs.MkDirAll( aFilename );
+ TUint att;
+ if ( aFs.Att( aFilename, att ) == KErrNone )
+ {
+ _LIT( KRelated, "dump.mms");
+ aParse.Set( aFilename, &KRelated, NULL );
+ aFilename = aParse.FullName();
+ error = CApaApplication::GenerateFileName( aFs, aFilename );
+ if ( error == KErrNone )
+ {
+ RFile file;
+ error = file.Create( aFs, aFilename, EFileWrite | EFileShareExclusive );
+ // for message id generation
+ aParse.Set( aFilename, NULL, NULL );
+ if ( error == KErrNone )
+ {
+ // the data is supposed to be in the encode buffer
+ TPtr8 ptr = aBuffer.Ptr( 0 );
+ file.Write( ptr );
+ file.Flush();
+ }
+
+ // done - close files
+ file.Close();
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+//
+// ---------------------------------------------------------
+//
+void TMmsTestUtils::CleanBoxL(TMsvId aBoxId, CMsvSession& aSession)
+ {
+ CMsvEntry* cEntry = NULL;
+ // delete all messages from the specified box
+ cEntry = aSession.GetEntryL(KMsvRootIndexEntryId);
+ CleanupStack::PushL(cEntry);
+ cEntry->SetEntryL(aBoxId);
+ // show invisible entries
+ cEntry->SetSortTypeL( TMsvSelectionOrdering( KMsvNoGrouping, EMsvSortByNone, ETrue ) );
+ CMsvEntrySelection* msvEntrySelection = cEntry->ChildrenWithMtmL(KUidMsgTypeMultimedia);
+ CleanupStack::PushL(msvEntrySelection);
+
+ CMsvEntrySelection* selection = NULL;
+ cEntry->SetSortTypeL( TMsvSelectionOrdering( KMsvNoGrouping, EMsvSortByNone, ETrue ) );
+ selection = cEntry->ChildrenWithMtmL(KUidMsgMMSNotification);
+ CleanupStack::PushL( selection );
+ if ( selection->Count() > 0 )
+ {
+ msvEntrySelection->AppendL( selection->Back( 0 ), selection->Count() );
+ }
+ CleanupStack::PopAndDestroy(); // selection
+
+ int i;
+ for (i = 0; i < msvEntrySelection->Count(); ++i)
+ {
+ CMsvEntry* entry = aSession.GetEntryL( msvEntrySelection->At(i) );
+ CleanupStack::PushL( entry );
+ TMsvEntry tEntry = entry->Entry();
+ tEntry.SetReadOnly(EFalse);
+ entry->ChangeL(tEntry);
+ cEntry->DeleteL( msvEntrySelection->At(i) );
+ CleanupStack::PopAndDestroy( entry );
+ }
+
+ CleanupStack::PopAndDestroy(msvEntrySelection);
+ CleanupStack::PopAndDestroy(cEntry);
+ }
+
+//----------------------------------------------------------------------------------------
+// turn on logging email recipients
+//----------------------------------------------------------------------------------------
+void TMmsTestUtils::EmailLoggingOnL()
+ {
+ // CenRep for binarydump setting
+ CRepository* repository = NULL;
+ TInt retval = KErrNone;
+ TRAP( retval, repository = CRepository::NewL( KUidMmsServerMtm ) ); // ***
+ if( retval == KErrNone )
+ {
+ TInt temp = 1;
+ repository->Set( KMmsEngineLogEmailRecipients, temp );
+ delete repository;
+ }
+
+ }
+
+//----------------------------------------------------------------------------------------
+// turn off logging email recipients
+//----------------------------------------------------------------------------------------
+void TMmsTestUtils::EmailLoggingOffL()
+ {
+ // CenRep for binarydump setting
+ CRepository* repository = NULL;
+ TInt retval = KErrNone;
+ TRAP( retval, repository = CRepository::NewL( KUidMmsServerMtm ) ); // ***
+ if( retval == KErrNone )
+ {
+ TInt temp = 0;
+ repository->Set( KMmsEngineLogEmailRecipients, temp );
+ delete repository;
+ }
+
+ }
+
+//----------------------------------------------------------------------------------------
+//
+//----------------------------------------------------------------------------------------
+TInt TMmsTestUtils::CountChildrenL(TMsvId aBoxId, CMsvEntrySelection*& aMsvEntrySelection, CMsvSession& aSession, TUid aMessageType )
+ {
+ CMsvEntry* cEntry = aSession.GetEntryL(KMsvRootIndexEntryId);
+ CleanupStack::PushL(cEntry);
+ cEntry->SetEntryL(aBoxId);
+ if (aMsvEntrySelection != NULL)
+ {
+ delete aMsvEntrySelection;
+ aMsvEntrySelection = NULL;
+ }
+ aMsvEntrySelection = cEntry->ChildrenWithMtmL(aMessageType);
+ CleanupStack::PopAndDestroy(); // cEntry
+ return aMsvEntrySelection->Count();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CreateFolderEntryL
+//
+// -----------------------------------------------------------------------------
+//
+void TMmsTestUtils::CreateFolderEntryL(
+ CMsvSession& aSession,
+ TMsvId aParentFolder,
+ const TDesC& aFolderName,
+ TMsvId& aFolderId )
+ {
+ aFolderId = KMsvNullIndexEntryId;
+ CMsvEntry* cEntry = aSession.GetEntryL( aParentFolder );
+ CleanupStack::PushL( cEntry );
+
+ // Create a new folder.
+
+ TMsvEntry entry;
+ entry.iType = KUidMsvFolderEntry;
+ entry.iMtm = KUidMsvLocalServiceMtm;
+ entry.iDetails.Set( aFolderName );
+ entry.SetVisible( EFalse );
+ entry.SetInPreparation( EFalse );
+ entry.iServiceId = KMsvLocalServiceIndexEntryId;
+ cEntry->CreateL( entry );
+ aFolderId = entry.Id();
+ CleanupStack::PopAndDestroy( cEntry );
+
+ }
+
+
+//----------------------------------------------------------------------------------------
+//
+//----------------------------------------------------------------------------------------
+TMsvId TMmsTestUtils::CreateNotificationEntryL(
+ TMsvId aNotificationFolder,
+ TMsvId aServiceId,
+ CBufFlat* aEncodeBuffer,
+ CMsvSession& aSession )
+ {
+ TMsvId entryId = KMsvNullIndexEntryId;
+ if ( aNotificationFolder == KMsvNullIndexEntryId )
+ {
+ // no folder no entry
+ return entryId;
+ }
+
+ CMsvEntry* cEntry = aSession.GetEntryL( aNotificationFolder );
+ CleanupStack::PushL(cEntry);
+
+ TMsvEntry entry;
+ entry.iType = KUidMsvMessageEntry;
+ entry.iMtm = KUidMsgTypeMultimedia;
+ entry.SetVisible( ETrue );
+ // If we want to put data here, InPreparation must be set to true first
+ entry.SetInPreparation( EFalse );
+ entry.iServiceId = KMsvLocalServiceIndexEntryId;
+ entry.iRelatedId = aServiceId;
+ entry.iMtmData2 = KMmsNotificationBinary;
+ cEntry->CreateL( entry );
+ entryId = entry.Id();
+
+ //
+ // Stream
+ // 1) length of the data as 32 bit integer
+ // 2) pushed message data
+ // into created entry's stream
+ //
+ cEntry->SetEntryL( entryId );
+ CMsvStore* store = cEntry->EditStoreL();
+ CleanupStack::PushL( store ); // ***
+ RMsvWriteStream outs;
+ outs.AssignLC( *store, KUidBinaryNotificationStream ); // ***
+ TPtrC8 ptr = aEncodeBuffer->Ptr( 0 );
+ outs.WriteUint32L( ptr.Length() );
+ outs.WriteL( ptr );
+ outs.CommitL();
+ outs.Close();
+ store->CommitL();
+
+ CleanupStack::PopAndDestroy( &outs ); // close outs
+ CleanupStack::PopAndDestroy( store );
+ CleanupStack::PopAndDestroy( cEntry );
+
+ return entryId;
+
+ }
+
+//----------------------------------------------------------------------------------------
+//
+//----------------------------------------------------------------------------------------
+void TMmsTestUtils::FormNotification(
+ TDesC8& aUrl,
+ TInt aSize,
+ CMmsHeaders& aMmsHeaders,
+ CMmsEncode& aMmsEncoder,
+ CBufFlat* aEncodeBuffer )
+ {
+ // for test purposes aUrl will contain the filename.
+
+ // Reset sets the default encapsulation version
+ // The default version has been set from MmsSettings in NewL
+ aMmsHeaders.Reset();
+
+ // construct the notification into iMmsHeaders, and call encode
+
+ aMmsHeaders.SetMessageType( KMmsMessageTypeMNotificationInd );
+
+ TTime currentTime;
+ currentTime.UniversalTime();
+ currentTime.Int64();
+
+ TPtrC8 tid;
+ TBufC8<KMMSMAXTIDLENGTH> target;
+ TInt random = 0;
+
+ // we don't generate a true random TID: We generate the
+ // TID from the URL so that if we generate a notification
+ // twice from the same file, we get the same TID and the
+ // same URL. This way we can test the pruning function in
+ // server MTM
+
+ TInt i;
+ for ( i = 0; i < aUrl.Length(); ++i )
+ {
+ random += aUrl[ i ];
+ }
+
+ target.Des().Num( random );
+ tid.Set( target.Des() );
+ aMmsHeaders.SetTidL( tid );
+
+ aMmsHeaders.SetMessageClass( EMmsClassPersonal );
+ aMmsHeaders.SetMessageSize( aSize );
+ const TInt KTenHours = 10 * 60 * 60; // 10 hours relative expiry
+ aMmsHeaders.SetExpiryInterval( KTenHours );
+ aMmsHeaders.SetContentLocationL( aUrl );
+
+ aMmsEncoder.EncodeHeadersL( aMmsHeaders, *aEncodeBuffer );
+
+ }
+
+
+//----------------------------------------------------------------------------------------
+//
+//----------------------------------------------------------------------------------------
+TBool TMmsTestUtils::IsFile(const TDesC& aFileName, RFs& aFs)
+ {
+ //Is the name a file?
+ if (IsDrive(aFileName))
+ return EFalse;
+ return !(IsDir(aFileName, aFs));
+ }
+
+//----------------------------------------------------------------------------------------
+//
+//----------------------------------------------------------------------------------------
+TBool TMmsTestUtils::IsDir(const TDesC& aFileName, RFs& aFs)
+ {
+ //Is the name a directory?
+ TEntry entry;
+ TInt err = aFs.Entry(aFileName, entry);
+ if (err)
+ return EFalse;
+ else
+ return entry.IsDir();
+ }
+
+//----------------------------------------------------------------------------------------
+//
+//----------------------------------------------------------------------------------------
+TBool TMmsTestUtils::IsDrive(const TDesC& aFileName)
+ {
+ //horrible little function to figure if the path is just a drive
+ TBool retVal = EFalse;
+ if (aFileName.Length()==3) //eg "c:\"
+ {
+ if ((aFileName[1] == ':') && (aFileName[2] == '\\'))
+ retVal=ETrue;
+ }
+ else if (aFileName.Length()==2) //eg "c:"
+ {
+ if (aFileName[1] == ':')
+ retVal=ETrue;
+ }
+ return retVal;
+ }
+
+// end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgutils/convergedmessageutils/tsrc/mmstestbed/src/mmstestuitimer.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,121 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ */
+
+#include "mmstestuitimer.h"
+
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+CTestUiTimer::CTestUiTimer(): CTimer( 5 )
+ {
+ period = KPeriod;
+ }
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CTestUiTimer::ConstructL()
+ {
+ CTimer::ConstructL();
+ CActiveScheduler::Add(this);
+ }
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+CTestUiTimer* CTestUiTimer::NewL()
+ {
+ CTestUiTimer* self = new(ELeave) CTestUiTimer();
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+CTestUiTimer::~CTestUiTimer()
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CTestUiTimer::IssueRequest()
+ {
+ // No operation to cancel if this function is called
+ iObject = NULL;
+ After(period);
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CTestUiTimer::TimeoutOperation( CActive* aObject, TTimeIntervalSeconds aTimeoutInSeconds )
+ {
+ iObject = aObject;
+ TTimeIntervalMicroSeconds32 timeout = aTimeoutInSeconds.Int() * 1000000;
+ After( timeout );
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CTestUiTimer::DoCancel()
+ {
+ CTimer::DoCancel();
+ if ( iObject )
+ {
+ iObject->Cancel();
+ iObject = NULL;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CTestUiTimer::RunL()
+ {
+ if ( iObject )
+ {
+ // If we timeout while holding an active object, we cancel it
+ iObject->Cancel();
+ iObject = NULL;
+ }
+ else
+ {
+ CActiveScheduler::Stop();
+ }
+ }
+
+// ======== GLOBAL FUNCTIONS ========
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgutils/convergedmessageutils/tsrc/testconvergedmessageutils/inc/testconvergedmessageutils.h Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: Main test class declaration for ConvergedMessageUtils
+ */
+
+#ifndef TEST_MMS_PLUGIN_H
+#define TEST_MMS_PLUGIN_H
+
+#ifdef BUILD_TEST_DLL
+#define TEST_EXPORT Q_DECL_EXPORT
+#else
+#define TEST_EXPORT Q_DECL_IMPORT
+#endif
+
+#include <QObject>
+#include <QSignalSpy>
+#include <e32const.h>
+
+//Forward Declarations
+class UniEditorMmsPlugin;
+class ConvergedMessage;
+class MmsTestBed;
+
+//Main Tets Class Declaration
+class TEST_EXPORT TestConvergedMessageUtils: public QObject
+ {
+ Q_OBJECT
+
+private slots:
+
+ /**
+ * Initialises the whole Test
+ **/
+ void initTestCase();//called before the first testfunction is executed.
+
+ /**
+ * Initialises each Test Case
+ **/
+ void init();//called before each testfunction is executed.
+
+ /**
+ * Creates a MMS messsage
+ **/
+ void createMMS();
+
+ /**
+ * Tests the MMS message
+ **/
+ void testMMS();
+
+ /**
+ * Test Methods of ConvergedMessageId which were not part of the tests above
+ **/
+ void testConvergedMessageIdUnusedMethods();
+
+
+ /**
+ * Test Methods of ConvergedMessageAttachment which were not part of the tests above
+ **/
+ void testConvergedMessageAttachmentUnusedMethods();
+
+ /**
+ * Cleans up each Test Case
+ **/
+ void cleanup();//called after every testfunction.
+
+ /**
+ * Cleans up the whole Test Case
+ **/
+ void cleanupTestCase();//called after the last testfunction was executed.
+
+private: //Data
+
+ /**
+ * msgPlugin - MMS Message Plug-in
+ **/
+ UniEditorMmsPlugin* msgPlugin;
+
+ /**
+ * mmstestbed - MMS Message Simulator
+ **/
+ MmsTestBed* mmstestbed;
+
+ /**
+ * spy_draft - Signal Spy for Draft Folder
+ **/
+ QSignalSpy* spy_draft;
+
+ /**
+ * mmsMsgId - The MMS message Id
+ **/
+ long int mmsMsgId;
+ };
+#endif //TEST_MMS_PLUGIN_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgutils/convergedmessageutils/tsrc/testconvergedmessageutils/inc/testconvergedmessageutils.ini Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: Input data Set File for TestConvergedMessageUtils test cases
+ */
+
+const char TEST_MSG_BODY[] = "TestTextE_1_2";
+const char TEST_MSG_SUBJECT[] = "Message Subject";
+const char TEST_SENDER[] = "+919860479112";
+const char TEST_ATTACHMENT[] = "c:\\sample.txt";
+const char TEST_CC[] = "DummyCCAddress";
+const char TEST_BCC[] = "DummyBCCAddress";
+const char TEST_ALIAS[] = "DummySenderAlias";
+
+//out put directory for test results.
+QString OUTPUTDIRECTORY = "c:/logs/TestConvergedMessageUtils";
+//o/p directory for data to be written on temp file.
+QString TEMPDIR = "c:/logs/TestConvergedMessageUtils/testdata";
+//test result O/P file name.
+QString RESULTFILE = "c:/logs/TestConvergedMessageUtils/result_%1.txt";
+// folder named UID3 of msgapptestsuite inside private folder.
+const QString PRIVATE_DIR("C:/private/E39cd515");
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgutils/convergedmessageutils/tsrc/testconvergedmessageutils/src/testconvergedmessageutils.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,343 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: Main test class definition for ConvergedMessageUtils
+ */
+
+#include <QtTest/QtTest>
+#include <QTimer>
+#include <QSignalSpy>
+#include "debugtraces.h"
+#include "testconvergedmessageutils.h"
+#include "convergedmessage.h"
+#include "convergedmessageid.h"
+#include "unieditormmsplugin.h"
+#include "mmstestbed.h"
+#include "testconvergedmessageutils.ini"
+
+//---------------------------------------------------------------
+// TestConvergedMessageUtils::initTestCase
+//---------------------------------------------------------------
+void TestConvergedMessageUtils::initTestCase()
+{
+ //register user defined object to meta system.
+ qRegisterMetaType<long int> ("long int");
+
+ //Verify MmsTestBed Instance.
+ mmstestbed = new MmsTestBed;
+ QVERIFY(mmstestbed != NULL);
+
+ //Instantiate UniEditorMmsPlugin and verify if it is correctly Instantited.
+ msgPlugin = new UniEditorMmsPlugin();
+ QVERIFY(msgPlugin != NULL);
+
+ //set up signalspy to listen to signals emitted by mmstestbed
+ spy_draft = new QSignalSpy(mmstestbed, SIGNAL(entryCreatedInDraft(long int)));
+}
+
+//---------------------------------------------------------------
+// TestConvergedMessageUtils::init
+//---------------------------------------------------------------
+void TestConvergedMessageUtils::init()
+{
+}
+
+//---------------------------------------------------------------
+// TestConvergedMessageUtils::createMMS
+//---------------------------------------------------------------
+void TestConvergedMessageUtils::createMMS()
+{
+ //Create a Converged Message instance.
+ QString subject = TEST_MSG_SUBJECT;
+
+ qint64 timeStamp = QDateTime::currentDateTime().toTime_t();
+
+ QString sender(TEST_SENDER);
+ ConvergedMessageAddress address(sender);
+ ConvergedMessageAttachmentList attachmentList;
+
+ //Add a text attachment to attachment list.
+ QString attachmentPath = TEST_ATTACHMENT;
+ ConvergedMessageAttachment* attachment =
+ new ConvergedMessageAttachment(attachmentPath, ConvergedMessageAttachment::EAttachment);
+
+ attachmentList.append(attachment);
+
+ //Instantiate a Converged Message object and set service a MMS
+ ConvergedMessage msg;
+
+ msg.setMessageType(ConvergedMessage::Mms);
+
+ //Set Subject
+ msg.setSubject(subject);
+
+ //Set Timestamp and verify
+ msg.setTimeStamp(timeStamp);
+ QVERIFY(timeStamp == msg.timeStamp());
+
+ //Set Alias to an address
+ address.setAlias(QString (TEST_ALIAS));
+
+ //Set recipient.
+ msg.addToRecipient(address);
+
+ //Add attachments' list
+ msg.addAttachments(attachmentList);
+ msg.setPriority(ConvergedMessage::Normal);
+
+ //Adding CC Address
+ QString ccAddress(TEST_CC);
+ ConvergedMessageAddress ccAdd(ccAddress);
+ msg.addCcRecipient(ccAdd);
+
+ //Adding BCC Address
+ QString bccAddress(TEST_BCC);
+ ConvergedMessageAddress bccAdd(bccAddress);
+ msg.addBccRecipient(bccAdd);
+
+ //Adding From Address
+ QString recipientAddress(TEST_SENDER);
+ ConvergedMessageAddress recipientAdd(recipientAddress);
+ msg.addFromRecipient(recipientAdd);
+
+ //Set Body Text and verify
+ msg.setBodyText(QString(TEST_MSG_BODY));
+ QVERIFY(msg.bodyText().compare(QString(TEST_MSG_BODY)) == 0);
+
+ //Removing Body Text as MMS messages do not contain Body Text
+ msg.setBodyText(QString(NULL));
+
+ //Set Property and Verify
+ msg.setProperty(ConvergedMessage::Attachment);
+ msg.setProperty(ConvergedMessage::Unread);
+ QVERIFY(msg.properties() == ConvergedMessage::Attachment | ConvergedMessage::Unread);
+ QVERIFY(msg.hasAttachment() == true);
+ QVERIFY(msg.isUnread() == true);
+
+ //Set Location
+ msg.setLocation(ConvergedMessage::Draft);
+
+ //Set Sending State and Verify
+ msg.setSendingState(ConvergedMessage::Waiting);
+ QVERIFY(msg.sendingState() == ConvergedMessage::Waiting);
+
+ //Set Direction
+ msg.setDirection(ConvergedMessage::Outgoing);
+
+ //Set Priority
+ msg.setPriority(ConvergedMessage::Normal);
+
+ //Set Sub Type and verify
+ msg.setMessageSubType(ConvergedMessage::NokiaService);
+ QVERIFY(msg.messageSubType() == ConvergedMessage::NokiaService);
+
+ //Create another Converged Message
+ ConvergedMessage msgCopyFirst(msg);
+ ConvergedMessage msgCopySecond(*(msg.id()));//by Id
+ QCOMPARE(msgCopySecond.id()->getId(), msg.id()->getId());//Verify if the copy was as expected
+
+ //Create a Converged Message with serializing and deserializing and verify
+ QFile file("c:\\test.txt");
+ file.open(QIODevice::WriteOnly);
+ QDataStream out(&file); // Serialize the data into the file
+ msg.serialize(out); // Serialize a string
+ file.close();
+
+ file.open(QIODevice::ReadOnly);
+ QDataStream in(&file); // read the data serialized from the file
+
+ ConvergedMessage msgCopyThird;//Third Copy of the Actual Message
+ msgCopyThird.deserialize(in);
+ file.close();
+
+ //Verify the 3rd Copy with the Original Copy
+ QVERIFY(msgCopyThird.id()->getId() == msg.id()->getId());
+ QCOMPARE(msgCopyThird.subject(), msg.subject());
+ QVERIFY(msgCopyThird.messageType() == msg.messageType());
+
+ //Get a valid MMS message ID and verify that it is valid.
+ mmsMsgId = msgPlugin->convertTo(&msgCopyFirst);
+ QVERIFY(mmsMsgId != -1);
+ QDEBUG_WRITE("MMS Successfully Sent to Dratfs Folder");
+}
+
+//---------------------------------------------------------------
+// TestConvergedMessageUtils::testMMS
+//---------------------------------------------------------------
+void TestConvergedMessageUtils::testMMS()
+{
+ long int mmsDraftMsgId;
+
+ //check if draft-folder signal was received...this means message was created in draft
+ if( 1 <= spy_draft->count())
+ {
+ //compare the msgid and verify with the ID given by MMS plugin
+ void * temp = const_cast<void*>(spy_draft->at(0).at(0).data());
+ mmsDraftMsgId = *reinterpret_cast< long int(*)>(temp);
+ QVERIFY(mmsDraftMsgId == mmsMsgId);
+
+ //Validate the MMS message with all the values set before.
+ ConvergedMessage* draftMsg = msgPlugin->convertFrom(mmsDraftMsgId);
+ QVERIFY(draftMsg->subject().compare(QString(TEST_MSG_SUBJECT)) == 0);
+ QVERIFY(draftMsg->messageType() == ConvergedMessage::Mms);
+ QVERIFY(QString(TEST_SENDER).contains(draftMsg->toAddressList()[0]->address(), Qt::CaseInsensitive) == true);
+ QVERIFY(QString(TEST_ALIAS).contains(draftMsg->toAddressList()[0]->alias(), Qt::CaseInsensitive) == true);
+ QVERIFY(QString(TEST_CC).contains(draftMsg->ccAddressList()[0]->address(), Qt::CaseInsensitive) == true);
+ QVERIFY(QString(TEST_BCC).contains(draftMsg->bccAddressList()[0]->address(), Qt::CaseInsensitive) == true);
+ QVERIFY(QString(TEST_SENDER).contains(draftMsg->fromAddress()->address(), Qt::CaseInsensitive) == true);
+ QVERIFY(draftMsg->attachments().count() == 1);
+ QVERIFY(draftMsg->attachments()[0]->attachmentType() == ConvergedMessageAttachment::EAttachment);
+ QVERIFY(draftMsg->attachments()[0]->filePath().contains(QString(TEST_ATTACHMENT).mid(QString(TEST_ATTACHMENT).indexOf(QString("Sample.txt"), 0, Qt::CaseInsensitive)), Qt::CaseInsensitive) == true);
+ QVERIFY(draftMsg->location() == ConvergedMessage::Draft);
+ QVERIFY(draftMsg->priority() == ConvergedMessage::Normal);
+ QVERIFY(draftMsg->direction() == ConvergedMessage::Outgoing);
+ QDEBUG_WRITE("MMS Successfully Verified at Drafts Folder");
+ }
+ else
+ {
+ QFAIL("testSendReceiveMMS: Failed to create message in Draft");
+ }
+}
+
+//---------------------------------------------------------------
+// TestConvergedMessageUtils::testConvergedMessageIdUnusedMethods
+//---------------------------------------------------------------
+void TestConvergedMessageUtils::testConvergedMessageIdUnusedMethods()
+{
+ //Create a copy of ConvergedMessageId object from another object
+ ConvergedMessageId msgId1;
+ msgId1.setId(0x646);
+
+ //Verify if the two objects match
+ ConvergedMessageId msgId3;
+ msgId3 = msgId1;
+ QVERIFY(msgId3 == msgId1);
+}
+
+//---------------------------------------------------------------
+// TestConvergedMessageUtils::testConvergedMessageAttachmentUnusedMethods
+//---------------------------------------------------------------
+void TestConvergedMessageUtils::testConvergedMessageAttachmentUnusedMethods()
+{
+ //Set Attachment File Path and Type and Verify
+ ConvergedMessageAttachment msgAttachment;
+ msgAttachment.setFilePath(QString(TEST_ATTACHMENT));
+ QCOMPARE(msgAttachment.filePath(), QString(TEST_ATTACHMENT));
+ msgAttachment.setAttachmentType(ConvergedMessageAttachment::EAttachment);
+ QVERIFY(msgAttachment.attachmentType() == ConvergedMessageAttachment::EAttachment);
+
+ //Second Copy with same Contents
+ ConvergedMessageAttachment msgAttachmentCopy;
+ msgAttachmentCopy.setFilePath(QString(TEST_ATTACHMENT));
+ msgAttachmentCopy.setAttachmentType(ConvergedMessageAttachment::EAttachment);
+
+ //Verify if they are same
+ QVERIFY(msgAttachmentCopy == msgAttachment);
+}
+
+//---------------------------------------------------------------
+// TestConvergedMessageUtils::cleanup
+//---------------------------------------------------------------
+void TestConvergedMessageUtils::cleanup()
+{
+}
+
+//---------------------------------------------------------------
+// TestConvergedMessageUtils::cleanupTestCase
+//---------------------------------------------------------------
+void TestConvergedMessageUtils::cleanupTestCase()
+{
+ //Cleanup
+ mmstestbed->cleanAll();//Clean All messages from varios Folders
+ delete spy_draft;//Signal for Draft Folder
+ delete msgPlugin;//MMS Plugin
+ delete mmstestbed;//MMS Testbed
+}
+
+//---------------------------------------------------------------
+// getObject
+// factory method to create objects.
+//---------------------------------------------------------------
+QObject* getObject(QString className)
+{
+ if(className == "TestConvergedMessageUtils" )
+ {
+ return new TestConvergedMessageUtils;
+ }
+ else
+ {
+ return 0;
+ }
+}
+
+//---------------------------------------------------------------
+// createOutPutDirectory
+// creating o/p directory.
+//---------------------------------------------------------------
+void createOutPutDirectory()
+ {
+ QDir dir;
+ //o/p dir
+ dir.mkdir(OUTPUTDIRECTORY);
+ //tmp dir
+ dir.mkdir(TEMPDIR);
+ // dir inside private folder.
+ dir.mkdir(PRIVATE_DIR);
+ }
+
+//---------------------------------------------------------------
+// main
+// main entry point
+//---------------------------------------------------------------
+int main(int argc, char *argv[])
+ {
+ int ret = -1;
+ QCoreApplication app(argc, argv);
+
+ //creating output directory.
+ createOutPutDirectory();
+
+ //the configuration file.
+ QFile data("c:/testconvergedmessageutils.cfg");
+
+ if (data.open(QFile::ReadOnly))
+ {
+ QTextStream in(&data);
+ while(!in.atEnd())
+ {
+ QStringList args;
+ QString appName = argv[0];
+ args << appName;
+
+ QString option = "-o";
+ args << option;
+
+ QString outFile = RESULTFILE;
+ QString name = in.readLine();
+ outFile = outFile.arg(name);
+ args << outFile;
+
+ QObject* tc = getObject(name);
+
+ if(tc)
+ {
+ ret = QTest::qExec(tc, args);
+ delete tc;
+ }
+ }
+ }
+ data.close();
+ return ret;
+ }
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgutils/convergedmessageutils/tsrc/testconvergedmessageutils/testconvergedmessageutils.cfg Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,1 @@
+TestConvergedMessageUtils
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgutils/convergedmessageutils/tsrc/testconvergedmessageutils/testconvergedmessageutils.pl Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,182 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: Test Case Report Generation file for ConvergedMessageUtils
+#
+#!/usr/bin/perl -w
+use warnings;
+use strict;
+
+my $TOTALCASES = 0;
+my $TOTALPASSED = 0;
+my $TOTALRUN = 0;
+my $TOTALFAILED = 0;
+my $TOTALSKIPPED = 0;
+
+sub parse_line
+{
+ my $line = $_[0];
+ my @parts = split (" ", $line);
+ my $passed = $parts[1];
+ my $failed = $parts[3];
+ my $skipped = $parts[5];
+
+ my $total = $passed + $failed + $skipped;
+ my $passrate = $passed * 100 / $total;
+ my $passrateround = sprintf("%.0f",$passrate);
+ my $runrate = ($total - $skipped)*100/$total;
+ my $runrateround = sprintf("%.0f",$runrate);
+
+ $TOTALCASES += $total;
+ $TOTALPASSED += $passed;
+ $TOTALRUN += ($total - $skipped);
+ $TOTALFAILED += $failed;
+ $TOTALSKIPPED += $skipped;
+
+ printf MYFILE "<td>\n";
+ printf MYFILE "$passed\n";
+ printf MYFILE "</td>\n";
+
+ if($failed > 0)
+ {
+ printf MYFILE "<td style=\"font-weight:bold;color:red\">\n";
+ printf MYFILE "$failed\n";
+ printf MYFILE "</td>\n";
+ }
+ else
+ {
+ printf MYFILE "<td>\n";
+ printf MYFILE "$failed\n";
+ printf MYFILE "</td>\n";
+ }
+
+ printf MYFILE "<td>\n";
+ printf MYFILE "$skipped\n";
+ printf MYFILE "</td>\n";
+
+ printf MYFILE "<td>\n";
+ printf MYFILE "$total\n";
+ printf MYFILE "</td>\n";
+
+ printf MYFILE "<td>\n";
+ printf MYFILE ("$passrateround %%\n");
+ printf MYFILE "</td>\n";
+
+ printf MYFILE "<td>\n";
+ printf MYFILE "$runrateround %%\n";
+ printf MYFILE "</td>\n";
+
+
+}
+
+sub parse_file
+ {
+ my $pattern = "Totals";
+ my $file = $_[0];
+ open (FILE,$file);
+
+ while (my $line= <FILE>)
+ {
+ chomp ($line);
+ if ($line =~ m/$pattern/)
+ {
+ parse_line $line;
+ }
+ }
+ close(FILE);
+ }
+
+
+sub generate_report
+ {
+ open (MYFILE, '>/epoc32/winscw/c/logs/TestConvergedMessageUtils/report.html');
+ printf MYFILE "<html>\n";
+ printf MYFILE "<body>\n";
+ printf MYFILE "<head>\n";
+ printf MYFILE "<title>ConvergedMessageUtils Test Reports</title>";
+ printf MYFILE "</head>\n";
+ printf MYFILE "<h2 align = center>ConvergedMessageUtils Test Report</h2>\n";
+ printf MYFILE "<table border = 2 cellpadding = 10 align = center>\n";
+ printf MYFILE "<tr style = \" background-color:lavender \">\n";
+ printf MYFILE "<th>Module</th>\n";
+ printf MYFILE "<th style = color:green>Passed</th>\n";
+ printf MYFILE "<th style = color:red>Failed</th>\n";
+ printf MYFILE "<th style = color:chocolate>Skipped</th>\n";
+ printf MYFILE "<th>Total Cases</th>\n";
+ printf MYFILE "<th>Pass Rate</th>\n";
+ printf MYFILE "<th>Run Rate</th>\n";
+ printf MYFILE "</tr>\n";
+
+
+ my @files = </epoc32/winscw/c/logs/TestConvergedMessageUtils/*.txt>;
+ foreach my $file (@files)
+ {
+ my @splitedpath = split("/",$file);
+ my $filename = $splitedpath[-1];
+ my $length = length($filename);
+ my $name = substr($filename,11,$length-15);
+ printf MYFILE "<tr>\n";
+ printf MYFILE "<td>\n";
+ printf MYFILE "<a HREF=$filename style = text-decoration:none><b>$name</b></a>\n";
+ printf MYFILE "</td>\n";
+
+ parse_file $file;
+
+ printf MYFILE "</tr>\n";
+ }
+
+ printf MYFILE "<tr style= \"font-weight:bold; color:white; background-color:gray\">\n";
+ printf MYFILE "<td>\n";
+ printf MYFILE "<b>Overall</b>\n";
+ printf MYFILE "</td>\n";
+
+
+ printf MYFILE "<td>\n";
+ printf MYFILE "$TOTALPASSED\n";
+ printf MYFILE "</td>\n";
+
+ printf MYFILE "<td>\n";
+ printf MYFILE "$TOTALFAILED\n";
+ printf MYFILE "</td>\n";
+
+ printf MYFILE "<td>\n";
+ printf MYFILE "$TOTALSKIPPED\n";
+ printf MYFILE "</td>\n";
+
+ printf MYFILE "<td>\n";
+ printf MYFILE "$TOTALCASES\n";
+ printf MYFILE "</td>\n";
+
+ my $passrate = $TOTALPASSED*100/$TOTALCASES;
+ my $passrateround = sprintf("%.0f",$passrate);
+ printf MYFILE "<td>\n";
+ printf MYFILE "$passrateround%%\n";
+ printf MYFILE "</td>\n";
+
+ my $runrate = ($TOTALCASES - $TOTALSKIPPED)*100/$TOTALCASES;
+ my $runrateround = sprintf("%.0f",$runrate);
+ printf MYFILE "<td>\n";
+ printf MYFILE "$runrateround%%\n";
+ printf MYFILE "</td>\n";
+
+ printf MYFILE "</tr>\n";
+
+ printf MYFILE "</table>\n";
+ printf MYFILE "</body>\n";
+ printf MYFILE "</html>\n";
+
+ close (MYFILE);
+ }
+
+
+generate_report;
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgutils/convergedmessageutils/tsrc/testconvergedmessageutils/testconvergedmessageutils.pro Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,103 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: Test Case Project Definition for ConvergedMessageUtils
+#
+
+QT += testlib
+QT -= gui
+
+TEMPLATE = app
+TARGET = testconvergedmessageutils
+
+
+INCLUDEPATH += ./inc
+INCLUDEPATH += ../../inc
+INCLUDEPATH += ../mmstestbed/inc
+INCLUDEPATH += ../../../../../inc
+INCLUDEPATH += ../../../s60qconversions/inc
+INCLUDEPATH += ../../../unidatautils/unidatamodel/inc
+INCLUDEPATH += ../../../../../../../mw/hb/include/hbcore
+INCLUDEPATH += ../../../unieditorutils/editorgenutils/inc
+INCLUDEPATH += ../../../unieditorutils/unieditorplugins/unieditormmsplugin/inc
+INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+
+DEFINES += BUILD_TEST_DLL
+CONFIG += hb plugin
+
+SYMBIAN_PLATFORMS = WINSCW ARMV5
+
+SOURCES += \
+ ./src/testconvergedmessageutils.cpp \
+ ../../../unieditorutils/unieditorplugins/unieditormmsplugin/src/unieditormmsplugin.cpp \
+ ../../../unieditorutils/unieditorplugins/unieditormmsplugin/src/unieditormmsplugin_p.cpp
+
+# Input
+HEADERS += \
+ ./inc/testconvergedmessageutils.h \
+ ../../../unieditorutils/unieditorplugins/unieditormmsplugin/inc/unieditormmsplugin.h \
+ ../../../unieditorutils/unieditorplugins/unieditormmsplugin/inc/unieditormmsplugin_p.h
+
+SYMBIAN_PLATFORMS = WINSCW ARMV5
+ symbian {
+ TARGET.CAPABILITY = All -TCB -DRM
+ TARGET.EPOCSTACKSIZE = 0x8000
+ TARGET.EPOCHEAPSIZE = 0x1000 0x1F00000
+ BLD_INF_RULES.prj_exports += "testconvergedmessageutils.cfg c:/testconvergedmessageutils.cfg"
+ BLD_INF_RULES.prj_exports += "testconvergedmessageutils.pl c:/testconvergedmessageutils.pl"
+ }
+
+LIBS += -leuser \
+ -lconvergedmessageutils \
+ -ls60qconversions \
+ -lMsgMedia \
+ -leditorgenutils \
+ -lcone \
+ -leikcoctl \
+ -leikcore \
+ -leikdlg \
+ -lmsgs \
+ -letext \
+ -lgsmu \
+ -lmmsgenutils \
+ -lefsrv \
+ -lestor \
+ -lsmcm \
+ -lCommonEngine \
+ -lbafl \
+ -lCdlEngine \
+ -lFeatMgr \
+ -lapmime \
+ -lapgrfx \
+ -lcharconv \
+ -lInetProtUtil \
+ -lsmildtd \
+ -lxmldom \
+ -lxmlparser \
+ -lcone \
+ -lQtCore \
+ -letel \
+ -lcommdb \
+ -lcommsdat \
+ -letelmm \
+ -lunidatamodelloader \
+ -lunidatamodel \
+ -lavkon \
+ -leikcoctl \
+ -leikctl \
+ -lform \
+ -luiklaf\
+ -lmmstestbed \
+ -lmmsmessage \
+ -lmmsserversettings \
+ -lxqutils
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgutils/convergedmessageutils/tsrc/tsrc.pro Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,22 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: Project Definiton File for both MMSTestBed and TestConvergedMessageUtils
+#
+
+TEMPLATE = subdirs
+
+SUBDIRS += mmstestbed/mmstestbed.pro
+SUBDIRS += testconvergedmessageutils/testconvergedmessageutils.pro
+
+CONFIG += ordered
\ No newline at end of file
--- a/messagingapp/msgutils/eabi/s60qconversionsu.def Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-EXPORTS
- _ZN15S60QConversions16qStringToS60DescERK7QString @ 1 NONAME
- _ZN15S60QConversions16s60DescToQStringERK7TDesC16 @ 2 NONAME
- _ZN15S60QConversions17qStringToS60Desc8ERK7QString @ 3 NONAME
- _ZN15S60QConversions17s60Desc8ToQStringERK6TDesC8 @ 4 NONAME
-
--- a/messagingapp/msgutils/msgutils.pro Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgutils/msgutils.pro Thu Jul 22 16:32:06 2010 +0100
@@ -20,7 +20,6 @@
SYMBIAN_PLATFORMS = WINSCW ARMV5
-SUBDIRS += s60qconversions/s60qconversions.pro
SUBDIRS += convergedmessageutils/convergedmessageutils.pro
SUBDIRS += unieditorutils/unieditorutils.pro
SUBDIRS += unidatautils/unidatautils.pro
\ No newline at end of file
--- a/messagingapp/msgutils/s60qconversions/bwins/s60qconversionsu.def Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-EXPORTS
- ?qStringToS60Desc8@S60QConversions@@SAPAVHBufC8@@ABVQString@@@Z @ 1 NONAME ; class HBufC8 * S60QConversions::qStringToS60Desc8(class QString const &)
- ?qStringToS60Desc@S60QConversions@@SAPAVHBufC16@@ABVQString@@@Z @ 2 NONAME ; class HBufC16 * S60QConversions::qStringToS60Desc(class QString const &)
- ?s60Desc8ToQString@S60QConversions@@SA?AVQString@@ABVTDesC8@@@Z @ 3 NONAME ; class QString S60QConversions::s60Desc8ToQString(class TDesC8 const &)
- ?s60DescToQString@S60QConversions@@SA?AVQString@@ABVTDesC16@@@Z @ 4 NONAME ; class QString S60QConversions::s60DescToQString(class TDesC16 const &)
-
--- a/messagingapp/msgutils/s60qconversions/inc/s60qconversiondefines.h Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Global DLL defines
- *
-*/
-
-
-#ifndef S60QCONV_DEFINES_H
-#define S60QCONV_DEFINES_H
-
-#include <QObject>
-
-#ifdef BUILD_S60QCONV_DLL
-#define S60QCONV_EXPORT Q_DECL_EXPORT
-#else
-#define S60QCONV_EXPORT Q_DECL_IMPORT
-#endif
-
-#endif // S60QCONV_DEFINES_H
--- a/messagingapp/msgutils/s60qconversions/inc/s60qconversions.h Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,44 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-#ifndef S60QCONVERSIONS
-#define S60QCONVERSIONS
-
-#include <QObject>
-#include <e32base.h>
-#include "s60qconversiondefines.h"
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-class S60QCONV_EXPORT S60QConversions
- {
- public:
- static QString s60DescToQString(const TDesC& desc);
- static HBufC* qStringToS60Desc(const QString& string);
- static QString s60Desc8ToQString(const TDesC8& desc);
- static HBufC8* qStringToS60Desc8(const QString& string);
- };
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif // S60QCONVERSIONS
-
-// End of file
-
--- a/messagingapp/msgutils/s60qconversions/rom/s60qconversions.iby Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-#ifndef __S60QCONVERSIONS_IBY__
-#define __S60QCONVERSIONS_IBY__
-
-REM DLL
-file=ABI_DIR\UREL\s60qconversions.dll SHARED_LIB_DIR\s60qconversions.dll
-
-#endif // __S60QCONVERSIONS_IBY__
--- a/messagingapp/msgutils/s60qconversions/s60qconversions.pro Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-#
-
-TEMPLATE = lib
-TARGET = s60qconversions
-DEPENDPATH += . inc src
-INCLUDEPATH += .
-INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
-
-DEFINES += BUILD_S60QCONV_DLL
-#QMAKE_CXXFLAGS.ARMCC -= --no_hide_all
-
-# UID3
-TARGET.UID3 = 0x2001FE7B
-
-# Capability
-TARGET.CAPABILITY = CAP_GENERAL_DLL
-
-TARGET.EPOCALLOWDLLDATA = 1
-
-# Platforms
-SYMBIAN_PLATFORMS = WINSCW ARMV5
-
-# Build.inf rules
-BLD_INF_RULES.prj_exports += \
- "$${LITERAL_HASH}include <platform_paths.hrh>" \
- "rom/s60qconversions.iby CORE_APP_LAYER_IBY_EXPORT_PATH(s60qconversions.iby)"
-
-# Input
-HEADERS += inc/s60qconversions.h
-SOURCES += src/s60qconversions.cpp
-
--- a/messagingapp/msgutils/s60qconversions/src/s60qconversions.cpp Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,91 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-
-#include "s60qconversions.h"
-#include "utf.h"
-
-/*!
- \class S60QConversions
- \brief S60QConversions class offers functions for converting Symbian/Series60 data types to Qt data types and vice versa.
- */
-
-
-/*!
- Converts Symbian/Series60 descriptor (string) to QString
-
- \param desc descriptor to be converted
- \return QString containing converted string
- */
-QString S60QConversions::s60DescToQString(const TDesC& desc)
- {
- return QString::fromUtf16(desc.Ptr(),desc.Length());
- }
-
-/*!
- Converts QString to Symbian/Series60 descriptor (string).
- Note: Ownership of returned descriptor (string) is transferred to caller
-
- \param string QString to be converted
- \return pointer to Symbian/Series60 descriptor on success;
- otherwise returns NULL pointer
- */
-HBufC* S60QConversions::qStringToS60Desc(const QString& string)
- {
- TPtrC16 str(reinterpret_cast<const TUint16*>(string.utf16()));
- return str.Alloc();
- }
-
-/*!
- Converts Symbian/Series60 8 bit descriptor (UTF8 string) to QString
-
- \param desc 8 bit descriptor to be converted
- \return QString on success; otherwise returns null QString
- */
-QString S60QConversions::s60Desc8ToQString(const TDesC8& desc)
- {
- QString qtString;
- HBufC* s60str = NULL;
- TRAPD(error, s60str = CnvUtfConverter::ConvertToUnicodeFromUtf8L(desc));
- if (error == KErrNone) {
- qtString = QString::fromUtf16(s60str->Ptr(),s60str->Length());
- delete s60str;
- }
- return qtString;
- }
-
-/*!
- Converts QString to Symbian/Series60 8 bit descriptor (UTF8 string).
- Note: Ownership of returned descriptor (string) is transferred to caller
-
- \param string QString to be converted
- \return pointer to UTF8 string in Symbian/Series60 descriptor on success;
- otherwise returns NULL pointer
- */
-HBufC8* S60QConversions::qStringToS60Desc8(const QString& string)
- {
- TPtrC16 str(reinterpret_cast<const TUint16*>(string.utf16()));
- HBufC8* s60str = NULL;
- TRAPD(error, s60str = CnvUtfConverter::ConvertFromUnicodeToUtf8L(str));
- if (error != KErrNone) {
- return NULL;
- }
- return s60str;
- }
-
-// End of file
-
-
--- a/messagingapp/msgutils/s60qconversions/tsrc/ut/bwins/t_s60qconversionsu.def Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-EXPORTS
- ?Tests60DescToQString@TestS60QConversions@@AAEXXZ @ 1 NONAME ; void TestS60QConversions::Tests60DescToQString(void)
- ?TestqStringToS60Desc@TestS60QConversions@@AAEXXZ @ 2 NONAME ; void TestS60QConversions::TestqStringToS60Desc(void)
- ?staticMetaObject@TestS60QConversions@@2UQMetaObject@@B @ 3 NONAME ; struct QMetaObject const TestS60QConversions::staticMetaObject
- ?tr@TestS60QConversions@@SA?AVQString@@PBD0@Z @ 4 NONAME ; class QString TestS60QConversions::tr(char const *, char const *)
- ?qt_metacall@TestS60QConversions@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 5 NONAME ; int TestS60QConversions::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?getStaticMetaObject@TestS60QConversions@@SAABUQMetaObject@@XZ @ 6 NONAME ; struct QMetaObject const & TestS60QConversions::getStaticMetaObject(void)
- ?metaObject@TestS60QConversions@@UBEPBUQMetaObject@@XZ @ 7 NONAME ; struct QMetaObject const * TestS60QConversions::metaObject(void) const
- ?qt_metacast@TestS60QConversions@@UAEPAXPBD@Z @ 8 NONAME ; void * TestS60QConversions::qt_metacast(char const *)
- ?initTestCase@TestS60QConversions@@AAEXXZ @ 9 NONAME ; void TestS60QConversions::initTestCase(void)
- ?cleanupTestCase@TestS60QConversions@@AAEXXZ @ 10 NONAME ; void TestS60QConversions::cleanupTestCase(void)
- ?Tests60Desc8ToQString@TestS60QConversions@@AAEXXZ @ 11 NONAME ; void TestS60QConversions::Tests60Desc8ToQString(void)
- ?trUtf8@TestS60QConversions@@SA?AVQString@@PBD0@Z @ 12 NONAME ; class QString TestS60QConversions::trUtf8(char const *, char const *)
- ?TestqStringToS60Desc8@TestS60QConversions@@AAEXXZ @ 13 NONAME ; void TestS60QConversions::TestqStringToS60Desc8(void)
- ?trUtf8@TestS60QConversions@@SA?AVQString@@PBD0H@Z @ 14 NONAME ; class QString TestS60QConversions::trUtf8(char const *, char const *, int)
- ?tr@TestS60QConversions@@SA?AVQString@@PBD0H@Z @ 15 NONAME ; class QString TestS60QConversions::tr(char const *, char const *, int)
-
--- a/messagingapp/msgutils/s60qconversions/tsrc/ut/ut_s60qconversions/t_s60qconversions.cpp Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,78 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-
-
-#include <QtTest/QtTest>
-#include <QObject>
-#include <qtestcase.h>
-#include <t_s60qconversions.h>
-
-
-void TestS60QConversions::initTestCase()
-{
-
- mS60QConversions=0;
-}
-
-
-void TestS60QConversions::Tests60DescToQString()
-{
- HBufC* temp = HBufC::NewLC(10);
- temp->Des().Copy(_L("Sometext"));
-
- QString text= S60QConversions::s60DescToQString(temp->Des());
- QVERIFY(text==QString("Sometext"));
- CleanupStack::PopAndDestroy(temp);
-
-}
-
-void TestS60QConversions::TestqStringToS60Desc()
-{
- QString str ="ExampleText";
- HBufC* s60text = S60QConversions::qStringToS60Desc(str);
- QVERIFY(str==QString("ExampleText"));
-
-}
-
-void TestS60QConversions::Tests60Desc8ToQString()
-{
- HBufC8* temp = HBufC8::NewLC(10);
- temp->Des().Copy(_L("Sometext"));
-
- QString text= S60QConversions::s60Desc8ToQString(temp->Des() );
- QVERIFY(text==QString("Sometext"));
-
- CleanupStack::PopAndDestroy(temp);
-}
-
-void TestS60QConversions::TestqStringToS60Desc8()
-{
- QString str ="ExampleText";
- _LIT8(qStr8,"ExampleText");
- HBufC8* s60text = S60QConversions::qStringToS60Desc8(str);
- QVERIFY(s60text->Des() == qStr8);
-
-}
-
-void TestS60QConversions::cleanupTestCase()
-{
- delete mS60QConversions;
-}
-
-
-
-
--- a/messagingapp/msgutils/s60qconversions/tsrc/ut/ut_s60qconversions/t_s60qconversions.h Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-/*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-#ifndef T_S60QCONVERSIONS_H
-#define T_S60QCONVERSIONS_H
-
-
-#ifdef BUILD_TEST_DLL
-#define TEST_EXPORT Q_DECL_EXPORT
-#else
-#define TEST_EXPORT Q_DECL_IMPORT
-#endif
-
-
-#include <QObject>
-#include "s60qconversions.h"
-
-
-class TEST_EXPORT TestS60QConversions: public QObject
-{
- Q_OBJECT
-
-private slots:
-
- void initTestCase();
-
- void Tests60DescToQString();
-
- void TestqStringToS60Desc();
-
- void Tests60Desc8ToQString();
-
- void TestqStringToS60Desc8();
-
- void cleanupTestCase();
-
-
-private:
-
- S60QConversions* mS60QConversions;
-};
-
-#endif //TEST_S60QCONVERSIONS_H
--- a/messagingapp/msgutils/s60qconversions/tsrc/ut/ut_s60qconversions/t_s60qconversions.pro Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-#
-QT += testlib
-
-TEMPLATE = lib
-TARGET =
-
-
-INCLUDEPATH += .
-
-INCLUDEPATH += ../../../../../inc
-INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
-INCLUDEPATH += ../../../inc
-
-
-
-DEFINES += BUILD_TEST_DLL
-HEADERS += \
- t_s60qconversions.h
-
-SOURCES += \
- t_s60qconversions.cpp
-
-SYMBIAN_PLATFORMS = WINSCW ARMV5
-symbian {
- TARGET.CAPABILITY = CAP_GENERAL_DLL
- TARGET.EPOCSTACKSIZE = 0x8000
- TARGET.EPOCHEAPSIZE = 0x1000 0x1F00000
- TARGET.EPOCALLOWDLLDATA = 1
- }
-LIBS+= -ls60qconversions
-
--- a/messagingapp/msgutils/unidatautils/unidatamodel/src/UniDataUtils.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgutils/unidatautils/unidatamodel/src/UniDataUtils.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -36,7 +36,7 @@
#include <StringLoader.h> // for StringLoader (load and foramt strings from resources)
#include <CommonContentPolicy.h>
-#include <UniDataModel.rsg> // Viewer/Editor Mimetype strings
+#include <unidatamodel.rsg> // Viewer/Editor Mimetype strings
#include "UniModelConst.h"
#include "UniDataUtils.h"
--- a/messagingapp/msgutils/unidatautils/unidatamodel/src/UniObjectList.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgutils/unidatautils/unidatamodel/src/UniObjectList.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -323,7 +323,7 @@
TUriParser8 parser;
if( !url8bit )
{
- return;
+ return NULL;
}
if( aUrl.MatchF( KContentIdString ) == 0 )
--- a/messagingapp/msgutils/unidatautils/unidatamodel/src/UniSmilModel.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgutils/unidatautils/unidatamodel/src/UniSmilModel.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -59,7 +59,7 @@
// MsgDataUTILS
-#include <UniDataModel.rsg> // Viewer/Editor Mimetype strings
+#include <unidatamodel.rsg> // Viewer/Editor Mimetype strings
#include "UniModelConst.h" // Definitions and enums
#include "UniDataUtils.h"
#include "UniSmilSlide.h"
--- a/messagingapp/msgutils/unidatautils/unidatamodel/src/UniSmilParams.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgutils/unidatautils/unidatamodel/src/UniSmilParams.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -25,7 +25,7 @@
#include <bautils.h>
#include <data_caging_path_literals.hrh>
-#include <UniDataModel.rsg>
+#include <unidatamodel.rsg>
#include "UniSmil.hrh"
#include "UniSmilParams.h"
--- a/messagingapp/msgutils/unidatautils/unidatamodel/unidatamodel.pro Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgutils/unidatautils/unidatamodel/unidatamodel.pro Thu Jul 22 16:32:06 2010 +0100
@@ -32,7 +32,6 @@
INCLUDEPATH += inc
INCLUDEPATH += ../../../../inc
INCLUDEPATH += /s60/app/messaging/inc
-INCLUDEPATH += ../s60qconversions/inc
INCLUDEPATH += ../../unieditorutils/editorgenutils/inc
INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
@@ -53,6 +52,15 @@
MMP_RULES += "TARGETPATH resource"
MMP_RULES += "RESOURCE UniDataModel.rss"
+defBlock = \
+ "$${LITERAL_HASH}if defined(EABI)" \
+ "DEFFILE ../eabi/unidatamodel.def" \
+ "$${LITERAL_HASH}else" \
+ "DEFFILE ../bwins/unidatamodel.def" \
+ "$${LITERAL_HASH}endif"
+
+MMP_RULES += defBlock
+
SOURCES += inc/UniDataUtils.inl \
src/UniDataUtils.cpp \
inc/UniDataModel.inl \
@@ -116,7 +124,6 @@
-lcaf \
-lDrmServerInterfaces \
-lmsgcommonutils \
- -ls60qconversions \
-lQtCore \
-leditorgenutils
--- a/messagingapp/msgutils/unidatautils/unidatamodelloader/unidatamodelloader.pro Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgutils/unidatautils/unidatamodelloader/unidatamodelloader.pro Thu Jul 22 16:32:06 2010 +0100
@@ -50,6 +50,15 @@
MMP_RULES += "SOURCEPATH ."
+defBlock = \
+ "$${LITERAL_HASH}if defined(EABI)" \
+ "DEFFILE ../eabi/unidatamodelloader.def" \
+ "$${LITERAL_HASH}else" \
+ "DEFFILE ../bwins/unidatamodelloader.def" \
+ "$${LITERAL_HASH}endif"
+
+MMP_RULES += defBlock
+
SOURCES += src/unidatamodelloader.cpp
LIBS += -lQtCore
--- a/messagingapp/msgutils/unidatautils/unidatamodelplugins/unibiomessagedataplugin/rom/unibiomessagedataplugin.iby Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgutils/unidatautils/unidatamodelplugins/unibiomessagedataplugin/rom/unibiomessagedataplugin.iby Thu Jul 22 16:32:06 2010 +0100
@@ -18,7 +18,6 @@
#define __UNI_BIO_MESSAGE_DATA_PLUGIN_IBY__
-# this is the plugin stub for QT plugin
file=ABI_DIR\UREL\unibiomessagedataplugin.dll SHARED_LIB_DIR\unibiomessagedataplugin.dll
data=\epoc32\data\z\resource\qt\plugins\messaging\datamodel\unibiomessagedataplugin.qtplugin \resource\qt\plugins\messaging\datamodel\unibiomessagedataplugin.qtplugin
--- a/messagingapp/msgutils/unidatautils/unidatamodelplugins/unibiomessagedataplugin/src/unibiomessagedataplugin.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgutils/unidatautils/unidatamodelplugins/unibiomessagedataplugin/src/unibiomessagedataplugin.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -18,7 +18,7 @@
//SYSTEM INCLUDES
#include <mtclreg.h>
#include <mtclbase.h>
-#include <s60qconversions.h>
+#include <xqconversions.h>
//USER INCLUDES
#include "unibiomessagedataplugin.h"
@@ -122,6 +122,12 @@
{
RFile file = d_ptr->attachmentL();
+ if(attachmentCount() == 0)
+ {
+ file.Close();
+ return QList<UniMessageInfo*> ();
+ }
+
UniMessageInfoList attlist;
QString path;
@@ -132,7 +138,7 @@
User::LeaveIfError(file.FullName(fullName));
User::LeaveIfError(file.Size(size));
- path = S60QConversions::s60DescToQString(*fullName.AllocL());
+ path = XQConversions::s60DescToQString(*fullName.AllocL());
UniMessageInfo *msgobj = new UniMessageInfo(path, size, mimetype);
attlist << msgobj;
@@ -170,7 +176,11 @@
//---------------------------------------------------------------
bool UniBioMessageDataPlugin::hasAttachment()
{
- return true;
+ if(attachmentCount() > 0)
+ return true;
+ else
+ return false;
+
}
// UniBioMessageDataPlugin::objectCount()
--- a/messagingapp/msgutils/unidatautils/unidatamodelplugins/unibiomessagedataplugin/src/unibiomessagedataplugin_p.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgutils/unidatautils/unidatamodelplugins/unibiomessagedataplugin/src/unibiomessagedataplugin_p.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -30,9 +30,9 @@
#include "debugtraces.h"
#include <QDateTime>
-#include <s60qconversions.h>
+#include <xqconversions.h>
#include <mmsvattachmentmanager.h>
-
+#include <mmsvattachmentmanagersync.h>
#include "convergedmessage.h"
#include "convergedmessageaddress.h"
#include "unibiomessagedataplugin_p.h"
@@ -49,8 +49,17 @@
UniBioMessageDataPluginPrivate::~UniBioMessageDataPluginPrivate()
{
q_ptr = NULL;
- if (iMsvEntry)
+
+ if(attachmentProcessed == EFalse && iAttachmentCount == 1)
{
+ CMsvStore* store = iMsvEntry->EditStoreL();
+ CleanupStack::PushL(store);
+ MMsvAttachmentManagerSync& attachMan = store->AttachmentManagerExtensionsL();
+ attachMan.RemoveAttachmentL(0);
+ CleanupStack::PopAndDestroy();
+ }
+
+ if (iMsvEntry) {
delete iMsvEntry;
}
@@ -141,7 +150,7 @@
HBufC* buf = HBufC::NewL(len);
TPtr bufPtr = buf->Des();
textBody.ExtractSelectively(bufPtr, 0, len, CPlainText::EExtractAll);
- aBodyText = S60QConversions::s60DescToQString(*buf);
+ aBodyText = XQConversions::s60DescToQString(*buf);
delete buf;
}
@@ -183,8 +192,8 @@
ConvergedMessageAddress
* messageAddress =
- new ConvergedMessageAddress(S60QConversions::s60DescToQString(address),
- S60QConversions::s60DescToQString(name));
+ new ConvergedMessageAddress(XQConversions::s60DescToQString(address),
+ XQConversions::s60DescToQString(name));
mAddressList.append(messageAddress);
}
CleanupStack::PopAndDestroy(3, pText);
@@ -209,7 +218,7 @@
smsHeader->RestoreL(*store);
messageAddress
- = S60QConversions::s60DescToQString(smsHeader->FromAddress());
+ = XQConversions::s60DescToQString(smsHeader->FromAddress());
CleanupStack::PopAndDestroy(3, pText);
}
@@ -233,8 +242,7 @@
//---------------------------------------------------------------
RFile UniBioMessageDataPluginPrivate::attachmentL()
{
- if (attachmentProcessed)
- {
+ if (attachmentProcessed) {
CMsvStore* store1 = iMsvEntry->ReadStoreL();
CleanupStack::PushL(store1);
@@ -244,33 +252,52 @@
return file;
}
- CMsvEntrySelection* selection = new (ELeave) CMsvEntrySelection;
- CleanupStack::PushL(selection);
+ RFile file;
+
+ if (iMsvEntry->Entry().SendingState() != KMsvSendStateNotApplicable
+ || iMsvEntry->Entry().SendingState() != KMsvSendStateUnknown) {
- selection->AppendL(iMessageId);
+ CMsvStore* store = iMsvEntry->ReadStoreL();
+ CleanupStack::PushL(store);
+ MMsvAttachmentManager& attachMan = store->AttachmentManagerL();
+
+ iAttachmentCount = attachMan.AttachmentCount();
- TBuf8<1> aParameter;
- CMsvOperationActiveSchedulerWait* wait = CMsvOperationActiveSchedulerWait::NewLC();
-
- CMsvOperation* operation =
- iBioClientMtm->InvokeAsyncFunctionL(KBiosMtmParse,
- *selection,
- aParameter,
- wait->iStatus);
+ if (iAttachmentCount > 0) {
+ file = attachMan.GetAttachmentFileL(0);
+ }
+ CleanupStack::PopAndDestroy(store);
+
+ }
+
+ if (iAttachmentCount == 0) {
+ CMsvEntrySelection* selection = new (ELeave) CMsvEntrySelection;
+ CleanupStack::PushL(selection);
- wait->Start();
+ selection->AppendL(iMessageId);
+
+ TBuf8<1> aParameter;
+ CMsvOperationActiveSchedulerWait* wait = CMsvOperationActiveSchedulerWait::NewLC();
- CMsvStore* store = iMsvEntry->ReadStoreL();
- CleanupStack::PushL(store);
- MMsvAttachmentManager& attachMan = store->AttachmentManagerL();
+ CMsvOperation* operation = iBioClientMtm->InvokeAsyncFunctionL(KBiosMtmParse, *selection,
+ aParameter, wait->iStatus);
+
+ wait->Start();
- iAttachmentCount = attachMan.AttachmentCount();
-
- RFile file = attachMan.GetAttachmentFileL(0);
+ CMsvStore* store = iMsvEntry->ReadStoreL();
+ CleanupStack::PushL(store);
+ MMsvAttachmentManager& attachMan = store->AttachmentManagerL();
- delete operation;
- CleanupStack::PopAndDestroy(3,selection);
- attachmentProcessed = ETrue;
+ iAttachmentCount = attachMan.AttachmentCount();
+
+ if(iAttachmentCount) {
+ file = attachMan.GetAttachmentFileL(0);
+ }
+
+ delete operation;
+ CleanupStack::PopAndDestroy(3, selection);
+ attachmentProcessed = ETrue;
+ }
return file;
}
@@ -282,8 +309,7 @@
int UniBioMessageDataPluginPrivate::attachmentCount()
{
- if (!attachmentProcessed)
- {
+ if (!attachmentProcessed) {
RFile file = attachmentL();
file.Close();
}
--- a/messagingapp/msgutils/unidatautils/unidatamodelplugins/unibiomessagedataplugin/tsrc/testunidatamodelvcalplugin/testunidatamodelvcalplugin.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgutils/unidatautils/unidatamodelplugins/unibiomessagedataplugin/tsrc/testunidatamodelvcalplugin/testunidatamodelvcalplugin.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -17,7 +17,7 @@
#include <QtDebug>
#include <QTimer>
#include <QSignalSpy>
-#include <s60qconversions.h>
+#include <xqconversions.h>
#include <bsp.h>
#include <biodb.h>
#include <biouids.h>
@@ -128,10 +128,10 @@
origFile.Read(readBuf);
readBuf16->Des().Copy(readBuf);
- QString orig = S60QConversions::s60DescToQString(*readBuf16);
+ QString orig = XQConversions::s60DescToQString(*readBuf16);
origFile.Close();
- HBufC* filepath = S60QConversions::qStringToS60Desc(path);
+ HBufC* filepath = XQConversions::qStringToS60Desc(path);
RFile file;
op = file.Open(iFs, *filepath, EFileRead);
@@ -139,7 +139,7 @@
file.Read(readBuf);
readBuf16->Des().Copy(readBuf);
- QString bod = S60QConversions::s60DescToQString(*readBuf16);
+ QString bod = XQConversions::s60DescToQString(*readBuf16);
delete readBuf16;
file.Close();
@@ -197,10 +197,10 @@
origFile.Read(readBuf);
readBuf16->Des().Copy(readBuf);
- QString orig = S60QConversions::s60DescToQString(*readBuf16);
+ QString orig = XQConversions::s60DescToQString(*readBuf16);
origFile.Close();
- HBufC* filepath = S60QConversions::qStringToS60Desc(path);
+ HBufC* filepath = XQConversions::qStringToS60Desc(path);
RFile file;
op = file.Open(iFs, *filepath, EFileRead);
@@ -210,7 +210,7 @@
readBuf16->Des().Copy(readBuf);
- QString bod = S60QConversions::s60DescToQString(*readBuf16);
+ QString bod = XQConversions::s60DescToQString(*readBuf16);
delete readBuf16;
file.Close();
@@ -476,7 +476,7 @@
TBufC<KTelephoneNumberMaxLength> telNumber;
QString recepient(TEST_MSG_FROM1);
- tempNumber = S60QConversions::qStringToS60Desc(recepient);
+ tempNumber = XQConversions::qStringToS60Desc(recepient);
telNumber = tempNumber->Des();
newBioEntry.iDetails.Set(telNumber);
@@ -533,9 +533,9 @@
QString recepient2(TEST_MSG_FROM2);
QString alias(TEST_MSG_ALIAS1);
- HBufC* addr = S60QConversions::qStringToS60Desc(recepient);
- HBufC* addr2 = S60QConversions::qStringToS60Desc(recepient2);
- HBufC* alias1 = S60QConversions::qStringToS60Desc(alias);
+ HBufC* addr = XQConversions::qStringToS60Desc(recepient);
+ HBufC* addr2 = XQConversions::qStringToS60Desc(recepient2);
+ HBufC* alias1 = XQConversions::qStringToS60Desc(alias);
CSmsHeader* smsHeader = CSmsHeader::NewL(CSmsPDU::ESmsSubmit, *pText);
CleanupStack::PushL(smsHeader);
--- a/messagingapp/msgutils/unidatautils/unidatamodelplugins/unibiomessagedataplugin/tsrc/testunidatamodelvcalplugin/testunidatamodelvcalplugin.pro Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgutils/unidatautils/unidatamodelplugins/unibiomessagedataplugin/tsrc/testunidatamodelvcalplugin/testunidatamodelvcalplugin.pro Thu Jul 22 16:32:06 2010 +0100
@@ -23,7 +23,6 @@
INCLUDEPATH += .
INCLUDEPATH += ../../../../../../inc
-INCLUDEPATH += ../../../../../msgutils/s60qconversions/inc
INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
DEFINES += BUILD_TEST_DLL
@@ -48,9 +47,17 @@
BLD_INF_RULES.prj_exports += "BioMtm.rsc /epoc32/winscw/c/resource/messaging/mtm/BioMtm.rsc"
}
+defBlock = \
+ "$${LITERAL_HASH}if defined(EABI)" \
+ "DEFFILE ../eabi/test_unidatamodel_vcal_plugin.def" \
+ "$${LITERAL_HASH}else" \
+ "DEFFILE ../bwins/test_unidatamodel_vcal_plugin.def" \
+ "$${LITERAL_HASH}endif"
+
+MMP_RULES += defBlock
+
LIBS += -leuser \
-lconvergedmessageutils\
- -ls60qconversions \
-lmsgs \
-lsmcm \
-lgsmu \
@@ -61,6 +68,7 @@
-lbioc \
-lefsrv \
-lbiodb \
- -lbifu
+ -lbifu \
+ -lxqutils
--- a/messagingapp/msgutils/unidatautils/unidatamodelplugins/unibiomessagedataplugin/unibiomessagedataplugin.pro Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgutils/unidatautils/unidatamodelplugins/unibiomessagedataplugin/unibiomessagedataplugin.pro Thu Jul 22 16:32:06 2010 +0100
@@ -25,7 +25,6 @@
DEPENDPATH += . inc src
INCLUDEPATH += ./inc
-INCLUDEPATH += ../../../../msgutils/s60qconversions/inc
INCLUDEPATH += ../../../../../inc
INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
@@ -51,7 +50,6 @@
LIBS += -leuser \
-lconvergedmessageutils\
- -ls60qconversions \
-lmsgs \
-lSmcm \
-lgsmu \
@@ -59,7 +57,8 @@
-lQtCore \
-lefsrv \
-lbioc \
- -lbifu
+ -lbifu \
+ -lxqutils
# plugin stub deployment
--- a/messagingapp/msgutils/unidatautils/unidatamodelplugins/unimmsdataplugin/rom/unimmsdataplugin.iby Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgutils/unidatautils/unidatamodelplugins/unimmsdataplugin/rom/unimmsdataplugin.iby Thu Jul 22 16:32:06 2010 +0100
@@ -19,7 +19,6 @@
#define __UNI_MMS_DATA_PLUGIN_IBY__
-# this is the plugin stub for QT plugin
file=ABI_DIR\UREL\unimmsdataplugin.dll SHARED_LIB_DIR\unimmsdataplugin.dll
data=\epoc32\data\z\resource\qt\plugins\messaging\datamodel\unimmsdataplugin.qtplugin \resource\qt\plugins\messaging\datamodel\unimmsdataplugin.qtplugin
--- a/messagingapp/msgutils/unidatautils/unidatamodelplugins/unimmsdataplugin/src/unimmsdataplugin_p.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgutils/unidatautils/unidatamodelplugins/unimmsdataplugin/src/unimmsdataplugin_p.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -30,10 +30,11 @@
#include <mmsheaders.h>
#include <MsgMediaInfo.h>
#include <MsgMediaResolver.h>
+#include <fileprotectionresolver.h>
#include <QDateTime>
#include "convergedmessage.h"
-#include "s60qconversions.h"
+#include <xqconversions.h>
#include "convergedmessageaddress.h"
#include "unimmsdataplugin_p.h"
#include "debugtraces.h"
@@ -117,7 +118,7 @@
TInt len = textBody.DocumentLength();
HBufC* buf = HBufC::NewL(len);
TPtr bufPtr = buf->Des();
- aBodyText = S60QConversions::s60DescToQString(bufPtr);
+ aBodyText = XQConversions::s60DescToQString(bufPtr);
}
int UniMMSDataPluginPrivate::messageSize()
@@ -129,7 +130,7 @@
QString UniMMSDataPluginPrivate::subject()
{
TPtrC sub = mMmsClient->SubjectL();
- return S60QConversions::s60DescToQString(sub);
+ return XQConversions::s60DescToQString(sub);
}
@@ -163,8 +164,8 @@
// populate address
ConvergedMessageAddress
* messageAddress =
- new ConvergedMessageAddress(S60QConversions::s60DescToQString(address),
- S60QConversions::s60DescToQString(name));
+ new ConvergedMessageAddress(XQConversions::s60DescToQString(address),
+ XQConversions::s60DescToQString(name));
mAddressList.append(messageAddress);
}
@@ -203,8 +204,8 @@
// populate address
ConvergedMessageAddress
* messageAddress =
- new ConvergedMessageAddress(S60QConversions::s60DescToQString(address),
- S60QConversions::s60DescToQString(name));
+ new ConvergedMessageAddress(XQConversions::s60DescToQString(address),
+ XQConversions::s60DescToQString(name));
mAddressList.append(messageAddress);
}
@@ -243,8 +244,8 @@
// populate address
ConvergedMessageAddress
* messageAddress =
- new ConvergedMessageAddress(S60QConversions::s60DescToQString(address),
- S60QConversions::s60DescToQString(name));
+ new ConvergedMessageAddress(XQConversions::s60DescToQString(address),
+ XQConversions::s60DescToQString(name));
mAddressList.append(messageAddress);
}
@@ -257,7 +258,7 @@
{
TPtrC sender = mMmsClient->Sender();
- messageAddress = S60QConversions::s60DescToQString(sender);
+ messageAddress = XQConversions::s60DescToQString(sender);
}
UniMessageInfoList UniMMSDataPluginPrivate::attachmentList()
@@ -271,15 +272,17 @@
for (int i = 0; i < attcount; i++)
{
CUniObject *obj = mUniDataModel->AttachmentList().GetByIndex(i);
+ CMsgMediaInfo *mediaInfo = obj->MediaInfo();
- mimetype = S60QConversions::s60Desc8ToQString(obj->MimeType());
- path
- = S60QConversions::s60DescToQString(obj->MediaInfo()->FullFilePath());
+ mimetype = XQConversions::s60Desc8ToQString(obj->MimeType());
+ path = XQConversions::s60DescToQString(mediaInfo->FullFilePath());
size = obj->Size(EFalse);
UniMessageInfo *msgobj = new UniMessageInfo(path, size, mimetype);
+ msgobj->setProtected(EFileProtNoProtection != mediaInfo->Protection());
+ msgobj->setCorrupted(mediaInfo->Corrupt());
attlist << msgobj;
- }
+}
return attlist;
}
@@ -329,13 +332,15 @@
for (int i = 0; i < objcount; i++)
{
CUniObject *obj = mUniDataModel->ObjectList().GetByIndex(i);
+ CMsgMediaInfo *mediaInfo = obj->MediaInfo();
- mimetype = S60QConversions::s60Desc8ToQString(obj->MimeType());
- path
- = S60QConversions::s60DescToQString(obj->MediaInfo()->FullFilePath());
+ mimetype = XQConversions::s60Desc8ToQString(obj->MimeType());
+ path = XQConversions::s60DescToQString(mediaInfo->FullFilePath());
size = obj->Size(EFalse);
UniMessageInfo *msgobj = new UniMessageInfo(path, size, mimetype);
+ msgobj->setProtected(EFileProtNoProtection != mediaInfo->Protection());
+ msgobj->setCorrupted(mediaInfo->Corrupt());
objlist << msgobj;
}
@@ -361,15 +366,16 @@
int size;
for (int i = 0; i < slideobjcount; i++)
{
- CUniObject *obj = mUniDataModel->SmilModel().GetObjectByIndex(slidenum,
- i);
+ CUniObject *obj = mUniDataModel->SmilModel().GetObjectByIndex(slidenum, i);
+ CMsgMediaInfo *mediaInfo = obj->MediaInfo();
- mimetype = S60QConversions::s60Desc8ToQString(obj->MimeType());
- path
- = S60QConversions::s60DescToQString(obj->MediaInfo()->FullFilePath());
+ mimetype = XQConversions::s60Desc8ToQString(obj->MimeType());
+ path = XQConversions::s60DescToQString(mediaInfo->FullFilePath());
size = obj->Size(EFalse);
UniMessageInfo *msgobj = new UniMessageInfo(path, size, mimetype);
+ msgobj->setProtected(EFileProtNoProtection != mediaInfo->Protection());
+ msgobj->setCorrupted(mediaInfo->Corrupt());
slidecontent << msgobj;
}
--- a/messagingapp/msgutils/unidatautils/unidatamodelplugins/unimmsdataplugin/tsrc/testunidatamodelmmsplugin/testunidatamodelmmsplugin.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgutils/unidatautils/unidatamodelplugins/unimmsdataplugin/tsrc/testunidatamodelmmsplugin/testunidatamodelmmsplugin.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -20,7 +20,7 @@
#include <QTimer>
#include <QSignalSpy>
#include "convergedmessage.h"
-#include "s60qconversions.h"
+#include <xqconversions.h>
#include "unidatamodelplugininterface.h"
#include "unidatamodelloader.h"
#include <mmsclient.h>
@@ -168,13 +168,13 @@
if(subjectField)
{
QString subject(TEST_MSG_SUBJECT);
- HBufC* subj = S60QConversions::qStringToS60Desc(subject);
+ HBufC* subj = XQConversions::qStringToS60Desc(subject);
iMmsClientMtm->SetSubjectL(*subj);
}
//Sender
QString sender(TEST_MSG_FROM1);
- HBufC* addr = S60QConversions::qStringToS60Desc(sender);
+ HBufC* addr = XQConversions::qStringToS60Desc(sender);
if (addr)
@@ -191,7 +191,7 @@
//Recipient
QString recipient(TEST_MSG_RECIEPIENT1);
- HBufC* addr2 = S60QConversions::qStringToS60Desc(recipient);
+ HBufC* addr2 = XQConversions::qStringToS60Desc(recipient);
if (addr2)
{
CleanupStack::PushL(addr2);
@@ -200,7 +200,7 @@
}
QString recipient2(TEST_MSG_RECIEPIENT2);
- HBufC* addr3 = S60QConversions::qStringToS60Desc(recipient2);
+ HBufC* addr3 = XQConversions::qStringToS60Desc(recipient2);
if (addr3)
{
CleanupStack::PushL(addr3);
@@ -209,7 +209,7 @@
}
QString recipient3(TEST_MSG_RECIEPIENT3);
- HBufC* addr4 = S60QConversions::qStringToS60Desc(recipient3);
+ HBufC* addr4 = XQConversions::qStringToS60Desc(recipient3);
if (addr4)
{
CleanupStack::PushL(addr4);
@@ -377,7 +377,7 @@
//Sender
QString sender(TEST_MSG_FROM1);
- HBufC* addr = S60QConversions::qStringToS60Desc(sender);
+ HBufC* addr = XQConversions::qStringToS60Desc(sender);
if (addr)
{
@@ -393,7 +393,7 @@
//Recipient
QString recipient(TEST_MSG_RECIEPIENT1);
- HBufC* addr2 = S60QConversions::qStringToS60Desc(recipient);
+ HBufC* addr2 = XQConversions::qStringToS60Desc(recipient);
if (addr2)
{
CleanupStack::PushL(addr2);
--- a/messagingapp/msgutils/unidatautils/unidatamodelplugins/unimmsdataplugin/tsrc/testunidatamodelmmsplugin/testunidatamodelmmsplugin.pro Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgutils/unidatautils/unidatamodelplugins/unimmsdataplugin/tsrc/testunidatamodelmmsplugin/testunidatamodelmmsplugin.pro Thu Jul 22 16:32:06 2010 +0100
@@ -9,7 +9,6 @@
INCLUDEPATH += .
-INCLUDEPATH += ../../../../../msgutils/s60qconversions/inc
INCLUDEPATH += ../../../../../internal/sf/app/messaging/mmsengine/mmsmessage/inc
INCLUDEPATH += ../../../../../internal/sf/app/messaging/mmsengine/inc
INCLUDEPATH += ../../../../../../inc
@@ -38,9 +37,18 @@
BLD_INF_RULES.prj_exports += "photo.jpg C:/pictures/photo.jpg"
}
+defBlock = \
+ "$${LITERAL_HASH}if defined(EABI)" \
+ "DEFFILE ../eabi/test_unidatamodel_mms_plugin.def" \
+ "$${LITERAL_HASH}else" \
+ "DEFFILE ../bwins/test_unidatamodel_mms_plugin.def" \
+ "$${LITERAL_HASH}endif"
+
+MMP_RULES += defBlock
+
LIBS += -leuser \
-lconvergedmessageutils\
- -ls60qconversions \
+ -lxqutils \
-lmsgs \
-lsmcm \
-lgsmu \
--- a/messagingapp/msgutils/unidatautils/unidatamodelplugins/unimmsdataplugin/unimmsdataplugin.pro Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgutils/unidatautils/unidatamodelplugins/unimmsdataplugin/unimmsdataplugin.pro Thu Jul 22 16:32:06 2010 +0100
@@ -26,7 +26,6 @@
DEPENDPATH += . inc src
INCLUDEPATH += ./inc
-INCLUDEPATH += ../../../../msgutils/s60qconversions/inc
INCLUDEPATH += ../../../unieditorutils/unieditorutils/inc
INCLUDEPATH += ../../../../../inc
INCLUDEPATH += ../../../../mmsengine/mmsmessage/inc
@@ -57,7 +56,6 @@
-lbafl \
-lestor \
-lconvergedmessageutils\
- -ls60qconversions \
-lmsgs \
-letext \
-lmmscli \
@@ -67,7 +65,8 @@
-lunidatamodel \
-lmmsserversettings \
-lmsgmedia \
- -leikctl
+ -leikctl \
+ -lxqutils
# plugin stub deployment
plugin.sources = unimmsdataplugin.dll
--- a/messagingapp/msgutils/unidatautils/unidatamodelplugins/unismsdataplugin/rom/unismsdataplugin.iby Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgutils/unidatautils/unidatamodelplugins/unismsdataplugin/rom/unismsdataplugin.iby Thu Jul 22 16:32:06 2010 +0100
@@ -18,7 +18,7 @@
#define __UNI_SMS_DATA_PLUGIN_IBY__
-# this is the plugin stub for QT plugin
+
file=ABI_DIR\UREL\unismsdataplugin.dll SHARED_LIB_DIR\unismsdataplugin.dll
data=\epoc32\data\z\resource\qt\plugins\messaging\datamodel\unismsdataplugin.qtplugin \resource\qt\plugins\messaging\datamodel\unismsdataplugin.qtplugin
--- a/messagingapp/msgutils/unidatautils/unidatamodelplugins/unismsdataplugin/src/unismsdataplugin_p.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgutils/unidatautils/unidatamodelplugins/unismsdataplugin/src/unismsdataplugin_p.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -31,7 +31,7 @@
#include <csmsemailfields.h>
//USER INCLUDES
-#include "s60qconversions.h"
+#include <xqconversions.h>
#include "convergedmessageaddress.h"
#include "convergedmessage.h"
@@ -149,7 +149,7 @@
HBufC* buf = HBufC::NewL(len);
TPtr bufPtr = buf->Des();
textBody.ExtractSelectively(bufPtr, 0, len, CPlainText::EExtractAll);
- aBodyText = S60QConversions::s60DescToQString(*buf);
+ aBodyText = XQConversions::s60DescToQString(*buf);
delete buf;
}
@@ -180,8 +180,8 @@
// populate address
ConvergedMessageAddress
* messageAddress =
- new ConvergedMessageAddress(S60QConversions::s60DescToQString(address),
- S60QConversions::s60DescToQString(name));
+ new ConvergedMessageAddress(XQConversions::s60DescToQString(address),
+ XQConversions::s60DescToQString(name));
mAddressList.append(messageAddress);
}
@@ -195,8 +195,8 @@
extractNameAndAddress(emailRecipients.MdcaPoint(id), name, address);
ConvergedMessageAddress
* messageAddress =
- new ConvergedMessageAddress(S60QConversions::s60DescToQString(address),
- S60QConversions::s60DescToQString(name));
+ new ConvergedMessageAddress(XQConversions::s60DescToQString(address),
+ XQConversions::s60DescToQString(name));
mAddressList.append(messageAddress);
}
}
@@ -226,7 +226,7 @@
smsHeader->RestoreL(*store);
messageAddress
- = S60QConversions::s60DescToQString(smsHeader->FromAddress());
+ = XQConversions::s60DescToQString(smsHeader->FromAddress());
CleanupStack::PopAndDestroy(4, pText);
}
--- a/messagingapp/msgutils/unidatautils/unidatamodelplugins/unismsdataplugin/tsrc/testunidatamodelsmsplugin/testunidatamodelsmsplugin.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgutils/unidatautils/unidatamodelplugins/unismsdataplugin/tsrc/testunidatamodelsmsplugin/testunidatamodelsmsplugin.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -17,7 +17,7 @@
#include <QtDebug>
#include <QTimer>
#include <QSignalSpy>
-#include "s60qconversions.h"
+#include <xqconversions.h>
#include <csmsaccount.h>
#include "convergedmessage.h"
@@ -111,7 +111,7 @@
//AddBody
QString body(TEST_MSG_BODY);
- HBufC* bodyText = S60QConversions::qStringToS60Desc(body);
+ HBufC* bodyText = XQConversions::qStringToS60Desc(body);
if (bodyText)
{
CleanupStack::PushL(bodyText);
@@ -131,9 +131,9 @@
QString recepient2(TEST_MSG_FROM2);
QString alias(TEST_MSG_ALIAS1);
- HBufC* addr = S60QConversions::qStringToS60Desc(recepient);
- HBufC* addr2 = S60QConversions::qStringToS60Desc(recepient2);
- HBufC* alias1 = S60QConversions::qStringToS60Desc(alias);
+ HBufC* addr = XQConversions::qStringToS60Desc(recepient);
+ HBufC* addr2 = XQConversions::qStringToS60Desc(recepient2);
+ HBufC* alias1 = XQConversions::qStringToS60Desc(alias);
if (addr)
{
@@ -183,7 +183,7 @@
//AddBody
QString body(TEST_MSG_BODY);
- HBufC* bodyText = S60QConversions::qStringToS60Desc(body);
+ HBufC* bodyText = XQConversions::qStringToS60Desc(body);
if (bodyText)
{
CleanupStack::PushL(bodyText);
@@ -203,9 +203,9 @@
QString recepient2(TEST_MSG_FROM2);
QString alias(TEST_MSG_ALIAS1);
- HBufC* addr = S60QConversions::qStringToS60Desc(recepient);
- HBufC* addr2 = S60QConversions::qStringToS60Desc(recepient2);
- HBufC* alias1 = S60QConversions::qStringToS60Desc(alias);
+ HBufC* addr = XQConversions::qStringToS60Desc(recepient);
+ HBufC* addr2 = XQConversions::qStringToS60Desc(recepient2);
+ HBufC* alias1 = XQConversions::qStringToS60Desc(alias);
if (addr)
{
@@ -258,7 +258,7 @@
//AddBody
QString body(TEST_MSG_BODY);
- HBufC* bodyText = S60QConversions::qStringToS60Desc(body);
+ HBufC* bodyText = XQConversions::qStringToS60Desc(body);
if (bodyText)
{
CleanupStack::PushL(bodyText);
@@ -278,9 +278,9 @@
QString recepient2(TEST_MSG_FROM2);
QString alias(TEST_MSG_ALIAS1);
- HBufC* addr = S60QConversions::qStringToS60Desc(recepient);
- HBufC* addr2 = S60QConversions::qStringToS60Desc(recepient2);
- HBufC* alias1 = S60QConversions::qStringToS60Desc(alias);
+ HBufC* addr = XQConversions::qStringToS60Desc(recepient);
+ HBufC* addr2 = XQConversions::qStringToS60Desc(recepient2);
+ HBufC* alias1 = XQConversions::qStringToS60Desc(alias);
if (addr)
{
@@ -331,7 +331,7 @@
//AddBody
QString body(TEST_MSG_BODY);
- HBufC* bodyText = S60QConversions::qStringToS60Desc(body);
+ HBufC* bodyText = XQConversions::qStringToS60Desc(body);
if (bodyText)
{
CleanupStack::PushL(bodyText);
@@ -351,9 +351,9 @@
QString recipient2(TEST_MSG_FROM2);
QString alias(TEST_MSG_ALIAS1);
- HBufC* addr = S60QConversions::qStringToS60Desc(recipient);
- HBufC* addr2 = S60QConversions::qStringToS60Desc(recipient2);
- HBufC* alias1 = S60QConversions::qStringToS60Desc(alias);
+ HBufC* addr = XQConversions::qStringToS60Desc(recipient);
+ HBufC* addr2 = XQConversions::qStringToS60Desc(recipient2);
+ HBufC* alias1 = XQConversions::qStringToS60Desc(alias);
if (addr)
{
@@ -396,7 +396,7 @@
//AddBody
QString body(TEST_MSG_BODY);
- HBufC* bodyText = S60QConversions::qStringToS60Desc(body);
+ HBufC* bodyText = XQConversions::qStringToS60Desc(body);
if (bodyText)
{
CleanupStack::PushL(bodyText);
--- a/messagingapp/msgutils/unidatautils/unidatamodelplugins/unismsdataplugin/tsrc/testunidatamodelsmsplugin/testunidatamodelsmsplugin.pro Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgutils/unidatautils/unidatamodelplugins/unismsdataplugin/tsrc/testunidatamodelsmsplugin/testunidatamodelsmsplugin.pro Thu Jul 22 16:32:06 2010 +0100
@@ -23,7 +23,6 @@
INCLUDEPATH += .
INCLUDEPATH += ../../../../../../inc
-INCLUDEPATH += ../../../../../msgutils/s60qconversions/inc
INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
DEFINES += BUILD_TEST_DLL
@@ -46,10 +45,19 @@
TARGET.EPOCHEAPSIZE = 0x1000 0x1F00000
TARGET.EPOCALLOWDLLDATA = 1
}
+
+defBlock = \
+ "$${LITERAL_HASH}if defined(EABI)" \
+ "DEFFILE ../eabi/test_unidatamodel_sms_plugin.def" \
+ "$${LITERAL_HASH}else" \
+ "DEFFILE ../bwins/test_unidatamodel_sms_plugin.def" \
+ "$${LITERAL_HASH}endif"
+
+MMP_RULES += defBlock
LIBS += -leuser \
-lconvergedmessageutils\
- -ls60qconversions \
+ -lxqutils \
-lmsgs \
-lsmcm \
-lgsmu \
--- a/messagingapp/msgutils/unidatautils/unidatamodelplugins/unismsdataplugin/unismsdataplugin.pro Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgutils/unidatautils/unidatamodelplugins/unismsdataplugin/unismsdataplugin.pro Thu Jul 22 16:32:06 2010 +0100
@@ -26,7 +26,6 @@
DEPENDPATH += . inc src
INCLUDEPATH += ./inc
-INCLUDEPATH += ../../../../msgutils/s60qconversions/inc
INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
INCLUDEPATH += ../../../../../inc
@@ -49,12 +48,12 @@
LIBS += -leuser \
-lconvergedmessageutils\
- -ls60qconversions \
-lmsgs \
-lSmcm \
-lgsmu \
-letext \
- -lQtCore
+ -lQtCore \
+ -lxqutils
# plugin stub deployment
plugin.sources = unismsdataplugin.dll
--- a/messagingapp/msgutils/unieditorutils/editorgenutils/editorgenutils.pro Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgutils/unieditorutils/editorgenutils/editorgenutils.pro Thu Jul 22 16:32:06 2010 +0100
@@ -21,7 +21,6 @@
INCLUDEPATH += .
INCLUDEPATH += ../../../../inc
-INCLUDEPATH += ../../s60qconversions/inc
INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
DEFINES += BUILD_MUIU_UITLS_DLL
@@ -50,11 +49,22 @@
SOURCES += src/MuiuOperationWait.cpp \
src/UniEditorGenUtils.cpp
+defBlock = \
+ "$${LITERAL_HASH}if defined(EABI)" \
+ "DEFFILE ../eabi/editorgenutils.def" \
+ "$${LITERAL_HASH}else" \
+ "DEFFILE ../bwins/editorgenutils.def" \
+ "$${LITERAL_HASH}endif"
+
+MMP_RULES += defBlock
+
LIBS += -leuser \
-lCentralRepository \
-lconvergedmessageutils \
-lsssettings \
- -ls60qconversions \
-lMsgMedia \
- -lapmime
+ -lapmime \
+ -lxqutils \
+ -lavkon \
+ -lefsrv
--- a/messagingapp/msgutils/unieditorutils/editorgenutils/src/UniEditorGenUtils.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgutils/unieditorutils/editorgenutils/src/UniEditorGenUtils.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -26,7 +26,7 @@
#include "MessagingVariant.hrh"
#include "MessagingInternalCRKeys.h" // Keys
#include "UniEditorGenUtils.h"
-#include "s60qconversions.h"
+#include <xqconversions.h>
// CONSTANTS
const TInt KMuiuCharQuote = '\"';
@@ -204,7 +204,7 @@
// ----------------------------------------------------
TInt UniEditorGenUtils::UTF8Size( QString aText )
{
- HBufC* text = S60QConversions::qStringToS60Desc(aText);
+ HBufC* text = XQConversions::qStringToS60Desc(aText);
TPtrC ptr = text->Des();
TInt count = 0;
@@ -301,7 +301,7 @@
QString& mimetype,
TMsgMediaType& mediaType)
{
- HBufC* filepath = S60QConversions::qStringToS60Desc(filePath);
+ HBufC* filepath = XQConversions::qStringToS60Desc(filePath);
int fileSize = 0;
CMsgMediaResolver* mediaResolver;
@@ -318,7 +318,7 @@
size = fileSize;
TDataType datatype;
mediaResolver->RecognizeL( file, datatype );
- mimetype = S60QConversions::s60Desc8ToQString(datatype.Des8());
+ mimetype = XQConversions::s60Desc8ToQString(datatype.Des8());
mediaType = mediaResolver->MediaType(datatype.Des8());
CleanupStack::PopAndDestroy(mediaResolver);
--- a/messagingapp/msgutils/unieditorutils/unieditorpluginloader/unieditorpluginloader.pro Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgutils/unieditorutils/unieditorpluginloader/unieditorpluginloader.pro Thu Jul 22 16:32:06 2010 +0100
@@ -50,3 +50,11 @@
SOURCES += src/unieditorpluginloader.cpp
+defBlock = \
+ "$${LITERAL_HASH}if defined(EABI)" \
+ "DEFFILE ../eabi/unieditorpluginloader.def" \
+ "$${LITERAL_HASH}else" \
+ "DEFFILE ../bwins/unieditorpluginloader.def" \
+ "$${LITERAL_HASH}endif"
+
+MMP_RULES += defBlock
--- a/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditormmsplugin/inc/unieditormmsplugin_p.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditormmsplugin/inc/unieditormmsplugin_p.h Thu Jul 22 16:32:06 2010 +0100
@@ -218,6 +218,9 @@
CMmsClientMtm* iMmsMtm;
CMmsHeaders* iMmsHeader;
+ // Flag for forwarded messages
+ TBool iMessageForwarded;
+
// owned
UniDataModelLoader* iDataModelPluginLoader;
//Not owned
--- a/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditormmsplugin/rom/unieditormmsplugin.iby Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditormmsplugin/rom/unieditormmsplugin.iby Thu Jul 22 16:32:06 2010 +0100
@@ -19,7 +19,6 @@
#define __UNI_EDITOR_MMS_PLUGIN_IBY__
-# this is the plugin stub for QT plugin
file=ABI_DIR\UREL\unieditormmsplugin.dll SHARED_LIB_DIR\unieditormmsplugin.dll
data=\epoc32\data\z\resource\qt\plugins\messaging\editorplugins\unieditormmsplugin.qtplugin \resource\qt\plugins\messaging\editorplugins\unieditormmsplugin.qtplugin
--- a/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditormmsplugin/src/unieditormmsplugin_p.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditormmsplugin/src/unieditormmsplugin_p.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -43,7 +43,7 @@
#include "UniSendingSettings.h"
#include "unidatamodelloader.h"
#include "unidatamodelplugininterface.h"
-#include "s60qconversions.h"
+#include <xqconversions.h>
#include "debugtraces.h"
#include "UniEditorGenUtils.h"
@@ -167,7 +167,7 @@
populateRecipientsL(aMessage);
//populate convergedmessage with the subject
- aMessage.setSubject(S60QConversions::s60DescToQString(
+ aMessage.setSubject(XQConversions::s60DescToQString(
MmsMtmL()->SubjectL()));
// Priority
@@ -204,12 +204,20 @@
ConvergedMessage &aMessage)
{
QDEBUG_WRITE("Enter convertFromForwardHandlerL");
-
- TMsvEntry entry =MmsMtmL()->Entry().Entry();
+ iMessageForwarded = EFalse;
+ TMsvEntry entry = MmsMtmL()->Entry().Entry();
//populate convergedmessage with the subject prepended with FW:
- QString subject = LOC_FWD + S60QConversions::s60DescToQString(
- MmsMtmL()->SubjectL());
+ QString subject =
+ XQConversions::s60DescToQString(MmsMtmL()->SubjectL());
+
+ if (!(entry.Forwarded() || subject.startsWith(LOC_FWD,
+ Qt::CaseInsensitive)))
+ {
+ subject.insert(0, LOC_FWD);
+ iMessageForwarded = ETrue;
+ }
+
aMessage.setSubject(subject);
// Priority
@@ -268,10 +276,14 @@
{
QString textContent;
QFile file(slideContentList.at(i)->path());
- file.open(QIODevice::ReadOnly);
- textContent = file.readAll();
- aMessage.setBodyText(textContent);
- file.close();
+ if (file.open(QIODevice::ReadOnly)) {
+ textContent = file.readAll();
+ aMessage.setBodyText(textContent);
+ file.close();
+ }
+ else {
+ return;
+ }
}
else
{
@@ -382,7 +394,13 @@
//There is no size check inside plugin as it assumes
//we get proper data from editor
- HBufC* sub = S60QConversions::qStringToS60Desc(aMessage->subject());
+ entry = MmsMtmL()->Entry().Entry();
+ if (iMessageForwarded)
+ {
+ entry.SetForwarded(ETrue);
+ iMessageForwarded = EFalse;
+ }
+ HBufC* sub = XQConversions::qStringToS60Desc(aMessage->subject());
if( sub )
{
CleanupStack::PushL(sub);
@@ -507,8 +525,8 @@
//Saving the changes
MmsMtmL()->SaveMessageL();
+
entry = MmsMtmL()->Entry().Entry();
-
TBuf<KMaxDetailsLength> detailsBuf;
MakeDetailsL( detailsBuf );
entry.iDetails.Set( detailsBuf );
@@ -708,7 +726,7 @@
continue;
}
// convert from QString to HBufC
- HBufC* addr = S60QConversions::qStringToS60Desc(array[i]->address());
+ HBufC* addr = XQConversions::qStringToS60Desc(array[i]->address());
CleanupStack::PushL(addr);
@@ -719,7 +737,7 @@
}
else
{
- HBufC* displayName = S60QConversions::qStringToS60Desc(array[i]->alias());
+ HBufC* displayName = XQConversions::qStringToS60Desc(array[i]->alias());
if(displayName)
{
CleanupStack::PushL(displayName);
@@ -757,10 +775,10 @@
for (TInt i = 0; i < count; ++i)
{
//Address
- QString address = S60QConversions::s60DescToQString(
+ QString address = XQConversions::s60DescToQString(
TMmsGenUtils::PureAddress(addresses[i]));
//Alias
- QString alias = S60QConversions::s60DescToQString(
+ QString alias = XQConversions::s60DescToQString(
TMmsGenUtils::Alias(addresses[i]));
//add recipient to convergedMessage
@@ -808,7 +826,7 @@
void CUniEditorMmsPluginPrivate::addObjectL(int aSlideNum, const QString& aFilePath)
{
- HBufC* filePath = S60QConversions::qStringToS60Desc(aFilePath);
+ HBufC* filePath = XQConversions::qStringToS60Desc(aFilePath);
if (filePath)
{
@@ -837,7 +855,7 @@
//
void CUniEditorMmsPluginPrivate::addAttachmentL(const QString& aFilePath)
{
- HBufC * filePath = S60QConversions::qStringToS60Desc(aFilePath);
+ HBufC * filePath = XQConversions::qStringToS60Desc(aFilePath);
if (filePath)
{
CleanupStack::PushL(filePath);
@@ -872,7 +890,7 @@
delete iEditor;
iEditor = NULL;
- HBufC* textContent = S60QConversions::qStringToS60Desc(aBodyText);
+ HBufC* textContent = XQConversions::qStringToS60Desc(aBodyText);
if (textContent)
{
CleanupStack::PushL(textContent);
--- a/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditormmsplugin/tsrc/bwins/test_mms_pluginu.def Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-EXPORTS
- qt_plugin_instance @ 1 NONAME
- qt_plugin_query_verification_data @ 2 NONAME
- ?createMMSMessageWithAttachmentAndSend@TestMmsPlugin@@AAEXH@Z @ 3 NONAME ; void TestMmsPlugin::createMMSMessageWithAttachmentAndSend(int)
- ?validateMsg@TestMmsPlugin@@AAEXABVConvergedMessage@@ABVQString@@@Z @ 4 NONAME ; void TestMmsPlugin::validateMsg(class ConvergedMessage const &, class QString const &)
- ?tr@TestMmsPlugin@@SA?AVQString@@PBD0@Z @ 5 NONAME ; class QString TestMmsPlugin::tr(char const *, char const *)
- ?getStaticMetaObject@TestMmsPlugin@@SAABUQMetaObject@@XZ @ 6 NONAME ; struct QMetaObject const & TestMmsPlugin::getStaticMetaObject(void)
- ?cleanupTestCase@TestMmsPlugin@@AAEXXZ @ 7 NONAME ; void TestMmsPlugin::cleanupTestCase(void)
- ?testReceived@TestMmsPlugin@@AAEXH@Z @ 8 NONAME ; void TestMmsPlugin::testReceived(int)
- ?qt_metacast@TestMmsPlugin@@UAEPAXPBD@Z @ 9 NONAME ; void * TestMmsPlugin::qt_metacast(char const *)
- ?qt_metacall@TestMmsPlugin@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 10 NONAME ; int TestMmsPlugin::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?trUtf8@TestMmsPlugin@@SA?AVQString@@PBD0H@Z @ 11 NONAME ; class QString TestMmsPlugin::trUtf8(char const *, char const *, int)
- ?staticMetaObject@TestMmsPlugin@@2UQMetaObject@@B @ 12 NONAME ; struct QMetaObject const TestMmsPlugin::staticMetaObject
- ?init@TestMmsPlugin@@AAEXXZ @ 13 NONAME ; void TestMmsPlugin::init(void)
- ?testSendMMS@TestMmsPlugin@@AAEXXZ @ 14 NONAME ; void TestMmsPlugin::testSendMMS(void)
- ?trUtf8@TestMmsPlugin@@SA?AVQString@@PBD0@Z @ 15 NONAME ; class QString TestMmsPlugin::trUtf8(char const *, char const *)
- ?tr@TestMmsPlugin@@SA?AVQString@@PBD0H@Z @ 16 NONAME ; class QString TestMmsPlugin::tr(char const *, char const *, int)
- ?createMMSMessageWithSmilTextAndImageAttachmentAndSend@TestMmsPlugin@@AAEXXZ @ 17 NONAME ; void TestMmsPlugin::createMMSMessageWithSmilTextAndImageAttachmentAndSend(void)
- ?cleanup@TestMmsPlugin@@AAEXXZ @ 18 NONAME ; void TestMmsPlugin::cleanup(void)
- ?initTestCase@TestMmsPlugin@@AAEXXZ @ 19 NONAME ; void TestMmsPlugin::initTestCase(void)
- ?testMmsReceived@TestMmsPlugin@@AAEXXZ @ 20 NONAME ; void TestMmsPlugin::testMmsReceived(void)
- ?metaObject@TestMmsPlugin@@UBEPBUQMetaObject@@XZ @ 21 NONAME ; struct QMetaObject const * TestMmsPlugin::metaObject(void) const
-
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditormmsplugin/tsrc/mmstestbed/inc/mmsreadfile.h Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,471 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ */
+
+#ifndef MMSREADFILE_H
+#define MMSREADFILE_H
+
+// INCLUDES
+#include <e32base.h>
+#include <badesca.h>
+#include <f32file.h>
+#include <msvstd.h>
+
+// forward references
+class CMmsAttaStructure;
+class CMmsHeaders;
+class CEikonEnv;
+class CMmsClientMtm;
+
+// Out-of-range value for any MMS header with assigned number
+// Used in coverage tests to get coverage for "default" branches
+// in "case" statements.
+const TInt KMmsTestIllegalValue = 255;
+
+//
+// TEST KEY WORDS
+// Extended to include all MMS headers to allow generation of arbitrary PDUs
+// Content type header cannot be separately defined,
+// it will always be "multipat/mixed" or "multipart/related"
+_LIT8( KTestEndOfFile, "EOF" );
+_LIT8( KTestNewMessage, "MESSAGE BEGIN" );
+//------------------------------------------------
+_LIT8( KTestMessageType, "MESSAGE-TYPE" ); //X-Mms-Message-Type
+_LIT8( KTestDate, "DATE" ); // Date
+_LIT8( KTestFrom, "FROM" ); // From
+_LIT8( KTestTo, "TO" ); // To
+_LIT8( KTestCc, "CC" ); // Cc
+_LIT8( KTestBcc, "BCC" ); // Bcc
+_LIT8( KTestSubject, "SUBJECT" ); // Subject
+_LIT8( KTestExpiryRel, "EXPIRY-REL" ); // X-Mms-Expiry, relative
+_LIT8( KTestExpiryAbs, "EXPIRY-ABS" ); // X-Mms-Expiry, absolute
+_LIT8( KTestDeliveryTimeRel, "DELIVERY-TIME-REL" ); // X-Mms-Delivery-Time, relative
+_LIT8( KTestDeliveryTimeAbs, "DELIVERY-TIME-ABS" ); // X-Mms-Delivery-Time, absolute
+_LIT8( KTestPriority, "PRIORITY" ); // X-Mms-Priority
+_LIT8( KTestSenderVisibility, "SENDER-VISIBILITY" ); // X-Mms-Sender-Visibility
+_LIT8( KTestDeliveryReport, "DELIVERY-REPORT" ); // X-Mms-Delivery-Report
+_LIT8( KTestReadReply, "READ-REPLY" ); // X-Mms-Read-Report
+// ---------------------------------------------------
+_LIT8( KTestNewAttachment, "ATTACHMENT" );
+_LIT8( KTestAttachmentType, "ATTACHMENTTYPE" );
+_LIT8( KTestAttachmentName, "ATTACHMENTNAME" );
+_LIT8( KTestAttachmentContLoc, "ATTACHMENTCONTLOC" );
+_LIT8( KTestAttachmentCharset, "ATTACHMENTCHARSET" );
+_LIT8( KTestAttachmentCid, "ATTACHMENTCID" );
+_LIT8( KTestAttachmentRoot, "ATTACHMENTROOT" );
+// content-type and x-type parameters for attachments
+// should appear in name-value pairs.
+// Test program is not responsible for verifying illegal scripts
+_LIT8( KTestAttContTypeParamName, "ContTypeParamName" );
+_LIT8( KTestAttContTypeParamValue, "ContTypeParamValue" );
+_LIT8( KTestAttXTypeParamName, "X-TypeParamName" );
+_LIT8( KTestAttXTypeParamValue, "X-TypeParamValue" );
+// -----------------------------------------------------
+_LIT8( KTestMessageClass, "MESSAGE-CLASS" ); // X-Mms-Message-Class
+_LIT8( KTestDelivRepSendAllow, "DELIV-REP-SEND-ALLOW" ); // X-Mms-Report-Allowed
+_LIT8( KTestAcceptAdvertis, "ACCEPT-ADVERTISEMENTS" );
+_LIT8( KTestRetryCount, "RETRY-COUNT" );
+_LIT8( KTestRetryInterval, "RETRY-INTERVAL" );
+// -------------------------------------------------
+_LIT8( KTestAlias, "ALIAS" );
+_LIT8( KTestFromAlias, "FROMALIAS" );
+_LIT8( KTestToAlias, "TOALIAS" );
+_LIT8( KTestCcAlias, "CCALIAS" );
+_LIT8( KTestBccAlias, "BCCALIAS" );
+// -------------------------------------------------
+// more Message headers to allow testing all possible PDUs and
+// MMS 1.1 headers
+_LIT8( KTestReplyCharging, "REPLY-CHARGING" ); // X-Mms-Reply-Charging
+_LIT8( KTestReplyChargAbs, "REPLY-CHARG-DEADLINE-ABS" ); // X-Mms-Reply-Charging, absolute
+_LIT8( KTestReplyChargRel, "REPLY-CHARG-DEADLINE-REL" ); // X-Mms-Reply-Charging, relative
+_LIT8( KTestReplyChargSize, "REPLY-CHARG-SIZE" ); // X-Mms-Reply-Charging-Size (octets)
+_LIT8( KTestReplyChargID, "REPLY-CHARGING-ID" ); // X-Mms-Reply-Charging-ID
+_LIT8( KTestTID, "TID" );
+_LIT8( KTestContentLocation, "CONTLOC" ); // X-Mms-Content-Location
+// The following three must appear as triplets.
+// index must be first, address and date may appear in any order
+_LIT8( KTestPreviouslySentIndex, "PREVIOUSINDEX" ); // forwarded count for X-Mms-PreviouslySent headers
+_LIT8( KTestPreviouslySentBy, "PREV-SENT-BY" ); // X-Mms-Previously-Sent-By
+_LIT8( KTestPreviouslySentDate, "PREV-SENT-DATE" ); // X-Mms-Previously-Sent-Date
+//---
+_LIT8( KTestMessageId, "MESSAGE-ID" ); // Message-ID
+_LIT8( KTestMessageSize, "MESSAGE-SIZE" ); // X-Mms-Message-Size (octets)
+_LIT8( KTestVersion, "MMS-VERSION" ); // X-MMS-Version (hex:, 10 = 1.0, 11 = 1.1 etc. )
+_LIT8( KTestReadStatus, "READ-STATUS" ); // X-Mms-Read-Status
+_LIT8( KTestResponseStatus, "RESPONSE-STATUS" ); // X-Mms-Response-Status
+_LIT8( KTestResponseText, "RESPONSE-TEXT" ); // X-Mms-Response-Text
+_LIT8( KTestRetrieveStatus, "RETRIEVE-STATUS" ); // X-Mms-Retrieve-Status
+_LIT8( KTestRetrieveText, "RETRIEVE-TEXT" ); // X-Mms-Retrieve-Text
+_LIT8( KTestStatus, "STATUS" ); // X-Mms-Status
+// -------------------------------------------------
+// MMS 1.2 headers
+_LIT8( KTestAttribute, "ATTRIBUTE" ); // X-Mms-Attribute
+// The value should be one of the following:
+// BCC, CC, CONTENT, CONTENT-TYPE, DATE, DELIVERY-REPORT, DELIVERY-TIME-ABS,
+// EXPIRY-ABS, FROM, MESSAGE-CLASS, MESSAGE-ID, MESSAGE-SIZE, PRIORITY,
+// READ-REPLY, SUBJECT, TO, REPLY-CHARGING, REPLY-CHARGING-ID,
+// REPLY-CHARG-DEADLINE-ABS, REPLY-CHARG-SIZE, PREV-SENT-BY,
+// PREV-SENT-DATE, ADDITIONAL-HEADERS
+_LIT8( KTestDistributionIndicator, "DISTRIBUTION-INDICATOR" ); // X-Mms-Distribution-Indicator
+_LIT8( KTestLimit, "LIMIT" ); // X-Mms-Limit
+_LIT8( KTestMessageQuota, "MESSAGE-QUOTA" ); // X-Mms-Mbox-Quota, message number
+_LIT8( KTestSizeQuota, "SIZE-QUOTA" ); // X-Mms-Mbox-Quota, size quota
+_LIT8( KTestMessageTotal, "MESSAGE-TOTAL" ); // X-Mms-Mbox-Totals, message number
+_LIT8( KTestSizeTotal, "SIZE-TOTAL" ); // X-Mms-Mbox-Totals, total size
+_LIT8( KTestMessageCount, "MESSAGE-COUNT" ); // X-Mms-Message-Count
+_LIT8( KTestAddKeyword, "ADD-KEYWORD" ); // X-Mms-MM-Flags
+_LIT8( KTestRemoveKeyword, "REMOVE-KEYWORD" ); // X-Mms-MM-Flags
+_LIT8( KTestFilterKeyword, "FILTER-KEYWORD" ); // X-Mms-MM-FLags
+_LIT8( KTestMMState, "MESSAGE-STATE" ); // X-Mms-MM-State
+_LIT8( KTestQuota, "QUOTA" ); // X-Mms-Quotas
+_LIT8( KTestStart, "START" ); // X-Mms-Start
+_LIT8( KTestStore, "STORE" ); // X-Mms-Store
+_LIT8( KTestStored, "STORED" ); // X-Mms-Stored
+_LIT8( KTestStoreStatus, "STORE-STATUS" ); // X-Mms-Store-Status
+_LIT8( KTestStoreStatusText, "STORE-STATUS-TEXT" ); // X-Mms-Store-Status-Text
+_LIT8( KTestTotals, "TOTALS" ); // X-Mms-Totals
+// Delete confirmation header structure
+// This consists of index, content location, response status and response status text.
+// All three values are not always necessary for each index, but at least content-location
+// and response status should be present.
+// The index retains its value until a new index is encountered.
+_LIT8( KTestDeleteInfoIndex, "DELETESTATUSINDEX" ); // index for next delete info fields
+// This header must precede content-location, response-status and response-text fields
+// in a delete confirmation. Index retains its value until a new index is encountered.
+
+// Element descriptor header not implemented
+
+// Application id headers
+// These will officially be supported in MMS encapsulation version 1.3
+// Java has non-standard support even earlier
+
+_LIT8( KTestApplicId, "APPLIC-ID" ); // X-Mms-Applic-ID
+_LIT8( KTestReplyApplicId, "REPLY-APPLIC-ID" ); // X-Mms-Reply-Applic-ID
+_LIT8( KTestApplicInfo, "AUX-APPLIC-INFO" ); // X-Mms-Aux-Applic-Info
+
+// Since Encapsulation 1.3
+_LIT8( KTestContentClass, "CONTENT-CLASS" ); // X-Mms-Content-Class
+_LIT8( KTestDrmContent, "DRM-CONTENT" ); // X-Mms-DRM-Content
+_LIT8( KTestAdaptationAllowed, "ADAPTATION-ALLOWED" ); // X-Mms-Adaptation-Allowed
+_LIT8( KTestRecommendedRetrievalMode, "REC-RETRIEVAL-MODE" ); // X-Mms-Recommended-Retrieval-Mode
+_LIT8( KTestRecRetrievalModeText, "REC-RETR-MODE-TEXT" ); // X-Mms-Recommended-Retrieval-Mode-Text
+_LIT8( KTestReplaceId, "REPLACE-ID" ); // X-Mms-Replace-ID
+_LIT8( KTestStatusText, "STATUS-TEXT" ); // X-Mms-Status-Text
+_LIT8( KTestCancelId, "CANCEL-ID" ); // X-Mms-Cancel-ID
+_LIT8( KTestCancelStatus, "CANCEL-STATUS" ); // X-Mms-Cancel-Status
+
+// DATA TYPES
+#define aSet 1
+#define aReset 0
+#define PartCount 100
+#define MaxAttaCount 10
+#define DefaultBufLen 256
+#define MaxRecipients 5
+
+// status returned by ReadRow
+enum TTestReadStatus
+ {
+ ETestUnknown,
+ ETestNewMessage,
+ ETestNewAttachment,
+ ETestEof, // End of file
+ ETestMessageType,
+ ETestDate,
+ ETestFrom,
+ ETestTo,
+ ETestCc,
+ ETestBcc,
+ ETestAlias,
+ ETestFromAlias,
+ ETestToAlias,
+ ETestCcAlias,
+ ETestBccAlias,
+ ETestSubject,
+ ETestExpiryRel,
+ ETestExpiryAbs,
+ ETestDeliveryTimeRel,
+ ETestDeliveryTimeAbs,
+ ETestPriority,
+ ETestSenderVisibility,
+ ETestDeliveryReport,
+ ETestReadReply,
+ ETestAttachmentType,
+// ETestAttachmentName,
+ ETestAttachmentCharset,
+ ETestAttachmentCid,
+ ETestAttachmentRoot,
+ ETestSettings,
+ ETestMessageClass,
+ ETestDelivReportSendAllow,
+ ETestSingleMessageClass,
+ ETestReplyCharging,
+ ETestReplyChargAbs,
+ ETestReplyChargRel,
+ ETestReplyChargSize,
+ ETestReplyChargID,
+ ETestTID,
+ ETestContentLocation,
+ ETestPreviouslySentIndex,
+ ETestPreviouslySentBy,
+ ETestPreviouslySentDate,
+ ETestMessageId,
+ ETestMessageSize,
+ ETestVersion,
+ ETestReadStatus,
+ ETestResponseStatus,
+ ETestResponseText,
+ ETestRetrieveStatus,
+ ETestRetrieveText,
+ ETestStatus,
+ ETestAttribute,
+ ETestDistributionIndicator,
+ ETestLimit,
+ ETestMessageQuota,
+ ETestSizeQuota,
+ ETestMessageTotal,
+ ETestSizeTotal,
+ ETestMessageCount,
+ ETestAddKeyword,
+ ETestRemoveKeyword,
+ ETestFilterKeyword,
+ ETestMMState,
+ ETestQuota,
+ ETestStart,
+ ETestStore,
+ ETestStored,
+ ETestStoreStatus,
+ ETestStoreStatusText,
+ ETestTotals,
+ ETestDeleteInfoIndex,
+ ETestApplicId,
+ ETestReplyApplicId,
+ ETestApplicInfo,
+ ETestContentClass,
+ ETestDrmContent,
+ ETestAdaptationAllowed,
+ ETestRecommendedRetrievalMode,
+ ETestRecRetrievalModeText,
+ ETestReplaceId,
+ ETestStatusText,
+ ETestCancelId,
+ ETestCancelStatus,
+ ETestAttaRecommendedName,
+ ETestAttachmentContLoc,
+ ETestAttContTypeParamName,
+ ETestAttContTypeParamValue,
+ ETestAttXTypeParamName,
+ ETestAttXTypeParamValue
+
+ };
+
+// VALUE KEYWORDS
+_LIT( KPersonal, "Personal" );
+_LIT( KAdvertisement, "Advertisement" );
+_LIT( KInformational, "Informational" );
+_LIT( KAuto, "Auto" );
+_LIT( KLow, "Low" );
+_LIT( KNormal, "Normal" );
+_LIT( KHigh, "High" );
+_LIT( KHide, "Hide" );
+_LIT( KShow, "Show" );
+_LIT( KYes, "Yes" );
+_LIT( KNo, "No" );
+_LIT( KOn, "On" );
+_LIT( KOff, "Off" );
+_LIT( KDeferred, "Deferred" );
+_LIT( KExpired, "Expired" );
+_LIT( KRetrieved, "Retrieved" );
+_LIT( KRejected, "Rejected" );
+_LIT( KUnrecognized, "Unrecognized" );
+_LIT( KIndeterminate, "Indeterminate" );
+_LIT( KForwarded, "Forwarded" );
+_LIT( KUnreachable, "Unreachable" );
+_LIT( KDraft, "Draft");
+_LIT( KSent, "Sent" );
+_LIT( KNew, "New" );
+// X-Mms-Message-Type
+_LIT( KSendReq, "SendReq" );
+_LIT( KSendConf, "SendConf" );
+_LIT( KNotifInd, "NotifInd" );
+_LIT( KNotifResp, "NotifResp" );
+_LIT( KRetrConf, "RetrConf" );
+_LIT( KAckInd, "AckInd" );
+_LIT( KDelInd, "DelInd" );
+_LIT( KReadReqInd, "ReadReqInd" );
+_LIT( KReadOrigInd, "ReadOrigInd" );
+_LIT( KForwardRec, "ForwardReq" );
+_LIT( KForwardConf, "ForwardConf" );
+_LIT( KMBoxStoreReq, "MBoxStoreReq" );
+_LIT( KMBoxStoreConf, "MBoxStoreConf" );
+_LIT( KMBoxViewReq, "MBoxViewReq" );
+_LIT( KMBoxViewConf, "MBoxViewConf" );
+_LIT( KMBoxUploadReq, "MBoxUploadReq" );
+_LIT( KMBoxUploadConf, "MBoxUploadConf" );
+_LIT( KMBoxDeleteReq, "MBoxDeleteReq" );
+_LIT( KMBoxDeleteConf, "MBoxDeleteConf" );
+_LIT( KMBoxDescr, "MBoxDescr" );
+_LIT( KDeleteReq, "DeleteReq" );
+_LIT( KDeleteConf, "DeleteConf" );
+_LIT( KCancelReq, "CancelReq" );
+_LIT( KCancelResp, "CancelConf" );
+// X-Mms-Read-Status
+_LIT( KRead, "Read" );
+_LIT( KDelNotRead, "DeletedNotRead" );
+// X-Mms-Reply-Charging
+_LIT( KRequested, "Requested" );
+_LIT( KReqTextOnly, "ReqTextOnly" );
+_LIT( KAccepted, "Accepted" );
+_LIT( KAccTextOnly, "AccTextOnly" );
+// X-Mms-Cancel-Status (only receival of request, not actual cancellation)
+_LIT( KCancelSuccessful, "CancelSuccess" );
+_LIT( KCancelCorrupted, "CancelCorrupted" );
+// X-Mms-Content-Class
+_LIT( KText, "Text" );
+_LIT( KImageBasic, "ImageBasic" );
+_LIT( KImageRich, "ImageRich" );
+_LIT( KVideoBasic, "VideoBasic" );
+_LIT( KVideoRich, "VideoRich" );
+_LIT( KMegaPixel, "MegaPixel" );
+_LIT( KContentBasic, "ContentBasic" );
+_LIT( KContentRich, "ContentRich" );
+// X-Mms-Recommended-Retrieval-Mode
+_LIT( KManual, "Manual" );
+
+//X-Mms-ResponseStatus
+// legacy values
+_LIT( KOk, "OK" );
+_LIT( KErrUnspecified, "Unspecified" );
+_LIT( KErrServiceDenied, "ServiceDenied" );
+_LIT( KErrMessageFormatCorrupt, "FormatCorrupt" );
+_LIT( KErrAddressUnresolved, "AddressUnresolved" );
+_LIT( KErrMessageNotFound, "MessageNotFound" );
+_LIT( KErrNetworkProblem, "NetworkProblem" );
+_LIT( KErrContentNotAccepted, "ContentNotAccepted" );
+_LIT( KErrUnsupportedMessage, "UnsupportedMessage" );
+// values since 1.1 (and 1.2)
+_LIT( KErrTransient, "TransientFailure" );
+_LIT( KErrTransientAddressUnresolved, "TransientAddressUnresolved" );
+_LIT( KErrTransientNotFound, "TransientMessageNotFound" );
+_LIT( KErrTransientNetworkproblem, "TransientNetworkProblem" );
+_LIT( KErrTransientPartialSuccess, "PartialSuccess" );
+_LIT( KErrPermanent, "PermanentFailure" );
+_LIT( KErrPermanentServiceDenied, "PermanentServiceDenied" );
+_LIT( KErrPermanentMessageFormatCorrupt, "PermanentFormatCorrupt" );
+_LIT( KErrPermanentAddressUnresolved, "PermanentAddressUnresolved" );
+_LIT( KErrPermanentNotFound, "PermanentMessageNotFound" );
+_LIT( KErrPermanentContentNotAccepted, "PermanentContentNotAccepted" );
+_LIT( KErrReplyChargingLimitNotMet, "ReplyChargingLimitNotMet" );
+_LIT( KErrReplyChargingRequestNotAccepted, "ReplyChargingRequestNotAccepted" );
+_LIT( KErrReplyChargingForwardingDenied, "ReplyChargingForwardingDenied" );
+_LIT( KErrReplyChargingNotSupported, "ReplyChargingNotSupported" );
+_LIT( KErrAddressHidingNotSupported, "AddressHidingNotSupported" );
+_LIT( KErrPermanentLackOfPrepaid, "PermanentLackOfPrepaid" );
+//X-Mms-RetrieveStatus (one extra value)
+_LIT( KErrRetrieveContentUnsupported, "PermanentContentUnsupported" );
+//X-Mms-Store-Status (one extra value)
+_LIT( KErrMMBoxFull, "MMBoxFull" );
+
+_LIT8( KTestContent, "Content" ); // For attribute list only
+_LIT8( KTestAdditionalHeaders, "ADDITIONAL-HEADERS" ); // For attribute list only
+_LIT8( KTestDeliveryTime, "DELIVERY-TIME"); // for attribute list only
+_LIT8( KTestExpiry, "EXPIRY"); // for attribute list only
+_LIT8( KTestReplyCharg, "REPLY-CHARG-DEADLINE" ); // for attribute list only
+_LIT8( KTestContentType, "CONTENT-TYPE" ); // for attribute list only
+
+/**
+* CMmsReadFile
+*/
+NONSHARABLE_CLASS( CMmsReadFile ):public CBase
+ {
+ public: // Constructors and destructor
+
+ static CMmsReadFile* NewL(RFs& aFs, RFileReadStream& aReadStream ); // Two-phased constructor.
+ virtual ~CMmsReadFile(); // Destructor
+
+ public: // New functions
+
+ TInt CompleteTestL(TInt aMessageCounter, CMmsHeaders& aMmsHeaders);
+ TTestReadStatus ReadRowL();
+ void CreateMessageL( CMmsClientMtm* aMmsClient, CMmsHeaders* aMmsHeaders );
+ TInt FindAlias(TPtrC alias);
+ void SetAttaStructure( TBool aOldAttaStructure = EFalse );
+
+ protected: // Functions from base classes
+
+ private:
+
+ CMmsReadFile(); // C++ default constructor.
+ // By default constructor is private.
+ void ConstructL( RFs& aFs, RFileReadStream& aReadStream );
+ void Reset();
+
+ public: // data
+ TInt iMessageType;
+
+
+ private: // Data
+
+ RFs iFs;
+ RFileReadStream* iReader;
+ TBuf<DefaultBufLen> iValueBuffer;
+ CDesCArray* iAliasArray; // aliases
+ HBufC8* iByteBuffer;
+ TTime iDate;
+ CArrayPtrFlat<CMmsAttaStructure>* iAttaStructures;
+ TInt iAttaCount;
+ TInt iAttaRoot;
+ TInt iAliasCount;
+ TInt iNextMessageType;
+ TParse iParse;
+ TFileName iFilename;
+
+ protected: // Data
+ private: // Data
+
+ // CArrayFixFlat <TestMessage>* iMessages;
+
+ public: // Friend classes
+ protected: // Friend classes
+ private: // Friend classes
+
+ };
+
+
+NONSHARABLE_CLASS( CMmsAttaStructure ):public CBase
+ {
+ public: // Constructors and destructor
+ static CMmsAttaStructure* NewL(); // Two-phased constructor.
+ virtual ~CMmsAttaStructure(); // Destructor
+ private:
+ CMmsAttaStructure(); // C++ default constructor.
+ // By default constructor is private.
+ void ConstructL();
+
+ public: // Data
+ HBufC8* iAtta;
+ HBufC8* iAttaName; // content location
+ HBufC8* iAttaType;
+ HBufC8* iAttaCid;
+ TInt iAttaCharset;
+ HBufC* iAttaRecommendedName; // recommended filename
+ CDesC8ArrayFlat* iContentTypeParams; // zero or more "parameter"
+ CDesC8ArrayFlat* iXTypeParams; // zero or more X-Type "parameters"
+
+ };
+
+
+#endif // MMSREADFILE_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditormmsplugin/tsrc/mmstestbed/inc/mmstestbed.h Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,151 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ */
+
+#ifndef MMSTESTBED_H
+#define MMSTESTBED_H
+
+#ifdef BUILD_MMSTESTBED_DLL
+#define MMSTESTBED_EXPORT Q_DECL_EXPORT
+#else
+#define MMSTESTBED_EXPORT Q_DECL_IMPORT
+#endif
+
+#include <QObject>
+#include <QString>
+
+#include <msvids.h> //for consts like KMsvNullIndexEntryIdValue
+#include <MSVAPI.H>
+#include <MTCLREG.H>
+#include <mmsclient.h>
+//#include <mmsservercommon.h>
+
+class CTestUiTimer;
+class CMsvSession;
+class CMmsClientMtm;
+class CMmsSettings;
+class CMmsHeaders;
+class CLogEvent;
+class CLogViewEvent;
+class CLogFilter;
+class CLogClient;
+
+class MMSTESTBED_EXPORT MmsTestBed : public QObject, public MMsvSessionObserver
+ {
+ Q_OBJECT
+
+public:
+ /**
+ *
+ */
+ MmsTestBed();
+ ~MmsTestBed();
+ void setConnectionLocal(bool value);
+ void fromOutboxToMmsc();
+ void fromMmscToInbox();
+ /**
+ * cleanup MMS service
+ */
+ void cleanupAndCreateNewService();
+ void deleteNotifications();
+ void restoreFactorySettings();
+ void setFetchingState( TMmsReceivingMode aState );
+ void sendFromFile();
+ void sendOneByOne();
+ void sendNotifications();
+ void copyDrafts();
+ void garbageCollection(TUint32 aReason = 0x00000001); //0x00000001 == KMmsReasonBoot
+ void messageVariation();
+ void cancelSendScheduling();
+ void scheduledSend(TMsvId aBoxId, TInt aDelay = 5);
+ void deleteSendSchedule();
+ void cancelFetchScheduling();
+ void fetchForced(TInt aDelay = 5);
+ void deleteFetchSchedule();
+ void doAFetchCycle();
+ void createEntry(TMsvEntry& aNewEntry, CMsvEntry& aClientEntry);
+ void cleanOutbox();
+ void cleanInbox();
+ void cleanSent();
+ void cleanDrafts();
+ void cleanAll();
+ void reply();
+ void replyToAll();
+ void forward();
+ void sendReadReport(); // send a read report
+ int fromOutboxToMmscWithMemoryFailure(); // returns memory failure count
+ int fromMmscToInboxWithMemoryFailure(); // returns memory failure count
+ void sendViaClient();
+ void scheduledFetch(TInt aDelay = 5);
+ void fetchForcedImmediate();
+ void getEventType();
+ void addEventType();
+ void deleteEventType();
+ void cleanLog();
+ void setOnline(bool value);
+ void generateDeliveryReport( CMmsHeaders* aMmsHeaders );
+ void sendDeliveryReport();
+
+signals:
+ void entryCreatedInDraft(long int id);
+ void entryMovedToOutbox(long int id);
+ void entryMovedToSent(long int id);
+ void entryCreatedInInbox(long int id);
+
+protected:
+ /**
+ * From MMsvSessionObserver
+ */
+ void HandleSessionEventL(TMsvSessionEvent aEvent, TAny* aArg1,
+ TAny* aArg2, TAny* aArg3);
+
+private:
+ void findDefaultL();
+ void createMmsService();
+ void cleanup();
+ void deleteEntry(TMsvId aEntryId, CMsvEntry& aClientEntry);
+ void testFile(TFileName& aFilePath, TInt aCommand = 0, TMsvId aBox = KMsvGlobalOutBoxIndexEntryId);
+ void addMMBoxDescriptions();
+ void encodeMessageFromDrafts();
+ TMsvId findMMSFolder();
+ bool checkLogClient();
+ int getLogEntries();
+
+private:
+ //data
+ CTestUiTimer* iTimer;
+ CMsvOperationActiveSchedulerWait* iWait;
+ CMsvSession* iSession;
+ CClientMtmRegistry* iClientMtmRegistry;
+ CMmsClientMtm* iMmsClient;
+ CMmsSettings* iSettings;
+ CMmsHeaders* iMmsHeaders;
+ TMsvId iServiceId;
+ TMsvId iDefaultServiceId;
+ TMsvSessionEvent iEvent;
+ RFs iFs;
+ TFileName iFilename;
+ TFileName iCurrentFile;
+ TFileName iCurrentPath;
+ TParse iParse; // parse buffer as member to save stack space
+ CBufFlat* iEncodeBuffer;
+ CMsvEntrySelection* iMsvEntrySelection;
+ CLogEvent* iLogEvent;
+ CLogClient* iLogClient;
+ CLogViewEvent* iLogView;
+ CLogFilter* iLogFilter;
+ };
+
+#endif // MMSTESTBED_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditormmsplugin/tsrc/mmstestbed/inc/mmstestbed.hrh Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,131 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ */
+
+#include <bldvariant.hrh>
+
+
+#ifndef MMSTESTBED_HRH
+#define MMSTESTBED_HRH
+
+enum
+{
+ EAppMainOk = 1,
+ EAppMainCancel,
+ //
+ EMenufrmCmdCascadeTest,
+ ECleanup,
+ ECleanOutbox,
+ ESaveSettings,
+ ELoadSettings,
+ ECleanInbox,
+ EShowIn,
+ EShowOut,
+ EOutToMMSC,
+ EMMSCToIn,
+ ESendScheduled,
+ EReceiveScheduled,
+ EShowSent,
+ ECleanSent,
+ EStartMyNotifier,
+ EGetEventType,
+ EAddEventType,
+ EDeleteEventType,
+ EViewLog,
+ ECleanLog,
+ EShowWapAccessPoints,
+ ESelectWapAccessPoint,
+ EShowConnectionMode,
+ EShowIAP,
+ EConnectToIAP,
+ EDeleteSendSchedule,
+ EDeleteReceiveSchedule,
+ EDeleteNotifications,
+ ERestoreFactorySettings,
+ ECreateFromFile,
+ EShowNotifications,
+ ESendDeliveryReport,
+ EShowDrafts,
+ ECleanDrafts,
+ ECleanAll,
+ EFetchingDeferred,
+ EFetchingOn,
+ ESendFromFile,
+ ESwitchToLocal,
+ ESwitchToGlobal,
+ EDecodeLoggingOn,
+ EDecodeLoggingOff,
+ EBinaryDumpOn,
+ EBinaryDumpOff,
+ ESendNotification,
+ ECreateToInbox,
+ ECreateToSentItems,
+ ESendFromDrafts,
+ EFindMMSFolder,
+ ESendOneByOne,
+ ECreateToDrafts,
+ ESendViaClient,
+ ESendMemFail,
+ EFetchMemFail,
+ EReceiveForced,
+ ECreateHeadersFromFile,
+ ESwitchToOffline,
+ ESwitchToOnline,
+ ECopyDrafts,
+ ECreateNotification,
+ EReply,
+ EReplyToAll,
+ EForward,
+ EFetchingManual,
+ EFirstBoot,
+ ENoFirstBoot,
+ EFindNetworkStatus,
+ ESendReadReport,
+ ECreateMMBoxViewConf,
+ EGetMMBoxView,
+ ECleanMMBox,
+ EShowMMBox
+};
+
+#define ETestLabel1 1
+#define ETestLabel2 2
+#define ETestLabel3 3
+#define ETestLabel4 4
+
+#define EServiceList 2
+
+
+enum TTestBedDlgCtrlIds
+ {
+ ETestEditField = 1
+ };
+
+enum TEditServiceControls
+ {
+ EFolderLabel = 1,
+ EEditUri
+// EEditServiceFolder,
+// ENameLabel,
+// EEditServiceName,
+// ENumberLabel,
+// EEditServiceNumber
+ };
+
+enum
+ {
+ EFsViewDialogId = 1
+ };
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditormmsplugin/tsrc/mmstestbed/inc/mmsteststaticutils.h Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,203 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ */
+
+#ifndef MMSTESTSTATICUTILS_H
+#define MMSTESTSTATICUTILS_H
+
+#include <e32std.h>
+#include <msvstd.h>
+#include <badesca.h>
+
+#include "mmsconst.h"
+
+class RFs;
+class CMsvSession;
+class CMmsEncode;
+class CMmsHeaders;
+
+#ifdef __WINS__
+_LIT( KRootPath, "c:\\" );
+#else
+// This is removable disk.
+// drive letter should not be hard coded, must be investigated further
+// We use c: for a while for the tests (to be cahnged later)
+_LIT( KRootPath, "c:\\" );
+//_LIT( KRootPath, "e:\\" );
+#endif
+
+// directory where mmbox descriptions are created
+_LIT( KMmsMMBoxDescriptionDirectory, "C:\\mmsmmboxdescriptions\\");
+// directory where created headers are dumped
+_LIT( KMmsDumpDirectory, "C:\\mmsdump\\");
+// content type of MMS PDUs
+_LIT8( KMmsMimeType, "application/vnd.wap.mms-message" );
+
+_LIT( KWild, "*" );
+
+
+/**
+ * joined array structure
+ *
+ */
+NONSHARABLE_CLASS( TMmsJoinedArrays ): public MDesCArray
+ {
+public:
+ TMmsJoinedArrays(CDesCArray* const & aArray1, CDesCArray* const & aArray2);
+ TInt MdcaCount() const;
+ TPtrC16 MdcaPoint(TInt aIndex) const;
+private:
+ CDesCArray* const & iArray1;
+ CDesCArray* const & iArray2;
+ };
+
+/**
+ * static utility functions
+ *
+ */
+class TMmsTestUtils
+ {
+
+public:
+
+ /**
+ *
+ */
+ TMmsTestUtils();
+
+ /**
+ * read phone number for sending messages
+ *
+ * @param aFileName full path for filename
+ * @param aFs file system handle
+ * @return allocated pointer containing the name
+ * The caller must delete the pointer when no longer needed
+ */
+ static HBufC* ReadContactFromFileL( TDesC& aFileName, RFs& aFs );
+
+ static void DecodeLoggingOnL();
+ static void DecodeLoggingOffL();
+ static void BinaryDumpOnL();
+ static void BinaryDumpOffL();
+
+ /**
+ * Clean all temporary directories used in local mode.
+ * Does not delete the directories, only the contents
+ *
+ * @param aFs file system handle
+ */
+ static void CleanDirectoryL( RFs& aFs );
+
+ /**
+ * Dump a binary message
+ *
+ * @param aBuffer buffer containing the binary message
+ * @param aFilename full path of the directory whenre the dump goes
+ * @param aParse reference to parser (to save stack space)
+ * @param aFs file system handle
+ */
+ static void Dump(
+ CBufFlat& aBuffer, TFileName& aFilename, TParse& aParse, RFs& aFs );
+
+ /**
+ * Delete all MMS messages and notifications from a given folder
+ *
+ * @param aBoxId folder id
+ * @param aSession Messaging server session
+ */
+ static void CleanBoxL(TMsvId aBoxId, CMsvSession& aSession);
+
+ /**
+ * turn on logging messages sent to email addresses
+ */
+ static void EmailLoggingOnL();
+
+ /**
+ * turn off logging messages sent to email addresses
+ */
+ static void EmailLoggingOffL();
+
+ /**
+ * load list of children into selection and return count
+ *
+ * @param aBoxId folder id
+ * @param aMsvEntrySelection reference to a pointer that will contain the list of child ids
+ * caller is responsible of deleting the pointer afterwards.
+ * Pointer may be NULL at entry, and a new pointer will be allocated
+ * @param aSession messge server session
+ * @param aMessageType child MTM type, default is multimedia message
+ * @return number of entries in selection
+ */
+ static TInt CountChildrenL(
+ TMsvId aBoxId,
+ CMsvEntrySelection*& aMsvEntrySelection,
+ CMsvSession& aSession,
+ TUid aMessageType = KUidMsgTypeMultimedia);
+
+ /**
+ * Create a folder entry
+ *
+ * @param aSession messge server session
+ * @param aParentFolder the parent folder
+ * @param aFolderName name of the folder
+ * @param aFolderId will contain the if of the new folder if creation was successful
+ */
+ static void CreateFolderEntryL(
+ CMsvSession& aSession,
+ TMsvId aParentFolder,
+ const TDesC& aFolderName,
+ TMsvId& aFolderId );
+
+ /**
+ * Create an MMS notification from data in buffer
+ * @param aNotificationFolder mms notification folder (target folder)
+ * @param aServiceId id of MMS service
+ * @param aEncodeBuffer buffer that contains the data
+ * @param aSession message server session
+ * @return id of the created notification
+ */
+ static TMsvId CreateNotificationEntryL(
+ TMsvId aNotificationFolder,
+ TMsvId aServiceId,
+ CBufFlat* aEncodeBuffer,
+ CMsvSession& aSession );
+
+ /**
+ * Encode an MMS notification into buffer
+ * @param aUrl url of the notification for local messages a filepath
+ * @param aSize size of the message
+ * @param aMmsHeaders MMS headers structure for creating the notification
+ * @param aMmsEncoder reference to CMmsEncode class
+ * @param aEncodeBuffer flat buffer that will contain the encoded notification
+ */
+ static void FormNotification(
+ TDesC8& aUrl,
+ TInt aSize,
+ CMmsHeaders& aMmsHeaders,
+ CMmsEncode& aMmsEncoder,
+ CBufFlat* aEncodeBuffer );
+
+
+ static TBool IsDrive(const TDesC& aFileName);
+ static TBool IsDir(const TDesC& aFileName, RFs& aFs);
+ static TBool IsFile(const TDesC& aFileName, RFs& aFs);
+
+
+private:
+
+ };
+
+
+#endif // MMSTESTSTATICUTILS_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditormmsplugin/tsrc/mmstestbed/inc/mmstestuitimer.h Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ */
+
+#ifndef C_TESTUITIMER_H
+#define C_TESTUITIMER_H
+
+
+#include <e32base.h>
+
+#define KPeriod 10000 // period of timer
+
+/**
+ * timer for test programs
+ */
+NONSHARABLE_CLASS( CTestUiTimer ): public CTimer
+ {
+public:
+
+ static CTestUiTimer* NewL();
+ virtual ~CTestUiTimer();
+
+ void RunL();
+ void DoCancel();
+ void ConstructL();
+ void IssueRequest();
+ void TimeoutOperation(CActive* aObject, TTimeIntervalSeconds aTimeoutInSeconds);
+
+private:
+ CTestUiTimer();
+
+public:
+ TTimeIntervalMicroSeconds32 period;
+
+private: // data
+ CActive* iObject;
+ };
+
+#endif // C_TESTUITIMER_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditormmsplugin/tsrc/mmstestbed/mmstestbed.pro Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,77 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+QT += testlib
+QT -= gui
+
+TEMPLATE = lib
+
+TARGET = mmstestbed
+
+INCLUDEPATH += .
+INCLUDEPATH += inc
+INCLUDEPATH += ../../inc
+INCLUDEPATH += ../../../../../../../mmsengine/inc
+INCLUDEPATH += ../../../../../../../mmsengine/mmscodec/inc
+INCLUDEPATH += ../../../../../../../mmsengine/mmshttptransport/inc
+INCLUDEPATH += ../../../../../../../mmsengine/mmsmessage/inc
+INCLUDEPATH += ../../../../../../../mmsengine/mmsconninit/inc
+#INCLUDEPATH += ../../../mmsengine/mmscodec/inc
+INCLUDEPATH += ../../../../../../../mmsengine/mmsserver/inc
+INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+
+DEFINES += BUILD_MMSTESTBED_DLL
+
+SOURCES += src/mmstestbed.cpp \
+ src/mmsteststaticutils.cpp \
+ src/mmsreadfile.cpp \
+ src/mmstestuitimer.cpp
+
+HEADERS += inc/mmstestbed.h \
+ inc/mmsteststaticutils.h \
+ inc/mmsreadfile.h \
+ inc/mmstestuitimer.h \
+ inc/mmstestbed.hrh
+
+SYMBIAN_PLATFORMS = WINSCW ARMV5
+
+symbian {
+ TARGET.CAPABILITY = CAP_GENERAL_DLL
+ TARGET.EPOCSTACKSIZE = 0x8000
+ TARGET.EPOCHEAPSIZE = 0x1000 0x1F00000
+ TARGET.EPOCALLOWDLLDATA = 1
+ }
+
+# Build.inf rules
+BLD_INF_RULES.prj_exports += \
+ "$${LITERAL_HASH}include <platform_paths.hrh>"
+
+LIBS += -lmsgs \
+ -lmmsmessage \
+ -lmmsconninit \
+ -lmmscodec \
+ -lmmsserversettings \
+ -lcentralrepository \
+ -lapparc \
+ -lbafl \
+ -lefsrv \
+ -lesock \
+ -lestor \
+ -leuser \
+ -llogcli \
+ -llogwrap \
+ -lapgrfx \
+ -lapmime
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditormmsplugin/tsrc/mmstestbed/src/mmsreadfile.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,1799 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ */
+
+// INCLUDE FILES
+#include <e32base.h>
+#include <badesca.h>
+#include <e32def.h>
+#include <s32file.h>
+#include <msvids.h>
+#include <mtmdef.h>
+//#include <eikenv.h>
+#include <apgcli.h>
+#include <CMsvMimeHeaders.h>
+#include <AknNoteWrappers.h>
+
+#include <mmsservercommon.h>
+#include "mmsconst.h"
+#include "mmsclient.h"
+#include "mmsheaders.h"
+#include "mmsreadfile.h"
+#include "mmsmmboxviewheaders.h"
+#include "mmsmmboxmessageheaders.h"
+#include "mmsmmboxflags.h"
+#include "mmssettings.h"
+
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES
+
+// CONSTANTS
+const TInt KMmsGranularity = 8;
+_LIT( K1970, "19700000:000000.000000" ); // 1-Jan 1970 0:00:00
+
+
+// MACROS
+
+// LOCAL CONSTANTS AND MACROS
+
+// MODULE DATA STRUCTURES
+
+// LOCAL FUNCTION PROTOTYPES
+
+// ==================== LOCAL FUNCTIONS ====================
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//
+CMmsReadFile::CMmsReadFile()
+ {
+ // all member variables in a class derived from CBase
+ // are automatically set to 0.
+ }
+
+
+//
+void CMmsReadFile::ConstructL(RFs& aFs, RFileReadStream& aReadStream )
+ {
+ // iRowBuffer = HBufC8::NewMaxL( 500 ); // Max row length!!!!
+ iFs = aFs;
+ iReader = &aReadStream;
+ iByteBuffer = HBufC8::NewL( DefaultBufLen );
+ iAliasArray = new ( ELeave ) CDesCArrayFlat( KMmsGranularity );
+ iAttaStructures = new ( ELeave ) CArrayPtrFlat<CMmsAttaStructure>( KMmsGranularity );
+ Reset();
+ }
+
+// Two-phased constructor.
+CMmsReadFile* CMmsReadFile::NewL(RFs& aFs, RFileReadStream& aReadStream )
+ {
+ CMmsReadFile* self = new ( ELeave ) CMmsReadFile();
+ CleanupStack::PushL( self );
+ self->ConstructL( aFs, aReadStream );
+ CleanupStack::Pop();
+ return self;
+ }
+
+
+// Destructor
+CMmsReadFile::~CMmsReadFile()
+ {
+ Reset(); // resets and destroys all array data
+ if (iAliasArray != NULL) iAliasArray->Reset();
+ delete iByteBuffer;
+ delete iAliasArray;
+ delete iAttaStructures;
+ }
+
+void CMmsReadFile::Reset()
+ {
+ // reset all arrays
+ if (iAttaStructures != NULL) iAttaStructures->ResetAndDestroy();
+ iAttaCount = 0;
+ iAttaRoot = 0;
+ }
+
+// ---------------------------------------------------------
+// CMmsReadFile()::CompleteTest
+// ---------------------------------------------------------
+//
+TInt CMmsReadFile::CompleteTestL( TInt aMessageCounter, CMmsHeaders& aMmsHeaders )
+{
+ Reset(); // new message
+
+ TUint32 val;
+ TUint limit = 1000000;
+ TUint sizeLimit = 1000 * 1024; //max message size 1000 kB!
+ TUint allLimit = 999999;
+ TInt error;
+ TRadix radix = EDecimal;
+ TLex16 lex;
+ TTestReadStatus readStatus = ETestUnknown;
+ CMmsAttaStructure* oneAtta = NULL;
+ TInt index;
+ TTime y1970( K1970 );
+ TTimeIntervalMicroSeconds interval;
+ TTime date;
+ TInt order = 0;
+ TInt16 shortInteger = 0;
+
+ //iso luuppi, joka kiertää ja lukee kunnes EOF tule vastaan
+ //Big Loop, which passes around and read until the EOF
+
+ iMessageType = iNextMessageType;
+ while(readStatus != ETestEof)
+ {
+ readStatus = ReadRowL();
+ if ( readStatus == ETestEof )
+ {
+ return(-1);
+ }
+ if ( readStatus == ETestUnknown )
+ {
+ // A line containing only comments, or an unknown tag
+ // As using the scripts to test settings is no longer supported,
+ // any old keywords used to test CMmsSettings class are ignored
+ continue;
+ }
+ if( readStatus == ETestNewMessage )
+ {
+ iNextMessageType = readStatus;
+ if(aMessageCounter++)
+ {
+ return(NULL);
+ }
+ else
+ {
+ iMessageType = iNextMessageType;
+ continue;
+ }
+ }
+ if ( iMessageType == ETestNewMessage)
+ {
+ switch(readStatus)
+ {
+ case ETestFrom:
+ aMmsHeaders.SetSenderL( iValueBuffer );
+ break;
+ case ETestFromAlias:
+ index = FindAlias(iValueBuffer);
+ if(index >= 0)
+ {
+ aMmsHeaders.SetSenderL( iAliasArray->MdcaPoint(index).Mid(iAliasArray->MdcaPoint(index).Locate('=') + 1 ) );
+ }
+ break;
+ case ETestTo:
+ aMmsHeaders.AddTypedAddresseeL( iValueBuffer, EMsvRecipientTo );
+ break;
+ case ETestToAlias:
+ index = FindAlias(iValueBuffer);
+ if(index >= 0)
+ {
+ aMmsHeaders.AddTypedAddresseeL( iAliasArray->MdcaPoint(index).Mid(iAliasArray->MdcaPoint(index).Locate('=') + 1 ), EMmsTo );
+ }
+ break;
+ case ETestCc:
+ aMmsHeaders.AddTypedAddresseeL( iValueBuffer, EMsvRecipientCc );
+ break;
+ case ETestCcAlias:
+ index = FindAlias(iValueBuffer);
+ if(index >= 0)
+ {
+ aMmsHeaders.AddTypedAddresseeL( iAliasArray->MdcaPoint(index).Mid(iAliasArray->MdcaPoint(index).Locate('=') + 1 ), EMmsCc );
+ }
+ break;
+ case ETestBcc:
+ aMmsHeaders.AddTypedAddresseeL( iValueBuffer, EMsvRecipientBcc );
+ break;
+ case ETestBccAlias:
+ index = FindAlias(iValueBuffer);
+ if(index >= 0)
+ {
+ aMmsHeaders.AddTypedAddresseeL( iAliasArray->MdcaPoint(index).Mid(iAliasArray->MdcaPoint(index).Locate('=') + 1 ), EMmsBcc );
+ }
+ break;
+ case ETestSubject:
+ aMmsHeaders.SetSubjectL( iValueBuffer );
+ break;
+ case ETestExpiryRel:
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,radix,limit);
+ if (error == KErrNone)
+ {
+ aMmsHeaders.SetExpiryInterval( val );
+ }
+ break;
+ case ETestExpiryAbs:
+ error = iDate.Set(iValueBuffer);
+ interval = iDate.MicroSecondsFrom( y1970 );
+ // expiry date in seconds from 1.1.1970.
+ aMmsHeaders.SetExpiryDate( (interval.Int64())/1000000 );
+ break;
+ case ETestDeliveryTimeRel:
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,radix,limit);
+ if (error == KErrNone)
+ {
+ aMmsHeaders.SetDeliveryTimeInterval( val );
+ }
+ break;
+ case ETestDeliveryTimeAbs:
+ error = iDate.Set(iValueBuffer);
+ interval = iDate.MicroSecondsFrom( y1970 );
+ aMmsHeaders.SetDeliveryDate( (interval.Int64())/1000000 );
+ break;
+ case ETestDate:
+ error = iDate.Set(iValueBuffer);
+ interval = iDate.MicroSecondsFrom( y1970 );
+ aMmsHeaders.SetDate( (interval.Int64())/1000000 );
+ case ETestPriority:
+ val = 0;
+ if ((iValueBuffer.CompareF(KLow)) == 0)
+ {
+ val = EMmsPriorityLow;
+ }
+ else if ((iValueBuffer.CompareF(KNormal)) == 0)
+ {
+ val = EMmsPriorityNormal;
+ }
+ else if ((iValueBuffer.CompareF(KHigh)) == 0)
+ {
+ val = EMmsPriorityHigh;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetMessagePriority( val );
+ break;
+ case ETestSenderVisibility:
+ val = 0;
+ if ((iValueBuffer.CompareF(KHide)) == 0)
+ {
+ val = EMmsSenderVisibilityHide;
+ }
+ else if ((iValueBuffer.CompareF(KShow)) == 0)
+ {
+ val = EMmsSenderVisibilityShow;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetSenderVisibility( val );
+ break;
+ case ETestDeliveryReport:
+ val = 0;
+ if ((iValueBuffer.CompareF(KYes)) == 0)
+ {
+ val = EMmsYes;
+ }
+ else if ((iValueBuffer.CompareF(KNo)) == 0)
+ {
+ val = EMmsNo;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetDeliveryReport( val );
+ break;
+ case ETestDelivReportSendAllow:
+ val = 0;
+ if ((iValueBuffer.CompareF(KYes)) == 0)
+ {
+ val = EMmsYes;
+ }
+ else if ((iValueBuffer.CompareF(KNo)) == 0)
+ {
+ val = EMmsNo;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetReportAllowed( val );
+ break;
+
+ case ETestReadReply:
+ val = 0;
+ if ((iValueBuffer.CompareF(KYes)) == 0)
+ {
+ val = EMmsYes;
+ }
+ else if ((iValueBuffer.CompareF(KNo)) == 0)
+ {
+ val = EMmsNo;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetReadReply( val );
+ break;
+ case ETestNewAttachment:
+ oneAtta = CMmsAttaStructure::NewL();
+ iAttaStructures->AppendL(oneAtta);
+ oneAtta->iAtta->Des().Copy( iValueBuffer );
+ iAttaCount++;
+ break;
+ case ETestAttachmentType:
+ if (oneAtta != NULL)
+ {
+ oneAtta->iAttaType->Des().Copy( iValueBuffer );
+ }
+ break;
+ case ETestAttachmentContLoc:
+ if (oneAtta != NULL)
+ {
+ oneAtta->iAttaName->Des().Copy( iValueBuffer );
+ }
+ break;
+ case ETestAttaRecommendedName:
+ if (oneAtta != NULL)
+ {
+ oneAtta->iAttaRecommendedName->Des().Copy( iValueBuffer );
+ }
+ break;
+ case ETestAttachmentCharset:
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,radix,limit);
+ if (error == KErrNone)
+ {
+ if (oneAtta != NULL)
+ {
+ oneAtta->iAttaCharset = val;
+ }
+ }
+ break;
+ case ETestAttachmentCid:
+ if (oneAtta != NULL)
+ {
+ oneAtta->iAttaCid->Des().Copy(iValueBuffer);
+ }
+ break;
+ case ETestAttContTypeParamName:
+ iByteBuffer->Des().Copy( iValueBuffer );
+ if (oneAtta != NULL)
+ {
+ oneAtta->iContentTypeParams->AppendL(iByteBuffer->Des());
+ }
+ break;
+ case ETestAttContTypeParamValue:
+ iByteBuffer->Des().Copy( iValueBuffer );
+ if (oneAtta != NULL)
+ {
+ oneAtta->iContentTypeParams->AppendL(iByteBuffer->Des());
+ }
+ break;
+ case ETestAttXTypeParamName:
+ iByteBuffer->Des().Copy( iValueBuffer );
+ if (oneAtta != NULL)
+ {
+ oneAtta->iXTypeParams->AppendL(iByteBuffer->Des());
+ }
+ break;
+ case ETestAttXTypeParamValue:
+ iByteBuffer->Des().Copy( iValueBuffer );
+ if (oneAtta != NULL)
+ {
+ oneAtta->iXTypeParams->AppendL(iByteBuffer->Des());
+ }
+ break;
+ case ETestAttachmentRoot:
+ iAttaRoot = iAttaCount;
+ break;
+ case ETestAlias:
+ // all aliases are global even if they appear
+ // in the middle of a message
+ iAliasArray->AppendL( iValueBuffer );
+ iAliasCount++;
+ break;
+ case ETestMessageClass: // should be handled!
+ val = EMmsClassPersonal;
+ if ((iValueBuffer.CompareF(KPersonal)) == 0)
+ {
+ val = EMmsClassPersonal;
+ }
+ else if ((iValueBuffer.CompareF(KAdvertisement)) == 0)
+ {
+ val = EMmsClassAdvertisement;
+ }
+ else if ((iValueBuffer.CompareF(KInformational)) == 0)
+ {
+ val = EMmsClassInformational;
+ }
+ else if ((iValueBuffer.CompareF(KAuto)) == 0)
+ {
+ val = EMmsClassAuto;
+ }
+ else
+ {
+ val = (TMmsMessageClass)KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetMessageClass( val );
+ break;
+ case ETestReplyCharging:
+ val = 0;
+ if ((iValueBuffer.CompareF(KRequested)) == 0)
+ {
+ val = KMmsReplyChargingRequested;
+ }
+ else if ((iValueBuffer.CompareF(KReqTextOnly)) == 0)
+ {
+ val = KMmsReplyChargingRequestedTextOnly;
+ }
+ else if ((iValueBuffer.CompareF(KAccepted)) == 0)
+ {
+ val = KMmsReplyChargingAccepted;
+ }
+ else if ((iValueBuffer.CompareF(KAccTextOnly)) == 0)
+ {
+ val = KMmsReplyChargingAcceptedTextOnly;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetReplyCharging( val );
+ break;
+ case ETestReplyChargAbs:
+ error = date.Set(iValueBuffer);
+ if ( error == KErrNone )
+ {
+ interval = date.MicroSecondsFrom( y1970 );
+ aMmsHeaders.SetReplyChargingDate( (interval.Int64())/1000000 );
+ }
+ break;
+ case ETestReplyChargRel:
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,radix,limit);
+ if (error == KErrNone)
+ {
+ aMmsHeaders.SetReplyChargingInterval( val );
+ }
+ break;
+ case ETestReplyChargSize:
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,radix,sizeLimit);
+ if (error == KErrNone)
+ {
+ aMmsHeaders.SetReplyChargingSize( val );
+ }
+ break;
+ case ETestReplyChargID:
+ iByteBuffer->Des().Copy( iValueBuffer );
+ aMmsHeaders.SetReplyChargingIdL( iByteBuffer->Des() );
+ break;
+ case ETestTID:
+ iByteBuffer->Des().Copy( iValueBuffer );
+ aMmsHeaders.SetTidL( iByteBuffer->Des() );
+ break;
+ case ETestContentLocation:
+ iByteBuffer->Des().Copy( iValueBuffer );
+ if ( aMmsHeaders.MessageType() == KMmsMessageTypeMboxViewReq ||
+ aMmsHeaders.MessageType() == KMmsMessageTypeMboxViewConf ||
+ aMmsHeaders.MessageType() == KMmsMessageTypeMBoxDeleteReq )
+ {
+ aMmsHeaders.MMBoxMessageHeadersL().ContentLocationList().AppendL( iByteBuffer->Des() );
+ }
+ else if ( aMmsHeaders.MessageType() == KMmsMessageTypeMBoxDeleteConf )
+ {
+ aMmsHeaders.InsertDeleteContentLocationL( order, iByteBuffer->Des() );
+ }
+ else
+ {
+ aMmsHeaders.SetContentLocationL( iByteBuffer->Des() );
+ }
+ break;
+ case ETestPreviouslySentIndex:
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,radix,limit);
+ order = val;
+ break;
+ case ETestPreviouslySentBy:
+ aMmsHeaders.InsertPreviouslySentByL( order, iValueBuffer );
+ break;
+ case ETestPreviouslySentDate:
+ error = date.Set(iValueBuffer);
+ if ( error == KErrNone )
+ {
+ interval = date.MicroSecondsFrom( y1970 );
+ aMmsHeaders.InsertPreviouslySentDateL( order, (interval.Int64())/1000000 );
+ }
+ break;
+ case ETestMessageId:
+ iByteBuffer->Des().Copy( iValueBuffer );
+ aMmsHeaders.SetMessageIdL( iByteBuffer->Des() );
+ break;
+ case ETestMessageSize:
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,radix,sizeLimit);
+ if (error == KErrNone)
+ {
+ aMmsHeaders.SetMessageSize( val );
+ }
+ break;
+ case ETestVersion:
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,EHex,limit);
+ shortInteger = TInt16( val );
+ if (error == KErrNone)
+ {
+ aMmsHeaders.SetMmsVersion( shortInteger );
+ }
+ break;
+ case ETestReadStatus:
+ val = 0;
+ if ((iValueBuffer.CompareF(KRead)) == 0)
+ {
+ val = KMmsReadStatusRead;
+ }
+ else if ((iValueBuffer.CompareF(KDelNotRead)) == 0)
+ {
+ val = KMmsReadStatusDeletedWithoutBeingRead;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetReadStatus( val );
+ break;
+ case ETestResponseStatus:
+ val = 0;
+ if ((iValueBuffer.CompareF(KOk)) == 0)
+ {
+ val = KMmsStatusOk;
+ }
+ else if ((iValueBuffer.CompareF(KErrUnspecified)) == 0)
+ {
+ val = KMmsErrorUnspecified;
+ }
+ else if ((iValueBuffer.CompareF(KErrServiceDenied)) == 0)
+ {
+ val = KMmsErrorServiceDenied;
+ }
+ else if ((iValueBuffer.CompareF(KErrMessageFormatCorrupt)) == 0)
+ {
+ val = KMmsErrorMessageFormatCorrupt;
+ }
+ else if ((iValueBuffer.CompareF(KErrAddressUnresolved)) == 0)
+ {
+ val = KMmsErrorSendingAddressUnresolved;
+ }
+ else if ((iValueBuffer.CompareF(KErrMessageNotFound)) == 0)
+ {
+ val = KMmsErrorMessageNotFound;
+ }
+ else if ((iValueBuffer.CompareF(KErrNetworkProblem)) == 0)
+ {
+ val = KMmsErrorNetworkProblem;
+ }
+ else if ((iValueBuffer.CompareF(KErrContentNotAccepted)) == 0)
+ {
+ val = KMmsErrorNoContentAccepted;
+ }
+ else if ((iValueBuffer.CompareF(KErrUnsupportedMessage)) == 0)
+ {
+ val = KMmsErrorUnsupportedMessage;
+ }
+ else if ((iValueBuffer.CompareF(KErrTransient)) == 0)
+ {
+ val = KMmsErrorTransientFailure;
+ }
+ else if ((iValueBuffer.CompareF(KErrTransientAddressUnresolved)) == 0)
+ {
+ val = KMmsErrorTransientSendingAddressUnresolved;
+ }
+ else if ((iValueBuffer.CompareF(KErrTransientNotFound)) == 0)
+ {
+ val = KMmsErrorTransientMessageNotFound;
+ }
+ else if ((iValueBuffer.CompareF(KErrTransientNetworkproblem)) == 0)
+ {
+ val = KMmsErrorTransientNetworkProblem;
+ }
+ else if ((iValueBuffer.CompareF(KErrPermanent)) == 0)
+ {
+ val = KMmsErrorPermanentFailure;
+ }
+ else if ((iValueBuffer.CompareF(KErrPermanentServiceDenied)) == 0)
+ {
+ val = KMmsErrorPermanentServiceDenied;
+ }
+ else if ((iValueBuffer.CompareF(KErrPermanentMessageFormatCorrupt)) == 0)
+ {
+ val = KMmsErrorPermanentMessageFormatCorrupt;
+ }
+ else if ((iValueBuffer.CompareF(KErrPermanentAddressUnresolved)) == 0)
+ {
+ val = KMmsErrorPermanentSendingAddressUnresolved;
+ }
+ else if ((iValueBuffer.CompareF(KErrPermanentNotFound)) == 0)
+ {
+ val = KMmsErrorPermanentMessageNotFound;
+ }
+ else if ((iValueBuffer.CompareF(KErrPermanentContentNotAccepted)) == 0)
+ {
+ val = KMmsErrorPermanentContentNotAccepted;
+ }
+ else if ((iValueBuffer.CompareF(KErrReplyChargingLimitNotMet)) == 0)
+ {
+ val = KMmsErrorPermanentReplyChargingLimitationsNotMet;
+ }
+ else if ((iValueBuffer.CompareF(KErrReplyChargingRequestNotAccepted)) == 0)
+ {
+ val = KMmsErrorPermanentReplyChargingRequestNotAccepted;
+ }
+ else if ((iValueBuffer.CompareF(KErrReplyChargingForwardingDenied)) == 0)
+ {
+ val = KMmsErrorPermanentReplyChargingForwardingDenied;
+ }
+ else if ((iValueBuffer.CompareF(KErrReplyChargingNotSupported)) == 0)
+ {
+ val = KMmsErrorPermanentReplyChargingNotSupported;
+ }
+ else if ((iValueBuffer.CompareF(KErrTransientPartialSuccess)) == 0)
+ {
+ val = KMmsErrorTransientPartialSuccess;
+ }
+ else if ((iValueBuffer.CompareF(KErrAddressHidingNotSupported)) == 0)
+ {
+ val = KMmsErrorPermanentAddressHidingNotSupported;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ if ( aMmsHeaders.MessageType() == KMmsMessageTypeMBoxDeleteConf )
+ {
+ aMmsHeaders.InsertDeleteStatusL( order, val );
+ }
+ else
+ {
+ aMmsHeaders.SetResponseStatus( val );
+ }
+ break;
+ case ETestResponseText:
+ if ( aMmsHeaders.MessageType() == KMmsMessageTypeMBoxDeleteConf )
+ {
+ aMmsHeaders.InsertDeleteResponseTextL( order, iValueBuffer );
+ }
+ else
+ {
+ aMmsHeaders.SetResponseTextL( iValueBuffer );
+ }
+ break;
+ case ETestRetrieveStatus:
+ val = 0;
+ if ((iValueBuffer.CompareF(KOk)) == 0)
+ {
+ val = KMmsStatusOk;
+ }
+ else if ((iValueBuffer.CompareF(KErrTransient)) == 0)
+ {
+ val = KMmsErrorTransientFailure;
+ }
+ else if ((iValueBuffer.CompareF(KErrTransientNotFound)) == 0)
+ {
+ val = KMmsErrorReceiveTransientMessageNotFound;
+ }
+ else if ((iValueBuffer.CompareF(KErrTransientNetworkproblem)) == 0)
+ {
+ val = KMmsErrorReceiveTransientNetworkProblem;
+ }
+ else if ((iValueBuffer.CompareF(KErrPermanent)) == 0)
+ {
+ val = KMmsErrorPermanentFailure;
+ }
+ else if ((iValueBuffer.CompareF(KErrPermanentServiceDenied)) == 0)
+ {
+ val = KMmsErrorPermanentServiceDenied;
+ }
+ else if ((iValueBuffer.CompareF(KErrPermanentNotFound)) == 0)
+ {
+ val = KMmsErrorReceivePermanentMessageNotFound;
+ }
+ else if ((iValueBuffer.CompareF(KErrRetrieveContentUnsupported)) == 0)
+ {
+ val = KMmsErrorReceivePermanentContentUnsupported;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetResponseStatus( val );
+ break;
+ case ETestRetrieveText:
+ aMmsHeaders.SetResponseTextL( iValueBuffer );
+ break;
+ case ETestStatus:
+ val = 0;
+ if ((iValueBuffer.CompareF(KDeferred)) == 0)
+ {
+ val = KMmsMessageStatusDeferred;
+ }
+ else if ((iValueBuffer.CompareF(KExpired)) == 0)
+ {
+ val = KMmsMessageStatusExpired;
+ }
+ else if ((iValueBuffer.CompareF(KRetrieved)) == 0)
+ {
+ val = KMmsMessageStatusRetrieved;
+ }
+ else if ((iValueBuffer.CompareF(KRejected)) == 0)
+ {
+ val = KMmsMessageStatusRejected;
+ }
+ else if ((iValueBuffer.CompareF(KUnrecognized)) == 0)
+ {
+ val = KMmsMessageStatusUnrecognized;
+ }
+ else if ((iValueBuffer.CompareF(KIndeterminate)) == 0)
+ {
+ val = KMmsMessageStatusIndeterminate;
+ }
+ else if ((iValueBuffer.CompareF(KForwarded)) == 0)
+ {
+ val = KMmsMessageStatusForwarded;
+ }
+ else if ((iValueBuffer.CompareF(KUnreachable)) == 0)
+ {
+ val = KMmsMessageStatusUnreachable;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetStatus( val );
+ break;
+ case ETestMessageType:
+ val = 0;
+ if ((iValueBuffer.CompareF(KSendReq)) == 0)
+ {
+ val = KMmsMessageTypeMSendReq;
+ }
+ else if ((iValueBuffer.CompareF(KSendConf)) == 0)
+ {
+ val = KMmsMessageTypeMSendConf;
+ }
+ else if ((iValueBuffer.CompareF(KNotifInd)) == 0)
+ {
+ val = KMmsMessageTypeMNotificationInd;
+ }
+ else if ((iValueBuffer.CompareF(KNotifResp)) == 0)
+ {
+ val = KMmsMessageTypeMNotifyRespInd;
+ }
+ else if ((iValueBuffer.CompareF(KRetrConf)) == 0)
+ {
+ val = KMmsMessageTypeMRetrieveConf;
+ }
+ else if ((iValueBuffer.CompareF(KAckInd)) == 0)
+ {
+ val = KMmsMessageTypeAcknowledgeInd;
+ }
+ else if ((iValueBuffer.CompareF(KDelInd)) == 0)
+ {
+ val = KMmsMessageTypeDeliveryInd;
+ }
+ else if ((iValueBuffer.CompareF(KReadReqInd)) == 0)
+ {
+ val = KMmsMessageTypeReadRecInd;
+ }
+ else if ((iValueBuffer.CompareF(KReadOrigInd)) == 0)
+ {
+ val = KMmsMessageTypeReadOrigInd;
+ }
+ else if ((iValueBuffer.CompareF(KForwardRec)) == 0)
+ {
+ val = KMmsMessageTypeForwardReq;
+ }
+ else if ((iValueBuffer.CompareF(KForwardConf)) == 0)
+ {
+ val = KMmsMessageTypeForwardConf;
+ }
+ else if ((iValueBuffer.CompareF(KMBoxStoreReq)) == 0)
+ {
+ val = KMmsMessageTypeMboxStoreReq;
+ }
+ else if ((iValueBuffer.CompareF(KMBoxStoreConf)) == 0)
+ {
+ val = KMmsMessageTypeMboxStoreConf;
+ }
+ else if ((iValueBuffer.CompareF(KMBoxViewReq)) == 0)
+ {
+ val = KMmsMessageTypeMboxViewReq;
+ }
+ else if ((iValueBuffer.CompareF(KMBoxViewConf)) == 0)
+ {
+ val = KMmsMessageTypeMboxViewConf;
+ }
+ else if ((iValueBuffer.CompareF(KMBoxUploadReq)) == 0)
+ {
+ val = KMmsMessageTypeMBoxUploadReq;
+ }
+ else if ((iValueBuffer.CompareF(KMBoxUploadConf)) == 0)
+ {
+ val = KMmsMessageTypeMBoxUploadConf;
+ }
+ else if ((iValueBuffer.CompareF(KMBoxDeleteReq)) == 0)
+ {
+ val = KMmsMessageTypeMBoxDeleteReq;
+ }
+ else if ((iValueBuffer.CompareF(KMBoxDeleteConf)) == 0)
+ {
+ val = KMmsMessageTypeMBoxDeleteConf;
+ }
+ else if ((iValueBuffer.CompareF(KMBoxDescr)) == 0)
+ {
+ val = KMmsMessageTypeMBoxDescr;
+ }
+ else if ((iValueBuffer.CompareF(KDeleteReq)) == 0)
+ {
+ val = KMmsMessageTypeDeleteReq;
+ }
+ else if ((iValueBuffer.CompareF(KDeleteConf)) == 0)
+ {
+ val = KMmsMessageTypeDeleteConf;
+ }
+ else if ((iValueBuffer.CompareF(KCancelReq)) == 0)
+ {
+ val = KMmsMessageTypeCancelReq;
+ }
+ else if ((iValueBuffer.CompareF(KCancelResp)) == 0)
+ {
+ val = KMmsMessageTypeCancelConf;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetMessageType( val );
+ break;
+ case ETestAttribute:
+ val = 0;
+ iByteBuffer->Des().Copy( iValueBuffer );
+ if ((iByteBuffer->Des().CompareF(KTestBcc)) == 0)
+ {
+ val = KMmsAssignedBcc;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestCc)) == 0)
+ {
+ val = KMmsAssignedCc;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestContent)) == 0)
+ {
+ val = KMmsAssignedContent;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestContentType)) == 0)
+ {
+ val = KMmsAssignedContentType;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestDate)) == 0)
+ {
+ val = KMmsAssignedDate;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestDeliveryReport)) == 0)
+ {
+ val = KMmsAssignedDeliveryReport;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestDeliveryTime)) == 0)
+ {
+ val = KMmsAssignedDeliveryTime;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestExpiry)) == 0)
+ {
+ val = KMmsAssignedExpiry;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestFrom)) == 0)
+ {
+ val = KMmsAssignedFrom;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestMessageClass)) == 0)
+ {
+ val = KMmsAssignedMessageClass;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestMessageId)) == 0)
+ {
+ val = KMmsAssignedMessageId;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestMessageSize)) == 0)
+ {
+ val = KMmsAssignedMessageSize;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestPriority)) == 0)
+ {
+ val = KMmsAssignedPriority;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestReadReply)) == 0)
+ {
+ val = KMmsAssignedReadReply;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestSubject)) == 0)
+ {
+ val = KMmsAssignedSubject;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestTo)) == 0)
+ {
+ val = KMmsAssignedTo;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestReplyCharging)) == 0)
+ {
+ val = KMmsAssignedReplyCharging;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestReplyChargID)) == 0)
+ {
+ val = KMmsAssignedReplyChargingID;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestReplyCharg)) == 0)
+ {
+ val = KMmsAssignedReplyChargingDeadline;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestReplyChargSize)) == 0)
+ {
+ val = KMmsAssignedReplyChargingSize;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestPreviouslySentBy)) == 0)
+ {
+ val = KMmsAssignedPreviouslySentBy;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestPreviouslySentDate)) == 0)
+ {
+ val = KMmsAssignedPreviouslySentDate;
+ }
+ else if ((iByteBuffer->Des().CompareF(KTestAdditionalHeaders)) == 0)
+ {
+ val = KMmsAssignedAdditionalHeaders;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.MMBoxViewHeadersL().AttributeArray().InsertInOrder(val);
+ break;
+ case ETestDistributionIndicator:
+ val = 0;
+ if ((iValueBuffer.CompareF(KYes)) == 0)
+ {
+ val = KMmsYes;
+ }
+ else if ((iValueBuffer.CompareF(KNo)) == 0)
+ {
+ val = KMmsNo;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetDistributionIndicator( val );
+ break;
+ case ETestLimit:
+ aMmsHeaders.MMBoxViewHeadersL().SetMmsLimit(KMaxTUint32);
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,radix,limit);
+ if ( val > allLimit )
+ {
+ val = KMaxTUint32; // this is too hard to type, more than 999999 means "all"
+ }
+ if( error == KErrNone )
+ {
+ aMmsHeaders.MMBoxViewHeadersL().SetMmsLimit(val);
+ }
+ break;
+ case ETestMessageQuota:
+ aMmsHeaders.MMBoxViewHeadersL().SetMMBoxQuotaNumber(KMaxTUint32);
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,radix,limit);
+ if ( val > allLimit )
+ {
+ val = KMaxTUint32; // this is too hard to type, more than 999999 means "all"
+ }
+ if (error == KErrNone)
+ {
+ aMmsHeaders.MMBoxViewHeadersL().SetMMBoxQuotaNumber(val);
+ }
+ break;
+ case ETestSizeQuota:
+ aMmsHeaders.MMBoxViewHeadersL().SetMMBoxQuotaSize(KMaxTUint32);
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,radix,limit);
+ if ( val > allLimit )
+ {
+ val = KMaxTUint32; // this is too hard to type, more than 999999 means "all"
+ }
+ if (error == KErrNone)
+ {
+ aMmsHeaders.MMBoxViewHeadersL().SetMMBoxQuotaSize(val);
+ }
+ break;
+ case ETestMessageTotal:
+ aMmsHeaders.MMBoxViewHeadersL().SetMMBoxTotalNumber(KMaxTUint32);
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,radix,limit);
+ if ( val > allLimit )
+ {
+ val = KMaxTUint32; // this is too hard to type, more than 999999 means "all"
+ }
+ if (error == KErrNone)
+ {
+ aMmsHeaders.MMBoxViewHeadersL().SetMMBoxTotalNumber(val);
+ }
+ break;
+ case ETestSizeTotal:
+ aMmsHeaders.MMBoxViewHeadersL().SetMMBoxTotalSize(KMaxTUint32);
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,radix,limit);
+ if ( val > allLimit )
+ {
+ val = KMaxTUint32; // this is too hard to type, more than 999999 means "all"
+ }
+ if (error == KErrNone)
+ {
+ aMmsHeaders.MMBoxViewHeadersL().SetMMBoxTotalSize(val);
+ }
+ break;
+ case ETestMessageCount:
+ aMmsHeaders.MMBoxViewHeadersL().SetMmsMessageCount(KMaxTUint32);
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,radix,limit);
+ if ( val > allLimit )
+ {
+ val = KMaxTUint32; // this is too hard to type, more than 999999 means "all"
+ }
+ if (error == KErrNone)
+ {
+ aMmsHeaders.MMBoxViewHeadersL().SetMmsMessageCount(val);
+ }
+ break;
+ case ETestAddKeyword:
+ aMmsHeaders.MMBoxMessageHeadersL().AppendKeywordItemL(KMmsAddToken, iValueBuffer);
+ break;
+ case ETestRemoveKeyword:
+ aMmsHeaders.MMBoxMessageHeadersL().AppendKeywordItemL(KMmsRemoveToken, iValueBuffer);
+ break;
+ case ETestFilterKeyword:
+ aMmsHeaders.MMBoxMessageHeadersL().AppendKeywordItemL(KMmsFilterToken, iValueBuffer);
+ break;
+ case ETestMMState:
+ val = 0;
+ if ((iValueBuffer.CompareF(KDraft)) == 0)
+ {
+ val = KMmsDraft;
+ }
+ else if ((iValueBuffer.CompareF(KSent)) == 0)
+ {
+ val = KMmsSent;
+ }
+ else if ((iValueBuffer.CompareF(KNew)) == 0)
+ {
+ val = KMmsNew;
+ }
+ else if ((iValueBuffer.CompareF(KRetrieved)) == 0)
+ {
+ val = KMmsRetrieved;
+ }
+ else if ((iValueBuffer.CompareF(KForwarded)) == 0)
+ {
+ val = KMmsForwarded;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ if ( aMmsHeaders.MessageType() == KMmsMessageTypeMboxViewReq ||
+ aMmsHeaders.MessageType() == KMmsMessageTypeMboxViewConf )
+ {
+ aMmsHeaders.MMBoxViewHeadersL().MMStateArray().InsertInOrder( val );
+ }
+ else
+ {
+ aMmsHeaders.MMBoxMessageHeadersL().SetMMState( val );
+ }
+ break;
+ case ETestQuota:
+ val = 0;
+ if ((iValueBuffer.CompareF(KYes)) == 0)
+ {
+ val = KMmsYes;
+ }
+ else if ((iValueBuffer.CompareF(KNo)) == 0)
+ {
+ val = KMmsNo;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.MMBoxViewHeadersL().SetMmsQuotas( val );
+ break;
+ case ETestStart:
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,radix,limit);
+ if (error == KErrNone)
+ {
+ aMmsHeaders.MMBoxViewHeadersL().SetMmsStart(val);
+ }
+ break;
+ case ETestStore:
+ val = 0;
+ if ((iValueBuffer.CompareF(KYes)) == 0)
+ {
+ val = KMmsYes;
+ }
+ else if ((iValueBuffer.CompareF(KNo)) == 0)
+ {
+ val = KMmsNo;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.MMBoxMessageHeadersL().SetMmsStore( val );
+ break;
+ case ETestStored:
+ val = 0;
+ if ((iValueBuffer.CompareF(KYes)) == 0)
+ {
+ val = KMmsYes;
+ }
+ else if ((iValueBuffer.CompareF(KNo)) == 0)
+ {
+ val = KMmsNo;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.MMBoxMessageHeadersL().SetMmsStored( val );
+ break;
+ case ETestStoreStatus:
+ val = 0;
+ if ((iValueBuffer.CompareF(KOk)) == 0)
+ {
+ val = KMmsStatusOk;
+ }
+ else if ((iValueBuffer.CompareF(KErrTransient)) == 0)
+ {
+ val = KMmsErrorTransientFailure;
+ }
+ else if ((iValueBuffer.CompareF(KErrTransientNetworkproblem)) == 0)
+ {
+ val = KMmsErrorStoreStatusTransientNetworkProblem;
+ }
+ else if ((iValueBuffer.CompareF(KErrPermanent)) == 0)
+ {
+ val = KMmsErrorPermanentFailure;
+ }
+ else if ((iValueBuffer.CompareF(KErrPermanentServiceDenied)) == 0)
+ {
+ val = KMmsErrorPermanentServiceDenied;
+ }
+ else if ((iValueBuffer.CompareF(KErrPermanentMessageFormatCorrupt)) == 0)
+ {
+ val = KMmsErrorPermanentMessageFormatCorrupt;
+ }
+ else if ((iValueBuffer.CompareF(KErrPermanentNotFound)) == 0)
+ {
+ val = KMmsErrorStoreStatusPermanentMessageNotFound;
+ }
+ else if ((iValueBuffer.CompareF(KErrMMBoxFull)) == 0)
+ {
+ val = KMmsErrorStoreStatusPermanentMmboxFull;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.MMBoxMessageHeadersL().SetMmsStoreStatus( val );
+ break;
+ case ETestStoreStatusText:
+ aMmsHeaders.MMBoxMessageHeadersL().SetMmsStoreStatusTextL( iValueBuffer );
+ break;
+ case ETestTotals:
+ val = 0;
+ if ((iValueBuffer.CompareF(KYes)) == 0)
+ {
+ val = KMmsYes;
+ }
+ else if ((iValueBuffer.CompareF(KNo)) == 0)
+ {
+ val = KMmsNo;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.MMBoxViewHeadersL().SetMmsTotals( val );
+ break;
+
+ case ETestDeleteInfoIndex:
+ lex.Assign(iValueBuffer);
+ error = lex.Val(val,radix,limit);
+ order = val;
+ break;
+
+ case ETestApplicId:
+ aMmsHeaders.SetApplicIdL( iValueBuffer );
+ break;
+ case ETestReplyApplicId:
+ aMmsHeaders.SetReplyApplicIdL( iValueBuffer );
+ break;
+ case ETestApplicInfo:
+ iByteBuffer->Des().Copy( iValueBuffer );
+ aMmsHeaders.SetAuxApplicInfoL( iByteBuffer->Des() );
+ break;
+ case ETestContentClass:
+ val = 0;
+ if ((iValueBuffer.CompareF(KText)) == 0)
+ {
+ val = KMmsContentClassText;
+ }
+ else if ((iValueBuffer.CompareF(KImageBasic)) == 0)
+ {
+ val = KMmsContentClassImageBasic;
+ }
+ else if ((iValueBuffer.CompareF(KImageRich)) == 0)
+ {
+ val = KMmsContentClassImageRich;
+ }
+ else if ((iValueBuffer.CompareF(KVideoBasic)) == 0)
+ {
+ val = KMmsContentClassVideoBasic;
+ }
+ else if ((iValueBuffer.CompareF(KVideoRich)) == 0)
+ {
+ val = KMmsContentClassVideoRich;
+ }
+ else if ((iValueBuffer.CompareF(KMegaPixel)) == 0)
+ {
+ val = KMmsContentClassMegaPixel;
+ }
+ else if ((iValueBuffer.CompareF(KContentBasic)) == 0)
+ {
+ val = KMmsContentClassContentBasic;
+ }
+ else if ((iValueBuffer.CompareF(KContentRich)) == 0)
+ {
+ val = KMmsContentClassContentRich;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetContentClass( val );
+ break;
+ case ETestDrmContent:
+ val = 0;
+ if ((iValueBuffer.CompareF(KYes)) == 0)
+ {
+ val = KMmsYes;
+ }
+ else if ((iValueBuffer.CompareF(KNo)) == 0)
+ {
+ val = KMmsNo;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetDrmContent( val );
+ break;
+ case ETestAdaptationAllowed:
+ val = 0;
+ if ((iValueBuffer.CompareF(KYes)) == 0)
+ {
+ val = KMmsYes;
+ }
+ else if ((iValueBuffer.CompareF(KNo)) == 0)
+ {
+ val = KMmsNo;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetAdaptationAllowed( val );
+ break;
+ case ETestRecommendedRetrievalMode:
+ val = 0;
+ if ((iValueBuffer.CompareF(KManual)) == 0)
+ {
+ val = KMmsRecommendedRetrievalModeManual;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetRecommendedRetrievalMode( val );
+ break;
+ case ETestRecRetrievalModeText:
+ aMmsHeaders.SetRecommendedRetrievalModeTextL( iValueBuffer );
+ break;
+ case ETestReplaceId:
+ iByteBuffer->Des().Copy( iValueBuffer );
+ aMmsHeaders.SetReplaceCancelIdL( iByteBuffer->Des() );
+ break;
+ case ETestStatusText:
+ aMmsHeaders.SetResponseTextL( iValueBuffer );
+ break;
+ case ETestCancelId:
+ iByteBuffer->Des().Copy( iValueBuffer );
+ aMmsHeaders.SetReplaceCancelIdL( iByteBuffer->Des() );
+ break;
+ case ETestCancelStatus:
+ val = 0;
+ if ((iValueBuffer.CompareF(KCancelSuccessful)) == 0)
+ {
+ val = KMmsCancelRequestSuccessfullyReceived;
+ }
+ else if ((iValueBuffer.CompareF(KCancelCorrupted)) == 0)
+ {
+ val = KMmsCancelRequestCorrupted;
+ }
+ else
+ {
+ val = KMmsTestIllegalValue;
+ }
+ aMmsHeaders.SetCancelStatus( val );
+ break;
+ default:
+ break;
+ }
+ }
+ else
+ {
+ switch(readStatus)
+ {
+ case ETestAlias:
+ iAliasArray->AppendL( iValueBuffer );
+ iAliasCount++;
+ break;
+
+ default:
+ break;
+ }
+
+ }
+ }
+ return(-1);
+}
+
+// ---------------------------------------------------------
+// CMmsReadFile()::ReadRowL
+// ---------------------------------------------------------
+//
+TTestReadStatus CMmsReadFile::ReadRowL()
+ {
+
+ TBuf8<DefaultBufLen> RowBuffer;
+ TBuf8<32> KeyBuffer;
+
+ // READ ONE ROW AND DROP CR+LF FROM THE END OF LINE
+ TChar delim( 10 );
+ iReader->ReadL( RowBuffer, delim);
+ TInt length = RowBuffer.Length();
+ if ( RowBuffer.Length() < 2 )
+ {
+ return ETestEof;
+ }
+ RowBuffer.Delete(length - 2,2);
+
+ // DROP POSSIBLE COMMENT OUT
+ TInt pos = RowBuffer.Locate( ';' );
+ if ( pos >= 0 ) RowBuffer.Delete( pos, length-pos-2 );
+
+ if ( RowBuffer.Length() == 0 )
+ {
+ // the line contained only comment
+ return ETestUnknown;
+ }
+
+ // First split the row (:)
+ pos = RowBuffer.Locate( ':' );
+ if (pos > 0)
+ {
+ TPtrC8 p = RowBuffer.Mid( pos+1 );
+ length = p.Length();
+ iValueBuffer.Zero();
+ for (TInt i=0; i < length; ++i)
+ {
+ iValueBuffer.Append(p[i]);
+ }
+ iValueBuffer.Trim();
+ TPtrC8 pp = RowBuffer.Left(pos);
+ KeyBuffer.CopyUC(pp);
+ KeyBuffer.Trim();
+ }
+ // TRY TO FIND CORRECT TAG
+ if ((KeyBuffer.CompareF(KTestNewMessage)) == 0) return(ETestNewMessage);
+ if ((KeyBuffer.CompareF(KTestMessageType)) == 0) return ETestMessageType;
+ if ((KeyBuffer.CompareF(KTestDate)) == 0) return ETestDate;
+ if ((KeyBuffer.CompareF(KTestFrom)) == 0) return ETestFrom;
+ if ((KeyBuffer.CompareF(KTestTo)) == 0) return ETestTo;
+ if ((KeyBuffer.CompareF(KTestCc)) == 0) return ETestCc;
+ if ((KeyBuffer.CompareF(KTestBcc)) == 0) return ETestBcc;
+ if ((KeyBuffer.CompareF(KTestSubject)) == 0) return ETestSubject;
+ if ((KeyBuffer.CompareF(KTestExpiryRel)) == 0) return ETestExpiryRel;
+ if ((KeyBuffer.CompareF(KTestExpiryAbs)) == 0) return ETestExpiryAbs;
+ if ((KeyBuffer.CompareF(KTestDeliveryTimeRel)) == 0) return ETestDeliveryTimeRel;
+ if ((KeyBuffer.CompareF(KTestDeliveryTimeAbs)) == 0) return ETestDeliveryTimeAbs;
+ if ((KeyBuffer.CompareF(KTestPriority)) == 0) return ETestPriority;
+ if ((KeyBuffer.CompareF(KTestSenderVisibility)) == 0) return ETestSenderVisibility;
+ if ((KeyBuffer.CompareF(KTestDeliveryReport)) == 0) return ETestDeliveryReport;
+ if ((KeyBuffer.CompareF(KTestReadReply)) == 0) return ETestReadReply;
+ if ((KeyBuffer.CompareF(KTestNewAttachment)) == 0) return ETestNewAttachment;
+ if ((KeyBuffer.CompareF(KTestAttachmentName)) == 0) return ETestAttaRecommendedName;
+ if ((KeyBuffer.CompareF(KTestAttachmentContLoc)) == 0) return ETestAttachmentContLoc;
+ if ((KeyBuffer.CompareF(KTestAttachmentType)) == 0) return ETestAttachmentType;
+ if ((KeyBuffer.CompareF(KTestAttachmentCharset)) == 0) return ETestAttachmentCharset;
+ if ((KeyBuffer.CompareF(KTestAttachmentCid)) == 0) return ETestAttachmentCid;
+ if ((KeyBuffer.CompareF(KTestAttachmentRoot)) == 0) return ETestAttachmentRoot;
+ if ((KeyBuffer.CompareF(KTestEndOfFile)) == 0) return ETestEof;
+ if ((KeyBuffer.CompareF(KTestMessageClass)) == 0) return ETestMessageClass;
+ if ((KeyBuffer.CompareF(KTestDelivRepSendAllow)) == 0) return ETestDelivReportSendAllow;
+ if ((KeyBuffer.CompareF(KTestAlias)) == 0 ) return ETestAlias;
+ if ((KeyBuffer.CompareF(KTestFromAlias)) == 0 ) return ETestFromAlias;
+ if ((KeyBuffer.CompareF(KTestToAlias)) == 0 ) return ETestToAlias;
+ if ((KeyBuffer.CompareF(KTestCcAlias)) == 0 ) return ETestCcAlias;
+ if ((KeyBuffer.CompareF(KTestBccAlias)) == 0 ) return ETestBccAlias;
+ if ((KeyBuffer.CompareF(KTestReplyCharging)) == 0 ) return ETestReplyCharging;
+ if ((KeyBuffer.CompareF(KTestReplyChargAbs)) == 0 ) return ETestReplyChargAbs;
+ if ((KeyBuffer.CompareF(KTestReplyChargRel)) == 0 ) return ETestReplyChargRel;
+ if ((KeyBuffer.CompareF(KTestReplyChargSize)) == 0 ) return ETestReplyChargSize;
+ if ((KeyBuffer.CompareF(KTestReplyChargID)) == 0 ) return ETestReplyChargID;
+ if ((KeyBuffer.CompareF(KTestTID)) == 0 ) return ETestTID;
+ if ((KeyBuffer.CompareF(KTestContentLocation)) == 0 ) return ETestContentLocation;
+ if ((KeyBuffer.CompareF(KTestPreviouslySentIndex)) == 0 ) return ETestPreviouslySentIndex;
+ if ((KeyBuffer.CompareF(KTestPreviouslySentBy)) == 0 ) return ETestPreviouslySentBy;
+ if ((KeyBuffer.CompareF(KTestPreviouslySentDate)) == 0 ) return ETestPreviouslySentDate;
+ if ((KeyBuffer.CompareF(KTestMessageId)) == 0 ) return ETestMessageId;
+ if ((KeyBuffer.CompareF(KTestMessageSize)) == 0 ) return ETestMessageSize;
+ if ((KeyBuffer.CompareF(KTestVersion)) == 0 ) return ETestVersion;
+ if ((KeyBuffer.CompareF(KTestReadStatus)) == 0 ) return ETestReadStatus;
+ if ((KeyBuffer.CompareF(KTestResponseStatus)) == 0 ) return ETestResponseStatus;
+ if ((KeyBuffer.CompareF(KTestResponseText)) == 0 ) return ETestResponseText;
+ if ((KeyBuffer.CompareF(KTestRetrieveStatus)) == 0 ) return ETestRetrieveStatus;
+ if ((KeyBuffer.CompareF(KTestRetrieveText)) == 0 ) return ETestRetrieveText;
+ if ((KeyBuffer.CompareF(KTestStatus)) == 0 ) return ETestStatus;
+ if ((KeyBuffer.CompareF(KTestAttribute)) == 0 ) return ETestAttribute;
+ if ((KeyBuffer.CompareF(KTestDistributionIndicator)) == 0 ) return ETestDistributionIndicator;
+ if ((KeyBuffer.CompareF(KTestLimit)) == 0 ) return ETestLimit;
+ if ((KeyBuffer.CompareF(KTestMessageQuota)) == 0 ) return ETestMessageQuota;
+ if ((KeyBuffer.CompareF(KTestSizeQuota)) == 0 ) return ETestSizeQuota;
+ if ((KeyBuffer.CompareF(KTestMessageTotal)) == 0 ) return ETestMessageTotal;
+ if ((KeyBuffer.CompareF(KTestSizeTotal)) == 0 ) return ETestSizeTotal;
+ if ((KeyBuffer.CompareF(KTestMessageCount)) == 0 ) return ETestMessageCount;
+ if ((KeyBuffer.CompareF(KTestAddKeyword)) == 0 ) return ETestAddKeyword;
+ if ((KeyBuffer.CompareF(KTestRemoveKeyword)) == 0 ) return ETestRemoveKeyword;
+ if ((KeyBuffer.CompareF(KTestFilterKeyword)) == 0 ) return ETestFilterKeyword;
+ if ((KeyBuffer.CompareF(KTestMMState)) == 0 ) return ETestMMState;
+ if ((KeyBuffer.CompareF(KTestQuota)) == 0 ) return ETestQuota;
+ if ((KeyBuffer.CompareF(KTestStart)) == 0 ) return ETestStart;
+ if ((KeyBuffer.CompareF(KTestStore)) == 0 ) return ETestStore;
+ if ((KeyBuffer.CompareF(KTestStored)) == 0 ) return ETestStored;
+ if ((KeyBuffer.CompareF(KTestStoreStatus)) == 0 ) return ETestStoreStatus;
+ if ((KeyBuffer.CompareF(KTestStoreStatusText)) == 0 ) return ETestStoreStatusText;
+ if ((KeyBuffer.CompareF(KTestTotals)) == 0 ) return ETestTotals;
+ if ((KeyBuffer.CompareF(KTestDeleteInfoIndex)) == 0 ) return ETestDeleteInfoIndex;
+ if ((KeyBuffer.CompareF(KTestApplicId)) == 0 ) return ETestApplicId;
+ if ((KeyBuffer.CompareF(KTestReplyApplicId)) == 0 ) return ETestReplyApplicId;
+ if ((KeyBuffer.CompareF(KTestApplicInfo)) == 0 ) return ETestApplicInfo;
+ if ((KeyBuffer.CompareF(KTestContentClass)) == 0 ) return ETestContentClass;
+ if ((KeyBuffer.CompareF(KTestDrmContent)) == 0 ) return ETestDrmContent;
+ if ((KeyBuffer.CompareF(KTestAdaptationAllowed)) == 0 ) return ETestAdaptationAllowed;
+ if ((KeyBuffer.CompareF(KTestRecommendedRetrievalMode)) == 0 ) return ETestRecommendedRetrievalMode;
+ if ((KeyBuffer.CompareF(KTestRecRetrievalModeText)) == 0 ) return ETestRecRetrievalModeText;
+ if ((KeyBuffer.CompareF(KTestReplaceId)) == 0 ) return ETestReplaceId;
+ if ((KeyBuffer.CompareF(KTestStatusText)) == 0 ) return ETestStatusText;
+ if ((KeyBuffer.CompareF(KTestCancelId)) == 0 ) return ETestCancelId;
+ if ((KeyBuffer.CompareF(KTestCancelStatus)) == 0 ) return ETestCancelStatus;
+ if ((KeyBuffer.CompareF(KTestAttContTypeParamName)) == 0 ) return ETestAttContTypeParamName;
+ if ((KeyBuffer.CompareF(KTestAttContTypeParamValue)) == 0 ) return ETestAttContTypeParamValue;
+ if ((KeyBuffer.CompareF(KTestAttXTypeParamName)) == 0 ) return ETestAttXTypeParamName;
+ if ((KeyBuffer.CompareF(KTestAttXTypeParamValue)) == 0 ) return ETestAttXTypeParamValue;
+ return ETestUnknown;
+ }
+
+// ---------------------------------------------------------
+// CMmsReadFile()::CreateMessageL
+// program build a message from given parts
+// ---------------------------------------------------------
+//
+void CMmsReadFile::CreateMessageL( CMmsClientMtm* aMmsClient, CMmsHeaders* aMmsHeaders )
+ {
+
+ // Reset inactivity timer to keem viewServer from crashing
+ User::ResetInactivityTime();
+
+ TInt i;
+ TInt error = KErrNone;
+ RFile attaFile;
+ _LIT8(KLeftAngle, "<");
+ _LIT8(KRightAngle, ">");
+ // we can't use "seconds from" as it only returns a
+ // 32 bit signed integer. If fails in 2038.
+ // "microseconds from" returns a 64 bit signed integer
+
+ CMsvStore* store = aMmsClient->Entry().EditStoreL();
+ CleanupStack::PushL(store);
+ aMmsHeaders->StoreL(*store);
+ store->CommitL();
+ CleanupStack::PopAndDestroy( store );
+ store = NULL;
+
+ aMmsClient->LoadMessageL(); // read store is needed to do this
+
+ store = aMmsClient->Entry().EditStoreL();
+ CleanupStack::PushL(store);
+ CMsvAttachment* attaInfo = NULL;
+ TMsvAttachmentId attaId = 0;
+
+ for ( i=0; i < iAttaStructures->Count(); ++i)
+ {
+ attaId = KMsvNullIndexEntryId;
+ iFilename.Copy(iAttaStructures->At(i)->iAtta->Des());
+
+ error = attaFile.Open( iFs, iFilename, EFileShareReadersOnly | EFileRead );
+ User::LeaveIfError( error );
+
+ CleanupClosePushL(attaFile);
+
+ CMsvMimeHeaders* mimeHeaders = CMsvMimeHeaders::NewL();
+ CleanupStack::PushL( mimeHeaders );
+ TPtrC8 contentType = iAttaStructures->At(i)->iAttaType->Des();
+
+ TDataRecognitionResult result;
+ result.Reset(); // make sure that it is cleared
+
+ if(iAttaStructures->At(i)->iAttaCid->Length())
+ {
+ TPtr8 attaCID = iAttaStructures->At(i)->iAttaCid->Des();
+ if (attaCID.Find(KLeftAngle) == 0 &&
+ attaCID.Find(KRightAngle) == attaCID.Length()-1 )
+ {
+ // remove angle brackets from cid
+ attaCID = attaCID.Mid(1,attaCID.Length()-2);
+ }
+ mimeHeaders->SetContentIdL(attaCID);
+ }
+
+ if (iAttaStructures->At(i)->iAttaCharset)
+ {
+ mimeHeaders->SetMimeCharset(iAttaStructures->At(i)->iAttaCharset);
+ }
+
+ if (iAttaStructures->At(i)->iAttaName->Length())
+ {
+ iFilename.Copy(iAttaStructures->At(i)->iAttaName->Des());
+ }
+ iParse.Set( iFilename, NULL, NULL );
+ iFilename.Copy( iParse.NameAndExt() );
+
+ mimeHeaders->SetContentLocationL( iFilename );
+
+ // if Mime type has not been set, use RapaRecognizer
+ if ( iAttaStructures->At(i)->iAttaType->Length() == 0 && iFilename.Length() > 0)
+ {
+ // TO BE IMPLEMENTED
+
+ RApaLsSession lsSession;
+
+ if ( lsSession.Connect() == KErrNone )
+ {
+ CleanupClosePushL( lsSession );
+
+ iFilename.Copy(iAttaStructures->At(i)->iAtta->Des());
+ if ( lsSession.RecognizeData( iFilename, TPtrC8(), result ) == KErrNone )
+ {
+ // Check confidence level. Recognization must be at least
+ // "EProbable". We don't accept the result if it is "EPossible"
+ // or "EUnlikely" or "ENotRecognized"!
+
+ if ( result.iConfidence < CApaDataRecognizerType::EProbable )
+ {
+ result.Reset(); // clear buffer and try again with longer buffer
+ }
+
+ TPtrC8 mimeBuf8 = result.iDataType.Des8();
+
+ if ( mimeBuf8.Length() == 0 )
+ {
+ // Open file buffer and try again..
+
+ TInt bufSize = 0;
+ (void)lsSession.GetMaxDataBufSize( bufSize ); // ignore errors
+ if ( bufSize <= 0 )
+ {
+ bufSize = 30;
+ }
+ HBufC8* buf = HBufC8::NewLC( bufSize );
+ TPtr8 des = buf->Des();
+
+ RFile file;
+ TInt err=file.Open( iFs, iFilename, EFileShareReadersOnly );
+ if ( err == KErrNone )
+ {
+ err = file.Read( des );
+ file.Close();
+ if ( err == KErrNone )
+ {
+ if ( ( lsSession.RecognizeData( iFilename, des, result ) ) == KErrNone )
+ {
+ mimeBuf8.Set( result.iDataType.Des8() );
+ }
+ }
+
+ }
+ CleanupStack::PopAndDestroy(); // buf
+ }
+ if ( mimeBuf8.Length() > 0 &&
+ result.iConfidence >= CApaDataRecognizerType::EProbable )
+ {
+ contentType.Set( result.iDataType.Des8() );
+ }
+ }
+ CleanupStack::PopAndDestroy(1); // lssession
+ }
+ }
+
+ if ( contentType.Length() > 0 )
+ {
+ TInt position = contentType.Find( KMmsSlash8 );
+ if ( position >= 0 )
+ {
+ mimeHeaders->SetContentTypeL( contentType.Left( position ) );
+ }
+ if ( position < contentType.Length() - 1 )
+ {
+ mimeHeaders->SetContentSubTypeL( contentType.Mid( position + 1 ) );
+ }
+// CreateAttachment2L sets the content type to attaInfo
+// attaInfo->SetMimeTypeL( contentType );
+ }
+
+ if (iAttaStructures->At(i)->iAttaRecommendedName->Length())
+ {
+ iFilename.Copy(iAttaStructures->At(i)->iAttaRecommendedName->Des());
+ iParse.Set( iFilename, NULL, NULL );
+ iFilename.Copy( iParse.NameAndExt() );
+ mimeHeaders->SetSuggestedFilenameL( iFilename );
+ }
+
+ TInt j = 0;
+ for ( j = 0; j < iAttaStructures->At(i)->iContentTypeParams->MdcaCount(); ++j )
+ {
+ mimeHeaders->ContentTypeParams().AppendL( iAttaStructures->At(i)->iContentTypeParams->MdcaPoint( j ) );
+ }
+ for ( j = 0; j < iAttaStructures->At(i)->iXTypeParams->MdcaCount(); ++j )
+ {
+ mimeHeaders->XTypeParams().AppendL( iAttaStructures->At(i)->iXTypeParams->MdcaPoint( j ) );
+ }
+
+ attaInfo = CMsvAttachment::NewL(CMsvAttachment::EMsvFile);
+ // attaInfo does not go onto cleaunpstack because ownership will
+ // be transferred to attachment manager.
+
+ aMmsClient->CreateAttachment2L(
+ *store,
+ attaFile,
+ contentType,
+ *mimeHeaders,
+ attaInfo,
+ attaId);
+ attaInfo = NULL; // ownership transferred
+
+ CleanupStack::PopAndDestroy(); // mimeHeaders
+ CleanupStack::PopAndDestroy(); // attaFile.Close()
+
+ if ( iAttaRoot > 0 && iAttaRoot == ( i + 1 ) )
+ {
+ aMmsClient->SetMessageRootL( attaId );
+ }
+ }
+
+ store->CommitL();
+ CleanupStack::PopAndDestroy(); // store
+
+ // This frees all memory and resets all values
+ Reset();
+ // Reset inactivity timer to keem viewServer from crashing
+ User::ResetInactivityTime();
+ }
+
+
+// ---------------------------------------------------------
+// CMmsReadFile()::FindAlias
+// program build a message from given parts
+// ---------------------------------------------------------
+//
+TInt CMmsReadFile::FindAlias( TPtrC aAlias )
+ {
+ TBuf<DefaultBufLen> abuf;
+ for( TInt i=0; i < iAliasCount; ++i )
+ {
+ abuf.Copy( iAliasArray->MdcaPoint(i) );
+ abuf.SetLength( abuf.Locate('=') );
+ if( ( abuf.CompareF( aAlias ) ) == 0 ) return( i );
+ }
+ return( -1 );
+ }
+
+
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//
+CMmsAttaStructure::CMmsAttaStructure()
+ {
+ iAtta = NULL;
+ iAttaType = NULL;
+ iAttaName = NULL;
+ iAttaCid = NULL;
+ iAttaRecommendedName = NULL;
+ }
+
+
+//
+void CMmsAttaStructure::ConstructL()
+ {
+ iAtta = HBufC8::NewL(DefaultBufLen);
+ iAttaType = HBufC8::NewL(DefaultBufLen);
+ iAttaName = HBufC8::NewL(DefaultBufLen);
+ iAttaCid = HBufC8::NewL(DefaultBufLen);
+ iAttaRecommendedName = HBufC::NewL(DefaultBufLen);
+ iAttaCharset = 0;
+ iXTypeParams = new(ELeave) CDesC8ArrayFlat(4);
+ iContentTypeParams = new(ELeave) CDesC8ArrayFlat(4);
+
+ }
+
+// Two-phased constructor.
+CMmsAttaStructure* CMmsAttaStructure::NewL()
+ {
+ CMmsAttaStructure* self = new ( ELeave ) CMmsAttaStructure;
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+// Destructor
+CMmsAttaStructure::~CMmsAttaStructure()
+ {
+ delete iAtta;
+ delete iAttaName;
+ delete iAttaType;
+ delete iAttaCid;
+ delete iAttaRecommendedName;
+ if ( iContentTypeParams )
+ {
+ iContentTypeParams->Reset();
+ }
+ delete iContentTypeParams;
+ if ( iXTypeParams )
+ {
+ iXTypeParams->Reset();
+ }
+ delete iXTypeParams;
+ }
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditormmsplugin/tsrc/mmstestbed/src/mmstestbed.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,2357 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ */
+
+#include <mtmdef.h>
+#include <CoreApplicationUIsSDKCRKeys.h>
+#include <mmsheaders.h>
+#include <mmscmds.h>
+#include <mmsencode.h>
+#include <mmscliententry.h>
+#include <logwrap.h>
+#include <logcli.h>
+#include <logview.h>
+#include "mmssettings.h" //use mmssettings.h instead of cmmssettings.h
+#include "mmstestbed.h"
+#include "mmsreadfile.h"
+#include "mmstestuitimer.h"
+#include "mmsteststaticutils.h"
+#include "mmstestbed.hrh"
+
+//constants
+_LIT( KMmsSender, "0601234567" );
+
+MmsTestBed::MmsTestBed()
+ {
+ //start the timer
+ iTimer = CTestUiTimer::NewL();
+ iTimer->Cancel();
+
+ iWait = CMsvOperationActiveSchedulerWait::NewLC();
+ // don't leave iWait on cleanup stack
+ CleanupStack::Pop();
+
+ //open msvsession
+ iSession = CMsvSession::OpenSyncL(*this);
+ //create client registry
+ iClientMtmRegistry = CClientMtmRegistry::NewL(*iSession);
+ //create client mtm
+ iMmsClient = (CMmsClientMtm *) iClientMtmRegistry->NewMtmL(
+ KUidMsgTypeMultimedia);
+
+ User::LeaveIfError( iFs.Connect() );
+ iFs.SetSessionPath( KRootPath );
+ iSettings = CMmsSettings::NewL();
+ iMmsHeaders = CMmsHeaders::NewL(iSettings->MmsVersion());
+ findDefaultL();
+ iServiceId = iDefaultServiceId;
+
+ //validate the settings
+ iSettings->ValidateSettings();
+
+ iLogEvent = CLogEvent::NewL();
+ iLogEvent->SetEventType(KLogMmsEventTypeUid);
+ iLogClient = NULL; // we test soon if this is available
+ iLogView = NULL; // needs log client
+ if ( checkLogClient() )
+ {
+ // first we generate a general view of all events
+ // we'll set the filter when we update the view
+ iLogView = CLogViewEvent::NewL( *iLogClient );
+ }
+ iLogFilter = CLogFilter::NewL();
+ // we try to filter MMS events
+ iLogFilter->SetEventType(KLogMmsEventTypeUid);
+ }
+
+MmsTestBed::~MmsTestBed()
+ {
+ delete iLogView;
+ delete iLogFilter;
+ delete iLogClient;
+ delete iLogEvent;
+ delete iSettings;
+ delete iMmsHeaders;
+ if(iTimer)
+ {
+ iTimer->Cancel();
+ delete iTimer;
+ }
+ //delete iMsvEntrySelection;
+ delete iMmsClient;
+ delete iClientMtmRegistry;
+ //delete iClientMtmRegistry;
+ delete iSession;
+ delete iWait;
+ }
+
+void MmsTestBed::setConnectionLocal(bool value)
+ {
+ //value = true for global off, local on
+ //value = false for global on, local off
+ iSettings->LoadSettingsL();
+ iSettings->SetLocalMode( value );
+ iSettings->SaveSettingsL();
+ }
+
+void MmsTestBed::fromOutboxToMmsc()
+ {
+ CMsvEntry* cEntry = NULL;
+
+ // Get List of services
+ cEntry = iSession->GetEntryL(KMsvGlobalOutBoxIndexEntryIdValue);
+ CleanupStack::PushL(cEntry);
+ // Get all mms messages of outbox
+ CMsvEntrySelection* selection = cEntry->ChildrenWithMtmL(
+ KUidMsgTypeMultimedia);
+ CleanupStack::PushL(selection);
+
+ // Change state to "KMsvSendStateUnknown" in case the entry has been suspended earlier
+ for (TInt i = 0; i < selection->Count(); ++i)
+ {
+ cEntry->SetEntryL(selection->At(i));
+ TMsvEntry entry = cEntry->Entry();
+ entry.SetReadOnly(EFalse);
+ entry.SetSendingState(KMsvSendStateUnknown);
+ cEntry->ChangeL(entry);
+ }
+
+ selection->InsertL(0, iServiceId);
+
+ CMsvOperation * op = NULL;
+ TCommandParameters parameters; // initialized to zero
+ TCommandParametersBuf paramPack(parameters);
+
+ op = iSession->TransferCommandL(*selection, EMmsSend, paramPack,
+ iWait->iStatus);
+
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending)
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ if (iWait->iStatus.Int() != KErrNone)
+ {
+ //DEBUG(_L("Testbed tried to send, return status %d"), iWait->iStatus.Int());
+ }
+
+ iTimer->Cancel();
+
+ CleanupStack::PopAndDestroy(); // op
+ CleanupStack::PopAndDestroy(); // selection
+ CleanupStack::PopAndDestroy(); //cEntry
+ }
+
+void MmsTestBed::fromMmscToInbox()
+ {
+ CMsvEntrySelection* msvEntrySelection = new CMsvEntrySelection;
+ CleanupStack::PushL(msvEntrySelection);
+
+ // if we have a selected service, insert it into selection
+ if (iServiceId != KMsvNullIndexEntryId)
+ {
+ msvEntrySelection->InsertL(0, iServiceId);
+ }
+
+ CMsvOperation * op = NULL;
+ TCommandParameters parameters; // initialized to zero
+ TCommandParametersBuf paramPack(parameters);
+
+ op = iMmsClient->InvokeAsyncFunctionL(EMmsReceive, *msvEntrySelection,
+ paramPack, iWait->iStatus);
+
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending)
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ if (iWait->iStatus.Int() != KErrNone)
+ {
+ //DEBUG(_L("Testbed tried to receive, return status %d"),iWait->iStatus.Int());
+ }
+
+ iTimer->Cancel();
+ CleanupStack::PopAndDestroy(); // op
+ CleanupStack::PopAndDestroy(); //msvEntrySelection
+ }
+
+void MmsTestBed::findDefaultL()
+ {
+ iSettings->LoadSettingsL();
+ iDefaultServiceId = iSettings->Service();
+ }
+
+void MmsTestBed::HandleSessionEventL(TMsvSessionEvent aEvent, TAny* aArg1,
+ TAny* aArg2, TAny* /*aArg3*/)
+ {
+ iEvent = aEvent;
+ if (aEvent == EMsvGeneralError)
+ {
+ return;
+ }
+ TMsvId parentId = KMsvNullIndexEntryId;
+ if (aArg2 != NULL)
+ {
+ parentId = *(TMsvId*) aArg2;
+ }
+
+ CMsvEntrySelection* selection = (CMsvEntrySelection*) aArg1;
+ TMsvEntry tEntry;
+ TMsvId service;
+ TInt error = KErrNone;
+ error = iSession->GetEntry(selection->At(0), service, tEntry);
+
+ CMsvEntry* cEntry = NULL;
+ switch (aEvent)
+ {
+ case EMsvEntriesCreated:
+ {
+ if (parentId == KMsvGlobalInBoxIndexEntryIdValue)
+ {
+ // emit signal for new entry into INBOX
+ emit entryCreatedInInbox(tEntry.Id());
+ }
+ else if (parentId == KMsvDraftEntryIdValue)
+ {
+ // emit signal for new entry into Draft
+ emit entryCreatedInDraft(tEntry.Id());
+ }
+ else if (parentId == iServiceId)
+ {
+ // emit signal for new Entry into SERVICE
+ }
+ else
+ {
+ // do nothing
+ }
+ }
+ break;
+ case EMsvEntriesChanged:
+ {
+ TMsvId id;
+ CMsvEntrySelection* selection = (CMsvEntrySelection*) aArg1;
+ if (selection == NULL)
+ {
+ // no selection, cannot handle
+ return;
+ }
+ id = selection->At(0);
+ //DEBUG Entry changed"));
+ if (parentId == KMsvGlobalInBoxIndexEntryIdValue)
+ {
+/*
+ cEntry = iSession->GetEntryL( parentId );
+ CleanupStack::PushL( cEntry );
+ TRAPD (error, cEntry->SetEntryL( id ));
+ if ( error != KErrNone )
+ {
+ CleanupStack::PopAndDestroy(); // cEntry
+ return;
+ }
+ TMsvEntry tEntry = cEntry->Entry();
+ if ( tEntry.Visible() )
+ {
+ // generate fake delivery report
+ CMsvStore* store = cEntry->ReadStoreL();
+ CleanupStack::PushL( store );
+ CMmsHeaders* mmsHeaders = CMmsHeaders::NewL( iSettings->MmsVersion() );
+ CleanupStack::PushL( mmsHeaders );
+ mmsHeaders->RestoreL( *store );
+ iEncodeBuffer->ResizeL( 0 );
+ generateDeliveryReport( mmsHeaders );
+ CleanupStack::PopAndDestroy( 2 ); // mmsHeaders, store
+ }
+ CleanupStack::PopAndDestroy(); // cEntry
+*/
+ }
+ }
+ break;
+ case EMsvEntriesDeleted:
+ {
+ //emit signal for entry deleted
+ }
+ break;
+ case EMsvEntriesMoved:
+ {
+ if (parentId == KMsvGlobalOutBoxIndexEntryIdValue)
+ {
+ // entry moved to outbox
+ emit entryMovedToOutbox(tEntry.Id());
+ }
+ else if (parentId == KMsvSentEntryIdValue)
+ {
+ // entry moved to sent folder
+ emit entryMovedToSent(tEntry.Id());
+ }
+ else
+ {
+ // do nothing
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+void MmsTestBed::createMmsService()
+ {
+ CMmsSettings * settings = CMmsSettings::NewL();
+ CleanupStack::PushL( settings );
+ settings->CreateNewServiceL( *iSession );
+ CleanupStack::PopAndDestroy(); // settings
+ return;
+ }
+
+void MmsTestBed::cleanup()
+ {
+ TMsvId entryToBeKilled;
+ // Get access to root index
+ CMsvEntry* cEntry = iSession->GetEntryL(KMsvRootIndexEntryId);
+ CleanupStack::PushL(cEntry);
+
+ entryToBeKilled = iSettings->Service();
+ cEntry->SetSortTypeL( TMsvSelectionOrdering( KMsvNoGrouping, EMsvSortByNone, ETrue ) );
+ while (entryToBeKilled != KMsvNullIndexEntryId)
+ {
+ // delete child of root entry
+ deleteEntry(entryToBeKilled, *cEntry);
+ entryToBeKilled = iSettings->Service();
+ }
+
+ CleanupStack::PopAndDestroy(); // cEntry
+ // We deleted everything!
+ iDefaultServiceId = KMsvNullIndexEntryId;
+ iServiceId = KMsvNullIndexEntryId;
+ }
+
+void MmsTestBed::deleteEntry(TMsvId aEntryId, CMsvEntry& aClientEntry)
+ {
+ aClientEntry.DeleteL(aEntryId);
+ }
+
+void MmsTestBed::cleanupAndCreateNewService()
+ {
+ cleanup();
+ // all old service entries have been destroyed, create a new one
+ createMmsService();
+ }
+
+void MmsTestBed::testFile(TFileName& aFilePath, TInt aCommand /* = 0 */, TMsvId aBox /* = KMsvGlobalOutBoxIndexEntryId */ )
+ {
+ // update settings in mmsclient
+ iMmsClient->RestoreSettingsL();
+ iSettings->CopyL( iMmsClient->MmsSettings() );
+
+ RFileReadStream readStream;
+ readStream.PushL();
+// TMsvId id = KMsvNullIndexEntryId;
+ CBufFlat* encodeBuffer = NULL;
+ CMmsEncode* encoder = NULL;
+
+ // Open the file
+ TInt err = readStream.Open(iFs, aFilePath, EFileShareReadersOnly );
+ if (err != KErrNone) User::Leave( err );
+
+ TInt retCode = 0;
+ CMmsReadFile* readFile = NULL;
+ readFile = CMmsReadFile::NewL( iFs, readStream );
+ CleanupStack::PushL( readFile );
+
+ TInt messageCounter = 0;
+ CMsvEntry* cEntry = NULL;
+
+ while(!retCode)
+ {
+ // READ MESSAGE TO BUFFERS
+ iMmsHeaders->Reset(iSettings);
+ // put in some message type just for fun (testing...)
+ iMmsHeaders->SetMessageType( KMmsMessageTypeForwardReq );
+ retCode = readFile->CompleteTestL( messageCounter++, *iMmsHeaders );
+ if(readFile->iMessageType == ETestNewMessage)
+ {
+ // CREATE MESSAGE ENTRY
+ switch ( aCommand )
+ {
+ case ECreateToInbox:
+ case ECreateNotification:
+ cEntry = iSession->GetEntryL(KMsvGlobalInBoxIndexEntryId);
+ break;
+ case ECreateToSentItems:
+ cEntry = iSession->GetEntryL(KMsvSentEntryId);
+ break;
+ case ECreateToDrafts:
+ cEntry = iSession->GetEntryL(KMsvDraftEntryId);
+ break;
+ case ECreateHeadersFromFile:
+ // here we just encode headers, no message entry
+ // the entry is fake.
+ break;
+ case ECreateMMBoxViewConf:
+ if ( iMmsHeaders->MessageType() == KMmsMessageTypeMboxViewConf )
+ {
+ // entry is not created for the description items
+ // they become attachments
+ cEntry = iSession->GetEntryL(KMsvDraftEntryId);
+ }
+ break;
+ default:
+ cEntry = iSession->GetEntryL(aBox);
+ break;
+ }
+
+ // if we are just playing with headers we have no entry
+ if ( aCommand != ECreateHeadersFromFile && aCommand != ECreateMMBoxViewConf )
+ {
+ CleanupStack::PushL(cEntry);
+ iMmsClient->SwitchCurrentEntryL(cEntry->EntryId());
+
+ // CREATE MESSAGE
+ iMmsClient->CreateMessageL(iServiceId);
+ }
+ else if ( aCommand == ECreateMMBoxViewConf )
+ {
+ if ( iMmsHeaders->MessageType() == KMmsMessageTypeMboxViewConf )
+ {
+ CleanupStack::PushL(cEntry);
+ iMmsClient->SwitchCurrentEntryL(cEntry->EntryId());
+
+ // CREATE MESSAGE
+ iMmsClient->CreateMessageL(iServiceId);
+ }
+ else
+ {
+ encodeBuffer = CBufFlat::NewL( 4 * 1024 ); // should be plenty
+ CleanupStack::PushL( encodeBuffer );
+ encoder = CMmsEncode::NewL( iFs );
+ CleanupStack::PushL( encoder );
+
+ // encode headers to a binary file
+ encoder->EncodeHeadersL( *iMmsHeaders, *encodeBuffer );
+
+ iFilename = KMmsMMBoxDescriptionDirectory;
+ TMmsTestUtils::Dump( *encodeBuffer, iFilename, iParse, iFs );
+
+ CleanupStack::PopAndDestroy( 2 ); // encodeBuffer, encoder
+ encodeBuffer = NULL;
+ encoder = NULL;
+ }
+ }
+ else
+ {
+ encodeBuffer = CBufFlat::NewL( 4 * 1024 ); // should be plenty
+ CleanupStack::PushL( encodeBuffer );
+ encoder = CMmsEncode::NewL( iFs );
+ CleanupStack::PushL( encoder );
+
+ // encode headers to a binary file
+ encoder->EncodeHeadersL( *iMmsHeaders, *encodeBuffer );
+
+ iFilename = KMmsDumpDirectory;
+ TMmsTestUtils::Dump( *encodeBuffer, iFilename, iParse, iFs );
+
+ CleanupStack::PopAndDestroy( 2 ); // encodeBuffer, encoder
+ encodeBuffer = NULL;
+ encoder = NULL;
+ }
+ }
+
+ if ( aCommand != ECreateHeadersFromFile &&
+ ( aCommand != ECreateMMBoxViewConf || iMmsHeaders->MessageType() == KMmsMessageTypeMboxViewConf ) )
+ {
+ if(readFile->iMessageType == ETestSettings)
+ {
+ TMsvId ServiceId = iMmsClient->DefaultServiceL();
+ iMmsClient->RestoreSettingsL();
+ iSettings->CopyL( iMmsClient->MmsSettings() );
+ }
+
+ TMemoryInfoV1Buf memory;
+ UserHal::MemoryInfo( memory );
+ TInt available = memory().iFreeRamInBytes;
+// TMmsLogger::Log(_L("Free memory before CreateMessageL %d"), available );
+
+ TRAP (err, readFile->CreateMessageL(iMmsClient, iMmsHeaders));
+
+ available = memory().iFreeRamInBytes;
+// TMmsLogger::Log(_L("Free memory after CreateMessageL %d"), available );
+
+ if(readFile->iMessageType == ETestNewMessage)
+ {
+ TMsvEntry tEntry = iMmsClient->Entry().Entry();
+ TMsvId id = tEntry.Id();
+ if ( err == KErrNone )
+ {
+ // SAVE MESSAGE
+ iMmsClient->SaveMessageL();
+
+ // If we are creating a MMBox View confirmation,
+ // we add all binary files from KMmsMMBoxDirectory
+ // as attachments.
+
+ if ( iMmsHeaders->MessageType() == KMmsMessageTypeMboxViewConf )
+ {
+ addMMBoxDescriptions();
+ }
+
+ // reload the entry in case mms client put something into it
+ // MESSAGE MUST BE SET VISIBLE
+ tEntry = iMmsClient->Entry().Entry();
+ if ( iMmsClient->MessageClass() == EMmsClassAdvertisement )
+ {
+ tEntry.iMtmData1 |= KMmsMessageAdvertisement;
+ }
+ else if ( iMmsClient->MessageClass() == EMmsClassInformational )
+ {
+ tEntry.iMtmData1 |= KMmsMessageInformational;
+ }
+ tEntry.iMtmData1 &= ~KMmsMessageMobileTerminated;
+
+ // Test: Set all as editor oriented - except notifications!
+ if ( aCommand == ECreateNotification )
+ {
+ tEntry.iMtm = KUidMsgMMSNotification;
+ }
+ else
+ {
+ tEntry.iMtmData1 |= KMmsMessageEditorOriented;
+ }
+ if ( aCommand == ECreateToInbox )
+ {
+ tEntry.iMtmData1 |= KMmsMessageMobileTerminated;
+ tEntry.SetReadOnly( ETrue );
+ tEntry.SetNew( ETrue );
+ tEntry.SetUnread( ETrue );
+ }
+ else if ( aCommand == ECreateToSentItems )
+ {
+ tEntry.SetReadOnly( ETrue );
+ }
+ tEntry.SetVisible( ETrue );
+ tEntry.SetInPreparation( EFalse );
+ TTime now;
+ now.UniversalTime();
+ tEntry.iDate = now;
+ TMsvId entryId = tEntry.Id();
+ iMmsClient->Entry().ChangeL( tEntry );
+ if ( iMmsHeaders->MessageType() == KMmsMessageTypeMboxViewConf )
+ {
+ // Encode to the directory that is used to fetch MMBox view
+ iFilename.Copy( KMmsMMBoxDirectory );
+ encodeMessageFromDrafts();
+ cEntry->SetEntryL( KMsvDraftEntryId );
+ cEntry->DeleteL( entryId );
+ }
+ }
+ else
+ {
+ //TMmsLogger::Log(_L("CreateMessageL left with error %d"), err );
+ iSession->RemoveEntry(id);
+ err = KErrNone; // clear error
+ }
+ CleanupStack::PopAndDestroy(); // cEntry
+ cEntry = NULL;
+ }
+ if(readFile->iMessageType == ETestSettings)
+ {
+ iMmsClient->SetSettingsL( *iSettings );
+ iMmsClient->StoreSettingsL();
+ }
+ }
+ }
+
+ CleanupStack::PopAndDestroy(); //readFile
+
+ readStream.Close();
+ readStream.Pop();
+
+ /*
+ iMmsClient->SwitchCurrentEntryL(id);
+ */
+ }
+
+void MmsTestBed::addMMBoxDescriptions()
+ {
+ // add the contents of KMmsMMBoxDescriptionDirectory as attachments
+ CDir* fileList = NULL;
+ TInt i = 0; // general counter
+ TInt error = KErrNone;
+ iCurrentPath = KMmsMMBoxDescriptionDirectory;
+
+ iFs.SetSessionPath(iCurrentPath);
+
+ TFindFile finder( iFs );
+ error = finder.FindWildByPath( KWild, NULL, fileList );
+ CleanupStack::PushL( fileList );
+ TInt fileCounter = 0;
+
+ if ( error == KErrNone )
+ {
+ fileCounter = fileList->Count();
+ }
+
+ TEntry entry;
+
+ if ( error == KErrNone )
+ {
+ for ( i = 0; i < fileCounter; ++i )
+ {
+ // Reset inactivity timer to keep viewServer from crashing
+ User::ResetInactivityTime();
+ entry = (*fileList)[i]; // name is entry.iName
+ iFilename.Copy( iCurrentPath );
+ iFilename.Append( entry.iName );
+ TPtrC ptr;
+ ptr.Set( iFilename );
+ iWait->iStatus = KErrNone;
+ iMmsClient->AddAttachmentL( ptr, KMmsMimeType, 0, iWait->iStatus );
+
+ iWait->Start();
+ // The descriptions are cleared after being used
+ iFs.Delete( ptr);
+ }
+ }
+
+ iMmsClient->SaveMessageL(); // just in case somthing must be updated
+ CleanupStack::PopAndDestroy(); // fileList
+ fileList = NULL;
+ }
+
+void MmsTestBed::encodeMessageFromDrafts()
+ {
+ CMmsEncode* encoder = CMmsEncode::NewL( iFs );
+ CleanupStack::PushL( encoder );
+ // encode a message iMmsClientPoints to
+ iMmsClient->LoadMessageL();
+ CMsvStore* store = iMmsClient->Entry().ReadStoreL();
+ CleanupStack::PushL( store );
+ iMmsHeaders->RestoreL( *store );
+ CleanupStack::PopAndDestroy(); // store
+ store = NULL;
+ iWait->iStatus = KErrNone;
+
+// caller sets the directory
+// iFilename = KMmsMessageDumpDirectory;
+
+ CMmsClientEntry* entryWrapper = CMmsClientEntry::NewL( iFs, iMmsClient->Entry(), iServiceId );
+ CleanupStack::PushL( entryWrapper );
+ iEncodeBuffer->ResizeL(0);
+ encoder->StartL( *entryWrapper, *iMmsHeaders, *iEncodeBuffer, iWait->iStatus );
+ iWait->Start();
+ if ( iWait->iStatus == KErrNone )
+ {
+ TMmsTestUtils::Dump( *iEncodeBuffer, iFilename, iParse, iFs );
+ }
+ iEncodeBuffer->ResizeL(0);
+ CleanupStack::PopAndDestroy(); // entryWrapper
+ CleanupStack::PopAndDestroy(); // encoder
+ }
+
+void MmsTestBed::deleteNotifications()
+ {
+ TMsvId mmsFolderId = KMsvNullIndexEntryId;
+ mmsFolderId = findMMSFolder();
+
+ CMsvEntry* cEntry = NULL;
+ // delete all messages from the specified box
+ cEntry = iSession->GetEntryL(KMsvRootIndexEntryId);
+ CleanupStack::PushL(cEntry);
+
+ if ( mmsFolderId != KMsvNullIndexEntryId )
+ {
+ cEntry->SetEntryL(mmsFolderId);
+
+ // show invisible entries
+ cEntry->SetSortTypeL( TMsvSelectionOrdering( KMsvNoGrouping, EMsvSortByNone, ETrue ) );
+ CMsvEntrySelection* msvEntrySelection = cEntry->ChildrenWithMtmL(KUidMsgTypeMultimedia);
+ CleanupStack::PushL(msvEntrySelection);
+
+ TCommandParameters parameters; // initialized to zero
+ TCommandParametersBuf paramPack( parameters );
+
+ if (msvEntrySelection->Count() > 0)
+ {
+ CMsvOperation* op = iSession->TransferCommandL(
+ *msvEntrySelection,
+ EMmsDeleteEntries,
+ paramPack,
+ iWait->iStatus);
+ CleanupStack::PushL(op);
+ iWait->Start();
+ CleanupStack::PopAndDestroy(); // op
+ }
+
+ // These cannot be deleted unless we have the a server mtm
+ // corresponding to this mtm type.
+ cEntry->SetSortTypeL( TMsvSelectionOrdering( KMsvNoGrouping, EMsvSortByNone, ETrue ) );
+ CleanupStack::PopAndDestroy(); //msvEntrySelection
+ msvEntrySelection = cEntry->ChildrenWithMtmL( KUidMsgMMSNotification );
+ CleanupStack::PushL(msvEntrySelection);
+
+ if (msvEntrySelection->Count() > 0)
+ {
+ CMsvOperation* op = iSession->TransferCommandL(
+ *msvEntrySelection,
+ EMmsDeleteEntries,
+ paramPack,
+ iWait->iStatus);
+ CleanupStack::PushL(op);
+ iWait->Start();
+ CleanupStack::PopAndDestroy(); // op
+ }
+
+ CleanupStack::PopAndDestroy(); //msvEntrySelection
+
+ CleanupStack::PopAndDestroy(); //cEntry
+ }
+ }
+
+TMsvId MmsTestBed::findMMSFolder()
+ {
+ return iSettings->NotificationFolder();
+ }
+
+void MmsTestBed::restoreFactorySettings()
+ {
+ iMmsClient->RestoreSettingsL();
+ iSettings->CopyL( iMmsClient->MmsSettings() );
+ // do not reset access point
+ TInt accessPoint = iSettings->AccessPoint( 0 );
+ iSettings->RestoreFactorySettingsL( iMmsClient->Session(), EMmsFactorySettingsLevelDeep );
+ TInt count = iSettings->AccessPointCount();
+ TInt i = 0;
+ for ( i = count - 1; i >= 0; --i )
+ {
+ iSettings->DeleteAccessPointL( i );
+ }
+ // restore the original access point
+ if ( accessPoint > 0 )
+ {
+ // a negative access point is an error (most likely "KErrNotFound")
+ iSettings->AddAccessPointL( accessPoint, 0 );
+ }
+ iMmsClient->SetSettingsL( *iSettings );
+ iMmsClient->StoreSettingsL();
+ }
+
+void MmsTestBed::setFetchingState( TMmsReceivingMode aState )
+ {
+ iMmsClient->RestoreSettingsL();
+ iSettings->CopyL( iMmsClient->MmsSettings() );
+
+ iSettings->SetReceivingModeHome( aState );
+
+ iMmsClient->SetSettingsL( *iSettings );
+ iMmsClient->StoreSettingsL();
+ }
+
+void MmsTestBed::sendFromFile()
+ {
+ CMsvOperation * op = NULL;
+
+ CMsvEntry* cEntry = iSession->GetEntryL(KMsvGlobalOutBoxIndexEntryId);
+ CleanupStack::PushL( cEntry );
+
+ CMsvEntrySelection* selection = NULL;
+ selection = cEntry->ChildrenWithMtmL(KUidMsgTypeMultimedia);
+ CleanupStack::PopAndDestroy(); // cEntry
+ CleanupStack::PushL( selection );
+
+ TRAPD (error, op = iMmsClient->SendL(*selection, iWait->iStatus));
+ if ( error != KErrNone )
+ {
+ CleanupStack::PopAndDestroy(); // selection
+ delete op;
+ return;
+ }
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ if ( iWait->iStatus.Int() != KErrNone )
+ {
+ //TMmsLogger::Log(_L("Testbed tried to send, return status %d"), iWait->iStatus.Int());
+ }
+
+ iTimer->Cancel();
+ CleanupStack::PopAndDestroy(2); // op, selection
+ }
+
+void MmsTestBed::sendOneByOne()
+ {
+ CMsvEntry* cEntry = iSession->GetEntryL(KMsvGlobalOutBoxIndexEntryId);
+ CleanupStack::PushL( cEntry );
+
+ CMsvEntrySelection* selection = NULL;
+ selection = cEntry->ChildrenWithMtmL(KUidMsgTypeMultimedia);
+ CleanupStack::PushL( selection );
+
+ CMsvEntrySelection* shortSelection = new (ELeave) CMsvEntrySelection;
+ CleanupStack::PushL( shortSelection );
+
+ TInt i;
+
+ for ( i = 0; i < selection->Count(); ++i )
+ {
+ shortSelection->Reset();
+ shortSelection->AppendL( selection->At( i ) );
+
+ CMsvOperation * op = NULL;
+
+ TTime now;
+ now.UniversalTime();
+
+ TRAPD (error, op = iMmsClient->SendL(*shortSelection, iWait->iStatus, now ));
+ if ( error != KErrNone )
+ {
+ delete op;
+ CleanupStack::PopAndDestroy( 3 ); // entry, selection, shortSelection
+ return;
+ }
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ if ( iWait->iStatus.Int() != KErrNone )
+ {
+ //TMmsLogger::Log(_L("Testbed tried to send, return status %d"), iWait->iStatus.Int());
+ }
+
+ iTimer->Cancel();
+ CleanupStack::PopAndDestroy(); // op
+
+ }
+ CleanupStack::PopAndDestroy( 3 ); // entry, selection, shortSelection
+ }
+
+void MmsTestBed::sendNotifications()
+ {
+ // Only send one notification!!
+
+ TInt error = KErrNone;
+
+ if (! TMmsTestUtils::IsFile(iCurrentFile, iFs) )
+ {
+ //Not a file
+ return;
+ }
+ TMsvId mmsFolder = findMMSFolder();
+
+ TEntry entry;
+
+
+ // now I think we have a filename
+ TEntry orgEntry;
+ TUint size = 0;
+ error = iFs.Entry( iCurrentFile, orgEntry );
+ size = orgEntry.iSize;
+
+ //TMmsLogger::Log(_L("- notification %S "), &iCurrentFile);
+ if ( size == 0 )
+ {
+ //empty file
+ //TMmsLogger::Log(_L("- empty file"));
+ return;
+ }
+
+ if ( iEncodeBuffer == NULL )
+ {
+ iEncodeBuffer = CBufFlat::NewL( size );
+ }
+ else
+ {
+ iEncodeBuffer->ResizeL( 0 );
+ iEncodeBuffer->ResizeL( size );
+ }
+
+ RFile inFile;
+ error = inFile.Open( iFs, iCurrentFile, EFileShareReadersOnly );
+ TPtr8 ptr = iEncodeBuffer->Ptr( 0 );
+ if ( error == KErrNone )
+ {
+ error = inFile.Read( ptr, size );
+ inFile.Close();
+ }
+ else
+ {
+ //Error
+ //TMmsLogger::Log(_L("- can't read file"));
+ return;
+ }
+
+ TUint8 byte;
+ TUint position = 0;
+ TUint32 uintvar = 0;
+
+ if ( size > 2 )
+ {
+ iEncodeBuffer->Read( 1, &byte, 1 );
+ if ( byte == 6 ) // PUSH PDU
+ {
+ // try to find out length of header
+ position = 2;
+ iEncodeBuffer->Read( position, &byte, 1);
+
+ while ( byte & 0x80 && position < size )
+ {
+ uintvar += ( byte & 0x7f );
+ uintvar <<= 7;
+ position++;
+ iEncodeBuffer->Read( position, &byte, 1 );
+ }
+
+ // add last byte without shift
+ uintvar += byte;
+ position++;
+ }
+ }
+
+ position += uintvar;
+
+ if ( position < size )
+ {
+ ptr = iEncodeBuffer->Ptr( position );
+ size = ptr.Length();
+ }
+
+ if ( size == 0 )
+ {
+ //no MMS stuff
+ //TMmsLogger::Log(_L("- no MMS stuff"));
+ return;
+ }
+
+ TMsvId entryId = TMmsTestUtils::CreateNotificationEntryL( mmsFolder, iServiceId, iEncodeBuffer, *iSession );
+
+ // Now we have streamed our data into this entry.
+ // Now we have an entry that says: local service, MMS MTM
+ CMsvEntrySelection* selection = new (ELeave) CMsvEntrySelection;
+ CleanupStack::PushL( selection );
+ if ( entryId != KMsvNullIndexEntryId )
+ {
+ selection->AppendL( entryId );
+ }
+ else
+ {
+ selection->AppendL( iDefaultServiceId );
+ }
+
+ TWatcherParameters parameters; // initialized to zero
+ parameters.iWatcherId = RThread().Id();
+ parameters.iDataPointer = &ptr;
+ TWatcherParametersBuf paramPack( parameters );
+
+ CMsvOperation * op = NULL;
+
+ op = iSession->TransferCommandL(
+ *selection, EMmsDecodePushedMessage, paramPack, iWait->iStatus );
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ iTimer->Cancel();
+ User::After(1000000);
+
+ CleanupStack::PopAndDestroy(); // op
+ CleanupStack::PopAndDestroy(); // selection
+ }
+
+void MmsTestBed::copyDrafts()
+ {
+ CMsvEntry* cEntry = NULL;
+// Copies contents of sent folder to drafts for retrying sending.
+
+ cEntry = iSession->GetEntryL(KMsvSentEntryId);
+ CleanupStack::PushL(cEntry);
+ // Get all mms messages in drafts
+ CMsvEntrySelection* selection = cEntry->ChildrenWithMtmL( KUidMsgTypeMultimedia );
+ CleanupStack::PushL( selection );
+
+ TMsvLocalOperationProgress progress;
+ cEntry->CopyL( *selection, KMsvDraftEntryId, progress );
+
+ TInt i = 0;
+ for ( i = 0; i < selection->Count(); ++i )
+ {
+ cEntry->SetEntryL( selection->At( i ) );
+ TMsvEntry entry = cEntry->Entry();
+ entry.SetReadOnly( EFalse );
+ cEntry->ChangeL( entry );
+ }
+
+ CleanupStack::PopAndDestroy(2); // selection, cEntry
+ }
+
+void MmsTestBed::garbageCollection(TUint32 aReason)
+ {
+ CMsvEntrySelection* selection = new (ELeave) CMsvEntrySelection;
+ CleanupStack::PushL( selection );
+ selection->InsertL(0, iDefaultServiceId);
+
+ CMsvOperation * op = NULL;
+
+ TMMSGarbageCollectionParameters parameters; // initialized to zero
+ parameters.iReasonFlags = aReason;
+ TMMSGarbageCollectionParametersBuf paramPack( parameters );
+ op = iSession->TransferCommandL(
+ *selection, EMmsGarbageCollection, paramPack, iWait->iStatus );
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ iTimer->Cancel();
+
+ CleanupStack::PopAndDestroy(); // op
+ CleanupStack::PopAndDestroy(); // selection
+ }
+
+void MmsTestBed::messageVariation()
+ {
+ CMsvEntrySelection* selection = new (ELeave) CMsvEntrySelection;
+ CleanupStack::PushL( selection );
+ selection->InsertL(0, iDefaultServiceId);
+
+ CMsvOperation * op = NULL;
+
+ op = iSession->TransferCommandL(
+ *selection, EMmsMessageGeneration, TPtrC8(), iWait->iStatus );
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ iTimer->Cancel();
+
+ CleanupStack::PopAndDestroy(); // op
+ CleanupStack::PopAndDestroy(); // selection
+ }
+
+void MmsTestBed::cancelSendScheduling()
+ {
+ CMsvEntry* cEntry = NULL;
+ setFetchingState( EMmsReceivingPostpone );
+ testFile( iCurrentFile );
+ scheduledSend(KMsvGlobalOutBoxIndexEntryIdValue, 10000); // long delay so that we have time to cancel
+ deleteSendSchedule();
+
+ cEntry = iSession->GetEntryL(KMsvRootIndexEntryId);
+ CleanupStack::PushL(cEntry);
+ cEntry->SetEntryL(KMsvGlobalOutBoxIndexEntryIdValue);
+ if (iMsvEntrySelection != NULL)
+ {
+ delete iMsvEntrySelection;
+ iMsvEntrySelection = NULL;
+ }
+ iMsvEntrySelection = cEntry->ChildrenWithMtmL(KUidMsgTypeMultimedia);
+ CleanupStack::PopAndDestroy();
+ }
+
+void MmsTestBed::scheduledSend(TMsvId aBoxId, TInt aDelay /* = 5 */)
+ {
+ CMsvEntry* cEntry = NULL;
+ TCommandParameters parameters;
+ parameters.iInitialDelay = aDelay;
+ TCommandParametersBuf paramPack( parameters );
+
+ cEntry = iSession->GetEntryL(aBoxId);
+ CleanupStack::PushL(cEntry);
+ // Get all mms messages of outbox
+ CMsvEntrySelection* selection = cEntry->ChildrenWithMtmL( KUidMsgTypeMultimedia );
+ CleanupStack::PushL( selection );
+// selection->InsertL(0, iDefaultServiceId);
+
+ CMsvOperation * op = NULL;
+ op = iMmsClient->InvokeAsyncFunctionL(
+ EMmsScheduledSend,
+ *selection,
+ paramPack,
+ iWait->iStatus);
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ iTimer->Cancel();
+
+ CleanupStack::PopAndDestroy(); // op
+ CleanupStack::PopAndDestroy(2); // cEntry, selection
+ }
+
+void MmsTestBed::deleteSendSchedule()
+ {
+ CMsvEntry* cEntry = NULL;
+
+ TCommandParameters parameters; // initialized to zero
+ TCommandParametersBuf paramPack( parameters );
+
+ cEntry = iSession->GetEntryL(KMsvGlobalOutBoxIndexEntryIdValue);
+ CleanupStack::PushL(cEntry);
+ // Get all mms messages of outbox
+ CMsvEntrySelection* selection = cEntry->ChildrenWithMtmL( KUidMsgTypeMultimedia );
+ CleanupStack::PushL( selection );
+ selection->InsertL(0, iDefaultServiceId);
+
+ CMsvOperation * op = NULL;
+ op = iMmsClient->InvokeAsyncFunctionL(
+ EMmsDeleteSchedule,
+ *selection,
+ paramPack,
+ iWait->iStatus);
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ iTimer->Cancel();
+
+ CleanupStack::PopAndDestroy(); // op
+ CleanupStack::PopAndDestroy(2); // cEntry, selection
+ }
+
+void MmsTestBed::cancelFetchScheduling()
+ {
+ TMsvId mmsFolder = findMMSFolder();
+ CMsvEntry* cEntry = NULL;
+ setFetchingState( EMmsReceivingPostpone );
+ testFile( iCurrentFile );
+ fromOutboxToMmsc(); // immediate send (EMmsSend)
+
+ // Wait until notification has arrived - may take a while in global mode
+ TInt i = 0;
+ while ( TMmsTestUtils::CountChildrenL( mmsFolder, iMsvEntrySelection, *iSession ) == 0
+ && i < 2000 )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ i++;
+ if ( (i/100) * 100 == i )
+ {
+ //TMmsLogger::Log(_L("%d:th wait cycle"), i );
+ }
+ CActiveScheduler::Start();
+ }
+ iTimer->Cancel();
+
+ fetchForced( 10000 ); // delay to allow cancelling
+ deleteFetchSchedule();
+
+ cEntry = iSession->GetEntryL(KMsvRootIndexEntryId);
+ CleanupStack::PushL(cEntry);
+ cEntry->SetEntryL(mmsFolder);
+ if (iMsvEntrySelection != NULL)
+ {
+ delete iMsvEntrySelection;
+ iMsvEntrySelection = NULL;
+ }
+ iMsvEntrySelection = cEntry->ChildrenWithMtmL(KUidMsgTypeMultimedia);
+ CleanupStack::PopAndDestroy(); // cEntry
+ }
+
+void MmsTestBed::fetchForced(TInt aDelay /* = 5 */)
+ {
+ TCommandParameters parameters;
+ parameters.iInitialDelay = aDelay;
+ TCommandParametersBuf paramPack( parameters );
+
+ CMsvEntrySelection* selection = new CMsvEntrySelection;
+ CleanupStack::PushL( selection );
+ // if we have a selected service, insert it into selection
+ if (iServiceId != KMsvNullIndexEntryId)
+ {
+ selection->InsertL(0, iServiceId);
+ }
+ else
+ {
+ selection->InsertL(0, iDefaultServiceId);
+ }
+
+
+ CMsvOperation * op = NULL;
+ op = iMmsClient->InvokeAsyncFunctionL(
+ EMmsScheduledReceiveForced,
+ *selection,
+ paramPack,
+ iWait->iStatus);
+
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ iTimer->Cancel();
+
+ CleanupStack::PopAndDestroy(); // op
+ CleanupStack::PopAndDestroy(); // selection
+ }
+
+void MmsTestBed::deleteFetchSchedule()
+ {
+ CMsvEntry* cEntry = NULL;
+
+ TCommandParameters parameters; // initialized to zero
+ TCommandParametersBuf paramPack( parameters );
+
+ TMsvId mmsFolderId = KMsvNullIndexEntryId;
+ mmsFolderId = findMMSFolder();
+ cEntry = iSession->GetEntryL( mmsFolderId );
+ CleanupStack::PushL(cEntry);
+ // Get all notifications
+ CMsvEntrySelection* selection = cEntry->ChildrenWithMtmL( KUidMsgTypeMultimedia );
+ CleanupStack::PushL( selection );
+ selection->InsertL(0, iDefaultServiceId);
+
+ CMsvOperation * op = NULL;
+ op = iMmsClient->InvokeAsyncFunctionL(
+ EMmsDeleteSchedule,
+ *selection,
+ paramPack,
+ iWait->iStatus);
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ iTimer->Cancel();
+
+ CleanupStack::PopAndDestroy(); // op
+ CleanupStack::PopAndDestroy(2); // cEntry, selection
+ }
+
+void MmsTestBed::doAFetchCycle()
+ {
+ // Sends a message from iCurrentFile and lets it come back
+ TMsvId mmsFolder = findMMSFolder();
+ testFile( iCurrentFile );
+ fromOutboxToMmsc(); // immediate send (EMmsSend)
+ // fetching will start automatically
+
+ TInt i = 0;
+ while ( TMmsTestUtils::CountChildrenL( KMsvGlobalInBoxIndexEntryId, iMsvEntrySelection, *iSession ) == 0
+ && i < 2000
+ && TMmsTestUtils::CountChildrenL( mmsFolder, iMsvEntrySelection, *iSession ) > 0 )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ i++;
+ if ( (i/100) * 100 == i )
+ {
+ //TMmsLogger::Log(_L("%d:th wait cycle"), i );
+ }
+ CActiveScheduler::Start();
+ }
+ iTimer->Cancel();
+ }
+
+bool MmsTestBed::checkLogClient()
+ {
+ if ( iLogClient == NULL )
+ {
+ TRAP_IGNORE( iLogClient = CLogClient::NewL( iFs ) );
+ }
+ return ( iLogClient != NULL );
+ }
+
+int MmsTestBed::getLogEntries()
+ {
+ TInt count = 0;
+ if ( !iLogView )
+ {
+ return 0;
+ }
+
+ if ( iLogView->SetFilterL( *iLogFilter, iWait->iStatus ) )
+ {
+ // should complete with KErrNone
+ iWait->Start();
+ if ( iWait->iStatus.Int() == KErrNone )
+ {
+ count = iLogView->CountL();
+ }
+ }
+ return count;
+ }
+
+void MmsTestBed::createEntry(TMsvEntry& aNewEntry, CMsvEntry& aClientEntry)
+ {
+ CMsvOperation* opert = aClientEntry.CreateL(aNewEntry, iWait->iStatus);
+ iWait->Start();
+ if (!opert->iStatus.Int()==KErrNone)
+ {
+ // what should we do? panic?
+ }
+
+ TPckgBuf<TMsvLocalOperationProgress> package;
+ package.Copy(opert->ProgressL());
+ *(TMsvId*)&aNewEntry = package().iId;
+
+ delete opert; opert=NULL;
+ }
+
+void MmsTestBed::cleanOutbox()
+ {
+ TMmsTestUtils::CleanBoxL(KMsvGlobalOutBoxIndexEntryId, *iSession);
+ }
+
+void MmsTestBed::cleanInbox()
+ {
+ TMmsTestUtils::CleanBoxL(KMsvGlobalInBoxIndexEntryId, *iSession);
+ }
+
+void MmsTestBed::cleanSent()
+ {
+ TMmsTestUtils::CleanBoxL(KMsvSentEntryId, *iSession);
+ }
+
+void MmsTestBed::cleanDrafts()
+ {
+ TMmsTestUtils::CleanBoxL(KMsvDraftEntryId, *iSession);
+ }
+
+void MmsTestBed::cleanAll()
+ {
+ cleanInbox();
+ cleanOutbox();
+ cleanSent();
+ cleanDrafts();
+ TMmsTestUtils::CleanBoxL( iSettings->MMBoxFolder(), *iSession );
+ deleteNotifications();
+ }
+
+void MmsTestBed::reply()
+ {
+ // The first message from inbox is replied to
+ CMsvEntry* cEntry = iSession->GetEntryL(KMsvGlobalInBoxIndexEntryId);
+ CleanupStack::PushL(cEntry);
+ delete iMsvEntrySelection;
+ iMsvEntrySelection = NULL;
+ iMsvEntrySelection = cEntry->ChildrenWithMtmL( KUidMsgTypeMultimedia );
+ if ( iMsvEntrySelection->Count() > 0 )
+ {
+ TMsvId originalEntry = iMsvEntrySelection->At(0);
+ iMmsClient->SwitchCurrentEntryL( originalEntry );
+ TMsvPartList partList = KMsvMessagePartOriginator | KMsvMessagePartDescription;
+ CMsvOperation * op = NULL;
+ op = iMmsClient->ReplyL( KMsvGlobalOutBoxIndexEntryId, partList, iWait->iStatus);
+ CleanupStack::PushL(op);
+ iWait->Start();
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ iTimer->Cancel();
+ if ( iWait->iStatus.Int() != KErrNone )
+ {
+ //TMmsLogger::Log(_L("Create reply, return status %d"), iWait->iStatus.Int());
+ }
+ else
+ {
+ TMsvId newEntry = KMsvNullIndexEntryId;
+ TPckgBuf<TMsvId> package;
+ package.Copy(op->ProgressL());
+ newEntry = package();
+ if ( newEntry != KMsvNullIndexEntryId )
+ {
+ cEntry->SetEntryL( newEntry );
+ TMsvEntry entry = cEntry->Entry();
+ entry.SetInPreparation( EFalse );
+ entry.SetVisible( ETrue );
+ cEntry->ChangeL(entry);
+ }
+ }
+ CleanupStack::PopAndDestroy(); // op
+ }
+ CleanupStack::PopAndDestroy(); // cEntry
+ }
+
+void MmsTestBed::replyToAll()
+ {
+ // The first message from inbox is replied to
+ CMsvEntry* cEntry = iSession->GetEntryL(KMsvGlobalInBoxIndexEntryId);
+ CleanupStack::PushL(cEntry);
+ delete iMsvEntrySelection;
+ iMsvEntrySelection = NULL;
+ iMsvEntrySelection = cEntry->ChildrenWithMtmL(KUidMsgTypeMultimedia);
+
+ if ( iMsvEntrySelection->Count() > 0 )
+ {
+ TMsvId originalEntry = iMsvEntrySelection->At(0);
+ iMmsClient->SwitchCurrentEntryL( originalEntry );
+ TMsvPartList partList = KMsvMessagePartOriginator | KMsvMessagePartDescription |
+ KMsvMessagePartRecipient;
+ CMsvOperation * op = NULL;
+ op = iMmsClient->ReplyL( KMsvGlobalOutBoxIndexEntryId, partList, iWait->iStatus);
+ CleanupStack::PushL(op);
+ iWait->Start();
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ iTimer->Cancel();
+ if ( iWait->iStatus.Int() != KErrNone )
+ {
+ //TMmsLogger::Log(_L("Create reply to all, return status %d"), iWait->iStatus.Int());
+ }
+ else
+ {
+ TMsvId newEntry = KMsvNullIndexEntryId;
+ TPckgBuf<TMsvId> package;
+ package.Copy(op->ProgressL());
+ newEntry = package();
+ if ( newEntry != KMsvNullIndexEntryId )
+ {
+ cEntry->SetEntryL( newEntry );
+ TMsvEntry entry = cEntry->Entry();
+ entry.SetInPreparation( EFalse );
+ entry.SetVisible( ETrue );
+ cEntry->ChangeL(entry);
+ }
+ }
+ CleanupStack::PopAndDestroy(); // op
+ }
+ CleanupStack::PopAndDestroy(); // cEntry
+ }
+
+void MmsTestBed::forward()
+ {
+ // The first message from inbox is forwarded
+ CMsvEntry* cEntry = iSession->GetEntryL(KMsvGlobalInBoxIndexEntryId);
+ CleanupStack::PushL(cEntry);
+ delete iMsvEntrySelection;
+ iMsvEntrySelection = NULL;
+ iMsvEntrySelection = cEntry->ChildrenWithMtmL(KUidMsgTypeMultimedia);
+
+ if ( iMsvEntrySelection->Count() > 0 )
+ {
+ TMsvId originalEntry = iMsvEntrySelection->At(0);
+ iMmsClient->SwitchCurrentEntryL( originalEntry );
+ TMsvPartList partList = KMsvMessagePartOriginator | KMsvMessagePartDescription |
+ KMsvMessagePartRecipient | KMsvMessagePartAttachments;
+ CMsvOperation * op = NULL;
+ op = iMmsClient->ForwardL( KMsvGlobalOutBoxIndexEntryId, partList, iWait->iStatus);
+ CleanupStack::PushL(op);
+ iWait->Start();
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ iTimer->Cancel();
+ if ( iWait->iStatus.Int() != KErrNone )
+ {
+ //TMmsLogger::Log(_L("Create forward, return status %d"), iWait->iStatus.Int());
+ }
+ else
+ {
+ TMsvId newEntry = KMsvNullIndexEntryId;
+ TPckgBuf<TMsvId> package;
+ package.Copy(op->ProgressL());
+ newEntry = package();
+ if ( newEntry != KMsvNullIndexEntryId )
+ {
+ iMmsClient->SwitchCurrentEntryL( newEntry );
+ // Add a sender: 0601234567
+ iMmsClient->LoadMessageL();
+ iMmsClient->SetSenderL( KMmsSender );
+ iMmsClient->SaveMessageL();
+ cEntry->SetEntryL( newEntry );
+ TMsvEntry entry = cEntry->Entry();
+ entry.SetInPreparation( EFalse );
+ entry.SetVisible( ETrue );
+ cEntry->ChangeL(entry);
+ }
+ }
+ CleanupStack::PopAndDestroy(); // op
+ }
+ CleanupStack::PopAndDestroy(); // cEntry
+ }
+
+void MmsTestBed::sendReadReport()
+ {
+ // TURN READ REPORTS ON (until available from menu)
+ iSettings->LoadSettingsL();
+ iSettings->SetReadReplyReportSendingAllowed( ETrue );
+ iSettings->SaveSettingsL();
+ iMmsClient->RestoreSettingsL();
+
+
+ // Read report is sent for the first message in inbox
+ CMsvEntry* cEntry = iSession->GetEntryL( KMsvGlobalInBoxIndexEntryId );
+ CleanupStack::PushL(cEntry);
+ delete iMsvEntrySelection;
+ iMsvEntrySelection = NULL;
+ iMsvEntrySelection = cEntry->ChildrenWithMtmL( KUidMsgTypeMultimedia );
+
+ if ( iMsvEntrySelection->Count() == 0 )
+ {
+ return;
+ }
+ TMsvId originalEntry = iMsvEntrySelection->At( 0 );
+
+ // new test using Client MTM
+ CMsvOperation * op = NULL;
+ op = iMmsClient->SendReadReportL( originalEntry, iWait->iStatus, EMmsReadStatusRead );
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ if ( iWait->iStatus.Int() != KErrNone )
+ {
+ //TMmsLogger::Log(_L("Testbed tried to send read report, return status %d"), iWait->iStatus.Int());
+ }
+
+ iTimer->Cancel();
+
+ CleanupStack::PopAndDestroy( op );
+ op = NULL;
+
+ // Try sending the read report to current entry
+
+ iMmsClient->SwitchCurrentEntryL( originalEntry );
+ op = iMmsClient->SendReadReportL( originalEntry, iWait->iStatus, EMmsReadStatusRead );
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ if ( iWait->iStatus.Int() != KErrNone )
+ {
+ //TMmsLogger::Log(_L("Testbed tried to send read report, return status %d"), iWait->iStatus.Int());
+ }
+
+ iTimer->Cancel();
+ CleanupStack::PopAndDestroy( op );
+ op = NULL;
+
+/*
+ cEntry->SetEntryL( originalEntry );
+ iMmsHeaders->Reset();
+ CMsvStore* store = cEntry->ReadStoreL();
+ CleanupStack::PushL( store );
+ iMmsHeaders->RestoreL( *store );
+ CleanupStack::PopAndDestroy( store );
+ store = NULL;
+ HBufC8* messageId = HBufC8::NewL( iMmsHeaders->MessageId().Length() );
+ CleanupStack::PushL( messageId );
+ messageId->Des().Copy( iMmsHeaders->MessageId() );
+
+ iMmsClient->SwitchCurrentEntryL( originalEntry );
+ iMmsClient->LoadMessageL();
+
+ iMmsHeaders->Reset();
+ iMmsHeaders->SetMessageType( KMmsMessageTypeReadRecInd );
+ // Message id cannot be accessed via MMS Client MTM!
+
+ iMmsHeaders->SetMessageIdL( messageId->Des() );
+ CleanupStack::PopAndDestroy( messageId );
+
+ iMmsHeaders->AddTypedAddresseeL( iMmsClient->Sender(), EMsvRecipientTo );
+ // sender must be insert-address-token because we don't know our number
+ TTime now;
+ now.UniversalTime();
+
+ _LIT( K1970, "19700000:000000.000000" ); // 1-Jan 1970 0:00:00
+
+ TTime y1970( K1970 );
+ TTimeIntervalMicroSeconds interval;
+ // we can't use "seconds from" as it only returns a
+ // 32 bit signed integer. If fails in 2038.
+ // "microseconds from" returns a 64 bit signed integer
+ interval = now.MicroSecondsFrom( y1970 );
+ // date in iMmsHeaders() in seconds from 1.1.1970.
+ iMmsHeaders->SetDate( (interval.Int64() ) / KMmsMillion );
+ iMmsHeaders->SetReadStatus( KMmsReadStatusRead );
+
+ TMsvId mmsFolderId = KMsvNullIndexEntryId;
+ mmsFolderId = FindMMSFolderL();
+
+ cEntry->SetEntryL( mmsFolderId );
+
+ TMsvEntry entry;
+ entry.iType = KUidMsvMessageEntry;
+ entry.iMtm = KUidMsgTypeMultimedia;
+ entry.SetVisible( ETrue );
+ entry.SetInPreparation( EFalse );
+ entry.iServiceId = KMsvLocalServiceIndexEntryId;
+ entry.iRelatedId = iDefaultServiceId;
+ entry.iMtmData1 = KMmsMessageReadRecInd;
+ cEntry->CreateL( entry );
+ TMsvId entryId = entry.Id();
+
+ cEntry->SetEntryL( entryId );
+
+ store = cEntry->EditStoreL();
+ CleanupStack::PushL( store );
+ iMmsHeaders->StoreL( *store );
+ store->CommitL();
+ CleanupStack::PopAndDestroy( store );
+ store = NULL;
+
+ CMsvEntrySelection* selection = new ( ELeave ) CMsvEntrySelection;
+ CleanupStack::PushL( selection );
+ selection->InsertL(0, entryId);
+
+ CMsvOperation * op = NULL;
+ TCommandParameters parameters; // initialized to zero
+ TCommandParametersBuf paramPack( parameters );
+
+ op = iSession->TransferCommandL(*selection,EMmsScheduledReadReport,paramPack,iWait->iStatus);
+
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ if ( iWait->iStatus.Int() != KErrNone )
+ {
+ //TMmsLogger::Log(_L("Testbed tried to send read report, return status %d"), iWait->iStatus.Int());
+ }
+
+ iTimer->Cancel();
+
+ CleanupStack::PopAndDestroy( op );
+ CleanupStack::PopAndDestroy( selection );
+*/
+ CleanupStack::PopAndDestroy( cEntry );
+ }
+
+int MmsTestBed::fromOutboxToMmscWithMemoryFailure()
+ {
+ TInt error = KErrNone;
+ TInt messageCount = 0;
+ TInt failureCount = 0;
+ do {
+ CMsvEntry* cEntry = NULL;
+
+ // Get List of services
+ cEntry = iSession->GetEntryL(KMsvGlobalOutBoxIndexEntryIdValue);
+ CleanupStack::PushL(cEntry);
+ // Get all mms messages of outbox
+ CMsvEntrySelection* selection = cEntry->ChildrenWithMtmL( KUidMsgTypeMultimedia );
+ CleanupStack::PushL( selection );
+ failureCount++;
+ // These are failures that fail in Message server.
+ if ( failureCount >= 63 && failureCount <= 64 )
+ {
+ failureCount = 65;
+ }
+ cEntry->SetEntryL( iServiceId );
+ TMsvEntry entry = cEntry->Entry();
+ entry.iMtmData3 &= 0x0000000FF;
+ entry.iMtmData3 |= failureCount << 8;
+ cEntry->ChangeL( entry );
+
+ selection->InsertL(0, iServiceId);
+
+ CMsvOperation * op = NULL;
+ TCommandParameters parameters; // initialized to zero
+ TCommandParametersBuf paramPack( parameters );
+
+ TRAP (error, op = iSession->TransferCommandL(*selection,EMmsSend,paramPack,iWait->iStatus));
+
+ if ( error == KErrNone )
+ {
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ if ( iWait->iStatus.Int() != KErrNone )
+ {
+ error = iWait->iStatus.Int();
+ if ( iWait->iStatus.Int() != KErrNoMemory )
+ {
+ //TMmsLogger::Log(_L("Testbed tried to send, return status %d"), iWait->iStatus.Int());
+ }
+ }
+
+ CleanupStack::PopAndDestroy(); // op
+ }
+ iTimer->Cancel();
+ CleanupStack::PopAndDestroy(); // selection
+ CleanupStack::PopAndDestroy(); // cEntry
+ selection = NULL;
+ cEntry = NULL;
+ cEntry = iSession->GetEntryL( KMsvGlobalOutBoxIndexEntryIdValue );
+ CleanupStack::PushL(cEntry);
+ selection = cEntry->ChildrenWithMtmL( KUidMsgTypeMultimedia );
+ messageCount = selection->Count();
+ delete selection;
+ selection = 0;
+ CleanupStack::PopAndDestroy(); //cEntry
+ }
+ while ( error == KErrNoMemory || messageCount > 0 );
+ return failureCount;
+ }
+
+int MmsTestBed::fromMmscToInboxWithMemoryFailure()
+ {
+ TInt error = KErrNone;
+ TInt failureCount = 0;
+ TInt messageCount = 0;
+ TMsvId mmsFolderId = KMsvNullIndexEntryId;
+ mmsFolderId = findMMSFolder();
+
+ do {
+ // Inbox must be cleaned if failure makes message to be fetched more than once.
+ // should not happen, but this test is quite stressful, and perfect result
+ // cannot be guaranteed.
+ // What is expected:
+ // 1. Program does not crash
+ // 2. After sufficient number of retries the message is fetched and notification deleted.
+ TMmsTestUtils::CleanBoxL(KMsvGlobalInBoxIndexEntryId, *iSession);
+ CMsvEntry* cEntry = NULL;
+ CMsvEntrySelection* msvEntrySelection = new CMsvEntrySelection;
+ CleanupStack::PushL(msvEntrySelection);
+
+ cEntry = iSession->GetEntryL(iServiceId);
+ CleanupStack::PushL(cEntry);
+
+ failureCount++;
+ // These are failures that fail in Message server.
+ if ( failureCount >= 63 && failureCount <= 64 )
+ {
+ failureCount = 65;
+ }
+ cEntry->SetEntryL( iServiceId );
+
+ TMsvEntry entry = cEntry->Entry();
+ entry.iMtmData3 &= 0x0000000FF;
+ entry.iMtmData3 |= failureCount << 8;
+ cEntry->ChangeL( entry );
+
+ // if we have a selected service, insert it into selection
+ if (iServiceId != KMsvNullIndexEntryId)
+ {
+ msvEntrySelection->InsertL(0, iServiceId);
+ }
+
+ CMsvOperation * op = NULL;
+ TCommandParameters parameters; // initialized to zero
+ TCommandParametersBuf paramPack( parameters );
+
+ TRAP (error, op = iMmsClient->InvokeAsyncFunctionL(
+ EMmsReceiveForced,
+ *msvEntrySelection,
+ paramPack,
+ iWait->iStatus) );
+
+ if ( error == KErrNone )
+ {
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ if ( iWait->iStatus.Int() != KErrNone )
+ {
+ error = iWait->iStatus.Int();
+ if ( iWait->iStatus.Int() != KErrNoMemory )
+ {
+ //TMmsLogger::Log(_L("Testbed tried to receive, return status %d"), iWait->iStatus.Int());
+ }
+ }
+
+ CleanupStack::PopAndDestroy(); // op
+ }
+
+ iTimer->Cancel();
+ CleanupStack::PopAndDestroy(); // msvEntrySelection
+ CleanupStack::PopAndDestroy(); // cEntry
+ msvEntrySelection = NULL;
+ cEntry = NULL;
+ cEntry = iSession->GetEntryL( mmsFolderId );
+ CleanupStack::PushL(cEntry);
+ msvEntrySelection = cEntry->ChildrenWithMtmL( KUidMsgTypeMultimedia );
+ messageCount = msvEntrySelection->Count();
+ delete msvEntrySelection;
+ msvEntrySelection = 0;
+ CleanupStack::PopAndDestroy(); //cEntry
+ }
+ while ( error == KErrNoMemory || messageCount > 0 );
+ if ( error != KErrNoMemory && error != KErrNone )
+ {
+ //TMmsLogger::Log(_L("Memory failure loop ended with %d"), error);
+ }
+ return failureCount;
+ }
+
+void MmsTestBed::sendViaClient()
+ {
+ CMsvEntry* cEntry = NULL;
+
+ cEntry = iSession->GetEntryL(KMsvDraftEntryId);
+ CleanupStack::PushL(cEntry);
+ // Get all mms messages in drafts
+ CMsvEntrySelection* selection = cEntry->ChildrenWithMtmL( KUidMsgTypeMultimedia );
+ CleanupStack::PushL( selection );
+
+ CMsvOperation * op = NULL;
+ TTime now;
+ now.UniversalTime();
+ op = iMmsClient->SendL( *selection, iWait->iStatus, now );
+
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ iTimer->Cancel();
+ CleanupStack::PopAndDestroy(); // op
+ CleanupStack::PopAndDestroy(2); // cEntry, selection
+ }
+
+void MmsTestBed::scheduledFetch(TInt aDelay /* = 5 */)
+ {
+ TCommandParameters parameters;
+ parameters.iInitialDelay = aDelay;
+ TCommandParametersBuf paramPack( parameters );
+
+ CMsvEntrySelection* selection = new CMsvEntrySelection;
+ CleanupStack::PushL( selection );
+ // if we have a selected service, insert it into selection
+ if (iServiceId != KMsvNullIndexEntryId)
+ {
+ selection->InsertL(0, iServiceId);
+ }
+ else
+ {
+ selection->InsertL(0, iDefaultServiceId);
+ }
+
+ CMsvOperation * op = NULL;
+ op = iMmsClient->InvokeAsyncFunctionL(
+ EMmsScheduledReceive,
+ *selection,
+ paramPack,
+ iWait->iStatus);
+
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ iTimer->Cancel();
+ CleanupStack::PopAndDestroy(); // op
+ CleanupStack::PopAndDestroy(); // selection
+ }
+
+void MmsTestBed::fetchForcedImmediate()
+ {
+ TCommandParameters parameters;
+ TCommandParametersBuf paramPack( parameters );
+
+ CMsvEntrySelection* selection = new CMsvEntrySelection;
+ CleanupStack::PushL( selection );
+ // if we have a selected service, insert it into selection
+ if (iServiceId != KMsvNullIndexEntryId)
+ {
+ selection->InsertL(0, iServiceId);
+ }
+ else
+ {
+ selection->InsertL(0, iDefaultServiceId);
+ }
+
+
+ CMsvOperation * op = NULL;
+ op = iMmsClient->InvokeAsyncFunctionL(
+ EMmsReceiveForced,
+ *selection,
+ paramPack,
+ iWait->iStatus);
+
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ iTimer->Cancel();
+ CleanupStack::PopAndDestroy(); // op
+ CleanupStack::PopAndDestroy(); // selection
+ }
+
+void MmsTestBed::getEventType()
+ {
+ if ( !checkLogClient() )
+ {
+ return; // not available
+ }
+
+ CLogEventType* eventType = CLogEventType::NewL();
+ CleanupStack::PushL( eventType );
+ eventType->SetUid(iLogEvent->EventType());
+ iLogClient->GetEventType( *eventType, iWait->iStatus );
+
+ iWait->Start();
+ CleanupStack::PopAndDestroy(); // eventType
+ }
+
+void MmsTestBed::addEventType()
+ {
+ if ( !checkLogClient() )
+ {
+ return; // not available
+ }
+
+ CLogEventType* eventType = CLogEventType::NewL();
+ CleanupStack::PushL( eventType );
+ eventType->SetUid(iLogEvent->EventType());
+ eventType->SetDescription(_L("Multimedia Message") );
+ eventType->SetLoggingEnabled( ETrue );
+
+// iWait->iStatus = KRequestPending;
+ iLogClient->AddEventType( *eventType, iWait->iStatus );
+ iWait->Start();
+ CleanupStack::PopAndDestroy(); // eventType
+ }
+
+void MmsTestBed::deleteEventType()
+ {
+ if ( !checkLogClient() )
+ {
+ return; // not available
+ }
+// iWait->iStatus = KRequestPending;
+ iLogClient->DeleteEventType( iLogEvent->EventType(), iWait->iStatus );
+ iWait->Start();
+ }
+
+void MmsTestBed::cleanLog()
+ {
+ TInt count = 0;
+
+ count = getLogEntries();
+
+ TInt i;
+ for ( i = 0; i < count; ++i )
+ {
+ // when a view is created, it will be positioned on the first event
+// iWait->iStatus = KRequestPending;
+ iLogClient->DeleteEvent(iLogView->Event().Id(), iWait->iStatus);
+ iWait->Start();
+
+ if ( iLogView->NextL( iWait->iStatus ) )
+ {
+ // should complete with KErrNone
+ iWait->Start();
+ if ( iWait->iStatus.Int() != KErrNone )
+ {
+ // could not get next event!
+ break;
+ }
+ }
+ else
+ {
+ break; // no more events!
+ }
+ }
+ }
+
+void MmsTestBed::setOnline(bool value)
+ {
+ //value = true for online mode
+ //value = false for offline mode
+ CRepository* repository = NULL;
+ TInt retval = KErrNone;
+ TRAP( retval, repository = CRepository::NewL( KCRUidCoreApplicationUIs ) );
+ if( retval == KErrNone )
+ {
+ repository->Set( KCoreAppUIsNetworkConnectionAllowed, value );
+ delete repository;
+ }
+ }
+
+void MmsTestBed::generateDeliveryReport( CMmsHeaders* aMmsHeaders )
+ {
+ iEncodeBuffer->ResizeL( 1024 );
+
+ TInt position = 0;
+
+ // encode message type
+ iEncodeBuffer->Write( position, &KMmsAssignedMessageType, 1 );
+ position++;
+ iEncodeBuffer->Write( position, &KMmsMessageTypeDeliveryInd, 1 );
+ position++;
+
+ // version
+ iEncodeBuffer->Write( position, &KMmsAssignedMmsVersion, 1 );
+ position++;
+
+ TUint8 version = aMmsHeaders->MmsVersion() | 0x80; // current version as short integer
+ iEncodeBuffer->Write( position, &version, 1 );
+ position++;
+
+ // message id from the headers
+ // At least once MMSC did not send us the message id!
+ // if message id is missing, we cannot match the entry!
+ // This only a fake. Real delivery reports should always
+ // contain the message id.
+ if ( aMmsHeaders->MessageId().Length() > 0 )
+ {
+ iEncodeBuffer->Write( position, &KMmsAssignedMessageId, 1 );
+ position++;
+ iEncodeBuffer->Write( position, &(aMmsHeaders->MessageId()[0]), aMmsHeaders->MessageId().Length() );
+ position += aMmsHeaders->MessageId().Length();
+ iEncodeBuffer->Write( position, &KMmsNull, 1 );
+ position++;
+ }
+
+ // To is taken from the headers
+ iEncodeBuffer->Write( position, &KMmsAssignedTo, 1 );
+ position++;
+
+ TPtrC recipient;
+ if ( aMmsHeaders->ToRecipients().MdcaCount() > 0 &&
+ aMmsHeaders->ToRecipients()[0].Length() > 0 )
+ {
+ recipient.Set( aMmsHeaders->ToRecipients()[0] );
+ }
+ else if( aMmsHeaders->CcRecipients().MdcaCount() > 0 &&
+ aMmsHeaders->CcRecipients()[0].Length() > 0 )
+ {
+ recipient.Set( aMmsHeaders->CcRecipients()[0] );
+ }
+ else if( aMmsHeaders->BccRecipients().MdcaCount() > 0 &&
+ aMmsHeaders->BccRecipients()[0].Length() > 0 )
+ {
+ recipient.Set( aMmsHeaders->BccRecipients()[0] );
+ }
+ else
+ {
+ recipient.Set( _L("Jasso-Kissa@jii.fi") );
+ }
+
+ TMmsAddressType addressType = EMmsAddressTypeUnknown;
+
+ if ( recipient.Find( KMiuMau ) != KErrNotFound )
+ {
+ addressType = EMmsAddressTypeEmail;
+ }
+ else
+ {
+ addressType = EMmsAddressTypeMobile;
+ }
+
+ TUint8 character;
+ TInt i;
+ if ( addressType == EMmsAddressTypeEmail )
+ {
+ // email address - ASCII ONLY - THIS IS JUST A TEST!
+
+ for ( i = 0; i < recipient.Length(); ++i )
+ {
+ character = TUint8( recipient[i] & 0xff );
+ iEncodeBuffer->Write( position, &character, 1 );
+ position++;
+ }
+ iEncodeBuffer->Write( position, &KMmsNull, 1 );
+ position++;
+
+ }
+ else
+ {
+ // must be a phone number
+ // We expect for now that the format is correct as is
+ // All legal characters present in a phone number are ASCII
+
+ TInt i;
+ for ( i = 0; i < recipient.Length(); ++i )
+ {
+ character = TUint8( recipient[i] & 0xff );
+ iEncodeBuffer->Write( position, &character, 1 );
+ position++;
+ }
+ iEncodeBuffer->Write( position, KMmsPlmn, KMmsPlmnLength );
+ position += KMmsPlmnLength;
+ iEncodeBuffer->Write( position, &KMmsNull, 1 );
+ position++;
+ }
+
+ // date
+ iEncodeBuffer->Write( position, &KMmsAssignedDate, 1 );
+ position++;
+
+ TLocale locale;
+ locale.Refresh();
+ TInt64 UtcDate;
+ TTimeIntervalSeconds universalTimeOffset( locale.UniversalTimeOffset() );
+
+ TTime now;
+ now.UniversalTime();
+ UtcDate = ( now.MicroSecondsFrom( TTime( KMmsYear1970String ) ).Int64() ) / 1000000 ;
+
+ UtcDate -= universalTimeOffset.Int();
+
+ if ( locale.QueryHomeHasDaylightSavingOn() )
+ {
+ TTimeIntervalSeconds daylightSaving( 60 * 60 );
+ UtcDate -= daylightSaving.Int();
+ }
+
+ TUint8 len; // number of bytes we will need
+ len = 0;
+ TUint8 array[8];
+
+ TInt64 temp = UtcDate;
+
+ for (i = 7; i >= 0; --i)
+ {
+ array[i] = TInt8( ( I64INT( temp ) ) & 0xFF );
+ I64LSR( temp, 8 );
+ }
+
+ len = 8;
+ i = 0;
+ while( ( array[i]== 0 ) && ( i < 8 ) )
+ {
+ i++;
+ len--;
+ }
+
+ // a zero should be coded as short integer.
+ // However, if there is a valid reason to code a zero as a long integer,
+ // we allow it. The caller should know what he is doing.
+ if ( len == 0 )
+ {
+ len = 1;
+ }
+ // write short length
+ iEncodeBuffer->Write( position, &len, 1 );
+ position++;
+ // write as many bytes as were non-zero
+ iEncodeBuffer->Write( position, &(array[8 - len] ), len );
+ position+= len;
+ // status
+ iEncodeBuffer->Write( position, &KMmsAssignedStatus, 1 );
+ position++;
+ iEncodeBuffer->Write( position, &KMmsMessageStatusRetrieved, 1 );
+ position++;
+ // DONE!!!
+ iEncodeBuffer->ResizeL( position );
+ return;
+ }
+
+void MmsTestBed::sendDeliveryReport()
+ {
+ if ( iEncodeBuffer->Size() == 0 )
+ {
+ //No delivery report
+ return;
+ }
+
+
+ TMsvId mmsFolder = findMMSFolder();
+ CMsvEntrySelection* selection = new (ELeave) CMsvEntrySelection;
+ CleanupStack::PushL( selection );
+
+ TMsvId entryId = TMmsTestUtils::CreateNotificationEntryL( mmsFolder, iServiceId, iEncodeBuffer, *iSession );
+ TPtr8 ptr = iEncodeBuffer->Ptr( 0 );
+
+ // Now we have streamed our data into this entry.
+ // Now we have an entry that says: local service, MMS MTM
+
+ if ( entryId != KMsvNullIndexEntryId )
+ {
+ selection->AppendL( entryId );
+ }
+ else
+ {
+ selection->AppendL( iDefaultServiceId );
+ }
+
+ TWatcherParameters parameters; // initialized to zero
+ parameters.iWatcherId = RThread().Id();
+ parameters.iDataPointer = &ptr;
+ TWatcherParametersBuf paramPack( parameters );
+
+ CMsvOperation * op = NULL;
+
+// iWait->iStatus = KRequestPending;
+ op = iSession->TransferCommandL(
+ *selection, EMmsDecodePushedMessage, paramPack, iWait->iStatus );
+ CleanupStack::PushL(op);
+ iWait->Start();
+
+ while (iWait->iStatus.Int() == KRequestPending )
+ {
+ if (!iTimer->IsActive())
+ {
+ iTimer->IssueRequest();
+ }
+ CActiveScheduler::Start();
+ }
+
+ iTimer->Cancel();
+
+ CleanupStack::PopAndDestroy(); // op
+ CleanupStack::PopAndDestroy(); // selection
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditormmsplugin/tsrc/mmstestbed/src/mmsteststaticutils.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,528 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ */
+
+#include <f32file.h>
+#include <centralrepository.h>
+#include <apparc.h>
+#include <msvapi.h>
+#include <msvids.h>
+
+#include "mmsteststaticutils.h"
+#include "mmsconst.h"
+#include "MmsEnginePrivateCRKeys.h"
+#include "mmssettings.h"
+#include "mmsheaders.h"
+#include "mmsservercommon.h"
+#include "mmsencode.h"
+
+
+// ---------------------------------------------------------
+//
+// ---------------------------------------------------------
+//
+TMmsJoinedArrays::TMmsJoinedArrays(CDesCArray* const & aArray1, CDesCArray* const & aArray2)
+: iArray1(aArray1), iArray2(aArray2)
+ {
+ }
+
+TInt TMmsJoinedArrays::MdcaCount() const
+ {
+ TInt count=0;
+ if (iArray1)
+ count += iArray1->MdcaCount();
+ if (iArray2)
+ count += iArray2->MdcaCount();
+ return count;
+ }
+
+TPtrC16 TMmsJoinedArrays::MdcaPoint(TInt aIndex) const
+ {
+ if (iArray1)
+ {
+ if (aIndex < iArray1->MdcaCount())
+ return iArray1->MdcaPoint(aIndex);
+ else
+ aIndex -= iArray1->MdcaCount();
+ }
+ return iArray2->MdcaPoint(aIndex);
+ }
+
+
+// ---------------------------------------------------------
+//
+// ---------------------------------------------------------
+//
+TMmsTestUtils::TMmsTestUtils()
+ {
+
+ }
+
+// ---------------------------------------------------------
+//
+// ---------------------------------------------------------
+//
+HBufC* TMmsTestUtils::ReadContactFromFileL( TDesC& aFileName, RFs& aFs )
+ {
+ RFile file;
+ TInt error = KErrNone;
+
+ TInt textBufferSize = 256;
+ HBufC* textBuffer = HBufC::NewL( textBufferSize );
+ TPtr textPtr = textBuffer->Des();
+ TFileText textFile;
+
+ error = file.Open( aFs, aFileName,
+ EFileRead|EFileShareReadersOnly );
+
+ if ( error == KErrNone )
+ {
+ textFile.Set( file );
+ error = textFile.Seek( ESeekStart );
+ }
+
+ if ( error == KErrNone )
+ {
+ error = textFile.Read( textPtr );
+ }
+
+ file.Close();
+
+ if ( textBuffer->Des().Find( &KMmsByteOrderMark, 1 ) == 0 )
+ {
+ textBuffer->Des().Copy( textBuffer->Des().Mid( 1 ) );
+ }
+
+ return textBuffer;
+ }
+
+//----------------------------------------------------------------------------------------
+// turn on detailed logging while decoding a message
+//----------------------------------------------------------------------------------------
+//
+void TMmsTestUtils::DecodeLoggingOnL()
+ {
+ // CenRep for decodelogging
+ CRepository* repository = NULL;
+ TInt retval = KErrNone;
+ TRAP( retval, repository = CRepository::NewL( KUidMmsServerMtm ) );
+ if( retval == KErrNone )
+ {
+ // Best effort - if cannot access repository, no can do
+ TInt temp = 1;
+ repository->Set( KMmsEngineDecodeLog, temp );
+ delete repository;
+ }
+ }
+
+//----------------------------------------------------------------------------------------
+// turn off detailed logging while decoding a message
+//----------------------------------------------------------------------------------------
+//
+void TMmsTestUtils::DecodeLoggingOffL()
+ {
+ // CenRep for decodelogging
+ CRepository* repository = NULL;
+ TInt retval = KErrNone;
+ TRAP( retval, repository = CRepository::NewL( KUidMmsServerMtm ) );
+ if( retval == KErrNone )
+ {
+ // Best effort - if cannot access repository, no can do
+ TInt temp = 0;
+ repository->Set( KMmsEngineDecodeLog, temp );
+ delete repository;
+ }
+
+ }
+
+//----------------------------------------------------------------------------------------
+// turn on binary dump of incoming messages
+//----------------------------------------------------------------------------------------
+//
+void TMmsTestUtils::BinaryDumpOnL()
+ {
+ // CenRep for binarydump setting
+ CRepository* repository = NULL;
+ TInt retval = KErrNone;
+ TRAP( retval, repository = CRepository::NewL( KUidMmsServerMtm ) );
+ if( retval == KErrNone )
+ {
+ // Best effort - if cannot access repository, no can do
+ TInt temp = 1;
+ repository->Set( KMmsEngineBinaryDump, temp );
+ delete repository;
+ }
+
+ }
+
+//----------------------------------------------------------------------------------------
+// turn off binary dump of incoming messages
+//----------------------------------------------------------------------------------------
+//
+void TMmsTestUtils::BinaryDumpOffL()
+ {
+ // CenRep for binarydump setting
+ CRepository* repository = NULL;
+ TInt retval = KErrNone;
+ TRAP( retval, repository = CRepository::NewL( KUidMmsServerMtm ) );
+ if( retval == KErrNone )
+ {
+ // Best effort - if cannot access repository, no can do
+ TInt temp = 0;
+ repository->Set( KMmsEngineBinaryDump, temp );
+ delete repository;
+ }
+ }
+
+// ---------------------------------------------------------
+//
+// ---------------------------------------------------------
+//
+void TMmsTestUtils::CleanDirectoryL( RFs& aFs )
+ {
+ // Delete the files in the directory
+ CFileMan* fileMan = CFileMan::NewL( aFs );
+ CleanupStack::PushL( fileMan );
+ fileMan->RmDir( KMmsDefaultLocalModeDir );
+ fileMan->RmDir( KMmsMMBoxDirectory );
+ fileMan->RmDir( KMmsMMBoxDescriptionDirectory );
+ CleanupStack::PopAndDestroy(); // fileManager
+ // we don't want to throw these away!
+ aFs.MkDirAll( KMmsDefaultLocalModeDir );
+ aFs.MkDirAll( KMmsMMBoxDirectory );
+ aFs.MkDirAll( KMmsMMBoxDescriptionDirectory );
+ }
+
+// ---------------------------------------------------------
+//
+// ---------------------------------------------------------
+//
+void TMmsTestUtils::Dump( CBufFlat& aBuffer, TFileName& aFilename, TParse& aParse, RFs& aFs )
+ {
+ TInt error = KErrNone;
+ aFs.MkDirAll( aFilename );
+ TUint att;
+ if ( aFs.Att( aFilename, att ) == KErrNone )
+ {
+ _LIT( KRelated, "dump.mms");
+ aParse.Set( aFilename, &KRelated, NULL );
+ aFilename = aParse.FullName();
+ error = CApaApplication::GenerateFileName( aFs, aFilename );
+ if ( error == KErrNone )
+ {
+ RFile file;
+ error = file.Create( aFs, aFilename, EFileWrite | EFileShareExclusive );
+ // for message id generation
+ aParse.Set( aFilename, NULL, NULL );
+ if ( error == KErrNone )
+ {
+ // the data is supposed to be in the encode buffer
+ TPtr8 ptr = aBuffer.Ptr( 0 );
+ file.Write( ptr );
+ file.Flush();
+ }
+
+ // done - close files
+ file.Close();
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+//
+// ---------------------------------------------------------
+//
+void TMmsTestUtils::CleanBoxL(TMsvId aBoxId, CMsvSession& aSession)
+ {
+ CMsvEntry* cEntry = NULL;
+ // delete all messages from the specified box
+ cEntry = aSession.GetEntryL(KMsvRootIndexEntryId);
+ CleanupStack::PushL(cEntry);
+ cEntry->SetEntryL(aBoxId);
+ // show invisible entries
+ cEntry->SetSortTypeL( TMsvSelectionOrdering( KMsvNoGrouping, EMsvSortByNone, ETrue ) );
+ CMsvEntrySelection* msvEntrySelection = cEntry->ChildrenWithMtmL(KUidMsgTypeMultimedia);
+ CleanupStack::PushL(msvEntrySelection);
+
+ CMsvEntrySelection* selection = NULL;
+ cEntry->SetSortTypeL( TMsvSelectionOrdering( KMsvNoGrouping, EMsvSortByNone, ETrue ) );
+ selection = cEntry->ChildrenWithMtmL(KUidMsgMMSNotification);
+ CleanupStack::PushL( selection );
+ if ( selection->Count() > 0 )
+ {
+ msvEntrySelection->AppendL( selection->Back( 0 ), selection->Count() );
+ }
+ CleanupStack::PopAndDestroy(); // selection
+
+ int i;
+ for (i = 0; i < msvEntrySelection->Count(); ++i)
+ {
+ CMsvEntry* entry = aSession.GetEntryL( msvEntrySelection->At(i) );
+ CleanupStack::PushL( entry );
+ TMsvEntry tEntry = entry->Entry();
+ tEntry.SetReadOnly(EFalse);
+ entry->ChangeL(tEntry);
+ cEntry->DeleteL( msvEntrySelection->At(i) );
+ CleanupStack::PopAndDestroy( entry );
+ }
+
+ CleanupStack::PopAndDestroy(msvEntrySelection);
+ CleanupStack::PopAndDestroy(cEntry);
+ }
+
+//----------------------------------------------------------------------------------------
+// turn on logging email recipients
+//----------------------------------------------------------------------------------------
+void TMmsTestUtils::EmailLoggingOnL()
+ {
+ // CenRep for binarydump setting
+ CRepository* repository = NULL;
+ TInt retval = KErrNone;
+ TRAP( retval, repository = CRepository::NewL( KUidMmsServerMtm ) ); // ***
+ if( retval == KErrNone )
+ {
+ TInt temp = 1;
+ repository->Set( KMmsEngineLogEmailRecipients, temp );
+ delete repository;
+ }
+
+ }
+
+//----------------------------------------------------------------------------------------
+// turn off logging email recipients
+//----------------------------------------------------------------------------------------
+void TMmsTestUtils::EmailLoggingOffL()
+ {
+ // CenRep for binarydump setting
+ CRepository* repository = NULL;
+ TInt retval = KErrNone;
+ TRAP( retval, repository = CRepository::NewL( KUidMmsServerMtm ) ); // ***
+ if( retval == KErrNone )
+ {
+ TInt temp = 0;
+ repository->Set( KMmsEngineLogEmailRecipients, temp );
+ delete repository;
+ }
+
+ }
+
+//----------------------------------------------------------------------------------------
+//
+//----------------------------------------------------------------------------------------
+TInt TMmsTestUtils::CountChildrenL(TMsvId aBoxId, CMsvEntrySelection*& aMsvEntrySelection, CMsvSession& aSession, TUid aMessageType )
+ {
+ CMsvEntry* cEntry = aSession.GetEntryL(KMsvRootIndexEntryId);
+ CleanupStack::PushL(cEntry);
+ cEntry->SetEntryL(aBoxId);
+ if (aMsvEntrySelection != NULL)
+ {
+ delete aMsvEntrySelection;
+ aMsvEntrySelection = NULL;
+ }
+ aMsvEntrySelection = cEntry->ChildrenWithMtmL(aMessageType);
+ CleanupStack::PopAndDestroy(); // cEntry
+ return aMsvEntrySelection->Count();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CreateFolderEntryL
+//
+// -----------------------------------------------------------------------------
+//
+void TMmsTestUtils::CreateFolderEntryL(
+ CMsvSession& aSession,
+ TMsvId aParentFolder,
+ const TDesC& aFolderName,
+ TMsvId& aFolderId )
+ {
+ aFolderId = KMsvNullIndexEntryId;
+ CMsvEntry* cEntry = aSession.GetEntryL( aParentFolder );
+ CleanupStack::PushL( cEntry );
+
+ // Create a new folder.
+
+ TMsvEntry entry;
+ entry.iType = KUidMsvFolderEntry;
+ entry.iMtm = KUidMsvLocalServiceMtm;
+ entry.iDetails.Set( aFolderName );
+ entry.SetVisible( EFalse );
+ entry.SetInPreparation( EFalse );
+ entry.iServiceId = KMsvLocalServiceIndexEntryId;
+ cEntry->CreateL( entry );
+ aFolderId = entry.Id();
+ CleanupStack::PopAndDestroy( cEntry );
+
+ }
+
+
+//----------------------------------------------------------------------------------------
+//
+//----------------------------------------------------------------------------------------
+TMsvId TMmsTestUtils::CreateNotificationEntryL(
+ TMsvId aNotificationFolder,
+ TMsvId aServiceId,
+ CBufFlat* aEncodeBuffer,
+ CMsvSession& aSession )
+ {
+ TMsvId entryId = KMsvNullIndexEntryId;
+ if ( aNotificationFolder == KMsvNullIndexEntryId )
+ {
+ // no folder no entry
+ return entryId;
+ }
+
+ CMsvEntry* cEntry = aSession.GetEntryL( aNotificationFolder );
+ CleanupStack::PushL(cEntry);
+
+ TMsvEntry entry;
+ entry.iType = KUidMsvMessageEntry;
+ entry.iMtm = KUidMsgTypeMultimedia;
+ entry.SetVisible( ETrue );
+ // If we want to put data here, InPreparation must be set to true first
+ entry.SetInPreparation( EFalse );
+ entry.iServiceId = KMsvLocalServiceIndexEntryId;
+ entry.iRelatedId = aServiceId;
+ entry.iMtmData2 = KMmsNotificationBinary;
+ cEntry->CreateL( entry );
+ entryId = entry.Id();
+
+ //
+ // Stream
+ // 1) length of the data as 32 bit integer
+ // 2) pushed message data
+ // into created entry's stream
+ //
+ cEntry->SetEntryL( entryId );
+ CMsvStore* store = cEntry->EditStoreL();
+ CleanupStack::PushL( store ); // ***
+ RMsvWriteStream outs;
+ outs.AssignLC( *store, KUidBinaryNotificationStream ); // ***
+ TPtrC8 ptr = aEncodeBuffer->Ptr( 0 );
+ outs.WriteUint32L( ptr.Length() );
+ outs.WriteL( ptr );
+ outs.CommitL();
+ outs.Close();
+ store->CommitL();
+
+ CleanupStack::PopAndDestroy( &outs ); // close outs
+ CleanupStack::PopAndDestroy( store );
+ CleanupStack::PopAndDestroy( cEntry );
+
+ return entryId;
+
+ }
+
+//----------------------------------------------------------------------------------------
+//
+//----------------------------------------------------------------------------------------
+void TMmsTestUtils::FormNotification(
+ TDesC8& aUrl,
+ TInt aSize,
+ CMmsHeaders& aMmsHeaders,
+ CMmsEncode& aMmsEncoder,
+ CBufFlat* aEncodeBuffer )
+ {
+ // for test purposes aUrl will contain the filename.
+
+ // Reset sets the default encapsulation version
+ // The default version has been set from MmsSettings in NewL
+ aMmsHeaders.Reset();
+
+ // construct the notification into iMmsHeaders, and call encode
+
+ aMmsHeaders.SetMessageType( KMmsMessageTypeMNotificationInd );
+
+ TTime currentTime;
+ currentTime.UniversalTime();
+ currentTime.Int64();
+
+ TPtrC8 tid;
+ TBufC8<KMMSMAXTIDLENGTH> target;
+ TInt random = 0;
+
+ // we don't generate a true random TID: We generate the
+ // TID from the URL so that if we generate a notification
+ // twice from the same file, we get the same TID and the
+ // same URL. This way we can test the pruning function in
+ // server MTM
+
+ TInt i;
+ for ( i = 0; i < aUrl.Length(); ++i )
+ {
+ random += aUrl[ i ];
+ }
+
+ target.Des().Num( random );
+ tid.Set( target.Des() );
+ aMmsHeaders.SetTidL( tid );
+
+ aMmsHeaders.SetMessageClass( EMmsClassPersonal );
+ aMmsHeaders.SetMessageSize( aSize );
+ const TInt KTenHours = 10 * 60 * 60; // 10 hours relative expiry
+ aMmsHeaders.SetExpiryInterval( KTenHours );
+ aMmsHeaders.SetContentLocationL( aUrl );
+
+ aMmsEncoder.EncodeHeadersL( aMmsHeaders, *aEncodeBuffer );
+
+ }
+
+
+//----------------------------------------------------------------------------------------
+//
+//----------------------------------------------------------------------------------------
+TBool TMmsTestUtils::IsFile(const TDesC& aFileName, RFs& aFs)
+ {
+ //Is the name a file?
+ if (IsDrive(aFileName))
+ return EFalse;
+ return !(IsDir(aFileName, aFs));
+ }
+
+//----------------------------------------------------------------------------------------
+//
+//----------------------------------------------------------------------------------------
+TBool TMmsTestUtils::IsDir(const TDesC& aFileName, RFs& aFs)
+ {
+ //Is the name a directory?
+ TEntry entry;
+ TInt err = aFs.Entry(aFileName, entry);
+ if (err)
+ return EFalse;
+ else
+ return entry.IsDir();
+ }
+
+//----------------------------------------------------------------------------------------
+//
+//----------------------------------------------------------------------------------------
+TBool TMmsTestUtils::IsDrive(const TDesC& aFileName)
+ {
+ //horrible little function to figure if the path is just a drive
+ TBool retVal = EFalse;
+ if (aFileName.Length()==3) //eg "c:\"
+ {
+ if ((aFileName[1] == ':') && (aFileName[2] == '\\'))
+ retVal=ETrue;
+ }
+ else if (aFileName.Length()==2) //eg "c:"
+ {
+ if (aFileName[1] == ':')
+ retVal=ETrue;
+ }
+ return retVal;
+ }
+
+// end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditormmsplugin/tsrc/mmstestbed/src/mmstestuitimer.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,121 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ */
+
+#include "mmstestuitimer.h"
+
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+CTestUiTimer::CTestUiTimer(): CTimer( 5 )
+ {
+ period = KPeriod;
+ }
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CTestUiTimer::ConstructL()
+ {
+ CTimer::ConstructL();
+ CActiveScheduler::Add(this);
+ }
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+CTestUiTimer* CTestUiTimer::NewL()
+ {
+ CTestUiTimer* self = new(ELeave) CTestUiTimer();
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+CTestUiTimer::~CTestUiTimer()
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CTestUiTimer::IssueRequest()
+ {
+ // No operation to cancel if this function is called
+ iObject = NULL;
+ After(period);
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CTestUiTimer::TimeoutOperation( CActive* aObject, TTimeIntervalSeconds aTimeoutInSeconds )
+ {
+ iObject = aObject;
+ TTimeIntervalMicroSeconds32 timeout = aTimeoutInSeconds.Int() * 1000000;
+ After( timeout );
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CTestUiTimer::DoCancel()
+ {
+ CTimer::DoCancel();
+ if ( iObject )
+ {
+ iObject->Cancel();
+ iObject = NULL;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CTestUiTimer::RunL()
+ {
+ if ( iObject )
+ {
+ // If we timeout while holding an active object, we cancel it
+ iObject->Cancel();
+ iObject = NULL;
+ }
+ else
+ {
+ CActiveScheduler::Stop();
+ }
+ }
+
+// ======== GLOBAL FUNCTIONS ========
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditormmsplugin/tsrc/testmmsgplugin/inc/testmmsplugin.h Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,139 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: Main test class declaration for MMS Plugin
+ */
+
+#ifndef TEST_MMS_PLUGIN_H
+#define TEST_MMS_PLUGIN_H
+
+#ifdef BUILD_TEST_DLL
+#define TEST_EXPORT Q_DECL_EXPORT
+#else
+#define TEST_EXPORT Q_DECL_IMPORT
+#endif
+
+#include <QObject>
+#include <QSignalSpy>
+#include <e32const.h>
+
+//Forward Declarations
+class UniEditorMmsPlugin;
+class ConvergedMessage;
+class MmsTestBed;
+
+//Class Declaration: TestMmsPlugin
+class TEST_EXPORT TestMmsPlugin: public QObject
+ {
+ Q_OBJECT
+
+private slots:
+
+ /**
+ * Initialises the whole Test
+ **/
+ void initTestCase();//called before the first testfunction is executed.
+
+ /**
+ * Initialises each Test Case
+ **/
+ void init();//called before each testfunction is executed.
+
+ /**
+ * Creates a MMS messsage with a text attachment
+ **/
+ void createMMSWithTextAttachment();
+
+ /**
+ * Tests the MMS message with a text attachment
+ **/
+ void testMMSWithTextAttachment();
+
+ /**
+ * Sends the MMS message with a text attachment
+ **/
+ void sendMMSWithTextAttachment();
+
+ /**
+ * Tests that the MMS message is sent successfully
+ **/
+ void testSentMMSWithTextAttachment();
+
+ /**
+ * Creates a MMS messsage with a text and an Image attachments
+ **/
+ void createMMSWithTextAndImageAttachment();
+
+ /**
+ * Tests the MMS message with a text and an Image attachments
+ **/
+ void testMMSWithTextAndImageAttachment();
+
+ /**
+ * Sends the MMS message with a text and an Image attachments
+ **/
+ void sendMMSWithTextAndImageAttachment();
+
+ /**
+ * Tests that the MMS message is sent successfully
+ **/
+ void testSentMMSWithTextAndImageAttachment();
+
+ /**
+ * Cleans up each Test Case
+ **/
+ void cleanup();
+
+ /**
+ * Cleans up the whole Test Case
+ **/
+ void cleanupTestCase();
+
+private: // Data
+
+ /**
+ * msgPlugin - MMS Message Plug-in
+ **/
+ UniEditorMmsPlugin* msgPlugin;
+
+ /**
+ * mmstestbed - MMS Message Simulator
+ **/
+ MmsTestBed* mmstestbed;
+
+ /**
+ * spy_draft - Signal Spy for Draft Folder
+ **/
+ QSignalSpy* spy_draft;
+
+ /**
+ * spy_outbox - Signal Spy for Outbox Folder
+ **/
+ QSignalSpy* spy_outbox;
+
+ /**
+ * spy_sent - Signal Spy for Sent Folder
+ **/
+ QSignalSpy* spy_sent;
+
+ /**
+ * spy_inbox - Signal Spy for Inbox Folder
+ **/
+ QSignalSpy* spy_inbox;
+
+ /**
+ * mmsMsgId - The MMS message Id
+ **/
+ long int mmsMsgId;
+ };
+#endif //TEST_MMS_PLUGIN_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditormmsplugin/tsrc/testmmsgplugin/inc/testmmsplugin.ini Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,9 @@
+//this file is used to provide predefined set of input data.
+
+//eg.
+const char TEST_MSG_SUBJECT[] = "Message Subject";
+const char TEST_SENDER[] = "DummySender<+919860479112>";
+const char TEST_ATTACHMENT4[] = "c:\\SmileyFace.gif";
+const char TEST_ATTACHMENT5[] = "c:\\sample.txt";
+const char TEST_CC[] = "DummyCCAddress<+919860479113>";
+const char TEST_BCC[] = "DummyBCCAddress<+919860479114>";
\ No newline at end of file
Binary file messagingapp/msgutils/unieditorutils/unieditorplugins/unieditormmsplugin/tsrc/testmmsgplugin/mms.rsc has changed
Binary file messagingapp/msgutils/unieditorutils/unieditorplugins/unieditormmsplugin/tsrc/testmmsgplugin/not.rsc has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditormmsplugin/tsrc/testmmsgplugin/src/testmmsplugin.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,415 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: : Main test class definition for MMS Plugin
+ */
+
+#include <QtTest/QtTest>
+#include <QTimer>
+#include <QSignalSpy>
+#include "debugtraces.h"
+#include "testmmsplugin.h"
+#include "convergedmessage.h"
+#include "convergedmessageid.h"
+#include "unieditormmsplugin.h"
+#include "mmstestbed.h"
+#include "testmmsplugin.ini"
+
+//---------------------------------------------------------------
+// TestMmsPlugin::initTestCase
+//---------------------------------------------------------------
+void TestMmsPlugin::initTestCase()
+{
+ //Instantiate UniEditorMmsPlugin and verify if it is correctly Instantited.
+ msgPlugin = new UniEditorMmsPlugin();
+ QVERIFY(msgPlugin != NULL);
+
+ //Verify if MMS service is Validated.
+ QCOMPARE(msgPlugin->validateService(), 1);
+ QCOMPARE(msgPlugin->isServiceValid(), 1);
+ msgPlugin->setEncodingSettings(ETrue, ESmsEncodingNone, -1);
+ QString str("Hello");
+ TInt numOfRemainingChars = 1;
+ TInt numOfPDUs = 1;
+ TBool unicodeMode = ETrue;
+ TSmsEncoding smsEncoding = ESmsEncodingNone;
+ QVERIFY(msgPlugin->getNumPDUs(str, numOfRemainingChars, numOfPDUs, unicodeMode, smsEncoding) == true);
+
+ //Verify MmsTestBed Instance.
+ mmstestbed = new MmsTestBed;
+ QVERIFY(mmstestbed != NULL);
+
+ //register user defined object to meta system.
+ qRegisterMetaType<long int> ("long int");
+
+ //set up signalspy to listen to signals emitted by mmstestbed
+ spy_draft = new QSignalSpy(mmstestbed, SIGNAL(entryCreatedInDraft(long int)));
+ spy_outbox = new QSignalSpy(mmstestbed, SIGNAL(entryMovedToOutbox(long int)));
+ spy_sent = new QSignalSpy(mmstestbed, SIGNAL(entryMovedToSent(long int)));
+ spy_inbox = new QSignalSpy(mmstestbed, SIGNAL(entryCreatedInInbox(long int)));
+}
+
+//---------------------------------------------------------------
+// TestMmsPlugin::init
+//---------------------------------------------------------------
+void TestMmsPlugin::init()
+{
+}
+
+//---------------------------------------------------------------
+// TestMmsPlugin::createMMSWithTextAttachment
+//---------------------------------------------------------------
+void TestMmsPlugin::createMMSWithTextAttachment()
+{
+ //Create a Converged Message instance.
+ QString subject = TEST_MSG_SUBJECT;
+ qint64 timeStamp = QDateTime::currentDateTime().toTime_t();
+
+ QString sender(TEST_SENDER);
+ ConvergedMessageAddress address(sender);
+ ConvergedMessageAttachmentList attachmentList;
+
+ //Add a text attachment to attachment list.
+ QString attachmentPath = TEST_ATTACHMENT5;
+ ConvergedMessageAttachment* attachment =
+ new ConvergedMessageAttachment(attachmentPath, ConvergedMessageAttachment::EAttachment);
+
+ attachmentList.append(attachment);
+
+ //Instantiate a Converged Message object and set service a MMS
+ ConvergedMessage msg;
+ msg.setMessageType(ConvergedMessage::Mms);
+
+ //Set Subject
+ msg.setSubject(subject);
+
+ msg.setTimeStamp(timeStamp);
+
+ //Set recipient.
+ msg.addToRecipient(address);
+
+ //Add attachments' list
+ msg.addAttachments(attachmentList);
+ msg.setPriority(ConvergedMessage::Normal);
+
+ //Adding CC Address
+ QString ccAddress(TEST_CC);
+ ConvergedMessageAddress ccAdd(ccAddress);
+ msg.addCcRecipient(ccAdd);
+
+ //Adding BCC Address
+ QString bccAddress(TEST_BCC);
+ ConvergedMessageAddress bccAdd(bccAddress);
+ msg.addBccRecipient(bccAdd);
+
+ //Adding From Address
+ QString recipientAddress(TEST_SENDER);
+ ConvergedMessageAddress recipientAdd(recipientAddress);
+ msg.addFromRecipient(recipientAdd);
+
+ //start send and prepare to test send-success or fail
+ mmstestbed->cleanAll();
+ mmstestbed->setConnectionLocal(true);
+
+ //Get a valid MMS message ID and verify that it is valid.
+ mmsMsgId = msgPlugin->convertTo(&msg);
+ QVERIFY(mmsMsgId != -1);
+}
+
+//---------------------------------------------------------------
+// TestMmsPlugin::testMMSWithTextAttachment
+//---------------------------------------------------------------
+void TestMmsPlugin::testMMSWithTextAttachment()
+{
+ long int mmsDraftMsgId;
+
+ //check if draft-folder signal was received...this means message was created in draft
+ if( 1 <= spy_draft->count())
+ {
+ //compare the msgid and verify with the ID given by MMS plugin
+ void * temp = const_cast<void*>(spy_draft->at(0).at(0).data());
+ mmsDraftMsgId = *reinterpret_cast< long int(*)>(temp);
+ QVERIFY(mmsDraftMsgId == mmsMsgId);
+
+ //Validate the MMS message with all the values set before.
+ ConvergedMessage* draftMsg = msgPlugin->convertFrom(mmsDraftMsgId);
+ QVERIFY(draftMsg->subject().compare(QString(TEST_MSG_SUBJECT)) == 0);
+ QVERIFY(draftMsg->messageType() == ConvergedMessage::Mms);
+ QVERIFY(QString(TEST_SENDER).contains(draftMsg->toAddressList()[0]->address(), Qt::CaseInsensitive) == true);
+ QVERIFY(QString(TEST_CC).contains(draftMsg->ccAddressList()[0]->address(), Qt::CaseInsensitive) == true);
+ QVERIFY(QString(TEST_BCC).contains(draftMsg->bccAddressList()[0]->address(), Qt::CaseInsensitive) == true);
+ QVERIFY(QString(TEST_SENDER).contains(draftMsg->fromAddress()->address(), Qt::CaseInsensitive) == true);
+ QVERIFY(draftMsg->attachments().count() == 1);
+ QVERIFY(draftMsg->attachments()[0]->attachmentType() == ConvergedMessageAttachment::EAttachment);
+ QVERIFY(draftMsg->attachments()[0]->filePath().contains(QString(TEST_ATTACHMENT5).mid(QString(TEST_ATTACHMENT5).indexOf(QString("Sample.txt"), 0, Qt::CaseInsensitive)), Qt::CaseInsensitive) == true);
+ }
+ else
+ {
+ QFAIL("testSendReceiveMMS: Failed to create message in Draft");
+ //reset connection to 'global on, local off'
+ mmstestbed->setConnectionLocal(false);
+ }
+}
+
+//---------------------------------------------------------------
+// TestMmsPlugin::sendMMSWithTextAttachment
+//---------------------------------------------------------------
+void TestMmsPlugin::sendMMSWithTextAttachment()
+{
+ //Send the MMS message and verify if it was sent successfully.
+ bool sent = msgPlugin->send(mmsMsgId);
+ QVERIFY(sent == true);
+}
+
+//---------------------------------------------------------------
+// TestMmsPlugin::testSentMMSWithTextAttachment
+//---------------------------------------------------------------
+void TestMmsPlugin::testSentMMSWithTextAttachment()
+{
+ QTest::qWait(10000); //to ensure path completion
+
+ //check if outbox-folder signal was received...this means message was moved to outbox for send
+ if( 1 <= spy_outbox->count())
+ {
+ //compare the msgid
+ void * temp = const_cast<void*>(spy_outbox->at(0).at(0).data());
+ long int outboxId = *reinterpret_cast< long int(*)>(temp);
+ QCOMPARE(outboxId, mmsMsgId);
+
+ //push the message from outbox to mmsc(sent folder)
+ mmstestbed->fromOutboxToMmsc();
+ }
+ else
+ {
+ QFAIL("testSendReceiveMMS: Failed to move message to Outbox");
+
+ //reset connection to 'global on, local off'
+ mmstestbed->setConnectionLocal(false);
+ return;
+ }
+
+ //check if sent-folder signal was received....this means message was successfully sent scheduled.
+ if( 1 <= spy_sent->count())
+ {
+ //check for send-path
+ void * temp = const_cast<void*>(spy_sent->at(0).at(0).data());
+ long int sentmsgid = *reinterpret_cast< long int(*)>(temp);
+ QCOMPARE(sentmsgid, mmsMsgId);
+
+ //issue a fetch request on the sent message, to test the receive path
+ mmstestbed->fromMmscToInbox();
+ }
+ else
+ {
+ QFAIL("testSendReceiveMMS: Failed to move message to Sent folder");
+
+ //reset connection to 'global on, local off'
+ mmstestbed->setConnectionLocal(false);
+ return;
+ }
+
+ //check if inbox-folder signal was received....this means message was successfully received at the inbox folder.
+ if( spy_inbox->count() <= 0)
+ {
+ QFAIL("testSendReceiveMMS: Failed to move message to Inbox folder");
+
+ //reset connection to 'global on, local off'
+ mmstestbed->setConnectionLocal(false);
+ }
+}
+
+//---------------------------------------------------------------
+// TestMmsPlugin::createMMSWithTextAndImageAttachment
+//---------------------------------------------------------------
+void TestMmsPlugin::createMMSWithTextAndImageAttachment()
+{
+ //Create a Converged Message instance.
+ QString subject = TEST_MSG_SUBJECT;
+ qint64 timeStamp = QDateTime::currentDateTime().toTime_t();
+
+ QString sender(TEST_SENDER);
+ ConvergedMessageAddress address(sender);
+ ConvergedMessageAttachmentList attachmentList;
+
+ //Add a text attachment to attachment list.
+ QString attachmentPath1 = TEST_ATTACHMENT5;
+ ConvergedMessageAttachment* attachment =
+ new ConvergedMessageAttachment(attachmentPath1, ConvergedMessageAttachment::EInline);
+
+ //Add an image attachment to attachment list.
+ QString attachmentPath2 = TEST_ATTACHMENT4;
+ ConvergedMessageAttachment* attachmentImage =
+ new ConvergedMessageAttachment(attachmentPath2, ConvergedMessageAttachment::EAttachment);
+
+ attachmentList.append(attachment);
+ attachmentList.append(attachmentImage);
+
+ //Instantiate a Converged Message object and set service a MMS
+ ConvergedMessage msg;
+ msg.setMessageType(ConvergedMessage::Mms);
+ msg.setSubject(subject);
+ msg.setTimeStamp(timeStamp);
+ msg.addToRecipient(address);
+
+ //Add attachments' list
+ msg.addAttachments(attachmentList);
+ msg.setPriority(ConvergedMessage::Normal);
+
+ //Adding CC Address
+ QString ccAddress(TEST_CC);
+ ConvergedMessageAddress ccAdd(ccAddress);
+ msg.addCcRecipient(ccAdd);
+
+ //Adding BCC Address
+ QString bccAddress(TEST_BCC);
+ ConvergedMessageAddress bccAdd(bccAddress);
+ msg.addBccRecipient(bccAdd);
+
+ //Adding From Address
+ QString recipientAddress(TEST_SENDER);
+ ConvergedMessageAddress recipientAdd(recipientAddress);
+ msg.addFromRecipient(recipientAdd);
+
+ //start send and prepare to test send-success or fail
+ mmstestbed->cleanAll();
+ mmstestbed->setConnectionLocal(true);
+
+ //Get a valid MMS message ID and verify that it is valid.
+ mmsMsgId = msgPlugin->convertTo(&msg);
+ QVERIFY(mmsMsgId != -1);
+}
+
+//---------------------------------------------------------------
+// TestMmsPlugin::testMMSWithTextAndImageAttachment
+//---------------------------------------------------------------
+void TestMmsPlugin::testMMSWithTextAndImageAttachment()
+{
+ long int mmsDraftMsgId;
+
+ //check if draft-folder signal was received...this means message was created in draft
+ if( 1 <= spy_draft->count())
+ {
+ //compare the msgid and verify with the ID given by MMS plugin
+ void * temp = const_cast<void*>(spy_draft->at(1).at(0).data());
+ mmsDraftMsgId = *reinterpret_cast< long int(*)>(temp);
+ QVERIFY(mmsDraftMsgId == mmsMsgId);
+
+ //Validate the MMS message with all the values set before.
+ ConvergedMessage* draftMsg = msgPlugin->convertFrom(mmsDraftMsgId);
+ QVERIFY(draftMsg->subject().compare(QString(TEST_MSG_SUBJECT)) == 0);
+ QVERIFY(draftMsg->messageType() == ConvergedMessage::Mms);
+ QVERIFY(QString(TEST_SENDER).contains(draftMsg->toAddressList()[0]->address(), Qt::CaseInsensitive) == true);
+ QVERIFY(QString(TEST_CC).contains(draftMsg->ccAddressList()[0]->address(), Qt::CaseInsensitive) == true);
+ QVERIFY(QString(TEST_BCC).contains(draftMsg->bccAddressList()[0]->address(), Qt::CaseInsensitive) == true);
+ QVERIFY(QString(TEST_SENDER).contains(draftMsg->fromAddress()->address(), Qt::CaseInsensitive) == true);
+ QVERIFY(draftMsg->attachments().count() == 1);
+ QVERIFY(draftMsg->attachments()[0]->attachmentType() == ConvergedMessageAttachment::EAttachment);
+ QVERIFY(draftMsg->attachments()[0]->filePath().contains(QString(TEST_ATTACHMENT4).mid(QString(TEST_ATTACHMENT4).indexOf(QString("SmileyFace.gif"), 0, Qt::CaseInsensitive)), Qt::CaseInsensitive) == true);
+ }
+ else
+ {
+ QFAIL("testSendReceiveMMS: Failed to create message in Draft");
+ //reset connection to 'global on, local off'
+ mmstestbed->setConnectionLocal(false);
+ }
+}
+
+//---------------------------------------------------------------
+// TestMmsPlugin::sendMMSWithTextAndImageAttachment
+//---------------------------------------------------------------
+void TestMmsPlugin::sendMMSWithTextAndImageAttachment()
+{
+ //Send the MMS message and verify if it was sent successfully.
+ bool sent = msgPlugin->send(mmsMsgId);
+ QVERIFY(sent == true);
+}
+
+//---------------------------------------------------------------
+// TestMmsPlugin::testSentMMSWithTextAndImageAttachment
+//---------------------------------------------------------------
+void TestMmsPlugin::testSentMMSWithTextAndImageAttachment()
+{
+ QTest::qWait(10000); //to ensure path completion
+
+ //check if outbox-folder signal was received...this means message was moved to outbox for send
+ if( 1 <= spy_outbox->count())
+ {
+ //compare the msgid
+ void * temp = const_cast<void*>(spy_outbox->at(1).at(0).data());
+ long int outboxId = *reinterpret_cast< long int(*)>(temp);
+ QCOMPARE(outboxId, mmsMsgId);
+
+ //push the message from outbox to mmsc(sent folder)
+ mmstestbed->fromOutboxToMmsc();
+ }
+ else
+ {
+ QFAIL("testSendReceiveMMS: Failed to move message to Outbox");
+
+ //reset connection to 'global on, local off'
+ mmstestbed->setConnectionLocal(false);
+ return;
+ }
+
+ //check if sent-folder signal was received....this means message was successfully sent scheduled.
+ if( 1 <= spy_sent->count())
+ {
+ //check for send-path
+ void * temp = const_cast<void*>(spy_sent->at(1).at(0).data());
+ long int sentmsgid = *reinterpret_cast< long int(*)>(temp);
+ QCOMPARE(sentmsgid, mmsMsgId);
+
+ //issue a fetch request on the sent message, to test the receive path
+ mmstestbed->fromMmscToInbox();
+ }
+ else
+ {
+ QFAIL("testSendReceiveMMS: Failed to move message to Sent folder");
+
+ //reset connection to 'global on, local off'
+ mmstestbed->setConnectionLocal(false);
+ return;
+ }
+
+ //check if inbox-folder signal was received....this means message was successfully received at the inbox folder.
+ if( spy_inbox->count() <= 0)
+ {
+ QFAIL("testSendReceiveMMS: Failed to move message to Inbox folder");
+
+ //reset connection to 'global on, local off'
+ mmstestbed->setConnectionLocal(false);
+ }
+}
+
+//---------------------------------------------------------------
+// TestMmsPlugin::cleanup
+//---------------------------------------------------------------
+void TestMmsPlugin::cleanup()
+{
+}
+
+//---------------------------------------------------------------
+// TestMmsPlugin::cleanupTestCase
+//---------------------------------------------------------------
+void TestMmsPlugin::cleanupTestCase()
+{
+ //Cleanup
+ delete spy_draft;//Signal for Draft Folder
+ delete spy_outbox;//Signal for Outbox Folder
+ delete spy_sent;//Signal for Sent Folder
+ delete spy_inbox;//Signal for inbox Folder
+ delete msgPlugin;//MMS Plugin
+ delete mmstestbed;//MMS Testbed
+}
+
+//End of File
--- a/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditormmsplugin/tsrc/testmmsgplugin/testmmsplugin.cpp Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,322 +0,0 @@
-/*
- * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of "Eclipse Public License v1.0"
- * which accompanies this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html".
- *
- * Initial Contributors:
- * Nokia Corporation - initial contribution.
- *
- * Contributors:
- *
- * Description:
- */
-
-#include "testmmsplugin.h"
-#include <QtTest/QtTest>
-#include "debugtraces.h"
-
-#include <QTimer>
-#include <QSignalSpy>
-
-#include "convergedmessage.h"
-#include "TestMsg.h"
-#include "convergedmessageid.h"
-#include "unieditormmsplugin.h"
-#include "messageserviceaction.h"
-//---------------------------------------------------------------
-// TestMmsPlugin::initTestCase
-//---------------------------------------------------------------
-void TestMmsPlugin::initTestCase()
-{
- msgPlugin = new UniEditorMmsPlugin();
- QVERIFY(msgPlugin != 0);
- smsId = -1;
- mmsId = -1;
-}
-
-//---------------------------------------------------------------
-// TestMmsPlugin::cleanupTestCase
-//---------------------------------------------------------------
-void TestMmsPlugin::cleanupTestCase()
-{
- delete msgPlugin;
-}
-
-//---------------------------------------------------------------
-// TestMmsPlugin::init
-//---------------------------------------------------------------
-
-void TestMmsPlugin::init()
-{
-}
-
-//---------------------------------------------------------------
-// TestMmsPlugin::cleanup
-//---------------------------------------------------------------
-void TestMmsPlugin::cleanup()
-{
-}
-
-//---------------------------------------------------------------
-// TestMmsPlugin::testSendMMS
-//---------------------------------------------------------------
-
-void TestMmsPlugin::testSendMMS()
-{
-
- //register user defined object to meta system.
- qRegisterMetaType<ConvergedMessage*> ("ConvergedMessage*");
-
-
- createMMSMessageWithAttachmentAndSend();
- //wait for the response to complete
- //as sending a message goes through different stages
-
- //Create a smil attachment with image and text
- createMMSMessageWithSmilTextAndImageAttachmentAndSend();
-
- //Create MMS with Normal priority
- createMMSMessageWithAttachmentAndSend(ETrue);
-}
-
-
-void TestMmsPlugin::createMMSMessageWithSmilTextAndImageAttachmentAndSend()
- {
- QString service = TEST_SERVICE_NAME_MMS;
- QString bodyText = TEST_MSG_BODY;
- QString subject = TEST_MSG_SUBJECT;
- qint64 timeStamp = QDateTime::currentDateTime().toTime_t();
-
- QString sender(TEST_SENDER);
- ConvergedMessageAddress address(sender);
- ConvergedMessageAttachmentList attachmentList;
-
- ConvergedMessageAttachment* attachmentImage =
- new ConvergedMessageAttachment(TEST_ATTACHMENT4, ConvergedMessageAttachment::EAttachment);
- attachmentList.append(attachmentImage);
-
- ConvergedMessageAttachment* attachmenttext =
- new ConvergedMessageAttachment(TEST_ATTACHMENT5, ConvergedMessageAttachment::EAttachment);
- attachmentList.append(attachmenttext);
-
- ConvergedMessageAttachment* attachmentSmil =
- new ConvergedMessageAttachment(TEST_ATTACHMENT3, ConvergedMessageAttachment::ESmil);
- attachmentList.append(attachmentSmil);
-
-
-
- ConvergedMessage msg;
- msg.setMessageType(ConvergedMessage::Mms);
- msg.setSubject(subject);
- msg.setTimeStamp(timeStamp);
- msg.addToRecipient(address);
- msg.addAttachments(attachmentList);
- msg.setPriority(ConvergedMessage::Low);
-
- long int id = msgPlugin->convertTo(&msg);
- msgPlugin->send(id);
-
- }
-
-
-//---------------------------------------------------------------
-// TestMmsPlugin::testMmsReceived
-//---------------------------------------------------------------
-void TestMmsPlugin::testMmsReceived()
-{
- testReceived(msgPlugin->messageType());
- QTest::qWait(5000);
-}
-
-/*
- * Creates a Smil file with only a text document as attachment
- */
-
-void TestMmsPlugin::createMMSMessageWithAttachmentAndSend(TBool priority)
- {
- QString service = TEST_SERVICE_NAME_MMS;
- QString bodyText = TEST_MSG_BODY;
- QString subject = TEST_MSG_SUBJECT;
- qint64 timeStamp = QDateTime::currentDateTime().toTime_t();
-
- QString sender(TEST_SENDER);
- ConvergedMessageAddress address(sender);
- ConvergedMessageAttachmentList attachmentList;
-
-
- ConvergedMessageAttachment* attachment2 =
- new ConvergedMessageAttachment(TEST_ATTACHMENT2, ConvergedMessageAttachment::ESmil);
-
- ConvergedMessageAttachment* attachment =
- new ConvergedMessageAttachment(TEST_ATTACHMENT, ConvergedMessageAttachment::EAttachment);
-
- attachmentList.append(attachment);
-
- attachmentList.append(attachment2);
-
- ConvergedMessage msg;
- msg.setMessageType(ConvergedMessage::Mms);
- msg.setSubject(subject);
- msg.setTimeStamp(timeStamp);
- msg.addToRecipient(address);
- msg.addAttachments(attachmentList);
- if(priority == EFalse)
- {
- msg.setPriority(ConvergedMessage::Normal);
- }
- else
- {
- msg.setPriority(ConvergedMessage::High);
- }
-
- //Adding alias
- ConvergedMessageAddress address1;
- address1.setAlias(QString(TEST_MSG_RECIEPIENT));
- msg.addToRecipient(address1);
-
- //Adding CC Address
- QString ccAddress(TEST_CC);
- ConvergedMessageAddress ccAdd(ccAddress);
- msg.addCcRecipient(ccAdd);
-
- //Adding BCC Address
- QString bccAddress(TEST_BCC);
- ConvergedMessageAddress bccAdd(bccAddress);
- msg.addBccRecipient(bccAdd);
-
- long int id = msgPlugin->convertTo(&msg);
- msgPlugin->send(id);
- }
-
-//---------------------------------------------------------------
-// TestMmsPlugin::testReceived
-//---------------------------------------------------------------
-void TestMmsPlugin::testReceived(int type)
-{
-MessageServiceAction* messageAction = new MessageServiceAction(this);
- QVERIFY(messageAction != 0);
-
- //register user defined object to meta system.
- qRegisterMetaType<ConvergedMessage*>("ConvergedMessage*");
-
- //signal spy.
- //listen to added event
- QSignalSpy spyAdd( messageAction,
- SIGNAL(messageAdded(ConvergedMessage*, QString)));
- //signal spy.
- //listen to updated event
- QSignalSpy spyUpdate( messageAction,
- SIGNAL(messageUpdated(ConvergedMessage*, QString)));
- //will force stub_clientmanager to emit messageUpdated.
- messageAction->registerForNotification();
- //register user defined object to meta system.
-
- // wait for the response to come
- QTest::qWait(5000);
-
- //check signals
- int countAdd = -1;
- countAdd = spyAdd.count();
-
- ConvergedMessage* message = 0;
- QString serviceId("");
-
- if (countAdd)
- {
- //verify added event
- void * temp = const_cast<void*> (spyAdd.at(0).at(0).data());
- message = *reinterpret_cast<ConvergedMessage*(*)> (temp);
- serviceId = spyAdd.at(0).at(1).toString();
- QVERIFY(message != 0);
- validateMsg(*message, serviceId);
- }
-
- int countUpdate = -1;
- countUpdate = spyUpdate.count();
- message = 0;
-
- for (int i = countUpdate; i > 0; --i)
- {
- //verify updated event
- void * temp = const_cast<void*> (spyUpdate.at(i-1).at(0).data());
- message = *reinterpret_cast<ConvergedMessage*(*)> (temp);
- if (ConvergedMessage::Inbox == message->location())
- {
- serviceId = spyUpdate.at(i-1).at(1).toString();
- break;
- }
- }
- if (message)
- {
- validateMsg(*message, serviceId);
- }
- delete message;
-}
-
-//---------------------------------------------------------------
-// TestMmsPlugin::validateMsg
-//---------------------------------------------------------------
-void TestMmsPlugin::validateMsg(const ConvergedMessage& message,
- const QString& serviceId)
-{
-#ifdef _DEBUG_TRACES_
- qDebug() << "....message received.....";
-#endif
-
- //process incoming messages
- if (message.location() == ConvergedMessage::Inbox)
- {
- int msgId;
- if (message.id())
- {
- msgId = message.id()->getId();
- }
- ConvergedMessageAddressList array = message.toAddressList();
- if (array.count() > 0)
- {
- if (array[0])
- QCOMPARE(array[0]->address(),QString(TEST_MSG_FROM1));
- }
- ConvergedMessageAddress *fromAddr = message.fromAddress();
- if (fromAddr)
- {
- QCOMPARE(fromAddr->address(),QString(TEST_MSG_FROM1));
- }
-
- QCOMPARE(serviceId,QString(TEST_SERVICE_ID));
-
- if (message.messageType() == ConvergedMessage::Mms)
- {
- mmsId = msgId;
- QCOMPARE(message.subject(), QString(TEST_MSG_SUBJECT));
- }
- else if (message.messageType() == ConvergedMessage::Sms)
- {
- smsId = msgId;
- QCOMPARE(message.bodyText(), QString(TEST_MSG_BODY));
- }
- }
- else if (message.location() == ConvergedMessage::Sent)
- {
- ConvergedMessageAddressList array = message.toAddressList();
- if (array.count() > 0)
- {
- if (array[0])
- QCOMPARE(array[0]->address(),QString(TEST_SENDER));
- }
-
- // QCOMPARE(serviceId,QString(TEST_SERVICE_ID));
-
- if (message.messageType() == ConvergedMessage::Mms)
- {
- QCOMPARE(message.subject(), QString(TEST_MSG_SUBJECT));
- }
- else if (message.messageType() == ConvergedMessage::Sms)
- {
- QCOMPARE(message.bodyText(), QString(TEST_MSG_BODY));
- }
- }
-}
--- a/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditormmsplugin/tsrc/testmmsgplugin/testmmsplugin.h Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,57 +0,0 @@
-/*
- * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of "Eclipse Public License v1.0"
- * which accompanies this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html".
- *
- * Initial Contributors:
- * Nokia Corporation - initial contribution.
- *
- * Contributors:
- *
- * Description:
- */
-
-#ifndef TEST_MMS_PLUGIN_H
-#define TEST_MMS_PLUGIN_H
-
-#ifdef BUILD_TEST_DLL
-#define TEST_EXPORT Q_DECL_EXPORT
-#else
-#define TEST_EXPORT Q_DECL_IMPORT
-#endif
-
-#include <QObject>
-#include <e32const.h>
-
-class UniEditorMmsPlugin;
-class ConvergedMessage;
-
-class TEST_EXPORT TestMmsPlugin: public QObject
- {
- Q_OBJECT
-
-private slots:
- //called by frame work.
- void initTestCase();//called before the first testfunction is executed.
- void cleanupTestCase();//called after the last testfunction was executed.
- void init();//called before each testfunction is executed.
- void cleanup();//called after every testfunction.
-
- //test cases.
- void testSendMMS(); //test sending mms
- void testMmsReceived(); // test receiving mms
-
-private:
- void testReceived(int type);
- void validateMsg(const ConvergedMessage& message, const QString& serviceId);
- void createMMSMessageWithAttachmentAndSend(TBool priority = EFalse);
- void createMMSMessageWithSmilTextAndImageAttachmentAndSend();
-private:
- UniEditorMmsPlugin* msgPlugin;
- int smsId;
- int mmsId;
- };
-#endif //TEST_MMS_PLUGIN_H
--- a/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditormmsplugin/tsrc/testmmsgplugin/testmmsplugin.ini Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-//this file is used to provide predefined set of input data.
-
-//eg.
-const char TEST_SERVICE_SMS[] = "SMS";
-const char TEST_SERVICE_ID[] = "messaging.mserver";
-const char TEST_SERVICE_SMS_ID[] = "messaging.mserver.sms";
-const char TEST_SERVICE_MMS_ID[] = "messaging.mserver.mms";
-const char TEST_SERVICE_MMS[] = "MMS";
-const char TEST_MSG_BODY[] = "TestTextE_1_2";
-const char TEST_MSG_RECIEPIENT[] = "Javaid Nabi<+919741596546>";
-const char TEST_MSG_FROM1[] = "+44111111111";
-const char SERVICE_CENTER_01[] = "+447802000332";
-const char SERVICE_CENTER_02[] = "+919845087001";
-const char TEST_MSG_ALIAS1[] = "Javaid Nabi";
-const char TEST_MSG_FROM2[] = "9797979797";
-const char TEST_MSG_ALIAS2[] = "Rajesh Batchu";
-const char TEST_MSG_SUBJECT[] = "Message Subject";
-const char TEST_SERVICE_NAME_MMS[] = "messaging.mserver.testservice.MMS";
-const char TEST_SENDER[] = "DummySender";
-const char TEST_ATTACHMENT[] = "c:/sample.txt";
-const char TEST_ATTACHMENT2[] = "c:/HelloWorld.smil";
-const char TEST_ATTACHMENT3[] = "c:/ImageFile.smil";
-const char TEST_ATTACHMENT4[] = "c:/SmileyFace.gif";
-const char TEST_ATTACHMENT5[] = "c:/testfile.txt";
-const char TEST_MSG_TO3[] = "SS<+44111111111>";
-const char TEST_CC[] = "DummyCCAddress";
-const char TEST_BCC[] = "DummyBCCAddress";
\ No newline at end of file
--- a/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditormmsplugin/tsrc/testmmsgplugin/testmmsplugin.pro Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditormmsplugin/tsrc/testmmsgplugin/testmmsplugin.pro Thu Jul 22 16:32:06 2010 +0100
@@ -20,25 +20,31 @@
TEMPLATE = lib
TARGET = test-mms-plugin
-
-INCLUDEPATH += .
-INCLUDEPATH += ../../../../../../inc
-INCLUDEPATH += ../../../../unieditorutils/inc
-INCLUDEPATH += ../../../../s60qconversions/inc
+INCLUDEPATH += ./inc
+INCLUDEPATH += ../../../../../../../inc
+INCLUDEPATH += ../../../../../unidatautils/unidatamodels/inc
+INCLUDEPATH += ../../../../../s60qconversions/inc
+INCLUDEPATH += ../../../../editorgenutils/inc
+INCLUDEPATH += ../../../../../../../inc
+INCLUDEPATH += ../../../../../../../mmsengine/mmsmessage/inc
+INCLUDEPATH += ../../../../../../../mmsengine/inc
+INCLUDEPATH += ../../../../../unidatautils/unidatamodel/inc
+INCLUDEPATH += ../mmstestbed/inc
INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
DEFINES += BUILD_TEST_DLL
+CONFIG += hb plugin
+
SOURCES += \
- testmmsplugin.cpp \
+ ./src/testmmsplugin.cpp \
../../src/unieditormmsplugin.cpp \
../../src/unieditormmsplugin_p.cpp
# Input
HEADERS += \
- testmmsplugin.h \
- testmsg.h \
+ ./inc/testmmsplugin.h \
../../inc/unieditormmsplugin.h \
../../inc/unieditormmsplugin_p.h
@@ -84,6 +90,14 @@
-lcommdb \
-lcommsdat \
-letelmm \
- -lgenericclient \
- -lunidatamodelloader
-
+ -lunidatamodelloader \
+ -lunidatamodel \
+ -lavkon \
+ -leikcoctl \
+ -leikctl \
+ -lform \
+ -luiklaf\
+ -lmmstestbed \
+ -lmmsmessage \
+ -lmmsserversettings \
+ -lxqutils
--- a/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditormmsplugin/tsrc/testmmsgplugin/testmsg.h Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,600 +0,0 @@
-/*
- * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of "Eclipse Public License v1.0"
- * which accompanies this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html".
- *
- * Initial Contributors:
- * Nokia Corporation - initial contribution.
- *
- * Contributors:
- *
- * Description:
- */
-
-#ifndef TEST_MSG_H
-#define TEST_MSG_H
-//Headers
-#include <e32svr.h>
-#include <SMUTHDR.H>
-#include <msvapi.h>
-#include <smut.h>
-#include <msvstd.h>
-#include <rsendas.h>
-#include <rsendasmessage.h>
-#include <SMSCLNT.H>
-#include <csmsaccount.h>
-//#include <MTMStore.h>
-#include <mtclreg.h>
-#include <mtclbase.h>
-#include <txtrich.h> // CRichText
-#include <msvids.h> // for Message type IDs
-#include <mmsclient.h> // for CMmsClientMtm
-#include <CMsvMimeHeaders.h> //Attachemt mimeheader
-#include <MMsvAttachmentManager.h> //Attachment manager
-#include <MMsvAttachmentManagerSync.h>
-#include <f32file.h> //parse
-#include <utf.h>
-
-#include <e32base.h>
-#include <e32property.h>
-#include <simtsy.h>
-#include <etelmm.h>
-#include <es_ini.h>
-#include <commsdattypesv1_1.h>
-#include <commsdat.h>
-
-#include <Qtdebug>
-#include <s60qconversions.h>
-#include "testmmsplugin.ini"
-
-using namespace CommsDat;
-
-const TInt KMsvTestUidPhonePwrValue = 0x100052C5;
-enum TMsvTestPhoneStatus
- {
- EMsvTestPhoneOff = 0,
- EMsvTestPhoneOn
- };
-
-class TestMsg : public MMsvSessionObserver
-{
-public:
-
- TestMsg();
- ~TestMsg();
-
- void createSCSettings();
-
- void createSMS();
- void createMMS();
-
- void deleteMessage(int msgId);
-
- void initSimTsyL();
-
-public: //MMsvSessionObserver
-
- void HandleSessionEventL(TMsvSessionEvent aEvent, TAny* aArg1, TAny* aArg2,
- TAny* aArg3);
-
-private:
-
- void initL();
- void createSMSL(TMsvId aFolderId, TBool aUnReadFlag);
- void createMMSL(TMsvId aFolderId, TBool aUnReadFlag);
- void initializeSimTsyL(TInt aTestNumber, HBufC* aTsyName);
-
-private:
-
- CMsvSession* iSession;
- CClientMtmRegistry* iMtmRegistry;
- CSmsClientMtm *smsClientMtm;
-};
-
-//---------------------------------------------------------------
-// TestMsg::TestMsg
-//---------------------------------------------------------------
-TestMsg::TestMsg()
-{
- int err;
- TRAP(err,initL());
- #ifdef _DEBUG_TRACES_
-qDebug() << "Error in initialization:" << err;
-#endif
-
-}
-
-//---------------------------------------------------------------
-// TestMsg::TestMsg
-//---------------------------------------------------------------
-TestMsg::~TestMsg()
-{
- if(smsClientMtm)
- {
- delete smsClientMtm;
- smsClientMtm = NULL;
- }
-
- if (iMtmRegistry)
- {
- delete iMtmRegistry;
- iMtmRegistry = NULL;
- }
-
- if (iSession)
- {
- delete iSession;
- iSession = NULL;
- }
-}
-
-//---------------------------------------------------------------
-// TestMsg::createSCSettings
-//---------------------------------------------------------------
-void TestMsg::createSCSettings()
-{
- smsClientMtm = static_cast<CSmsClientMtm*> (iMtmRegistry->NewMtmL(KUidMsgTypeSMS));
-
- TMsvSelectionOrdering ordering;
-
- CMsvEntry* root = CMsvEntry::NewL(smsClientMtm->Session(),
- KMsvRootIndexEntryId,
- ordering);
-
- CSmsAccount* smsAccount = CSmsAccount::NewLC();
-
- CSmsSettings* settings = CSmsSettings::NewL();
- CleanupStack::PushL(settings);
- smsAccount->LoadSettingsL(*settings);
-
- TMsvEntry entry;
- entry.iMtm = KUidMsgTypeSMS;
- entry.iType = KUidMsvServiceEntry;
- entry.SetReadOnly(EFalse);
- entry.SetVisible(EFalse);
- entry.iDate.UniversalTime();
- entry.iDetails.Set(_L("Nokiatest"));
-
- root->SetEntryL(KMsvRootIndexEntryId);
- root->CreateL(entry);
-
- QString serviceCenter01(SERVICE_CENTER_01);
- QString serviceCenter02(SERVICE_CENTER_02);
- HBufC* sC01 = S60QConversions::qStringToS60Desc(serviceCenter01);
- HBufC* sC02 = S60QConversions::qStringToS60Desc(serviceCenter02);
- CleanupStack::PushL(sC01);
- CleanupStack::PushL(sC02);
- settings->AddServiceCenterL(_L("Nokia"), *sC01);
- settings->AddServiceCenterL(_L("Nokia"), *sC02);
- CleanupStack::PopAndDestroy(sC02);
- CleanupStack::PopAndDestroy(sC01);
- settings->SetDefaultServiceCenter(1);
- settings->SetValidityPeriod(ESmsVPWeek);
- settings->SetReplyQuoted(ETrue);
- settings->SetRejectDuplicate(ETrue);
- settings->SetDelivery(ESmsDeliveryImmediately);
- settings->SetDeliveryReport(EFalse);
- settings->SetReplyPath(EFalse);
- settings->SetMessageConversion(ESmsConvPIDNone);
- settings->SetCanConcatenate(ETrue);
- settings->SetCharacterSet(TSmsDataCodingScheme::ESmsAlphabet7Bit);
- settings->SetValidityPeriodFormat(TSmsFirstOctet::ESmsVPFInteger);
- settings->SetStatusReportHandling(CSmsSettings::EMoveReportToInboxVisible);
- settings->SetSpecialMessageHandling(CSmsSettings::EMoveReportToInboxVisible);
- settings->SetSmsBearer(CSmsSettings::ESmsBearerCircuitPreferred);
- settings->SetCommDbAction(CSmsSettings::ENone);
- settings->SetSmsBearerAction(CSmsSettings::ENone);
- smsAccount->SaveSettingsL(*settings);
-
- CleanupStack::PopAndDestroy(settings);
- CleanupStack::PopAndDestroy(smsAccount);
-}
-
-//---------------------------------------------------------------
-// TestMsg::createSMS
-//---------------------------------------------------------------
-void TestMsg::createSMS()
-{
- int err;
- TRAP(err,createSMSL(KMsvGlobalInBoxIndexEntryId,ETrue));
- #ifdef _DEBUG_TRACES_
-qDebug() << "Error in creating SMS:" << err;
-#endif
-
-}
-
-//---------------------------------------------------------------
-// TestMsg::createMMS
-//---------------------------------------------------------------
-void TestMsg::createMMS()
-{
- int err;
- TRAP(err,createMMSL(KMsvGlobalInBoxIndexEntryId,ETrue));
- #ifdef _DEBUG_TRACES_
-qDebug() << "Error in creating MMS:" << err;
-#endif
-
-}
-
-//---------------------------------------------------------------
-// TestMsg::initL
-//---------------------------------------------------------------
-void TestMsg::initL()
-{
- iSession = CMsvSession::OpenSyncL(*this);
- iMtmRegistry = CClientMtmRegistry::NewL(*iSession);
-}
-
-//---------------------------------------------------------------
-// TestMsg::createSMSL
-//---------------------------------------------------------------
-void TestMsg::createSMSL(TMsvId aFolderId, TBool aUnReadFlag)
-{
- CSmsClientMtm *smsClientMtm =
- static_cast<CSmsClientMtm*> (iMtmRegistry->NewMtmL(KUidMsgTypeSMS));
- CleanupStack::PushL(smsClientMtm);
- //Create entry from this index entry
-
- smsClientMtm->SwitchCurrentEntryL(aFolderId);
- smsClientMtm->CreateMessageL(KUidMsgTypeSMS.iUid);
- TMsvEntry indexEntry = smsClientMtm->Entry().Entry();
- indexEntry.SetInPreparation(ETrue);
- indexEntry.iMtm = KUidMsgTypeSMS;
- indexEntry.iType = KUidMsvMessageEntry;
- indexEntry.iServiceId = smsClientMtm->ServiceId();
- indexEntry.iDate.HomeTime();
- //AddBody
- QString body(TEST_MSG_BODY);
-
- HBufC* bodyText = S60QConversions::qStringToS60Desc(body);
- if (bodyText)
- {
- CleanupStack::PushL(bodyText);
- CRichText & body = smsClientMtm->Body();
- body.Reset();
- body.InsertL(0, *bodyText);
-
- TBuf<32> buf;
- buf.Copy(bodyText->Left(32));
- indexEntry.iDescription.Set(buf);
-
- CleanupStack::PopAndDestroy(bodyText);
- }
-
- // Add addressee
- //Add Address
- QString recipient(TEST_MSG_FROM1);
- // convert from QString to HBufC
- HBufC* addr = S60QConversions::qStringToS60Desc(recipient);
- if (addr)
- {
- CleanupStack::PushL(addr);
- TBuf<32> name;
- name.Copy(addr->Left(32));
- indexEntry.iDetails.Set(name);
-
- if (aFolderId == KMsvDraftEntryId || aFolderId
- == KMsvGlobalOutBoxIndexEntryId)
- {
- smsClientMtm->AddAddresseeL(*addr, TPtrC());
- indexEntry.SetSendingState(KMsvSendStateWaiting);
- }
- else if (aFolderId == KMsvSentEntryId || aFolderId
- == KMsvGlobalInBoxIndexEntryId)
- {
- CSmsHeader& smsHeader = smsClientMtm->SmsHeader();
- smsHeader.SetFromAddressL(*addr);
- }
- CleanupStack::PopAndDestroy(addr);
- }
-
- // final fine tuning
- indexEntry.SetAttachment(EFalse);
- indexEntry.SetVisible(ETrue);
- indexEntry.SetInPreparation(EFalse);
-
- if (aFolderId == KMsvGlobalInBoxIndexEntryId)
- {
- if (aUnReadFlag)
- {
- indexEntry.SetUnread(ETrue);
- }
- indexEntry.SetNew(ETrue);
- }
- indexEntry.SetComplete(ETrue);
- smsClientMtm->Entry().ChangeL(indexEntry);
- smsClientMtm->SaveMessageL();
-
- CleanupStack::PopAndDestroy(smsClientMtm);
-}
-
-//---------------------------------------------------------------
-// TestMsg::createMMSL
-//---------------------------------------------------------------
-void TestMsg::createMMSL(TMsvId aFolderId, TBool aUnReadFlag)
-{
- CMmsClientMtm
- *mmsClientMtm =
- static_cast<CMmsClientMtm*>
- (iMtmRegistry->NewMtmL(KUidMsgTypeMultimedia));
- CleanupStack::PushL(mmsClientMtm);
- //Create entry from this index entry
-
- mmsClientMtm->SwitchCurrentEntryL(aFolderId);
- mmsClientMtm->CreateMessageL(mmsClientMtm->DefaultServiceL());
-
- TMsvEntry indexEntry = mmsClientMtm->Entry().Entry();
- indexEntry.SetInPreparation(ETrue);
- indexEntry.iMtm = KUidMsgTypeMultimedia;
- indexEntry.iType = KUidMsvMessageEntry;
- indexEntry.iServiceId = mmsClientMtm->DefaultServiceL();
- indexEntry.iDate.HomeTime();
-
- //Subject
- QString subject(TEST_MSG_SUBJECT);
-
- HBufC* sub = S60QConversions::qStringToS60Desc(subject);
- if (sub)
- {
- CleanupStack::PushL(sub);
-
- TBuf<32> buf;
- buf.Copy(sub->Left(32));
- indexEntry.iDescription.Set(buf);
-
- mmsClientMtm->SetSubjectL(*sub);
- CleanupStack::PopAndDestroy(sub);
- }
-
- // Add addressee
- //Add Address
- QString recipient(TEST_MSG_FROM1);
- // convert from QString to HBufC
- HBufC* addr = S60QConversions::qStringToS60Desc(recipient);
- if (addr)
- {
- CleanupStack::PushL(addr);
- TBuf<32> name;
- name.Copy(addr->Left(32));
- indexEntry.iDetails.Set(name);
-
- if (aFolderId == KMsvDraftEntryId || aFolderId
- == KMsvGlobalOutBoxIndexEntryId)
- {
- mmsClientMtm->AddAddresseeL(*addr);
- indexEntry.SetSendingState(KMsvSendStateWaiting);
- }
- else if (aFolderId == KMsvSentEntryId || aFolderId
- == KMsvGlobalInBoxIndexEntryId)
- {
- mmsClientMtm->SetSenderL(*addr);
- mmsClientMtm->AddAddresseeL(*addr);
- }
- CleanupStack::PopAndDestroy(addr);
- }
-
- // final fine tuning
- indexEntry.SetVisible(ETrue);
- indexEntry.SetInPreparation(EFalse);
-
- if (aFolderId == KMsvGlobalInBoxIndexEntryId)
- {
- if (aUnReadFlag)
- {
- indexEntry.SetUnread(ETrue);
- }
- indexEntry.SetNew(ETrue);
- }
-
- //body text
- QString bodyText(TEST_MSG_BODY);
- HBufC* text = S60QConversions::qStringToS60Desc(bodyText);
- if (text)
- {
- CleanupStack::PushL(text);
-
- //we may need some conversion of text here
- const TInt KMmsMaxBytesPerCharacter = 4;
- HBufC8* buffer = HBufC8::NewL( text->Length() * KMmsMaxBytesPerCharacter );
- CleanupStack::PushL( buffer );
- TPtr8 buf8 = buffer->Des();
-
- // get an access to the message store
- CMsvStore* store = mmsClientMtm->Entry().EditStoreL();
- CleanupStack::PushL(store);
-
- CMsvMimeHeaders* mimeHeaders = CMsvMimeHeaders::NewL();
- CleanupStack::PushL( mimeHeaders );
-
- CMsvAttachment* attaInfo = CMsvAttachment::NewL(CMsvAttachment::EMsvFile);
- CleanupStack::PushL( attaInfo );
-
- TPtrC8 contentType;
- contentType.Set( KMmsTextPlain );
-
- TInt position = contentType.Find( KMmsSlash8 );
- mimeHeaders->SetContentTypeL( contentType.Left( position ) );
- mimeHeaders->SetContentSubTypeL( contentType.Mid( position + 1 ) );
- attaInfo->SetMimeTypeL( contentType );
- attaInfo->SetAttachmentNameL( _L("body.txt") );
-
- mimeHeaders->SetMimeCharset( KMmsUtf8 );
- mimeHeaders->SetSuggestedFilenameL( _L("body.txt") );
-
- // if conversion fails, something is really seriously wrong
- TInt error = CnvUtfConverter::ConvertFromUnicodeToUtf8( buf8, *text );
-
- attaInfo->SetSize( buf8.Length() );
- mimeHeaders->StoreL( *attaInfo ); // Mime headers are streamed into atta info
-
- MMsvAttachmentManagerSync& attaManSync = store->AttachmentManagerExtensionsL();
- RFile textFile;
-
- attaManSync.CreateAttachmentL( _L("body.txt"), textFile, attaInfo );
- CleanupStack::Pop( attaInfo ); //ownership was transferred.
-
- CleanupClosePushL( textFile );
-
- //get attachement id, we need it incase of failure
- TMsvAttachmentId attachmentId = attaInfo->Id();
- // Now our file handle is open for writing
- if ( buf8.Length()> 0 )
- {
- textFile.Write( buf8 );
- error = textFile.Flush();
- }
- // we must always close
- CleanupStack::PopAndDestroy( &textFile ); // close textFile
- CleanupStack::PopAndDestroy( mimeHeaders );
-
- store->CommitL();
- CleanupStack::PopAndDestroy(store);
- CleanupStack::PopAndDestroy( buffer );
- CleanupStack::PopAndDestroy(text);
- }
-
- indexEntry.SetComplete(ETrue);
- mmsClientMtm->Entry().ChangeL(indexEntry);
- mmsClientMtm->SaveMessageL();
-
- // cleanup
- CleanupStack::PopAndDestroy(mmsClientMtm);
-}
-
-void TestMsg::HandleSessionEventL(TMsvSessionEvent /*aEvent*/, TAny* /*aArg1*/,
- TAny* /*aArg2*/, TAny* /*aArg3*/)
-{
-}
-
-void TestMsg::deleteMessage(int msgId)
-{
- CMsvEntry* cEntry = iSession->GetEntryL(KMsvGlobalInBoxIndexEntryId);
- CleanupStack::PushL(cEntry);
-
- CMsvEntry* entry = iSession->GetEntryL(msgId);
- CleanupStack::PushL(entry);
-
- TMsvEntry tEntry = entry->Entry();
- tEntry.SetReadOnly(EFalse);
- entry->ChangeL(tEntry);
-
- cEntry->DeleteL(msgId);
- CleanupStack::PopAndDestroy(entry);
- CleanupStack::PopAndDestroy(cEntry);
-
-}
-
-void TestMsg::initSimTsyL()
-{
- _LIT(KDefaultTsyName, "SIM");
- TPtrC defaultTsyName(KDefaultTsyName);
- HBufC* defaultTsyNameBuf = defaultTsyName.AllocLC();
- TInt testNumber = 0;
-
- initializeSimTsyL(testNumber, defaultTsyNameBuf);
-
- CMDBSession* dbSession = CMDBSession::NewL(CMDBSession::LatestVersion());
- CleanupStack::PushL(dbSession);
-
- CMDBRecordLink<CCDModemBearerRecord>
- *modemBearerRecordSet = new (ELeave) CMDBRecordLink<
- CCDModemBearerRecord> (KCDTIdGlobalSettingsRecord
- | KCDTIdModemPhoneServicesSMS);
- CleanupStack::PushL(modemBearerRecordSet);
-
- modemBearerRecordSet->SetRecordId(1);
- //Load field container with data from database
- TRAPD(err, modemBearerRecordSet->LoadL(*dbSession));
- CCDModemBearerRecord
- *modemRecord =
- static_cast<CCDModemBearerRecord*>
- (CCDRecordBase::RecordFactoryL(KCDTIdModemBearerRecord));
- CleanupStack::PushL(modemRecord);
-
- /*!
- * Set the record ID to that previously read from
- * CCDGlobalSettingsRecord.iModemForPhoneServicesAndSMS
- */
- modemRecord->SetRecordId(*modemBearerRecordSet);
-
- //Load record container with data from database
- modemRecord->LoadL(*dbSession);
-
- modemRecord->iTsyName.SetMaxLengthL(defaultTsyNameBuf->Des().Length());
- modemRecord->iTsyName = defaultTsyNameBuf->Des();
- modemRecord->ModifyL(*dbSession);
-
- CleanupStack::PopAndDestroy(4);
-}
-
-void TestMsg::initializeSimTsyL(TInt aTestNumber, HBufC* aTsyName)
-{
- //Initialize TSY using the System Agent
- TInt testState;
- if (KErrNone != RProperty::Get(KUidPSSimTsyCategory,
- KPSSimTsyTestNumber,
- testState))
- {
- User::LeaveIfError(RProperty::Define(KUidPSSimTsyCategory,
- KPSSimTsyTestNumber,
- RProperty::EInt));
- }
-
- User::LeaveIfError(RProperty::Set(KUidPSSimTsyCategory,
- KPSSimTsyTestNumber,
- aTestNumber));
- if (KErrNone != RProperty::Get(KUidSystemCategory,
- KMsvTestUidPhonePwrValue,
- testState))
- {
- User::LeaveIfError(RProperty::Define(KUidSystemCategory,
- KMsvTestUidPhonePwrValue,
- RProperty::EInt));
- }
- User::LeaveIfError(RProperty::Set(KUidSystemCategory,
- KMsvTestUidPhonePwrValue,
- EMsvTestPhoneOn));
-
- User::LeaveIfError(RProperty::Get(KUidPSSimTsyCategory,
- KPSSimTsyTestNumber,
- aTestNumber));
-
- RTelServer etelServer;
- TInt err = etelServer.Connect();
-
- if (err != KErrNone)
- {
- return;
- }
- User::LeaveIfError(etelServer.LoadPhoneModule(aTsyName->Des()));
-
- /*!
- * Find the phone corresponding to this TSY and open a number of
- * handles on it
- */
- TInt numPhones;
- User::LeaveIfError(etelServer.EnumeratePhones(numPhones));
- TBool found = EFalse;
-
- RMobilePhone iPhone;
- while (!found && numPhones--)
- {
- TName phoneTsy;
- User::LeaveIfError(etelServer.GetTsyName(numPhones, phoneTsy));
- if (phoneTsy.CompareF(aTsyName->Des()) == KErrNone)
- {
- found = ETrue;
- RTelServer::TPhoneInfo info;
- User::LeaveIfError(etelServer.GetPhoneInfo(numPhones, info));
- CleanupClosePushL(iPhone);
- User::LeaveIfError(iPhone.Open(etelServer, info.iName));
- User::LeaveIfError(iPhone.Initialise());
- CleanupStack::PopAndDestroy(&iPhone);
- }
- }
-}
-
-#endif //TEST_MSG_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditormmsplugin/tsrc/tsrc.pro Thu Jul 22 16:32:06 2010 +0100
@@ -0,0 +1,22 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+TEMPLATE = subdirs
+
+SUBDIRS += mmstestbed/mmstestbed.pro
+SUBDIRS += testmmsgplugin/testmmsplugin.pro
+
+CONFIG += ordered
\ No newline at end of file
--- a/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditormmsplugin/unieditormmsplugin.pro Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditormmsplugin/unieditormmsplugin.pro Thu Jul 22 16:32:06 2010 +0100
@@ -25,7 +25,6 @@
-INCLUDEPATH += ../../../s60qconversions/inc
INCLUDEPATH += ../../editorgenutils/inc
INCLUDEPATH += ../../../../../inc
INCLUDEPATH += ../../../../../mmsengine/mmsmessage/inc
@@ -56,10 +55,10 @@
-leditorgenutils \
-lunidatamodelloader \
-lconvergedmessageutils \
- -ls60qconversions \
-lunidatamodel \
-lmsgmedia \
- -leikctl
+ -leikctl \
+ -lxqutils
# Build.inf rules
--- a/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditorsmsplugin/rom/unieditorsmsplugin.iby Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditorsmsplugin/rom/unieditorsmsplugin.iby Thu Jul 22 16:32:06 2010 +0100
@@ -17,7 +17,7 @@
#ifndef __UNI_EDITOR_SMS_PLUGIN_IBY__
#define __UNI_EDITOR_SMS_PLUGIN_IBY__
-# this is the plugin stub for QT plugin
+
file=ABI_DIR\UREL\unieditorsmsplugin.dll SHARED_LIB_DIR\unieditorsmsplugin.dll
data=\epoc32\data\z\resource\qt\plugins\messaging\editorplugins\unieditorsmsplugin.qtplugin \resource\qt\plugins\messaging\editorplugins\unieditorsmsplugin.qtplugin
--- a/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditorsmsplugin/src/unieditorsmsplugin.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditorsmsplugin/src/unieditorsmsplugin.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -20,7 +20,7 @@
// USER INCLUDES
#include "unieditorsmsplugin.h"
#include "unieditorsmsplugin_p.h"
-#include "s60qconversions.h"
+#include <xqconversions.h>
// DEBUG
#include "debugtraces.h"
@@ -155,7 +155,7 @@
TSmsEncoding& aAlternativeEncodingType)
{
TBool ret = ETrue;
- HBufC* buffer = S60QConversions::qStringToS60Desc(aBuf);
+ HBufC* buffer = XQConversions::qStringToS60Desc(aBuf);
TRAPD(error,d_ptr->GetNumPDUsL(*buffer,aNumOfRemainingChars,
aNumOfPDUs,aUnicodeMode,aAlternativeEncodingType));
delete buffer;
--- a/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditorsmsplugin/src/unieditorsmsplugin_p.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditorsmsplugin/src/unieditorsmsplugin_p.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -57,13 +57,13 @@
#include "convergedmessage.h"
#include "convergedmessageid.h"
#include "convergedmessageattachment.h"
-#include "s60qconversions.h"
+
#include "MuiuOperationWait.h"
#include "UniEditorGenUtils.h"
#include "unidatamodelloader.h"
#include "unidatamodelplugininterface.h"
#include <hbglobal.h> // for translation support
-
+#include <xqconversions.h>
// resources
// CONSTANTS
@@ -436,8 +436,8 @@
int addrCount = addrList.count();
for(int i=0; i<addrCount; i++)
{
- HBufC* addr = S60QConversions::qStringToS60Desc( addrList.at(i)->address() );
- HBufC* alt_alias = S60QConversions::qStringToS60Desc( addrList.at(i)->alias() );
+ HBufC* addr = XQConversions::qStringToS60Desc( addrList.at(i)->address() );
+ HBufC* alt_alias = XQConversions::qStringToS60Desc( addrList.at(i)->alias() );
if(addr->Length() > 0)
{
CleanupStack::PushL(addr);
@@ -505,14 +505,14 @@
CMsvEntry& entry = SmsMtmL()->Entry();
TMsvEntry msvEntry( entry.Entry() );
msvEntry.iDetails.Set( idetailsBuf );
+ entry.ChangeL( msvEntry );
SmsMtmL()->SaveMessageL();
- entry.ChangeL( msvEntry );
}
// set subject
if ( !message->subject().isEmpty() )
{
- HBufC* subj = S60QConversions::qStringToS60Desc( message->subject() );
+ HBufC* subj = XQConversions::qStringToS60Desc( message->subject() );
if( subj )
{
CleanupStack::PushL( subj );
@@ -531,7 +531,7 @@
// -----------------------------------------------------------------------------
void UniEditorSmsPluginPrivate::SetSmsBodyL(ConvergedMessage* message)
{
- HBufC8* bodytext = S60QConversions::qStringToS60Desc8( message->bodyText() );
+ HBufC8* bodytext = XQConversions::qStringToS60Desc8( message->bodyText() );
if( bodytext->Length() > 0)
{
CleanupStack::PushL( bodytext );
@@ -585,7 +585,7 @@
{
// create msv attachment in store
CreateAttachmentL(store,
- *S60QConversions::qStringToS60Desc(attachment->filePath()));
+ *XQConversions::qStringToS60Desc(attachment->filePath()));
// check for mimetype of the attachment
TPtrC8 mimetype;
@@ -594,7 +594,7 @@
TMsgMediaType attMediaType = EMsgMediaUnknown;
iGenUtils->getFileInfoL(attachment->filePath(),
attSize, attMimeType, attMediaType);
- mimetype.Set( *S60QConversions::qStringToS60Desc8(attMimeType) );
+ mimetype.Set( *XQConversions::qStringToS60Desc8(attMimeType) );
if ( mimetype.CompareF( KMsgMimeTextPlain ) == 0 )
{
@@ -634,7 +634,7 @@
}
else if(!descr.isNull())
{
- buf.Copy( *S60QConversions::qStringToS60Desc(descr) );
+ buf.Copy( *XQConversions::qStringToS60Desc(descr) );
}
tEntry.iDescription.Set( buf );
@@ -658,11 +658,11 @@
int attSize;
QString mimeType;
TMsgMediaType mediaType = EMsgMediaUnknown;
- QString filepath = S60QConversions::s60DescToQString( aFilePath );
+ QString filepath = XQConversions::s60DescToQString( aFilePath );
iGenUtils->getFileInfoL(filepath, attSize, mimeType, mediaType);
attachment->SetSize( attSize );
- attachment->SetMimeTypeL( *S60QConversions::qStringToS60Desc8(mimeType) );
+ attachment->SetMimeTypeL( *XQConversions::qStringToS60Desc8(mimeType) );
CMuiuOperationWait* wait = CMuiuOperationWait::NewLC();
attachmentManager->AddAttachmentL( aFilePath, attachment, wait->iStatus );
@@ -890,8 +890,7 @@
{
CreateVCardSMSL(filehandle);
CleanupStack::Pop(&filehandle);
- filehandle.Close();
- managerSync.RemoveAttachmentL(0);
+ filehandle.Close();
}
else if (mimetype.CompareF(KMsgMimeVCal) == 0 ||
mimetype.CompareF(KMsgMimeICal) == 0)
@@ -1766,8 +1765,8 @@
HBufC* pureAddr = TMmsGenUtils::PureAddress( emailRecipients.MdcaPoint( id ) ).AllocLC();
HBufC* aliasAddr = TMmsGenUtils::Alias( emailRecipients.MdcaPoint( id ) ).AllocLC();
ConvergedMessageAddress messageAddress(
- S60QConversions::s60DescToQString(*pureAddr),
- S60QConversions::s60DescToQString(*aliasAddr));
+ XQConversions::s60DescToQString(*pureAddr),
+ XQConversions::s60DescToQString(*aliasAddr));
CleanupStack::PopAndDestroy(2, pureAddr );
aMessage->addToRecipient(messageAddress);
}
@@ -1785,8 +1784,8 @@
HBufC* aliasAddr =
TMmsGenUtils::Alias(smsRecipients[i]).AllocLC();
ConvergedMessageAddress messageAddress(
- S60QConversions::s60DescToQString(*pureAddr),
- S60QConversions::s60DescToQString(*aliasAddr));
+ XQConversions::s60DescToQString(*pureAddr),
+ XQConversions::s60DescToQString(*aliasAddr));
CleanupStack::PopAndDestroy(2, pureAddr );
aMessage->addToRecipient(messageAddress);
}
@@ -1794,7 +1793,7 @@
if( emailFields.Subject( ).Length( ) )
{ // If email subject exists -> copy it
- aMessage->setSubject(S60QConversions::s60DescToQString(
+ aMessage->setSubject(XQConversions::s60DescToQString(
emailFields.Subject()));
}
@@ -1821,7 +1820,7 @@
CleanupStack::PushL( store );
MMsvAttachmentManager& manager = store->AttachmentManagerL();
CMsvAttachment *attachment = manager.GetAttachmentInfoL(0);
- QString filepath = S60QConversions::s60DescToQString(attachment->FilePath());
+ QString filepath = XQConversions::s60DescToQString(attachment->FilePath());
ConvergedMessageAttachment* conv_attachment =
new ConvergedMessageAttachment(filepath, ConvergedMessageAttachment::EAttachment);
ConvergedMessageAttachmentList conv_attList;
@@ -1862,7 +1861,7 @@
HBufC* bodyText = HBufC::NewLC ( totalLength );
TPtr bodyTextPtr ( bodyText->Des() );
SmsMtmL()->Body().Extract( bodyTextPtr, 0, totalLength );
- aMessage->setBodyText(S60QConversions::s60DescToQString(
+ aMessage->setBodyText(XQConversions::s60DescToQString(
bodyTextPtr));
CleanupStack::PopAndDestroy( bodyText );
}
--- a/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditorsmsplugin/tsrc/testsmsgplugin/testmsg.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditorsmsplugin/tsrc/testsmsgplugin/testmsg.h Thu Jul 22 16:32:06 2010 +0100
@@ -47,7 +47,7 @@
#include <commsdat.h>
#include <Qtdebug>
-#include <s60qconversions.h>
+#include <xqconversions.h>
#include "testsmsplugin.ini"
using namespace CommsDat;
@@ -163,8 +163,8 @@
QString serviceCenter01(SERVICE_CENTER_01);
QString serviceCenter02(SERVICE_CENTER_02);
- HBufC* sC01 = S60QConversions::qStringToS60Desc(serviceCenter01);
- HBufC* sC02 = S60QConversions::qStringToS60Desc(serviceCenter02);
+ HBufC* sC01 = XQConversions::qStringToS60Desc(serviceCenter01);
+ HBufC* sC02 = XQConversions::qStringToS60Desc(serviceCenter02);
CleanupStack::PushL(sC01);
CleanupStack::PushL(sC02);
settings->AddServiceCenterL(_L("Nokia"), *sC01);
@@ -249,7 +249,7 @@
//AddBody
QString body(TEST_MSG_BODY);
- HBufC* bodyText = S60QConversions::qStringToS60Desc(body);
+ HBufC* bodyText = XQConversions::qStringToS60Desc(body);
if (bodyText)
{
CleanupStack::PushL(bodyText);
@@ -268,7 +268,7 @@
//Add Address
QString recipient(TEST_MSG_FROM1);
// convert from QString to HBufC
- HBufC* addr = S60QConversions::qStringToS60Desc(recipient);
+ HBufC* addr = XQConversions::qStringToS60Desc(recipient);
if (addr)
{
CleanupStack::PushL(addr);
@@ -336,7 +336,7 @@
//Subject
QString subject(TEST_MSG_SUBJECT);
- HBufC* sub = S60QConversions::qStringToS60Desc(subject);
+ HBufC* sub = XQConversions::qStringToS60Desc(subject);
if (sub)
{
CleanupStack::PushL(sub);
@@ -353,7 +353,7 @@
//Add Address
QString recipient(TEST_MSG_FROM1);
// convert from QString to HBufC
- HBufC* addr = S60QConversions::qStringToS60Desc(recipient);
+ HBufC* addr = XQConversions::qStringToS60Desc(recipient);
if (addr)
{
CleanupStack::PushL(addr);
@@ -391,7 +391,7 @@
//body text
QString bodyText(TEST_MSG_BODY);
- HBufC* text = S60QConversions::qStringToS60Desc(bodyText);
+ HBufC* text = XQConversions::qStringToS60Desc(bodyText);
if (text)
{
CleanupStack::PushL(text);
--- a/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditorsmsplugin/tsrc/testsmsgplugin/testsmsplugin.pro Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditorsmsplugin/tsrc/testsmsgplugin/testsmsplugin.pro Thu Jul 22 16:32:06 2010 +0100
@@ -24,7 +24,6 @@
INCLUDEPATH += .
INCLUDEPATH += ../../../../../../inc
INCLUDEPATH += ../../../../unieditorutils/inc
-INCLUDEPATH += ../../../../s60qconversions/inc
INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
DEFINES += BUILD_TEST_DLL
@@ -50,10 +49,19 @@
TARGET.EPOCHEAPSIZE = 0x1000 0x1F00000
TARGET.EPOCALLOWDLLDATA = 1
}
+
+defBlock = \
+ "$${LITERAL_HASH}if defined(EABI)" \
+ "DEFFILE ../eabi/test_sms_plugin.def" \
+ "$${LITERAL_HASH}else" \
+ "DEFFILE ../bwins/test_sms_plugin.def" \
+ "$${LITERAL_HASH}endif"
+
+MMP_RULES += defBlock
LIBS += -leuser \
-lconvergedmessageutils \
- -ls60qconversions \
+ -lxqutils \
-lMsgMedia \
-leditorgenutils \
-lcone \
--- a/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditorsmsplugin/unieditorsmsplugin.pro Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditorsmsplugin/unieditorsmsplugin.pro Thu Jul 22 16:32:06 2010 +0100
@@ -24,7 +24,6 @@
# UID 3
TARGET.UID3 = 0x102072DA
-INCLUDEPATH += ../../../s60qconversions/inc
INCLUDEPATH += ../../editorgenutils/inc
INCLUDEPATH += ../../../../../inc
INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
@@ -48,7 +47,6 @@
LIBS += -leuser \
-lconvergedmessageutils \
- -ls60qconversions \
-lMsgMedia \
-leditorgenutils \
-lcone \
@@ -67,7 +65,8 @@
-lCdlEngine \
-lFeatMgr \
-lapmime \
- -lunidatamodelloader
+ -lunidatamodelloader \
+ -lxqutils
# plugin stub deployment
plugin.sources = unieditorsmsplugin.dll
--- a/messagingapp/shareui/inc/shareuiprivate.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/shareui/inc/shareuiprivate.h Thu Jul 22 16:32:06 2010 +0100
@@ -125,6 +125,11 @@
*/
void itemActivated(QModelIndex index);
+ /**
+ * Reset internal data structures
+ */
+ void reset();
+
private:
/**
* Fetch the action associated with a specified interface descriptor.
@@ -185,12 +190,7 @@
* Show notes
*/
void showNote(QString text);
-
- /**
- * Reset internal data structures
- */
- void reset();
-
+
private:
/**
* List of files to be sent.
--- a/messagingapp/shareui/shareui.pro Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/shareui/shareui.pro Thu Jul 22 16:32:06 2010 +0100
@@ -17,7 +17,7 @@
TEMPLATE = lib
TARGET = shareui
DEFINES += BUILD_SHAREUI_DLL
-#DEFINES += __SHAREUI_MIME_HANDLING__
+DEFINES += __SHAREUI_MIME_HANDLING__
DEPENDPATH += inc src
INCLUDEPATH += inc
@@ -42,6 +42,14 @@
"sis/shareui_stub.sis /epoc32/data/z/system/install/shareui_stub.sis" \
"rom/shareui.iby CORE_APP_LAYER_IBY_EXPORT_PATH(shareui.iby)"
+defBlock = \
+ "$${LITERAL_HASH}if defined(EABI)" \
+ "DEFFILE ../eabi/shareui.def" \
+ "$${LITERAL_HASH}else" \
+ "DEFFILE ../bwins/shareui.def" \
+ "$${LITERAL_HASH}endif"
+
+MMP_RULES += defBlock
HEADERS += shareuiprivate.h
--- a/messagingapp/shareui/src/shareuiprivate.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/shareui/src/shareuiprivate.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -69,7 +69,6 @@
*/
ShareUiPrivate::~ShareUiPrivate()
{
- reset();
}
/**
@@ -80,13 +79,12 @@
mFileList.clear();
mIndexActionMap.clear();
+ foreach(XQAiwRequest* request,mAiwRequestList)
+ {
+ delete request;
+ }
mAiwRequestList.clear();
- if ( mSharePopup )
- {
- delete mSharePopup;
- mSharePopup = 0;
- }
}
/**
@@ -99,7 +97,7 @@
bool ShareUiPrivate::init(QStringList& fileList, bool embedded)
{
reset();
-
+ mIsEmbedded = embedded;
// No input files
if ( fileList.count() == 0 )
{
@@ -130,6 +128,7 @@
if ( fileList.count() != filteredFileList.count() )
{
showNote(LOC_PROTECTED_CONTENT);
+ return true;
}
// Only protected content
@@ -210,9 +209,10 @@
mSharePopup->setAttribute( Qt::WA_DeleteOnClose, true );
HbTextItem* heading = new HbTextItem(LOC_SEND_SELECTED_ITEM, mSharePopup);
heading->setAlignment(Qt::AlignCenter);
- mSharePopup->setDismissPolicy(HbDialog::NoDismiss);
+ mSharePopup->setDismissPolicy(HbDialog::TapAnywhere);
mSharePopup->setHeadingWidget(heading);
mSharePopup->setFrameType(HbDialog::Strong);
+ connect(mSharePopup, SIGNAL(aboutToClose()), this, SLOT(reset()));
// Content widget
mContentListView = new HbListView(mSharePopup);
@@ -273,6 +273,7 @@
*/
void ShareUiPrivate::onTriggered(void)
{
+
XQAiwRequest* request = 0;
request = qobject_cast<XQAiwRequest*>(sender());
if(request)
@@ -280,6 +281,7 @@
QList<QVariant> args;
QVariant fileList(mFileList);
args << fileList;
+ request->setEmbedded(mIsEmbedded);
request->setArguments(args);
}
}
@@ -288,9 +290,19 @@
* Slot for handling valid returns from the framework.
*/
void ShareUiPrivate::handleOk(const QVariant& result)
- {
+{
Q_UNUSED(result)
+
+ XQAiwRequest* request = 0;
+ request = qobject_cast<XQAiwRequest*>(sender());
+ if(request)
+ {
+ disconnect(request,
+ SIGNAL(requestError(int,const QString&)),
+ this,
+ SLOT(handleError(int,const QString&)));
}
+}
/**
* Slot for handling errors from the framework.
@@ -319,7 +331,8 @@
{
action->setEnabled(true);
action->activate(HbAction::Trigger);
- }
+ }
+
mSharePopup->close();
}
--- a/messagingapp/smartmessaging/ringbc/inc/ringbctoneconverter.h Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/smartmessaging/ringbc/inc/ringbctoneconverter.h Thu Jul 22 16:32:06 2010 +0100
@@ -23,7 +23,7 @@
// INCLUDES
#include <e32base.h>
-#include "NsmRingTone.h"
+#include "nsmringtone.h"
// FORWARD DECLARATIONS
NONSHARABLE_STRUCT( TInstruction )
--- a/messagingapp/smartmessaging/ringbc/ringbc.pro Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/smartmessaging/ringbc/ringbc.pro Thu Jul 22 16:32:06 2010 +0100
@@ -26,7 +26,7 @@
INCLUDEPATH += .
INCLUDEPATH += ../../../inc
-INCLUDEPATH += ../../msgutils/s60qconversions/inc
+
symbian:
{
@@ -48,6 +48,15 @@
}
+defBlock = \
+ "$${LITERAL_HASH}if defined(EABI)" \
+ "DEFFILE ../eabi/ringbc.def" \
+ "$${LITERAL_HASH}else" \
+ "DEFFILE ../bwins/ringbc.def" \
+ "$${LITERAL_HASH}endif"
+
+MMP_RULES += defBlock
+
HEADERS += inc/ringbc.h \
inc/ringbc_p.h \
inc/ringbctoneconverter.h
@@ -56,6 +65,7 @@
src/ringbc_p.cpp \
src/ringbctoneconverter.cpp
-LIBS += -ls60qconversions \
- -lplatformenv
+LIBS += -lplatformenv \
+ -lxqutils \
+ -lefsrv
--- a/messagingapp/smartmessaging/ringbc/src/ringbc.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/smartmessaging/ringbc/src/ringbc.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -24,7 +24,6 @@
#include "ringbc.h"
#include "ringbc_p.h"
#include "ringbctoneconverter.h"
-#include "s60qconversions.h"
#include "debugtraces.h"
// ================= MEMBER FUNCTIONS =======================
--- a/messagingapp/smartmessaging/ringbc/src/ringbc_p.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/smartmessaging/ringbc/src/ringbc_p.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -25,7 +25,7 @@
// USER INCLUDES
#include "ringbc_p.h"
#include "ringbctoneconverter.h"
-#include "s60qconversions.h"
+#include <xqconversions.h>
#include "debugtraces.h"
//CONSTANTS
@@ -129,7 +129,7 @@
CleanupClosePushL(fsSession);
- HBufC* fileName = S60QConversions::qStringToS60Desc(path);
+ HBufC* fileName = XQConversions::qStringToS60Desc(path);
RFile file;
User::LeaveIfError(file.Open(fsSession, fileName->Des(),
@@ -142,7 +142,6 @@
HBufC8* dataBuf = HBufC8::NewLC(size);
TPtr8 data(dataBuf->Des());
User::LeaveIfError(file.Read(data, size));
- CleanupStack::PopAndDestroy(&file);
TBool valid = mConverter->IsRingToneMimeTypeL(data);
@@ -152,7 +151,7 @@
TFileName path = PathInfo::PhoneMemoryRootPath();
path.Append(PathInfo::SimpleSoundsPath());
path.Append(*title);
- HBufC* fileExtension = S60QConversions::qStringToS60Desc(extension);
+ HBufC* fileExtension = XQConversions::qStringToS60Desc(extension);
path.Append(fileExtension->Des());
CFileMan* fileMan = CFileMan::NewL(fsSession);
@@ -166,9 +165,9 @@
}
CleanupStack::PopAndDestroy(); // dataBuf
+ CleanupStack::PopAndDestroy(); //file
CleanupStack::PopAndDestroy(); //fsSession
-
QDEBUG_WRITE("RingBcPrivate::saveToneL : Exit")
}
@@ -184,7 +183,7 @@
QStringList pathList = path.split(".");
QString extension = pathList.at(pathList.count() - 1);
- HBufC* fileName = S60QConversions::qStringToS60Desc(path);
+ HBufC* fileName = XQConversions::qStringToS60Desc(path);
TRAP_IGNORE( title = titleL(*fileName));
title.append(QChar('.'));
@@ -227,7 +226,7 @@
if (valid)
{
HBufC* toneTitle = mConverter->TitleLC(data);
- title = S60QConversions::s60DescToQString(*toneTitle);
+ title = XQConversions::s60DescToQString(*toneTitle);
CleanupStack::PopAndDestroy(); //title
}
CleanupStack::PopAndDestroy(); //dataBuf
--- a/messagingapp/smartmessaging/ringbc/src/ringbctoneconverter.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/smartmessaging/ringbc/src/ringbctoneconverter.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -24,7 +24,7 @@
// USER INCLUDES
#include "ringbctoneconverter.h"
-#include "NsmRingTone.h"
+#include "nsmringtone.h"
#include "debugtraces.h"
--- a/messagingapp/tsrc/msgapptestsuite/msgapptestsuite.cfg Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-TConversationEngine
\ No newline at end of file
--- a/messagingapp/tsrc/msgapptestsuite/msgapptestsuite.pro Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-#
-
-QT += testlib
-QT -= gui
-
-CONFIG += symbian_test
-
-TEMPLATE = app
-TARGET = MsgAppTestSuite
-TARGET.CAPABILITY = All -TCB -DRM
-DEPENDPATH += .
-INCLUDEPATH += .
-INCLUDEPATH += ../../msgui/appengine/tsrc
-INCLUDEPATH += ../../msgui/appengine/tsrc/testconversationengine/inc
-
-
-# Input
-SOURCES += src/main.cpp
-
-SYMBIAN_PLATFORMS = WINSCW ARMV5
-symbian {
- TARGET.UID3 = 0x2001FE76
- TARGET.EPOCSTACKSIZE = 0x8000
- TARGET.EPOCHEAPSIZE = 0x1000 0x1F00000
- BLD_INF_RULES.prj_testexports += "msgapptestsuite.cfg c:/msgapptestsuite.cfg"
- BLD_INF_RULES.prj_testexports += "msgapptestsuitreport.pl c:/msgapptestsuitreport.pl"
-
- testdll.sources = testconversationengine.dll
- testdll.path = /sys/bin
- DEPLOYMENT += testdll
- }
-
-LIBS += \
- -ltestconversationengine \
\ No newline at end of file
--- a/messagingapp/tsrc/msgapptestsuite/msgapptestsuitreport.pl Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,182 +0,0 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-#
-#!/usr/bin/perl -w
-use warnings;
-use strict;
-
-my $TOTALCASES = 0;
-my $TOTALPASSED = 0;
-my $TOTALRUN = 0;
-my $TOTALFAILED = 0;
-my $TOTALSKIPPED = 0;
-
-sub parse_line
-{
- my $line = $_[0];
- my @parts = split (" ", $line);
- my $passed = $parts[1];
- my $failed = $parts[3];
- my $skipped = $parts[5];
-
- my $total = $passed + $failed + $skipped;
- my $passrate = $passed * 100 / $total;
- my $passrateround = sprintf("%.0f",$passrate);
- my $runrate = ($total - $skipped)*100/$total;
- my $runrateround = sprintf("%.0f",$runrate);
-
- $TOTALCASES += $total;
- $TOTALPASSED += $passed;
- $TOTALRUN += ($total - $skipped);
- $TOTALFAILED += $failed;
- $TOTALSKIPPED += $skipped;
-
- printf MYFILE "<td>\n";
- printf MYFILE "$passed\n";
- printf MYFILE "</td>\n";
-
- if($failed > 0)
- {
- printf MYFILE "<td style=\"font-weight:bold;color:red\">\n";
- printf MYFILE "$failed\n";
- printf MYFILE "</td>\n";
- }
- else
- {
- printf MYFILE "<td>\n";
- printf MYFILE "$failed\n";
- printf MYFILE "</td>\n";
- }
-
- printf MYFILE "<td>\n";
- printf MYFILE "$skipped\n";
- printf MYFILE "</td>\n";
-
- printf MYFILE "<td>\n";
- printf MYFILE "$total\n";
- printf MYFILE "</td>\n";
-
- printf MYFILE "<td>\n";
- printf MYFILE ("$passrateround %%\n");
- printf MYFILE "</td>\n";
-
- printf MYFILE "<td>\n";
- printf MYFILE "$runrateround %%\n";
- printf MYFILE "</td>\n";
-
-
-}
-
-sub parse_file
- {
- my $pattern = "Totals";
- my $file = $_[0];
- open (FILE,$file);
-
- while (my $line= <FILE>)
- {
- chomp ($line);
- if ($line =~ m/$pattern/)
- {
- parse_line $line;
- }
- }
- close(FILE);
- }
-
-
-sub generate_report
- {
- open (MYFILE, '>/epoc32/winscw/c/logs/messagingtestsuite/report.html');
- printf MYFILE "<html>\n";
- printf MYFILE "<body>\n";
- printf MYFILE "<head>\n";
- printf MYFILE "<title>MsgApp Test Suite Reports</title>";
- printf MYFILE "</head>\n";
- printf MYFILE "<h2 align = center>Messaging Test Suite Report</h2>\n";
- printf MYFILE "<table border = 2 cellpadding = 10 align = center>\n";
- printf MYFILE "<tr style = \" background-color:lavender \">\n";
- printf MYFILE "<th>Module</th>\n";
- printf MYFILE "<th style = color:green>Passed</th>\n";
- printf MYFILE "<th style = color:red>Failed</th>\n";
- printf MYFILE "<th style = color:chocolate>Skipped</th>\n";
- printf MYFILE "<th>Total Cases</th>\n";
- printf MYFILE "<th>Pass Rate</th>\n";
- printf MYFILE "<th>Run Rate</th>\n";
- printf MYFILE "</tr>\n";
-
-
- my @files = </epoc32/winscw/c/logs/messagingtestsuite/*.txt>;
- foreach my $file (@files)
- {
- my @splitedpath = split("/",$file);
- my $filename = $splitedpath[-1];
- my $length = length($filename);
- my $name = substr($filename,11,$length-15);
- printf MYFILE "<tr>\n";
- printf MYFILE "<td>\n";
- printf MYFILE "<a HREF=$filename style = text-decoration:none><b>$name</b></a>\n";
- printf MYFILE "</td>\n";
-
- parse_file $file;
-
- printf MYFILE "</tr>\n";
- }
-
- printf MYFILE "<tr style= \"font-weight:bold; color:white; background-color:gray\">\n";
- printf MYFILE "<td>\n";
- printf MYFILE "<b>Overall</b>\n";
- printf MYFILE "</td>\n";
-
-
- printf MYFILE "<td>\n";
- printf MYFILE "$TOTALPASSED\n";
- printf MYFILE "</td>\n";
-
- printf MYFILE "<td>\n";
- printf MYFILE "$TOTALFAILED\n";
- printf MYFILE "</td>\n";
-
- printf MYFILE "<td>\n";
- printf MYFILE "$TOTALSKIPPED\n";
- printf MYFILE "</td>\n";
-
- printf MYFILE "<td>\n";
- printf MYFILE "$TOTALCASES\n";
- printf MYFILE "</td>\n";
-
- my $passrate = $TOTALPASSED*100/$TOTALCASES;
- my $passrateround = sprintf("%.0f",$passrate);
- printf MYFILE "<td>\n";
- printf MYFILE "$passrateround%%\n";
- printf MYFILE "</td>\n";
-
- my $runrate = ($TOTALCASES - $TOTALSKIPPED)*100/$TOTALCASES;
- my $runrateround = sprintf("%.0f",$runrate);
- printf MYFILE "<td>\n";
- printf MYFILE "$runrateround%%\n";
- printf MYFILE "</td>\n";
-
- printf MYFILE "</tr>\n";
-
- printf MYFILE "</table>\n";
- printf MYFILE "</body>\n";
- printf MYFILE "</html>\n";
-
- close (MYFILE);
- }
-
-
-generate_report;
\ No newline at end of file
--- a/messagingapp/tsrc/msgapptestsuite/src/main.cpp Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,95 +0,0 @@
-/*
- * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of "Eclipse Public License v1.0"
- * which accompanies this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html".
- *
- * Initial Contributors:
- * Nokia Corporation - initial contribution.
- *
- * Contributors:
- *
- * Description: main class for msgapptestsuite.
- */
-
-#include <QtTest/QtTest>
-#include "testconversationengine.h"
-
-//out put directory for test results.
-QString OUTPUTDIRECTORY = "c:/logs/messagingtestsuite";
-//o/p directory for data to be written on temp file.
-QString TEMPDIR = "c:/logs/messagingtestsuite/testdata";
-//test result O/P file name.
-QString RESULTFILE = "c:/logs/messagingtestsuite/result_%1.txt";
-// folder named UID3 of msgapptestsuite inside private folder.
-const QString PRIVATE_DIR("C:/private/2001fe76");
-
-//factory method to create objects.
-QObject* getObject(QString className)
-{
- if(className == "TConversationEngine" )
- {
- return new TConversationEngine();
- }
- else
- {
- return 0;
- }
-}
-
-//creating o/p directory.
-void createOutPutDirectory()
- {
- QDir dir;
- //o/p dir
- dir.mkdir(OUTPUTDIRECTORY);
- //tmp dir
- dir.mkdir(TEMPDIR);
- // dir inside private folder.
- dir.mkdir(PRIVATE_DIR);
- }
-
-//main entry point
-int main(int argc, char *argv[])
- {
- int ret = -1;
- QCoreApplication app(argc, argv);
-
- //creating output directory.
- createOutPutDirectory();
-
- //the configuration file.
- QFile data("c:/msgapptestsuite.cfg");
-
- if (data.open(QFile::ReadOnly))
- {
- QTextStream in(&data);
- while(!in.atEnd())
- {
- QStringList args;
- QString appName = argv[0];
- args << appName;
-
- QString option = "-o";
- args << option;
-
- QString outFile = RESULTFILE;
- QString name = in.readLine();
- outFile = outFile.arg(name);
- args << outFile;
-
- QObject* tc = getObject(name);
-
- if(tc)
- {
-
- ret = QTest::qExec(tc, args);
- delete tc;
- }
- }
- }
- data.close();
- return ret;
- }
--- a/messagingapp/tsrc/testapp.bat Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-@rem
-@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-@rem All rights reserved.
-@rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
-@rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
-@rem
-@rem Initial Contributors:
-@rem Nokia Corporation - initial contribution.
-@rem
-@rem Contributors:
-@rem
-@rem Description:
-@rem
-
-@ECHO off
-CLS
-ECHO ...Running Test cases
-CALL /epoc32/RELEASE/WINSCW/udeb/MsgAppTestSuite.exe -dtextshell --
-ECHO ...
-
-ECHO ...Generating Report.
-CALL perl /epoc32/winscw/c/msgapptestsuitreport.pl
-ECHO ...Done
-
-CALL /epoc32/winscw/c/logs/messagingtestsuite/report.html
\ No newline at end of file
--- a/messagingapp/tsrc/tsrc.pro Thu Jun 17 09:57:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,24 +0,0 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-#
-
-TEMPLATE = subdirs
-
-CONFIG += symbian_test
-
-SUBDIRS += ../msgui/appengine/tsrc/testconversationengine/testconversationengine.pro
-SUBDIRS += msgapptestsuite/msgapptestsuite.pro
-
-CONFIG += ordered
\ No newline at end of file
--- a/messagingappbase/msgmedia/src/MsgMediaResolver.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingappbase/msgmedia/src/MsgMediaResolver.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -43,7 +43,7 @@
#include <MessagingVariant.hrh>
// Resources
-#include <MsgMimeToMediaMapping.rsg>
+#include <msgmimetomediamapping.rsg>
#include "MsgMedia.hrh"
#include "MsgMediaResolver.h"
--- a/messagingappbase/msgmedia/src/MsgVideoInfo.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingappbase/msgmedia/src/MsgVideoInfo.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -122,11 +122,6 @@
// -----------------------------------------------------------------------------
void CMsgVideoInfo::ResolveVideoInfoL( RFile& aFile )
{
- CCoeEnv* env = CCoeEnv::Static();
- if ( !env )
- {
- User::Leave( KErrNotSupported );
- }
CHXMetaDataUtility* dataUtil = CHXMetaDataUtility::NewL();
--- a/messagingappbase/obexmtms/Rom/obex.hby Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingappbase/obexmtms/Rom/obex.hby Thu Jul 22 16:32:06 2010 +0100
@@ -20,17 +20,17 @@
REM Messaging OBEX MTM is not included in this ROM, because it depends on excluded OBEX
#else
-#ifdef SYMBIAN_EXCLUDE_INFRARED
+#ifndef __IRDA
REM Infrared watcher is not included in this ROM, because it depends on excluded INFRARED
#else
data=MULTI_LINGUIFY(RSC ZSYSTEM\Data\irwatcher System\Data\irwatcher)
-#endif // SYMBIAN_EXCLUDE_INFRARED
+#endif // __IRDA
-#ifdef SYMBIAN_EXCLUDE_BLUETOOTH
+#ifndef __BT
REM Bluetooth watcher is not included in this ROM, because it depends on excluded BLUETOOTH
#else
REM data=MULTI_LINGUIFY(RSC ZSYSTEM\Data\btwatcher System\Data\btwatcher)
-#endif // SYMBIAN_EXCLUDE_BLUETOOTH
+#endif // __BT
#endif // SYMBIAN_EXCLUDE_OBEX
--- a/messagingappbase/obexmtms/Rom/obex.iby Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingappbase/obexmtms/Rom/obex.iby Thu Jul 22 16:32:06 2010 +0100
@@ -30,7 +30,7 @@
//file=ABI_DIR\BUILD_DIR\msgth.dll System\libs\msgth.dll
-#ifdef SYMBIAN_EXCLUDE_INFRARED
+#ifndef __IRDA
REM Messaging infrared MTM is not included in this ROM, because it depends on excluded INFRARED
#else
//IR MTM Client
@@ -41,10 +41,10 @@
//IR MTM Resources
data=DATAZ_\resource\messaging\mtm\irmtm.rsc resource\messaging\mtm\irmtm.rsc
-#endif // SYMBIAN_EXCLUDE_INFRARED
+#endif // __IRDA
-#ifdef SYMBIAN_EXCLUDE_BLUETOOTH
+#ifndef __BT
REM Messaging Bluetooth MTM is not included in this ROM, because it depends on excluded BLUETOOTH
#else
//BT MTM Client
@@ -55,7 +55,7 @@
//BT MTM Resources
data=DATAZ_\resource\messaging\mtm\btmtm.rsc resource\messaging\mtm\btmtm.rsc
-#endif // SYMBIAN_EXCLUDE_BLUETOOTH
+#endif // __BT
//Test Harness Executable
Binary file mmsengine/conf/mmsengine.confml has changed
--- a/mmsengine/mmscodec/src/mmsencode.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/mmsengine/mmscodec/src/mmsencode.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -22,6 +22,7 @@
// INCLUDE FILES
#include <e32std.h>
+#include <e32hal.h>
#include <apparc.h>
#include <s32mem.h>
#include <msventry.h>
--- a/mmsengine/mmsengine.pro Thu Jun 17 09:57:06 2010 +0100
+++ b/mmsengine/mmsengine.pro Thu Jul 22 16:32:06 2010 +0100
@@ -44,12 +44,12 @@
#### xml files containing backup_registration ####
"./group/backup_registration.xml /epoc32/data/z/private/100058DB/backup_registration.xml" \
#### loc file needed for rsc generation
- "./loc/mmsui.loc APP_LAYER_LOC_EXPORT_PATH(mmsui.loc)" \
+ "./loc/MmsUi.loc APP_LAYER_LOC_EXPORT_PATH(mmsui.loc)" \
#### Export confml and crml files ####
"./conf/mmsengine.confml APP_LAYER_CONFML(mmsengine.confml)" \
- "./conf/mmsengine_100058db.crml APP_LAYER_CRML(mmsengine_100058db.crml)" \
- "./conf/mmsengine_101fb0d5.crml APP_LAYER_CRML(mmsengine_101fb0d5.crml)" \
- "./conf/mmsengine_101fb0d9.crml APP_LAYER_CRML(mmsengine_101fb0d9.crml)"
+ "./conf/mmsengine_100058DB.crml APP_LAYER_CRML(mmsengine_100058db.crml)" \
+ "./conf/mmsengine_101FB0D5.crml APP_LAYER_CRML(mmsengine_101fb0d5.crml)" \
+ "./conf/mmsengine_101FB0D5.crml APP_LAYER_CRML(mmsengine_101fb0d9.crml)"
}
symbian {
@@ -65,4 +65,4 @@
"./mmspushhandler/bld/mmspushhandler.mmp" \
"./applicationadapter/bld/mmsapplicationadapter.mmp" \
"./mmscodecclient/bld/mmscodecclient.mmp"
-}
\ No newline at end of file
+}
--- a/mmsengine/mmsserversettings/src/mmssettings.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/mmsengine/mmsserversettings/src/mmssettings.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -138,7 +138,7 @@
iApplicationFolderId = KMsvNullIndexEntryId;
iAccesspointArray.Reset();
iReceivingModeHome = EMmsReceivingAutomatic;
- iReceivingModeForeign = EMmsReceivingManual;
+ iReceivingModeForeign = EMmsReceivingAutomatic;
iAcceptPersonal = ETrue;
iAcceptAdvertisement = ETrue;
iAcceptInformational = ETrue;
--- a/mobilemessaging/smsmtm/clientmtm/group/smcm.mmp Thu Jun 17 09:57:06 2010 +0100
+++ b/mobilemessaging/smsmtm/clientmtm/group/smcm.mmp Thu Jul 22 16:32:06 2010 +0100
@@ -45,7 +45,7 @@
APP_LAYER_SYSTEMINCLUDE_SYMBIAN
LIBRARY euser.lib estor.lib bafl.lib etext.lib
-LIBRARY gsmu.lib msgs.lib cntmodel.lib biodb.lib efsrv.lib
+LIBRARY gsmu.lib msgs.lib biodb.lib efsrv.lib
LIBRARY commsdat.lib
LIBRARY etelmm.lib
--- a/mobilemessaging/smsmtm/clientmtm/inc/smut.h Thu Jun 17 09:57:06 2010 +0100
+++ b/mobilemessaging/smsmtm/clientmtm/inc/smut.h Thu Jul 22 16:32:06 2010 +0100
@@ -130,8 +130,6 @@
private:
static void CompareEntryL(const TMsvEntry& aEntry, TUid aMtm, TMsvId& aFirstId, CMsvEntrySelection* aServiceIds);
- static void GetName(CContactItemField& aField, TUid aFieldType, TDes& aName);
- static void DoGetDetailsL(RFs& aFs, const TDesC& aFromAddress, TDes& aDetails, TInt aMaxLength);
static void Replace(const TDesC& aOld, const TDesC& aNew, TDes& aString);
static TBool DoGetDescriptionL(const CSmsMessage& aMessage, TDes& aDescription, TInt aMaxLength);
--- a/mobilemessaging/smsmtm/clientmtm/src/smut.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/mobilemessaging/smsmtm/clientmtm/src/smut.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -373,7 +373,7 @@
KErrAlreadyExists if more than one contact entry found.
KErrNone if details is obtained successfully.
*/
-EXPORT_C TInt TSmsUtilities::GetDetails(RFs& aFs, const TDesC& aFromAddress, TDes& aDetails, TInt aMaxLength)
+EXPORT_C TInt TSmsUtilities::GetDetails(RFs& /*aFs*/, const TDesC& aFromAddress, TDes& aDetails, TInt aMaxLength)
{
__ASSERT_DEBUG( aMaxLength <= aDetails.MaxLength(), User::Invariant() );
@@ -382,9 +382,7 @@
aMaxLength = aDetails.MaxLength();
}
- TRAPD(err, DoGetDetailsL(aFs, aFromAddress, aDetails, aMaxLength));
-
- if ( (err != KErrNone) || (aDetails.Length() == 0) )
+ if ( (aDetails.Length() == 0) )
{
if (aFromAddress.Length() <= aMaxLength)
{
@@ -524,130 +522,6 @@
}
}
-void TSmsUtilities::DoGetDetailsL(RFs& aFs, const TDesC& aFromAddress, TDes& aDetails, TInt aMaxLength)
- {
- __UHEAP_MARK;
-
- // Check that aFromAddress is a valid GSM telephone number
- if (!ValidGsmNumber(aFromAddress))
- User::Leave(KErrArgument);
-
- aDetails.Zero();
-
- CContactDatabase* db = CContactDatabase::OpenL();
- CleanupStack::PushL(db);
-
- // Lookup the telephone number (aFromAddress) in the contact database
- CContactIdArray* contactId = db->MatchPhoneNumberL(aFromAddress, KLowerSevenDigits);
- CleanupStack::PushL(contactId);
-
- // Add the name if there is one and only one match in contacts. If there's more than
- // one then wouldn't know which one to choose
- if (contactId->Count() <= 0)
- {
- //The telephone number (aFromAddress) was not found in the contact database.
- User::Leave(KErrNotFound);
- }
- else if (contactId->Count() > 1)
- {
- //There's more than one telephone number match in contacts.
- User::Leave(KErrAlreadyExists);
- }
-
- CContactItem* newContact = db->ReadMinimalContactL((*contactId)[0]);
- CleanupStack::PushL(newContact);
-
- CContactItemFieldSet& fieldSet = newContact->CardFields();
-
- TInt count = fieldSet.Count();
-
- HBufC* family = HBufC::NewLC(aMaxLength);
- HBufC* given = HBufC::NewLC(aMaxLength);
- TPtr familyPtr(family->Des());
- TPtr givenPtr(given->Des());
-
- // Find the Given and First Name of the contact
- // Order important
- for (TInt curField = 0; curField < count && !(familyPtr.Length() && givenPtr.Length()); curField++)
- {
- CContactItemField& field = fieldSet[curField];
-
- if (!familyPtr.Length())
- GetName(field, KUidContactFieldFamilyName, familyPtr);
-
- if (!givenPtr.Length())
- GetName(field, KUidContactFieldGivenName, givenPtr);
- }
-
- familyPtr.Trim();
- givenPtr.Trim();
-
- TInt familyLen = familyPtr.Length();
- TInt givenLen = givenPtr.Length();
-
- if (!familyLen && !givenLen)
- {
- //Leave if no family nor given name found
- User::Leave(KErrNotFound);
- }
- else if (givenLen == 0)
- {
- // The maximum length of familyPtr may be greater than
- // aMaxLength, so need to check its length before copying.
- if (familyPtr.Length() > aMaxLength)
- {
- familyPtr.Set(familyPtr.LeftTPtr(aMaxLength));
- }
-
- aDetails = familyPtr;
- }
- else if (familyLen == 0)
- {
- // The maximum length of givenPtr may be greater than
- // aMaxLength, so need to check its length before copying.
- if (givenPtr.Length() > aMaxLength)
- {
- givenPtr.Set(givenPtr.LeftTPtr(aMaxLength));
- }
-
- aDetails = givenPtr;
- }
- else
- {
- RResourceFile resFile = OpenResourceFileL(aFs);
- CleanupClosePushL(resFile);
- ReadResourceStringL(resFile, R_SENDER_NAME_FORMAT, aDetails);
- CleanupStack::PopAndDestroy(&resFile);
-
- TBuf<8> givenPlaceHolder = L_SMS_GIVEN_NAME;
- TBuf<8> familyPlaceHolder = L_SMS_FAMILY_NAME;
- TInt minLength = aDetails.Length() - givenPlaceHolder.Length() - familyPlaceHolder.Length();
-
- if ((familyLen + givenLen + minLength) > aMaxLength)
- {
- // The maximum length of familyPtr may be greater than
- // aMaxLength, so need to check its length before copying.
- if (familyPtr.Length() > aMaxLength)
- {
- familyPtr.Set(familyPtr.LeftTPtr(aMaxLength));
- }
- aDetails = familyPtr;
- }
- else
- {
- Replace(givenPlaceHolder, givenPtr, aDetails);
- Replace(familyPlaceHolder, familyPtr, aDetails);
- }
- }
-
- //Remove leading and trailing spaces
- aDetails.Trim();
-
- CleanupStack::PopAndDestroy(5, db);
-
- __UHEAP_MARKEND;
- }
-
TBool TSmsUtilities::ValidGsmNumber(const TDesC& aTelephone)
{
// Returns ETrue if
@@ -705,17 +579,6 @@
return validTel && validCharsFound >= KSmsValidGsmNumberMinLength;
}
-void TSmsUtilities::GetName(CContactItemField& aField, TUid aFieldType, TDes& aName)
- {
- __UHEAP_MARK;
- if (aField.ContentType().ContainsFieldType(aFieldType))
- {
- TPtrC name = aField.TextStorage()->Text();
- aName = name.Left(Min(aName.MaxLength(), name.Length()));
- }
- __UHEAP_MARKEND;
- }
-
TBool TSmsUtilities::DoGetDescriptionL(const CSmsMessage& aMessage, TDes& aDescription, TInt aMaxLength)
// this function returns EFalse if aMessage has no special message indication data and is not an SMS_STATUS_REPORT,
// i.e. more needs to be done to extract the description from the message
--- a/msg_plat/conversation_services_client_api/inc/ccsrequesthandler.h Thu Jun 17 09:57:06 2010 +0100
+++ b/msg_plat/conversation_services_client_api/inc/ccsrequesthandler.h Thu Jul 22 16:32:06 2010 +0100
@@ -309,6 +309,8 @@
*/
IMPORT_C CCsClientConversation* GetConversationFromMessageIdL ( TInt aMessageId );
+ IMPORT_C CCsClientConversation* GetConversationFromConversationIdL( TInt aConversationId );
+
protected: // Functions from base classes
/**
@@ -388,6 +390,12 @@
* Handles delete conversation list event.
*/
void HandleDeleteConversationList (HBufC8* aResultsBuffer);
+
+ /**
+ * HandlePartialDeleteConversationList
+ * Handles partial delete of conversation event.
+ */
+ void HandlePartialDeleteConversationList(HBufC8* aResultsBuffer);
/**
* HandleModifyConversationList.
--- a/msg_plat/conversation_services_client_api/inc/mcsconversationlistchangeobserver.h Thu Jun 17 09:57:06 2010 +0100
+++ b/msg_plat/conversation_services_client_api/inc/mcsconversationlistchangeobserver.h Thu Jul 22 16:32:06 2010 +0100
@@ -59,6 +59,13 @@
virtual void DeleteConversationList(
const CCsClientConversation& aClientConversation) = 0;
+ /**
+ * PartialDeleteConversationList
+ * This is for handling of partial delete of conversation event
+ * generated from the server
+ */
+ virtual void PartialDeleteConversationList(
+ const CCsClientConversation& aClientConversation) = 0;
/**
* ModifyConversationList
* This is for handling modify conversation asynchronusly
--- a/msg_plat/conversation_services_client_api/inc/rcssession.h Thu Jun 17 09:57:06 2010 +0100
+++ b/msg_plat/conversation_services_client_api/inc/rcssession.h Thu Jul 22 16:32:06 2010 +0100
@@ -248,6 +248,8 @@
*/
void GetConversationFromMessageIdL(TInt aMessageId, TPtr8 aResultsBuffer);
+ void GetConversationFromConversationIdL(TInt aConversationId, TPtr8 aResultsBuffer);
+
/**
* MarkConversationReadL.
* This function sends the request to conversation server
--- a/msg_plat/conversation_services_utilities_api/inc/ccsdefs.h Thu Jun 17 09:57:06 2010 +0100
+++ b/msg_plat/conversation_services_utilities_api/inc/ccsdefs.h Thu Jul 22 16:32:06 2010 +0100
@@ -81,6 +81,7 @@
const TUint32 KConversationCachingEventError = 0x00000100;
const TUint32 KConversationEventListRefresh = 0x00000200;
const TUint32 KConversationEventRefresh = 0x00000400;
+const TUint32 KConversationListEventPartialDelete = 0x00000800;
//-----------------------------------------------------------------------------
// Conversation Server caching status codes
@@ -120,7 +121,9 @@
EGetConversationId,
EGetConversationIdFromAddress,
EGetConversationFromMessageId,
- EUserMarkReadConversation
+ EUserMarkReadConversation,
+ EGetConversationFromConversationId,
+ EGetConversationFromConversationIdComplete
};
//-----------------------------------------------------------------------------
@@ -137,6 +140,7 @@
EModifyConversationListEvent,
EAddConversationEvent,
EDeleteConversationEvent,
+ EPartialDeleteConversationListEvent,
EModifyConversationEvent,
ECachingStartedEvent,
ECachingCompletedEvent,
@@ -194,6 +198,7 @@
ECsProvisioning,
ECsBioMsg_VCard,
ECsBioMsg_VCal,
+ECsBioMgs_NokiaService,
ECsUnknown
};
@@ -289,15 +294,89 @@
enum
{
- EPreviewNone = 0x00,
- EPreviewImage = 0x01,
- EPreviewAudio = 0x02,
- EPreviewVideo = 0x04,
- EPreviewAttachment = 0x08
+ EPreviewNone = 0x0000,
+ EPreviewImage = 0x0001,
+ EPreviewAudio = 0x0002,
+ EPreviewVideo = 0x0004,
+ EPreviewAttachment = 0x0008,
+ EPreviewForward = 0x0010,
+ EPreviewProtectedImage = 0x0020,
+ EPreviewProtectedAudio = 0x0040,
+ EPreviewProtectedVideo = 0x0080,
+ EPreviewCorruptedImage = 0x0100,
+ EPreviewCorruptedAudio = 0x0200,
+ EPreviewCorruptedVideo = 0x0400
+};
+
+typedef TUint16 TCsMsgPreviewProperty;
+
+/**
+ * @typedef TCsPreviewMsgProcessingState
+ */
+enum
+{
+ EPreviewMsgNotProcessed = 0,
+ EPreviewMsgProcessing = 1,
+ EPreviewMsgProcessed = 2
};
-typedef TUint8 TCsMsgPreviewProperty;
+/**
+@publishedAll
+@released
+
+Template class CleanupResetAndDestroy to clean up the array
+of implementation information from the cleanup stack.
+*/
+
+template <class T>
+class CleanupResetAndDestroy
+ {
+public:
+ /**
+ Puts an item on the cleanup stack.
+
+ @param aRef
+ The implementation information to be put on the cleanup stack.
+ */
+ inline static void PushL(T& aRef);
+ inline static void PushL(T* aPointer);
+private:
+ static void ResetAndDestroy(TAny *aPtr);
+ static void ResetAndDestroyDelete(TAny *aPtr);
+ };
+template <class T>
+inline void CleanupResetAndDestroyPushL(T& aRef);
+template <class T>
+inline void CleanupResetAndDestroyPushL(T* aPointer);
+
+template <class T>
+inline void CleanupResetAndDestroy<T>::PushL(T& aRef)
+ {CleanupStack::PushL(TCleanupItem(&ResetAndDestroy,&aRef));}
+
+template <class T>
+inline void CleanupResetAndDestroy<T>::PushL(T* aPointer)
+ {CleanupStack::PushL(TCleanupItem(&ResetAndDestroyDelete,aPointer));}
+
+template <class T>
+void CleanupResetAndDestroy<T>::ResetAndDestroy(TAny *aPtr)
+ {(STATIC_CAST(T*,aPtr))->ResetAndDestroy();}
+
+template <class T>
+void CleanupResetAndDestroy<T>::ResetAndDestroyDelete(TAny *aPtr)
+ {
+ (STATIC_CAST(T*,aPtr))->ResetAndDestroy();
+ delete (STATIC_CAST(T*,aPtr));
+ }
+
+template <class T>
+inline void CleanupResetAndDestroyPushL(T& aRef)
+ {CleanupResetAndDestroy<T>::PushL(aRef);}
+
+template <class T>
+inline void CleanupResetAndDestroyPushL(T* aPointer)
+ {CleanupResetAndDestroy<T>::PushL(aPointer);}
+
#endif // __C_CSSERVER_DEFS_H__
// End of file
--- a/msg_plat/messaging_media_resolver_api/inc/MsgAudioInfo.h Thu Jun 17 09:57:06 2010 +0100
+++ b/msg_plat/messaging_media_resolver_api/inc/MsgAudioInfo.h Thu Jul 22 16:32:06 2010 +0100
@@ -25,7 +25,7 @@
#include <e32std.h>
-#include <MdaAudioSamplePlayer.h> // MMdaAudioPlayerCallback & CMdaAudioPlayerUtility
+#include <mdaaudiosampleplayer.h> // MMdaAudioPlayerCallback & CMdaAudioPlayerUtility
#include <MsgMediaInfo.h>
// CONSTANTS
--- a/msg_plat/messaging_media_resolver_api/inc/MsgMediaInfo.inl Thu Jun 17 09:57:06 2010 +0100
+++ b/msg_plat/messaging_media_resolver_api/inc/MsgMediaInfo.inl Thu Jul 22 16:32:06 2010 +0100
@@ -23,9 +23,16 @@
//
inline TPtrC CMsgMediaInfo::FullFilePath() const
{
- return iFullFilePath
- ? iFullFilePath->Des()
- : KNullDesC();
+
+ if(iFullFilePath)
+ {
+ return iFullFilePath->Des();
+ }
+ else
+ {
+ return KNullDesC();
+ }
+
}
// -----------------------------------------------------------------------------
--- a/msg_plat/messaging_media_resolver_api/inc/MsgVideoInfo.h Thu Jun 17 09:57:06 2010 +0100
+++ b/msg_plat/messaging_media_resolver_api/inc/MsgVideoInfo.h Thu Jul 22 16:32:06 2010 +0100
@@ -27,7 +27,7 @@
#include <w32std.h>
// VideoPlayerUtility API
-#include <VideoPlayer.h>
+#include <videoplayer.h>
// Base Class
#include <MsgMediaInfo.h>