--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/upnpframework/upnpcommand/src/upnpnotehandler.cpp Thu Dec 17 08:52:00 2009 +0200
@@ -0,0 +1,432 @@
+/*
+* 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: Source file for CUpnpNoteHandler class.
+*
+*/
+
+
+// INCLUDE FILES
+// system
+#include <bautils.h> // BaflUtils
+#include <eikenv.h> // CEikonEnv
+#include <AknWaitDialog.h> // CAknWaitDialog
+#include <StringLoader.h> // StringLoader
+#include <aknnotewrappers.h> // CAknErrorNote
+// upnpframework / common ui
+#include "upnpcommonui.h" // CUPnPCommonUI
+// command internal
+#include <upnpcommandresources.rsg> // UpnpCommand resource file
+#include "upnpnotehandler.h"
+
+_LIT( KComponentLogfile, "upnpcommand.log");
+#include "upnplog.h"
+
+
+// CONSTANTS
+_LIT( KResFileName, "\\resource\\upnpcommandresources.rsc" );
+
+// --------------------------------------------------------------------------
+// CUpnpNoteHandler::NewL
+// Creates an instance of the implementation.
+// --------------------------------------------------------------------------
+//
+CUpnpNoteHandler* CUpnpNoteHandler::NewL()
+ {
+ __LOG( "[UpnpCommand]\t CUpnpNoteHandler::NewL" );
+
+ // Create instance
+ CUpnpNoteHandler* self = NULL;
+ self = new (ELeave) CUpnpNoteHandler();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpNoteHandler::CUpnpNoteHandler
+// First phase construction.
+// --------------------------------------------------------------------------
+//
+CUpnpNoteHandler::CUpnpNoteHandler()
+ {
+ __LOG( "[UpnpCommand]\t CUpnpNoteHandler::Constructor" );
+
+ iWaitNote = NULL;
+
+ // DRM note will be shown only once
+ iDrmNoteShown = EFalse;
+ }
+
+// --------------------------------------------------------------------------
+// Destructor.
+// --------------------------------------------------------------------------
+//
+CUpnpNoteHandler::~CUpnpNoteHandler()
+ {
+ __LOG( "[UpnpCommand]\t CUpnpNoteHandler::Destructor" );
+
+ // If wait note is running, finish it
+ if( iWaitNote )
+ {
+ TRAP_IGNORE( iWaitNote->ProcessFinishedL() );
+ }
+
+ // Un-load resource file
+ if ( iResFileOffset )
+ {
+ CEikonEnv::Static()->DeleteResourceFile( iResFileOffset );
+ iResFileOffset = 0;
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpNoteHandler::ConstructL
+// Perform the second phase of two phase construction. Reserves the Upnp Fw
+// resources (they are released when the task is destroyed).
+// --------------------------------------------------------------------------
+//
+void CUpnpNoteHandler::ConstructL()
+ {
+ __LOG( "[UpnpCommand]\t CUpnpNoteHandler::ConstructL" );
+
+ // Get the pointer to coe env (owned by Eikon env)
+ CEikonEnv* coeEnv = CEikonEnv::Static();
+ if( !coeEnv )
+ {
+ User::Leave( KErrNotSupported );
+ }
+
+ // Get the filesession reference from coe env
+ RFs& fileSession = coeEnv->FsSession();
+
+ // Load resource file
+ TFileName rscFileName( KResFileName );
+ TFileName dllName;
+ Dll::FileName( dllName );
+ TBuf<2> drive = dllName.Left( 2 ); // Drive letter followed by ':'
+ rscFileName.Insert( 0, drive );
+
+ // Get the exact filename of the resource file
+ BaflUtils::NearestLanguageFile( fileSession, rscFileName );
+
+ // Check if the resource file exists or not
+ if ( !BaflUtils::FileExists( fileSession, rscFileName ) )
+ {
+ __LOG( "[UpnpCommand]\t Resource file does not exist!" );
+ User::Leave( KErrNotFound );
+ }
+
+ // Read the resource file offset
+ iResFileOffset = coeEnv->AddResourceFileL( rscFileName );
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpNoteHandler::RunConnectingWaitNote
+// Launches the "Connecting" wait note.
+// --------------------------------------------------------------------------
+//
+TInt CUpnpNoteHandler::RunConnectingWaitNote()
+ {
+ __LOG( "[UpnpCommand]\t CUpnpNoteHandler::\
+RunConnectingWaitNote" );
+
+ TInt status = KErrNone;
+ status = RunWaitNote( R_COMMAND_CONNECTING_WAIT_NOTE );
+ return status;
+ }
+
+
+// --------------------------------------------------------------------------
+// CUpnpNoteHandler::ShowDrmNoteL
+// Show "DRM protected files not supported." info note.
+// --------------------------------------------------------------------------
+//
+void CUpnpNoteHandler::ShowDrmNoteL()
+ {
+ __LOG( "[UpnpCommand]\t CUpnpNoteHandler::ShowDrmNoteL" );
+
+ if( !iDrmNoteShown )
+ {
+ iDrmNoteShown = ETrue;
+ ShowErrorNoteL( R_COMMAND_DRM_FILE_TEXT );
+ }
+ else
+ {
+ __LOG( "[UpnpCommand]\t CUpnpNoteHandler::ShowDrmNoteL, skipped" );
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpNoteHandler::ShowConnectionLostNoteL
+// Show "Connection failed." info note.
+// --------------------------------------------------------------------------
+//
+void CUpnpNoteHandler::ShowConnectionLostNoteL()
+ {
+ __LOG( "[UpnpCommand]\t CUpnpNoteHandler::ShowConnectionLostNoteL" );
+
+ ShowErrorNoteL( R_COMMAND_ERR_CON_FAILED_TEXT );
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpNoteHandler::ShowLocalMSStartErrorNoteL
+// Show "Connection failed." info note.
+// --------------------------------------------------------------------------
+//
+void CUpnpNoteHandler::ShowLocalMSStartErrorNoteL()
+ {
+ __LOG( "[UpnpCommand]\t CUpnpNoteHandler::ShowLocalMSStartErrorNoteL" );
+
+ // local mediaserver refuses to start.
+ // use "connection failed" - this describes the error best.
+ ShowErrorNoteL( R_COMMAND_ERR_CON_FAILED_TEXT );
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpNoteHandler::ShowCopyInfoNoteL
+// Show "%N files copied to %U" info note.
+// --------------------------------------------------------------------------
+//
+void CUpnpNoteHandler::ShowCopyInfoNoteL( TInt aCount,
+ const TDesC& aServerName )
+ {
+ __LOG( "[UpnpCommand]\t CUpnpNoteHandler::ShowCopyInfoNoteL" );
+
+ HBufC* infoText = NULL;
+
+ if( aCount == 1 )
+ {
+ infoText = StringLoader::LoadLC(
+ R_COMMAND_INFO_COPY_EXT_ONE_TEXT,
+ aServerName );
+ }
+ else
+ {
+ infoText = StringLoader::LoadLC(
+ R_COMMAND_INFO_COPY_EXT_MANY_TEXT,
+ aServerName,
+ aCount );
+ }
+
+ ShowInfoNoteL( *infoText );
+
+ CleanupStack::PopAndDestroy( infoText );
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpNoteHandler::ShowMoveInfoNoteL
+// Show "1 file moved to %U" info note.
+// --------------------------------------------------------------------------
+//
+void CUpnpNoteHandler::ShowMoveInfoNoteL( TInt aCount,
+ const TDesC& aServerName )
+ {
+ __LOG( "[UpnpCommand]\t CUpnpNoteHandler::ShowMoveInfoNoteL" );
+ // NOTE: defect in UI spec. Missing loc text. Using
+ // "N files copied" localisation instead.
+
+ HBufC* infoText = NULL;
+
+ if( aCount == 1 )
+ {
+ infoText = StringLoader::LoadLC(
+ R_COMMAND_INFO_MOVE_EXT_ONE_TEXT,
+ aServerName );
+ }
+ else
+ {
+ infoText = StringLoader::LoadLC(
+ R_COMMAND_INFO_MOVE_EXT_MANY_TEXT,
+ aServerName,
+ aCount );
+ }
+
+ ShowInfoNoteL( *infoText );
+
+ CleanupStack::PopAndDestroy( infoText );
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpNoteHandler::ShowCopyErrorNoteL
+// Show "Selected device does not support this operation" error note
+// --------------------------------------------------------------------------
+//
+void CUpnpNoteHandler::ShowCopyErrorNoteL()
+ {
+ __LOG( "[UpnpCommand]\t CUpnpNoteHandler::ShowCopyErrorNoteL" );
+
+ ShowErrorNoteL( R_COMMAND_ERR_GENERAL_FAILURE_TEXT );
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpNoteHandler::ShowMoveErrorNoteL
+// Show "Selected device does not support this operation" error note
+// --------------------------------------------------------------------------
+//
+void CUpnpNoteHandler::ShowMoveErrorNoteL()
+ {
+ __LOG( "[UpnpCommand]\t CUpnpNoteHandler::ShowMoveErrorNoteL" );
+
+ ShowErrorNoteL( R_COMMAND_ERR_GENERAL_FAILURE_TEXT );
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpNoteHandler::ShowCopyDisconnectionErrorNoteL
+// Show "Connection lost, some files may not be copied" error note
+// --------------------------------------------------------------------------
+//
+void CUpnpNoteHandler::ShowCopyDisconnectionErrorNoteL()
+ {
+ __LOG( "[UpnpCommand]\t CUpnpNoteHandler::\
+ShowCopyDisconnectionErrorNoteL" );
+
+ ShowErrorNoteL( R_COMMAND_ERR_CONN_LOST_COPY_TEXT );
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpNoteHandler::ShowMoveDisconnectionErrorNoteL
+// Show "Connection lost. Some files might not be moved" error note
+// --------------------------------------------------------------------------
+//
+void CUpnpNoteHandler::ShowMoveDisconnectionErrorNoteL()
+ {
+ __LOG( "[UpnpCommand]\t CUpnpNoteHandler::\
+ShowMoveDisconnectionErrorNoteL" );
+
+ ShowErrorNoteL( R_COMMAND_ERR_CONN_LOST_MOVE_TEXT);
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpNoteHandler::ShowPlaybackFailedNoteL
+// Show "Playback failed on the remote device for unknown error.
+// Try again" info note.
+// --------------------------------------------------------------------------
+//
+void CUpnpNoteHandler::ShowPlaybackFailedNoteL()
+ {
+ __LOG( "[UpnpCommand]\t CUpnpNoteHandler::ShowPlaybackFailedNoteL" );
+
+ ShowErrorNoteL( R_COMMAND_ERR_RENDERING_FAILED_UNKNOWN_TEXT );
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpNoteHandler::RunWaitNote
+// Launches the wait note.
+// --------------------------------------------------------------------------
+//
+TInt CUpnpNoteHandler::RunWaitNote( TInt aResource )
+ {
+ __LOG( "[UpnpCommand]\t CUpnpNoteHandler::RunWaitNote" );
+
+ TInt status = KErrNone;
+
+
+ // If the note is already showing
+ if( iWaitNote )
+ {
+ status = KErrInUse;
+ }
+ else
+ {
+ // Create the wait note
+ iWaitNote = new CAknWaitDialog(
+ ( REINTERPRET_CAST( CEikDialog**, &iWaitNote ) ), ETrue );
+ if( iWaitNote )
+ {
+ // Execute the wait note
+ TBool noteResult = EFalse;
+ TRAP( status, noteResult =
+ iWaitNote->ExecuteLD(
+ aResource ) );
+ if( !noteResult )
+ {
+ status = KErrCancel;
+ }
+
+ // Clean up
+ iWaitNote = NULL;
+ }
+ else
+ {
+ // If we failed to allocate memory for the note
+ status = KErrNoMemory;
+ }
+
+ }
+
+ return status;
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpNoteHandler::CloseWaitNote
+// Closes the "Activating sharing" wait note.
+// --------------------------------------------------------------------------
+//
+void CUpnpNoteHandler::CloseWaitNote()
+ {
+ __LOG( "[UpnpCommand]\t CUpnpNoteHandler::CloseWaitNote" );
+
+ // If wait note is running, finish it
+ if( iWaitNote )
+ {
+ TRAP_IGNORE( iWaitNote->ProcessFinishedL() );
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpNoteHandler::ShowInfoNoteL
+// Show info note
+// --------------------------------------------------------------------------
+//
+void CUpnpNoteHandler::ShowInfoNoteL( const TDesC& aText )
+ {
+ __LOG( "[UpnpCommand]\t CUpnpNoteHandler::ShowInfoNoteL" );
+
+ CAknInformationNote* infoNote =
+ new ( ELeave ) CAknInformationNote( ETrue );
+ infoNote->ExecuteLD( aText );
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpNoteHandler::ShowErrorNoteL
+// Show error note
+// --------------------------------------------------------------------------
+//
+void CUpnpNoteHandler::ShowErrorNoteL( TInt aResource )
+ {
+ __LOG( "[UpnpCommand]\t CUpnpNoteHandler::ShowInfoNoteL" );
+
+ // Load the string, and show the note
+ HBufC* errorText = StringLoader::LoadLC( aResource );
+ CAknInformationNote* errorNote =
+ new ( ELeave ) CAknInformationNote( ETrue );
+ errorNote->ExecuteLD( *errorText );
+ CleanupStack::PopAndDestroy( errorText );
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpNoteHandler::ResetDrmNoteCount
+// Drm note can shoud be shown only one in operation
+// this reset calculator so that note can be shown again
+// --------------------------------------------------------------------------
+//
+void CUpnpNoteHandler::ResetDrmNoteCount()
+ {
+ __LOG( "[UpnpCommand]\t CUpnpNoteHandler::ResetDrmNoteCount" );
+ iDrmNoteShown = EFalse;
+ }
+
+// End of File