vmbx/vmbxcpplugin/src/vmbxuiengine.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 31 Aug 2010 15:45:17 +0300
branchRCL_3
changeset 19 7d48bed6ce0c
permissions -rw-r--r--
Revision: 201033 Kit: 201035

/*
 * Copyright (c) 2009 - 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:
 *
 */

// System includes
#include <cvoicemailbox.h>
#include <cvoicemailboxentry.h>

// User includes
#include "vmbxuiengine.h"
#include "loggerutil.h"

/*!
    Constructor
*/
VmbxUiEngine::VmbxUiEngine() : mVmbxEngine(NULL),
    mCsVoiceNumber(""),mCsVideoNumber("")
{ 
    _DBGLOG("VmbxUiEngine::VmbxUiEngine >")
    QT_TRAP_THROWING(mVmbxEngine = CVoiceMailbox::NewL());
    init();
    _DBGLOG("VmbxUiEngine::VmbxUiEngine <")
}

/*!
    Destructor
*/
VmbxUiEngine::~VmbxUiEngine()
{
    _DBGLOG( "VmbxUiEngine::~VmbxUiEngine >")
    mVmbxEngine->NotifyVmbxNumberChangeCancel();
    delete mVmbxEngine;
    mVmbxEngine = NULL;
    _DBGLOG( "VmbxUiEngine::~VmbxUiEngine <")
}

/*!
    Initialize vmbx ui engine.
*/
void VmbxUiEngine::init()
{
    _DBGLOG("VmbxUiEngine::init >")
    // Init voice primary line number
    getCsVoicePrimaryNumber(mCsVoiceNumber);
    // Init video primary line nubmer
    if (isVideoSupport()) {
        getCsVideoPrimaryNumber(mCsVideoNumber);
    }
    _DBGLOG("VmbxUiEngine::init <")
}

/*!
    Getter method for primary voice number of Voice Mailbox.
*/
void VmbxUiEngine::getCsVoiceNumber(QString &aValue)
{
    _DBGLOG("VmbxUiEngine::getCsVoiceNumber >")
    aValue = mCsVoiceNumber;
    _DBGLOG2("VmbxUiEngine::getCsVoiceNumber < , string=", aValue)
}

/*!
    Getter method for primary video number of Voice Mailbox.
*/
void VmbxUiEngine::getCsVideoNumber(QString &aValue)
{
    _DBGLOG("VmbxUiEngine::getCsVideoNumber >")
    aValue = mCsVideoNumber;
    _DBGLOG2("VmbxUiEngine::getCsVideoNumber < , string=", aValue)
}

/*!
    Set number when cs voice number has been edited on UI.
    @param aValue New value.
*/
void VmbxUiEngine::setCsVoiceNumber(const QString &aValue)
{
    _DBGLOG2("VmbxUiEngine::setCsVoiceNumber >, value=",aValue)
    TVoiceMailboxParams vmbxParams;
    vmbxParams.iType = EVmbxVoice;
    vmbxParams.iLineType = EVmbxAlsLine1;
    vmbxParams.iServiceId = KVmbxServiceVoice;
    setNumber(vmbxParams, aValue);
    mCsVoiceNumber = aValue;
    _DBGLOG("VmbxUiEngine::setCsVoiceNumber <");
}

/*!
    Set number when cs video number has been edited on UI.
    @param aValue New value.
*/
void VmbxUiEngine::setCsVideoNumber(const QString &aValue)
{
    _DBGLOG2("VmbxUiEngine::setCsVideoNumber >, value=",aValue)
    TVoiceMailboxParams vmbxParams;
    vmbxParams.iType = EVmbxVideo;
    vmbxParams.iLineType = EVmbxAlsLine1;
    vmbxParams.iServiceId = KVmbxServiceVideo;
    setNumber(vmbxParams, aValue);
    mCsVideoNumber = aValue;
    _DBGLOG("VmbxUiEngine::setCsVideoNumber <");
}

/*!
    If video mailbox supported.
*/
bool VmbxUiEngine::isVideoSupport()
{
    _DBGLOG("VmbxUiEngine::isVideoSupport >")
    // video support
    bool isVideoSupport(false);
    TVoiceMailboxParams vmbxParams;
    vmbxParams.iType = EVmbxVideo;
    vmbxParams.iLineType = EVmbxAlsLine1;
    vmbxParams.iServiceId = KVmbxServiceVideo;
    isVideoSupport = mVmbxEngine->CheckConfiguration(vmbxParams,
        EVmbxVideoMailboxSupported);
    _DBGLOG2("VmbxUiEngine::isVideoSupport ", isVideoSupport);
    return isVideoSupport;
}

/*!
    If voice mailbox allow to write.
*/
bool VmbxUiEngine::isVoiceWritable()
{
    _DBGLOG("VmbxUiEngine::isVoiceWritable >")
    bool isVoiceWritable(false);
    TVoiceMailboxParams vmbxParams;
    vmbxParams.iType = EVmbxVoice;
    vmbxParams.iLineType = EVmbxAlsLine1;
    vmbxParams.iServiceId = KVmbxServiceVoice;
    isVoiceWritable = mVmbxEngine->CheckConfiguration(vmbxParams,
        EVmbxChangeNbrAllowedOnUi);
    _DBGLOG2("VmbxUiEngine::isVoiceWritable <", isVoiceWritable);
    return isVoiceWritable;
}

/*!
    If video mailbox allow to write.
*/
bool VmbxUiEngine::isVideoWritable()
{
    _DBGLOG( "VmbxUiEngine::isVideoWritable >")
    bool isVideoWritable(false);
    TVoiceMailboxParams vmbxParams;
    vmbxParams.iType = EVmbxVideo;
    vmbxParams.iLineType = EVmbxAlsLine1;
    vmbxParams.iServiceId = KVmbxServiceVideo;
    isVideoWritable = mVmbxEngine->CheckConfiguration(vmbxParams,
        EVmbxChangeNbrAllowedOnUi);
    _DBGLOG2("VmbxUiEngine::isVoiceWritable >", isVideoWritable);
    return isVideoWritable;
}

/*!
    queryVoiceNumber
*/
int VmbxUiEngine::queryVoiceNumber(QString &aValue)
{
    _DBGLOG2("VmbxUiEngine::queryVoiceNumber >, value=",aValue)
    TVoiceMailboxParams vmbxParams;
    vmbxParams.iType = EVmbxVoice;
    vmbxParams.iServiceId = KVmbxServiceVoice;
    int result = queryNumber(vmbxParams, aValue);
    _DBGLOG2("VmbxUiEngine::queryVoiceNumber <, value=", aValue)
    return result;
}

/*!
    queryVideoNumber
*/
int VmbxUiEngine::queryVideoNumber(QString &aValue)
{
    _DBGLOG2("VmbxUiEngine::queryVideoNumber >, value=", aValue)
    TVoiceMailboxParams vmbxParams;
    vmbxParams.iType = EVmbxVideo;
    vmbxParams.iServiceId = KVmbxServiceVideo;
    int result = queryNumber(vmbxParams, aValue);
    _DBGLOG2("VmbxUiEngine::queryVideoNumber <, value=", aValue)
    return result;
}

/*!
    Request notify when VMBX number changed
 */
void VmbxUiEngine::notifyVmbxNumberChange(bool aNotifyOnActiveLineOnly)
{
    _DBGLOG2("VmbxUiEngine::notifyVmbxNumberChange >, OnActiveLineOnly=", 
             aNotifyOnActiveLineOnly)
    QT_TRAP_THROWING(mVmbxEngine->NotifyVmbxNumberChangeL
                                 (*this, aNotifyOnActiveLineOnly));
    _DBGLOG2("VmbxUiEngine::notifyVmbxNumberChange <, OnActiveLineOnly=", 
             aNotifyOnActiveLineOnly)
}

/*!
    Callback from voice mailbox engine when number has been updated
    This method notifies the UI to refresh its data.
*/
void VmbxUiEngine::HandleNotifyL(const CVoiceMailboxEntry &aVmbxEntry)
{
    _DBGLOG( "VmbxUiEngine::HandleNotifyL >")
    TVmbxType type = aVmbxEntry.VoiceMailboxType();
    TPtrC number(KNullDesC);
    aVmbxEntry.GetVmbxNumber(number);
    if (EVmbxVoice == type) {
        mCsVoiceNumber = QString::fromUtf16(number.Ptr(), number.Length());
    } else if (EVmbxVideo == type) {
        mCsVideoNumber = QString::fromUtf16(number.Ptr(), number.Length());
    }
    emit voiceMailboxEngineEntriesUpdated(type);
    _DBGLOG( "VmbxUiEngine::HandleNotifyL <")
}

/*!
    Getter method for primary voice number of Voice Mailbox.
*/
void VmbxUiEngine::getCsVoicePrimaryNumber(QString &aValue)
{
    _DBGLOG("VmbxUiEngine::getCsVoicePrimaryNumber >")
    TVoiceMailboxParams vmbxParams;
    vmbxParams.iType = EVmbxVoice;
    vmbxParams.iLineType = EVmbxAlsLine1;
    vmbxParams.iServiceId = KVmbxServiceVoice;
    getNumber(vmbxParams, aValue);
    _DBGLOG2("VmbxUiEngine::getCsVoicePrimaryNumber < , string=", aValue)
}

/*!
    Getter method for primary video number of Voice Mailbox.
*/
void VmbxUiEngine::getCsVideoPrimaryNumber(QString &aValue)
{
    _DBGLOG("VmbxUiEngine::getCsVideoPrimaryNumber >")
    TVoiceMailboxParams vmbxParams;
    vmbxParams.iType = EVmbxVideo;
    vmbxParams.iLineType = EVmbxAlsLine1;
    vmbxParams.iServiceId = KVmbxServiceVideo;
    getNumber(vmbxParams, aValue);
    _DBGLOG2("VmbxUiEngine::getCsVideoPrimaryNumber < , string=", aValue)
}

/*!
    Private getter method for voice mailbox number.
*/  
void VmbxUiEngine::getNumber(const TVoiceMailboxParams &aParam, 
                             QString &aValue)
{
    _DBGLOG("VmbxUiEngine::getNumber >")
    CVoiceMailboxEntry* vmbxEntry = NULL;
    TInt result = mVmbxEngine->GetStoredEntry( aParam, vmbxEntry );
    _DBGLOG2("VmbxUiEngine::getNumber, GetStoredEntry result=", result);
    if ( KErrNone == result && vmbxEntry ){ 
        TPtrC entryNumber( KNullDesC );
        result = vmbxEntry->GetVmbxNumber( entryNumber );
        _DBGLOG3("VmbxUiEngine::getNumber, GetVmbxNumber result=", 
            result,
            " but ignore code and allow returning of an empty string to UI");
        aValue = QString::fromUtf16(entryNumber.Ptr(), entryNumber.Length());
    }
    delete vmbxEntry;
    vmbxEntry = NULL;
    _DBGLOG2("VmbxUiEngine::getNumber < , string=", aValue)    
}

/*!
    Setter method for voice mailbox number.
*/
void VmbxUiEngine::setNumber(const TVoiceMailboxParams &aParam, 
                             const QString &aValue)
{
    _DBGLOG("VmbxUiEngine::setNumber >")
        
    CVoiceMailboxEntry* vmbxEntry = NULL;
    QT_TRAP_THROWING(vmbxEntry = CVoiceMailboxEntry::NewL());
    vmbxEntry->SetServiceId(aParam.iServiceId);
    vmbxEntry->SetVoiceMailboxType(aParam.iType);
    vmbxEntry->SetVmbxAlsLineType(aParam.iLineType);
    _DBGLOG2("VmbxUiEngine::setNumber, SetVmbxNumber aValue=", aValue);
    _DBGLOG( "VmbxUiEngine::setNumber: cast to TPtrC")
    TPtrC newNumber( 
        reinterpret_cast<const TUint16*>( aValue.utf16() ),
        aValue.length() );
    int result = vmbxEntry->SetVmbxNumber( newNumber );
    if ( KErrNone == result ) {
        result = mVmbxEngine->SaveEntry( *vmbxEntry );
        _DBGLOG2("VmbxUiEngine::setNumber, SaveEntry result=", result);
    } 
    delete vmbxEntry;
    vmbxEntry = 0;
    _DBGLOG("VmbxUiEngine::setNumber <");
}

/*!
    Query method for voice mailbox number.
*/
int VmbxUiEngine::queryNumber(const TVoiceMailboxParams &aParam, 
    QString &aValue)
{
    _DBGLOG2("VmbxUiEngine::queryNumber >, value=", aValue)
    getNumber(aParam, aValue);
    CVoiceMailboxEntry *vmbxEntry = NULL;
    int result(0);
    if (aValue.length() > 0) {
        result = mVmbxEngine->QueryChangeEntry(aParam, vmbxEntry);
    } else {
        result = mVmbxEngine->QueryNewEntry(aParam, vmbxEntry);
    }
    if (KErrNone == result && vmbxEntry) {
        TPtrC entryNumber(KNullDesC);
        result = vmbxEntry->GetVmbxNumber(entryNumber);
        _DBGLOG3("VmbxUiEngine::queryNumber, GetVmbxNumber result=", 
            result,
            " but ignore code and allow returing of an empty string to UI");
        aValue = QString::fromUtf16(entryNumber.Ptr(), entryNumber.Length());
    } 
    delete vmbxEntry;
    vmbxEntry = NULL;
    _DBGLOG2("VmbxUiEngine::queryNumber <, value=", aValue)
    return result;
}

//End of file