calendarui/organizerplugin/aiagendaplugin2/src/aicalendarplugin2focusdata.cpp
author andy simpson <andrews@symbian.org>
Thu, 02 Sep 2010 15:47:07 +0100
branchRCL_3
changeset 67 1539a383d7b6
parent 27 55d60436f00b
parent 66 bd7edf625bdd
permissions -rw-r--r--
Merge after removal of incorrect RCL_3 drop

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

#include "aicalendarplugin2focusdata.h"
#include <eikenv.h> // For CEikonEnv
#include <apgtask.h>
#include <apgcli.h>

void TAiCalendarFocusData::LaunchCalendarApplicationL()
    {
    CEikonEnv* eikenv = CEikonEnv::Static();
    if( !eikenv )
        {
        return;
        }
    TApaTaskList taskList( eikenv->WsSession() );
    TApaTask task = taskList.FindApp( KCalendarAppUID );

    HBufC16* tail = NULL;
    CommandTailL( tail );
    CleanupStack::PushL( tail );

    // copy the 16-bit data into 8-bit buffer
    HBufC8* paramBuf = HBufC8::NewLC( tail->Size() );
    TPtr8 tailBuf = paramBuf->Des();
    tailBuf.Copy( reinterpret_cast<const TUint8*>( tail->Ptr() ),
                  tail->Size() );

    if( task.Exists() )  // Calendar already open
        {
        const TUid dummyUID = { 0x0 };
        task.SendMessage( dummyUID, tailBuf );
        }
    else  // Launch Calendar into day view
        {
        TApaAppInfo appInfo;
        RApaLsSession lsSession;
        if( lsSession.Connect() == KErrNone )
            {
            CleanupClosePushL( lsSession );

            if( lsSession.GetAppInfo( appInfo, KCalendarAppUID ) == KErrNone )
                {
                CApaCommandLine* cmdLine = CApaCommandLine::NewLC();
                cmdLine->SetExecutableNameL( appInfo.iFullName );
                cmdLine->SetCommandL( EApaCommandRun );
                cmdLine->SetTailEndL( tailBuf );

                lsSession.StartApp( *cmdLine );
                CleanupStack::PopAndDestroy( cmdLine );
                }
            CleanupStack::PopAndDestroy();  // lsSession, cannot use pop parameter here!
            }
        }
    CleanupStack::PopAndDestroy( 2, tail );
    }

void TAiCalendarFocusData::CommandTailL( HBufC16*& aTailBuffer )
    {
    /*
    Command line parameters:

    Opening calendar views:
    --------------
    (opens on today if omitted)
        "DAY"
        "WEEK"
        "MONTH"
        "TODO"

    Opening on today:
    ---------------------------------
        "TODAY"

    Opening on specific day - focused by time:
    ----------------------------------------------------------------------
    ---
        "DATE YYYY MM DD HH MM SS MMMMMM"
        (Getting TTime to provide above string: TTime::FormatL: "%F%Y %M %D %H %T %S %C")

    Opening editor:
    --------------
        (using entries local UID)
        "LUID 1234567890"
        
    Opening viewer:
    --------------
        (using entries local UID)
        "LUIDVIEWER 1234567890"

    */
    switch( iType )
        {
        case EAI2CalOpenEvent:
            {
            aTailBuffer = HBufC::NewLC( KAICal2DefaultBufferLen ); // "DATE YYYY MM DD HH MM SS MMMMMM"
            if( !iOpenInViewer )
                {
                aTailBuffer->Des().Append( KAICal2CmdLUID );
                }
            else
                {
                aTailBuffer->Des().Append( KAICal2CmdLUIDViewer );
                }
            aTailBuffer->Des().AppendNum( iLocalUid );
            CleanupStack::Pop( aTailBuffer );
            break;
            }
        case EAI2CalOpenOnEventDay:
            {
            aTailBuffer = HBufC::NewLC( KAICal2DefaultBufferLen ); // "DATE YYYY MM DD HH MM SS MMMMMM"
            TPtr ptr( aTailBuffer->Des() );
            TTime todayStart;
            todayStart.HomeTime();
            const TDateTime x( todayStart.DateTime().Year(),
                               todayStart.DateTime().Month(),
                               todayStart.DateTime().Day(), 0, 0, 0, 0 );
            if( iEntryTime < x )
                {
                todayStart.FormatL( ptr, KAICal2CmdTimeFormat );
                }
            else
                {
                iEntryTime.FormatL( ptr, KAICal2CmdTimeFormat );
                }
            aTailBuffer->Des().Insert( 0, KAICal2CmdDAY );
            CleanupStack::Pop( aTailBuffer );
            break;
            }
        default:
            {
            aTailBuffer = KAICal2CmdTODAY().AllocL();
            break;
            }
        }

    }