/*
* Copyright (c) 2006 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 mapping error codes to notes
*
*/
// INCLUDE FILES
#include "IMNoteMapper.h"
#include "IMDialogUtils.h"
#include "ChatDebugPrint.h"
#include <stringloader.h>
#include <ChatNG.rsg>
#include <eikenv.h>
#include "ImpsCSPAllErrors.h"
#include "PublicEngineDefinitions.h"
#include "imutils.h"
// ---------------------------------------------------------
// IMNoteMapper::ShowNoteL
// (other items were commented in a header).
// ---------------------------------------------------------
//
EXPORT_C void IMNoteMapper::ShowNoteL( const TInt aErrorCode, const TDesC& aAdditionalData )
{
TBool ignoreAdditionalData( EFalse ); // Some logical strings are without parameters...
TBool errorNote( ETrue );
TBool defaultNote( EFalse );
TInt resourceID( 0 );
TBool confirmationNote( EFalse );
TBool softkeyOk( EFalse );
switch ( aErrorCode )
{
case KErrNoMemory:
{
errorNote = ETrue;
resourceID = R_CHAT_CEDITOR_MEMLO;
ignoreAdditionalData = ETrue;
break;
}
case KErrDiskFull:
{
errorNote = ETrue;
resourceID = R_CHAT_CEDITOR_MEMFULL;
ignoreAdditionalData = ETrue;
break;
}
// flowthrough
case ECSPPartiallySuccessful:
case ECSPSuccessful:
case KErrNone:
{
CHAT_DP_TXT( "IMNoteMapper::ShowNoteL - not an error" );
return; // don't show any notes
}
case ECSPRecipientBlockedSender: // recipient has blocked sender
{
resourceID = R_CHAT_RECIPIENT_BLOCKED_MESSAGES;
ignoreAdditionalData = EFalse;
errorNote = ETrue;
softkeyOk = ETrue;
break;
}
// flowthrough
case ESearchNotSupported:
case ECSPNotSupported: // Service not supported
case ECSPServiceNotAgreed: // Service not agreed
{
resourceID = R_CHAT_ERROR_SERVICE_ERR;
ignoreAdditionalData = ETrue;
break;
}
case ECSPWrongPassword: // Invalid password
{
resourceID = R_CHAT_LOGIN_PASSER_NOTE;
ignoreAdditionalData = ETrue;
break;
}
case ECSPCannotDeliver: // Unable to deliver
{
resourceID = R_CHAT_INVITE_SEND_ERROR;
ignoreAdditionalData = ETrue;
break;
}
// flowthrough
case ECSPServiceUnavailable: // Service unavailable
case ECSPMessageQueueFull: // Message queue is full
{
resourceID = R_CHAT_ERROR_SERV_BUSY;
ignoreAdditionalData = ETrue;
break;
}
case ECSPUnsupportedVersion: // Version not supported
{
resourceID = R_CHAT_ERROR_GEN_ERROR;
ignoreAdditionalData = ETrue;
break;
}
case ECSPInvalidSearchId: // Invalid search id. Search timed out.
case ECSPSearchTimeout: // Search timed out
{
resourceID = R_CHAT_ERROR_SEARCH_FAIL;
ignoreAdditionalData = ETrue;
break;
}
// flowthrough
case ECSPTooManyHits: // Too many hits
case ECSPTooBroadSearchCriteria: // Too broad search criteria
{
errorNote = EFalse;
resourceID = R_CHAT_INOTE_TOO_MANY_HITS;
ignoreAdditionalData = ETrue;
break;
}
// flowthrough
case KErrTimedOut: //Time out for requests
case ECSPSessionExpired: // Session expired
case ECSPForcedLogout: // Forced logout
{
IMDialogUtils::DisplayQueryDialogL( R_CHAT_CONERROR_NOTE );
break;
}
case ECSPGroupDoesNotExist: // Group does not exist
{
resourceID = R_CHAT_ERROR_NO_GROUP;
ignoreAdditionalData = ETrue;
break;
}
case ECSPInvalidParameter + Imps_ERROR_BASE: // Flowthrough
case ECSPGroupDoesNotExist + Imps_ERROR_BASE:
{
// Manually entered group id was not found from server
resourceID = R_CHAT_INOTE_CNOTFOUND;
ignoreAdditionalData = ETrue;
break;
}
// flowthrough
case ECSPGroupNotJoined: // Group is not joined
//start
case ECSPCannotJoinRejected: // Rejected
//end
case ECSPNotAGroupMember: // Access removed
case ECSPGroupIsRestricted: // Kicked out
{
errorNote = EFalse;
resourceID = R_CHAT_INOTE_KICKED;
ignoreAdditionalData = ETrue;
break;
}
case ECSPScreennameInUse: // Screen name already in use
{
errorNote = EFalse;
resourceID = R_CHAT_JOIN_SAME_N;
ignoreAdditionalData = ETrue;
break;
}
// flowthrough
case ECSPMaxNumberOfGroupsForUser: // The maximum number of groups has been reached for the user
case ECSPMaxNumberOfGroupsForServer: // The maximum number of groups has been reached for the server
{
errorNote = EFalse;
resourceID = R_CHAT_INOTE_GROUP_FULL;
ignoreAdditionalData = ETrue;
break;
}
case ECSPInsufficientGroupPrivileges: // Insufficient group privileges
{
resourceID = R_CHAT_JOIN_NOTE_ERROR;
ignoreAdditionalData = ETrue;
break;
}
case ECSPMaxNumberOfJoinedUsers: // The maximum number of joined users has been reached
{
errorNote = EFalse;
resourceID = R_CHAT_INOTE_CHAT_FULL;
ignoreAdditionalData = ETrue;
break;
}
// flowthrough
case ECSPDomainNotSupported: // Domain not supported
case ECSPRecipientNotLoggedIn: // Message recipient not logged in
{
errorNote = ETrue;
resourceID = R_CHAT_ERROR_NOT_REACH;
break;
}
case ECSPUnknownUserId: // Unknown user
{
errorNote = ETrue;
resourceID = R_CHAT_ERROR_WRONG_WVID;
if ( aAdditionalData == KNullDesC )
{
resourceID = R_CHAT_SERVERCONT_IDS_EXIST_SERVER;
ignoreAdditionalData = ETrue;
}
break;
}
case ECSPUnknownUserId + Imps_ERROR_BASE:
{
// User has started conversation by entering user id
// manually -> user not found from server
errorNote = ETrue;
resourceID = R_CHAT_INOTE_NAME_NOTFOUND;
break;
}
case EServerContactListFull: // contact list on the server is full
{
errorNote = ETrue;
resourceID = R_QTN_CHAT_SERVER_FULL;
break;
}
case ECorruptedContent:
{
confirmationNote = ETrue;
resourceID = R_QTN_MMS_UPLOAD_INFO_CORRUPTED;
ignoreAdditionalData = ETrue;
break;
}
case EGeneralServerError: // flowthrough
default: // Unknown error -> show general note
{
defaultNote = ETrue;
errorNote = ETrue;
ignoreAdditionalData = ETrue;
resourceID = R_CHAT_ERROR_GEN_ERROR;
break;
}
}
if ( resourceID != 0 )
{
if ( confirmationNote )
{
IMDialogUtils::DisplayQueryDialogL( resourceID );
}
else
{
HBufC* prompt = NULL;
if ( aAdditionalData == KNullDesC || defaultNote || ignoreAdditionalData )
{
prompt = CEikonEnv::Static()->AllocReadResourceLC( resourceID );
}
else
{
prompt = StringLoader::LoadLC( resourceID, aAdditionalData );
}
if ( errorNote )
{
IMDialogUtils::DisplayErrorNoteL( *prompt, softkeyOk );
}
else
{
IMDialogUtils::DisplayNoteDialogL( *prompt );
}
CleanupStack::PopAndDestroy( prompt );
}
}
}
// End of File