searchfw/plugins/notessearchplugin/src/notessearchplugin.cpp
author William Roberts <williamr@symbian.org>
Thu, 01 Apr 2010 09:32:04 +0100
branchCompilerCompatibility
changeset 17 b5a86db05ae8
parent 0 f979ecb2b13e
permissions -rw-r--r--
Fix RVCT 4.0 error "non-standard form for taking address of member function" - Bug 647

/*
* Copyright (c) 2006-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:   Plugin for note information search.
*
*/



//System Includes

#include <AknsConstants.h>
//#include <apacmdlin.h>
#include <barsread.h> 
#include <barsc.h>
#include <apgcli.h>
#include <apacmdln.h> 
#include <fbs.h> 
#include <utf.h>
#include <NpdApi.h>
#include <data_caging_path_literals.hrh>
#include <coemain.h>
//Search FW Common includes
#include <searchcontentsearcher.h>
#include <searchcondition.h>
#include <searchcontent.h>
#include <searchiconinfo.h>
#include <searchdocumentid.h>
#include <searchcommon.h>
#include <bautils.h>
#include <w32std.h>

#include <notespluginsresource.rsg> 
#include <notespluginicons.mbg>

#include <apgtask.h>
//User includes
#include "notessearchplugin.h" 
#include "notessearcher.h"
#include "notessearchpluginutils.h"

//Constants
_LIT( KResoureFileName, "notespluginsresource.RSC" );
_LIT( KNotesPluginMifFileName , "notespluginicons.mif" );
_LIT  (KNotePadDocumentName, "c:Notepad.dat");

// -----------------------------------------------------------------------------
// constructor
// -----------------------------------------------------------------------------
//
CNotesSearchPlugin::CNotesSearchPlugin() 
    {
    }


// -----------------------------------------------------------------------------
// two-phased constructor
// -----------------------------------------------------------------------------
//
CNotesSearchPlugin*  CNotesSearchPlugin::NewL()
    {
    CNotesSearchPlugin*  self = new(ELeave) CNotesSearchPlugin();
    CleanupStack::PushL( self );
    (*self).ConstructL();
    CleanupStack::Pop( self );
    return self;
    }

// -----------------------------------------------------------------------------
// destrudtor
// -----------------------------------------------------------------------------
//
CNotesSearchPlugin::~CNotesSearchPlugin()       
    {
    
    }

// -----------------------------------------------------------------------------
// second phase construction
// -----------------------------------------------------------------------------
//
void CNotesSearchPlugin::ConstructL()
    {            
    
    }

// -----------------------------------------------------------------------------
// CNotesSearchPlugin::GetSupportedContentL
// 
// -----------------------------------------------------------------------------
//
void CNotesSearchPlugin::GetSupportedContentL( RPointerArray<CSearchContent>& aContent ) 
    {
     
     //content class notes
     CSearchContent* contentClass = CSearchContent::NewL( CSearchContent::ETypeContentClass );
     CSearchIconInfo*  classIconinfo = CSearchIconInfo::NewL( );
    
     RFs fsSession;
     RResourceFile resourceFile;    	
     TFileName resourceFileName;
	 User::LeaveIfError( fsSession.Connect() );    
     
     
     TPtrC driveLetter = TParsePtrC( RProcess().FileName() ).Drive();
     TFileName mifFileName( driveLetter );
     mifFileName.Append( KDC_APP_BITMAP_DIR );
     mifFileName.Append( KNotesPluginMifFileName );
    
     resourceFileName.Copy( driveLetter );  
     resourceFileName.Append( KDC_ECOM_RESOURCE_DIR );
     resourceFileName.Append( KResoureFileName );
     
      BaflUtils::NearestLanguageFile( fsSession, resourceFileName );
      
     resourceFile.OpenL(fsSession, resourceFileName );
  	 resourceFile.ConfirmSignatureL(0); 
       
       
     //From <AknsConstants.h>
     classIconinfo->SetSkinId( KAknsIIDQsnFrNotepad  );    
     classIconinfo->SetIconFileL( mifFileName );
     classIconinfo->SetIconIndex( EMbmNotespluginiconsQgn_prop_nrtyp_note );
     classIconinfo->SetIconMaskIndex( EMbmNotespluginiconsQgn_prop_nrtyp_note_mask );
          
     contentClass->SetIconInfo( classIconinfo );
     contentClass->SetContentId( KSearchCClassNotesUid );
     contentClass->SetSubContentId( 0 );
     contentClass->SetPluginId( this->PluginId() ); 
     
     HBufC8* readBuffer=resourceFile.AllocReadLC( R_QTN_SEARCH_TYPES_NOTES );
		const TPtrC16 ptrReadBuffer(( TText16*) readBuffer->Ptr(),
									( readBuffer->Length()+1 )>>1 );	
	 HBufC *iCaption = ptrReadBuffer.AllocL();								
	 
     CleanupStack::PopAndDestroy( readBuffer ); 
     contentClass->SetCaptionL( *iCaption );
     aContent.Append( contentClass );
     resourceFile.Close();
     if(iCaption)
    {
    	delete iCaption;
    	iCaption = NULL;
    }
     
     }

// -----------------------------------------------------------------------------
// 
// -----------------------------------------------------------------------------
//
TBool  CNotesSearchPlugin::IsSupportedContent( TUid aContentId  ) 
    {
    if( aContentId.iUid  == KSearchCClassNotesUid.iUid  /*|| aContentId == KSearchCFolderMemoUid */ )
    {
     return ETrue; 
    }
    return EFalse;
    }


// -----------------------------------------------------------------------------
// Creates the content searcher 
// -----------------------------------------------------------------------------
//
MSearchContentSearcher* CNotesSearchPlugin::ContentSearcherL( const RArray<TUid>& aContentIdArray, 
                                                              const CSearchCondition& aCondition,
                                                              MSearchPluginObserver& aObserver)

    { 
    for( TInt j = 0; j < aContentIdArray.Count(); j++ ) 
	    {
	     
	    if( (aContentIdArray[j].iUid == KSearchCClassNotesUid.iUid ))
	        {	
		    //  create the content searcher  
            iNotesSearcher =  CNotesSearcher::NewL( aContentIdArray , aCondition ,PluginId(), aObserver );					
            return iNotesSearcher;
            }
	     }
	
	return NULL;   
    
    }              

// -----------------------------------------------------------------------------
// Launches the notepad application corresponding to the document id
// -----------------------------------------------------------------------------
//

void CNotesSearchPlugin::LaunchApplicationL( const TDesC8& aLaunchInfo )
    {
            HBufC *temp = HBufC::NewL(KMaxFileName) ;
            TPtr docIdPtr = temp->Des();
            TInt noteKey;
		    CnvUtfConverter::ConvertToUnicodeFromUtf8( docIdPtr,aLaunchInfo);
		    TLex16 myDocId(docIdPtr);
		    TInt err = myDocId.Val(noteKey);
		    _LIT( KNotePadExe, "notepad.exe" ); 	
            delete   temp;
            temp = NULL;   
            if(KErrNone == err)
            {
            	
            
            if(iNotesSearcher->CheckIfEntryExistsL(noteKey))
            {
            HBufC8* numberInDecimal = aLaunchInfo.AllocLC();
            RWsSession ws;
            User::LeaveIfError( ws.Connect() );
            TUid uid( TUid::Uid( 0x10005907 ) );
            TUid uid2( TUid::Uid( 0x1000590C ) );
            TApaTaskList taskList(ws);
            TApaTask task = taskList.FindApp( uid  );
            TBool taskExists = task.Exists();
            if( taskExists ) 
                {
                task.SendMessage( uid2 , aLaunchInfo );
                task.BringToForeground();
                }
            ws.Close();
           if( !taskExists )
        	    {
        RApaLsSession apaLsSession;
        User::LeaveIfError( apaLsSession.Connect() );
        CleanupClosePushL( apaLsSession );
        
        // Prepare for the launch of notepad application
        CApaCommandLine* cmdLine = CApaCommandLine::NewLC();
		        
        cmdLine->SetExecutableNameL( KNotePadExe );
        cmdLine->SetCommandL( EApaCommandOpen );
        cmdLine->SetDocumentNameL(KNotePadDocumentName);

        TPtrC8 ptr(  (TText8*)(numberInDecimal->Ptr())  ,  numberInDecimal->Des().Size() );
        cmdLine->SetTailEndL( ptr);

        // Launch the  notepad application
        User::LeaveIfError( apaLsSession.StartApp( *cmdLine ) );
		        CleanupStack::PopAndDestroy( 2 );
        }
           CleanupStack::PopAndDestroy( 1 );
           }	        
	    }
	        else
	        {
	        		User::Leave( KErrNotFound );
	        }
           
       
    }
    
//end of file