/*
* 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: Notification server main class.
* Handles calling notifications and inidcations
*
*/
// SYSTEM INCLUDES
#include <hbdevicedialog.h>
#include <hbindicator.h>
#include <qfileinfo.h>
//USER INCLUDES
#include "msgnotifier.h"
#include "msgnotifier_p.h"
#include "msgsimnumberdetector.h"
#include "msgnotificationdialogpluginkeys.h"
#include "msginfodefs.h"
#include "ccsdefs.h"
#include "unidatamodelloader.h"
#include "unidatamodelplugininterface.h"
#include "msgcontacthandler.h"
#include "msgerrorwatcher.h"
#include "debugtraces.h"
// LOCALIZATION CONSTANTS
#define LOC_RECEIVED_FILES hbTrId("txt_messaging_title_received_files")
#define LOC_BUSINESS_CARD hbTrId("txt_messaging_dpopinfo_business_card")
#define CARD_SEPERATOR "-"
#define LOC_MULTIMEDIA_MSG hbTrId("txt_messaging_dpopinfo_multimedia_message")
// plugin ids
const QString IndicationsPluginId("com.nokia.messaging.newindicatorplugin");
const QString PendingMsgPluginId("com.nokia.messaging.pendingindicatorplugin");
const QString FailedMsgPluginId("com.nokia.messaging.failedindicatorplugin");
const QString NotificationPluginId("com.nokia.messaging.newmsgnotificationdialog");
// ----------------------------------------------------------------------------
// MsgNotifier::MsgNotifier
// @see MsgNotifier.h
// ----------------------------------------------------------------------------
MsgNotifier::MsgNotifier(QObject* parent) :
QObject(parent)
{
QDEBUG_WRITE("MsgNotifier::MsgNotifier : Enter")
d_ptr = q_check_ptr(new MsgNotifierPrivate(this));
mSimHandler = new MsgSimNumDetector();
mErrorWatcher = new MsgErrorWatcher(this);
QDEBUG_WRITE("MsgNotifier::MsgNotifier : Exit")
}
// ----------------------------------------------------------------------------
// MsgNotifier::~MsgNotifier
// @see MsgNotifier.h
// ----------------------------------------------------------------------------
MsgNotifier::~MsgNotifier()
{
QDEBUG_WRITE("MsgNotifier::~MsgNotifier : Enter")
delete d_ptr;
delete mSimHandler;
delete mErrorWatcher;
QDEBUG_WRITE("MsgNotifier::~MsgNotifier : Enter")
}
// ----------------------------------------------------------------------------
// MsgNotifier::displayNewMessageNotification
// @see MsgNotifier.h
// ----------------------------------------------------------------------------
void MsgNotifier::displayNewMessageNotification(NotificationData& data)
{
QDEBUG_WRITE("MsgNotifier::displayNewMessageNotification : Enter")
QDEBUG_WRITE("MsgNotifier::displayNewMessageNotification :"
" Printing notification data")
QDEBUG_WRITE_FORMAT("Name : ", data.mDisplayName);
QDEBUG_WRITE_FORMAT("Number : ", data.mContactNum);
QDEBUG_WRITE_FORMAT("Description : ", data.mDescription);
QDEBUG_WRITE_FORMAT("Type : ", data.mMsgType);
QDEBUG_WRITE_FORMAT("Conv Id : ", data.mConversationId);
QDEBUG_WRITE_FORMAT("Msv Entry Id : ", data.msvEntryId);
// Fill data to variant map
QVariantMap notificationData;
//incase of BT messages show filename as description
QString description;
if ( ECsBlueTooth == data.mMsgType)
{
data.mDisplayName = LOC_RECEIVED_FILES;
QFileInfo fileinfo(data.mDescription);
description = fileinfo.fileName();
}
else if ( ECsBioMsg_VCard == data.mMsgType)
{
UniDataModelLoader* pluginLoader = new UniDataModelLoader;
UniDataModelPluginInterface* bioMsgPlugin = pluginLoader->getDataModelPlugin(ConvergedMessage::BioMsg);
bioMsgPlugin->setMessageId(data.msvEntryId);
if (bioMsgPlugin->attachmentCount() > 0)
{
UniMessageInfoList attList = bioMsgPlugin->attachmentList();
QString attachmentPath = attList[0]->path();
description = LOC_BUSINESS_CARD;
description.append(CARD_SEPERATOR);
description.append(
MsgContactHandler::getVCardDisplayName(attachmentPath));
}
delete pluginLoader;
}
else if( data.mDescription.isEmpty() && (ECsMMS == data.mMsgType || ECsAudio == data.mMsgType) )
{
description = LOC_MULTIMEDIA_MSG;
}
else
{
description = data.mDescription;
}
notificationData[QString(KDisplayNameKey)] = data.mDisplayName ;
notificationData[QString(KConversationIdKey)] = data.mConversationId;
notificationData[QString(KMessageTypeKey)] = data.mMsgType;
notificationData[QString(KMessageBodyKey)] = description;
notificationData[QString(KMessageSubjectKey)] = description;
notificationData[QString(KContactAddressKey)] = data.mContactNum;
// call device dialog to show notification
HbDeviceDialog deviceDialog ;
deviceDialog.show(NotificationPluginId,notificationData);
QDEBUG_WRITE("MsgNotifier::displayNewMessageNotification : Exit")
}
// ----------------------------------------------------------------------------
// MsgNotifier::updateIndications
// @see MsgNotifier.h
// ----------------------------------------------------------------------------
void MsgNotifier::updateUnreadIndications(int unreadCount)
{
QDEBUG_WRITE("MsgNotifier::updateUnreadIndications Enter")
HbIndicator indicator;
if (unreadCount) {
QByteArray dataArray;
QDataStream messageStream(&dataArray, QIODevice::WriteOnly | QIODevice::Append);
MsgInfo info;
info.mIndicatorType = NewIndicatorPlugin;
// only the unread count is used for unread indications as of now.
// the other values are not needed.
info.mMsgCount = unreadCount;
info.mConversationId = -1;
info.serialize(messageStream);
QVariant parameter(dataArray);
indicator.activate(IndicationsPluginId, parameter);
QDEBUG_WRITE("MsgNotifier::updateUnreadIndications Indications Activated")
}
else {
indicator.deactivate(IndicationsPluginId);
QDEBUG_WRITE("MsgNotifier::updateUnreadIndications Indications Deactivated")
}
QDEBUG_WRITE("MsgNotifier::updateUnreadIndications Exit")
}
// ----------------------------------------------------------------------------
// MsgNotifier::updateOutboxIndications
// @see MsgNotifier.h
// ----------------------------------------------------------------------------
void MsgNotifier::updateOutboxIndications(MsgInfo& data)
{
QDEBUG_WRITE("MsgNotifier::updateOutboxIndications Enter")
HbIndicator indicator;
if (data.mMsgCount) {
QByteArray dataArray;
QDataStream messageStream(&dataArray, QIODevice::WriteOnly | QIODevice::Append);
data.serialize(messageStream);
QVariant parameter(dataArray);
indicator.activate(indicatorName(data.mIndicatorType), parameter);
QDEBUG_WRITE("MsgNotifier::updateOutboxIndications Indications Activated")
}
else {
indicator.deactivate(indicatorName(data.mIndicatorType));
QDEBUG_WRITE("MsgNotifier::updateOutboxIndications Indications Deactivated")
}
QDEBUG_WRITE("MsgNotifier::updateOutboxIndications Exit")
}
//EOF